新火炬后端单体项目初始化代码
上料实体类调整、物料消耗明细基础代码、报工接口适配调整(适配上料表结构调整、并记录物料消耗明细)
已添加6个文件
已修改2个文件
408 ■■■■ 文件已修改
src/main/java/org/jeecg/modules/mes/controller/MesMaterialConsumptionDetailController.java 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesMaterialConsumptionDetail.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/mapper/MesMaterialConsumptionDetailMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/mapper/xml/MesMaterialConsumptionDetailMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/service/IMesMaterialConsumptionDetailService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialConsumptionDetailServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/controller/MesMaterialConsumptionDetailController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,177 @@
package org.jeecg.modules.mes.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.mes.entity.MesMaterialConsumptionDetail;
import org.jeecg.modules.mes.service.IMesMaterialConsumptionDetailService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
 /**
 * @Description: ç‰©æ–™æ¶ˆè€—明细
 * @Author: jeecg-boot
 * @Date:   2025-09-08
 * @Version: V1.0
 */
@Api(tags="物料消耗明细")
@RestController
@RequestMapping("/mes/mesMaterialConsumptionDetail")
@Slf4j
public class MesMaterialConsumptionDetailController extends JeecgController<MesMaterialConsumptionDetail, IMesMaterialConsumptionDetailService> {
    @Autowired
    private IMesMaterialConsumptionDetailService mesMaterialConsumptionDetailService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param mesMaterialConsumptionDetail
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "物料消耗明细-分页列表查询")
    @ApiOperation(value="物料消耗明细-分页列表查询", notes="物料消耗明细-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<MesMaterialConsumptionDetail>> queryPageList(MesMaterialConsumptionDetail mesMaterialConsumptionDetail,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<MesMaterialConsumptionDetail> queryWrapper = QueryGenerator.initQueryWrapper(mesMaterialConsumptionDetail, req.getParameterMap());
        Page<MesMaterialConsumptionDetail> page = new Page<MesMaterialConsumptionDetail>(pageNo, pageSize);
        IPage<MesMaterialConsumptionDetail> pageList = mesMaterialConsumptionDetailService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     *
     * @param mesMaterialConsumptionDetail
     * @return
     */
    @AutoLog(value = "物料消耗明细-添加")
    @ApiOperation(value="物料消耗明细-添加", notes="物料消耗明细-添加")
    //@RequiresPermissions("org.jeecg.modules:mes_material_consumption_detail:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody MesMaterialConsumptionDetail mesMaterialConsumptionDetail) {
        mesMaterialConsumptionDetailService.save(mesMaterialConsumptionDetail);
        return Result.OK("添加成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param mesMaterialConsumptionDetail
     * @return
     */
    @AutoLog(value = "物料消耗明细-编辑")
    @ApiOperation(value="物料消耗明细-编辑", notes="物料消耗明细-编辑")
    //@RequiresPermissions("org.jeecg.modules:mes_material_consumption_detail:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> edit(@RequestBody MesMaterialConsumptionDetail mesMaterialConsumptionDetail) {
        mesMaterialConsumptionDetailService.updateById(mesMaterialConsumptionDetail);
        return Result.OK("编辑成功!");
    }
    /**
     *   é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "物料消耗明细-通过id删除")
    @ApiOperation(value="物料消耗明细-通过id删除", notes="物料消耗明细-通过id删除")
    //@RequiresPermissions("org.jeecg.modules:mes_material_consumption_detail:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        mesMaterialConsumptionDetailService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     *  æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "物料消耗明细-批量删除")
    @ApiOperation(value="物料消耗明细-批量删除", notes="物料消耗明细-批量删除")
    //@RequiresPermissions("org.jeecg.modules:mes_material_consumption_detail:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.mesMaterialConsumptionDetailService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    //@AutoLog(value = "物料消耗明细-通过id查询")
    @ApiOperation(value="物料消耗明细-通过id查询", notes="物料消耗明细-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<MesMaterialConsumptionDetail> queryById(@RequestParam(name="id",required=true) String id) {
        MesMaterialConsumptionDetail mesMaterialConsumptionDetail = mesMaterialConsumptionDetailService.getById(id);
        if(mesMaterialConsumptionDetail==null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(mesMaterialConsumptionDetail);
    }
    /**
    * å¯¼å‡ºexcel
    *
    * @param request
    * @param mesMaterialConsumptionDetail
    */
    //@RequiresPermissions("org.jeecg.modules:mes_material_consumption_detail:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, MesMaterialConsumptionDetail mesMaterialConsumptionDetail) {
        return super.exportXls(request, mesMaterialConsumptionDetail, MesMaterialConsumptionDetail.class, "物料消耗明细");
    }
    /**
      * é€šè¿‡excel导入数据
    *
    * @param request
    * @param response
    * @return
    */
    //@RequiresPermissions("mes_material_consumption_detail:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, MesMaterialConsumptionDetail.class);
    }
}
src/main/java/org/jeecg/modules/mes/entity/MesMaterialConsumptionDetail.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package org.jeecg.modules.mes.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * @Description: ç‰©æ–™æ¶ˆè€—明细
 * @Author: jeecg-boot
 * @Date:   2025-09-08
 * @Version: V1.0
 */
