diff --git a/ruoyi-admin/src/main/resources/kdwebapi.properties b/ruoyi-admin/src/main/resources/kdwebapi.properties index 4e8f950..c6ba843 100644 --- a/ruoyi-admin/src/main/resources/kdwebapi.properties +++ b/ruoyi-admin/src/main/resources/kdwebapi.properties @@ -1,6 +1,6 @@ #??ID-PROD -#X-KDApi-AcctID = 670768a85463de -X-KDApi-AcctID = 6723465a38c722 +X-KDApi-AcctID = 670768a85463de +#X-KDApi-AcctID = 6723465a38c722 X-KDApi-UserName = Administrator #??IDID X-KDApi-AppID = 288012_Rc0C0zCG2lga0/Vs2Y4pzYSL6hQcWOko diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/BomDetailsController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/BomDetailsController.java index 4b70df3..75e8926 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/BomDetailsController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/BomDetailsController.java @@ -1198,7 +1198,7 @@ public class BomDetailsController extends BaseController { } - public int loadMaterialPreservation(BomDetails bomDetails1, String states) { + public int loadMaterialPreservation1(BomDetails bomDetails1, String states) { K3CloudApi client = new K3CloudApi(); // 创建一个空的JsonObject JsonObject json = new JsonObject(); @@ -1392,7 +1392,7 @@ public class BomDetailsController extends BaseController { return 1; } //创建电气物料 - public int loadMaterialPreservation1(BomDetails bomDetails1, String states) { + public int loadMaterialPreservation(BomDetails bomDetails1, String states) { K3CloudApi client = new K3CloudApi(); // 创建一个空的JsonObject JsonObject json = new JsonObject(); 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 7a59831..f77fbd2 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 @@ -12,6 +12,7 @@ import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.excel.ExcelResult; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.MaterialBom; import com.ruoyi.system.domain.ProcessRoute; import com.ruoyi.system.domain.bo.ProcessRouteBo; import com.ruoyi.system.domain.dto.CombinedDTO; @@ -49,7 +50,7 @@ public class ProcessRouteController extends BaseController { private final IProcessRouteService iProcessRouteService; private static final Logger log = LoggerFactory.getLogger(ProcessRouteController.class); - private Long generateUniqueParentId(Long originalId) { + private Long generateUniqueParentId( Long originalId) { return originalId + 1000; } @@ -239,9 +240,6 @@ public class ProcessRouteController extends BaseController { /** * 查询组焊件集合 - * - * @return - * @RequestBody List bomDetail */ @Log(title = "查询组焊件集合") @SaCheckPermission("system:route:pushGroupWeldments") @@ -252,9 +250,6 @@ public class ProcessRouteController extends BaseController { /** * 查询需要单独生成BOm 的原材料集合 - * - * @return - * @RequestBody List bomDetail */ @Log(title = "查询需要单独生成BOM的原材料集合") @SaCheckPermission("system:route:getRawBom") @@ -291,9 +286,6 @@ public class ProcessRouteController extends BaseController { /** * 查询项目列表 - * - * @return - * @RequestBody List routeVoList */ @Log(title = "获取所有的项目令号") @SaCheckPermission("system:route:getRawBom") @@ -338,4 +330,20 @@ public class ProcessRouteController extends BaseController { public R addRoute( @RequestBody List list) { return toAjax(iProcessRouteService.addRoute(list)); } + + @SaCheckPermission("system:route:add") + @Log(title = "工艺路线", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/deleteRoute") + public List deleteRoute( @RequestBody ProcessRoute processRoute) { + return iProcessRouteService.deleteRoute(processRoute); + } + + @Log(title = "获取材料bom列表") + @SaCheckPermission("system:route:getRawBom") + @PostMapping("/getProcessMaterialList") + public ResponseEntity> getProcessMaterialList(@RequestBody ProcessRoute processRoute) { + return ResponseEntity.ok(iProcessRouteService.getProcessMaterialList(processRoute)); + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/WlStockDataController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/WlStockDataController.java index 44cf7d5..8787139 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/WlStockDataController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/WlStockDataController.java @@ -109,9 +109,12 @@ public class WlStockDataController extends BaseController { /** * 生成安全库存单据 + * @return */ - - @XxlJob(value = "generateDoc") + @SaCheckPermission("system:stockData:generateDoc") + @Log(title = "安全库存单据", businessType = BusinessType.OTHER) + @PostMapping("/generateDoc") + // @XxlJob(value = "generateDoc") public R> generateDoc() { List wlStockData = iWlStockDataService.generateDoc(); return R.ok(wlStockData); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProcessRouteMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProcessRouteMapper.java index bb336b9..d8ef776 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProcessRouteMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/ProcessRouteMapper.java @@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; +import java.util.List; + /** * 工艺路线Mapper接口 * @@ -26,4 +28,6 @@ public interface ProcessRouteMapper extends BaseMapperPlus selectRouteByLinAndMaterialCode(String routeDescription, String materialCode, String materialName); } 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 b0f6fa0..1a21e82 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 @@ -2,6 +2,7 @@ package com.ruoyi.system.service; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.system.domain.MaterialBom; import com.ruoyi.system.domain.ProcessRoute; import com.ruoyi.system.domain.bo.ProcessRouteBo; import com.ruoyi.system.domain.dto.CombinedDTO; @@ -74,7 +75,6 @@ public interface IProcessRouteService { /** * 生成这个项目的pdf - * * @param rooteProdet * @return */ @@ -85,4 +85,8 @@ public interface IProcessRouteService { List getProcessInfoList(String query); boolean addRoute(List list); + + List getProcessMaterialList(ProcessRoute processRoute); + + List deleteRoute(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 541ea38..4a29f82 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 @@ -76,6 +76,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { @Autowired ProcessInfoMapper processInfoMapper; private static final Logger log = LoggerFactory.getLogger(ProcessRouteController.class); + private static final Logger logger = LoggerFactory.getLogger(IProcessRouteService.class); /** * 查询工艺路线 @@ -388,13 +389,11 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { String unit = processRoute.getBomUnit(); String materialType = processRoute.getBomMaterial(); BigDecimal quantity = processRoute.getDiscUsage() != null ? BigDecimal.valueOf(processRoute.getDiscUsage()) : BigDecimal.ZERO; - if (projectNumber == null || parentMaterialCode == null || parentMaterialName == null || unit == null || materialType == null) { // 处理空值情况,例如记录日志或抛出异常 log.error("必填字段为空: {}", processRoute); continue; } - // 处理 MaterialBom MaterialBom materialBom = new MaterialBom(); materialBom.setProjectNumber(projectNumber); @@ -405,8 +404,20 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { materialBom.setUnit(unit); materialBom.setMaterialType(materialType); materialBom.setQuantity(quantity); - - // 这里插入 MaterialBom 数据 +/* + 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); } } @@ -454,8 +465,14 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { bomDetails.setQuantity(processRoute.getDiscUsage() / 1000.0); // 转换为米 } else { bomDetails.setQuantity(processRoute.getDiscUsage()); + bomDetails.setDenominator(1.0); } + //处理原来材料分数格式 + if ("根".equals(processRoute.getBomUnit())) { + bomDetails.setDenominator(processRoute.getDiscUsage()); + bomDetails.setQuantity(1.0); + } // 根据 RawMaterialCode 判断是否外购 if (isOutsourced(processRoute.getRawMaterialCode())) { bomDetails.setStats("外购"); @@ -464,7 +481,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { } bomDetails.setMaterial(processRoute.getBomMaterial()); - bomDetails.setDenominator(1.0); // 假设分母为 1 + bomDetails.setDenominator(1.0); return bomDetails; } @@ -780,7 +797,17 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { public List getProcessRoute(String rooteProdet) { //查出所有的带工序的物料 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(ProcessRoute::getRouteDescription, rooteProdet).ne(ProcessRoute::getMaterialName, "").isNotNull(ProcessRoute::getMaterialName).ne(ProcessRoute::getMaterialCode, "").isNotNull(ProcessRoute::getMaterialCode).ne(ProcessRoute::getProcessNo, "").isNotNull(ProcessRoute::getProcessNo).ne(ProcessRoute::getProcessName, "").isNotNull(ProcessRoute::getProcessName).ne(ProcessRoute::getWorkCenter, "").isNotNull(ProcessRoute::getWorkCenter).ne(ProcessRoute::getProcessControl, "").isNotNull(ProcessRoute::getProcessControl).ne(ProcessRoute::getActivityDuration, "").isNotNull(ProcessRoute::getActivityDuration).ne(ProcessRoute::getActivityUnit, "").isNotNull(ProcessRoute::getActivityUnit); + wrapper.eq(ProcessRoute::getRouteDescription, rooteProdet).ne(ProcessRoute::getMaterialName, "") + .ne(ProcessRoute::getProcessName, "按图订制") + .isNotNull(ProcessRoute::getMaterialName).ne(ProcessRoute::getMaterialCode, "") + .isNotNull(ProcessRoute::getMaterialCode).ne(ProcessRoute::getProcessNo, "") + .isNotNull(ProcessRoute::getProcessNo).ne(ProcessRoute::getProcessName, "") + .isNotNull(ProcessRoute::getProcessName).ne(ProcessRoute::getWorkCenter, "") + .isNotNull(ProcessRoute::getWorkCenter).ne(ProcessRoute::getProcessControl, "") + .isNotNull(ProcessRoute::getProcessControl).ne(ProcessRoute::getActivityDuration, "") + .isNotNull(ProcessRoute::getActivityDuration).ne(ProcessRoute::getActivityUnit, "") + .isNotNull(ProcessRoute::getActivityUnit); + List processRoutes = baseMapper.selectList(wrapper); // 存储按物料编码分组的 ProcessRouteXuDTO Map groupedRoutes = new HashMap<>(); @@ -1041,9 +1068,6 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { /** * 更新计划订单 - * - * @param rooteProdet - * @return */ @Override public List updateProcessPlan(String rooteProdet) { @@ -1086,28 +1110,88 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { QueryWrapper processInfoQueryWrapper = new QueryWrapper<>(); processInfoQueryWrapper.select("DISTINCT process_name").like("process_name", query); List processInfoList = processInfoMapper.selectList(processInfoQueryWrapper); - if (processInfoList == null){ + if (processInfoList == null) { return Collections.emptyList(); } // 过滤掉 null 值并转换为字符串 return processInfoList.stream() - .filter(Objects::nonNull) - .map(ProcessInfo::getProcessName) // 获取 processName 字段 - .filter(Objects::nonNull) // 过滤掉 null 值 - .distinct() // 去重 - .collect(Collectors.toList()); + .filter(Objects::nonNull) + .map(ProcessInfo::getProcessName) // 获取 processName 字段 + .filter(Objects::nonNull) // 过滤掉 null 值 + .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)); + } return baseMapper.insertBatch(list); } + /** + * 查询材料bom + */ + @Override + public List getProcessMaterialList(ProcessRoute processRoute) { + if (processRoute == null) { + logger.error("ProcessRoute is null"); + throw new IllegalArgumentException("ProcessRoute cannot be null"); + } + + String materialCode = processRoute.getMaterialCode(); + String materialName = processRoute.getMaterialName(); + if (materialCode == null || materialName == null) { + logger.error("MaterialCode or MaterialName is null"); + throw new IllegalArgumentException("MaterialCode and MaterialName cannot be null"); + } + + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("parent_material_code", processRoute.getMaterialCode()); + wrapper.eq("parent_material_name", processRoute.getMaterialName()); + + return materialBomMapper.selectList(wrapper); + } + + /** + * 删除工序 + */ + @Override + public List deleteRoute(ProcessRoute processRoute) { + int rowsAffected = baseMapper.deleteById(processRoute.getId()); + if (rowsAffected > 0) { + //获取删除后其他的 工序,然后更新工序号 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + log.info("Querying ProcessRoute with routeDescription: {}, materialCode: {}, materialName: {}", + processRoute.getRouteDescription(), + processRoute.getMaterialCode(), + processRoute.getMaterialName()); + wrapper.eq(ProcessRoute::getRouteDescription, processRoute.getRouteDescription()) + .eq(ProcessRoute::getMaterialCode, processRoute.getMaterialCode()) + .eq(ProcessRoute::getMaterialName, processRoute.getMaterialName()) + .ne(ProcessRoute::getProcessNo,null); + 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); + } + //批量更新 + baseMapper.insertOrUpdateBatch(routeList); + return routeList; + } else { + return null; + } + } + /** * 获取计划订单编号,然后获取计划订单详情 单据内码 行内码 - * @param rooteProdet - * @return */ public List getSelecPlan(String rooteProdet) { List planOrderList = getSelectProceOrder(rooteProdet); @@ -1121,7 +1205,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { JsonObject json = new JsonObject(); json.addProperty("FormId", "SFC_OperationPlanning"); json.addProperty("FieldKeys", "FID,FSubEntity_FDetailID,FProductId.FNumber,FOperNumber,FEntity_FEntryID,FProcessId.FName,FSeqNumber,FSeqName,FPlanStartTime,FPlanFinishTime," + - "FOperPlanStartTime,FOperPlanFinishTime"); + "FOperPlanStartTime,FOperPlanFinishTime"); JsonArray filterString = new JsonArray(); JsonObject filterObject = new JsonObject(); @@ -1144,7 +1228,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { try { String resultJson = String.valueOf(client.billQuery(jsonData)); System.out.println( - "生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson + "生成查询计划订单查询 " + planOrder.getFBillNo() + " 的结果: " + resultJson ); JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class); if (jsonArray == null || jsonArray.size() == 0) { @@ -1187,16 +1271,16 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { // 获取或创建 FEntity 对象 FEntity fEntity = model.getFEntity().stream() - .filter(entity -> entity.getFEntryID() == dto.getFEntity_FEntryID()) - .findFirst() - .orElseGet(() -> { - FEntity newFEntity = new FEntity(); - newFEntity.setFEntryID(dto.getFEntity_FEntryID()); - newFEntity.setFSeqNumber(dto.getFSeqNumber()); - newFEntity.setFSeqName(dto.getFSeqName()); - model.getFEntity().add(newFEntity); - return newFEntity; - }); + .filter(entity -> entity.getFEntryID() == dto.getFEntity_FEntryID()) + .findFirst() + .orElseGet(() -> { + FEntity newFEntity = new FEntity(); + newFEntity.setFEntryID(dto.getFEntity_FEntryID()); + newFEntity.setFSeqNumber(dto.getFSeqNumber()); + newFEntity.setFSeqName(dto.getFSeqName()); + model.getFEntity().add(newFEntity); + return newFEntity; + }); // 创建并添加 FSubEntity 对象 FSubEntity fSubEntity = new FSubEntity();