package com.qianwen.smartman.modules.coproduction.service.impl; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; import java.lang.invoke.SerializedLambda; import java.time.LocalDate; import java.util.ArrayList; import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; import com.qianwen.smartman.common.cache.RegionCache; import com.qianwen.smartman.common.constant.CommonConstant; import com.qianwen.smartman.common.constant.ExcelConstant; import com.qianwen.smartman.common.utils.Lambda; import com.qianwen.smartman.common.utils.MessageUtils; import com.qianwen.smartman.common.utils.TimeUtils; import com.qianwen.core.excel.util.ExcelUtil; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.mp.base.BaseServiceImpl; import com.qianwen.core.mp.support.Condition; import com.qianwen.core.mp.support.Query; import com.qianwen.core.oss.model.BladeFile; import com.qianwen.core.tool.utils.DateUtil; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.modules.coproduction.convert.OrderReportRecordConvert; import com.qianwen.smartman.modules.coproduction.convert.ReportConvert; import com.qianwen.smartman.modules.coproduction.dto.JuxtapositionReportDTO; import com.qianwen.smartman.modules.coproduction.dto.OrderProcessReportWorkDTO; import com.qianwen.smartman.modules.coproduction.dto.OrderReportDTO; import com.qianwen.smartman.modules.coproduction.dto.PlanAndOrderDTO; import com.qianwen.smartman.modules.coproduction.dto.ReportWorkDTO; import com.qianwen.smartman.modules.coproduction.dto.ReportWorkDetailDTO; import com.qianwen.smartman.modules.coproduction.dto.ResultByStartDTO; import com.qianwen.smartman.modules.coproduction.entity.OrderProcess; import com.qianwen.smartman.modules.coproduction.entity.OrderReportRecord; import com.qianwen.smartman.modules.coproduction.enums.CoProductionEnum; import com.qianwen.smartman.modules.coproduction.enums.OrderReportRecordStatusEnum; import com.qianwen.smartman.modules.coproduction.excel.OrderReportRecordExport; import com.qianwen.smartman.modules.coproduction.mapper.OrderReportRecordMapper; import com.qianwen.smartman.modules.coproduction.service.IOrderProcessService; import com.qianwen.smartman.modules.coproduction.service.IOrderReportRecordService; import com.qianwen.smartman.modules.coproduction.service.IPlanService; import com.qianwen.smartman.modules.coproduction.vo.OpRecordExportVO; import com.qianwen.smartman.modules.coproduction.vo.OrderChildRecordVO; import com.qianwen.smartman.modules.coproduction.vo.OrderProcessStartWorkstationVO; import com.qianwen.smartman.modules.coproduction.vo.OrderReportRecordResVO; import com.qianwen.smartman.modules.coproduction.vo.OrderReportRecordSearchVO; import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @Service /* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/coproduction/service/impl/OrderReportRecordServiceImpl.class */ public class OrderReportRecordServiceImpl extends BaseServiceImpl implements IOrderReportRecordService { private final IOrderProcessService orderProcessService; private final IPlanService planService; private final OssBuilder ossBuilder; public OrderReportRecordServiceImpl(IOrderProcessService orderProcessService, IPlanService planService, OssBuilder ossBuilder) { this.orderProcessService = orderProcessService; this.planService = planService; this.ossBuilder = ossBuilder; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public List generateStartRecord(ResultByStartDTO resultByStartDTO, PlanAndOrderDTO planAndOrderDTO, Date startTime, Map workstationVoMap, Long mainSequenceId, Long openSequenceId) { List orderReportRecordList = new ArrayList<>(); resultByStartDTO.getCanStartWorkstationIdList().forEach(i -> { OrderReportRecord orderReportRecord = new OrderReportRecord(); orderReportRecord.setPlanId(planAndOrderDTO.getPlan().getId()); orderReportRecord.setOrderId(planAndOrderDTO.getOrder().getId()); orderReportRecord.setProcessId(resultByStartDTO.getWorkstationAndOrderProcessIdMap().get(i)); orderReportRecord.setWorkstationId(i); orderReportRecord.setWorkstationName(((OrderProcessStartWorkstationVO) workstationVoMap.get(i)).getWorkstationName()); orderReportRecord.setProducerUserId(((OrderProcessStartWorkstationVO) workstationVoMap.get(i)).getProducerId()); orderReportRecord.setProducerUserCode(((OrderProcessStartWorkstationVO) workstationVoMap.get(i)).getProducerCode()); orderReportRecord.setProducerUserName(((OrderProcessStartWorkstationVO) workstationVoMap.get(i)).getProducerName()); orderReportRecord.setStartTime(startTime); orderReportRecord.setRecordStatus(OrderReportRecordStatusEnum.STARTED.getCode()); orderReportRecord.setMainSequenceId(mainSequenceId); orderReportRecord.setOpenSequenceId(openSequenceId); orderReportRecordList.add(orderReportRecord); }); saveBatch(orderReportRecordList); return orderReportRecordList; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public ReportWorkDetailDTO getReportWorkDetail(Long processId) { OrderProcess orderProcess = (OrderProcess)this.orderProcessService.getById(processId); if (orderProcess == null) throw new ServiceException(MessageUtils.message("production.loading.report.detail.fail.process.is.not.exist", new Object[0])); Integer whetherParallel = orderProcess.getWhetherParallel(); ReportWorkDetailDTO reportWorkDetailDTO = new ReportWorkDetailDTO(); OrderReportDTO orderHead = ((OrderReportRecordMapper)this.baseMapper).getOrderHead(processId); reportWorkDetailDTO.setReportDTO(orderHead); List juxtapositionReportList = new LinkedList<>(); if (CoProductionEnum.WhetherParallel.YES.getCode().equals(whetherParallel)) { List childProcess = this.orderProcessService.list(Wrappers.lambdaQuery().eq(OrderProcess::getMainSequenceId, processId)); Map childProcessMap = (Map)childProcess.stream().collect(Collectors.toMap(OrderProcess::getId, Function.identity())); List list = list(Wrappers.lambdaQuery() .eq(OrderReportRecord::getProcessId, processId) .eq(OrderReportRecord::getRecordStatus, CoProductionEnum.RecordStatus.NO.getCode())); if (Func.isNotEmpty(list)) { int size = list.size(); if (size > 1) throw new ServiceException(MessageUtils.message("production.loading.report.detail.fail.parallel.main.process.only.one.record", new Object[0])); OrderReportRecord mainOrderReportRecord = list.get(0); JuxtapositionReportDTO mainJuxtapositionReport = assembleReportData(mainOrderReportRecord, orderProcess.getProcessName(), orderProcess.getProcessCode()); juxtapositionReportList.add(mainJuxtapositionReport); Long mainId = mainOrderReportRecord.getId(); List suborderList = list(Wrappers.lambdaQuery().eq(OrderReportRecord::getOpenSequenceId, mainId)); if (Func.isNotEmpty(suborderList)) { List whetherParallelProcessRecord = (List)suborderList.stream().map(s -> { OrderProcess child = (OrderProcess)childProcessMap.get(s.getProcessId()); return assembleReportData(s, child.getProcessName(), child.getProcessCode()); }).collect(Collectors.toList()); juxtapositionReportList.addAll(whetherParallelProcessRecord); } } } else { List commonlyList = list(Wrappers.lambdaQuery() .eq(OrderReportRecord::getProcessId, processId) .eq(OrderReportRecord::getRecordStatus, CoProductionEnum.RecordStatus.NO.getCode())); if (Func.isNotEmpty(commonlyList)) { List whetherParallelProcessRecord = (List)commonlyList.stream().map(commonlyProcess -> assembleReportData(commonlyProcess, orderProcess.getProcessName(), orderProcess.getProcessCode())).collect(Collectors.toList()); juxtapositionReportList.addAll(whetherParallelProcessRecord); } } if (Func.isNotEmpty(juxtapositionReportList)) { reportWorkDetailDTO.setJuxtapositionReports(juxtapositionReportList); String workstationNames = juxtapositionReportList.stream().map(JuxtapositionReportDTO::getWorkstationName).filter(Func::isNotBlank).distinct().collect(Collectors.joining(",")); reportWorkDetailDTO.setWorkstationNames(workstationNames); } return reportWorkDetailDTO; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public OrderReportRecord generateStartMainRecord(PlanAndOrderDTO planAndOrderDTO, Long orderProcessId, Date startTime) { OrderReportRecord orderReportRecord = new OrderReportRecord(); orderReportRecord.setPlanId(planAndOrderDTO.getPlan().getId()); orderReportRecord.setOrderId(planAndOrderDTO.getOrder().getId()); orderReportRecord.setProcessId(orderProcessId); orderReportRecord.setStartTime(startTime); orderReportRecord.setRecordStatus(OrderReportRecordStatusEnum.STARTED.getCode()); save(orderReportRecord); return orderReportRecord; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService @Transactional(rollbackFor = {Exception.class}) public Boolean updateRecord(OrderProcessReportWorkDTO workDTO, OrderReportRecord orderReportRecord, OrderProcess orderProcess) { int qualifyNum = workDTO.getQualifyNum().intValue() + ((orderReportRecord.getQualifyNum() == null) ? 0 : orderReportRecord.getQualifyNum().intValue()); int scrappedNum = workDTO.getScrappedNum().intValue() + ((orderReportRecord.getScrappedNum() == null) ? 0 : orderReportRecord.getScrappedNum().intValue()); Integer whetherParallel = orderProcess.getWhetherParallel(); if (Func.isEmpty(orderReportRecord.getMainSequenceId()) && qualifyNum == 0 && scrappedNum == 0) throw new ServiceException(MessageUtils.message("production.report.fail.is.not.parallel.qualifyNum.and.scrappedNum.is.not.zero", new Object[0])); return Boolean.valueOf(update(Wrappers.lambdaUpdate() .eq(OrderReportRecord::getId, orderReportRecord.getId()) .set(OrderReportRecord::getQualifyNum, Integer.valueOf(qualifyNum)) .set(OrderReportRecord::getScrappedNum, Integer.valueOf(scrappedNum)) .set(OrderReportRecord::getWorkshopUserId, workDTO.getWorkshopUserId()) .set(OrderReportRecord::getWorkshopUserCode, workDTO.getWorkshopUserCode()) .set(OrderReportRecord::getWorkshopUserName, workDTO.getWorkshopUserName()) .set(OrderReportRecord::getQualityUserId, workDTO.getQualityUserId()) .set(OrderReportRecord::getQualityUserCode, workDTO.getQualityUserCode()) .set(OrderReportRecord::getQualityUserName, workDTO.getQualityUserName()) .set(OrderReportRecord::getRecordStatus, CoProductionEnum.RecordStatus.YES.getCode()) .set(OrderReportRecord::getRemark, workDTO.getRemark()))); } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService @Transactional(rollbackFor = {Exception.class}) public OrderReportRecord buildReportRecord(OrderProcessReportWorkDTO reportWorkDTO, OrderReportRecord orderReportRecord) { orderReportRecord.setQualifyNum(Integer.valueOf(reportWorkDTO.getQualifyNum().intValue() + orderReportRecord.getQualifyNum().intValue())).setScrappedNum(Integer.valueOf(reportWorkDTO.getScrappedNum().intValue() + orderReportRecord.getScrappedNum().intValue())).setWorkshopUserId(Long.valueOf(Func.toLong(reportWorkDTO.getWorkshopUserId()))).setWorkshopUserName(reportWorkDTO.getWorkshopUserName()).setWorkshopUserCode(reportWorkDTO.getWorkshopUserCode()).setQualityUserId(Long.valueOf(Func.toLong(reportWorkDTO.getQualityUserId()))).setQualityUserName(reportWorkDTO.getQualityUserName()).setQualityUserCode(reportWorkDTO.getQualityUserCode()).setRemark(reportWorkDTO.getRemark()).setRecordStatus(CoProductionEnum.RecordStatus.YES.getCode()).setQualityTime(DateUtil.now()).setWorkshopTime(DateUtil.now()); return orderReportRecord; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public OrderReportRecord getLatestRecord(Long planId, Long orderId, Long orderProcessId) { List list = list(Wrappers.lambdaQuery() .eq(Func.isNotEmpty(planId), OrderReportRecord::getPlanId, planId) .eq(Func.isNotEmpty(orderId), OrderReportRecord::getOrderId, orderId) .eq(Func.isNotEmpty(orderProcessId), OrderReportRecord::getProcessId, orderProcessId) .eq(OrderReportRecord::getRecordStatus, CoProductionEnum.RecordStatus.YES.getCode()) .orderByDesc(OrderReportRecord::getWorkshopTime)); if (Func.isNotEmpty(list)) { return (OrderReportRecord) list().get(0); } return null; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public OrderReportRecord getLatestChildProcessRecord(List processIds) { List list = list(Wrappers.lambdaQuery() .in(OrderReportRecord::getProcessId, processIds) .eq(OrderReportRecord::getRecordStatus, CoProductionEnum.RecordStatus.YES.getCode()) .orderByDesc(OrderReportRecord::getWorkshopTime)); if (Func.isNotEmpty(list)) { return (OrderReportRecord) list().get(0); } return null; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public OrderReportRecord getEarliestChildProcessRecord(List processIds, List removeRecordIds) { List list = list(Wrappers.lambdaQuery() .in(OrderReportRecord::getProcessId, processIds) .orderByDesc(OrderReportRecord::getStartTime)); if (Func.isNotEmpty(list)) { List reportRecords = (List)list.stream().filter(s -> (Func.isNotEmpty(removeRecordIds) && !removeRecordIds.contains(s.getId()))).collect(Collectors.toList()); if (Func.isNotEmpty(reportRecords)) return reportRecords.get(0); } return null; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public OrderReportRecord getEarliestRecord(Long planId, Long orderId, Long orderProcessId, List removeRecordIds) { List list = list(Wrappers.lambdaQuery() .eq(Func.isNotEmpty(planId), OrderReportRecord::getPlanId, planId) .eq(Func.isNotEmpty(orderId), OrderReportRecord::getOrderId, orderId) .eq(Func.isNotEmpty(orderProcessId), OrderReportRecord::getProcessId, orderProcessId) .orderByAsc(OrderReportRecord::getStartTime)); if (Func.isNotEmpty(list)) { List reportRecords = (List)list.stream().filter(s -> (removeRecordIds != null && !removeRecordIds.contains(s.getId()))).collect(Collectors.toList()); if (Func.isNotEmpty(reportRecords)) return reportRecords.get(0); } return null; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public Integer countOpenRecord(Long processId) { List list = list(Wrappers.lambdaQuery() .eq(OrderReportRecord::getProcessId, processId) .eq(OrderReportRecord::getRecordStatus, CoProductionEnum.RecordStatus.NO.getCode())); if (Func.isNotEmpty(list)) return Integer.valueOf(list.size()); return CommonConstant.ZERO; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public Integer countDelRecord(Long processId, List removeRecordIds) { List list = list(Wrappers.lambdaQuery() .eq(OrderReportRecord::getProcessId, processId) .eq(OrderReportRecord::getRecordStatus, CoProductionEnum.RecordStatus.NO.getCode())); if (Func.isNotEmpty(list)) { List reportRecords = (List)list.stream().filter(s -> !removeRecordIds.contains(s.getId())).collect(Collectors.toList()); if (Func.isNotEmpty(reportRecords)) return Integer.valueOf(reportRecords.size()); } return CommonConstant.ZERO; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService @Transactional(rollbackFor = {Exception.class}) public Boolean removeReportRecord(Long recordId) { OrderReportRecord delOrderReportRecord = (OrderReportRecord) getById(recordId); if (delOrderReportRecord == null) { throw new ServiceException(MessageUtils.message("production.del.record.fail.report.is.not.exist", new Object[0])); } Long mainSequenceId = delOrderReportRecord.getMainSequenceId(); Long processId = delOrderReportRecord.getProcessId(); if (Func.isNotEmpty(mainSequenceId)) { throw new ServiceException(MessageUtils.message("production.del.record.fail.is.not.del.child.process.report.record", new Object[0])); } OrderProcess orderProcess = (OrderProcess) this.orderProcessService.getById(processId); if (orderProcess == null) { throw new ServiceException(MessageUtils.message("production.report.fail.order.process.is.not.exist", new Object[0])); } Boolean checkPlan = this.planService.checkPlanStatus(delOrderReportRecord.getPlanId()); if (checkPlan.booleanValue()) { throw new ServiceException(MessageUtils.message("production.del.report.fail.plan.suspend.or.close", new Object[0])); } Integer whetherParallel = orderProcess.getWhetherParallel(); List reportWorkDTOList = new ArrayList<>(); ReportWorkDTO reportWorkDTO = new ReportWorkDTO(); reportWorkDTO.setPlanId(Func.toStr(delOrderReportRecord.getPlanId())); reportWorkDTO.setOrderId(Func.toStr(delOrderReportRecord.getOrderId())); reportWorkDTOList.add(buildDelData(delOrderReportRecord.getId(), delOrderReportRecord.getProcessId(), delOrderReportRecord.getMainSequenceId(), delOrderReportRecord.getOpenSequenceId(), delOrderReportRecord.getQualifyNum(), delOrderReportRecord.getScrappedNum())); reportWorkDTO.setReportWorkDTOList(reportWorkDTOList); if (CoProductionEnum.WhetherParallel.YES.getCode().equals(whetherParallel)) { List list = list(Wrappers.lambdaQuery().eq(OrderReportRecord::getOpenSequenceId, recordId)); if (Func.isNotEmpty(list)) { for (OrderReportRecord delRecord : list) { reportWorkDTOList.add(buildDelData(delRecord.getId(), delRecord.getProcessId(), delRecord.getMainSequenceId(), delRecord.getOpenSequenceId(), delRecord.getQualifyNum(), delRecord.getScrappedNum())); } } } Boolean result = this.orderProcessService.delReportWork(reportWorkDTO); if (!result.booleanValue()) { throw new ServiceException(MessageUtils.message("production.del.report.fail.reduce.num.fail", new Object[0])); } return true; } private OrderProcessReportWorkDTO buildDelData(Long recordId, Long processId, Long mainSequenceId, Long openSequenceId, Integer qualifyNum, Integer scrappedNum) { OrderProcessReportWorkDTO orderProcessReportWorkDTO = new OrderProcessReportWorkDTO(); orderProcessReportWorkDTO.setRecordId(Func.toStr(recordId)).setMainSequenceId(mainSequenceId).setOpenSequenceId(openSequenceId).setProcessId(Func.toStr(processId)).setQualifyNum(Integer.valueOf(-qualifyNum.intValue())).setScrappedNum(Integer.valueOf(-scrappedNum.intValue())); return orderProcessReportWorkDTO; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public IPage pageQuery(OrderReportRecordSearchVO vo) { Query query = vo.getQuery(); Long productId = vo.getProductId(); Long orderId = vo.getOrderId(); List reportEmployeeIds = vo.getReportEmployeeIds(); List workEmployeeIds = vo.getWorkEmployeeIds(); LocalDate startDate = vo.getStartDate(); String startTime = Func.notNull(startDate) ? TimeUtils.getStartTime(startDate) : ""; LocalDate endDate = vo.getEndDate(); String endTime = Func.notNull(endDate) ? TimeUtils.getEndTime(endDate) : ""; IPage page = ((OrderReportRecordMapper) this.baseMapper).pageQuery(Condition.getPage(query), getWrapper(orderId, productId, reportEmployeeIds, workEmployeeIds, startTime, endTime)); List records = page.getRecords(); if (Func.isEmpty(records)) { return new Page(); } List recordIds = (List) records.stream().map((v0) -> { return v0.getId(); }).collect(Collectors.toList()); List recordList = list(Lambda.in((v0) -> { return v0.getOpenSequenceId(); }, recordIds)); if (Func.isEmpty(recordList)) { page.setRecords((List) records.stream().peek(r -> { if (Func.notNull(r.getStartTime()) && Func.notNull(r.getEndTime())) { r.setReportTime(Long.valueOf(DateUtil.between(r.getStartTime(), r.getEndTime()).getSeconds())); } }).collect(Collectors.toList())); return page; } Map> recordMap = (Map) recordList.stream().collect(Collectors.groupingBy((v0) -> { return v0.getOpenSequenceId(); })); List vos = completeData(records, recordMap); page.setRecords(vos); return page; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public BladeFile recordExport(OpRecordExportVO vo) { Long productId = vo.getProductId(); List reportEmployeeIds = vo.getReportEmployeeIds(); List workEmployeeIds = vo.getWorkEmployeeIds(); LocalDate startDate = vo.getStartDate(); LocalDate endDate = vo.getEndDate(); String startTime = Func.notNull(startDate) ? TimeUtils.getStartTime(startDate) : ""; String endTime = Func.notNull(endDate) ? TimeUtils.getEndTime(endDate) : ""; List records = ((OrderReportRecordMapper) this.baseMapper).recordExport(getWrapper(vo.getOrderId(), productId, reportEmployeeIds, workEmployeeIds, startTime, endTime)); if (Func.isEmpty(records)) { return exportRecord(Lists.newArrayList()); } List recordIds = (List) records.stream().map((v0) -> { return v0.getId(); }).collect(Collectors.toList()); List recordList = list(Lambda.in((v0) -> { return v0.getOpenSequenceId(); }, recordIds)); if (Func.isEmpty(recordList)) { return exportNoChildRecord(records); } return exportHasChildRecord(records, recordList); } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public List queryChildRecord(String mainRecordId) { List records = list(Lambda.eq((v0) -> { return v0.getOpenSequenceId(); }, mainRecordId)); List opIds = (List) records.stream().map((v0) -> { return v0.getProcessId(); }).collect(Collectors.toList()); List orderProcessList = this.orderProcessService.listByIds(opIds); Map map = (Map) orderProcessList.stream().collect(Collectors.toMap((v0) -> { return v0.getId(); }, v -> { return v; })); return (List) records.stream().map(c -> { return convertVO(c, map); }).collect(Collectors.toList()); } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService public List reportRecordsDetail(Long recordId) { OrderReportRecord orderReportRecord = (OrderReportRecord) getById(recordId); List juxtapositionReportDTOList = new ArrayList<>(); if (Func.isEmpty(orderReportRecord)) { throw new ServiceException(MessageUtils.message("production.report.fail.record.is.not.exit", new Object[0])); } OrderProcess orderProcess = (OrderProcess) this.orderProcessService.getById(orderReportRecord.getProcessId()); if (Func.isEmpty(orderProcess)) { throw new ServiceException(MessageUtils.message("production.report.fail.order.process.is.not.exist", new Object[0])); } JuxtapositionReportDTO mainProcessRecord = assembleReportData(orderReportRecord, orderProcess.getProcessName(), orderProcess.getProcessCode()); juxtapositionReportDTOList.add(mainProcessRecord); Integer whetherParallel = orderProcess.getWhetherParallel(); if (CoProductionEnum.WhetherParallel.YES.getCode().equals(whetherParallel)) { List childRecordList = list(Wrappers.lambdaQuery().eq(OrderReportRecord::getOpenSequenceId, recordId)); if (Func.isNotEmpty(childRecordList)) { childRecordList.forEach(record -> { JuxtapositionReportDTO juxtapositionReportDTO = assembleReportData(record, orderProcess.getProcessName(), orderProcess.getProcessCode()); juxtapositionReportDTOList.add(juxtapositionReportDTO); }); } } return juxtapositionReportDTOList; } private BladeFile exportNoChildRecord(List records) { List result = (List) records.stream().map(OrderReportRecordServiceImpl::getExport).collect(Collectors.toList()); return exportRecord(result); } private BladeFile exportHasChildRecord(List records, List recordList) { Map> recordMap = (Map) recordList.stream().collect(Collectors.groupingBy((v0) -> { return v0.getOpenSequenceId(); })); List result = Lists.newArrayList(); List orderProcessList = this.orderProcessService.list(); Map orderProcessMap = (Map) orderProcessList.stream().collect(Collectors.toMap((v0) -> { return v0.getId(); }, v -> { return v; })); records.forEach(rd -> { OrderReportRecordExport convert = getExport(rd); List childRecords = (List) recordMap.get(rd.getId()); if (Func.isNotEmpty(childRecords)) { String workstationNames = (String) childRecords.stream().map((v0) -> { return v0.getWorkstationName(); }).filter((v0) -> { return Func.notNull(v0); }).collect(Collectors.joining(",")); String workstationName = convert.getWorkstationName(); convert.setWorkstationName(workstationName == null ? workstationNames : String.join(",", workstationName, workstationNames)); result.add(convert); childRecords.forEach(crd -> { result.add(convertExport(crd, rd, orderProcessMap)); }); return; } result.add(convert); }); return exportRecord(result); } private static OrderReportRecordExport convertExport(OrderReportRecord crd, OrderReportRecordResVO rd, Map orderProcessMap) { OrderReportRecordExport res = OrderReportRecordExport.builder().productName(rd.getProductName()).standardModel(rd.getStandardModel()).workstationName(crd.getWorkstationName()).workEmployeeName(crd.getProducerUserName()).reportEmployeeName(crd.getWorkshopUserName()).assignNum(rd.getAssignNum()).reportNum(Integer.valueOf(convertNum(crd.getQualifyNum()).intValue() + convertNum(crd.getScrappedNum()).intValue())).qualifNum(convertNum(crd.getQualifyNum())).scrappedNum(convertNum(crd.getScrappedNum())).remark(crd.getRemark()).build(); OrderProcess orderProcess = orderProcessMap.get(crd.getProcessId()); if (Func.notNull(orderProcess)) { res.setProcessName(orderProcess.getProcessName()); } completeTime(crd.getStartTime(), crd.getWorkshopTime(), res); return res; } private static OrderReportRecordExport getExport(OrderReportRecordResVO rd) { OrderReportRecordExport convert = OrderReportRecordConvert.INSTANCE.convert(rd); completeTime(rd.getStartTime(), rd.getEndTime(), convert); return convert; } private static void completeTime(Date startTime, Date endTime, OrderReportRecordExport res) { if (Func.notNull(startTime) && Func.notNull(endTime)) { res.setStartTime(DateUtil.formatDateTime(startTime)); res.setEndTime(DateUtil.formatDateTime(endTime)); long seconds = DateUtil.between(startTime, endTime).getSeconds(); res.setReportTime(TimeUtils.getUseTime(seconds)); } else if (Func.notNull(startTime)) { res.setStartTime(DateUtil.formatDateTime(startTime)); } else { res.setEndTime(DateUtil.formatDateTime(endTime)); } } private BladeFile exportRecord(List result) { String fileName = String.format("%s-%s.xlsx", ExcelConstant.ORDER_REPORT_RECORD, DateUtil.time()); MultipartFile multipartFile = ExcelUtil.exportToMultipartFile(fileName, ExcelConstant.ORDER_REPORT_RECORD, result, OrderReportRecordExport.class); return this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile); } private QueryWrapper getWrapper(Long orderId, Long productId, List reportEmployeeIds, List workEmployeeIds, String startTime, String endTime) { QueryWrapper wrapper = Wrappers.query().eq(Func.notNull(productId), "bp.product_id", productId).eq(Func.notNull(orderId), "borr.order_id", orderId).in(Func.isNotEmpty(reportEmployeeIds), "borr.workshop_user_id", reportEmployeeIds).in(Func.isNotEmpty(workEmployeeIds), "borr.producer_user_id", workEmployeeIds); if (Func.isNotBlank(startTime) && Func.isNotBlank(endTime)) { wrapper.nested(nt -> { QueryWrapper queryWrapper = (QueryWrapper) ((QueryWrapper) ((QueryWrapper) nt.between("borr.start_time", startTime, endTime)).or()).between("borr.workshop_time", startTime, endTime); }); } else if (Func.isNotBlank(startTime)) { wrapper.nested(nt2 -> { QueryWrapper queryWrapper = (QueryWrapper) ((QueryWrapper) ((QueryWrapper) nt2.gt("borr.start_time", startTime)).or()).gt("borr.start_time", startTime); }); } else if (Func.isNotBlank(endTime)) { wrapper.nested(nt3 -> { QueryWrapper queryWrapper = (QueryWrapper) ((QueryWrapper) ((QueryWrapper) nt3.le("borr.workshop_time", endTime)).or()).le("borr.workshop_time", endTime); }); } if (Func.isNotBlank(wrapper.getSqlSegment())) { return wrapper; } return null; } private List completeData(List records, Map> recordMap) { return (List) records.stream().peek(r -> { if (Func.notNull(r.getStartTime()) && Func.notNull(r.getEndTime())) { r.setReportTime(Long.valueOf(DateUtil.between(r.getStartTime(), r.getEndTime()).getSeconds())); } List childRecords = (List) recordMap.get(r.getId()); if (Func.isNotEmpty(childRecords)) { String workstationIds = (String) childRecords.stream().map(c -> { Long workstationId = c.getWorkstationId(); if (workstationId == null) { return null; } return String.valueOf(workstationId); }).filter((v0) -> { return Func.notNull(v0); }).collect(Collectors.joining(",")); Long workstationId = r.getWorkstationId(); r.setWorkstationIds(workstationId == null ? workstationIds : String.join(",", String.valueOf(workstationId), workstationIds)); String workstationNames = (String) childRecords.stream().map((v0) -> { return v0.getWorkstationName(); }).filter((v0) -> { return Func.notNull(v0); }).collect(Collectors.joining(",")); String workstationName = r.getWorkstationName(); r.setWorkstationName(workstationName == null ? workstationNames : String.join(",", workstationName, workstationNames)); r.setHasChildProcess(1); } }).collect(Collectors.toList()); } private static Integer convertNum(Integer num) { return Integer.valueOf(num == null ? 0 : num.intValue()); } private JuxtapositionReportDTO assembleReportData(OrderReportRecord reportRecord, String processName, String processCode) { JuxtapositionReportDTO juxtapositionReportDTO = new JuxtapositionReportDTO(); juxtapositionReportDTO.setRecordId(reportRecord.getId()).setProcessId(reportRecord.getProcessId()).setProcessCode(processCode).setProcessName(processName).setQualifyNum(reportRecord.getQualifyNum()).setScrappedNum(reportRecord.getScrappedNum()).setWorkstationId(reportRecord.getWorkstationId()).setWorkstationName(reportRecord.getWorkstationName()).setMainSequenceId(reportRecord.getMainSequenceId()).setOpenSequenceId(reportRecord.getOpenSequenceId()); return juxtapositionReportDTO; } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService @Transactional(rollbackFor = {Exception.class}) public Boolean editOrderProcessRecord(ReportWorkDTO reportWorkDTO) { List reportWorkDTOList = reportWorkDTO.getReportWorkDTOList(); if (Func.isEmpty(reportWorkDTOList)) { throw new ServiceException(MessageUtils.message("production.report.fail.data.empty", new Object[0])); } List recordIds = (List) reportWorkDTOList.stream().map((v0) -> { return v0.getRecordId(); }).collect(Collectors.toList()); Map recordMap = getRecordMap(recordIds); for (OrderProcessReportWorkDTO upRecord : reportWorkDTOList) { OrderReportRecord oldOrderReportRecord = recordMap.get(Long.valueOf(Func.toLong(upRecord.getRecordId()))); Integer agoQualifyNum = oldOrderReportRecord.getQualifyNum(); Integer agoScrappedNum = oldOrderReportRecord.getScrappedNum(); Integer upQualifyNum = upRecord.getQualifyNum(); Integer upScrappedNum = upRecord.getScrappedNum(); Integer newQualifyNum = Integer.valueOf(upQualifyNum.intValue() - agoQualifyNum.intValue()); Integer newScrappedNum = Integer.valueOf(upScrappedNum.intValue() - agoScrappedNum.intValue()); upRecord.setQualifyNum(newQualifyNum); upRecord.setScrappedNum(newScrappedNum); } return this.orderProcessService.editReportWork(reportWorkDTO); } @Override // org.springblade.modules.coproduction.service.IOrderReportRecordService @Transactional(rollbackFor = {Exception.class}) public Boolean editParallelProcessRecord(ReportWorkDTO reportWorkDTO) { List reportWorkDTOList = reportWorkDTO.getReportWorkDTOList(); if (Func.isEmpty(reportWorkDTOList)) { throw new ServiceException(MessageUtils.message("production.report.fail.data.empty", new Object[0])); } this.orderProcessService.parallelProcessAround(ReportConvert.INSTANCE.convertParallel(reportWorkDTOList), Boolean.TRUE); List recordIds = (List) reportWorkDTOList.stream().map((v0) -> { return v0.getRecordId(); }).distinct().collect(Collectors.toList()); Map recordMap = getRecordMap(recordIds); reportWorkDTOList.forEach(parallelRecord -> { OrderReportRecord record = (OrderReportRecord) recordMap.get(Long.valueOf(Func.toLong(parallelRecord.getRecordId()))); Integer agoQualifyNum = record.getQualifyNum(); Integer agoScrappedNum = record.getScrappedNum(); Integer upQualifyNum = parallelRecord.getQualifyNum(); Integer upScrappedNum = parallelRecord.getScrappedNum(); Integer newQualifyNum = Integer.valueOf(upQualifyNum.intValue() - agoQualifyNum.intValue()); Integer newScrappedNum = Integer.valueOf(upScrappedNum.intValue() - agoScrappedNum.intValue()); parallelRecord.setQualifyNum(newQualifyNum); parallelRecord.setScrappedNum(newScrappedNum); }); Boolean result = this.orderProcessService.editReportWork(reportWorkDTO); this.orderProcessService.dealChildProcess(reportWorkDTOList); this.orderProcessService.dealCompleteProcessSurplusRecords(reportWorkDTO.getOrderId()); return result; } private Map getRecordMap(List recordIds) { List list = list(Wrappers.lambdaQuery().in(OrderReportRecord::getId, Func.toLongList(recordIds))); if (Func.isEmpty(list)) { throw new ServiceException(MessageUtils.message("production.report.fail.record.is.not.exit", new Object[0])); } return (Map)list.stream().collect(Collectors.toMap(OrderReportRecord::getId, Function.identity())); } private OrderChildRecordVO convertVO(OrderReportRecord rd, Map map) { OrderChildRecordVO vo = new OrderChildRecordVO(); vo.setId(rd.getId()); vo.setPlanId(rd.getPlanId()); vo.setOrderId(rd.getOrderId()); vo.setOrderProcessId(rd.getProcessId()); vo.setWorkstationId(rd.getWorkstationId()); vo.setWorkstationName(rd.getWorkstationName()); vo.setWorkEmployeeId(rd.getProducerUserId()); vo.setWorkEmployeeName(rd.getProducerUserName()); vo.setStartTime(rd.getStartTime()); vo.setEndTime(rd.getWorkshopTime()); vo.setReportEmployeeId(rd.getWorkshopUserId()); vo.setReportEmployeeName(rd.getWorkshopUserName()); vo.setReportNum(Integer.valueOf(convertNum(rd.getQualifyNum()).intValue() + convertNum(rd.getScrappedNum()).intValue())); vo.setQualifNum(convertNum(rd.getQualifyNum())); vo.setRecordStatus(rd.getRecordStatus()); vo.setRemark(rd.getRemark()); vo.setScrappedNum(rd.getScrappedNum()); OrderProcess orderProcess = map.get(rd.getProcessId()); if (Func.notNull(orderProcess)) { vo.setProductCode(orderProcess.getProcessCode()); vo.setProductName(orderProcess.getProcessName()); } if (Func.notNull(vo.getStartTime()) && Func.notNull(vo.getEndTime())) { vo.setReportTime(Long.valueOf(DateUtil.between(vo.getStartTime(), vo.getEndTime()).getSeconds())); } return vo; } }