李林
2023-10-07 658d4927d468c47208fd012d9128b09249c07eff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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<OutsourcingOrderStockMapper, OutsourcingOrderStock> implements OutsourcingOrderStockService {
    private OutsourcingOrderMapper outsourcingOrderMapper;
    private StockUtils stockUtils;
 
    @Override
    public IPage<OutsourcingOrderStockDTO> getOutsourcingOrderStockPage(Page page, QueryWrapper<OutsourcingOrderStockDTO> 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<OutsourcingOrderStock> outsourcingOrderStockList = baseMapper.selectList(Wrappers.<OutsourcingOrderStock>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<Long> 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);
    }
}