Browse Source

✨ feat(mes): 添加用户已上工的错误码检查

YunaiV 5 months ago
parent
commit
32a7d14d01

+ 2 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/pro/workrecord/MesProWorkRecordDO.java

@@ -3,8 +3,10 @@ package cn.iocoder.yudao.module.mes.dal.dataobject.pro.workrecord;
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO;
 import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import lombok.*;
 
 import java.time.LocalDateTime;

+ 1 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java

@@ -283,6 +283,7 @@ public interface ErrorCodeConstants {
 
     // ========== MES 生产管理-工作记录(1-040-508-000) ==========
     ErrorCode WORK_RECORD_NOT_CLOCK_IN = new ErrorCode(1_040_508_001, "当前用户未上工,无法下工");
+    ErrorCode WORK_RECORD_ALREADY_CLOCK_IN = new ErrorCode(1_040_508_002, "当前用户已上工,请先下工再操作");
 
     // ========== MES 质量管理-质检方案(1-040-600-000) ==========
     ErrorCode QC_TEMPLATE_NOT_EXISTS = new ErrorCode(1_040_600_000, "质检方案不存在");

+ 7 - 2
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workrecord/MesProWorkRecordServiceImpl.java

@@ -17,6 +17,7 @@ import org.springframework.validation.annotation.Validated;
 import java.time.LocalDateTime;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WORK_RECORD_ALREADY_CLOCK_IN;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WORK_RECORD_NOT_CLOCK_IN;
 
 /**
@@ -48,8 +49,13 @@ public class MesProWorkRecordServiceImpl implements MesProWorkRecordService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long clockInWorkRecord(Long userId, Long workstationId) {
-        // 1. 校验工作站是否存在
+        // 1.1 校验工作站是否存在
         workstationService.validateWorkstationExists(workstationId);
+        // 1.2 校验是否重复上线
+        MesProWorkRecordDO record = workRecordMapper.selectByUserId(userId);
+        if (record != null && ObjUtil.equal(MesProWorkRecordTypeEnum.CLOCK_IN.getType(), record.getType())) {
+            throw exception(WORK_RECORD_ALREADY_CLOCK_IN);
+        }
 
         // 2. 写入上线流水
         MesProWorkRecordLogDO log = MesProWorkRecordLogDO.builder().userId(userId)
@@ -57,7 +63,6 @@ public class MesProWorkRecordServiceImpl implements MesProWorkRecordService {
         workRecordLogMapper.insert(log);
 
         // 3. 更新用户工作站状态:如果没有记录,或先删除旧记录
-        MesProWorkRecordDO record = workRecordMapper.selectByUserId(userId);
         if (record == null) {
             record = MesProWorkRecordDO.builder().userId(userId).workstationId(workstationId)
                     .type(MesProWorkRecordTypeEnum.CLOCK_IN.getType()).clockInTime(LocalDateTime.now()).build();