Browse Source

[feat]

生产管理 生产订单
修改生产订单bom类,新增订单占比率字段;
新增获取首页生产订单BOM成品料号分析controller接口;
新增根据时间区间获取订单成品bomservice方法和mapper方法;
dev
王晓迪 1 day ago
parent
commit
a1e5422e2a
  1. 16
      ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeorderBomController.java
  2. 14
      ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysMakeorderBom.java
  3. 7
      ruoyi-admin/src/main/java/com/ruoyi/system/mapper/SysMakeorderBomMapper.java
  4. 3
      ruoyi-admin/src/main/java/com/ruoyi/system/service/ISysMakeorderBomService.java
  5. 46
      ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeorderBomServiceImpl.java
  6. 11
      ruoyi-admin/src/main/resources/mapper/system/SysMakeorderBomMapper.xml

16
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<SysMakeorderBom> 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<SysMakeorderBom> list = sysMakeorderBomService.selectSysMakeorderBomListByDateRange(beginDate,endDate,limit);
return list;
}
}

14
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)

7
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<SysMakeorderBom> selectByDateRange(@Param("beginDate") Date beginDate,
@Param("endDate") Date endDate,
@Param("limit") Integer limit);
}

3
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<SysMakeorderBom> selectSysMakeorderBomListByDateRange(Date beginDate, Date endDate, Integer limit);
}

46
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<SysMakeorderBom> selectSysMakeorderBomListByDateRange(Date beginDate, Date endDate, Integer limit) {
List<SysMakeorderBom> list = sysMakeorderBomMapper.selectByDateRange(beginDate, endDate, limit);
// 合并相同料号的数据,并将订单量数相加
Map<String, SysMakeorderBom> 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<SysMakeorderBom> 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<SysMakeorderBom> sortedMaterials = result.stream()
.sorted(Comparator.comparing(SysMakeorderBom::getOrderRate, Comparator.reverseOrder()))
.collect(Collectors.toList());
return sortedMaterials;
}
}

11
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}
</delete>
<select id="selectByDateRange" parameterType="map" resultMap="SysMakeorderBomResult">
select * from sys_makeorder_bom
<where>
<if test="beginDate != null and endDate != null">
and create_time between #{beginDate} and #{endDate}
</if>
<!-- 固定条件:material_no 以 '8' 开头 -->
and material_no like '8%'
</where>
</select>
</mapper>
Loading…
Cancel
Save