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