package com.qianwen.smartman.modules.fms.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.google.common.collect.Lists;
|
import java.lang.invoke.SerializedLambda;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Set;
|
import java.util.stream.Collectors;
|
import com.qianwen.smartman.common.cache.ParamCache;
|
import com.qianwen.smartman.common.cache.RegionCache;
|
import com.qianwen.smartman.common.constant.CommonConstant;
|
import com.qianwen.smartman.common.constant.FmsConstant;
|
import com.qianwen.smartman.common.utils.MessageUtils;
|
import com.qianwen.core.log.exception.ServiceException;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.smartman.modules.cps.entity.Tray;
|
import com.qianwen.smartman.modules.cps.entity.Workstation;
|
import com.qianwen.smartman.modules.cps.enums.TrayEnum;
|
import com.qianwen.smartman.modules.cps.enums.WorkTypeEnum;
|
import com.qianwen.smartman.modules.cps.service.ITrayService;
|
import com.qianwen.smartman.modules.cps.service.IWorkstationService;
|
import com.qianwen.smartman.modules.cps.service.IWorkstationWorkbenchService;
|
import com.qianwen.smartman.modules.fms.dto.ManualTrayDmpDTO;
|
import com.qianwen.smartman.modules.fms.entity.FmsRealTimeTray;
|
import com.qianwen.smartman.modules.fms.enums.PositionTypeEnum;
|
import com.qianwen.smartman.modules.fms.enums.RealTimePartTypeEnum;
|
import com.qianwen.smartman.modules.fms.enums.ScheStateEnum;
|
import com.qianwen.smartman.modules.fms.forestClient.FmsForestClient;
|
import com.qianwen.smartman.modules.fms.service.IFmsOrderService;
|
import com.qianwen.smartman.modules.fms.service.IFmsRealTimeTrayService;
|
import com.qianwen.smartman.modules.fms.service.IFmsScheduleService;
|
import com.qianwen.smartman.modules.fms.util.FmsForestUtil;
|
import com.qianwen.smartman.modules.fms.vo.ManualTrayVO;
|
import org.springframework.stereotype.Service;
|
|
@Service
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/fms/service/impl/FmsScheduleServiceImpl.class */
|
public class FmsScheduleServiceImpl implements IFmsScheduleService {
|
private final ITrayService trayService;
|
private final IFmsRealTimeTrayService fmsRealTimeTrayService;
|
private final IWorkstationWorkbenchService workstationWorkbenchService;
|
private final IWorkstationService workstationService;
|
private final IFmsOrderService fmsOrderService;
|
private final FmsForestClient fmsForestClient;
|
|
private static /* synthetic */ Object $deserializeLambda$(SerializedLambda lambda) {
|
String implMethodName = lambda.getImplMethodName();
|
boolean z = true;
|
switch (implMethodName.hashCode()) {
|
case -1757019252:
|
if (implMethodName.equals("getCurrentPosition")) {
|
z = true;
|
break;
|
}
|
break;
|
case -1028820157:
|
if (implMethodName.equals("getPartType")) {
|
z = true;
|
break;
|
}
|
break;
|
case -927447111:
|
if (implMethodName.equals("getTrayCode")) {
|
z = true;
|
break;
|
}
|
break;
|
case -557259320:
|
if (implMethodName.equals("getWorkstationId")) {
|
z = false;
|
break;
|
}
|
break;
|
case -75622813:
|
if (implMethodName.equals("getCode")) {
|
z = true;
|
break;
|
}
|
break;
|
case -39017699:
|
if (implMethodName.equals("getCurrentType")) {
|
z = true;
|
break;
|
}
|
break;
|
case 515915377:
|
if (implMethodName.equals("getCurrentStation")) {
|
z = true;
|
break;
|
}
|
break;
|
}
|
switch (z) {
|
case false:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/cps/entity/WorkstationWorkbench") && lambda.getImplMethodSignature().equals("()Ljava/lang/Long;")) {
|
return (v0) -> {
|
return v0.getWorkstationId();
|
};
|
}
|
break;
|
case true:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/fms/entity/FmsRealTimeTray") && lambda.getImplMethodSignature().equals("()Ljava/lang/String;")) {
|
return (v0) -> {
|
return v0.getTrayCode();
|
};
|
}
|
break;
|
case true:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/fms/entity/FmsRealTimeTray") && lambda.getImplMethodSignature().equals("()Ljava/lang/String;")) {
|
return (v0) -> {
|
return v0.getCurrentStation();
|
};
|
}
|
break;
|
case true:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/fms/entity/FmsRealTimeTray") && lambda.getImplMethodSignature().equals("()Ljava/lang/Integer;")) {
|
return (v0) -> {
|
return v0.getCurrentType();
|
};
|
}
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/fms/entity/FmsRealTimeTray") && lambda.getImplMethodSignature().equals("()Ljava/lang/Integer;")) {
|
return (v0) -> {
|
return v0.getCurrentType();
|
};
|
}
|
break;
|
case true:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/fms/entity/FmsRealTimeTray") && lambda.getImplMethodSignature().equals("()Ljava/lang/String;")) {
|
return (v0) -> {
|
return v0.getCurrentPosition();
|
};
|
}
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/fms/entity/FmsRealTimeTray") && lambda.getImplMethodSignature().equals("()Ljava/lang/String;")) {
|
return (v0) -> {
|
return v0.getCurrentPosition();
|
};
|
}
|
break;
|
case RegionCache.VILLAGE_LEVEL /* 5 */:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/cps/entity/Tray") && lambda.getImplMethodSignature().equals("()Ljava/lang/String;")) {
|
return (v0) -> {
|
return v0.getCode();
|
};
|
}
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/cps/entity/Workstation") && lambda.getImplMethodSignature().equals("()Ljava/lang/String;")) {
|
return (v0) -> {
|
return v0.getCode();
|
};
|
}
|
break;
|
case true:
|
if (lambda.getImplMethodKind() == 5 && lambda.getFunctionalInterfaceClass().equals("com/baomidou/mybatisplus/core/toolkit/support/SFunction") && lambda.getFunctionalInterfaceMethodName().equals("apply") && lambda.getFunctionalInterfaceMethodSignature().equals("(Ljava/lang/Object;)Ljava/lang/Object;") && lambda.getImplClass().equals("org/springblade/modules/fms/entity/FmsRealTimeTray") && lambda.getImplMethodSignature().equals("()Ljava/lang/Integer;")) {
|
return (v0) -> {
|
return v0.getPartType();
|
};
|
}
|
break;
|
}
|
throw new IllegalArgumentException("Invalid lambda deserialization");
|
}
|
|
public FmsScheduleServiceImpl(final ITrayService trayService, final IFmsRealTimeTrayService fmsRealTimeTrayService, final IWorkstationWorkbenchService workstationWorkbenchService, final IWorkstationService workstationService, final IFmsOrderService fmsOrderService, final FmsForestClient fmsForestClient) {
|
this.trayService = trayService;
|
this.fmsRealTimeTrayService = fmsRealTimeTrayService;
|
this.workstationWorkbenchService = workstationWorkbenchService;
|
this.workstationService = workstationService;
|
this.fmsOrderService = fmsOrderService;
|
this.fmsForestClient = fmsForestClient;
|
}
|
|
@Override // org.springblade.modules.fms.service.IFmsScheduleService
|
public Boolean check(ManualTrayVO manualTrayVO) {
|
checkManual();
|
checkTrayStatus(manualTrayVO.getTrayCode());
|
FmsRealTimeTray fmsRealTimeTray = (FmsRealTimeTray) this.fmsRealTimeTrayService.getOne((Wrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getTrayCode();
|
}, manualTrayVO.getTrayCode()));
|
checkScheState(fmsRealTimeTray.getScheState());
|
checkTargetHasTray(manualTrayVO);
|
if (PositionTypeEnum.DEVICE.getType().equals(manualTrayVO.getEndType())) {
|
checkPartStatus(fmsRealTimeTray.getPartType(), manualTrayVO.getEndPosition());
|
}
|
checkDeviceStatus(manualTrayVO.getStartType(), manualTrayVO.getStartPosition());
|
checkBoundWorkstation(manualTrayVO, fmsRealTimeTray);
|
return true;
|
}
|
|
private void checkScheState(Integer scheState) {
|
if (ScheStateEnum.WILL_GO.getType().equals(scheState)) {
|
throw new ServiceException(MessageUtils.message("fms.schedule.sche.state.is.will.go", new Object[0]));
|
}
|
}
|
|
private void checkManual() {
|
String isAuto = ParamCache.getValue(FmsConstant.PARAM_KEY);
|
if (Boolean.TRUE.toString().equals(isAuto)) {
|
throw new ServiceException(MessageUtils.message("fms.schedule.only.manual.mode.can.drag", new Object[0]));
|
}
|
}
|
|
private void checkTrayStatus(String trayCode) {
|
Tray tray = (Tray) this.trayService.getOne((Wrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getCode();
|
}, trayCode));
|
if (TrayEnum.StatusEnum.FREEZE.getStatus().equals(tray.getAvailability())) {
|
throw new ServiceException(MessageUtils.message("fms.schedule.tray.is.freeze", new Object[0]));
|
}
|
}
|
|
private void checkBoundWorkstation(ManualTrayVO manualTrayVO, FmsRealTimeTray fmsRealTimeTray) {
|
if (PositionTypeEnum.LOCATION.getType().equals(manualTrayVO.getEndType()) || Func.isEmpty(fmsRealTimeTray.getOrderId())) {
|
return;
|
}
|
List<String> workstationIdList = this.fmsOrderService.listWorkstationByTrayCode(manualTrayVO.getTrayCode());
|
Set<Long> workstationIdSet = new HashSet<>();
|
workstationIdList.forEach(workstationIds -> {
|
List<Long> strings = Func.toLongList(workstationIds);
|
workstationIdSet.addAll(strings);
|
});
|
List<String> workstationCodeList = (List) this.workstationService.listByIds(workstationIdSet).stream().map((v0) -> {
|
return v0.getCode();
|
}).collect(Collectors.toList());
|
if (!workstationCodeList.contains(manualTrayVO.getEndPosition())) {
|
throw new ServiceException(MessageUtils.message("fms.schedule.order.not.assign.to.this.position", new Object[0]));
|
}
|
}
|
|
private void checkPartStatus(Integer partType, String endPosition) {
|
if (Func.isEmpty(partType)) {
|
return;
|
}
|
Workstation workstation = getWorkstation(endPosition);
|
List<Integer> canNotDragPartTypeList = Lists.newArrayList(new Integer[]{Integer.valueOf(RealTimePartTypeEnum.PROCESS_FINISH.getType()), Integer.valueOf(RealTimePartTypeEnum.NONCONFORMING_PRODUCTS.getType())});
|
if (canNotDragPartTypeList.contains(partType) && WorkTypeEnum.PROCESS.getCode().equals(workstation.getDeviceType())) {
|
throw new ServiceException(MessageUtils.message("fms.schedule.part.type.status.is.process.finish", new Object[0]));
|
}
|
}
|
|
private void checkTargetHasTray(ManualTrayVO manualTrayVO) {
|
long count = this.fmsRealTimeTrayService.count((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq(PositionTypeEnum.DEVICE.getType().equals(manualTrayVO.getEndType()), (v0) -> {
|
return v0.getCurrentPosition();
|
}, manualTrayVO.getEndPosition()).eq((v0) -> {
|
return v0.getCurrentStation();
|
}, manualTrayVO.getEndStation())).eq((v0) -> {
|
return v0.getCurrentType();
|
}, manualTrayVO.getEndType()));
|
if (count > CommonConstant.ZERO.intValue()) {
|
throw new ServiceException(MessageUtils.message("fms.schedule.target.position.has.already.exists.tray", new Object[0]));
|
}
|
}
|
|
private void checkDeviceStatus(Integer type, String position) {
|
if (!PositionTypeEnum.DEVICE.getType().equals(type)) {
|
return;
|
}
|
Workstation startPosition = getWorkstation(position);
|
if (WorkTypeEnum.PROCESS.getCode().equals(startPosition.getDeviceType()) && isSingleWorkBench(startPosition.getId()).booleanValue()) {
|
deviceIsInProcess(position);
|
}
|
}
|
|
private Workstation getWorkstation(String workstationCode) {
|
return (Workstation) this.workstationService.getOne((Wrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getCode();
|
}, workstationCode));
|
}
|
|
private Boolean isSingleWorkBench(Long workstationId) {
|
long count = this.workstationWorkbenchService.count((Wrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getWorkstationId();
|
}, workstationId));
|
return Boolean.valueOf(count <= ((long) CommonConstant.ONE.intValue()));
|
}
|
|
private void deviceIsInProcess(String position) {
|
long count = this.fmsRealTimeTrayService.count((Wrapper) ((LambdaQueryWrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getCurrentPosition();
|
}, position)).eq((v0) -> {
|
return v0.getCurrentType();
|
}, PositionTypeEnum.DEVICE.getType())).eq((v0) -> {
|
return v0.getPartType();
|
}, Integer.valueOf(RealTimePartTypeEnum.IN_PROCESS.getType())));
|
if (count > CommonConstant.ZERO.intValue()) {
|
throw new ServiceException(MessageUtils.message("fms.schedule.device.status.is.in.process.can.not.drag.in.or.out", new Object[0]));
|
}
|
}
|
|
@Override // org.springblade.modules.fms.service.IFmsScheduleService
|
public Boolean manualDrag(ManualTrayVO manualTrayVO) {
|
check(manualTrayVO);
|
ManualTrayDmpDTO manualTrayDmpDTO = ManualTrayDmpDTO.builder().TrayCode(manualTrayVO.getTrayCode()).StartPosition(manualTrayVO.getStartPosition()).StartStation(manualTrayVO.getStartStation()).EndPosition(manualTrayVO.getEndPosition()).EndStation(manualTrayVO.getEndStation()).ActionType(manualTrayVO.getActionType()).CurrentType(manualTrayVO.getEndType()).build();
|
try {
|
String returnMessage = this.fmsForestClient.manual(manualTrayDmpDTO);
|
FmsForestUtil.checkMessage(returnMessage, "手动拖拽");
|
return true;
|
} catch (Exception e) {
|
throw new ServiceException("手动拖拽异常");
|
}
|
}
|
}
|