package org.jeecg.modules.mes.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.shiro.SecurityUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.base.entity.LineSideWarehouse; import org.jeecg.modules.base.service.ILineSideWarehouseService; import org.jeecg.modules.lsw.entity.LswMaterial; import org.jeecg.modules.lsw.entity.LswMaterialInventory; import org.jeecg.modules.lsw.entity.LswMaterialOutbound; import org.jeecg.modules.lsw.enums.MaterialCategoryEnum; import org.jeecg.modules.lsw.enums.MaterialOutboundCategory; import org.jeecg.modules.lsw.service.ILswMaterialInventoryService; import org.jeecg.modules.lsw.service.ILswMaterialOutboundService; import org.jeecg.modules.lsw.service.ILswMaterialService; import org.jeecg.modules.mes.entity.MesMaterialLoading; import org.jeecg.modules.mes.entity.MesMaterialUnloading; import org.jeecg.modules.mes.mapper.MesMaterialLoadingMapper; import org.jeecg.modules.mes.service.IMesMaterialLoadingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; import java.util.Map; /** * @Description: 上料 * @Author: jeecg-boot * @Date: 2025-07-07 * @Version: V1.0 */ @Service public class MesMaterialLoadingServiceImpl extends ServiceImpl implements IMesMaterialLoadingService { @Autowired private ILineSideWarehouseService lineSideWarehouseService; @Autowired private ILswMaterialOutboundService lswMaterialOutboundService; @Autowired private ILswMaterialInventoryService materialInventoryService; @Autowired private ILswMaterialService materialService; @Override public List queryUnloadingByLoadingId(String loadingId) { return baseMapper.queryUnloadingByLoadingId(loadingId); } @Override public IPage queryPageList(Page page, MesMaterialLoading mesMaterialLoading) { QueryWrapper queryWrapper = new QueryWrapper<>(); if (StringUtils.isNotBlank(mesMaterialLoading.getFactoryId())) { queryWrapper.eq("mml.factory_id", mesMaterialLoading.getFactoryId()); } if (StringUtils.isNotBlank(mesMaterialLoading.getCategory())) { queryWrapper.eq("mml.category", mesMaterialLoading.getCategory()); } if (StringUtils.isNotBlank(mesMaterialLoading.getMaterialNumber())) { queryWrapper.like("mml.material_number", mesMaterialLoading.getMaterialNumber()); } if (StringUtils.isNotBlank(mesMaterialLoading.getMaterialName())) { queryWrapper.like("mml.material_name", mesMaterialLoading.getMaterialName()); } if (StringUtils.isNotBlank(mesMaterialLoading.getBatchNumber())) { queryWrapper.like("mml.batch_number", mesMaterialLoading.getBatchNumber()); } queryWrapper.orderByDesc("mml.create_time"); return this.baseMapper.queryPageList(page, queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public boolean loading(MesMaterialLoading mesMaterialLoading) { if (mesMaterialLoading == null) { throw new JeecgBootException("参数错误!"); } if (StringUtils.isBlank(mesMaterialLoading.getFactoryId()) || StringUtils.isBlank(mesMaterialLoading.getMaterialNumber()) || mesMaterialLoading.getQuantity() == null || mesMaterialLoading.getQuantity().intValue() < 1 || StringUtils.isBlank(mesMaterialLoading.getBatchNumber())) { throw new JeecgBootException("参数错误!"); } LineSideWarehouse warehouse = lineSideWarehouseService.queryByFactoryId(mesMaterialLoading.getFactoryId()); if (warehouse == null) { throw new JeecgBootException("线边库不存在,请检查!"); } LswMaterial material = materialService.queryByMaterialNumber(mesMaterialLoading.getMaterialNumber()); if (material == null) { throw new JeecgBootException("物料信息不存在,请检查!"); } if (MaterialCategoryEnum.STEEL_BALL.name().equals(material.getMaterialCategory()) && StringUtils.isBlank(mesMaterialLoading.getSteelBallSize())) { throw new JeecgBootException("钢球尺寸不能为空,请检查!"); } LswMaterialInventory inventory = materialInventoryService.queryByMaterialNumberAndBatchNumber(mesMaterialLoading.getMaterialNumber(), mesMaterialLoading.getBatchNumber(), warehouse.getId()); if (inventory == null) { throw new JeecgBootException("库存不存在,请检查!"); } if (inventory.getQuantity().compareTo(mesMaterialLoading.getQuantity()) != 0) { throw new JeecgBootException("上料和库存数量不匹配,请检查!"); } //人员信息 LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (sysUser == null) { throw new JeecgBootException("用户信息获取失败!"); } LswMaterialOutbound outbound = new LswMaterialOutbound(); outbound.setMaterialNumber(mesMaterialLoading.getMaterialNumber()); outbound.setMaterialName(mesMaterialLoading.getMaterialName()); outbound.setQuantity(mesMaterialLoading.getQuantity()); outbound.setFactoryId(mesMaterialLoading.getFactoryId()); outbound.setWarehouseId(warehouse.getId()); outbound.setBatchNumber(mesMaterialLoading.getBatchNumber()); outbound.setOutboundCategory(MaterialOutboundCategory.MATERIAL_LOADING.name()); outbound.setInventoryId(inventory.getId()); outbound.setOutboundStaff(sysUser.getUsername()); boolean b = lswMaterialOutboundService.outboundMaterial(outbound); if (!b) { throw new JeecgBootException("库存出库失败!"); } mesMaterialLoading.setWarehouseId(warehouse.getId()); mesMaterialLoading.setRemainingQuantity(mesMaterialLoading.getQuantity()); mesMaterialLoading.setDelFlag(CommonConstant.DEL_FLAG_0); mesMaterialLoading.setUnloadingFlag(CommonConstant.STATUS_0); this.save(mesMaterialLoading); return true; } }