From a1e5422e2aac75e918f8585e92917156873e966f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=99=93=E8=BF=AA?= <2596750866@qq.com> Date: Thu, 20 Feb 2025 17:10:33 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E7=94=9F=E4=BA=A7=E7=AE=A1=E7=90=86?= =?UTF-8?q?=20=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95bom=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AE=A2=E5=8D=95=E5=8D=A0=E6=AF=94=E7=8E=87?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=9B=20=E6=96=B0=E5=A2=9E=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E9=A6=96=E9=A1=B5=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95?= =?UTF-8?q?BOM=E6=88=90=E5=93=81=E6=96=99=E5=8F=B7=E5=88=86=E6=9E=90contro?= =?UTF-8?q?ller=E6=8E=A5=E5=8F=A3=EF=BC=9B=20=E6=96=B0=E5=A2=9E=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E6=97=B6=E9=97=B4=E5=8C=BA=E9=97=B4=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E6=88=90=E5=93=81bomservice=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E5=92=8Cmapper=E6=96=B9=E6=B3=95=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SysMakeorderBomController.java | 16 +++++++ .../ruoyi/system/domain/SysMakeorderBom.java | 14 +++++- .../system/mapper/SysMakeorderBomMapper.java | 7 +++ .../service/ISysMakeorderBomService.java | 3 ++ .../impl/SysMakeorderBomServiceImpl.java | 46 ++++++++++++++++++- .../mapper/system/SysMakeorderBomMapper.xml | 11 +++++ 6 files changed, 94 insertions(+), 3 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeorderBomController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeorderBomController.java index f8afd1dc..1b87a265 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeorderBomController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeorderBomController.java @@ -1,5 +1,6 @@ package com.ruoyi.system.controller; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -9,6 +10,7 @@ import com.ruoyi.system.domain.SysSalesOrderChild; import com.ruoyi.system.service.ISysSalesOrderChildService; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; @@ -20,6 +22,8 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; +import com.fasterxml.jackson.annotation.JsonFormat; + /** * 生产订单BOM信息Controller @@ -227,4 +231,16 @@ public class SysMakeorderBomController extends BaseController return getDataTable(list); } + /** + * 获取首页生产订单BOM成品料号分析 + */ + @GetMapping("/getIndexList") + @ResponseBody + public List getIndexList( @RequestParam("beginDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginDate, + @RequestParam("endDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate, @RequestParam(value = "limit",required = false) Integer limit) + { + List list = sysMakeorderBomService.selectSysMakeorderBomListByDateRange(beginDate,endDate,limit); + return list; + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysMakeorderBom.java b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysMakeorderBom.java index e1ee1af1..e9c40955 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysMakeorderBom.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysMakeorderBom.java @@ -111,9 +111,13 @@ public class SysMakeorderBom extends BaseEntity // 客户期望交付时间 private Date deliveryTime; + /*已完成数*/ private Integer finishNum; -// 已完成数 + /*订单占比率*/ + private BigDecimal orderRate; + + public void setId(Long id) { this.id = id; @@ -351,6 +355,14 @@ public class SysMakeorderBom extends BaseEntity this.finishNum = finishNum; } + public BigDecimal getOrderRate() { + return orderRate; + } + + public void setOrderRate(BigDecimal orderRate) { + this.orderRate = orderRate; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderBomMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderBomMapper.java index 40946b75..1b0c02ce 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderBomMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderBomMapper.java @@ -1,7 +1,9 @@ package com.ruoyi.system.mapper; +import java.util.Date; import java.util.List; import com.ruoyi.system.domain.SysMakeorderBom; +import org.apache.ibatis.annotations.Param; /** * 生产订单BOM信息Mapper接口 @@ -89,4 +91,9 @@ public interface SysMakeorderBomMapper /* * 根据生产订单号、销售订单号、0阶物料料号删除生产bom*/ public int deleteSysMakeorderBomByNos(SysMakeorderBom makeorderBom); + + /*首页根据日期区间和limit查找成品记录*/ + List selectByDateRange(@Param("beginDate") Date beginDate, + @Param("endDate") Date endDate, + @Param("limit") Integer limit); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/ISysMakeorderBomService.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/ISysMakeorderBomService.java index 1c6d3af1..a16df64d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/ISysMakeorderBomService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/ISysMakeorderBomService.java @@ -1,5 +1,6 @@ package com.ruoyi.system.service; +import java.util.Date; import java.util.List; import com.ruoyi.system.domain.SysMakeorderBom; @@ -74,4 +75,6 @@ public interface ISysMakeorderBomService * @return */ int restoreSysMakeorderBomById(Long id); + + List selectSysMakeorderBomListByDateRange(Date beginDate, Date endDate, Integer limit); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeorderBomServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeorderBomServiceImpl.java index ab6fe8fd..1fdce044 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeorderBomServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeorderBomServiceImpl.java @@ -1,7 +1,9 @@ package com.ruoyi.system.service.impl; -import java.util.ArrayList; -import java.util.List; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; import cn.hutool.core.collection.CollectionUtil; import com.ruoyi.common.utils.DateUtils; @@ -237,4 +239,44 @@ public class SysMakeorderBomServiceImpl implements ISysMakeorderBomService { return sysMakeorderBomMapper.restoreSysMakeorderBomById(id); } + + /*根据时间区间获取订单成品bom*/ + @Override + public List selectSysMakeorderBomListByDateRange(Date beginDate, Date endDate, Integer limit) { + List list = sysMakeorderBomMapper.selectByDateRange(beginDate, endDate, limit); + // 合并相同料号的数据,并将订单量数相加 + Map mergedList = new HashMap<>(); + for (SysMakeorderBom makeorderBom : list) { + String materialNo = makeorderBom.getMaterialNo(); + if (mergedList.containsKey(materialNo)) { + SysMakeorderBom existingOrderBom = mergedList.get(materialNo); + existingOrderBom.setOrderNum(existingOrderBom.getOrderNum() + makeorderBom.getOrderNum()); + } else { + mergedList.put(materialNo, makeorderBom); + } + } + // 将Map的值转换为列表 + List result = new ArrayList<>(mergedList.values()); + + // 根据需要应用限制条数 + if (limit != null && limit > 0) { + result = result.stream().limit(limit).collect(Collectors.toList()); + } + Integer totalNum = result.stream() + .map(e -> Optional.ofNullable(e.getOrderNum()).orElse(0)) // 使用0作为orderNum的默认值 + .mapToInt(Integer::intValue) + .sum(); + // 计算每个物料的百分比并格式化 + for (SysMakeorderBom material : result) { + double percentage = ((double) material.getOrderNum() / totalNum) * 100; + BigDecimal bd = new BigDecimal(percentage).setScale(2, RoundingMode.HALF_UP); + material.setOrderRate(bd); + } + // 按占比从大到小排序 + List sortedMaterials = result.stream() + .sorted(Comparator.comparing(SysMakeorderBom::getOrderRate, Comparator.reverseOrder())) + .collect(Collectors.toList()); + + return sortedMaterials; + } } diff --git a/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderBomMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderBomMapper.xml index bd5f24c2..41e87e82 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderBomMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/SysMakeorderBomMapper.xml @@ -215,4 +215,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and sales_order_material_no = #{salesOrderMaterialNo} + + \ No newline at end of file