package org.jeecg.modules.eam.service.impl;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.flowable.engine.TaskService;
|
import org.flowable.task.api.Task;
|
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.constant.DataBaseConstant;
|
import org.jeecg.common.exception.JeecgBootException;
|
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.common.util.StrUtils;
|
import org.jeecg.common.util.oConvertUtils;
|
import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
|
import org.jeecg.modules.eam.constant.*;
|
import org.jeecg.modules.eam.request.*;
|
import org.jeecg.modules.system.entity.BaseFactory;
|
import org.jeecg.modules.system.entity.BaseFactoryUser;
|
import org.jeecg.modules.system.service.IBaseFactoryService;
|
import org.jeecg.modules.system.service.IBaseFactoryUserService;
|
import org.jeecg.modules.eam.entity.*;
|
import org.jeecg.modules.eam.mapper.EamInspectionOrderMapper;
|
import org.jeecg.modules.eam.service.*;
|
import org.jeecg.modules.eam.util.DateUtils;
|
import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness;
|
import org.jeecg.modules.flowable.apithird.business.service.impl.FlowMyBusinessServiceImpl;
|
import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI;
|
import org.jeecg.modules.flowable.apithird.service.FlowCommonService;
|
import org.jeecg.modules.flowable.service.IFlowDefinitionService;
|
import org.jeecg.modules.flowable.service.IFlowTaskService;
|
import org.jeecg.modules.system.service.ISysDictService;
|
import org.jeecg.modules.system.service.ISysUserService;
|
import org.jeecg.modules.system.vo.UserSelector;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.time.LocalDate;
|
import java.time.ZoneId;
|
import java.time.format.DateTimeFormatter;
|
import java.util.*;
|
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.stream.Collectors;
|
|
/**
|
* @Description: 点检工单
|
* @Author: jeecg-boot
|
* @Date: 2025-04-02
|
* @Version: V1.0
|
*/
|
@Service("IEamInspectionOrderService")
|
public class EamInspectionOrderServiceImpl extends ServiceImpl<EamInspectionOrderMapper, EamInspectionOrder> implements IEamInspectionOrderService, FlowCallBackServiceI {
|
|
@Resource
|
private EamInspectionOrderMapper eamInspectionOrderMapper;
|
@Resource
|
private IEamInspectionOrderDetailService eamInspectionOrderDetailService;
|
@Resource
|
private IEamWeekInspectionDetailService eamWeekInspectionDetailService;
|
@Resource
|
private IBaseFactoryUserService baseFactoryUserService;
|
@Resource
|
private IBaseFactoryService baseFactoryService;
|
@Resource
|
private FlowCommonService flowCommonService;
|
@Resource
|
private IFlowDefinitionService flowDefinitionService;
|
@Resource
|
private IFlowTaskService flowTaskService;
|
@Resource
|
private IEamEquipmentService eamEquipmentService;
|
@Resource
|
private FlowMyBusinessServiceImpl flowMyBusinessService;
|
@Resource
|
private TaskService taskService;
|
@Resource
|
private IEamReportRepairService eamReportRepairService;
|
@Resource
|
private IEamMaintenanceStandardDetailService eamMaintenanceStandardDetailService;
|
@Resource
|
private ISysDictService sysDictService;
|
@Resource
|
private ISysUserService sysUserService;
|
@Resource
|
private IEamBaseHFCodeService eamBaseHFCodeService;
|
|
@Override
|
public IPage<EamInspectionOrder> queryPageList(Page<EamInspectionOrder> page, EamInspectionOrderQuery query) {
|
QueryWrapper<EamInspectionOrder> queryWrapper = new QueryWrapper<>();
|
//用户数据权限
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
if (sysUser == null) {
|
return page;
|
}
|
if (StringUtils.isNotBlank(sysUser.getEquipmentIds())) {
|
//选择了设备,根据设备id过滤设备
|
List<String> equipArr = Arrays.asList(sysUser.getEquipmentIds().split(","));
|
queryWrapper.in("e.equipment_code", equipArr);
|
} else {
|
//没有选择设备,根据中心过滤设备
|
List<BaseFactoryUser> baseFactoryUserList = baseFactoryUserService.
|
list(new LambdaQueryWrapper<BaseFactoryUser>().eq(BaseFactoryUser::getUserId, sysUser.getId()));
|
if (!CollectionUtils.isEmpty(baseFactoryUserList)) {
|
Set<String> factoryIds = baseFactoryUserList.stream().map(BaseFactoryUser::getFactoryId).collect(Collectors.toSet());
|
Set<String> factoryCode = baseFactoryService.listByIds(factoryIds).stream().map(BaseFactory::getOrgCode).collect(Collectors.toSet());
|
queryWrapper.in("e.factory_org_code", factoryCode);
|
}else {
|
return page;
|
}
|
}
|
//查询条件过滤
|
if (query != null) {
|
if (StringUtils.isNotBlank(query.getEquipmentId())) {
|
queryWrapper.eq("wmo.equipment_id", query.getEquipmentId());
|
}
|
if (StringUtils.isNotBlank(query.getOrderNum())) {
|
queryWrapper.like("wmo.order_num", query.getOrderNum());
|
}
|
if (StringUtils.isNotBlank(query.getInspectionStatus())) {
|
queryWrapper.eq("wmo.inspection_status", query.getInspectionStatus());
|
}
|
if (query.getInspectionDateBegin() != null && query.getInspectionDateEnd() != null) {
|
queryWrapper.between("wmo.inspection_date", query.getInspectionDateBegin(), query.getInspectionDateEnd());
|
}
|
//排序
|
if (StringUtils.isNotBlank(query.getColumn()) && StringUtils.isNotBlank(query.getOrder())) {
|
String column = query.getColumn();
|
if (column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) {
|
column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
|
}
|
if (DataBaseConstant.SQL_ASC.equalsIgnoreCase(query.getOrder())) {
|
queryWrapper.orderByAsc("wmo." + oConvertUtils.camelToUnderline(column));
|
} else {
|
queryWrapper.orderByDesc("wmo." + oConvertUtils.camelToUnderline(column));
|
}
|
} else {
|
queryWrapper.orderByDesc("wmo.create_time");
|
}
|
} else {
|
queryWrapper.orderByDesc("wmo.create_time");
|
}
|
|
return eamInspectionOrderMapper.queryPageList(page, queryWrapper);
|
}
|
|
@Override
|
public List<EamInspectionOrder> selectUnCompleteOrder(String expiredDate) {
|
LambdaQueryWrapper<EamInspectionOrder> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.lt(EamInspectionOrder::getInspectionDate, expiredDate);
|
List<String> unCompleteStatus = new ArrayList<>();
|
unCompleteStatus.add(InspectionStatus.WAIT_INSPECTION.name());
|
unCompleteStatus.add(InspectionStatus.UNDER_INSPECTION.name());
|
queryWrapper.in(EamInspectionOrder::getInspectionStatus, unCompleteStatus);
|
queryWrapper.orderByAsc(EamInspectionOrder::getInspectionDate);
|
return eamInspectionOrderMapper.selectList(queryWrapper);
|
}
|
|
/**
|
* 导出获取基本信息
|
* @param equipmentCode 设备编码
|
* @param inspectionDate 点检日期
|
* @return
|
*/
|
@Override
|
public JSONObject exportInspectionOrderBaseInfo(String equipmentCode, String inspectionDate) {
|
if (StrUtils.isEmpty(inspectionDate)) {
|
// 获取当前日期
|
LocalDate currentDate = LocalDate.now();
|
// 定义日期格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
// 格式化当前月份
|
inspectionDate = currentDate.format(formatter);
|
}
|
// 创建结果对象
|
JSONObject result = new JSONObject();
|
EamInspectionOrderBaseResponse eamInspectionOrderBaseResponse = eamInspectionOrderMapper.findInsOrderBaseInfo(equipmentCode, inspectionDate);
|
// 处理单位
|
String factoryOrgCode = eamInspectionOrderBaseResponse.getFactoryName();
|
BaseFactory baseFactory = baseFactoryService.getOne(new LambdaQueryWrapper<BaseFactory>().eq(BaseFactory::getOrgCode, factoryOrgCode.substring(0, 6)));
|
eamInspectionOrderBaseResponse.setFactoryName(baseFactory.getFactoryName());
|
result.put("data",Collections.singletonList(eamInspectionOrderBaseResponse));
|
return result;
|
}
|
|
/**
|
* 日点检项列表
|
* @param equipmentCode 设备编码
|
* @param inspectionDate 点检日期
|
* @return
|
*/
|
@Override
|
public JSONObject exportInspectionOrderDetailList(String equipmentCode, String inspectionDate) {
|
if (StrUtils.isEmpty(inspectionDate)) {
|
// 获取当前日期
|
LocalDate currentDate = LocalDate.now();
|
// 定义日期格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
// 格式化当前月份
|
inspectionDate = currentDate.format(formatter);
|
}
|
// 创建结果对象
|
JSONObject result = new JSONObject();
|
List<EamInsOrderDetailResultResponse> eamInsOrderDetailResultResponseList = eamInspectionOrderMapper.findInsOrderDetailList(equipmentCode, inspectionDate);
|
if (eamInsOrderDetailResultResponseList == null || eamInsOrderDetailResultResponseList.isEmpty()) {
|
return result;
|
}
|
Map<EamInsOrderDetailResultResponse, List<EamInsOrderDetailResultResponse>> groupMap = eamInsOrderDetailResultResponseList
|
.stream().collect(Collectors.groupingBy(
|
// 分组键:包含 itemCode、itemName、itemDemand 的对象
|
item -> new EamInsOrderDetailResultResponse(
|
item.getItemCode(),
|
item.getItemName(),
|
item.getItemDemand()
|
),
|
// 用 TreeMap 作为容器,并指定按 itemCode 排序的比较器
|
() -> new TreeMap<>(Comparator.comparingInt(EamInsOrderDetailResultResponse::getItemCode)),
|
// 收集每组的元素为 List
|
Collectors.toList()
|
));
|
List<Map<String, Object>> resultList = new ArrayList<>();
|
groupMap.forEach((insOrderDetailResultResponse, insOrderDetailResultResponseList) -> {
|
Map<String, Object> resultMap = new LinkedHashMap<>();
|
resultMap.put("itemCode", insOrderDetailResultResponse.getItemCode());
|
resultMap.put("itemName", insOrderDetailResultResponse.getItemName());
|
resultMap.put("itemDemand", insOrderDetailResultResponse.getItemDemand());
|
Map<Integer, EamInsOrderDetailResultResponse> collect = insOrderDetailResultResponseList
|
.stream().collect(Collectors.toMap(
|
// 分组键:提取日期中的“天”
|
item -> {
|
Date date = item.getInspectionDate();
|
LocalDate localDate = date.toInstant()
|
.atZone(ZoneId.systemDefault())
|
.toLocalDate();
|
return localDate.getDayOfMonth(); // 键为“天”(1-31)
|
},
|
// 值:直接使用当前对象(作为初始值)
|
item -> item,
|
// 合并函数:当同一“天”有多个对象时,如何处理(这里示例取第一个)
|
(existing, replacement) -> existing // 若有重复键,保留已存在的对象
|
));
|
for (int i = 1; i <= 31; i++) {
|
if (collect.containsKey(i)) {
|
String inspectionResult = "";
|
if (!StrUtils.isEmpty(collect.get(i).getInspectionResult())) {
|
switch (collect.get(i).getInspectionResult()) {
|
case "NORMAL":
|
inspectionResult = "√";
|
break;
|
case "ANOMALY":
|
inspectionResult = "×";
|
break;
|
case "FAULT":
|
inspectionResult = "△";
|
break;
|
case "CLOSE":
|
inspectionResult = "T";
|
break;
|
}
|
}
|
resultMap.put("inspectionResult" + i, inspectionResult);
|
} else {
|
resultMap.put("inspectionResult" + i, "");
|
}
|
}
|
resultList.add(resultMap);
|
});
|
result.put("data", resultList);
|
return result;
|
}
|
|
/**
|
* 日点检责任人列表
|
* @param equipmentCode 设备编码
|
* @param inspectionDate 点检日期
|
* @return
|
*/
|
@Override
|
public JSONObject exportInspectionOrderDetailUserList(String equipmentCode, String inspectionDate) {
|
if (StrUtils.isEmpty(inspectionDate)) {
|
// 获取当前日期
|
LocalDate currentDate = LocalDate.now();
|
// 定义日期格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
// 格式化当前月份
|
inspectionDate = currentDate.format(formatter);
|
}
|
// 创建结果对象
|
JSONObject result = new JSONObject();
|
List<EamInsOrderDetailUserResponse> eamInsOrderDetailUserResponseList = eamInspectionOrderMapper.findInspectionOrderDetailUserList(equipmentCode, inspectionDate);
|
if (eamInsOrderDetailUserResponseList == null || eamInsOrderDetailUserResponseList.isEmpty()) {
|
return result;
|
}
|
Map<Integer, EamInsOrderDetailUserResponse> groupMap = eamInsOrderDetailUserResponseList.stream().collect(Collectors.toMap(
|
// 分组键:提取日期中的“天”
|
item -> {
|
Date date = item.getInspectionDate();
|
LocalDate localDate = date.toInstant()
|
.atZone(ZoneId.systemDefault())
|
.toLocalDate();
|
return localDate.getDayOfMonth(); // 键为“天”(1-31)
|
},
|
// 值:直接使用当前对象(作为初始值)
|
item -> item,
|
// 合并函数:当同一“天”有多个对象时,如何处理(这里示例取第一个)
|
(existing, replacement) -> existing // 若有重复键,保留已存在的对象
|
));
|
Map<String, Object> resultMap = new LinkedHashMap<>();
|
for (int i = 1; i <= 31; i++) {
|
if (groupMap.containsKey(i)) {
|
EamInsOrderDetailUserResponse eamInsOrderDetailUserResponse = groupMap.get(i);
|
resultMap.put("operator" + i, sysDictService.queryTableDictTextByKey("sys_user", "realname", "username", eamInsOrderDetailUserResponse.getOperator()));
|
resultMap.put("confirmUser" + i, sysDictService.queryTableDictTextByKey("sys_user", "realname", "username", eamInsOrderDetailUserResponse.getConfirmUser()));
|
} else {
|
resultMap.put("operator" + i, "");
|
resultMap.put("confirmUser" + i, "");
|
}
|
}
|
result.put("data", Collections.singletonList(resultMap));
|
return result;
|
}
|
|
/**
|
* 周点检项列表
|
* @param equipmentCode 设备编码
|
* @param inspectionDate 点检日期
|
* @return
|
*/
|
@Override
|
public JSONObject exportWeekInsDetailList(String equipmentCode, String inspectionDate) {
|
if (StrUtils.isEmpty(inspectionDate)) {
|
// 获取当前日期
|
LocalDate currentDate = LocalDate.now();
|
// 定义日期格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
// 格式化当前月份
|
inspectionDate = currentDate.format(formatter);
|
}
|
// 创建结果对象
|
JSONObject result = new JSONObject();
|
List<EamWeekInsDetailResultResponse> eamWeekInsDetailResultResponseList = eamInspectionOrderMapper.findWeekInsDetailList(equipmentCode, inspectionDate);
|
if (eamWeekInsDetailResultResponseList == null || eamWeekInsDetailResultResponseList.isEmpty()) {
|
return result;
|
}
|
Map<EamWeekInsDetailResultResponse, List<EamWeekInsDetailResultResponse>> groupMap = eamWeekInsDetailResultResponseList
|
.stream().collect(Collectors.groupingBy(
|
// 分组键:包含 itemCode、itemName、itemDemand 的对象
|
item -> new EamWeekInsDetailResultResponse(
|
item.getItemCode(),
|
item.getItemName(),
|
item.getItemDemand()
|
),
|
// 用 TreeMap 作为容器,并指定按 itemCode 排序的比较器
|
() -> new TreeMap<>(Comparator.comparingInt(EamWeekInsDetailResultResponse::getItemCode)),
|
// 收集每组的元素为 List
|
Collectors.toList()
|
));
|
List<Map<String, Object>> resultList = new ArrayList<>();
|
groupMap.forEach((weekInsDetailResultResponse, weekInsDetailResultResponseList) -> {
|
Map<String, Object> resultMap = new LinkedHashMap<>();
|
resultMap.put("itemCode", weekInsDetailResultResponse.getItemCode());
|
resultMap.put("itemName", weekInsDetailResultResponse.getItemName());
|
resultMap.put("itemDemand", weekInsDetailResultResponse.getItemDemand());
|
// 使用AtomicInteger作为计数器,从1开始
|
AtomicInteger counter = new AtomicInteger(1);
|
Map<Integer, EamWeekInsDetailResultResponse> collect = weekInsDetailResultResponseList
|
.stream()
|
.collect(Collectors.toMap(
|
// 分组键:使用自增序号(从1开始)
|
item -> counter.getAndIncrement(),
|
// 值:直接使用当前对象
|
item -> item,
|
// 合并函数:当同一序号有多个对象时(理论上不会发生),如何处理
|
(existing, replacement) -> existing, // 若有重复键,保留已存在的对象
|
// 指定Map的具体实现(可选)
|
LinkedHashMap::new // 保持插入顺序
|
));
|
for (int i = 1; i <= 5; i++) {
|
if (collect.containsKey(i)) {
|
String inspectionResult = "";
|
if (!StrUtils.isEmpty(collect.get(i).getInspectionResult())) {
|
switch (collect.get(i).getInspectionResult()) {
|
case "NORMAL":
|
inspectionResult = "√";
|
break;
|
case "ANOMALY":
|
inspectionResult = "×";
|
break;
|
case "FAULT":
|
inspectionResult = "△";
|
break;
|
case "CLOSE":
|
inspectionResult = "T";
|
break;
|
}
|
}
|
resultMap.put("inspectionResult" + i, inspectionResult);
|
} else {
|
resultMap.put("inspectionResult" + i, "");
|
}
|
}
|
resultList.add(resultMap);
|
});
|
result.put("data", resultList);
|
return result;
|
}
|
|
/**
|
* 周点检责任人列表
|
* @param equipmentCode 设备编码
|
* @param inspectionDate 点检日期
|
* @return
|
*/
|
@Override
|
public JSONObject exportWeekInsOrderDetailUserList(String equipmentCode, String inspectionDate) {
|
if (StrUtils.isEmpty(inspectionDate)) {
|
// 获取当前日期
|
LocalDate currentDate = LocalDate.now();
|
// 定义日期格式
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
|
// 格式化当前月份
|
inspectionDate = currentDate.format(formatter);
|
}
|
// 创建结果对象
|
JSONObject result = new JSONObject();
|
List<EamWeekInsDetailUserResponse> eamWeekInsDetailUserResponseList = eamInspectionOrderMapper.findWeekInsOrderDetailUserList(equipmentCode, inspectionDate);
|
if (eamWeekInsDetailUserResponseList == null || eamWeekInsDetailUserResponseList.isEmpty()) {
|
return result;
|
}
|
// 使用AtomicInteger作为计数器,从1开始
|
AtomicInteger counter = new AtomicInteger(1);
|
Map<Integer, EamWeekInsDetailUserResponse> groupMap = eamWeekInsDetailUserResponseList
|
.stream()
|
.collect(Collectors.toMap(
|
// 分组键:使用自增序号(从1开始)
|
item -> counter.getAndIncrement(),
|
// 值:直接使用当前对象(作为初始值)
|
item -> item,
|
// 合并函数:当同一“天”有多个对象时,如何处理(这里示例取第一个)
|
(existing, replacement) -> existing // 若有重复键,保留已存在的对象
|
));
|
Map<String, Object> resultMap = new LinkedHashMap<>();
|
for (int i = 1; i <= 5; i++) {
|
if (groupMap.containsKey(i)) {
|
EamWeekInsDetailUserResponse eamWeekInsDetailUserResponse = groupMap.get(i);
|
resultMap.put("operator" + i, sysDictService.queryTableDictTextByKey("sys_user", "realname", "username", eamWeekInsDetailUserResponse.getInspector()));
|
resultMap.put("confirmUser" + i, sysDictService.queryTableDictTextByKey("sys_user", "realname", "username", eamWeekInsDetailUserResponse.getConfirmUser()));
|
} else {
|
resultMap.put("operator" + i, "");
|
resultMap.put("confirmUser" + i, "");
|
}
|
}
|
result.put("data", Collections.singletonList(resultMap));
|
|
return result;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Result<String> addInspectionOrder(EamInspectionOrderRequest eamInspectionOrderRequest) {
|
List<EamInspectionOrder> eamInspectionOrders = eamInspectionOrderMapper.selectList(new LambdaQueryWrapper<EamInspectionOrder>().eq(EamInspectionOrder::getStandardId, eamInspectionOrderRequest.getStandardId()).eq(EamInspectionOrder::getInspectionDate, eamInspectionOrderRequest.getInspectionDate()).ne(EamInspectionOrder::getInspectionStatus, InspectionStatus.ABOLISH.name()));
|
if (CollectionUtils.isNotEmpty(eamInspectionOrders)) {
|
return Result.error("添加失败,系统已存在当前日期工单!");
|
}
|
EamInspectionOrder eamInspectionOrder = new EamInspectionOrder();
|
BeanUtils.copyProperties(eamInspectionOrderRequest, eamInspectionOrder);
|
//修改状态
|
eamInspectionOrder.setInspectionStatus(InspectionStatus.WAIT_INSPECTION.name());
|
eamInspectionOrder.setDelFlag(CommonConstant.DEL_FLAG_0);
|
//HF码处理
|
EamBaseHFCode eamBaseHFCode = eamBaseHFCodeService.selectByCategory(HfTemplateCategoryEnum.INSPECTION.name());
|
if (eamBaseHFCode == null) {
|
return Result.error("添加失败,未配置点检HF编码!");
|
}
|
eamInspectionOrder.setHfCode(eamBaseHFCode.getHfCode());
|
save(eamInspectionOrder);
|
//处理日点检明细数据
|
if (StrUtil.isNotBlank(eamInspectionOrderRequest.getStandardId())) {
|
List<EamMaintenanceStandardDetail> maintenanceStandardDetailList = eamMaintenanceStandardDetailService.list(new LambdaQueryWrapper<EamMaintenanceStandardDetail>().eq(EamMaintenanceStandardDetail::getStandardId, eamInspectionOrderRequest.getStandardId()).eq(EamMaintenanceStandardDetail::getItemCategory, InspectionItemCategroyEnum.DAY_INSPECTION.name()));
|
if (CollectionUtils.isNotEmpty(maintenanceStandardDetailList)) {
|
List<EamInspectionOrderDetail> inspectionOrderList = maintenanceStandardDetailList.stream().map(EamInspectionOrderDetail::new).collect(Collectors.toList());
|
inspectionOrderList.forEach(tableDetail -> {
|
tableDetail.setOrderId(eamInspectionOrder.getId());
|
tableDetail.setId(null);
|
});
|
eamInspectionOrderDetailService.saveBatch(inspectionOrderList);
|
}
|
}
|
//处理周点检明细数据
|
if (StrUtil.isNotBlank(eamInspectionOrderRequest.getStandardId()) && eamInspectionOrderRequest.getInspectionDate() != null) {
|
LambdaQueryWrapper<EamWeekInspectionDetail> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(EamWeekInspectionDetail::getStandardId, eamInspectionOrderRequest.getStandardId());
|
queryWrapper.between(EamWeekInspectionDetail::getPlanInspectionDate, DateUtils.getFirstDayOfWeek(eamInspectionOrderRequest.getInspectionDate()), DateUtils.getLastDayOfWeek(eamInspectionOrderRequest.getInspectionDate()));
|
queryWrapper.orderByAsc(EamWeekInspectionDetail::getItemCode);
|
List<EamWeekInspectionDetail> eamWeekInspectionDetailList = eamWeekInspectionDetailService.list(queryWrapper);
|
if (CollectionUtil.isEmpty(eamWeekInspectionDetailList)) {
|
List<EamMaintenanceStandardDetail> maintenanceStandardDetailList = eamMaintenanceStandardDetailService.list(new LambdaQueryWrapper<EamMaintenanceStandardDetail>().eq(EamMaintenanceStandardDetail::getStandardId, eamInspectionOrderRequest.getStandardId()).eq(EamMaintenanceStandardDetail::getItemCategory, InspectionItemCategroyEnum.WEEK_INSPECTION.name()));
|
if (CollectionUtils.isNotEmpty(maintenanceStandardDetailList)) {
|
List<EamWeekInspectionDetail> weekInspectionDetailList = maintenanceStandardDetailList.stream().map(EamWeekInspectionDetail::new).collect(Collectors.toList());
|
weekInspectionDetailList.forEach(weekInspectionDetail -> {
|
weekInspectionDetail.setEquipmentId(eamInspectionOrderRequest.getEquipmentId());
|
weekInspectionDetail.setStandardId(eamInspectionOrderRequest.getStandardId());
|
// TODO 周点检日期
|
weekInspectionDetail.setPlanInspectionDate(eamInspectionOrderRequest.getInspectionDate());
|
});
|
eamWeekInspectionDetailService.saveBatch(weekInspectionDetailList);
|
}
|
}
|
}
|
return Result.OK("添加成功!");
|
}
|
|
/**
|
* 触发流程
|
*
|
* @param eamInspectionOrder
|
* @return
|
*/
|
public boolean triggerProcess(EamInspectionOrder eamInspectionOrder) {
|
EamEquipment equipment = eamEquipmentService.getById(eamInspectionOrder.getEquipmentId());
|
if (equipment == null) {
|
return false;
|
} else {
|
eamInspectionOrder.setEquipmentId(equipment.getId());
|
}
|
flowCommonService.initActBusiness("工单号: " + eamInspectionOrder.getOrderNum() + ";设备编号: " + equipment.getEquipmentCode(),
|
eamInspectionOrder.getId(), "IEamInspectionOrderService", "eam_inspection", null);
|
Map<String, Object> variables = new HashMap<>();
|
variables.put("dataId", eamInspectionOrder.getId());
|
if (StrUtil.isEmpty(eamInspectionOrder.getRemark())) {
|
variables.put("organization", "新增点检工单默认启动流程");
|
variables.put("comment", "新增点检工单默认启动流程");
|
} else {
|
variables.put("organization", eamInspectionOrder.getRemark());
|
variables.put("comment", eamInspectionOrder.getRemark());
|
}
|
variables.put("proofreading", true);
|
List<String> usernames = new ArrayList<>();
|
usernames.add(eamInspectionOrder.getOperator());
|
variables.put("NextAssignee", usernames);
|
Result result = flowDefinitionService.startProcessInstanceByKey("eam_inspection", variables);
|
return result.isSuccess();
|
}
|
|
|
@Override
|
public boolean editInspectionOrder(EamInspectionOrderRequest eamInspectionOrderRequest) {
|
EamInspectionOrder eamInspectionOrder = new EamInspectionOrder();
|
BeanUtils.copyProperties(eamInspectionOrderRequest, eamInspectionOrder);
|
if (StrUtil.isNotEmpty(eamInspectionOrder.getOperator())) {
|
eamInspectionOrder.setInspectionStatus(InspectionStatus.UNDER_INSPECTION.name());
|
}
|
super.updateById(eamInspectionOrder);
|
return true;
|
}
|
|
/**
|
* 领取点检工单
|
*
|
* @param id
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public boolean takeInspectionOrder(String id) {
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
if (user == null || !BusinessCodeConst.PCR0001.equals(user.getPost())) {
|
throw new JeecgBootException("不是操作工,无法领取此工单!");
|
}
|
EamInspectionOrder eamInspectionOrder = this.getById(id);
|
if (eamInspectionOrder == null) {
|
return false;
|
} else {
|
eamInspectionOrder.setOperator(user.getUsername());
|
//修改状态
|
eamInspectionOrder.setInspectionStatus(InspectionStatus.UNDER_INSPECTION.name());
|
this.triggerProcess(eamInspectionOrder);
|
this.updateById(eamInspectionOrder);
|
return true;
|
}
|
}
|
|
/**
|
* 作废点检工单
|
*
|
* @param id
|
* @return
|
*/
|
@Override
|
public boolean cancelInspectionOrder(String id) {
|
EamInspectionOrder eamInspectionOrder = this.getById(id);
|
if (eamInspectionOrder == null) {
|
return false;
|
} else {
|
eamInspectionOrder.setInspectionStatus(InspectionStatus.ABOLISH.name());
|
return updateById(eamInspectionOrder);
|
}
|
}
|
|
/**
|
* 点检流程
|
*
|
* @param eamInspectionOrderRequest
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
@EquipmentHistoryLog(operationTag = EquipmentOperationTagEnum.POINT_INSPECTION, businessTable = "eam_inspection_order")
|
public EamInspectionOrder inspectionProcess(EamInspectionOrderRequest eamInspectionOrderRequest) {
|
try {
|
// 检查请求参数
|
if (!isValidRequest(eamInspectionOrderRequest)) {
|
throw new JeecgBootException("非法参数");
|
}
|
|
// 获取当前登录用户
|
LoginUser user = getCurrentUser();
|
if (user == null || StrUtil.isBlank(user.getId())) {
|
throw new JeecgBootException("账号不存在");
|
}
|
eamInspectionOrderRequest.setAssignee(user.getUsername());
|
|
// 获取点检工单信息
|
EamInspectionOrder eamInspectionOrder = getEamInspectionOrder(eamInspectionOrderRequest.getDataId());
|
if (eamInspectionOrder == null) {
|
throw new JeecgBootException("未找到对应数据");
|
}
|
|
// 获取流程业务记录
|
FlowMyBusiness flowMyBusiness = getFlowMyBusiness(eamInspectionOrderRequest.getInstanceId());
|
if (flowMyBusiness == null) {
|
throw new JeecgBootException("流程记录不存在");
|
}
|
|
// 检查用户是否有权限操作任务
|
if (!isUserAuthorized(flowMyBusiness, user)) {
|
throw new JeecgBootException("用户无权操作此任务");
|
}
|
|
// 认领任务
|
if (!claimTask(flowMyBusiness.getTaskId(), user)) {
|
throw new JeecgBootException("任务不存在、已完成或已被他人认领");
|
}
|
|
EamEquipment equipment = eamEquipmentService.getById(eamInspectionOrder.getEquipmentId());
|
if (equipment == null) {
|
throw new JeecgBootException("设备不存在,请检查!");
|
}
|
|
// 检查周保过期时间
|
if (eamInspectionOrderRequest.getTableWeekDetailList() == null || eamInspectionOrderRequest.getTableWeekDetailList().isEmpty()) {
|
List<EamWeekInspectionDetail> weekInspectionDetailList = eamWeekInspectionDetailService.list(new LambdaQueryWrapper<EamWeekInspectionDetail>().eq(EamWeekInspectionDetail::getStandardId, eamInspectionOrderRequest.getStandardId()).between(EamWeekInspectionDetail::getPlanInspectionDate, DateUtils.getFirstDayOfWeek(eamInspectionOrderRequest.getInspectionDate()), DateUtils.getLastDayOfWeek(eamInspectionOrderRequest.getInspectionDate())));
|
if (weekInspectionDetailList != null && !weekInspectionDetailList.isEmpty()) {
|
if (StrUtil.isEmpty(eamInspectionOrderRequest.getOperator())) {
|
Date lastDate = DateUtils.getLastDayOfWeek(eamInspectionOrderRequest.getInspectionDate());
|
if (DateUtils.isSameDay(lastDate, new Date())) {
|
throw new JeecgBootException("本周点检未完成,请进行填报!");
|
}
|
}
|
}
|
}
|
|
// 设置流程变量
|
setupProcessVariables(eamInspectionOrderRequest, eamInspectionOrder, user, equipment);
|
|
// 完成流程任务
|
Result result = flowTaskService.complete(eamInspectionOrderRequest);
|
|
// 根据任务完成结果更新工单状态
|
updateOrderStatus(result, eamInspectionOrderRequest, eamInspectionOrder, user);
|
|
// 更新工单信息
|
updateEamInspectionOrder(eamInspectionOrder);
|
|
//查询数据,进行设备维修处理
|
if (eamInspectionOrder.getInspectionStatus().equals(InspectionStatus.WAIT_CONFIRM.name())) {
|
updateEamInspectionOrderDetail(eamInspectionOrder);
|
}
|
|
return eamInspectionOrder;
|
} catch (Exception e) {
|
throw new JeecgBootException("操作失败:" + e.getMessage());
|
}
|
}
|
|
|
private boolean isValidRequest(EamInspectionOrderRequest request) {
|
return StrUtil.isNotBlank(request.getTaskId()) && StrUtil.isNotBlank(request.getDataId());
|
}
|
|
private LoginUser getCurrentUser() {
|
try {
|
return (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
} catch (Exception e) {
|
return null;
|
}
|
}
|
|
private EamInspectionOrder getEamInspectionOrder(String dataId) {
|
return this.getById(dataId);
|
}
|
|
private FlowMyBusiness getFlowMyBusiness(String instanceId) {
|
List<FlowMyBusiness> businessList = flowMyBusinessService.list(
|
new QueryWrapper<FlowMyBusiness>().eq("process_instance_id", instanceId));
|
return businessList.isEmpty() ? null : businessList.get(0);
|
}
|
|
private boolean isUserAuthorized(FlowMyBusiness flowMyBusiness, LoginUser user) {
|
List<String> todoUsers = JSON.parseArray(flowMyBusiness.getTodoUsers(), String.class);
|
return todoUsers != null && todoUsers.contains(user.getUsername());
|
}
|
|
private boolean claimTask(String taskId, LoginUser user) {
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
|
if (task == null) {
|
return false;
|
}
|
if (task.getAssignee() != null && !task.getAssignee().equals(user.getUsername())) {
|
return false;
|
}
|
taskService.claim(taskId, user.getUsername());
|
return true;
|
}
|
|
private void setupProcessVariables(EamInspectionOrderRequest request, EamInspectionOrder order, LoginUser user, EamEquipment equipment) {
|
Map<String, Object> values = new HashMap<>();
|
if (InspectionStatus.UNDER_INSPECTION.name().equals(order.getInspectionStatus()) && user.getUsername().equals(order.getOperator())) {
|
// 点检人点检结束
|
values.put("dataId", order.getId());
|
values.put("organization", "点检人点检结束");
|
values.put("comment", "点检人点检结束");
|
// 获取下一步执行人
|
List<UserSelector> userSelectors = sysUserService.selectOperatorList(equipment.getEquipmentCode(), equipment.getFactoryOrgCode(), BusinessCodeConst.PCR0002);
|
if (CollectionUtil.isEmpty(userSelectors)) {
|
throw new JeecgBootException("设备未分配给维修工,无法进入下级审批!");
|
}
|
List<String> userApprovalList = userSelectors.stream().map(UserSelector::getUsername).collect(Collectors.toList());
|
values.put("NextAssignee", userApprovalList);
|
request.setComment("点检人点检结束");
|
} else {
|
// 维修工确认
|
values.put("dataId", order.getId());
|
values.put("organization", request.getConfirmComment());
|
values.put("comment", request.getConfirmComment());
|
values.put("confirmation", request.getConfirmDealType());
|
request.setComment(request.getConfirmComment());
|
if ("2".equals(request.getConfirmDealType())) {
|
// 维修工驳回
|
List<String> usernames = new ArrayList<>();
|
usernames.add(order.getOperator());
|
order.setInspectionStatus(InspectionStatus.UNDER_INSPECTION.name());
|
values.put("NextAssignee", usernames);
|
}
|
}
|
request.setValues(values);
|
}
|
|
private void updateOrderStatus(Result result, EamInspectionOrderRequest request, EamInspectionOrder order, LoginUser user) {
|
if (result.isSuccess()) {
|
if (InspectionStatus.UNDER_INSPECTION.name().equals(order.getInspectionStatus()) && StrUtil.isEmpty(request.getConfirmDealType())) {
|
// 点检完成
|
order.setInspectionStatus(InspectionStatus.WAIT_CONFIRM.name());
|
order.setOperateTime(new Date());
|
eamInspectionOrderDetailService.remove(new QueryWrapper<EamInspectionOrderDetail>().eq("order_id", order.getId()));
|
eamInspectionOrderDetailService.saveBatch(request.getTableDetailList());
|
|
//设置周点检
|
if (request.getTableWeekDetailList() != null && !request.getTableWeekDetailList().isEmpty()) {
|
List<EamWeekInspectionDetail> tableWeekDetailList = request.getTableWeekDetailList();
|
for (EamWeekInspectionDetail eamWeekInspectionDetail : tableWeekDetailList) {
|
if (StringUtils.isEmpty(eamWeekInspectionDetail.getInspectionResult())) {
|
break;
|
}
|
eamWeekInspectionDetail.setInspector(user.getUsername());
|
eamWeekInspectionDetail.setInspectTime(new Date());
|
}
|
eamWeekInspectionDetailService.saveOrUpdateBatch(tableWeekDetailList);
|
}
|
} else if (InspectionStatus.WAIT_CONFIRM.name().equals(order.getInspectionStatus()) && StrUtil.isNotEmpty(request.getConfirmDealType())) {
|
// 班组长确认任务
|
order.setInspectionStatus(InspectionStatus.COMPLETE.name());
|
order.setConfirmUser(user.getUsername());
|
order.setConfirmComment(request.getConfirmComment());
|
order.setConfirmDealType(request.getConfirmDealType());
|
order.setConfirmTime(new Date());
|
}
|
}
|
}
|
|
private void updateEamInspectionOrder(EamInspectionOrder eamInspectionOrder) {
|
this.updateById(eamInspectionOrder);
|
}
|
|
/**
|
* 设备是否存在异常,并进行设备维修
|
*
|
* @param eamInspectionOrder
|
*/
|
private void updateEamInspectionOrderDetail(EamInspectionOrder eamInspectionOrder) {
|
List<EamInspectionOrderDetail> eamInspectionOrderDetails = eamInspectionOrderDetailService
|
.list(new LambdaQueryWrapper<EamInspectionOrderDetail>()
|
.eq(EamInspectionOrderDetail::getOrderId, eamInspectionOrder.getId()).eq(EamInspectionOrderDetail::getReportFlag, "1"));
|
|
// TODO 点检完成后自动保修
|
eamReportRepairService.reportRepairFromInspection(eamInspectionOrder.getEquipmentId(), eamInspectionOrder.getOperator(), eamInspectionOrderDetails);
|
}
|
|
/**
|
* 批量作废与领取
|
*
|
* @param ids
|
* @param type
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Result<?> batchCancelOrTakeInspectionOrder(String ids, String type) {
|
if (type == null) {
|
return Result.error("请选择操作类型");
|
}
|
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
List<String> list = Arrays.asList(ids.split(","));
|
QueryWrapper<EamInspectionOrder> queryWrapper = new QueryWrapper<>();
|
queryWrapper.in("id", list);
|
queryWrapper.eq("inspection_status", InspectionStatus.WAIT_INSPECTION.name());
|
List<EamInspectionOrder> eamInspectionOrderList = this.list(queryWrapper);
|
if (!eamInspectionOrderList.isEmpty()) {
|
eamInspectionOrderList.forEach(eamInspectionOrder -> {
|
eamInspectionOrder.setInspectionStatus(type);
|
if (InspectionStatus.UNDER_INSPECTION.name().equals(type)) {
|
eamInspectionOrder.setOperator(loginUser.getUsername());
|
this.triggerProcess(eamInspectionOrder);
|
} else {
|
eamInspectionOrder.setOperator(null);
|
}
|
});
|
this.updateBatchById(eamInspectionOrderList);
|
}
|
return Result.OK("操作成功");
|
}
|
|
|
@Override
|
public Result<?> selectVoById(String id) {
|
List<EamInspectionOrder> eamInspectionOrders = this.list(new QueryWrapper<EamInspectionOrder>().eq("id", id));
|
List<EamInspectionOrderRequest> eamInspectionOrderRequestList = new ArrayList<>();
|
eamInspectionOrders.forEach(eamInspectionOrder -> {
|
EamInspectionOrderRequest eamInspectionOrderRequest = new EamInspectionOrderRequest();
|
BeanUtils.copyProperties(eamInspectionOrder, eamInspectionOrderRequest);
|
List<EamInspectionOrderDetail> eamInspectionOrderDetails = eamInspectionOrderDetailService
|
.list(new QueryWrapper<EamInspectionOrderDetail>().eq("order_id", eamInspectionOrder.getId()));
|
eamInspectionOrderRequest.setTableDetailList(eamInspectionOrderDetails);
|
eamInspectionOrderRequestList.add(eamInspectionOrderRequest);
|
});
|
return Result.ok(eamInspectionOrderRequestList);
|
}
|
|
@Override
|
public void afterFlowHandle(FlowMyBusiness business) {
|
business.getTaskNameId();//接下来审批的节点
|
business.getValues();//前端传进来的参数
|
business.getActStatus();
|
}
|
|
@Override
|
public Object getBusinessDataById(String dataId) {
|
return this.getById(dataId);
|
}
|
|
@Override
|
public Map<String, Object> flowValuesOfTask(String taskNameId, Map<String, Object> values) {
|
return null;
|
}
|
|
@Override
|
public List<String> flowCandidateUsernamesOfTask(String taskNameId, Map<String, Object> values) {
|
//业务是否干预流程,业务干预,流程干预,指定人员进行处理
|
//获取下一步处理人
|
Object object = values.get("NextAssignee");
|
return (List<String>) object;
|
}
|
|
}
|