zhangherong
2025-06-25 23855599412c4d61b38d78f0f3abd3430a48b5b1
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/aspect/EquipmentHistoryLogAspect.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,217 @@
package org.jeecg.modules.eam.aspect;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog;
import org.jeecg.modules.eam.constant.*;
import org.jeecg.modules.eam.entity.*;
import org.jeecg.modules.eam.service.IEamEquipmentHistoryLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
 * è®¾å¤‡å±¥åކ åˆ‡é¢å®žçް
 */
@Aspect
@Component
@Slf4j
public class EquipmentHistoryLogAspect {
    @Autowired
    private IEamEquipmentHistoryLogService equipmentHistoryLogService;
    @Pointcut("@annotation(org.jeecg.modules.eam.aspect.annotation.EquipmentHistoryLog)")
    public void logPointCut() {
    }
    // çŽ¯ç»•é€šçŸ¥ï¼šè®¡ç®—æ‰§è¡Œæ—¶é—´
    @Around("logPointCut()")
    public Object logMethodExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
        long start_time = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long end_time = System.currentTimeMillis();
        saveLog(joinPoint, result);
        log.info("[请求耗时:{}ms]", end_time - start_time);
        return result;
    }
    private void saveLog(JoinPoint joinPoint, Object result) {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        EamEquipmentHistoryLog log = new EamEquipmentHistoryLog();
        EquipmentHistoryLog syslog = method.getAnnotation(EquipmentHistoryLog.class);
        if (syslog != null) {
            log.setBusinessTable(syslog.businessTable());
            log.setOperationTag(syslog.operationTag().name());
            convertResult(log, syslog.operationTag(), result);
            if (StringUtils.isNotBlank(log.getEquipmentId())) {
                equipmentHistoryLogService.save(log);
            }
        }
    }
    private void convertResult(EamEquipmentHistoryLog log, EquipmentOperationTagEnum operationTag, Object result) {
        switch (operationTag) {
            case ACCEPTANCE:
                if (result instanceof EamEquipment) {
                    EamEquipment equipment = (EamEquipment) result;
                    log.setEquipmentId(equipment.getId());
                    log.setBusinessId(equipment.getId());
                    log.setOperator(equipment.getCreateBy());
                    log.setDescription(equipment.getRemark());
                    log.setCreateTime(equipment.getAcceptanceCheckDate());
                }
                break;
            case POINT_INSPECTION:
                if (result instanceof EamInspectionOrder) {
                    EamInspectionOrder order = (EamInspectionOrder) result;
                    if (InspectionStatus.COMPLETE.name().equals(order.getInspectionStatus())) {
                        log.setEquipmentId(order.getEquipmentId());
                        log.setBusinessId(order.getId());
                        log.setOperator(order.getOperator());
                        log.setDescription(order.getConfirmComment());
                        log.setCreateTime(order.getOperateTime());
                    }
                }
                break;
            case WEEK_MAINTENANCE:
                if (result instanceof EamWeekMaintenanceOrder) {
                    EamWeekMaintenanceOrder order = (EamWeekMaintenanceOrder) result;
                    if (WeekMaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) {
                        log.setEquipmentId(order.getEquipmentId());
                        log.setBusinessId(order.getId());
                        log.setOperator(order.getOperator());
                        log.setDescription(order.getFinalAcceptanceComment());
                        log.setCreateTime(order.getActualEndTime());
                    }
                }
                break;
            case SECOND_MAINTENANCE:
                if (result instanceof EamSecondMaintenanceOrder) {
                    EamSecondMaintenanceOrder order = (EamSecondMaintenanceOrder) result;
                    if (SecondMaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) {
                        log.setEquipmentId(order.getEquipmentId());
                        log.setBusinessId(order.getId());
                        log.setOperator(order.getOperator());
                        log.setDescription(order.getConfirmComment());
                        log.setCreateTime(order.getActualEndTime());
                    }
                }
                break;
            case THIRD_MAINTENANCE:
                if (result instanceof EamThirdMaintenanceOrder) {
                    EamThirdMaintenanceOrder order = (EamThirdMaintenanceOrder) result;
                    if (ThirdMaintenanceStatusEnum.COMPLETE.name().equals(order.getMaintenanceStatus())) {
                        log.setEquipmentId(order.getEquipmentId());
                        log.setBusinessId(order.getId());
                        log.setOperator(order.getOperator());
                        log.setDescription(order.getLeaderConfirmComment());
                        log.setCreateTime(order.getActualEndTime());
                    }
                }
                break;
            case REPORT_REPAIR:
                if (result instanceof EamReportRepair) {
                    EamReportRepair repair = (EamReportRepair) result;
                    log.setEquipmentId(repair.getEquipmentId());
                    log.setBusinessId(repair.getId());
                    log.setOperator(repair.getCreateBy());
                    log.setDescription(repair.getFaultDescription());
                    log.setCreateTime(repair.getFaultStartTime());
                }
                break;
            case REPAIRED:
                if (result instanceof EamRepairOrder) {
                    EamRepairOrder order = (EamRepairOrder) result;
                    if (ReportRepairEnum.COMPLETE.name().equals(order.getRepairStatus())) {
                        log.setEquipmentId(order.getEquipmentId());
                        log.setBusinessId(order.getId());
                        log.setOperator(order.getRepairer());
                        log.setDescription(order.getRepairDescription());
                        log.setCreateTime(order.getActualEndTime());
                    }
                }
                break;
            case MAJOR_REPAIR:
                break;
            case PARTIAL_REPAIR:
                break;
            case LEAN_OUT:
                if (result instanceof EamEquipmentLeanOut) {
                    EamEquipmentLeanOut order = (EamEquipmentLeanOut) result;
                    if (EquipmentLeanOutStatusEnum.COMPLETE.name().equals(order.getLeanStatus())) {
                        log.setEquipmentId(order.getEquipmentId());
                        log.setBusinessId(order.getId());
                        log.setOperator(order.getLeanPerson());
                        log.setDescription(order.getLeanReason());
                        log.setCreateTime(order.getLeanStartTime());
                    }
                }
                break;
            case GIVE_BACK:
                break;
            case SEAL_UP:
                if (result instanceof EamEquipmentSealUp) {
                    EamEquipmentSealUp order = (EamEquipmentSealUp) result;
                    if (EquipmentSealUpStatusEnum.COMPLETE.name().equals(order.getSealStatus())) {
                        log.setEquipmentId(order.getEquipmentId());
                        log.setBusinessId(order.getId());
                        log.setOperator(order.getReportUser());
                        log.setDescription(order.getSealUpReason());
                        log.setCreateTime(order.getSealEndTime());
                    }
                }
                break;
            case UNSEALED:
                break;
            case TRANSFERRED:
                if (result instanceof EamEquipmentTransfer) {
                    EamEquipmentTransfer order = (EamEquipmentTransfer) result;
                    if (EquipmentTransferStatusEnum.COMPLETE.name().equals(order.getTransferStatus())) {
                        log.setEquipmentId(order.getEquipmentId());
                        log.setBusinessId(order.getId());
                        log.setOperator(order.getReportUser());
                        log.setDescription(order.getTransferReason());
                        log.setCreateTime(order.getTransferTime());
                    }
                }
                break;
            case SCRAPPED:
                if (result instanceof EamEquipmentScrap) {
                    EamEquipmentScrap order = (EamEquipmentScrap) result;
                    if (EquipmentScrapStatusEnum.COMPLETE.name().equals(order.getScrapStatus())) {
                        log.setEquipmentId(order.getEquipmentId());
                        log.setBusinessId(order.getId());
                        log.setOperator(order.getReportUser());
                        log.setDescription(order.getScrapReason());
                        log.setCreateTime(order.getScrapTime());
                    }
                }
                break;
            default:
                break;
        }
    }
//    private long calculateExecutionTime(JoinPoint joinPoint) {
//        // é€šè¿‡çŽ¯ç»•é€šçŸ¥èŽ·å–ç²¾ç¡®æ—¶é—´
//        // ï¼ˆå®žé™…应使用环绕通知中的start_time和end_time计算)
//        return System.currentTimeMillis() - joinPoint.getArgs()[0].hashCode();
//        // æ­¤å¤„仅为示例,正确做法参见环绕通知实现
//    }
}