@Data
@TableName("mes_material_consumption_detail")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="mes_material_consumption_detail对象", description="物料消耗明细")
public class MesMaterialConsumptionDetail implements Serializable {
    private static final long serialVersionUID = 1L;
    /**主键*/
    @TableId(type = IdType.ASSIGN_ID)
    @ApiModelProperty(value = "主键")
    private String id;
    /**创建人*/
    @ApiModelProperty(value = "创建人")
    private String createBy;
    /**创建时间*/
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ApiModelProperty(value = "创建时间")
    private Date createTime;
    /**订单ID;半成品报工,无需绑定到生产订单*/
    @Excel(name = "订单ID;半成品报工,无需绑定到生产订单", width = 15)
    @ApiModelProperty(value = "订单ID;半成品报工,无需绑定到生产订单")
    @Dict(dictTable = "mes_production_order", dicCode = "id", dicText = "order_code")
    private String orderId;
    /**工单ID*/
    @Excel(name = "工单ID", width = 15)
    @ApiModelProperty(value = "工单ID")
    @Dict(dictTable = "mes_production_work_order", dicCode = "id", dicText = "work_order_code")
    private String workOrderId;
    /**产线ID*/
    @Excel(name = "产线ID", width = 15)
    @ApiModelProperty(value = "产线ID")
    @Dict(dictTable = "base_factory", dicCode = "id", dicText = "factory_name")
    private String factoryId;
    /**报工ID*/
    @Excel(name = "报工ID", width = 15)
    @ApiModelProperty(value = "报工ID")
    private String reportingId;
    /**上料ID*/
    @Excel(name = "上料ID", width = 15)
    @ApiModelProperty(value = "上料ID")
    private String loadingId;
    /**消耗数量*/
    @Excel(name = "消耗数量", width = 15)
    @ApiModelProperty(value = "消耗数量")
    private BigDecimal quantity;
}
src/main/java/org/jeecg/modules/mes/entity/MesMaterialLoading.java
@@ -54,23 +54,14 @@
    @ApiModelProperty(value = "删除标记")
    @TableLogic
    private Integer delFlag;
    /**工单ID*/
    @Excel(name = "工单ID", width = 15)
    @Dict(dictTable = "mes_production_work_order", dicCode = "id", dicText = "work_order_code")
    @ApiModelProperty(value = "工单ID")
    private String workOrderId;
    /**设备ID*/
    @Excel(name = "设备ID", width = 15)
    @ApiModelProperty(value = "设备ID")
    private String equipmentId;
    /**工序编码*/
    @Excel(name = "工序编码", width = 15)
    @ApiModelProperty(value = "工序编码")
    private String processCode;
    /**工序名称*/
    @Excel(name = "工序名称", width = 15)
    @ApiModelProperty(value = "工序名称")
    private String processName;
    /**产线ID*/
    @Excel(name = "产线ID", width = 15)
    @ApiModelProperty(value = "产线ID")
    private String factoryId;
    /**库存地ID*/
    @Excel(name = "库存地ID", width = 15)
    @ApiModelProperty(value = "库存地ID")
    private String warehouseId;
    /**物料编码*/
    @Excel(name = "物料编码", width = 15)
    @ApiModelProperty(value = "物料编码")
