Blame view

src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java 5.76 KB
pengcheng authored
1
2
3
package com.huaheng.pc.shipment.shippingCombination.service;
4
5
6
7
8
9
10
11
12
13
14
15
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
import com.huaheng.pc.config.configValue.domain.ConfigValue;
import com.huaheng.pc.config.configValue.service.ConfigValueService;
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialServiceImpl;
import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
xqs authored
16
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
17
18
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
pengcheng authored
19
20
import com.huaheng.pc.shipment.shippingCombination.domain.ShippingSearch;
import com.huaheng.pc.shipment.shippingCombination.mapper.ShippingCombinationMapper;
21
import org.springframework.beans.factory.annotation.Autowired;
pengcheng authored
22
23
import org.springframework.stereotype.Service;
pengcheng authored
24
import javax.annotation.Resource;
25
import java.util.ArrayList;
pengcheng authored
26
27
import java.util.List;
pengcheng authored
28
29
30
31

@Service
public class ShippingCombinationService {
pengcheng authored
32
33
    @Resource
    private ShippingCombinationMapper shippingCombinationMapper;
34
35
36
37
38
39
40
41
42
43
    @Autowired
    InventoryDetailService inventoryDetailService;
    @Autowired
    ConfigValueService configValueService;
    @Autowired
    FilterConfigDetailService filterConfigDetailService;
    @Autowired
    ShipmentPreferenceService shipmentPreferenceService;
    @Autowired
    MaterialServiceImpl materialService;
pengcheng authored
44
45
46
47
48

    //根据分配规则查找库存
    public List<InventoryDetail> getInventorys(ShipmentDetail shipmentDetail) {
pengcheng authored
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
        LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper=Wrappers.lambdaQuery();
        configValueLambdaQueryWrapper.eq(ConfigValue::getModuleType,"shipment")
                .eq(ConfigValue::getWarehouseCode,shipmentDetail.getWarehouseCode());
        ConfigValue configValue=configValueService.getOne(configValueLambdaQueryWrapper);
        if(configValue==null){
            throw new ServiceException("仓库的出库配置不存在");
        }

        //查找出库首选项
        LambdaQueryWrapper<ShipmentPreference> slam=Wrappers.lambdaQuery();
        slam.eq(ShipmentPreference::getCode,configValue.getIdentifier())
                .eq(ShipmentPreference::getWarehouseCode,configValue.getWarehouseCode());
        ShipmentPreference shipmentPreference=shipmentPreferenceService.getOne(slam);
        if(shipmentPreference==null){
            throw new ServiceException("仓库的出库配置中出库首选项不存在");
        }
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
        List<InventoryDetail> list=new ArrayList<>();
        FilterConfigDetail filterConfigDetail=new FilterConfigDetail();
        LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambdaQueryWrapper= Wrappers.lambdaQuery();
        filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode,shipmentDetail.getWarehouseCode());

        //出库子单的分配规则有时,优先出库子单的分配规则
        if(StringUtils.isNotEmpty(shipmentDetail.getAllocationRule())){
            filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentDetail.getAllocationRule());
            filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
            if(filterConfigDetail==null){
                throw new ServiceException("出库子单出库规则配置不存在");
            }

            //根据sql查库存
            try {
pengcheng authored
81
                list = inventoryDetailService.selectBysql(filterConfigDetail.getStatement(),shipmentDetail,filterConfigDetail.getSqll(),shipmentPreference);
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
            }catch (Exception e){
                throw new ServiceException("sql错误");
            }
            return list;
        }

        //出库子单的分配规则没有时,优先物料的分配规则
        LambdaQueryWrapper<Material> materialLambdaQueryWrapper=Wrappers.lambdaQuery();
        materialLambdaQueryWrapper.eq(Material::getCode,shipmentDetail.getMaterialCode())
                .eq(Material::getWarehouseCode,shipmentDetail.getWarehouseCode());
        Material material=materialService.getOne(materialLambdaQueryWrapper);
        if(StringUtils.isNotEmpty(material.getAllocationRule())){
            filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,material.getAllocationRule());
            filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
            if(filterConfigDetail==null){
                throw new ServiceException("物料出库规则配置不存在");
            }

            //根据sql查库存
pengcheng authored
101
            list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement(),shipmentDetail,filterConfigDetail.getSqll(),shipmentPreference);
102
103
104
105
106
107
108
109
110
111
112
113
114
            return list;
        }

        //都没有时,默认仓库的分配规则

        //查找分配规则
        filterConfigDetailLambdaQueryWrapper.eq(FilterConfigDetail::getCode,shipmentPreference.getAllocationRule());
        filterConfigDetail=filterConfigDetailService.getOne(filterConfigDetailLambdaQueryWrapper);
        if(filterConfigDetail==null){
            throw new ServiceException("出库首选项中出库规则配置不存在");
        }

        //根据sql查库存
pengcheng authored
115
        list=inventoryDetailService.selectBysql(filterConfigDetail.getStatement(),shipmentDetail,filterConfigDetail.getSqll(),shipmentPreference);
pengcheng authored
116
        return list;
pengcheng authored
117
118
    }
pengcheng authored
119
}