|
|
@@ -0,0 +1,608 @@
|
|
|
+package com.management.platform.service.impl;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.management.platform.entity.*;
|
|
|
+import com.management.platform.mapper.*;
|
|
|
+import com.management.platform.service.MobileEquipmentService;
|
|
|
+import com.management.platform.util.HttpRespMsg;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.time.DayOfWeek;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.temporal.TemporalAdjusters;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class MobileEquipmentServiceImpl implements MobileEquipmentService {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private EquipmentArchiveMapper equipmentArchiveMapper;
|
|
|
+ @Resource
|
|
|
+ private EquipmentInspectionRecordMapper inspectionRecordMapper;
|
|
|
+ @Resource
|
|
|
+ private EquipmentInspectionDetailMapper inspectionDetailMapper;
|
|
|
+ @Resource
|
|
|
+ private EquipmentMaintenanceRecordMapper maintenanceRecordMapper;
|
|
|
+ @Resource
|
|
|
+ private EquipmentMaintenanceDetailMapper maintenanceDetailMapper;
|
|
|
+ @Resource
|
|
|
+ private EquipmentTransferRecordMapper transferRecordMapper;
|
|
|
+ @Resource
|
|
|
+ private InspectionLibraryMapper inspectionLibraryMapper;
|
|
|
+ @Resource
|
|
|
+ private MaintenanceLibraryMapper maintenanceLibraryMapper;
|
|
|
+ @Resource
|
|
|
+ private MaintenanceOrderMapper maintenanceOrderMapper;
|
|
|
+ @Resource
|
|
|
+ private DepartmentMapper departmentMapper;
|
|
|
+ @Resource
|
|
|
+ private UserMapper userMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getRecentHistory(HttpServletRequest request, Integer pageIndex, Integer pageSize) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = getLoginUser(request, msg);
|
|
|
+ if (user == null) {
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ int page = pageIndex == null ? 1 : pageIndex;
|
|
|
+ int size = pageSize == null ? 20 : pageSize;
|
|
|
+
|
|
|
+ List<Map<String, Object>> all = new ArrayList<>();
|
|
|
+
|
|
|
+ QueryWrapper<EquipmentInspectionRecord> iq = new QueryWrapper<>();
|
|
|
+ iq.eq("company_id", user.getCompanyId());
|
|
|
+ iq.orderByDesc("created_time");
|
|
|
+ iq.last("LIMIT 100");
|
|
|
+ for (EquipmentInspectionRecord r : inspectionRecordMapper.selectList(iq)) {
|
|
|
+ Map<String, Object> item = new HashMap<>();
|
|
|
+ item.put("recordType", "inspection");
|
|
|
+ item.put("recordTime", r.getCreatedTime());
|
|
|
+ item.put("equipmentCode", r.getEquipmentCode());
|
|
|
+ item.put("equipmentId", r.getEquipmentId());
|
|
|
+ item.put("resultText", r.getOverallResult() != null && r.getOverallResult() == 1 ? "通过检查" : "存在隐患");
|
|
|
+ item.put("resultStatus", r.getOverallResult());
|
|
|
+ item.put("maintenanceLevel", null);
|
|
|
+ item.put("maintenanceLevelText", "-");
|
|
|
+ all.add(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<EquipmentMaintenanceRecord> mq = new QueryWrapper<>();
|
|
|
+ mq.eq("company_id", user.getCompanyId());
|
|
|
+ mq.orderByDesc("created_time");
|
|
|
+ mq.last("LIMIT 100");
|
|
|
+ for (EquipmentMaintenanceRecord r : maintenanceRecordMapper.selectList(mq)) {
|
|
|
+ Map<String, Object> item = new HashMap<>();
|
|
|
+ item.put("recordType", "maintenance");
|
|
|
+ item.put("recordTime", r.getCreatedTime());
|
|
|
+ item.put("equipmentCode", r.getEquipmentCode());
|
|
|
+ item.put("equipmentId", r.getEquipmentId());
|
|
|
+ item.put("resultText", r.getInspectionResult() != null && r.getInspectionResult() == 1 ? "通过检查" : "存在隐患");
|
|
|
+ item.put("resultStatus", r.getInspectionResult());
|
|
|
+ item.put("maintenanceLevel", r.getMaintenanceLevel());
|
|
|
+ item.put("maintenanceLevelText", r.getMaintenanceLevel() != null && r.getMaintenanceLevel() == 2 ? "二级保养" : "一级保养");
|
|
|
+ all.add(item);
|
|
|
+ }
|
|
|
+
|
|
|
+ all.sort((a, b) -> {
|
|
|
+ LocalDateTime ta = (LocalDateTime) a.get("recordTime");
|
|
|
+ LocalDateTime tb = (LocalDateTime) b.get("recordTime");
|
|
|
+ if (ta == null && tb == null) return 0;
|
|
|
+ if (ta == null) return 1;
|
|
|
+ if (tb == null) return -1;
|
|
|
+ return tb.compareTo(ta);
|
|
|
+ });
|
|
|
+
|
|
|
+ int from = (page - 1) * size;
|
|
|
+ int to = Math.min(from + size, all.size());
|
|
|
+ List<Map<String, Object>> pageData = from >= all.size() ? new ArrayList<>() : all.subList(from, to);
|
|
|
+
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("data", pageData);
|
|
|
+ result.put("total", all.size());
|
|
|
+ msg.data = result;
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getEquipmentByCode(String equipmentCode, HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = getLoginUser(request, msg);
|
|
|
+ if (user == null) {
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ String code = resolveEquipmentCode(equipmentCode);
|
|
|
+ if (StringUtils.isBlank(code)) {
|
|
|
+ msg.setError("设备编号不能为空");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ EquipmentArchive equipment = findEquipmentByCode(code);
|
|
|
+ if (equipment == null) {
|
|
|
+ msg.setError("未找到该设备");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ msg.data = buildMobileDetail(equipment, user);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getMobileDetail(Integer equipmentId, HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = getLoginUser(request, msg);
|
|
|
+ if (user == null) {
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ EquipmentArchive equipment = equipmentArchiveMapper.selectById(equipmentId);
|
|
|
+ if (equipment == null || equipment.getIsDeleted() == 1) {
|
|
|
+ msg.setError("设备不存在");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ msg.data = buildMobileDetail(equipment, user);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getInspectionForm(Integer equipmentId, HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = getLoginUser(request, msg);
|
|
|
+ if (user == null) {
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ EquipmentArchive equipment = equipmentArchiveMapper.selectById(equipmentId);
|
|
|
+ if (equipment == null || equipment.getIsDeleted() == 1) {
|
|
|
+ msg.setError("设备不存在");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ InspectionRoleInfo roleInfo = resolveInspectionRole(equipment, user);
|
|
|
+ if (roleInfo == null) {
|
|
|
+ msg.setError("当前设备无需您执行点检,或您暂无点检权限");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ QueryWrapper<InspectionLibrary> qw = new QueryWrapper<>();
|
|
|
+ qw.eq("is_enabled", 1).orderByAsc("sort_order").orderByAsc("id");
|
|
|
+ List<InspectionLibrary> items = inspectionLibraryMapper.selectList(qw);
|
|
|
+
|
|
|
+ Map<String, Object> data = new HashMap<>();
|
|
|
+ data.put("equipmentId", equipment.getId());
|
|
|
+ data.put("equipmentCode", equipment.getEquipmentCode());
|
|
|
+ data.put("equipmentName", equipment.getEquipmentName());
|
|
|
+ data.put("inspectorRole", roleInfo.roleName);
|
|
|
+ data.put("inspectionType", roleInfo.inspectionType);
|
|
|
+ data.put("inspectorName", user.getName());
|
|
|
+ data.put("stationLeaderName", findStationLeaderName(equipment.getDepartmentId()));
|
|
|
+ data.put("items", items);
|
|
|
+ msg.data = data;
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpRespMsg submitInspection(Integer equipmentId, String detailListJson, String photoUrl,
|
|
|
+ HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = getLoginUser(request, msg);
|
|
|
+ if (user == null) {
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(photoUrl)) {
|
|
|
+ msg.setError("请上传点检照片");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ EquipmentArchive equipment = equipmentArchiveMapper.selectById(equipmentId);
|
|
|
+ if (equipment == null || equipment.getIsDeleted() == 1) {
|
|
|
+ msg.setError("设备不存在");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ InspectionRoleInfo roleInfo = resolveInspectionRole(equipment, user);
|
|
|
+ if (roleInfo == null) {
|
|
|
+ msg.setError("当前设备无需您执行点检");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONArray details;
|
|
|
+ try {
|
|
|
+ details = JSON.parseArray(detailListJson);
|
|
|
+ } catch (Exception e) {
|
|
|
+ msg.setError("点检明细格式错误");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ if (details == null || details.isEmpty()) {
|
|
|
+ msg.setError("请完成点检项");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean hasAbnormal = false;
|
|
|
+ for (int i = 0; i < details.size(); i++) {
|
|
|
+ JSONObject item = details.getJSONObject(i);
|
|
|
+ Integer checkResult = item.getInteger("checkResult");
|
|
|
+ if (checkResult != null && checkResult == 2) {
|
|
|
+ hasAbnormal = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ EquipmentInspectionRecord record = new EquipmentInspectionRecord();
|
|
|
+ record.setEquipmentId(equipment.getId());
|
|
|
+ record.setEquipmentCode(equipment.getEquipmentCode());
|
|
|
+ record.setEquipmentName(equipment.getEquipmentName());
|
|
|
+ record.setInspectorUserId(user.getId());
|
|
|
+ record.setInspectorName(user.getName());
|
|
|
+ record.setInspectorRole(roleInfo.roleName);
|
|
|
+ record.setInspectionType(roleInfo.inspectionType);
|
|
|
+ record.setOverallResult(hasAbnormal ? 2 : 1);
|
|
|
+ record.setPhotoUrl(photoUrl);
|
|
|
+ record.setCompanyId(user.getCompanyId());
|
|
|
+ record.setCreatedTime(LocalDateTime.now());
|
|
|
+ inspectionRecordMapper.insert(record);
|
|
|
+
|
|
|
+ for (int i = 0; i < details.size(); i++) {
|
|
|
+ JSONObject item = details.getJSONObject(i);
|
|
|
+ EquipmentInspectionDetail detail = new EquipmentInspectionDetail();
|
|
|
+ detail.setRecordId(record.getId());
|
|
|
+ detail.setLibraryId(item.getInteger("libraryId"));
|
|
|
+ detail.setInspectionName(item.getString("inspectionName"));
|
|
|
+ detail.setInspectionDetail(item.getString("inspectionDetail"));
|
|
|
+ detail.setCheckResult(item.getInteger("checkResult"));
|
|
|
+ detail.setSortOrder(i + 1);
|
|
|
+ inspectionDetailMapper.insert(detail);
|
|
|
+ }
|
|
|
+
|
|
|
+ msg.data = record.getId();
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getMaintenanceForm(Integer equipmentId, Integer maintenanceLevel, HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = getLoginUser(request, msg);
|
|
|
+ if (user == null) {
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ EquipmentArchive equipment = equipmentArchiveMapper.selectById(equipmentId);
|
|
|
+ if (equipment == null || equipment.getIsDeleted() == 1) {
|
|
|
+ msg.setError("设备不存在");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ int level = maintenanceLevel == null ? 1 : maintenanceLevel;
|
|
|
+
|
|
|
+ QueryWrapper<MaintenanceLibrary> qw = new QueryWrapper<>();
|
|
|
+ qw.eq("is_enabled", 1);
|
|
|
+ qw.eq("maintenance_level", level);
|
|
|
+ qw.orderByAsc("maintenance_part").orderByAsc("sort_order").orderByAsc("id");
|
|
|
+ List<MaintenanceLibrary> allItems = maintenanceLibraryMapper.selectList(qw);
|
|
|
+
|
|
|
+ Map<String, List<MaintenanceLibrary>> grouped = allItems.stream()
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
+ item -> StringUtils.defaultIfBlank(item.getMaintenancePart(), "其他"),
|
|
|
+ LinkedHashMap::new,
|
|
|
+ Collectors.toList()));
|
|
|
+
|
|
|
+ Map<String, Object> data = new HashMap<>();
|
|
|
+ data.put("equipmentId", equipment.getId());
|
|
|
+ data.put("equipmentCode", equipment.getEquipmentCode());
|
|
|
+ data.put("equipmentName", equipment.getEquipmentName());
|
|
|
+ data.put("maintenanceLevel", level);
|
|
|
+ data.put("maintenanceUserName", user.getName());
|
|
|
+ data.put("operatorUserName", equipment.getResponsiblePerson());
|
|
|
+ data.put("partGroups", grouped);
|
|
|
+ msg.data = data;
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public HttpRespMsg submitMaintenance(Integer equipmentId, Integer maintenanceLevel, Integer inspectionResult,
|
|
|
+ Integer operatorEvaluation, String detailListJson,
|
|
|
+ HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = getLoginUser(request, msg);
|
|
|
+ if (user == null) {
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ EquipmentArchive equipment = equipmentArchiveMapper.selectById(equipmentId);
|
|
|
+ if (equipment == null || equipment.getIsDeleted() == 1) {
|
|
|
+ msg.setError("设备不存在");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ JSONArray details;
|
|
|
+ try {
|
|
|
+ details = JSON.parseArray(detailListJson);
|
|
|
+ } catch (Exception e) {
|
|
|
+ msg.setError("保养明细格式错误");
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ EquipmentMaintenanceRecord record = new EquipmentMaintenanceRecord();
|
|
|
+ record.setEquipmentId(equipment.getId());
|
|
|
+ record.setEquipmentCode(equipment.getEquipmentCode());
|
|
|
+ record.setEquipmentName(equipment.getEquipmentName());
|
|
|
+ record.setMaintenanceLevel(maintenanceLevel == null ? 1 : maintenanceLevel);
|
|
|
+ record.setMaintenanceUserId(user.getId());
|
|
|
+ record.setMaintenanceUserName(user.getName());
|
|
|
+ record.setOperatorUserId(null);
|
|
|
+ record.setOperatorUserName(equipment.getResponsiblePerson());
|
|
|
+ record.setInspectionResult(inspectionResult == null ? 1 : inspectionResult);
|
|
|
+ record.setOperatorEvaluation(operatorEvaluation == null ? 1 : operatorEvaluation);
|
|
|
+ record.setCompanyId(user.getCompanyId());
|
|
|
+ record.setCreatedTime(LocalDateTime.now());
|
|
|
+ maintenanceRecordMapper.insert(record);
|
|
|
+
|
|
|
+ if (details != null) {
|
|
|
+ for (int i = 0; i < details.size(); i++) {
|
|
|
+ JSONObject item = details.getJSONObject(i);
|
|
|
+ EquipmentMaintenanceDetail detail = new EquipmentMaintenanceDetail();
|
|
|
+ detail.setRecordId(record.getId());
|
|
|
+ detail.setLibraryId(item.getInteger("libraryId"));
|
|
|
+ detail.setMaintenancePart(item.getString("maintenancePart"));
|
|
|
+ detail.setMaintenanceContent(item.getString("maintenanceContent"));
|
|
|
+ detail.setIsChecked(item.getInteger("isChecked") != null && item.getInteger("isChecked") == 1 ? 1 : 0);
|
|
|
+ detail.setSortOrder(i + 1);
|
|
|
+ maintenanceDetailMapper.insert(detail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ msg.data = record.getId();
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg listMaintenanceRecords(Integer equipmentId) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ QueryWrapper<EquipmentMaintenanceRecord> mq = new QueryWrapper<>();
|
|
|
+ mq.eq("equipment_id", equipmentId).orderByDesc("created_time");
|
|
|
+ List<EquipmentMaintenanceRecord> mobileRecords = maintenanceRecordMapper.selectList(mq);
|
|
|
+
|
|
|
+ QueryWrapper<MaintenanceOrder> oq = new QueryWrapper<>();
|
|
|
+ oq.eq("equipment_id", equipmentId).orderByDesc("planned_date");
|
|
|
+ List<MaintenanceOrder> planRecords = maintenanceOrderMapper.selectList(oq);
|
|
|
+
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ result.put("mobileRecords", mobileRecords);
|
|
|
+ result.put("planRecords", planRecords);
|
|
|
+ msg.data = result;
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg listTransferRecords(Integer equipmentId, HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = getLoginUser(request, msg);
|
|
|
+ if (user == null) {
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ syncTransferRecordsInternal(equipmentId, user.getCompanyId());
|
|
|
+
|
|
|
+ QueryWrapper<EquipmentTransferRecord> qw = new QueryWrapper<>();
|
|
|
+ qw.eq("equipment_id", equipmentId).orderByDesc("transfer_time");
|
|
|
+ msg.data = transferRecordMapper.selectList(qw);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg syncTransferRecords(Integer equipmentId, HttpServletRequest request) {
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ User user = getLoginUser(request, msg);
|
|
|
+ if (user == null) {
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+ syncTransferRecordsInternal(equipmentId, user.getCompanyId());
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void syncTransferRecordsInternal(Integer equipmentId, Integer companyId) {
|
|
|
+ EquipmentArchive equipment = equipmentArchiveMapper.selectById(equipmentId);
|
|
|
+ if (equipment == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 预留企业微信调拨工单同步接口,当前无外部数据源时不写入模拟数据
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String, Object> buildMobileDetail(EquipmentArchive equipment, User user) {
|
|
|
+ Map<String, Object> data = new HashMap<>();
|
|
|
+ data.put("id", equipment.getId());
|
|
|
+ data.put("equipmentCode", equipment.getEquipmentCode());
|
|
|
+ data.put("equipmentName", equipment.getEquipmentName());
|
|
|
+ data.put("equipmentModel", equipment.getEquipmentModel());
|
|
|
+ data.put("workPosition", equipment.getWorkPosition());
|
|
|
+ data.put("responsiblePerson", equipment.getResponsiblePerson());
|
|
|
+ data.put("equipmentNature", equipment.getEquipmentNature());
|
|
|
+ data.put("equipmentPhotos", equipment.getEquipmentPhotos());
|
|
|
+ data.put("firstRunDate", equipment.getFirstRunDate());
|
|
|
+
|
|
|
+ boolean inspectionDone = isInspectionDoneInCurrentCycle(equipment, user);
|
|
|
+ boolean maintenanceDone = isMaintenanceDoneRecently(equipment);
|
|
|
+
|
|
|
+ data.put("inspectionStatus", inspectionDone ? 1 : 0);
|
|
|
+ data.put("inspectionStatusText", inspectionDone ? "已完成" : "未完成");
|
|
|
+ data.put("maintenanceStatus", maintenanceDone ? 1 : 0);
|
|
|
+ data.put("maintenanceStatusText", maintenanceDone ? "已完成" : "未完成");
|
|
|
+ data.put("nextMaintenanceDate", calcNextMaintenanceDate(equipment));
|
|
|
+ data.put("canInspect", resolveInspectionRole(equipment, user) != null);
|
|
|
+ data.put("photoList", parsePhotoList(equipment.getEquipmentPhotos()));
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isInspectionDoneInCurrentCycle(EquipmentArchive equipment, User user) {
|
|
|
+ InspectionRoleInfo roleInfo = resolveInspectionRole(equipment, user);
|
|
|
+ if (roleInfo == null) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ LocalDateTime cycleStart = getCycleStart(roleInfo.inspectionType);
|
|
|
+ QueryWrapper<EquipmentInspectionRecord> qw = new QueryWrapper<>();
|
|
|
+ qw.eq("equipment_id", equipment.getId());
|
|
|
+ qw.eq("inspection_type", roleInfo.inspectionType);
|
|
|
+ qw.ge("created_time", cycleStart);
|
|
|
+ return inspectionRecordMapper.selectCount(qw) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isMaintenanceDoneRecently(EquipmentArchive equipment) {
|
|
|
+ LocalDateTime monthStart = LocalDate.now().withDayOfMonth(1).atStartOfDay();
|
|
|
+ QueryWrapper<EquipmentMaintenanceRecord> mq = new QueryWrapper<>();
|
|
|
+ mq.eq("equipment_id", equipment.getId());
|
|
|
+ mq.ge("created_time", monthStart);
|
|
|
+ if (maintenanceRecordMapper.selectCount(mq) > 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ QueryWrapper<MaintenanceOrder> oq = new QueryWrapper<>();
|
|
|
+ oq.eq("equipment_id", equipment.getId());
|
|
|
+ oq.in("order_status", 3, 6);
|
|
|
+ oq.ge("actual_date", LocalDate.now().withDayOfMonth(1));
|
|
|
+ return maintenanceOrderMapper.selectCount(oq) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ private LocalDate calcNextMaintenanceDate(EquipmentArchive equipment) {
|
|
|
+ QueryWrapper<MaintenanceOrder> qw = new QueryWrapper<>();
|
|
|
+ qw.eq("equipment_id", equipment.getId());
|
|
|
+ qw.in("order_status", 0, 1, 2);
|
|
|
+ qw.ge("planned_date", LocalDate.now());
|
|
|
+ qw.orderByAsc("planned_date");
|
|
|
+ qw.last("LIMIT 1");
|
|
|
+ MaintenanceOrder next = maintenanceOrderMapper.selectOne(qw);
|
|
|
+ if (next != null && next.getPlannedDate() != null) {
|
|
|
+ return next.getPlannedDate();
|
|
|
+ }
|
|
|
+ if (equipment.getFirstRunDate() != null) {
|
|
|
+ return equipment.getFirstRunDate().plusMonths(1);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private InspectionRoleInfo resolveInspectionRole(EquipmentArchive equipment, User user) {
|
|
|
+ if (equipment.getEquipmentNature() != null && equipment.getEquipmentNature() != 1) {
|
|
|
+ if (!isResponsiblePerson(equipment, user) && !isStationLeader(equipment, user)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isDirector(user) && equipment.getEquipmentNature() != null && equipment.getEquipmentNature() == 1) {
|
|
|
+ return new InspectionRoleInfo("车间主任", 3);
|
|
|
+ }
|
|
|
+ if (isStationLeader(equipment, user)) {
|
|
|
+ return new InspectionRoleInfo("工位长", 2);
|
|
|
+ }
|
|
|
+ if (isResponsiblePerson(equipment, user)) {
|
|
|
+ return new InspectionRoleInfo("责任人", 1);
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isResponsiblePerson(EquipmentArchive equipment, User user) {
|
|
|
+ if (StringUtils.isNotBlank(equipment.getResponsiblePerson())
|
|
|
+ && equipment.getResponsiblePerson().equals(user.getName())) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isStationLeader(EquipmentArchive equipment, User user) {
|
|
|
+ if (equipment.getDepartmentId() == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ Department dept = departmentMapper.selectById(equipment.getDepartmentId());
|
|
|
+ return dept != null && user.getId().equals(dept.getManagerId());
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isDirector(User user) {
|
|
|
+ return user.getRoleName() != null && user.getRoleName().contains("主任");
|
|
|
+ }
|
|
|
+
|
|
|
+ private String findStationLeaderName(Integer departmentId) {
|
|
|
+ if (departmentId == null) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ Department dept = departmentMapper.selectById(departmentId);
|
|
|
+ if (dept == null || StringUtils.isBlank(dept.getManagerId())) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ User manager = userMapper.selectById(dept.getManagerId());
|
|
|
+ return manager != null ? manager.getName() : "";
|
|
|
+ }
|
|
|
+
|
|
|
+ private LocalDateTime getCycleStart(int inspectionType) {
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
+ if (inspectionType == 1) {
|
|
|
+ return today.atStartOfDay();
|
|
|
+ }
|
|
|
+ if (inspectionType == 2) {
|
|
|
+ LocalDate monday = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
|
|
|
+ return monday.atStartOfDay();
|
|
|
+ }
|
|
|
+ LocalDate monthStart = today.withDayOfMonth(1);
|
|
|
+ if (today.getDayOfMonth() < 15) {
|
|
|
+ monthStart = today.minusMonths(1).withDayOfMonth(15);
|
|
|
+ } else {
|
|
|
+ monthStart = today.withDayOfMonth(15);
|
|
|
+ }
|
|
|
+ return monthStart.atStartOfDay();
|
|
|
+ }
|
|
|
+
|
|
|
+ private EquipmentArchive findEquipmentByCode(String code) {
|
|
|
+ QueryWrapper<EquipmentArchive> qw = new QueryWrapper<>();
|
|
|
+ qw.eq("equipment_code", code);
|
|
|
+ qw.eq("is_deleted", 0);
|
|
|
+ return equipmentArchiveMapper.selectOne(qw);
|
|
|
+ }
|
|
|
+
|
|
|
+ private String resolveEquipmentCode(String raw) {
|
|
|
+ if (StringUtils.isBlank(raw)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String trimmed = raw.trim();
|
|
|
+ if (trimmed.startsWith("{")) {
|
|
|
+ try {
|
|
|
+ JSONObject json = JSON.parseObject(trimmed);
|
|
|
+ if (json.containsKey("equipmentCode")) {
|
|
|
+ return json.getString("equipmentCode");
|
|
|
+ }
|
|
|
+ } catch (Exception ignored) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return trimmed;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String> parsePhotoList(String json) {
|
|
|
+ if (StringUtils.isBlank(json)) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return JSON.parseArray(json, String.class);
|
|
|
+ } catch (Exception e) {
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private User getLoginUser(HttpServletRequest request, HttpRespMsg msg) {
|
|
|
+ String token = request.getHeader("Token");
|
|
|
+ if (StringUtils.isBlank(token)) {
|
|
|
+ token = request.getHeader("TOKEN");
|
|
|
+ }
|
|
|
+ User user = userMapper.selectById(token);
|
|
|
+ if (user == null) {
|
|
|
+ msg.setError("用户未登录");
|
|
|
+ }
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static class InspectionRoleInfo {
|
|
|
+ final String roleName;
|
|
|
+ final int inspectionType;
|
|
|
+
|
|
|
+ InspectionRoleInfo(String roleName, int inspectionType) {
|
|
|
+ this.roleName = roleName;
|
|
|
+ this.inspectionType = inspectionType;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|