@@ -83,6 +74,10 @@
    @Excel(name = "批次号", width = 15)
    @ApiModelProperty(value = "批次号")
    private String batchNumber;
    /**钢球尺寸*/
    @Excel(name = "钢球尺寸", width = 15)
    @ApiModelProperty(value = "钢球尺寸")
    private String steelBallSize;
    /**数量*/
    @Excel(name = "数量", width = 15)
    @ApiModelProperty(value = "数量")
src/main/java/org/jeecg/modules/mes/mapper/MesMaterialConsumptionDetailMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package org.jeecg.modules.mes.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.mes.entity.MesMaterialConsumptionDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
 * @Description: ç‰©æ–™æ¶ˆè€—明细
 * @Author: jeecg-boot
 * @Date:   2025-09-08
 * @Version: V1.0
 */
public interface MesMaterialConsumptionDetailMapper extends BaseMapper<MesMaterialConsumptionDetail> {
}
src/main/java/org/jeecg/modules/mes/mapper/xml/MesMaterialConsumptionDetailMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.mes.mapper.MesMaterialConsumptionDetailMapper">
</mapper>
src/main/java/org/jeecg/modules/mes/service/IMesMaterialConsumptionDetailService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package org.jeecg.modules.mes.service;
import org.jeecg.modules.mes.entity.MesMaterialConsumptionDetail;
import com.baomidou.mybatisplus.extension.service.IService;
/**
 * @Description: ç‰©æ–™æ¶ˆè€—明细
 * @Author: jeecg-boot
 * @Date:   2025-09-08
 * @Version: V1.0
 */
public interface IMesMaterialConsumptionDetailService extends IService<MesMaterialConsumptionDetail> {
}
src/main/java/org/jeecg/modules/mes/service/impl/MesMaterialConsumptionDetailServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package org.jeecg.modules.mes.service.impl;
import org.jeecg.modules.mes.entity.MesMaterialConsumptionDetail;
import org.jeecg.modules.mes.mapper.MesMaterialConsumptionDetailMapper;
import org.jeecg.modules.mes.service.IMesMaterialConsumptionDetailService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
 * @Description: ç‰©æ–™æ¶ˆè€—明细
 * @Author: jeecg-boot
 * @Date:   2025-09-08
 * @Version: V1.0
 */
