diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index c7ec649..7225c95 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -17,6 +17,7 @@ + org.springframework @@ -212,7 +213,12 @@ 9.1.9490 - + + + eu.agno3.jcifs + jcifs-ng + 2.1.9 + com.github.xiaoymin knife4j-springdoc-ui 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 8ead902..cb22ef5 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 @@ -722,6 +722,8 @@ public class BomDetailsController extends BaseController { fTreeEntityItem.addProperty("F_HBYT_BJBM", details.getPartdiagramCode()); fTreeEntityItem.addProperty("F_HBYT_BJMC", details.getPartdiagramName()); fTreeEntityItem.addProperty("FDOSAGETYPE", "2"); + //判断这个在原材料表中单位如果是根,的话 那分子就是1 分母就是分子 + fTreeEntityItem.addProperty("FNUMERATOR", details.getQuantity()); fTreeEntityItem.addProperty("FDENOMINATOR", details.getDenominator()); 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 bea331d..9d75c64 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 @@ -55,7 +55,7 @@ import java.util.stream.Collectors; /** * 工艺路线 - * + * * @date 2024-10-09 */ @Validated @@ -647,7 +647,7 @@ public class ProcessRouteController extends BaseController { materialBom.setUnit(materialUsageDTO.getChildUnit()); materialBom.setMaterialType(materialUsageDTO.getCaizhi()); //保留四位小数 - materialBom.setQuantity( new BigDecimal(materialUsageDTO.getFenzi()).divide(new BigDecimal(materialUsageDTO.getFenmu()),2, RoundingMode.HALF_UP)); + materialBom.setQuantity( new BigDecimal(materialUsageDTO.getFenzi()).divide(new BigDecimal(materialUsageDTO.getFenmu()),4, RoundingMode.HALF_UP)); return materialBom; } @@ -659,8 +659,9 @@ public class ProcessRouteController extends BaseController { bomDetails.setFName(materialAndRoute.getMaterialName()); bomDetails.setPartNumber(materialUsageDTO.getMaterialCode()); bomDetails.setUnitWeight("是"); + bomDetails.setWareHouse(materialUsageDTO.getChildUnit()); //子项分子 - bomDetails.setQuantity(Double.valueOf(materialUsageDTO.getFenzi())); + bomDetails.setQuantity(materialUsageDTO.getFenzi()); //子项分母 bomDetails.setDenominator(Double.valueOf(materialUsageDTO.getFenmu())); bomDetails.setName(materialUsageDTO.getMaterialName()); @@ -703,7 +704,8 @@ public class ProcessRouteController extends BaseController { processRoute.setFirstBatchQuantity(Double.valueOf(materialAndRoute.getDantai())); List materialUsageDTOList = materialAndRoute.getMaterialUseDTOS(); for (MaterialUseDTO materialUsageDTO : materialUsageDTOList) { - processRoute.setUnitQuantity(Double.valueOf(materialUsageDTO.getFenzi())); + processRoute.setUnitQuantity(materialUsageDTO.getFenzi()); + processRoute.setBomMaterial(materialUsageDTO.getCaizhi()); processRoute.setRawMaterialCode(materialUsageDTO.getMaterialCode()); processRoute.setRawMaterialName(materialUsageDTO.getMaterialName()); processRoute.setBomUnit(materialUsageDTO.getChildUnit()); @@ -783,6 +785,7 @@ public class ProcessRouteController extends BaseController { List materialUsageDTOList = combinedDTO.getMaterialUsageDTOList(); for (MaterialUsageDTO materialUsageDTO : materialUsageDTOList) { processRoute.setUnitQuantity(materialUsageDTO.getFNumerator()); + processRoute.setBomMaterial(materialUsageDTO.getChildMaterial()); processRoute.setRawMaterialCode(materialUsageDTO.getMaterialCode()); processRoute.setRawMaterialName(materialUsageDTO.getMaterialName()); processRoute.setBomUnit(materialUsageDTO.getUnit()); @@ -805,6 +808,7 @@ public class ProcessRouteController extends BaseController { bomDetails.setFName(combinedDTO.getMaterialName()); bomDetails.setPartNumber(materialUsageDTO.getMaterialCode()); bomDetails.setUnitWeight("是"); + bomDetails.setWareHouse(materialUsageDTO.getUnit()); //子项分子 bomDetails.setQuantity(materialUsageDTO.getFNumerator()); //子项分母 @@ -866,7 +870,7 @@ public class ProcessRouteController extends BaseController { .headRowNumber(3) .doRead(); List list = listener.getExcelResult().getList(); - List list1 = iProcessRouteService.getProcessRouteGD(list); + List list1 = iProcessRouteService.getProcessRouteGD(list); List bomDetailsList = new ArrayList<>(); List routeList = new ArrayList<>(); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MaterialUseDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MaterialUseDTO.java index eb05f94..7d55b83 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MaterialUseDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MaterialUseDTO.java @@ -23,7 +23,7 @@ public class MaterialUseDTO private String materialName; //分子 @JsonProperty("FNUMERATOR") - private Integer fenzi; + private Double fenzi; //分母 @JsonProperty("FDENOMINATOR") private Integer fenmu; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/runner/updatePcessPlanConver.java b/ruoyi-system/src/main/java/com/ruoyi/system/runner/updatePcessPlanConver.java index 004891d..decf946 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/runner/updatePcessPlanConver.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/runner/updatePcessPlanConver.java @@ -117,7 +117,7 @@ public class updatePcessPlanConver { if (repoRet.getResult().getResponseStatus().isIsSuccess()) { System.out.printf("接口返回结果: %s%n", gson.toJson(repoRet.getResult())); } else { - fail("接口返回结果: " + gson.toJson(repoRet.getResult().getResponseStatus())); + fail("接口返回结果: " + gson.toJson(repoRet.getResult().getResponseStatus().getErrors().get(1))); } } catch (Exception e) { fail(e.getMessage()); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BomDetailsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BomDetailsServiceImpl.java index e97fa75..219498d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BomDetailsServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BomDetailsServiceImpl.java @@ -76,21 +76,21 @@ public class BomDetailsServiceImpl implements IBomDetailsService { return baseMapper.selectVoList(lqw); } -/* private LambdaQueryWrapper buildQueryWrapper(BomDetailsBo bo) { - Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(StringUtils.isNotBlank(bo.getPartNumber()), BomDetails::getPartNumber, bo.getPartNumber()); - lqw.like(StringUtils.isNotBlank(bo.getName()), BomDetails::getName, bo.getName()); - lqw.like(StringUtils.isNotBlank(bo.getFName()), BomDetails::getFName, bo.getFName()); - lqw.like(StringUtils.isNotBlank(bo.getFNumber()), BomDetails::getFNumber, bo.getFNumber()); - lqw.eq(bo.getQuantity() != null, BomDetails::getQuantity, bo.getQuantity()); - lqw.eq(StringUtils.isNotBlank(bo.getMaterial()), BomDetails::getMaterial, bo.getMaterial()); - lqw.eq(bo.getUnitWeight() != null, BomDetails::getUnitWeight, bo.getUnitWeight()); - lqw.eq(bo.getTotalWeight() != null, BomDetails::getTotalWeight, bo.getTotalWeight()); - lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), BomDetails::getRemarks, bo.getRemarks()); - lqw.orderByAsc(BomDetails::getTotalWeight); - return lqw; - }*/ + /* private LambdaQueryWrapper buildQueryWrapper(BomDetailsBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getPartNumber()), BomDetails::getPartNumber, bo.getPartNumber()); + lqw.like(StringUtils.isNotBlank(bo.getName()), BomDetails::getName, bo.getName()); + lqw.like(StringUtils.isNotBlank(bo.getFName()), BomDetails::getFName, bo.getFName()); + lqw.like(StringUtils.isNotBlank(bo.getFNumber()), BomDetails::getFNumber, bo.getFNumber()); + lqw.eq(bo.getQuantity() != null, BomDetails::getQuantity, bo.getQuantity()); + lqw.eq(StringUtils.isNotBlank(bo.getMaterial()), BomDetails::getMaterial, bo.getMaterial()); + lqw.eq(bo.getUnitWeight() != null, BomDetails::getUnitWeight, bo.getUnitWeight()); + lqw.eq(bo.getTotalWeight() != null, BomDetails::getTotalWeight, bo.getTotalWeight()); + lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), BomDetails::getRemarks, bo.getRemarks()); + lqw.orderByAsc(BomDetails::getTotalWeight); + return lqw; + }*/ private LambdaQueryWrapper buildQueryWrapper(BomDetailsBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); @@ -109,6 +109,7 @@ public class BomDetailsServiceImpl implements IBomDetailsService { lqw.orderByAsc(BomDetails::getTotalWeight); return lqw; } + /** * 新增bom明细 */ @@ -124,6 +125,7 @@ public class BomDetailsServiceImpl implements IBomDetailsService { } return flag; } + @Override public Boolean insertByVo(BomDetailsVo vo) { BomDetails add = BeanUtil.toBean(vo, BomDetails.class); @@ -134,6 +136,7 @@ public class BomDetailsServiceImpl implements IBomDetailsService { } return flag; } + /** * 修改bom明细 */ @@ -147,7 +150,7 @@ public class BomDetailsServiceImpl implements IBomDetailsService { /** * 保存前的数据校验 */ - private void validEntityBeforeSave(BomDetails entity){ + private void validEntityBeforeSave(BomDetails entity) { //TODO 做一些数据校验,如唯一约束 } @@ -156,7 +159,7 @@ public class BomDetailsServiceImpl implements IBomDetailsService { */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; @@ -171,18 +174,18 @@ public class BomDetailsServiceImpl implements IBomDetailsService { } @Override - public List selectByFNumber1(String fNumber,String partNumber,String partName) { + public List selectByFNumber1(String fNumber, String partNumber, String partName) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(StringUtils.isNotBlank(fNumber), BomDetails::getFNumber, fNumber); - lqw.eq(StringUtils.isNotBlank(partNumber),BomDetails::getPartNumber,partNumber); - lqw.eq(StringUtils.isNotBlank(partName),BomDetails::getFName,partName); + lqw.eq(StringUtils.isNotBlank(partNumber), BomDetails::getPartNumber, partNumber); + lqw.eq(StringUtils.isNotBlank(partName), BomDetails::getFName, partName); return baseMapper.selectList(lqw); } @Override public BomDetails selectBOMFNumber(String fnumbers) { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - wrapper.eq(BomDetails::getFNumber,fnumbers); + wrapper.eq(BomDetails::getFNumber, fnumbers); return baseMapper.selectOne(wrapper); } @@ -206,6 +209,7 @@ public class BomDetailsServiceImpl implements IBomDetailsService { // 使用Map缓存MaterialBom,避免双重循环带来的性能问题 if (!materialBoms.isEmpty() && !bomDetails.isEmpty()) { + Map materialBomMap = materialBoms.stream() .collect(Collectors.toMap( mb -> mb.getMaterialCode() + "-" + mb.getMaterialName(), @@ -217,7 +221,13 @@ public class BomDetailsServiceImpl implements IBomDetailsService { String key = bomDetail.getPartNumber() + "-" + bomDetail.getName(); MaterialBom matchedMaterialBom = materialBomMap.get(key); if (matchedMaterialBom != null) { - bomDetail.setQuantity(Double.valueOf(String.valueOf(matchedMaterialBom.getQuantity()))); + if (matchedMaterialBom.getUnit().equals("根")) { + bomDetail.setQuantity(1.0); + bomDetail.setDenominator(Double.valueOf(String.valueOf(matchedMaterialBom.getQuantity()))); + + } else { + bomDetail.setQuantity(Double.valueOf(String.valueOf(matchedMaterialBom.getQuantity()))); + } } } } @@ -242,10 +252,10 @@ public class BomDetailsServiceImpl implements IBomDetailsService { model.addProperty("FNumber", bomDetails1.getPartNumber()); model.addProperty("FName", bomDetails1.getName()); MaterialProperties materialProperties = iMaterialPropertiesService.selectByAttribute(bomDetails1.getMaterial()); - if (materialProperties!=null){ + if (materialProperties != null) { JsonObject FSVRIAssistant = new JsonObject(); FSVRIAssistant.addProperty("FNumber", materialProperties.getMaterialAttributeId()); - model.add("F_SVRI_Assistant",FSVRIAssistant); + model.add("F_SVRI_Assistant", FSVRIAssistant); } // 创建FMaterialGroup对象,并加入Model JsonObject fMaterialGroup = new JsonObject(); 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 8d0b54e..8d87e7b 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 @@ -50,6 +50,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -197,11 +199,13 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { bomDetailsVo.setRouteDescription(bomDetail.getTotalWeight()); bomDetailsVo.setMaterialCode(bomDetail.getFNumber()); bomDetailsVo.setMaterialName(bomDetail.getFName()); - bomDetailsVo.setMaterial(bomDetail.getMaterial()); + bomDetailsVo.setMaterial(processRoute.getMaterial()); bomDetailsVo.setDiscUsage(bomDetail.getQuantity()); bomDetailsVo.setRawMaterialCode(bomDetail.getPartNumber()); bomDetailsVo.setRawMaterialName(bomDetail.getName()); + bomDetailsVo.setBomMaterial(processRoute.getBomMaterial()); bomDetailsVo.setBomUnit(bomDetail.getWareHouse()); + bomDetailsVo.setBomDanZhong(processRoute.getBomDanZhong()); // 找到对应的 ProcessRouteVo 位置并插入 @@ -261,7 +265,6 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { continue; } //表格错乱错行了 - JDMaterialAndRoute jdMaterialAndRoute = new JDMaterialAndRoute(); jdMaterialAndRoute.setMaterialCode(processRoute.getRouteDescription()); jdMaterialAndRoute.setMaterialName(processRoute.getMaterialCode()); @@ -704,8 +707,16 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { materialBom.setMaterialName(processRoute.getRawMaterialName()); materialBom.setUnit(unit); materialBom.setMaterialType(materialType); - //保留4位小数 - materialBom.setQuantity(new BigDecimal(quantity)); + // 保留4位小数,转换成米(当单位为 mm 时) + if ("mm".equals(unit)) { + // 将毫米转换为米并保留4位小数 + materialBom.setQuantity(new BigDecimal(quantity).divide(BigDecimal.valueOf(1000), 4, BigDecimal.ROUND_HALF_UP)); + } else { + // 其他单位直接使用原值,保留2位小数 + materialBom.setQuantity(new BigDecimal(quantity).setScale(2, BigDecimal.ROUND_HALF_UP)); + } + + // 这里插入 materialBom 数据 materialBomMapper.insert(materialBom); } @@ -791,7 +802,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { bomDetails.setFName(processRoute.getMaterialName()); bomDetails.setPartNumber(processRoute.getRawMaterialCode()); bomDetails.setName(processRoute.getRawMaterialName()); - + // 添加单重验证和日志 Double discWeight = processRoute.getDiscWeight(); @@ -1557,7 +1568,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { for (Model numDTO : numDTOS) { tasks.add(() -> { for (ProcessRoute processRoute : rawBomList) { - ProcessTimeInfo processTimeInfo = selectProcessRouteByMaterialCode(numDTO.getFProcessId_number()); + ProcessTimeInfo processTimeInfo = selectProcessRouteByMaterialCode(numDTO.getFProcessId_number(),rooteProdet); if (numDTO.getFProcessId_number().equals(processRoute.getMaterialCode())) { numDTO.setFPlanStartTime(processTimeInfo.getTenthProcessStartTime()); numDTO.setFPlanFinishTime(processTimeInfo.getLastProcessEndTime()); @@ -1597,7 +1608,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { log.info("更新成功" + repoRet.getResult().getResponseStatus().getSuccessEntitys().toString()); } else { - log.info("更新失败" + repoRet.getResult().getResponseStatus().getErrors().toString()); + log.info("更新失败" + repoRet.getResult().getResponseStatus().getErrors().get(0)); } return numDTOS; } @@ -2017,9 +2028,10 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { return dateTime.format(formatter); } - public ProcessTimeInfo selectProcessRouteByMaterialCode(String materialCode) { + public ProcessTimeInfo selectProcessRouteByMaterialCode(String materialCode,String rooteProdet) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(ProcessRoute::getMaterialCode, materialCode); + wrapper.eq(ProcessRoute::getMaterialCode, materialCode) + .eq(ProcessRoute::getRouteDescription, rooteProdet); List processRoutes = baseMapper.selectList(wrapper); ProcessTimeInfo timeInfo = new ProcessTimeInfo(); // 创建返回对象 @@ -2362,7 +2374,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { /** * 更新生产订单的计划开始时间和计划结束时间 - * + * * @param rooteProdet * @return */