package com.chinaztt.mes.plan.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.chinaztt.mes.plan.dto.OutsourcingOrderStockDTO; import com.chinaztt.mes.plan.entity.OutsourcingOrder; import com.chinaztt.mes.plan.entity.OutsourcingOrderStock; import com.chinaztt.mes.plan.mapper.OutsourcingOrderMapper; import com.chinaztt.mes.plan.mapper.OutsourcingOrderStockMapper; import com.chinaztt.mes.plan.service.OutsourcingOrderStockService; import com.chinaztt.mes.warehouse.dto.StockAddDTO; import com.chinaztt.mes.warehouse.entity.Stock; import com.chinaztt.mes.warehouse.util.StockUtils; import com.chinaztt.mes.warehouse.util.TransactionType; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; /** * 委外订单库存接收表 * * @author cxf * @date 2021-09-27 08:39:29 */ @Slf4j @Service @AllArgsConstructor @Transactional(rollbackFor = Exception.class) public class OutsourcingOrderStockServiceImpl extends ServiceImpl implements OutsourcingOrderStockService { private OutsourcingOrderMapper outsourcingOrderMapper; private StockUtils stockUtils; @Override public IPage getOutsourcingOrderStockPage(Page page, QueryWrapper gen) { return baseMapper.getOutsourcingOrderStockPage(page, gen); } @Override public boolean save(OutsourcingOrderStock outsourcingOrderStock) { StockAddDTO stockAdd = new StockAddDTO(); stockAdd.setPartsId(outsourcingOrderStock.getPartId()); stockAdd.setNewLocationId(outsourcingOrderStock.getLocationId()); stockAdd.setNewPartBatchNo(outsourcingOrderStock.getPartBatchNo()); Stock stock = stockUtils.query(stockAdd); stockUtils.updateById(stock.getId(), outsourcingOrderStock.getReceiveQuantity(), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.OUTSOURCING_RECEIVE.getValue()); outsourcingOrderStock.setStockId(stock.getId()); return SqlHelper.retBool(baseMapper.insert(outsourcingOrderStock)); } @Override public boolean updateById(OutsourcingOrderStock outsourcingOrderStock) { OutsourcingOrderStock oldOutsourcingOrderStock = baseMapper.selectById(outsourcingOrderStock.getId()); stockUtils.updateById(oldOutsourcingOrderStock.getStockId(), outsourcingOrderStock.getReceiveQuantity().subtract(oldOutsourcingOrderStock.getReceiveQuantity()), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.OUTSOURCING_RECEIVE.getValue()); return SqlHelper.retBool(baseMapper.updateById(outsourcingOrderStock)); } @Override public BigDecimal updateOrderById(Long id) { List outsourcingOrderStockList = baseMapper.selectList(Wrappers.lambdaQuery() .eq(OutsourcingOrderStock::getOutsourcingOrderId, id)); BigDecimal total = BigDecimal.ZERO; if (CollectionUtils.isNotEmpty(outsourcingOrderStockList)) { total = outsourcingOrderStockList.stream().map(OutsourcingOrderStock::getReceiveQuantity).reduce(BigDecimal.ZERO, BigDecimal::add); } OutsourcingOrder outsourcingOrder = new OutsourcingOrder(); outsourcingOrder.setId(id); outsourcingOrder.setQtyFinished(total); outsourcingOrderMapper.updateById(outsourcingOrder); return total; } @Override public boolean delByIds(List ids) { ids.stream().forEach(id -> { OutsourcingOrderStock oldOutsourcingOrderStock = baseMapper.selectById(id); stockUtils.updateById(oldOutsourcingOrderStock.getStockId(), oldOutsourcingOrderStock.getReceiveQuantity().negate(), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.OUTSOURCING_CANCEL.getValue()); baseMapper.deleteById(id); }); return true; } @Override public OutsourcingOrderStockDTO getDtoById(Long id) { return baseMapper.getDtoById(id); } }