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 orderPage(Query query, FmsProduceQueryVO filter) { IPage page = Condition.getPage(query); String code = filter.getCode(); LambdaQueryWrapper wrapper = Wrappers.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 resPage = this.fmsOrderService.page(page, wrapper); return FmsOrderConvert.INSTANCE.convertToProduceVO(resPage); } private void sort(Integer sortType, LambdaQueryWrapper 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 fmsOrderProcesses = this.fmsOrderProcessService.list(Wrappers.lambdaQuery().eq(FmsOrderProcess::getOrderId, orderId)); /* List fmsOrderProcesses = this.fmsOrderProcessService.list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getOrderId(); }, orderId));*/ if (CollectionUtils.isEmpty(fmsOrderProcesses)) { return FmsProduceProcessVO.builder().build(); } List resultProcess = FmsOrderProcessConvert.INSTANCE.convert(fmsOrderProcesses); List processIds = fmsOrderProcesses.parallelStream().map((v0) -> { return v0.getId(); }).collect(Collectors.toList()); List orderProcessTools = this.fmsOrderProcessToolService.list(Wrappers.lambdaQuery().in(FmsOrderProcessTool::getOrderProcessId, processIds)); /* List orderProcessTools = this.fmsOrderProcessToolService.list((Wrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getOrderProcessId(); }, processIds));*/ Map> toolsMap = orderProcessTools.stream().collect(Collectors.groupingBy((v0) -> { return v0.getOrderProcessId(); })); List processFixtures = this.fmsOrderProcessFixtureService.list(Wrappers.lambdaQuery().in(FmsOrderProcessFixture::getOrderProcessId, processIds)); /* List processFixtures = this.fmsOrderProcessFixtureService.list((Wrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getOrderProcessId(); }, processIds));*/ Map> fixturesMap =processFixtures.stream().collect(Collectors.groupingBy((v0) -> { return v0.getOrderProcessId(); })); resultProcess.forEach(process -> { List toolList = toolsMap.get(process.getId()); if (CollectionUtil.isNotEmpty(toolList)) { List fmsOrderProcessToolVOS = FmsOrderProcessToolConvert.INSTANCE.convert(toolList); process.setToolList(fmsOrderProcessToolVOS); } List fmsOrderProcessFixtures = (List) fixturesMap.get(process.getId()); if (CollectionUtil.isNotEmpty(fmsOrderProcessFixtures)) { List 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 partList(Long orderId) { List produceOrderPartList = this.fmsWorkStationRecordMapper.findProduceOrderPart(orderId); if (CollectionUtil.isEmpty(produceOrderPartList)) { return Collections.emptyList(); } Map> 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.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); } }