| | |
| | | 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.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.LswMaterialInbound; |
| | | 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.MaterialInboundCategory; |
| | | import org.jeecg.modules.lsw.enums.MaterialOutboundCategory; |
| | | import org.jeecg.modules.lsw.service.ILswMaterialInboundService; |
| | | 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.jeecg.modules.mes.service.IMesMaterialUnloadingService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @Description: 上料 |
| | | * @Author: jeecg-boot |
| | | * @Date: 2025-07-07 |
| | | * @Date: 2025-07-07 |
| | | * @Version: V1.0 |
| | | */ |
| | | @Service |
| | | public class MesMaterialLoadingServiceImpl extends ServiceImpl<MesMaterialLoadingMapper, MesMaterialLoading> implements IMesMaterialLoadingService { |
| | | |
| | | @Autowired |
| | | private ILineSideWarehouseService lineSideWarehouseService; |
| | | @Autowired |
| | | private ILswMaterialOutboundService lswMaterialOutboundService; |
| | | @Autowired |
| | | private ILswMaterialInventoryService materialInventoryService; |
| | | @Autowired |
| | | private ILswMaterialService materialService; |
| | | @Autowired |
| | | private IMesMaterialUnloadingService mesMaterialUnloadingService; |
| | | @Autowired |
| | | private ILswMaterialInboundService materialInboundService; |
| | | |
| | | @Override |
| | | public List<MesMaterialUnloading> queryUnloadingByLoadingId(String loadingId) { |
| | | return baseMapper.queryUnloadingByLoadingId(loadingId); |
| | | } |
| | | |
| | | @Override |
| | | public IPage<MesMaterialLoading> queryPageList(Page<MesMaterialLoading> page, MesMaterialLoading mesMaterialLoading) { |
| | | QueryWrapper<MesMaterialLoading> 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; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean unloading(MesMaterialLoading mesMaterialLoading) { |
| | | if (mesMaterialLoading == null) { |
| | | throw new JeecgBootException("参数错误!"); |
| | | } |
| | | if (StringUtils.isBlank(mesMaterialLoading.getId()) |
| | | || mesMaterialLoading.getUnloadingQuantity() == null |
| | | || mesMaterialLoading.getUnloadingQuantity().intValue() < 1) { |
| | | throw new JeecgBootException("参数错误!"); |
| | | } |
| | | //查询上料数据 |
| | | MesMaterialLoading loading = super.getById(mesMaterialLoading.getId()); |
| | | if (loading == null) { |
| | | throw new JeecgBootException("未查询到上料数据!"); |
| | | } |
| | | if (loading.getRemainingQuantity().compareTo(mesMaterialLoading.getUnloadingQuantity()) < 0) { |
| | | throw new JeecgBootException("下料数量不能大于当前剩余数量!"); |
| | | } |
| | | //线边库信息 |
| | | LineSideWarehouse warehouse = lineSideWarehouseService.getById(loading.getWarehouseId()); |
| | | if(warehouse == null) { |
| | | throw new JeecgBootException("未查询到线边库!"); |
| | | } |
| | | loading.setUnloadingFlag(CommonConstant.STATUS_1); |
| | | loading.setRemainingQuantity(loading.getRemainingQuantity().subtract(mesMaterialLoading.getUnloadingQuantity())); |
| | | super.updateById(loading); |
| | | //保存下料信息 |
| | | MesMaterialUnloading unloading = new MesMaterialUnloading(); |
| | | unloading.setLoadingId(loading.getId()); |
| | | unloading.setMaterialNumber(loading.getMaterialNumber()); |
| | | unloading.setMaterialName(loading.getMaterialName()); |
| | | unloading.setBatchNumber(loading.getBatchNumber()); |
| | | unloading.setQuantity(mesMaterialLoading.getUnloadingQuantity()); |
| | | mesMaterialUnloadingService.save(unloading); |
| | | //保存入库信息 |
| | | LswMaterialInbound materialInbound = new LswMaterialInbound() |
| | | .setFactoryId(loading.getFactoryId()) |
| | | .setWarehouseId(loading.getWarehouseId()) |
| | | .setMaterialNumber(loading.getMaterialNumber()) |
| | | .setMaterialName(loading.getMaterialName()) |
| | | .setBatchNumber(loading.getBatchNumber()) |
| | | .setQuantity(unloading.getQuantity()) |
| | | .setInboundCategory(MaterialInboundCategory.PRODUCTION_UNLOADING.name())//下料 |
| | | .setOriginalCode(warehouse.getWarehouseCode()) |
| | | .setOriginalName(warehouse.getWarehouseName()); |
| | | materialInboundService.inboundMaterial(materialInbound); |
| | | return true; |
| | | } |
| | | } |