package com.qianwen.smartman.modules.coproduction.service.impl; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; 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.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.lang.invoke.SerializedLambda; import java.lang.reflect.Field; import java.text.ParseException; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import org.apache.commons.lang3.time.DateUtils; import org.apache.poi.ss.usermodel.Workbook; import org.jetbrains.annotations.NotNull; import com.qianwen.smartman.common.cache.CodeRuleCache; import com.qianwen.smartman.common.cache.RegionCache; import com.qianwen.smartman.common.constant.CommonConstant; import com.qianwen.smartman.common.constant.DateConstant; import com.qianwen.smartman.common.constant.ExcelConstant; import com.qianwen.smartman.common.utils.ExcelUtils; import com.qianwen.smartman.common.utils.MessageUtils; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.mp.base.BaseServiceImpl; import com.qianwen.core.oss.model.BladeFile; import com.qianwen.core.tool.utils.CollectionUtil; import com.qianwen.core.tool.utils.DateUtil; import com.qianwen.core.tool.utils.Func; import com.qianwen.core.tool.utils.StringUtil; import com.qianwen.smartman.modules.coproduction.convert.PlanConvert; import com.qianwen.smartman.modules.coproduction.convert.PlanProcessConvert; import com.qianwen.smartman.modules.coproduction.dto.CheckParamDTO; import com.qianwen.smartman.modules.coproduction.dto.CheckResultDTO; import com.qianwen.smartman.modules.coproduction.dto.OrderProcessReportWorkDTO; import com.qianwen.smartman.modules.coproduction.dto.PlanCraftDTO; import com.qianwen.smartman.modules.coproduction.dto.PlanImportCheckMapDTO; import com.qianwen.smartman.modules.coproduction.dto.PlanProcessDTO; import com.qianwen.smartman.modules.coproduction.dto.PlanProcessInfoDTO; import com.qianwen.smartman.modules.coproduction.dto.PlanProductTypeDTO; import com.qianwen.smartman.modules.coproduction.entity.Order; import com.qianwen.smartman.modules.coproduction.entity.OrderProcess; import com.qianwen.smartman.modules.coproduction.entity.OrderReportRecord; import com.qianwen.smartman.modules.coproduction.entity.OrderWorkstation; import com.qianwen.smartman.modules.coproduction.entity.Plan; import com.qianwen.smartman.modules.coproduction.entity.PlanProcess; import com.qianwen.smartman.modules.coproduction.enums.CoProductionEnum; import com.qianwen.smartman.modules.coproduction.enums.OrderProcessStatusEnum; import com.qianwen.smartman.modules.coproduction.enums.OrderReportRecordStatusEnum; import com.qianwen.smartman.modules.coproduction.enums.OrderStatusEnum; import com.qianwen.smartman.modules.coproduction.enums.PlanCategoryEnum; import com.qianwen.smartman.modules.coproduction.enums.PlanStatusEnum; import com.qianwen.smartman.modules.coproduction.enums.WorkstationStatusEnum; import com.qianwen.smartman.modules.coproduction.mapper.OrderReportRecordMapper; import com.qianwen.smartman.modules.coproduction.mapper.PlanMapper; import com.qianwen.smartman.modules.coproduction.mapper.PlanProcessMapper; import com.qianwen.smartman.modules.coproduction.service.IOrderProcessService; import com.qianwen.smartman.modules.coproduction.service.IOrderReportRecordService; import com.qianwen.smartman.modules.coproduction.service.IOrderService; import com.qianwen.smartman.modules.coproduction.service.IOrderWorkstationService; import com.qianwen.smartman.modules.coproduction.service.IPlanProcessService; import com.qianwen.smartman.modules.coproduction.service.IPlanService; import com.qianwen.smartman.modules.coproduction.vo.OrderEditWorkstationVO; import com.qianwen.smartman.modules.coproduction.vo.OrderProcessEditWorkStationVO; import com.qianwen.smartman.modules.coproduction.vo.PlanAppendVO; import com.qianwen.smartman.modules.coproduction.vo.PlanBomVO; import com.qianwen.smartman.modules.coproduction.vo.PlanCraftVO; import com.qianwen.smartman.modules.coproduction.vo.PlanCraftVersionVO; import com.qianwen.smartman.modules.coproduction.vo.PlanExportVO; import com.qianwen.smartman.modules.coproduction.vo.PlanImportVO; import com.qianwen.smartman.modules.coproduction.vo.PlanModifyVO; import com.qianwen.smartman.modules.coproduction.vo.PlanQueryVO; import com.qianwen.smartman.modules.coproduction.vo.PlanStatusCountVO; import com.qianwen.smartman.modules.coproduction.vo.PlanSubmitVO; import com.qianwen.smartman.modules.cps.entity.BomVersion; import com.qianwen.smartman.modules.cps.entity.CraftRouting; import com.qianwen.smartman.modules.cps.entity.Product; import com.qianwen.smartman.modules.cps.entity.ProductionCraftVersion; import com.qianwen.smartman.modules.cps.service.IBomVersionService; import com.qianwen.smartman.modules.cps.service.ICraftRoutingService; import com.qianwen.smartman.modules.cps.service.IProductService; import com.qianwen.smartman.modules.cps.service.IProductionCraftVersionService; import com.qianwen.smartman.modules.cps.vo.CraftRoutingDetailVO; import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder; import com.qianwen.smartman.modules.system.constant.FieldConstant; import com.qianwen.smartman.modules.system.constant.SystemFieldConstant; import com.qianwen.smartman.modules.system.dto.CustomTemplateFieldRelationDTO; import com.qianwen.smartman.modules.system.entity.CustomTemplate; import com.qianwen.smartman.modules.system.entity.CustomTemplateBusiness; import com.qianwen.smartman.modules.system.enums.BusinessTypeEnums; import com.qianwen.smartman.modules.system.enums.ConfigTypeEnum; import com.qianwen.smartman.modules.system.handler.field.HandlerFieldSqlParse; import com.qianwen.smartman.modules.system.mapper.CustomTemplateFieldRelationMapper; import com.qianwen.smartman.modules.system.service.ICodeGeneratorService; import com.qianwen.smartman.modules.system.service.ICustomTemplateBusinessService; import com.qianwen.smartman.modules.system.service.ICustomTemplateFieldService; import com.qianwen.smartman.modules.system.service.ICustomTemplateService; import com.qianwen.smartman.modules.system.vo.CustomTemplateFieldColumnVO; import com.qianwen.smartman.modules.tpm.enums.MetaTypeEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; 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/PlanServiceImpl.class */ public class PlanServiceImpl extends BaseServiceImpl implements IPlanService { @Autowired private ICodeGeneratorService codeGeneratorService; @Autowired @Lazy private IOrderService orderService; @Autowired private IOrderProcessService orderProcessService; @Autowired private ICustomTemplateFieldService customTemplateFieldService; @Autowired private ICustomTemplateBusinessService customTemplateBusinessService; @Autowired private OssBuilder ossBuilder; @Autowired @Lazy private IOrderReportRecordService orderReportRecordService; @Autowired private IOrderWorkstationService orderWorkstationService; @Autowired private ICustomTemplateService templateService; @Autowired private PlanProcessMapper planProcessMapper; @Autowired private IPlanProcessService planProcessService; @Autowired private HandlerFieldSqlParse handlerFieldSqlParse; @Autowired private IProductService productService; @Autowired private IProductionCraftVersionService productionCraftVersionService; @Autowired private OrderReportRecordMapper orderReportRecordMapper; @Autowired private PlanMapper planMapper; @Autowired private ICraftRoutingService craftRoutingService; @Autowired private IBomVersionService bomVersionService; @Autowired private CustomTemplateFieldRelationMapper customTemplateFieldRelationMapper; private static final String CODE_RULE = "CoPlan"; private static final String PLAN_TYPE_CODE = "typeId"; static final List CHECK_STATUS_LIST = Arrays.asList(PlanStatusEnum.WAIT_MACHINE.getCode(), PlanStatusEnum.PAUSE.getCode(), PlanStatusEnum.MACH_ING.getCode()); @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public boolean remove(Long id) { Plan plan = (Plan) getById(id); Integer planStatus = plan.getPlanStatus(); if (!Func.equals(planStatus, PlanStatusEnum.WAIT_PUBLISH.getCode())) { List list = this.orderService.list( Wrappers.lambdaQuery() .eq(Order::getPlanId, id) .eq(Order::getStatus, CommonConstant.ENABLE)); List orderIds = (List)list.stream().map(Order::getId).collect(Collectors.toList()); Long num = this.orderReportRecordMapper.selectCount(Wrappers.lambdaQuery().in(OrderReportRecord::getOrderId, orderIds) .eq(OrderReportRecord::getRecordStatus, CommonConstant.DEACTIVATE)); if (Func.isNotEmpty(num) && num.longValue() > 0L) { throw new ServiceException(MessageUtils.message("cps.plan.can.not.remove", new Object[0])); } this.orderService.remove(orderIds, plan.getId()); } return removeById(id); } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public void pause(Long planId) { Plan plan = (Plan) getById(planId); List orders = this.orderService.list(Wrappers.lambdaQuery().eq(Order::getStatus, CommonConstant.ENABLE).eq(Order::getPlanId, planId)); /* List orders = this.orderService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getStatus(); }, CommonConstant.ENABLE)).eq((v0) -> { return v0.getPlanId(); }, planId));*/ checkPause(plan, orders); plan.setPlanStatusBefore(plan.getPlanStatus()); plan.setPlanStatus(PlanStatusEnum.PAUSE.getCode()); updateById(plan); List orderProcesses = this.orderProcessService.list(Wrappers.lambdaQuery().eq(OrderProcess::getStatus, CommonConstant.ENABLE).eq(OrderProcess::getPlanId, planId)); /* List orderProcesses = this.orderProcessService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getStatus(); }, CommonConstant.ENABLE)).eq((v0) -> { return v0.getPlanId(); }, planId));*/ pauseOrderAndProcesses(orders, orderProcesses); } private void pauseOrderAndProcesses(List orders, List orderProcesses) { orders.forEach(item -> { item.setOrderStatusBefore(item.getOrderStatus()); }); orderProcesses.forEach(item2 -> { item2.setProcessStatusBefore(item2.getProcessStatus()); }); orders.forEach(item3 -> { item3.setOrderStatus(OrderProcessStatusEnum.SUSPEND.getCode()); }); orderProcesses.forEach(item4 -> { item4.setProcessStatus(OrderProcessStatusEnum.SUSPEND.getCode()); }); this.orderService.updateBatchById(orders); this.orderProcessService.updateBatchById(orderProcesses); } private void checkPause(Plan plan, List orders) { List status = new ArrayList<>(); status.add(PlanStatusEnum.MACH_ING.getCode()); status.add(PlanStatusEnum.WAIT_MACHINE.getCode()); status.add(PlanStatusEnum.WAIT_PUBLISH.getCode()); Integer planStatus = plan.getPlanStatus(); if (!status.contains(planStatus)) { throw new ServiceException(MessageUtils.message("cps.plan.can.not.pause", new Object[0])); } if (Func.equals(planStatus, PlanStatusEnum.MACH_ING.getCode())) { List list = orders.stream().filter(item -> Func.equals(item.getOrderStatus(), OrderStatusEnum.IN_EXECUTION.getCode())).collect(Collectors.toList()); List orderIds = list.stream().map(Order::getId).collect(Collectors.toList()); if (Func.isNotEmpty(list)) { List orderReportRecords = this.orderReportRecordMapper.selectList( Wrappers.lambdaQuery().in(OrderReportRecord::getOrderId, orderIds) .eq(OrderReportRecord::getRecordStatus, CommonConstant.DEACTIVATE)); if (Func.isNotEmpty(orderReportRecords)) { throw new ServiceException(MessageUtils.message("cps.plan.can.not.pause", new Object[0])); } } } } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public void reboot(Long planId) { Plan plan = (Plan) getById(planId); checkReboot(plan); List orders = this.orderService.list( Wrappers.lambdaQuery() .eq(Order::getStatus, CommonConstant.ENABLE) .eq(Order::getPlanId, planId)); /* List orders = this.orderService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getStatus(); }, CommonConstant.ENABLE)).eq((v0) -> { return v0.getPlanId(); }, planId));*/ List orderProcesses = this.orderProcessService.list( Wrappers.lambdaQuery() .eq(OrderProcess::getStatus, CommonConstant.ENABLE) .eq(OrderProcess::getPlanId, planId)); /* List orderProcesses = this.orderProcessService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getStatus(); }, CommonConstant.ENABLE)).eq((v0) -> { return v0.getPlanId(); }, planId));*/ plan.setPlanStatus(plan.getPlanStatusBefore()); orders.forEach(item -> { item.setOrderStatus(item.getOrderStatusBefore()); }); orderProcesses.forEach(item2 -> { item2.setProcessStatus(item2.getProcessStatusBefore()); }); updateById(plan); this.orderService.updateBatchById(orders); this.orderProcessService.updateBatchById(orderProcesses); } private void checkReboot(Plan plan) { Integer planStatus = plan.getPlanStatus(); if (!Func.equals(planStatus, PlanStatusEnum.PAUSE.getCode())) { throw new ServiceException(MessageUtils.message("cps.plan.can.not.reboot", new Object[0])); } } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public void append(PlanAppendVO planAppendVO) { Long planId = planAppendVO.getPlanId(); Plan sourcePlan = (Plan) getById(planId); if (!Func.equals(sourcePlan.getPlanStatus(), PlanStatusEnum.CLOSE.getCode()) && !Func.equals(sourcePlan.getPlanStatus(), PlanStatusEnum.FINISHED.getCode())) { throw new ServiceException(MessageUtils.message(MessageUtils.message("cps.plan.can.not.append", new Object[0]), new Object[0])); } Integer num = planAppendVO.getNum(); if (num.intValue() <= 0) { throw new ServiceException(MessageUtils.message("plan.num.must.greater.than.zero", new Object[0])); } checkPlanTime(planAppendVO.getPlanStartTime(), planAppendVO.getPlanEndTime()); Plan plan = PlanConvert.INSTANCE.copyNewPlan(sourcePlan, planAppendVO); if (CodeRuleCache.existCodeRule(CODE_RULE)) { plan.setCode(planCodeGenerator(new PlanSubmitVO())); } else { String planCode = planAppendVO.getPlanCode(); if (Func.isEmpty(planCode)) { throw new ServiceException(MessageUtils.message("cps.plan.code.can.not.null", new Object[0])); } plan.setCode(planAppendVO.getPlanCode()); } save(plan); appendProcesses(planAppendVO, plan); } /* JADX WARN: Multi-variable type inference failed */ private void appendProcesses(PlanAppendVO planAppendVO, Plan plan) { List planProcess = planAppendVO.getPlanProcess(); if (Func.isEmpty(planProcess)) { throw new ServiceException(MessageUtils.message("cps.plan.process.can.not.null", new Object[0])); } List processIds = new ArrayList<>(); planProcess.forEach(item -> { processIds.add(item.getPlanProcessId()); }); Map map = (Map)planProcess.stream().collect(Collectors.toMap(PlanProcessDTO::getPlanProcessId, item -> item)); List planProcesses = this.planProcessService.list(Wrappers.lambdaQuery().in(PlanProcess::getId, processIds).orderByAsc(PlanProcess::getSort)); /* List planProcesses = this.planProcessService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getId(); }, processIds)).orderByAsc((v0) -> { return v0.getSort(); })); */ if (Func.isEmpty(planProcesses)) { throw new ServiceException(MessageUtils.message("production.plan.process.not.exists", new Object[0])); } Set mainProcessesIds = planProcesses.stream().map(PlanProcess::getMainSequenceId).collect(Collectors.toSet()); /* Set mainProcessesIds = (Set) planProcesses.stream().map((v0) -> { return v0.getMainSequenceId(); }).collect(Collectors.toSet()); */ Map mainMap = MapUtil.newHashMap(); Map newMainMap = MapUtil.newHashMap(); if (Func.isNotEmpty(mainProcessesIds)) { List mainProcessesList = this.planProcessService.listByIds(mainProcessesIds); if (Func.isNotEmpty(mainProcessesList)) { /* mainMap = (Map) mainProcessesList.stream().collect(Collectors.toMap((v0) -> { return v0.getId(); }, item3 -> { return item3; }));*/ mainMap = mainProcessesList.stream().collect(Collectors.toMap(PlanProcess::getId, item -> item)); } mainProcessesList.forEach(item4 -> { PlanProcessDTO planProcessDTO = (PlanProcessDTO) map.get(item4.getId()); item4.setId(null); item4.setPlanId(plan.getId()); if (Func.isNotEmpty(planProcessDTO)) { item4.setWorkstationId(planProcessDTO.getWorkstationIds()); item4.setWorkstationName(planProcessDTO.getWorkstationNames()); } }); this.planProcessService.saveBatch(mainProcessesList); if (Func.isNotEmpty(mainProcessesList)) { newMainMap = mainProcessesList.stream().collect(Collectors.toMap(this::getProcessKey, PlanProcess::getId)); /* newMainMap = (Map) mainProcessesList.stream().collect(Collectors.toMap(this::getProcessKey, (v0) -> { return v0.getId(); }));*/ } } Map finalMainMap = mainMap; Map finalNewMainMap = newMainMap; planProcesses.forEach(item5 -> { PlanProcessDTO planProcessDTO = (PlanProcessDTO) map.get(item5.getId()); item5.setId(null); item5.setPlanId(plan.getId()); item5.setWorkstationId(planProcessDTO.getWorkstationIds()); item5.setWorkstationName(planProcessDTO.getWorkstationNames()); if (Func.isEmpty(item5.getMainSequenceId())) { return; } Long mainSequenceId = item5.getMainSequenceId(); if (finalMainMap.containsKey(mainSequenceId)) { PlanProcess process = (PlanProcess) finalMainMap.get(mainSequenceId); if (finalNewMainMap.containsKey(getProcessKey(process))) { Long mainId = (Long) finalNewMainMap.get(getProcessKey(process)); item5.setMainSequenceId(mainId); } } }); this.planProcessService.saveBatch(planProcesses); } private String getProcessKey(PlanProcess process) { return process.getCode() + "-" + process.getSort(); } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public BladeFile planImport(Long templateId, MultipartFile file) { try { ExcelUtils.ExcelDataDTO excelDataDTO = ExcelUtils.readExcel(file.getInputStream()); List> data = excelDataDTO.getData(); List> sysData = new ArrayList<>(); List checkResultDTOS = this.templateService.checkImport(getCheckFunction(sysData), BusinessTypeEnums.PLAN_ORDER.getCode(), data); if (Func.isEmpty(checkResultDTOS)) { throw new ServiceException("cps.plan.table.data.error"); } List cover = cover(sysData); List plans = checkAndHandleSysPlan(checkResultDTOS, cover); BladeFile bladeFile = putImportFail(excelDataDTO, checkResultDTOS); if (Func.isNotEmpty(bladeFile)) { return bladeFile; } saveList(plans); return new BladeFile(); } catch (Exception e) { throw new ServiceException(MessageUtils.message("cps.plan.table.data.error", new Object[0])); } } private void saveList(List plans) { plans.forEach(plan -> { plan.setPlanStatus(PlanStatusEnum.WAIT_PUBLISH.getCode()); }); saveBatch(plans); plans.forEach(this::saveProcessBatch); } private BladeFile putImportFail(ExcelUtils.ExcelDataDTO excelDataDTO, List checkResultDTOS) { int pass = CommonConstant.ENABLE.intValue(); Iterator it = checkResultDTOS.iterator(); while (true) { if (it.hasNext()) { if (Func.equals(it.next().getCode(), CommonConstant.DEACTIVATE)) { pass = CommonConstant.DEACTIVATE.intValue(); break; } } else { break; } } if (Func.equals(Integer.valueOf(pass), CommonConstant.ENABLE)) { return null; } List> data = excelDataDTO.getData(); for (int i = 0; i < data.size(); i++) { Map map = data.get(i); CheckResultDTO checkResultDTO = checkResultDTOS.get(i); if (Func.equals(checkResultDTO.getCode(), CommonConstant.DEACTIVATE)) { map.put(ExcelConstant.FAIL_REASON, checkResultDTO.getError()); } } ByteArrayOutputStream bos = new ByteArrayOutputStream(); Workbook workbook = ExcelUtils.generateFail(excelDataDTO); try { workbook.write(bos); } catch (IOException e) { e.printStackTrace(); } InputStream is = new ByteArrayInputStream(bos.toByteArray()); return this.ossBuilder.systemTemplate().putFile("计划导入模板错误.xlsx", is); } List cover(List> sysData) { List planImportVOS = new ArrayList<>(); sysData.forEach(item -> { PlanImportVO planImportVO = new PlanImportVO(); planImportVOS.add(planImportVO); item.forEach((k, v) -> { Field[] declaredFields = PlanImportVO.class.getDeclaredFields(); for (Field field : declaredFields) { try { if (Func.equals(field.getName(), k)) { field.setAccessible(true); field.set(planImportVO, v); } } catch (IllegalAccessException e) { e.printStackTrace(); } } }); }); return planImportVOS; } private Function>, List> getCheckFunction(List> map) { return dto -> { CustomTemplate customTemplate; map.addAll(dto); List checkParamDTOS = new ArrayList<>(); List types = new ArrayList<>(); map.forEach(item -> { if (item.containsKey(PLAN_TYPE_CODE)) { String typeId = (String) item.get(PLAN_TYPE_CODE); if (Func.isNotBlank(typeId)) { types.add(typeId); } } }); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(CustomTemplate::getBusinessType, BusinessTypeEnums.PLAN_ORDER.getCode()); lambdaQueryWrapper.and(wrapper -> { (wrapper.in(types.size() > 0, (v0) -> { return v0.getTemplateName(); }, types).or()).eq((v0) -> { return v0.getDefaultTemplate(); }, CommonConstant.ENABLE); }); List templates = this.templateService.list(lambdaQueryWrapper); Optional customTemplateOptional = templates.stream().filter(item2 -> { return Func.equals(item2.getDefaultTemplate(), CommonConstant.ENABLE); }).findFirst(); CustomTemplate defaultTemplate = null; if (customTemplateOptional.isPresent()) { defaultTemplate = customTemplateOptional.get(); } Map templateMap = templates.stream().collect(Collectors.toMap((v0) -> { return v0.getTemplateName(); }, item3 -> { return item3; })); List templateIds = templates.stream().map(CustomTemplate::getId).collect(Collectors.toList()); List customTemplateFieldRelationDTOS = this.customTemplateFieldRelationMapper.getImportFields(templateIds); Map> relation = (Map) customTemplateFieldRelationDTOS.stream().collect(Collectors.groupingBy((v0) -> { return v0.getTemplateId(); })); for (int i = 0; i < dto.size(); i++) { CheckParamDTO checkParamDTO = new CheckParamDTO(); checkParamDTOS.add(checkParamDTO); Map specialData = MapUtil.newHashMap(); Map item4 = (Map) dto.get(i); if (item4.containsKey(PLAN_TYPE_CODE)) { String typeId = item4.get(PLAN_TYPE_CODE); if (Func.isBlank(typeId)) { customTemplate = defaultTemplate; specialData.put(PLAN_TYPE_CODE, customTemplate.getTemplateName()); } else if (!templateMap.containsKey(typeId)) { break; } else { customTemplate = templateMap.get(typeId); } } else { customTemplate = defaultTemplate; } List relations = relation.get(customTemplate.getId()); Map relationDTOMap = (Map) relations.stream().collect(Collectors.toMap((v0) -> { return v0.getFieldCode(); }, j -> { return j; })); checkParamDTO.setRelationMap(relationDTOMap); checkParamDTO.setCustomTemplate(customTemplate); checkParamDTO.setSpecialData(specialData); } return checkParamDTOS; }; } /* JADX WARN: Multi-variable type inference failed */ private List checkAndHandleSysPlan(List checkResultDTOS, List planExcels) { PlanImportCheckMapDTO mapDTO = getCraftVersionMap(planExcels); Map craftMap = mapDTO.getCraftMap(); Map bomVersionMap = mapDTO.getBomVersionMap(); Map productMap = mapDTO.getProductMap(); Map> planTypeProductMap = mapDTO.getPlanTypeProductMap(); Map planTypeMap = mapDTO.getPlanTypeMap(); Map> craftVersionMap = mapDTO.getCraftVersionMap(); List codes = new ArrayList<>(); List list = list(Wrappers.lambdaQuery().select(Plan::getCode)); /* List list = list(Wrappers.lambdaQuery().select(new SFunction[]{(v0) -> { return v0.getCode(); }}));*/ if (Func.isNotEmpty(list)) { codes = list.stream().map(Plan::getCode).collect(Collectors.toList()); /* codes = (List) list.stream().map((v0) -> { return v0.getCode(); }).collect(Collectors.toList()); */ } List plans = new ArrayList<>(); for (int i = 0; i < planExcels.size(); i++) { CheckResultDTO checkResultDTO = checkResultDTOS.get(i); if (!Func.equals(CommonConstant.DEACTIVATE, checkResultDTO.getCode())) { String extendField = checkResultDTO.getJson(); Plan plan = new Plan(); plan.setExtendField(extendField); PlanImportVO excelVO = planExcels.get(i); plan.setCode(excelVO.getCode()); if (Func.isNotEmpty(plan.getCode()) && codes.contains(plan.getCode())) { checkResultDTO.error(MessageUtils.message("plan.code.already.exist", new Object[0])); } else { try { plan.setPlanStartTime(DateUtils.parseDate(excelVO.getPlanStartTime(), new String[]{DateConstant.PATTERN_DATE_TIME, DateConstant.PATTERN_DATE})); plan.setPlanEndTime(DateUtils.parseDate(excelVO.getPlanEndTime(), new String[]{DateConstant.PATTERN_DATE_TIME, DateConstant.PATTERN_DATE})); checkPlanTime(plan.getPlanStartTime(), plan.getPlanEndTime()); String categoryLabel = excelVO.getCategoryLabel(); plan.setCategory(PlanCategoryEnum.of(categoryLabel)); if (Func.isEmpty(plan.getCategory())) { checkResultDTO.error(MessageUtils.message("cps.plan.category.data.error", new Object[0])); } else if (!craftMap.containsKey(excelVO.getCraftId())) { checkResultDTO.error(MessageUtils.message("cps.plan.craft.routing.non-existent", new Object[0])); } else { CraftRouting craftRouting = craftMap.get(excelVO.getCraftId()); plan.setCraftId(craftRouting.getId()); plan.setCraftName(craftRouting.getName()); if (!craftVersionMap.containsKey(craftRouting.getId())) { checkResultDTO.error(MessageUtils.message("cps.plan.craft.version.non-existent", new Object[0])); } else { Map versionMap = craftVersionMap.get(craftRouting.getId()); if (!versionMap.containsKey(excelVO.getCraftVersion())) { checkResultDTO.error(MessageUtils.message("cps.plan.craft.routing.and.craft.version.mismatch", new Object[0])); } else { Long craftVersionId = versionMap.get(excelVO.getCraftVersion()); plan.setCraftVersion(craftVersionId); plan.setCraftVersionName(excelVO.getCraftVersion()); CustomTemplate customTemplate = null; if (Func.isNotBlank(excelVO.getTypeId())) { if (!planTypeMap.containsKey(excelVO.getTypeId())) { checkResultDTO.error(MessageUtils.message("cps.plan.type.not.exist", new Object[0])); } else { customTemplate = planTypeMap.get(excelVO.getTypeId()); plan.setTypeId(customTemplate.getId()); } } else { Collection customTemplates = planTypeMap.values(); customTemplates.forEach(item -> { if (Func.equals(item.getDefaultTemplate(), CommonConstant.ENABLE)) { plan.setTypeId(item.getId()); } }); } if (Func.equals(plan.getCategory(), PlanCategoryEnum.PRODUCTION.getCode())) { if (Func.isEmpty(excelVO.getProductId())) { checkResultDTO.error(MessageUtils.message("cps.product.code.can.not.be.empty", new Object[0])); } else if (!productMap.containsKey(excelVO.getProductId())) { checkResultDTO.error(MessageUtils.message("cps.product.code.not.exist", new Object[0])); } else { Product product = productMap.get(excelVO.getProductId()); plan.setProductId(product.getId()); plan.setProductName(product.getName()); plan.setProductCode(product.getCode()); if (Func.isNotEmpty(customTemplate) && Func.equals(customTemplate.getDefaultTemplate(), CommonConstant.DEACTIVATE) && Func.isNotEmpty(planTypeProductMap) && planTypeProductMap.containsKey(customTemplate.getId())) { List itemIds = planTypeProductMap.get(customTemplate.getId()); if (!itemIds.contains(product.getTypeId())) { checkResultDTO.error(MessageUtils.message("cps.plan.type.and.product.mismatch", new Object[0])); } } if (!Func.equals(craftRouting.getProductId(), plan.getProductId())) { checkResultDTO.error(MessageUtils.message("cps.plan.craft.routing.and.product.mismatch", new Object[0])); } else if (Func.isNotBlank(excelVO.getBomVersion())) { if (!bomVersionMap.containsKey(craftRouting.getId() + "-" + excelVO.getCraftVersion())) { checkResultDTO.error(MessageUtils.message("cps.plan.bom.and.craft.routing.and.craft.version.mismatch", new Object[0])); } else { BomVersion bomVersion = bomVersionMap.get(craftRouting.getId() + "-" + excelVO.getCraftVersion()); if (!Func.equals(bomVersion.getVersion(), excelVO.getBomVersion())) { checkResultDTO.error(MessageUtils.message("cps.plan.bom.and.craft.routing.and.craft.version.mismatch", new Object[0])); } else { plan.setBomId(bomVersion.getId()); plan.setBomVersion(bomVersion.getVersion()); } } } } } String planNum = excelVO.getPlanNum(); if (Func.isNumeric(excelVO.getPlanNum()) && Integer.parseInt(planNum) > 0) { plan.setPlanNum(Integer.valueOf(Integer.parseInt(planNum))); plan.setStandardModel(excelVO.getStandardModel()); plan.setIndentCode(excelVO.getIndentCode()); plan.setUnassignedNum(plan.getPlanNum()); plans.add(plan); } else { checkResultDTO.error(MessageUtils.message("cps.plan.bom.and.craft.routing.and.craft.version.mismatch", new Object[0])); } } } } } catch (ParseException e) { e.printStackTrace(); checkResultDTO.error(MessageUtils.message("excel.import.machine.time.error", new Object[0])); } } } } return plans; } private PlanImportCheckMapDTO getCraftVersionMap(List planExcels) { List customTemplates; PlanImportCheckMapDTO craftRoutingDTO = new PlanImportCheckMapDTO(); List productCodes = new ArrayList<>(); List craftNames = new ArrayList<>(); List bomVersions = new ArrayList<>(); List craftVersions = new ArrayList<>(); List planTypes = new ArrayList<>(); planExcels.forEach(item -> { if (Func.isNotEmpty(item.getProductId())) { productCodes.add(item.getProductId()); } if (Func.isNotEmpty(item.getCraftId())) { craftNames.add(item.getCraftId()); } if (Func.isNotEmpty(item.getCraftVersion())) { craftVersions.add(item.getCraftVersion()); } if (Func.isNotEmpty(item.getBomVersion())) { bomVersions.add(item.getBomVersion()); } if (Func.isNotEmpty(item.getTypeId())) { planTypes.add(item.getTypeId()); } }); if (Func.isNotEmpty(productCodes)) { List products = this.productService.list(Wrappers.lambdaQuery().in(Product::getCode, productCodes)); /* List products = this.productService.list((Wrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getCode(); }, productCodes));*/ craftRoutingDTO.setProductMap(products.stream().collect(Collectors.toMap(Product::getCode, item -> item))); /* craftRoutingDTO.setProductMap((Map) products.stream().collect(Collectors.toMap((v0) -> { return v0.getCode(); }, item2 -> { return item2; })));*/ } if (Func.isNotEmpty(planTypes)) { customTemplates = this.templateService.list( Wrappers.lambdaQuery() .eq(CustomTemplate::getBusinessType, BusinessTypeEnums.PLAN_ORDER.getCode()) .in(CustomTemplate::getTemplateName, planTypes)); /* customTemplates = this.templateService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getBusinessType(); }, BusinessTypeEnums.PLAN_ORDER.getCode())).in((v0) -> { return v0.getTemplateName(); }, planTypes)); */ } else { customTemplates = this.templateService.list( Wrappers.lambdaQuery() .eq(CustomTemplate::getBusinessType, BusinessTypeEnums.PLAN_ORDER.getCode()) .eq(CustomTemplate::getDefaultTemplate, CommonConstant.ENABLE)); /* customTemplates = this.templateService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getBusinessType(); }, BusinessTypeEnums.PLAN_ORDER.getCode())).eq((v0) -> { return v0.getDefaultTemplate(); }, CommonConstant.ENABLE)); */ } if (Func.isNotEmpty(customTemplates)) { craftRoutingDTO.setPlanTypeMap(customTemplates.stream().collect(Collectors.toMap(CustomTemplate::getTemplateName, item -> item))); List templateIds = (List)customTemplates.stream().map(CustomTemplate::getId).collect(Collectors.toList()); List businesses = this.customTemplateBusinessService.list(Wrappers.lambdaQuery() .select(CustomTemplateBusiness::getTemplateId, CustomTemplateBusiness::getRelationId).eq(CustomTemplateBusiness::getBusinessType, BusinessTypeEnums.PLAN_ORDER.getCode()) .in(CustomTemplateBusiness::getTemplateId, templateIds)); craftRoutingDTO.setPlanTypeProductMap(businesses.stream().collect(Collectors.groupingBy(CustomTemplateBusiness::getTemplateId, Collectors.mapping(CustomTemplateBusiness::getRelationId, Collectors.toList())))); /* List businesses = this.customTemplateBusinessService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.lambdaQuery().select(new SFunction[]{(v0) -> { return v0.getTemplateId(); }, (v0) -> { return v0.getRelationId(); }}).eq((v0) -> { return v0.getBusinessType(); }, BusinessTypeEnums.PLAN_ORDER.getCode())).in((v0) -> { return v0.getTemplateId(); }, templateIds)); craftRoutingDTO.setPlanTypeProductMap((Map) businesses.stream().collect(Collectors.groupingBy((v0) -> { return v0.getTemplateId(); }, Collectors.mapping((v0) -> { return v0.getRelationId(); }, Collectors.toList())))); */ } if (Func.isEmpty(craftNames)) { return craftRoutingDTO; } List craftRoutingList = this.craftRoutingService.list(Wrappers.lambdaQuery().in(CraftRouting::getName, craftNames)); if (Func.isEmpty(craftRoutingList)) { return craftRoutingDTO; } craftRoutingDTO.setCraftMap(craftRoutingList.stream().collect(Collectors.toMap(CraftRouting::getName, item -> item))); Set craftIds = craftRoutingList.stream().map(CraftRouting::getId).collect(Collectors.toSet()); if (Func.isEmpty(craftVersions)) { return craftRoutingDTO; } List versions = this.productionCraftVersionService.list(Wrappers.lambdaQuery().in(ProductionCraftVersion::getCraftId, craftIds)); /* List versions = this.productionCraftVersionService.list((Wrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getCraftId(); }, craftIds));*/ if (Func.isEmpty(versions)) { return craftRoutingDTO; } craftRoutingDTO.setCraftVersionMap(versions.stream().collect(Collectors.groupingBy(ProductionCraftVersion::getCraftId, Collectors.toMap(ProductionCraftVersion::getName, ProductionCraftVersion::getId)))); List craftVersionNames = versions.stream().map(ProductionCraftVersion::getName).collect(Collectors.toList()); if (Func.isNotEmpty(bomVersions)) { List bomVersionList = this.bomVersionService.list(Wrappers.lambdaQuery().in(BomVersion::getCraftId, craftIds).in(BomVersion::getCraftVersion, craftVersionNames)); craftRoutingDTO.setBomVersionMap(bomVersionList.stream().collect(Collectors.toMap(item -> item.getCraftId() + "-" + item.getCraftVersion(), item -> item))); } return craftRoutingDTO; } @Override // org.springblade.modules.coproduction.service.IPlanService public BladeFile planExport(PlanQueryVO planQueryVO) { Long planTypeId = planQueryVO.getTypeId(); List columns = this.customTemplateFieldService.getColumns(planTypeId, ConfigTypeEnum.VIEW_PAGE.getCode()); Map fieldCodeMap = (Map) columns.stream().collect(Collectors.toMap((v0) -> { return v0.getFieldCode(); }, item -> { return item; })); IPage planPage = listPage(Page.of(1L, -1L), planQueryVO); List plans = planPage.getRecords(); ExcelUtils.ExcelExportDTO excelExportDTO = ExcelUtils.buildExcelExportDTO(); columns.forEach(item2 -> { if (Func.equals(item2.getSystemField(), CommonConstant.ENABLE)) { if (Func.equals(item2.getSupportExport(), CommonConstant.ENABLE)) { excelExportDTO.addTableHead(item2.getFieldName(), Func.equals(item2.getMustField(), CommonConstant.ENABLE)); return; } return; } excelExportDTO.addTableHead(item2.getFieldName(), Func.equals(item2.getMustField(), CommonConstant.ENABLE)); }); List planExports = (List) plans.stream().map(item3 -> { PlanExportVO planExportVO = new PlanExportVO(); planExportVO.setCategoryLabel(PlanCategoryEnum.of(item3.getCategory())); planExportVO.setProductTypeLabel(item3.getProductTypeLabel()); if (Func.isNotEmpty(item3.getPlanStartTime())) { planExportVO.setPlanStartTime(DateUtil.DATE_FORMAT.format(item3.getPlanStartTime())); } if (Func.isNotEmpty(item3.getPlanEndTime())) { planExportVO.setPlanEndTime(DateUtil.DATE_FORMAT.format(item3.getPlanEndTime())); } planExportVO.setReportSituation(item3.getReportSituation()); if (Func.isNotEmpty(item3.getReportNum())) { planExportVO.setReportNum(String.valueOf(item3.getReportNum())); } if (Func.isNotEmpty(item3.getQualifyNum())) { planExportVO.setQualifyNum(String.valueOf(item3.getQualifyNum())); } if (Func.isNotEmpty(item3.getStartTime())) { planExportVO.setStartTime(DateUtil.format(item3.getStartTime(), DateConstant.PATTERN_DATE_TIME1)); } if (Func.isNotEmpty(item3.getEndTime())) { planExportVO.setEndTime(DateUtil.format(item3.getEndTime(), DateConstant.PATTERN_DATE_TIME1)); } planExportVO.setCode(item3.getCode()); planExportVO.setIndentCode(item3.getIndentCode()); planExportVO.setPlanStatusLabel(PlanStatusEnum.of(item3.getPlanStatus()).getName()); if (Func.isNotEmpty(item3.getPlanProgress())) { planExportVO.setPlanProgress(Double.valueOf(item3.getPlanProgress()) + "%"); } planExportVO.setProductCode(item3.getProductCode()); planExportVO.setStandardModel(item3.getStandardModel()); planExportVO.setPlanNum("" + item3.getPlanNum()); planExportVO.setExtendField(item3.getExtendField()); return planExportVO; }).collect(Collectors.toList()); Field[] fields = PlanExportVO.class.getDeclaredFields(); for (PlanExportVO plan : planExports) { Map item4 = MapUtil.newHashMap(); excelExportDTO.addData(item4); for (Field field : fields) { field.setAccessible(true); try { if (fieldCodeMap.containsKey(field.getName())) { CustomTemplateFieldColumnVO customTemplateFieldColumnVO = fieldCodeMap.get(field.getName()); if (!Func.equals(customTemplateFieldColumnVO.getSystemField(), CommonConstant.ENABLE) || !Func.equals(customTemplateFieldColumnVO.getSupportExport(), CommonConstant.ENABLE)) { break; } Object o = field.get(plan); if (Func.isNotEmpty(o)) { item4.put(customTemplateFieldColumnVO.getFieldName(), String.valueOf(o)); } else { item4.put(customTemplateFieldColumnVO.getFieldName(), ""); } } } catch (IllegalAccessException e) { e.printStackTrace(); } } String extendField = plan.getExtendField(); JSONObject jsonObject = JSONUtil.parseObj(extendField); jsonObject.forEach((key, value) -> { if (!fieldCodeMap.containsKey(key)) { return; } CustomTemplateFieldColumnVO customTemplateFieldColumnVO2 = (CustomTemplateFieldColumnVO) fieldCodeMap.get(key); String fieldName = customTemplateFieldColumnVO2.getFieldName(); String v = value.toString(); if (JSONUtil.isJsonArray(value.toString())) { List vs = JSONUtil.toList(JSONUtil.parseArray(value.toString()), String.class); v = StringUtil.join(vs, ","); } item4.put(fieldName, v); }); } ByteArrayOutputStream bos = new ByteArrayOutputStream(); Workbook workbook = ExcelUtils.generateExport(excelExportDTO); try { workbook.write(bos); } catch (IOException e2) { e2.printStackTrace(); } InputStream is = new ByteArrayInputStream(bos.toByteArray()); return this.ossBuilder.systemTemplate().putFile("计划数据.xlsx", is); } @Override // org.springblade.modules.coproduction.service.IPlanService public BladeFile planTemplate(Long templateId) { return this.templateService.getTemplate(BusinessTypeEnums.PLAN_ORDER.getCode()); } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public void create(PlanSubmitVO planVO) { checkPlanIsCreate(planVO); Plan plan = PlanConvert.INSTANCE.convert(PlanConvert.INSTANCE.convert(planVO)); plan.setPlanStatus(PlanStatusEnum.WAIT_PUBLISH.getCode()); plan.setUnassignedNum(plan.getPlanNum()); CustomTemplate customTemplate = (CustomTemplate) this.templateService.getById(plan.getTypeId()); plan.setName(!Objects.isNull(customTemplate) ? customTemplate.getTemplateName() : ""); save(plan); saveProcessBatch(plan); } private void saveProcessBatch(Plan plan) { List planProcesses = this.planProcessMapper.getProcessByCraftIdAndVersionId(plan.getCraftId(), plan.getCraftVersion()); if (Func.isEmpty(planProcesses)) { return; } Map dtoMap = planProcesses.stream().collect(Collectors.toMap(PlanProcessInfoDTO::getCraftProcessId, p -> p, (old, newVal) -> old)); planProcesses.forEach(planProcess -> { planProcess.setPlanId(plan.getId()); planProcess.setTypeName(plan.getName()); if (Func.isEmpty(planProcess.getMainSequenceId())) { return; } PlanProcessInfoDTO planProcessInfoDTO = (PlanProcessInfoDTO) dtoMap.get(planProcess.getMainSequenceId()); if (Func.isEmpty(planProcessInfoDTO)) { return; } planProcess.setMainSequenceId(planProcessInfoDTO.getId()); }); this.planProcessService.saveBatch(PlanProcessConvert.INSTANCE.convertDTO(planProcesses)); } private void checkPlanIsCreate(PlanSubmitVO planVO) { planBaseCheck(planVO.getPlanNum(), planVO.getPlanStartTime(), planVO.getPlanEndTime(), planVO.getExtendField()); if (Func.isEmpty(planVO.getCode())) { planVO.setCode(planCodeGenerator(planVO)); } if (planCodeIsDuplicate(planVO).booleanValue()) { throw new ServiceException(MessageUtils.message("plan.code.already.exist", new Object[0])); } } private void checkPlanTime(Date planStartTime, Date planEndTime) { if (planStartTime.after(planEndTime) || DateUtil.toDate(LocalDate.now()).after(planEndTime)) { throw new ServiceException(MessageUtils.message("cps.plan.start.time.cannot.be.greater.than.the.end.time", new Object[0])); } } private Boolean planCodeIsDuplicate(PlanSubmitVO planSubmitVO) { long count = count(Wrappers.lambdaQuery().eq(Plan::getCode, planSubmitVO.getCode()).ne(Func.isNotEmpty(planSubmitVO.getId()), Plan::getId, planSubmitVO.getId())); return Boolean.valueOf(count > 0); } private String planCodeGenerator(PlanSubmitVO planSubmitVO) { String code = this.codeGeneratorService.getGeneratorCode(planSubmitVO, MetaTypeEnum.PLAN.getCode()); if (StrUtil.isEmpty(code)) { throw new ServiceException(MessageUtils.message("cps.tpm.maintain.coding.rules", new Object[0])); } return code; } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public Boolean finish(Long planId) { Plan plan = checkFinishConditionBefore(planId); List insertRecordList = new ArrayList<>(); List updateProcessList = new ArrayList<>(); List planOrderList = this.orderService.list(Wrappers.lambdaQuery().eq(Order::getPlanId, planId).ne(Order::getOrderStatus, OrderStatusEnum.COMPLETE.getCode())); List planOrderProcessList = this.orderProcessService.list(Wrappers.lambdaQuery().eq(OrderProcess::getPlanId, planId).isNull(OrderProcess::getMainSequenceId)); if (Func.isNotEmpty(planOrderProcessList)) { Map> orderProcessListMap = planOrderProcessList.stream().collect(Collectors.groupingBy(OrderProcess::getOrderId)); Date now = DateUtil.now(); for (Order order : planOrderList) { List currentProcessList = orderProcessListMap.get(order.getId()); if (!Func.isEmpty(currentProcessList)) { currentProcessList.sort(Comparator.comparing((v0) -> { return v0.getSort(); })); Integer currentInputNum = order.getAssignNum(); for (OrderProcess orderProcess : currentProcessList) { if (!currentInputNum.equals(0) && currentInputNum.intValue() > orderProcess.getQualifyNum().intValue() + orderProcess.getScrappedNum().intValue()) { insertRecordList.add(packageRecord(order.getPlanId(), order, Integer.valueOf(currentInputNum.intValue() - (orderProcess.getQualifyNum().intValue() + orderProcess.getScrappedNum().intValue())), orderProcess, now)); } orderProcess.setProcessStatus(OrderProcessStatusEnum.TO_BE_FINISHED.getCode()); orderProcess.setEndTime(Func.isEmpty(orderProcess.getEndTime()) ? now : orderProcess.getEndTime()); orderProcess.setStartTime(Func.isEmpty(orderProcess.getStartTime()) ? now : orderProcess.getStartTime()); orderProcess.setInputNum(currentInputNum); orderProcess.setScrappedNum(Integer.valueOf(currentInputNum.intValue() - orderProcess.getQualifyNum().intValue())); updateProcessList.add(orderProcess); currentInputNum = orderProcess.getQualifyNum(); } } } } if (Func.isNotEmpty(insertRecordList)) { this.orderReportRecordService.saveBatch(insertRecordList); } if (Func.isNotEmpty(updateProcessList)) { this.orderProcessService.updateBatchById(updateProcessList); } this.orderService.update(Wrappers.lambdaUpdate().eq(Order::getPlanId, planId).ne(Order::getOrderStatus, OrderStatusEnum.COMPLETE.getCode()) .set(Order::getOrderStatus, OrderStatusEnum.COMPLETE.getCode()).set(Order::getEndTime, new Date()) .setSql("scrapped_num = assign_num - qualify_num")); /* this.orderService.update((Wrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().eq((v0) -> { return v0.getPlanId(); }, planId)).ne((v0) -> { return v0.getOrderStatus(); }, OrderStatusEnum.COMPLETE.getCode())).set((v0) -> { return v0.getOrderStatus(); }, OrderStatusEnum.COMPLETE.getCode())).set((v0) -> { return v0.getEndTime(); }, new Date())).setSql("scrapped_num = assign_num - qualify_num")); */ return Boolean.valueOf(update(Wrappers.lambdaUpdate().eq(Plan::getId, planId).set(Plan::getPlanStatus, PlanStatusEnum.FINISHED.getCode()).set(Plan::getReportNum, plan.getPlanNum()) .set(Plan::getEndTime, new Date()).setSql("scrapped_num = scrapped_num + (plan_num - " + plan.getReportNum() + ")"))); } @NotNull private Plan checkFinishConditionBefore(Long planId) { Plan plan = getOne(Wrappers.lambdaQuery().eq(Plan::getId, planId)); long count = this.orderReportRecordService.count(Wrappers.lambdaQuery().eq(OrderReportRecord::getPlanId, planId).eq(OrderReportRecord::getRecordStatus, CommonConstant.DISABLE)); if (Func.isEmpty(plan) || !CHECK_STATUS_LIST.contains(plan.getPlanStatus()) || count > 0) { throw new ServiceException(MessageUtils.message("cps.plan.can.not.finish", new Object[0])); } if (plan.getUnassignedNum().intValue() > 0) { throw new ServiceException(MessageUtils.message("cps.plan.distributed.before.finish", new Object[0])); } List planOrderRecordList = this.orderReportRecordService.list(Wrappers.lambdaQuery().eq(OrderReportRecord::getPlanId, planId)); if (Func.isNotEmpty(planOrderRecordList) && planOrderRecordList.stream().anyMatch(record -> { return record.getRecordStatus().equals(OrderReportRecordStatusEnum.STARTED.getCode()); })) { throw new ServiceException(MessageUtils.message("cps.plan.can.not.finish", new Object[0])); } return plan; } private OrderReportRecord packageRecord(Long planId, Order order, Integer scrappedNum, OrderProcess orderProcess, Date now) { OrderReportRecord orderReportRecord = new OrderReportRecord(); orderReportRecord.setSystemOrOrdinary(CoProductionEnum.SystemOrOrdinaryStatus.SYSTEM.getCode()); orderReportRecord.setPlanId(planId); orderReportRecord.setOrderId(order.getId()); orderReportRecord.setProcessId(orderProcess.getId()); orderReportRecord.setRecordStatus(OrderReportRecordStatusEnum.FINISHED.getCode()); orderReportRecord.setWorkshopTime(now); orderReportRecord.setStartTime(now); orderReportRecord.setQualifyNum(0); orderReportRecord.setScrappedNum(scrappedNum); return orderReportRecord; } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public Boolean close(Long planId) { checkPlanIsClose(planId); this.orderService.update(Wrappers.lambdaUpdate().set(Order::getOrderStatus, OrderStatusEnum.CLOSE.getCode()).eq(Order::getPlanId, planId)); this.orderProcessService.update(Wrappers.lambdaUpdate().set(OrderProcess::getProcessStatus, OrderProcessStatusEnum.CLOSE.getCode()).eq(OrderProcess::getPlanId, planId)); return Boolean.valueOf(update(Wrappers.lambdaUpdate().set(Plan::getPlanStatus, PlanStatusEnum.CLOSE.getCode()).eq(Plan::getId, planId))); } private void checkPlanIsClose(Long planId) { Plan plan = getPlan(String.valueOf(planId)); boolean flag = plan.getPlanStatus().equals(PlanStatusEnum.CLOSE.getCode()) || plan.getPlanStatus().equals(PlanStatusEnum.FINISHED.getCode()); long count = this.orderReportRecordService.count(Wrappers.lambdaQuery().eq(OrderReportRecord::getPlanId, planId).eq(OrderReportRecord::getRecordStatus, CommonConstant.DISABLE)); if (flag || count > 0) { throw new ServiceException(MessageUtils.message("cps.plan.can.not.close", new Object[0])); } } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public Boolean editWorkstation(OrderEditWorkstationVO orderEditWorkstationVO) { Order order = (Order)this.orderService.getOne(Wrappers.lambdaQuery().eq(Order::getId, orderEditWorkstationVO.getOrderId())); if (Func.isEmpty(order) || OrderStatusEnum.CLOSE.getCode().equals(order.getOrderStatus()) || OrderStatusEnum.COMPLETE.getCode().equals(order.getOrderStatus())) { throw new ServiceException(MessageUtils.message("cps.plan.order.can.not.edit", new Object[0])); } List orderProcessUpdateList = new ArrayList<>(); List orderWorkstationSaveList = new ArrayList<>(); List delOrderWorkstations = new ArrayList<>(); List processWorkstationList = orderEditWorkstationVO.getOrderProcessEditWorkStationVOList(); List oldOrderWorkstations = this.orderWorkstationService.list(Wrappers.lambdaQuery() .eq(OrderWorkstation::getOrderId, orderEditWorkstationVO.getOrderId())); /* List oldOrderWorkstations = this.orderWorkstationService.list((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getOrderId(); }, orderEditWorkstationVO.getOrderId()));*/ Map> oldOrderWorkstationMap = Func.isNotEmpty(oldOrderWorkstations) ? (Map) oldOrderWorkstations.stream().collect(Collectors.groupingBy((v0) -> { return v0.getProcessId(); })) : new HashMap<>(16); for (OrderProcessEditWorkStationVO orderProcessEditWorkStationVO : processWorkstationList) { List workIds = Func.toStrList(",", orderProcessEditWorkStationVO.getWorkstationId()); List oldWorkstations = oldOrderWorkstationMap.containsKey(orderProcessEditWorkStationVO.getOrderProcessId()) ? oldOrderWorkstationMap.get(orderProcessEditWorkStationVO.getOrderProcessId()) : new ArrayList<>(); if (oldWorkstations.stream().anyMatch(workstation -> { return workstation.getWorkstationStatus().equals(WorkstationStatusEnum.started.getCode()) && !workIds.contains(String.valueOf(workstation.getWorkstationId())); })) { throw new ServiceException(MessageUtils.message("cps.plan.order.workstaion.already.work", new Object[0])); } OrderProcess orderProcess = new OrderProcess(); orderProcess.setId(orderProcessEditWorkStationVO.getOrderProcessId()); orderProcess.setWorkstationId(orderProcessEditWorkStationVO.getWorkstationId()); orderProcess.setWorkstationName(orderProcessEditWorkStationVO.getWorkstationName()); orderProcessUpdateList.add(orderProcess); packageProcessWorkstation(order, orderWorkstationSaveList, oldWorkstations, orderProcess); oldWorkstations.forEach(old -> { if (!workIds.contains(String.valueOf(old.getWorkstationId()))) { delOrderWorkstations.add(old); } }); } if (Func.isNotEmpty(delOrderWorkstations)) { this.orderWorkstationService.removeBatchByIds(delOrderWorkstations); } if (Func.isNotEmpty(orderWorkstationSaveList)) { this.orderWorkstationService.saveBatch(orderWorkstationSaveList); } return Boolean.valueOf(this.orderProcessService.updateBatchById(orderProcessUpdateList)); } private void packageProcessWorkstation(Order order, List orderWorkstationSaveList, List oldWorkstations, OrderProcess orderProcess) { if (Func.isNotEmpty(orderProcess.getWorkstationId())) { List oldWorkstationIds = (List) oldWorkstations.stream().map((v0) -> { return v0.getWorkstationId(); }).collect(Collectors.toList()); String[] workstationIdSplit = orderProcess.getWorkstationId().split(","); String[] workstationNameSplit = orderProcess.getWorkstationName().split(","); for (int i = 0; i < workstationIdSplit.length; i++) { if (!oldWorkstationIds.contains(Long.valueOf(workstationIdSplit[i]))) { OrderWorkstation orderWorkstation = new OrderWorkstation(); orderWorkstation.setWorkstationId(Long.valueOf(workstationIdSplit[i])); if (Func.isNotEmpty(workstationNameSplit) && workstationNameSplit.length == workstationIdSplit.length) { orderWorkstation.setWorkstationName(workstationNameSplit[i]); } orderWorkstation.setWorkstationStatus(WorkstationStatusEnum.UNDRESSED.getCode()); orderWorkstation.setPlanId(order.getPlanId()); orderWorkstation.setOrderId(order.getId()); orderWorkstation.setProcessId(orderProcess.getId()); orderWorkstationSaveList.add(orderWorkstation); } } } } @Override // org.springblade.modules.coproduction.service.IPlanService public IPage listPage(IPage page, PlanQueryVO planQueryVO) { QueryWrapper queryWrapper = new QueryWrapper<>(); handlerSystemField(planQueryVO, queryWrapper); String extraFiledSql = this.handlerFieldSqlParse.getExtraFiledSql(planQueryVO.getFilter(), BusinessTypeEnums.PLAN_ORDER.getCode()); queryWrapper.apply(Func.isNotEmpty(extraFiledSql), extraFiledSql, new Object[0]); order(planQueryVO.getSortName(), planQueryVO.getOrder(), queryWrapper); IPage page2 = page(page, queryWrapper); List records = page2.getRecords(); Map> orderMap = getOrderMap(records); Map productTypeMap = getProductTypeNameMap(records); for (Plan plan : records) { String fieldResult = this.handlerFieldSqlParse.handlerFieldQueryResult(planQueryVO.getTypeId(), plan.getExtendField()); plan.setExtendField(fieldResult); List orders = orderMap.get(plan.getId()); if (Func.isNotEmpty(orders)) { String reportSituation = (String) orders.stream().map(order -> { return String.valueOf(order.getQualifyNum().intValue() + order.getScrappedNum().intValue()); }).collect(Collectors.joining("/")); plan.setReportSituation(reportSituation); } String productTypeName = productTypeMap.get(String.valueOf(plan.getProductId())); plan.setProductTypeLabel(productTypeName); plan.setHavePlanOrder(Boolean.valueOf(Func.isNotEmpty(orders))); } return page2; } private void order(String sortName, String order, QueryWrapper queryWrapper) { if (Func.isNotEmpty(sortName) && Func.isNotEmpty(order)) { queryWrapper.orderBy(Boolean.TRUE.booleanValue(), order.equals(FieldConstant.ASC), StrUtil.toUnderlineCase(sortName)); } else { queryWrapper.orderByDesc(SystemFieldConstant.CREATE_TIME, new String[]{"code"}); } } /* JADX WARN: Multi-variable type inference failed */ private Map> getOrderMap(List plans) { Map> orderMap = new HashMap<>(10); if (Func.isNotEmpty(plans)) { List planIds = plans.stream().map(Plan::getId).collect(Collectors.toList()); List orderList = this.orderService.list(Wrappers.lambdaQuery().in(CollectionUtil.isNotEmpty(planIds), Order::getPlanId, planIds)); /* List orderList = this.orderService.list((Wrapper) Wrappers.lambdaQuery().in(CollectionUtil.isNotEmpty(planIds), (v0) -> { return v0.getPlanId(); }, planIds)); orderMap = (Map) orderList.stream().collect(Collectors.groupingBy((v0) -> { return v0.getPlanId(); })); */ orderMap = orderList.stream().collect(Collectors.groupingBy(Order::getPlanId)); } return orderMap; } /* JADX WARN: Multi-variable type inference failed */ private Map getProductTypeNameMap(List plans) { Map productTypeMap = new HashMap<>(10); List products = (List) plans.stream().map((v0) -> { return v0.getProductId(); }).filter((v0) -> { return Func.isNotEmpty(v0); }).collect(Collectors.toList()); if (Func.isNotEmpty(products)) { List productTypeRes = this.planMapper.getProductType(products); productTypeMap = (Map) productTypeRes.stream().collect(Collectors.toMap((v0) -> { return v0.getProductId(); }, (v0) -> { return v0.getProductTypeName(); })); } return productTypeMap; } private void handlerSystemField(PlanQueryVO planQueryVO, QueryWrapper wrapper) { wrapper.eq(Func.isNotEmpty(planQueryVO.getTypeId()), SystemFieldConstant.TYPE_ID, planQueryVO.getTypeId()).eq(Func.isNotEmpty(planQueryVO.getCategory()), SystemFieldConstant.CATEGORY, planQueryVO.getCategory()).likeRight(Func.isNotEmpty(planQueryVO.getCode()), "code", planQueryVO.getCode()).likeRight(Func.isNotEmpty(planQueryVO.getIndentCode()), SystemFieldConstant.INDENT_CODE, planQueryVO.getIndentCode()).likeRight(Func.isNotEmpty(planQueryVO.getStandardModel()), SystemFieldConstant.STANDARD_MODEL, planQueryVO.getStandardModel()).in(Func.isNotEmpty(planQueryVO.getPlanStatus()), SystemFieldConstant.PLAN_STATUS, planQueryVO.getPlanStatus()).ge(Func.isNotEmpty(planQueryVO.getPlanStartTime()), SystemFieldConstant.PLAN_START_TIME, planQueryVO.getPlanStartTime()).le(Func.isNotEmpty(planQueryVO.getPlanEndTime()), SystemFieldConstant.PLAN_END_TIME, planQueryVO.getPlanEndTime()).likeRight(Func.isNotEmpty(planQueryVO.getProductName()), SystemFieldConstant.PRODUCT_NAME, planQueryVO.getProductName()); if (Func.isNotEmpty(planQueryVO.getProductTypeIds())) { List productIds = getProductIds(planQueryVO.getProductTypeIds()); wrapper.in(Func.isNotEmpty(productIds), SystemFieldConstant.PRODUCT_ID, productIds); } } private List getProductIds(List productTypeIds) { List products = this.productService.list(Wrappers.lambdaQuery().in(CollectionUtil.isNotEmpty(productTypeIds), Product::getTypeId, productTypeIds)); if (CollectionUtil.isEmpty(products)) { return new ArrayList<>(); } return products.stream().map(Product::getId).collect(Collectors.toList()); } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public Plan modify(PlanModifyVO planModifyVO) { Plan historyPlan = getPlan(String.valueOf(planModifyVO.getId())); checkPlanIsEditable(historyPlan, planModifyVO); Plan plan = PlanConvert.INSTANCE.convertModifyPlan(planModifyVO); plan.setUnassignedNum(Integer.valueOf(planModifyVO.getPlanNum().intValue() - historyPlan.getAssignedNum().intValue())); plan.setStartTime(historyPlan.getStartTime()); plan.setEndTime(historyPlan.getEndTime()); if (plan.getUnassignedNum().equals(plan.getPlanNum())) { plan.setPlanStatus(PlanStatusEnum.WAIT_PUBLISH.getCode()); } else if (plan.getPlanNum().equals(Integer.valueOf(historyPlan.getQualifyNum().intValue() + historyPlan.getScrappedNum().intValue())) && plan.getUnassignedNum().equals(CommonConstant.ZERO)) { plan.setPlanStatus(PlanStatusEnum.FINISHED.getCode()); Order order = this.orderService.getOne(Wrappers.lambdaQuery() .eq(Order::getPlanId, plan.getId()) .eq(Order::getOrderStatus, OrderStatusEnum.COMPLETE.getCode()) .orderByDesc(Order::getEndTime), Boolean.FALSE.booleanValue()); plan.setEndTime(order.getEndTime()); } updateById(plan); return plan; } @Override // org.springblade.modules.coproduction.service.IPlanService public Plan getPlan(String id) { if (Func.isEmpty(id)) { throw new ServiceException(MessageUtils.message("plan.not.found", new Object[0])); } Plan plan = (Plan) getById(id); if (Func.isEmpty(plan)) { throw new ServiceException(MessageUtils.message("plan.not.found", new Object[0])); } return plan; } @Override // org.springblade.modules.coproduction.service.IPlanService public List statusCount(String templateId) { List result = new ArrayList<>(); List list = list(Wrappers.lambdaQuery().select(Plan::getPlanStatus).eq(Plan::getTypeId, templateId)); Map countMap = new HashMap<>(8); if (Func.isNotEmpty(list)) { countMap = list.stream().collect(Collectors.groupingBy(Plan::getPlanStatus, Collectors.mapping(Plan::getPlanStatus, Collectors.reducing(Integer.valueOf(0), e -> Integer.valueOf(1), Integer::sum)))); } packageStatusCountInfo(countMap, result, PlanStatusEnum.WAIT_PUBLISH); packageStatusCountInfo(countMap, result, PlanStatusEnum.WAIT_MACHINE); packageStatusCountInfo(countMap, result, PlanStatusEnum.MACH_ING); packageStatusCountInfo(countMap, result, PlanStatusEnum.PAUSE); packageStatusCountInfo(countMap, result, PlanStatusEnum.FINISHED); packageStatusCountInfo(countMap, result, PlanStatusEnum.CLOSE); return result; } @Override // org.springblade.modules.coproduction.service.IPlanService public void updatePlanByStart(Plan plan, Date startTime) { if (PlanStatusEnum.WAIT_MACHINE.getCode().equals(plan.getPlanStatus())) { plan.setPlanStatus(PlanStatusEnum.MACH_ING.getCode()); if (Func.isEmpty(plan.getStartTime())) { plan.setStartTime(startTime); } updateById(plan); } } @Override // org.springblade.modules.coproduction.service.IPlanService public Boolean checkPlanStatus(Long planId) { boolean result = false; Plan plan = (Plan) getById(planId); if (plan == null) { throw new ServiceException("计划不存在"); } List planStatus = Arrays.asList(PlanStatusEnum.PAUSE.getCode(), PlanStatusEnum.CLOSE.getCode()); if (planStatus.contains(plan.getPlanStatus())) { result = true; } return Boolean.valueOf(result); } @Override // org.springblade.modules.coproduction.service.IPlanService public List listCraft() { List planCrafts = this.planMapper.getListCraft(); if (Func.isEmpty(planCrafts)) { return Collections.emptyList(); } List result = new ArrayList<>(); Map> craftMap = planCrafts.stream().collect(Collectors.groupingBy(PlanCraftDTO::getCraftId)); craftMap.forEach((craftId, crafts) -> { if (Func.isEmpty(crafts)) { return; } PlanCraftDTO planCraftData = (PlanCraftDTO) crafts.get(CommonConstant.ZERO.intValue()); PlanCraftVO planCraftVO = PlanConvert.INSTANCE.convertCraft(planCraftData); List versionList = new ArrayList<>(); crafts.forEach(c -> { versionList.add(c.getCraftVersion()); }); planCraftVO.setCraftVersions(versionList); result.add(planCraftVO); }); return result; } @Override // org.springblade.modules.coproduction.service.IPlanService public List listBom(Long id) { if (Func.isEmpty(id)) { return new ArrayList<>(); } List list = this.bomVersionService.list(Wrappers.lambdaQuery().eq(BomVersion::getCraftId, id) .eq(BomVersion::getVersionStatus, CommonConstant.ENABLE)); return PlanConvert.INSTANCE.convertBom(list); } @Override // org.springblade.modules.coproduction.service.IPlanService public CraftRoutingDetailVO getCraftPlan(Long id) { if (Func.isEmpty(id)) { return new CraftRoutingDetailVO(); } Plan plan = getPlan(String.valueOf(id)); if (Func.isEmpty(plan.getCraftId())) { return new CraftRoutingDetailVO(); } return this.craftRoutingService.detailCraft(plan.getCraftId()); } private void packageStatusCountInfo(Map countMap, List result, PlanStatusEnum planStatusEnum) { PlanStatusCountVO fVO = new PlanStatusCountVO(); fVO.setPlanStatus(planStatusEnum.getCode()); fVO.setPlanStatusStr(planStatusEnum.getName()); if (countMap.containsKey(planStatusEnum.getCode())) { fVO.setCount(countMap.get(planStatusEnum.getCode())); } result.add(fVO); } private void checkPlanIsEditable(Plan plan, PlanModifyVO planModifyVO) { planBaseCheck(planModifyVO.getPlanNum(), planModifyVO.getPlanStartTime(), planModifyVO.getPlanEndTime(), planModifyVO.getExtendField()); Integer planStatus = plan.getPlanStatus(); if (planStatus.equals(PlanStatusEnum.PAUSE.getCode()) || planStatus.equals(PlanStatusEnum.CLOSE.getCode()) || planStatus.equals(PlanStatusEnum.FINISHED.getCode())) { throw new ServiceException(MessageUtils.message("plan.status.not.modify", new Object[0])); } if (Func.isEmpty(planModifyVO.getPlanNum()) || planModifyVO.getPlanNum().intValue() < plan.getAssignedNum().intValue()) { throw new ServiceException(MessageUtils.message("plan.num.not.less.than.have.been.distributed.num", new Object[0])); } } private void planBaseCheck(Integer planNum, Date startTime, Date endTime, String exJson) { if (planNum.intValue() <= 0) { throw new ServiceException(MessageUtils.message("plan.num.must.greater.than.zero", new Object[0])); } if (endTime.compareTo((Date) cn.hutool.core.date.DateUtil.parseDate(LocalDate.now().toString())) < 0) { throw new ServiceException(MessageUtils.message("cps.plan.start.time.cannot.be.greater.than.the.end.time", new Object[0])); } if (startTime.compareTo(endTime) > 0) { throw new ServiceException(MessageUtils.message("cps.plan.start.time.not.be.greater.than.end.time", new Object[0])); } this.handlerFieldSqlParse.handlerFieldSaveOrUpdateCheck(exJson, BusinessTypeEnums.PLAN_ORDER.getCode()); } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public void reportPlan(Plan plan, Integer orderQualifyNum, Integer orderScrappedNum, Boolean isDel) { Long planId = plan.getId(); Integer oldQualifyNum = Func.isNotEmpty(plan.getQualifyNum()) ? plan.getQualifyNum() : CommonConstant.ZERO; Integer oldScrappedNum = Func.isNotEmpty(plan.getScrappedNum()) ? plan.getScrappedNum() : CommonConstant.ZERO; Integer planNum = plan.getPlanNum(); Integer newQualifyNum = Integer.valueOf(oldQualifyNum.intValue() + orderQualifyNum.intValue()); Integer newScrappedNum = Integer.valueOf(oldScrappedNum.intValue() + orderScrappedNum.intValue()); Integer newReportNum = Integer.valueOf(newQualifyNum.intValue() + newScrappedNum.intValue()); if (planNum.intValue() < newReportNum.intValue()) { throw new ServiceException(MessageUtils.message("production.report.fail.report.num.less.than.plan.num", new Object[0])); } plan.setQualifyNum(newQualifyNum); plan.setScrappedNum(newScrappedNum); plan.setReportNum(newReportNum); LambdaUpdateWrapper planLambdaUpdateWrapper = Wrappers.lambdaUpdate().eq(Plan::getId, planId); boolean completePlan = false; if (planNum.equals(newReportNum)) { completePlan = true; } if (completePlan) { planLambdaUpdateWrapper.set((v0) -> { return v0.getPlanStatus(); }, PlanStatusEnum.FINISHED.getCode()); Date endTime = null; OrderReportRecord latestRecord = this.orderReportRecordService.getLatestRecord(planId, null, null); if (latestRecord != null) { endTime = latestRecord.getWorkshopTime(); } if (endTime == null) { endTime = new Date(); } plan.setEndTime(endTime); } if (planNum.intValue() > newReportNum.intValue() && PlanStatusEnum.FINISHED.getCode().equals(plan.getPlanStatus())) { planLambdaUpdateWrapper.set(Plan::getPlanStatus, PlanStatusEnum.MACH_ING.getCode()); planLambdaUpdateWrapper.set(Plan::getPlanEndTime, null); } if (isDel.booleanValue()) { updatePlanStartTime(plan, planLambdaUpdateWrapper); } update(plan, planLambdaUpdateWrapper); } private void updatePlanStartTime(Plan plan, LambdaUpdateWrapper planLambdaUpdateWrapper) { Date startTime = null; OrderReportRecord earliestRecord = this.orderReportRecordService.getEarliestRecord(plan.getId(), null, null, null); if (earliestRecord != null) { startTime = earliestRecord.getStartTime(); } if (startTime == null) { planLambdaUpdateWrapper.set(Plan::getStartTime, null); planLambdaUpdateWrapper.set(Plan::getPlanStatus, PlanStatusEnum.WAIT_MACHINE.getCode()); } if (!plan.getStartTime().equals(startTime)) { planLambdaUpdateWrapper.set(Plan::getStartTime, startTime); } } @Override // org.springblade.modules.coproduction.service.IPlanService @Transactional(rollbackFor = {Exception.class}) public Plan reportCurrentPlan(List reportWorkDTOList, Plan plan, Integer orderQualityNum) { List reportRecords = (List) reportWorkDTOList.stream().filter(s -> { return Func.isEmpty(s.getMainSequenceId()); }).collect(Collectors.toList()); Integer reportScrappedNum = (Integer) reportRecords.stream().map((v0) -> { return v0.getScrappedNum(); }).reduce(0, (v0, v1) -> { return Integer.sum(v0, v1); }); Integer planNum = plan.getPlanNum(); Integer newQualifyNum = Integer.valueOf(plan.getQualifyNum().intValue() + (orderQualityNum == null ? 0 : orderQualityNum.intValue())); Integer newScrappedNum = Integer.valueOf(plan.getScrappedNum().intValue() + reportScrappedNum.intValue()); Integer newReportNum = Integer.valueOf(newQualifyNum.intValue() + newScrappedNum.intValue()); if (planNum.intValue() < newReportNum.intValue()) { throw new ServiceException(MessageUtils.message("production.report.fail.report.num.less.than.plan.num", new Object[0])); } boolean completePlan = false; if (planNum.equals(newReportNum)) { completePlan = true; } if (completePlan) { plan.setPlanStatus(PlanStatusEnum.FINISHED.getCode()); plan.setReportNum(newReportNum); Date endTime = null; OrderReportRecord latestRecord = this.orderReportRecordService.getLatestRecord(plan.getId(), null, null); if (latestRecord != null) { endTime = latestRecord.getWorkshopTime(); } if (endTime == null) { endTime = new Date(); } plan.setEndTime(endTime); } else { plan.setPlanStatus(PlanStatusEnum.MACH_ING.getCode()); plan.setEndTime(null); } plan.setReportNum(newReportNum); plan.setQualifyNum(newQualifyNum); plan.setScrappedNum(newScrappedNum); return plan; } @Override // org.springblade.modules.coproduction.service.IPlanService public Plan delReportRecordCurrentPlan(List reportWorkDTOList, Plan plan, Order order, List removeRecordIds) { List reportRecords = (List) reportWorkDTOList.stream().filter(s -> { return Func.isEmpty(s.getMainSequenceId()); }).collect(Collectors.toList()); Integer reportScrappedNum = (Integer) reportRecords.stream().map((v0) -> { return v0.getScrappedNum(); }).reduce(0, (v0, v1) -> { return Integer.sum(v0, v1); }); Integer delNum = Integer.valueOf(order.getDelOrderNum() == null ? 0 : order.getDelOrderNum().intValue()); Integer planNum = plan.getPlanNum(); Integer newQualifyNum = Integer.valueOf(plan.getQualifyNum().intValue() + delNum.intValue()); Integer newScrappedNum = Integer.valueOf(plan.getScrappedNum().intValue() + reportScrappedNum.intValue()); Integer newReportNum = Integer.valueOf(newQualifyNum.intValue() + newScrappedNum.intValue()); if (planNum.intValue() < newReportNum.intValue()) { throw new ServiceException(MessageUtils.message("production.report.fail.report.num.less.than.plan.num", new Object[0])); } if (planNum.intValue() == newQualifyNum.intValue() + newScrappedNum.intValue()) { plan.setPlanStatus(PlanStatusEnum.FINISHED.getCode()); plan.setReportNum(newReportNum); plan.setEndTime(cn.hutool.core.date.DateUtil.date()); } else { plan.setPlanStatus(PlanStatusEnum.MACH_ING.getCode()); plan.setEndTime(null); } boolean completePlan = false; if (planNum.equals(newReportNum)) { completePlan = true; } if (!completePlan) { plan.setEndTime(null); } plan.setQualifyNum(newQualifyNum); plan.setScrappedNum(newScrappedNum); plan.setReportNum(newReportNum); delRecordPlanStartTime(plan, removeRecordIds); return plan; } private void delRecordPlanStartTime(Plan plan, List removeRecordIds) { Date startTime = null; OrderReportRecord earliestRecord = this.orderReportRecordService.getEarliestRecord(plan.getId(), null, null, removeRecordIds); if (earliestRecord != null) { startTime = earliestRecord.getStartTime(); } if (startTime == null) { plan.setStartTime(null); plan.setPlanStatus(PlanStatusEnum.WAIT_MACHINE.getCode()); } Date planStartTime = plan.getStartTime(); if (startTime != null && planStartTime != null && !planStartTime.equals(startTime)) { plan.setStartTime(startTime); } } }