package com.qianwen.smartman.modules.fms.service.impl;
|
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
import org.springframework.stereotype.Service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.qianwen.core.mp.support.Condition;
|
import com.qianwen.core.mp.support.Query;
|
import com.qianwen.smartman.modules.fms.convert.FmsOrderConvert;
|
import com.qianwen.smartman.modules.fms.convert.FmsOrderProcessConvert;
|
import com.qianwen.smartman.modules.fms.convert.FmsOrderProcessFixtureConvert;
|
import com.qianwen.smartman.modules.fms.convert.FmsOrderProcessToolConvert;
|
import com.qianwen.smartman.modules.fms.convert.FmsWorkStationRecordConvert;
|
import com.qianwen.smartman.modules.fms.dto.FmsProducePartDTO;
|
import com.qianwen.smartman.modules.fms.entity.FmsOrder;
|
import com.qianwen.smartman.modules.fms.entity.FmsOrderProcess;
|
import com.qianwen.smartman.modules.fms.entity.FmsOrderProcessFixture;
|
import com.qianwen.smartman.modules.fms.entity.FmsOrderProcessTool;
|
import com.qianwen.smartman.modules.fms.entity.FmsRealTimeTray;
|
import com.qianwen.smartman.modules.fms.enums.OrderSortEnum;
|
import com.qianwen.smartman.modules.fms.enums.RealTimePartTypeEnum;
|
import com.qianwen.smartman.modules.fms.mapper.FmsWorkStationRecordMapper;
|
import com.qianwen.smartman.modules.fms.service.IFmsOrderProcessFixtureService;
|
import com.qianwen.smartman.modules.fms.service.IFmsOrderProcessService;
|
import com.qianwen.smartman.modules.fms.service.IFmsOrderProcessToolService;
|
import com.qianwen.smartman.modules.fms.service.IFmsOrderService;
|
import com.qianwen.smartman.modules.fms.service.IFmsProductionStatisticsService;
|
import com.qianwen.smartman.modules.fms.vo.FmsOrderProcessFixtureVO;
|
import com.qianwen.smartman.modules.fms.vo.FmsOrderProcessToolVO;
|
import com.qianwen.smartman.modules.fms.vo.FmsOrderProcessVO;
|
import com.qianwen.smartman.modules.fms.vo.FmsProduceOrderVO;
|
import com.qianwen.smartman.modules.fms.vo.FmsProducePartVO;
|
import com.qianwen.smartman.modules.fms.vo.FmsProduceProcessVO;
|
import com.qianwen.smartman.modules.fms.vo.FmsProduceQueryVO;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.util.StrUtil;
|
|
@Service
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/fms/service/impl/FmsProductionStatisticsServiceImpl.class */
|
public class FmsProductionStatisticsServiceImpl implements IFmsProductionStatisticsService {
|
private final IFmsOrderService fmsOrderService;
|
private final IFmsOrderProcessService fmsOrderProcessService;
|
private final IFmsOrderProcessToolService fmsOrderProcessToolService;
|
private final IFmsOrderProcessFixtureService fmsOrderProcessFixtureService;
|
private final FmsWorkStationRecordMapper fmsWorkStationRecordMapper;
|
private final FmsRealTimeTrayServiceImpl fmsRealTimeTrayService;
|
|
public FmsProductionStatisticsServiceImpl(final IFmsOrderService fmsOrderService, final IFmsOrderProcessService fmsOrderProcessService, final IFmsOrderProcessToolService fmsOrderProcessToolService, final IFmsOrderProcessFixtureService fmsOrderProcessFixtureService, final FmsWorkStationRecordMapper fmsWorkStationRecordMapper, final FmsRealTimeTrayServiceImpl fmsRealTimeTrayService) {
|
this.fmsOrderService = fmsOrderService;
|
this.fmsOrderProcessService = fmsOrderProcessService;
|
this.fmsOrderProcessToolService = fmsOrderProcessToolService;
|
this.fmsOrderProcessFixtureService = fmsOrderProcessFixtureService;
|
this.fmsWorkStationRecordMapper = fmsWorkStationRecordMapper;
|
this.fmsRealTimeTrayService = fmsRealTimeTrayService;
|
}
|
|
@Override // org.springblade.modules.fms.service.IFmsProductionStatisticsService
|
public IPage<FmsProduceOrderVO> orderPage(Query query, FmsProduceQueryVO filter) {
|
IPage<FmsOrder> page = Condition.getPage(query);
|
String code = filter.getCode();
|
LambdaQueryWrapper<FmsOrder> wrapper = Wrappers.<FmsOrder>lambdaQuery().likeRight(StrUtil.isNotEmpty(code), FmsOrder::getCode, code)
|
.or().likeRight(StrUtil.isNotEmpty(code), FmsOrder::getProductCode, code)
|
.between((StrUtil.isNotEmpty(filter.getPlanStartTimeBegin()) && StrUtil.isNotEmpty(filter.getPlanStartTimeEnd()))
|
, FmsOrder::getPlanStartTime, filter.getPlanStartTimeBegin(), filter.getPlanStartTimeEnd())
|
.between((StrUtil.isNotEmpty(filter.getPlanEndTimeBegin()) && StrUtil.isNotEmpty(filter.getPlanEndTimeEnd())), FmsOrder::getPlanEndTime, filter.getPlanEndTimeBegin(), filter.getPlanEndTimeEnd());
|
/*
|
Wrapper wrapper = (LambdaQueryWrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().likeRight(StrUtil.isNotEmpty(code), (v0) -> {
|
return v0.getCode();
|
}, code).or()).likeRight(StrUtil.isNotEmpty(code), (v0) -> {
|
return v0.getProductCode();
|
}, code).between(StrUtil.isNotEmpty(filter.getPlanStartTimeBegin()) && StrUtil.isNotEmpty(filter.getPlanStartTimeEnd()), (v0) -> {
|
return v0.getPlanStartTime();
|
}, filter.getPlanStartTimeBegin(), filter.getPlanStartTimeEnd()).between(StrUtil.isNotEmpty(filter.getPlanEndTimeBegin()) && StrUtil.isNotEmpty(filter.getPlanEndTimeEnd()), (v0) -> {
|
return v0.getPlanEndTime();
|
}, filter.getPlanEndTimeBegin(), filter.getPlanEndTimeEnd());*/
|
sort(filter.getSort(), wrapper);
|
IPage<FmsOrder> resPage = this.fmsOrderService.page(page, wrapper);
|
return FmsOrderConvert.INSTANCE.convertToProduceVO(resPage);
|
}
|
|
private void sort(Integer sortType, LambdaQueryWrapper<FmsOrder> wrapper) {
|
OrderSortEnum sortEnum = OrderSortEnum.of(sortType);
|
wrapper.orderBy(sortEnum.getIsTime().booleanValue(), sortEnum.getIsAsc().booleanValue(), (v0) -> {
|
return v0.getPlanStartTime();
|
});
|
wrapper.orderBy(!sortEnum.getIsTime().booleanValue(), sortEnum.getIsAsc().booleanValue(), (v0) -> {
|
return v0.getPriority();
|
});
|
}
|
|
@Override // org.springblade.modules.fms.service.IFmsProductionStatisticsService
|
public FmsProduceProcessVO processList(Long orderId) {
|
FmsOrder fmsOrder = (FmsOrder) this.fmsOrderService.getById(orderId);
|
if (Objects.isNull(fmsOrder)) {
|
return FmsProduceProcessVO.builder().build();
|
}
|
List<FmsOrderProcess> fmsOrderProcesses = this.fmsOrderProcessService.list(Wrappers.<FmsOrderProcess>lambdaQuery().eq(FmsOrderProcess::getOrderId, orderId));
|
/*
|
List<FmsOrderProcess> fmsOrderProcesses = this.fmsOrderProcessService.list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getOrderId();
|
}, orderId));*/
|
if (CollectionUtils.isEmpty(fmsOrderProcesses)) {
|
return FmsProduceProcessVO.builder().build();
|
}
|
List<FmsOrderProcessVO> resultProcess = FmsOrderProcessConvert.INSTANCE.convert(fmsOrderProcesses);
|
List<Long> processIds = fmsOrderProcesses.parallelStream().map((v0) -> {
|
return v0.getId();
|
}).collect(Collectors.toList());
|
|
List<FmsOrderProcessTool> orderProcessTools = this.fmsOrderProcessToolService.list(Wrappers.<FmsOrderProcessTool>lambdaQuery().in(FmsOrderProcessTool::getOrderProcessId, processIds));
|
/*
|
List<FmsOrderProcessTool> orderProcessTools = this.fmsOrderProcessToolService.list((Wrapper) Wrappers.lambdaQuery().in((v0) -> {
|
return v0.getOrderProcessId();
|
}, processIds));*/
|
Map<Long, List<FmsOrderProcessTool>> toolsMap = orderProcessTools.stream().collect(Collectors.groupingBy((v0) -> {
|
return v0.getOrderProcessId();
|
}));
|
List<FmsOrderProcessFixture> processFixtures = this.fmsOrderProcessFixtureService.list(Wrappers.<FmsOrderProcessFixture>lambdaQuery().in(FmsOrderProcessFixture::getOrderProcessId, processIds));
|
|
/*
|
List<FmsOrderProcessFixture> processFixtures = this.fmsOrderProcessFixtureService.list((Wrapper) Wrappers.lambdaQuery().in((v0) -> {
|
return v0.getOrderProcessId();
|
}, processIds));*/
|
Map<Long, List<FmsOrderProcessFixture>> fixturesMap =processFixtures.stream().collect(Collectors.groupingBy((v0) -> {
|
return v0.getOrderProcessId();
|
}));
|
resultProcess.forEach(process -> {
|
List<FmsOrderProcessTool> toolList = toolsMap.get(process.getId());
|
if (CollectionUtil.isNotEmpty(toolList)) {
|
List<FmsOrderProcessToolVO> fmsOrderProcessToolVOS = FmsOrderProcessToolConvert.INSTANCE.convert(toolList);
|
process.setToolList(fmsOrderProcessToolVOS);
|
}
|
List<FmsOrderProcessFixture> fmsOrderProcessFixtures = (List) fixturesMap.get(process.getId());
|
if (CollectionUtil.isNotEmpty(fmsOrderProcessFixtures)) {
|
List<FmsOrderProcessFixtureVO> fmsOrderProcessFixtureVOS = FmsOrderProcessFixtureConvert.INSTANCE.convert(fmsOrderProcessFixtures);
|
process.setFixtureList(fmsOrderProcessFixtureVOS);
|
}
|
});
|
return FmsProduceProcessVO.builder().produceOrderVO(FmsOrderConvert.INSTANCE.convertToProduceVO(fmsOrder)).processList(resultProcess).build();
|
}
|
|
@Override // org.springblade.modules.fms.service.IFmsProductionStatisticsService
|
public List<FmsProducePartVO> partList(Long orderId) {
|
List<FmsProducePartDTO> produceOrderPartList = this.fmsWorkStationRecordMapper.findProduceOrderPart(orderId);
|
if (CollectionUtil.isEmpty(produceOrderPartList)) {
|
return Collections.emptyList();
|
}
|
Map<String, List<FmsProducePartDTO>> partList = produceOrderPartList.stream().collect(Collectors.groupingBy((v0) -> {
|
return v0.getPartCode();
|
}));
|
partList.forEach((partCode, parts) -> {
|
parts = parts.stream().sorted(Comparator.comparing(FmsProducePartDTO::getStartTime, Comparator.reverseOrder())).collect(Collectors.toList());
|
/*
|
List parts = (List) parts.stream().sorted(Comparator.comparing((v0) -> {
|
return v0.getStartTime();
|
}, Comparator.reverseOrder())).collect(Collectors.toList());*/
|
FmsProducePartDTO fmsProducePartDTO = parts.get(0);
|
FmsRealTimeTray fmsRealTimeTray = this.fmsRealTimeTrayService.getOne(Wrappers.<FmsRealTimeTray>lambdaQuery().eq(FmsRealTimeTray::getOrderProcessId, fmsProducePartDTO.getOrderProcessId()).eq(FmsRealTimeTray::getComponentsNumber, fmsProducePartDTO.getPartCode()));
|
/*
|
FmsRealTimeTray fmsRealTimeTray = (FmsRealTimeTray) this.fmsRealTimeTrayService.getOne((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> {
|
return v0.getOrderProcessId();
|
}, fmsProducePartDTO.getOrderProcessId())).eq((v0) -> {
|
return v0.getComponentsNumber();
|
}, fmsProducePartDTO.getPartCode()));*/
|
if (Objects.isNull(fmsRealTimeTray) && parts.size() == 1) {
|
parts.forEach(p -> {
|
p.setPartType(null);
|
p.setCurrentPosition(1);
|
});
|
} else if (Objects.isNull(fmsRealTimeTray) && parts.size() > 1) {
|
parts.forEach(p2 -> {
|
p2.setPartType(Integer.valueOf(RealTimePartTypeEnum.PROCESS_FINISH.getType()));
|
p2.setCurrentPosition(1);
|
});
|
} else {
|
parts.forEach(p3 -> {
|
p3.setPartType(fmsRealTimeTray.getPartType());
|
p3.setCurrentPosition(2);
|
});
|
}
|
});
|
return FmsWorkStationRecordConvert.INSTANCE.convertPartList(produceOrderPartList);
|
}
|
}
|