From 2f3f0f59167aef1e83b785ed6652c99d4917a02c Mon Sep 17 00:00:00 2001 From: tzy1042411602 <1042411602@qq.com> Date: Mon, 25 Nov 2024 11:48:55 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=8E=A5=E5=8F=A3=20=20?= =?UTF-8?q?=E5=B7=A5=E8=89=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ProcessRouteController.java | 33 +--- .../java/com/ruoyi/system/runner/JdUtil.java | 5 +- .../system/service/IProcessRouteService.java | 3 +- .../service/impl/ProcessRouteServiceImpl.java | 181 ++++++++++++------ 4 files changed, 138 insertions(+), 84 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessRouteController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessRouteController.java index f814a18..02d56e4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessRouteController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessRouteController.java @@ -37,8 +37,6 @@ import java.util.*; /** * 工艺路线 - * - * @author ruoyi * @date 2024-10-09 */ @Validated @@ -85,25 +83,7 @@ public class ProcessRouteController extends BaseController { parent.setMaterialName(processRouteVo.getMaterialName()); parent.setMaterial(processRouteVo.getMaterial()); parent.setDiscWeight(processRouteVo.getDiscWeight()); - /*parent.setRawMaterialCode(processRouteVo.getRawMaterialCode()); - parent.setRawMaterialName(processRouteVo.getRawMaterialName()); - parent.setDiscUsage(processRouteVo.getDiscUsage()); - parent.setBomUnit(processRouteVo.getBomUnit()); - parent.setBomMaterial(processRouteVo.getBomMaterial()); - parent.setProcessNo(processRouteVo.getProcessNo()); - parent.setWorkCenter(processRouteVo.getWorkCenter()); - parent.setProcessName(processRouteVo.getProcessName()); - parent.setProcessDescription(processRouteVo.getProcessDescription()); - parent.setProcessControl(processRouteVo.getProcessControl()); - parent.setActivityDuration(processRouteVo.getActivityDuration()); - parent.setActivityUnit(processRouteVo.getActivityUnit()); - parent.setUnitQuantity(processRouteVo.getUnitQuantity()); - parent.setBatchQuantity(processRouteVo.getBatchQuantity()); - parent.setFirstBatchQuantity(processRouteVo.getFirstBatchQuantity()); - parent.setPlanStartTime(processRouteVo.getPlanStartTime()); - parent.setPlanEndTime(processRouteVo.getPlanEndTime()); - parent.setXuStartTime(processRouteVo.getXuStartTime()); - parent.setXuEndTime(processRouteVo.getXuEndTime());*/ + // 初始化子节点列表 parent.setChildren(new ArrayList<>()); // 将父节点放入Map中 @@ -112,7 +92,7 @@ public class ProcessRouteController extends BaseController { topLevelList.add(parent); } // 创建子节点,并将其添加到父节点的子集 - ProcessRouteVo child = createChildVo(processRouteVo, parent.getId()); + ProcessRouteVo child = createChildVo(processRouteVo, parent.getId(),parent.getMaterialCode(),parent.getMaterialName()); parent.getChildren().add(child); } @@ -133,10 +113,12 @@ public class ProcessRouteController extends BaseController { * @param processRouteVo 原始数据 * @return ProcessRouteVo 子节点 */ - private ProcessRouteVo createChildVo(ProcessRouteVo processRouteVo,Long parentId) { + private ProcessRouteVo createChildVo(ProcessRouteVo processRouteVo,Long parentId,String materialCode,String materialName) { ProcessRouteVo child = new ProcessRouteVo(); child.setId(processRouteVo.getId()); child.setParentId(parentId); + /* child.setMaterialCode(materialCode); + child.setMaterialName(materialName);*/ /* child.setMaterialCode(processRouteVo.getMaterialCode()); child.setMaterialName(processRouteVo.getMaterialName()); child.setMaterial(processRouteVo.getMaterial()); @@ -327,8 +309,9 @@ public class ProcessRouteController extends BaseController { @Log(title = "保存工艺路线", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/addRoute") - public R addRoute( @RequestBody List list) { - return toAjax(iProcessRouteService.addRoute(list)); + public R addRoute( @RequestBody List list) { + + return iProcessRouteService.addRoute(list); } @SaCheckPermission("system:route:add") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java index 0e09f53..5d4fc98 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java @@ -372,6 +372,7 @@ public class JdUtil { } } /* + 材料bom { "FMATERIALID.FNumber": "001HD24.01.01.017.0", "FITEMNAME": "行走原点标定", @@ -389,10 +390,10 @@ public class JdUtil { for (PlanOrderVo planOrder : planOrderList) { JsonObject json = new JsonObject(); json.addProperty("FormId", "ENG_BOM"); - json.addProperty("FieldKeys", "FMATERIALID.FNumber,FITEMNAME ,FMATERIALIDCHILD.FNumber ,FCHILDITEMNAME ,FNUMERATOR ,FDENOMINATOR,FChildBaseUnitID.FNumbe "); + json.addProperty("FieldKeys", "F_HBYT_SCLH,FMaterialID.FNumber,FMaterialID.FNumber2,FMaterialName1,FNumerator,FDenominator,FUnitID2.FName"); JsonArray filterString = new JsonArray(); JsonObject filterObject = new JsonObject(); - filterObject.addProperty("FieldName", "FMATERIALID.FNumber"); + filterObject.addProperty("FieldName", "FMaterialID.FNumber"); filterObject.addProperty("Compare", "="); // 改为等号运算符 filterObject.addProperty("Value", planOrder.getFBillNo()); filterObject.addProperty("Left", ""); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessRouteService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessRouteService.java index add8174..ffca0d8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessRouteService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessRouteService.java @@ -1,6 +1,7 @@ package com.ruoyi.system.service; import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.system.domain.MaterialBom; import com.ruoyi.system.domain.ProcessRoute; @@ -82,7 +83,7 @@ public interface IProcessRouteService { List getProcessInfoList(String query); - boolean addRoute(List list); + R addRoute(List list); List getProcessMaterialList(ProcessRoute processRoute); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java index dbc4ffd..0ede1e2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.json.JSONUtil; +import cn.hutool.poi.excel.cell.CellSetter; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -14,6 +15,7 @@ import com.google.gson.JsonObject; import com.kingdee.bos.webapi.entity.RepoRet; import com.kingdee.bos.webapi.sdk.K3CloudApi; import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; @@ -28,10 +30,7 @@ import com.ruoyi.system.jdmain.rouplan.FSubEntity; import com.ruoyi.system.jdmain.rouplan.Model; import com.ruoyi.system.jdmain.route.ProcessModel; import com.ruoyi.system.listener.LoadBomResult; -import com.ruoyi.system.mapper.MaterialBomMapper; -import com.ruoyi.system.mapper.ProcessInfoMapper; -import com.ruoyi.system.mapper.ProcessRouteMapper; -import com.ruoyi.system.mapper.ProductionOrderMapper; +import com.ruoyi.system.mapper.*; import com.ruoyi.system.runner.PDFGenerator; import com.ruoyi.system.service.IBomDetailsService; import com.ruoyi.system.service.IMaterialPropertiesService; @@ -69,6 +68,8 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { @Autowired IBomDetailsService iBomDetailsService; @Autowired + BomDetailsMapper bomDetailsMapper; + @Autowired IMaterialPropertiesService iMaterialPropertiesService; @Autowired ProductionOrderMapper productionOrderMapper; @@ -187,10 +188,33 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - //TODO 做一些业务上的校验,判断是否需要校验 + List cunList = new ArrayList<>(); + // 这里你到时候改成通过ids查询出来 这个ids是你传过来要删除的,你不能通过去排序和查询en + for (Long id : ids) { + //存储删掉的数据 + ProcessRoute processRoute = baseMapper.selectById(id); + cunList.add(processRoute); } - return baseMapper.deleteBatchIds(ids) > 0; + // 批量删除 + if (baseMapper.deleteBatchIds(ids) > 0) { + //随便获取一个 + ProcessRoute processRoute = cunList.get(0); + //获取删除后其他的 工序,然后更新工序号 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProcessRoute::getRouteDescription, processRoute.getRouteDescription()) + .eq(ProcessRoute::getMaterialCode, processRoute.getMaterialCode()) + .eq(ProcessRoute::getMaterialName, processRoute.getMaterialName()) + .isNotNull(ProcessRoute::getProcessNo); + List routeList = baseMapper.selectList(wrapper); + //工序号升序排序 + routeList.sort(Comparator.comparing(ProcessRoute::getProcessNo)); + + for (int i = 0; i < routeList.size(); i++) { + routeList.get(i).setProcessNo((long) (i + 1) * 10); + } + return baseMapper.insertOrUpdateBatch(routeList); + } + return false; } @Override @@ -376,9 +400,14 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { // 3. 保存 BOM 详情 saveBomDetails(bomDetailsVos); - + List routeArrayList = new ArrayList<>(); // 4. 批量插入 ProcessRoute 数据 - return baseMapper.insertBatch(processRoutes); + for (ProcessRoute processRoute : processRoutes) { + if (processRoute.getProcessNo()!=null||processRoute.getProcessName()!=null){ + routeArrayList.add(processRoute); + } + } + return baseMapper.insertBatch(routeArrayList); } private void processMaterialBom(List processRoutes) { @@ -405,19 +434,6 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { materialBom.setUnit(unit); materialBom.setMaterialType(materialType); materialBom.setQuantity(quantity); -/* - ProductionOrder productionOrder = new ProductionOrder(); - productionOrder.setProductionOrderNo(projectNumber); - productionOrder.setDrawingNo(processRoute.getRawMaterialCode()); - productionOrder.setDrawingName(processRoute.getRawMaterialName()); - productionOrder.setQuantity(processRoute.getUnitQuantity()); - productionOrder.setMaterial(materialType); - productionOrder.setSingleWeight(processRoute.getDiscWeight()); -// productionOrder.setTotalWeight(processRoute.getDiscWeight() * processRoute.getUnitQuantity()); - productionOrder.setParentPart(parentMaterialCode); - productionOrder.setParentPart(parentMaterialName); - // 这里插入 productionOrder 数据 - productionOrderMapper.insert(productionOrder);*/ // 这里插入 materialBom 数据 materialBomMapper.insert(materialBom); } @@ -426,27 +442,21 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { private List processBomDetails(List processRoutes, List productionOrderVos) { List bomDetailsVos = new ArrayList<>(); - String zFnumber = null; - String zFname = null; - String zFlinghao = null; - // 1. 处理总装部件 - String proMaterials = null; for (ProcessRoute processRoute : processRoutes) { - if (processRoute.getRawMaterialCode() != null) { - zFlinghao = processRoute.getProcessDescription(); - BomDetailsVo bomDetails = createBomDetails(processRoute); - + if (processRoute != null) { + String zFlinghao = processRoute.getRouteDescription(); if ("总装部件".equals(processRoute.getMaterial())) { - proMaterials = "总装部件"; - zFnumber = processRoute.getMaterialCode(); - zFname = processRoute.getMaterialName(); - + String zFnumber = processRoute.getMaterialCode(); + String zFname = processRoute.getMaterialName(); // 将装配 BOM 详情填充进 BOM 详情列表 - bomDetailsVos.add(createAssemblyBomDetails(zFlinghao, zFnumber, zFname, productionOrderVos)); + createAssemblyBomDetails(zFlinghao, zFnumber, zFname, productionOrderVos); + continue; + } + if (processRoute.getRawMaterialCode() != null || processRoute.getRawMaterialName() != null || processRoute.getBomMaterial() != null || processRoute.getBomUnit() != null) { + BomDetailsVo bomDetails = createBomDetails(processRoute); + bomDetailsVos.add(bomDetails); } - - bomDetailsVos.add(bomDetails); } } @@ -475,7 +485,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { bomDetails.setQuantity(1.0); } // 根据 RawMaterialCode 判断是否外购 - if (isOutsourced(processRoute.getRawMaterialCode())) { + if (isOutsourced(processRoute.getMaterialCode())) { bomDetails.setStats("外购"); } else { bomDetails.setStats("自制"); @@ -486,14 +496,14 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { return bomDetails; } - private BomDetailsVo createAssemblyBomDetails(String zFlinghao, String zFnumber, String zFname, List productionOrderVos) { - BomDetailsVo bomDetails = null; + private void createAssemblyBomDetails(String zFlinghao, String zFnumber, String zFname, List productionOrderVos) { + ArrayList bomDetailsVos = new ArrayList<>(); for (ProductionOrderVo productionOrderVo : productionOrderVos) { - bomDetails = new BomDetailsVo(); + BomDetailsVo bomDetails = new BomDetailsVo(); bomDetails.setTotalWeight(zFlinghao); bomDetails.setFNumber(zFnumber); bomDetails.setFName(zFname); - bomDetails.setPartdiagramCode(productionOrderVo.getProductionOrderNo()); + bomDetails.setPartdiagramCode(productionOrderVo.getParentDrawingNo()); bomDetails.setPartdiagramName(productionOrderVo.getParentPart()); bomDetails.setPartNumber(productionOrderVo.getDrawingNo()); bomDetails.setName(productionOrderVo.getDrawingName()); @@ -501,14 +511,17 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { bomDetails.setMaterial(productionOrderVo.getMaterial()); // 判断外购或自制 - if (isOutsourced(productionOrderVo.getDrawingNo())) { + if (isOutsourced(productionOrderVo.getDrawingNo())|| productionOrderVo.getRemark().contains("外购")) { bomDetails.setStats("外购"); } else { bomDetails.setStats("自制"); } + // iBomDetailsService.insertByVo(bomDetails); + bomDetailsVos.add(bomDetails); } + log.info("总装bom物料添加"); - return bomDetails; + saveBomDetails(bomDetailsVos); } public int loadMaterialPreservation(BomDetails bomDetails1, String states) { @@ -705,9 +718,10 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { } private boolean isOutsourced(String code) { - return code.startsWith("009") || code.startsWith("AA") || code.startsWith("AB") || code.startsWith("AC") || code.startsWith("015") || code.contains("(M)"); + return code.startsWith("009") || code.startsWith("AA") || code.startsWith("AB(") || code.startsWith("AC(") || code.startsWith("015") || code.contains("(M)") ||code.startsWith("BC("); } + //保存到 BomDetails 表中 private void saveBomDetails(List bomDetailsVos) { List materialsToAdd = new ArrayList<>(); for (BomDetailsVo bomDetailsVo : bomDetailsVos) { @@ -742,6 +756,40 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { iBomDetailsService.updateByBo(BeanUtil.toBean(material, BomDetailsBo.class)); } } + private void saveBomDetails1(List bomDetailsVos) { + List materialsToAdd = new ArrayList<>(); + for (BomDetailsVo bomDetailsVo : bomDetailsVos) { + BomDetails bomDetails = BeanUtil.toBean(bomDetailsVo, BomDetails.class); + + // 验证物料是否存在 + if (isMaterialVerification(bomDetails.getPartNumber(), bomDetails.getName()) == 1) { + bomDetails.setUnitWeight("是"); + } else { + bomDetails.setUnitWeight("否"); + materialsToAdd.add(bomDetails); + } + + // 保存 BomDetails 记录 + // iBomDetailsService.insertByVo(BeanUtil.toBean(bomDetails, BomDetailsVo.class)); + } + + // 新增不存在的物料 + for (BomDetails material : materialsToAdd) { + String state = determineState(material); + log.info("开始新增不存在的物料 ==> 物料图号: " + material.getPartNumber() + " 物料名称: " + material.getName()); + + int result = loadMaterialPreservation(material, state); + if (result == 1) { + log.info("新增物料成功 ==> 物料图号: " + material.getPartNumber() + " 物料名称: " + material.getName()); + material.setUnitWeight("新增成功"); + } else { + log.error("新增物料失败 ==> 物料图号: " + material.getPartNumber() + " 物料名称: " + material.getName()); + } + + // 更新物料状态 + // iBomDetailsService.updateByBo(BeanUtil.toBean(material, BomDetailsBo.class)); + } + } @Override public List pushGroupWeldments(ProcessRoute Bo) { @@ -1137,19 +1185,40 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { // 过滤掉 null 值并转换为字符串 return processInfoList.stream() .filter(Objects::nonNull) - .map(ProcessInfo::getProcessName) // 获取 processName 字段 - .filter(Objects::nonNull) // 过滤掉 null 值 - .distinct() // 去重 + // 获取 processName 字段 + .map(ProcessInfo::getProcessName) + // 过滤掉 null 值 + .filter(Objects::nonNull) + // 去重 + .distinct() .collect(Collectors.toList()); } @Override - public boolean addRoute(List list) { - //根据下标重置工序号 10 20 30 40 - for (int i = 0; i < list.size(); i++) { - list.get(i).setProcessNo((long) ((i + 1) * 10)); + public R addRoute(List list) { + + List routeArrayList = new ArrayList<>(); + for (ProcessRouteVo vo : list) { + ProcessRoute route = new ProcessRoute(); + route.setRouteDescription(vo.getRouteDescription()); + route.setMaterialCode(vo.getMaterialCode()); + route.setMaterialName(vo.getMaterialName()); + route.setProcessNo(vo.getProcessNo()); + route.setWorkCenter(vo.getWorkCenter()); + route.setDiscWeight(vo.getDiscWeight()); + route.setMaterial(vo.getMaterial()); + route.setProcessName(vo.getProcessName()); + route.setProcessControl(vo.getProcessControl()); + route.setProcessDescription(vo.getProcessDescription()); + route.setActivityDuration(vo.getActivityDuration()); + route.setActivityUnit("分"); + routeArrayList.add(route); } - return baseMapper.insertBatch(list); + if (baseMapper.insertBatch(routeArrayList)) { + return R.ok(); + } + + return null; } /** @@ -1158,8 +1227,8 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { @Override public List getProcessMaterialList(ProcessRoute processRoute) { if (processRoute == null) { - logger.error("ProcessRoute is null"); - throw new IllegalArgumentException("ProcessRoute cannot be null"); + logger.error("做工艺的物料不存在"); + throw new IllegalArgumentException("做工艺的物料不能为空"); } String materialCode = processRoute.getMaterialCode();