package org.jeecg.modules.pms.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang.StringUtils; import org.jeecg.modules.mes.entity.MesProductionOrder; import org.jeecg.modules.pms.entity.PmsProcessBillMaterials; import org.jeecg.modules.pms.mapper.PmsProcessBillMaterialsMapper; import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsDetailService; import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsService; import org.jeecg.modules.sap.dto.OrderBomDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Description: 订单BOM * @Author: jeecg-boot * @Date: 2025-07-01 * @Version: V1.0 */ @Service public class PmsProcessBillMaterialsServiceImpl extends ServiceImpl implements IPmsProcessBillMaterialsService { @Autowired private IPmsProcessBillMaterialsDetailService processBillMaterialsDetailService; @Override public IPage> getpmsProcessBillMaterialsListData(Integer pageNo, Integer pageSize, HttpServletRequest req) { IPage pageData = new Page(pageNo, pageSize); Map paramMap = new HashMap(); Map parameterMap = req.getParameterMap(); if (null != parameterMap) { if (parameterMap.containsKey("materialNumber") && StringUtils.isNotBlank(parameterMap.get("materialNumber")[0])) { paramMap.put("materialNumber", parameterMap.get("materialNumber")[0]); } if (parameterMap.containsKey("materialName") && StringUtils.isNotBlank(parameterMap.get("materialName")[0])) { paramMap.put("materialName", parameterMap.get("materialName")[0].trim()); } if (parameterMap.containsKey("batchNumber") && StringUtils.isNotBlank(parameterMap.get("batchNumber")[0])) { paramMap.put("batchNumber", parameterMap.get("batchNumber")[0].trim()); } } return super.getBaseMapper().getpmsProcessBillMaterialsListData(pageData, paramMap); } @Override @Transactional(rollbackFor = Exception.class) public boolean saveOrUpdateOrderBom(Map orderMap, List orderBomDTOList) { for (Map.Entry entry : orderMap.entrySet()) { MesProductionOrder order = entry.getValue(); PmsProcessBillMaterials materials = getByOrderId(order.getId()); if(materials != null) { //更新物料数据 materials.setOrderId(order.getId()); materials.setMaterialNumber(order.getMaterialNumber()); materials.setMaterialName(order.getMaterialName()); materials.setProductionUnit(order.getProductionUnit()); materials.setProductionQuantity(order.getOrderQuantity()); this.getBaseMapper().updateById(materials); //更新物料明细数据 processBillMaterialsDetailService.removeByMaterialsId(materials.getId()); //过滤出此订单的物料信息 List collect = orderBomDTOList.stream().filter(orderBomDTO -> entry.getKey().equals(orderBomDTO.getAUFNR())).collect(Collectors.toList()); processBillMaterialsDetailService.saveBatchDetail(materials.getId(), collect); }else { materials = new PmsProcessBillMaterials(); materials.setOrderId(order.getId()); materials.setMaterialNumber(order.getMaterialNumber()); materials.setMaterialName(order.getMaterialName()); materials.setProductionUnit(order.getProductionUnit()); materials.setProductionQuantity(order.getOrderQuantity()); this.getBaseMapper().insert(materials); //过滤出此订单的物料信息 List collect = orderBomDTOList.stream().filter(orderBomDTO -> entry.getKey().equals(orderBomDTO.getAUFNR())).collect(Collectors.toList()); processBillMaterialsDetailService.saveBatchDetail(materials.getId(), collect); } } return true; } @Override public PmsProcessBillMaterials getByOrderId(String orderId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(PmsProcessBillMaterials::getOrderId, orderId); List list = super.list(queryWrapper); if (CollectionUtil.isNotEmpty(list)) { return list.get(0); } return null; } }