18 小时以前 61f1de60e6f58dd8e19f01c56f2e56e40885d65b
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
package com.ruoyi.quality.utils;
 
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.purchase.pojo.PurchaseLedger;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityInspectParamMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
import com.ruoyi.quality.mapper.QualityTestStandardParamMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityTestStandardParam;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.pojo.ShippingInfo;
import com.ruoyi.sales.pojo.ShippingProductDetail;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
 
import java.math.BigDecimal;
import java.util.List;
 
/**
 * 质检单创建工具类
 */
@Component
@RequiredArgsConstructor
public class QualityInspectHelper {
 
    private final QualityInspectMapper qualityInspectMapper;
    private final QualityTestStandardMapper qualityTestStandardMapper;
    private final QualityTestStandardParamMapper qualityTestStandardParamMapper;
    private final QualityInspectParamMapper qualityInspectParamMapper;
 
    /**
     * 创建质检单
     * @param purchaseLedger 采购台账
     * @param saleProduct 采购产品
     */
    public void addQualityInspect(PurchaseLedger purchaseLedger, SalesLedgerProduct saleProduct) {
        QualityInspect qualityInspect = new QualityInspect();
        qualityInspect.setInspectType(0);
        qualityInspect.setSupplier(purchaseLedger.getSupplierName());
        qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
        qualityInspect.setProductId(saleProduct.getProductId());
        qualityInspect.setProductName(saleProduct.getProductCategory());
        qualityInspect.setModel(saleProduct.getSpecificationModel());
        qualityInspect.setProductModelId(saleProduct.getProductModelId());
        qualityInspect.setUnit(saleProduct.getUnit());
        qualityInspect.setQuantity(saleProduct.getQuantity());
        qualityInspectMapper.insert(qualityInspect);
 
        List<QualityTestStandard> qualityTestStandardList = qualityTestStandardMapper
                .getQualityTestStandardByProductId(saleProduct.getProductId(), 0, null);
 
        if (qualityTestStandardList.isEmpty()) {
            return;
        }
 
        QualityTestStandard firstStandard = qualityTestStandardList.get(0);
        qualityInspect.setTestStandardId(firstStandard.getId());
        // 根据 inspectRule 设置默认抽检比例和抽检数量
        applyInspectRuleDefaults(qualityInspect, firstStandard, saleProduct.getQuantity());
        qualityInspectMapper.updateById(qualityInspect);
 
        List<QualityTestStandardParam> standardParams = qualityTestStandardParamMapper.selectList(
                Wrappers.<QualityTestStandardParam>lambdaQuery()
                        .eq(QualityTestStandardParam::getTestStandardId, firstStandard.getId()));
 
        for (QualityTestStandardParam standardParam : standardParams) {
            QualityInspectParam param = new QualityInspectParam();
            BeanUtils.copyProperties(standardParam, param);
            param.setId(null);
            param.setInspectId(qualityInspect.getId());
            qualityInspectParamMapper.insert(param);
        }
    }
 
    /**
     * 根据 inspectRule 设置抽检比例和抽检数量默认值
     * - inspectRule=0 (全检): sampleRatio=100, sampleQuantity=全部数量
     * - inspectRule=1 (抽检): sampleRatio 取标准配置值, sampleQuantity=数量×比例/100
     */
    private void applyInspectRuleDefaults(QualityInspect inspect, QualityTestStandard standard, BigDecimal quantity) {
        Integer rule = standard.getInspectRule();
        inspect.setInspectRule(rule);
 
        if (rule == null || rule == 0) {
            // 全检
            inspect.setSampleRatio(BigDecimal.valueOf(100));
            inspect.setSampleQuantity(quantity != null ? quantity : BigDecimal.ZERO);
        } else {
            // 抽检
            BigDecimal ratio = standard.getSampleRatio();
            if (ratio == null) {
                ratio = BigDecimal.ZERO;
            }
            inspect.setSampleRatio(ratio);
            if (quantity != null && ratio.compareTo(BigDecimal.ZERO) > 0) {
                BigDecimal sampleQty = quantity.multiply(ratio)
                        .divide(BigDecimal.valueOf(100), 4, BigDecimal.ROUND_HALF_UP)
                        .setScale(0, BigDecimal.ROUND_HALF_UP);
                inspect.setSampleQuantity(sampleQty);
            } else {
                inspect.setSampleQuantity(BigDecimal.ZERO);
            }
        }
    }
 
    /**
     * 创建出厂检验单(发货审批通过后自动生成)
     * @param shippingInfo 发货信息
     * @param detail 发货产品明细
     * @param customerName 客户名称
     * @param salesLedgerId 销售台账ID
     */
    public void addFactoryInspect(ShippingInfo shippingInfo, ShippingProductDetail detail,
                                   String customerName, Long salesLedgerId) {
        QualityInspect qualityInspect = new QualityInspect();
        qualityInspect.setInspectType(2); // 出厂检验
        qualityInspect.setCustomer(customerName);
        qualityInspect.setSalesLedgerId(salesLedgerId);
        qualityInspect.setShippingInfoId(shippingInfo.getId()); // 关联发货信息
        qualityInspect.setProductModelId(detail.getProductModelId());
        qualityInspect.setQuantity(detail.getQuantity());
        qualityInspect.setInspectState(0); // 未提交
 
        // 通过 productModelId 查询产品信息
        if (detail.getProductModelId() != null) {
            com.ruoyi.basic.pojo.ProductModel productModel = qualityInspectMapper.selectProductModelById(detail.getProductModelId());
            if (productModel != null) {
                qualityInspect.setProductId(productModel.getProductId());
                qualityInspect.setModel(productModel.getModel());
                qualityInspect.setUnit(productModel.getUnit());
                // 查询产品名称
                if (productModel.getProductId() != null) {
                    com.ruoyi.basic.pojo.Product product = qualityInspectMapper.selectProductById(productModel.getProductId());
                    if (product != null) {
                        qualityInspect.setProductName(product.getProductName());
                    }
                }
            }
        }
 
        qualityInspectMapper.insert(qualityInspect);
 
        // 查询出厂检验标准,初始化检验参数
        if (qualityInspect.getProductId() != null) {
            List<QualityTestStandard> qualityTestStandardList = qualityTestStandardMapper
                    .getQualityTestStandardByProductId(qualityInspect.getProductId(), 2, null);
 
            if (!qualityTestStandardList.isEmpty()) {
                QualityTestStandard firstStandard = qualityTestStandardList.get(0);
                qualityInspect.setTestStandardId(firstStandard.getId());
                applyInspectRuleDefaults(qualityInspect, firstStandard, detail.getQuantity());
                qualityInspectMapper.updateById(qualityInspect);
 
                List<QualityTestStandardParam> standardParams = qualityTestStandardParamMapper.selectList(
                        Wrappers.<QualityTestStandardParam>lambdaQuery()
                                .eq(QualityTestStandardParam::getTestStandardId, firstStandard.getId()));
 
                for (QualityTestStandardParam standardParam : standardParams) {
                    QualityInspectParam param = new QualityInspectParam();
                    BeanUtils.copyProperties(standardParam, param);
                    param.setId(null);
                    param.setInspectId(qualityInspect.getId());
                    qualityInspectParamMapper.insert(param);
                }
            }
        }
    }
}