package com.ruoyi.business.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.entity.Production; import com.ruoyi.business.entity.ProductionScheduling; import com.ruoyi.business.mapper.ProductionMapper; import com.ruoyi.business.mapper.ProductionSchedulingMapper; import com.ruoyi.business.service.ProductionSchedulingService; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.mapper.SysUserMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; /** * @author :yys * @date : 2025/8/25 16:38 */ @Service @Slf4j public class ProductionSchedulingServiceImpl extends ServiceImpl implements ProductionSchedulingService { @Autowired private ProductionSchedulingMapper productionSchedulingMapper; @Autowired private ProductionMapper productionMapper; @Autowired private SysUserMapper sysUserMapper; @Autowired private ProductionMasterServiceImpl productionMasterService; @Override public IPage listPage(Page page, ProductionScheduling productionScheduling) { return productionSchedulingMapper.listPage(page, productionScheduling); } @Override public boolean addProductionScheduling(List productionScheduling) { if (CollectionUtils.isEmpty(productionScheduling)) { return false; } BigDecimal reduce = productionScheduling.stream() .map(ProductionScheduling::getSchedulingNum) .reduce(BigDecimal.ZERO, BigDecimal::add); if(reduce.compareTo(productionScheduling.get(0).getProductionQuantity()) < 0){ return false; } Production production = productionMapper.selectById(productionScheduling.get(0).getProductionId()); if(production == null){ throw new RuntimeException("生产订单为空"); } production.setStatus(2); if(reduce.compareTo(productionScheduling.get(0).getProductionQuantity()) == 0){ production.setStatus(3); } productionMapper.updateById(production); for (ProductionScheduling scheduling : productionScheduling) { SysUser sysUser = sysUserMapper.selectUserById(scheduling.getSchedulingUserId()); if(sysUser == null) throw new RuntimeException("排产人员不存在"); scheduling.setStatus(1); scheduling.setSchedulingUserName(sysUser.getNickName()); productionSchedulingMapper.insert(scheduling); } return true; } @Override public boolean work(ProductionScheduling productionScheduling) { ProductionScheduling productionScheduling1 = productionSchedulingMapper.selectById(productionScheduling.getId()); if(productionScheduling1 == null){ throw new RuntimeException("生产报工不存在"); } Production production = productionMapper.selectById(productionScheduling1.getProductionId()); if(production == null){ throw new RuntimeException("生产订单为空"); } production.setProductionQuantity(productionScheduling.getSuccessNum()); production.setProducerId(productionScheduling.getSchedulingUserId()); // 入库 productionMasterService.insertPendingInventory(Arrays.asList(production)); // 修改报工表的入库数量 productionScheduling1.setSuccessNum(productionScheduling1.getSuccessNum().add(productionScheduling.getSuccessNum())); productionScheduling1.setStatus(2); // 入库数量 == 排产数量 则修改生产订单状态 if(productionScheduling1.getSuccessNum().compareTo(productionScheduling1.getSchedulingNum()) == 0){ productionScheduling1.setStatus(3); } productionSchedulingMapper.updateById(productionScheduling1); return true; } }