@Service
public class MesMaterialConsumptionDetailServiceImpl extends ServiceImpl<MesMaterialConsumptionDetailMapper, MesMaterialConsumptionDetail> implements IMesMaterialConsumptionDetailService {
}
src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
@@ -18,17 +18,12 @@
import org.jeecg.modules.lsw.entity.LswMaterial;
import org.jeecg.modules.lsw.entity.LswMaterialInbound;
import org.jeecg.modules.lsw.enums.MaterialCategoryEnum;
import org.jeecg.modules.lsw.enums.MaterialInboundCategory;
import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
import org.jeecg.modules.lsw.service.ILswMaterialService;
import org.jeecg.modules.mes.entity.MesMaterialLoading;
import org.jeecg.modules.mes.entity.MesProductionOrder;
import org.jeecg.modules.mes.entity.MesProductionWorkOrder;
import org.jeecg.modules.mes.entity.MesWorkReporting;
import org.jeecg.modules.mes.entity.*;
import org.jeecg.modules.mes.mapper.MesWorkReportingMapper;
import org.jeecg.modules.mes.service.IMesMaterialLoadingService;
import org.jeecg.modules.mes.service.IMesProductionOrderService;
import org.jeecg.modules.mes.service.IMesProductionWorkOrderService;
import org.jeecg.modules.mes.service.IMesWorkReportingService;
import org.jeecg.modules.mes.service.*;
import org.jeecg.modules.mes.utils.CommonUtils;
import org.jeecg.modules.pms.entity.PmsMaterialProcess;
import org.jeecg.modules.pms.service.IPmsMaterialProcessService;
@@ -97,6 +92,8 @@
    private IInspectionPlanService inspectionPlanService;
    @Autowired
    private IInspectionPlanItemService inspectionPlanItemService;
    @Autowired
    private IMesMaterialConsumptionDetailService mesMaterialConsumptionDetailService;
    @Override
    public List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId) {
@@ -151,12 +148,13 @@
        String date = today.format(DateTimeFormatter.ofPattern("yyMMdd"));
        Factory factory = factoryService.getById(mesWorkReporting.getFactoryId());
        workOrder.setFactoryCode(factory.getFactoryCode());
        List<MesMaterialConsumptionDetail> consumptionDetailList = CollectionUtil.newArrayList();
        switch (materialCategory) {
            case FINISHED_PRODUCT:
                //成品报工
                productReport(mesWorkReporting, workOrder, lineSideWarehouse);
                consumptionDetailList = productReport(mesWorkReporting, workOrder, lineSideWarehouse);
                //生成检验工单
                generateInspectionOrder(mesWorkReporting, workOrder);
                //generateInspectionOrder(mesWorkReporting, workOrder);
                //拼接成品报工托号
                String palletNumber4 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber4");
                String finishedPalletNumber = material.getMaterialNumber() + date + palletNumber4;
@@ -165,7 +163,7 @@
            case INNER_FLANGE:
            case OUTER_FLANGE:
                //半成品(内法兰、外法兰)报工
                productReport(mesWorkReporting, workOrder, lineSideWarehouse);
                consumptionDetailList = productReport(mesWorkReporting, workOrder, lineSideWarehouse);
                //拼接半成品报工托号
                Shift shift = shiftService.getById(workOrder.getShiftId());
                String palletNumber6 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber6");
@@ -175,6 +173,9 @@
        }
        //新增报工记录
        save(mesWorkReporting);
        consumptionDetailList.forEach(i -> i.setReportingId(mesWorkReporting.getId()));
        //保存物料消耗明细
        mesMaterialConsumptionDetailService.saveBatch(consumptionDetailList);
        //更新排产工单
        MesProductionWorkOrder productionWorkUpdateOrder = new MesProductionWorkOrder()
                .setId(workOrder.getId())
@@ -186,7 +187,7 @@
    }
    //半成品(内法兰、外法兰)、成品报工
    private void productReport(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder, LineSideWarehouse lineSideWarehouse) {
    private List<MesMaterialConsumptionDetail> productReport(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder, LineSideWarehouse lineSideWarehouse) {
        //1、入库 åŠæˆå“/成品 åˆ°å¯¹åº”线边库
        LswMaterialInbound materialInbound = new LswMaterialInbound()
                .setFactoryId(workOrder.getFactoryId())
@@ -194,21 +195,26 @@
                .setMaterialNumber(workOrder.getMaterialNumber())
                .setMaterialName(workOrder.getMaterialName())
                .setBatchNumber(mesWorkReporting.getBatchNumber())
                .setQuantity(mesWorkReporting.getQuantity());
        lswMaterialInboundService.save(materialInbound);
        //2、扣减使用毛坯库存(更新上料记录)或半成品物料库存(内法兰、外法兰、小内圈、配件等),按照 æŽ’产工单id、物料编码 æŸ¥è¯¢ä¸Šæ–™è®°å½•,按照时间从早到晚排序,优先扣减早的上料记录(先进先出)
                .setQuantity(mesWorkReporting.getQuantity())
                .setInboundCategory(MaterialInboundCategory.PRODUCTION_INBOUND.name())//生产下线
                .setOriginalCode(lineSideWarehouse.getWarehouseCode())
                .setOriginalName(lineSideWarehouse.getWarehouseName());
        lswMaterialInboundService.inboundMaterial(materialInbound);
        //2、扣减使用毛坯库存(更新上料记录)或半成品物料库存(内法兰、外法兰、小内圈、配件等),按照 äº§çº¿id、库存地id、物料编码 æŸ¥è¯¢ä¸Šæ–™è®°å½•,按照时间从早到晚排序,优先扣减早的上料记录(先进先出)
        //先查询物料 BOM
        Map<String, ProcessBillMaterialsDetailVo> processBillMaterialsDetailMap = pmsProcessBillMaterialsService
                .queryMaterialsDetailByOrderIdAndMaterialNumber(mesWorkReporting.getOrderId(), workOrder.getMaterialNumber()).stream()
                .collect(Collectors.toMap(ProcessBillMaterialsDetailVo::getMaterialNumber, v1 -> v1, (v1, v2) -> v1));
        //查询上料记录
        Map<String, List<MesMaterialLoading>> materialLoadingRecordMap = mesMaterialLoadingService.list(new LambdaQueryWrapper<MesMaterialLoading>()
                        .eq(MesMaterialLoading::getWorkOrderId, workOrder.getId())
                        .eq(MesMaterialLoading::getFactoryId, workOrder.getFactoryId())
                        .eq(MesMaterialLoading::getWarehouseId, lineSideWarehouse.getId())
                        .in(MesMaterialLoading::getMaterialNumber, processBillMaterialsDetailMap.keySet())
                        .gt(MesMaterialLoading::getRemainingQuantity, BigDecimal.ZERO)).stream()
                .sorted(Comparator.comparing(MesMaterialLoading::getCreateTime))
                .collect(Collectors.groupingBy(MesMaterialLoading::getMaterialNumber));
        List<MesMaterialLoading> materialLoadingRecordUpdateList = CollectionUtil.newArrayList();
        List<MesMaterialConsumptionDetail> consumptionDetailAddList = CollectionUtil.newArrayList();
        for (String materialNumber : processBillMaterialsDetailMap.keySet()) {
            List<MesMaterialLoading> materialLoadingRecordList = materialLoadingRecordMap.get(materialNumber);
            if (materialLoadingRecordList.isEmpty()) {
@@ -217,8 +223,26 @@
            //计算物料扣减数量
            ProcessBillMaterialsDetailVo processBillMaterialsDetailVo = processBillMaterialsDetailMap.get(materialNumber);
            BigDecimal quantity = processBillMaterialsDetailVo.getPerQuantity().multiply(mesWorkReporting.getQuantity());
            List<MesMaterialLoading> updateList = deductQuantity(materialLoadingRecordList, quantity);
            materialLoadingRecordUpdateList.addAll(updateList);
            //扣减上料数量并记录物料消耗明细
            for (MesMaterialLoading mesMaterialLoading : materialLoadingRecordList) {
                //记录物料消耗明细
                MesMaterialConsumptionDetail materialConsumptionDetail = new MesMaterialConsumptionDetail()
                        .setOrderId(mesWorkReporting.getOrderId())
                        .setWorkOrderId(workOrder.getId())
                        .setFactoryId(workOrder.getFactoryId())
                        .setLoadingId(mesMaterialLoading.getId());
                if (mesMaterialLoading.getRemainingQuantity().compareTo(quantity) >= 0) {
                    mesMaterialLoading.setRemainingQuantity(mesMaterialLoading.getRemainingQuantity().subtract(quantity));
                    materialConsumptionDetail.setQuantity(quantity);
                    break;
                } else {
                    quantity = quantity.subtract(mesMaterialLoading.getRemainingQuantity());
                    materialConsumptionDetail.setQuantity(mesMaterialLoading.getRemainingQuantity());
                    mesMaterialLoading.setRemainingQuantity(BigDecimal.ZERO);
                }
                consumptionDetailAddList.add(materialConsumptionDetail);
            }
            materialLoadingRecordUpdateList.addAll(materialLoadingRecordList);
        }
        //更新上料记录
        mesMaterialLoadingService.updateBatchById(materialLoadingRecordUpdateList);
@@ -258,6 +282,7 @@
                log.error("SAP工序报工异常!", e);
            }
        }
        return consumptionDetailAddList;
    }
    //根据检验方案生成检验工单
@@ -281,16 +306,4 @@
        //todo æ£€éªŒå·¥å•目前还没有生成代码,没有功能
    }
    private List<MesMaterialLoading> deductQuantity(List<MesMaterialLoading> materialLoadingRecordList, BigDecimal quantity) {
        for (MesMaterialLoading mesMaterialLoading : materialLoadingRecordList) {
            if (mesMaterialLoading.getRemainingQuantity().compareTo(quantity) >= 0) {
                mesMaterialLoading.setRemainingQuantity(mesMaterialLoading.getRemainingQuantity().subtract(quantity));
                break;
            } else {
                quantity = quantity.subtract(mesMaterialLoading.getRemainingQuantity());
                mesMaterialLoading.setRemainingQuantity(BigDecimal.ZERO);
            }
        }
        return materialLoadingRecordList;
    }
}