src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -1,16 +1,15 @@
package com.ruoyi.quality.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
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.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -21,23 +20,17 @@
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.quality.dto.QualityInspectDto;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.quality.mapper.QualityInspectParamMapper;
import com.ruoyi.quality.mapper.QualityTestStandardMapper;
import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
import com.ruoyi.quality.pojo.QualityInspect;
import com.ruoyi.quality.pojo.QualityInspectParam;
import com.ruoyi.quality.pojo.QualityTestStandard;
import com.ruoyi.quality.pojo.QualityUnqualified;
import com.ruoyi.quality.service.IQualityInspectParamService;
import com.ruoyi.quality.service.IQualityInspectService;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper;
import com.ruoyi.staff.mapper.StaffOnJobMapper;
import com.ruoyi.staff.pojo.StaffJoinLeaveRecord;
import com.ruoyi.staff.pojo.StaffOnJob;
import com.ruoyi.staff.service.IStaffOnJobService;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -75,17 +68,25 @@
        QualityInspect qualityInspect = new QualityInspect();
        BeanUtils.copyProperties(qualityInspectDto,qualityInspect);
        qualityInspect.setInspectState(0);//默认未提交
        qualityInspectMapper.insert(qualityInspect);
        int inserted = qualityInspectMapper.insert(qualityInspect);
        if (inserted <= 0 || qualityInspect.getId() == null) {
            throw new ServiceException("新增检验记录失败");
        }
        for (QualityInspectParam qualityInspectParam : qualityInspectDto.getQualityInspectParams()) {
            qualityInspectParam.setInspectId(qualityInspect.getId());
        }
        qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams());
        return 0;
        if (!qualityInspectParamService.saveBatch(qualityInspectDto.getQualityInspectParams())) {
            throw new ServiceException("保存检验项目失败");
        }
        return inserted;
    }
    @Override
    public QualityInspectDto getDetailById(Integer id) {
        QualityInspect qualityInspect = qualityInspectMapper.selectById(id);
        if (qualityInspect == null) {
            throw new ServiceException("检验记录不存在");
        }
        List<QualityInspectParam> qualityInspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, id));
        QualityInspectDto qualityInspectDto = new QualityInspectDto();
        BeanUtils.copyProperties(qualityInspect,qualityInspectDto);
@@ -96,13 +97,36 @@
    //提交
    @Override
    public int submit(QualityInspect inspect) {
        if (inspect == null || inspect.getId() == null) {
            throw new ServiceException("检验记录ID不能为空");
        }
        QualityInspect qualityInspect = qualityInspectMapper.selectById(inspect.getId());
        if (qualityInspect == null) {
            throw new ServiceException("检验记录不存在");
        }
        if (Integer.valueOf(1).equals(qualityInspect.getInspectState())) {
            throw new ServiceException("检验记录已提交,请勿重复操作");
        }
        if (!"合格".equals(qualityInspect.getCheckResult())
                && !"不合格".equals(qualityInspect.getCheckResult())) {
            throw new ServiceException("请先完成检验结果判定");
        }
        List<QualityInspectParam> inspectParams = qualityInspectParamService.list(
                Wrappers.<QualityInspectParam>lambdaQuery()
                        .eq(QualityInspectParam::getInspectId, inspect.getId()));
        if (inspectParams.isEmpty()) {
            throw new ServiceException("检验项目为空,不能提交");
        }
        for (QualityInspectParam parameter : inspectParams) {
            if (StringUtils.isBlank(parameter.getTestValue())) {
                throw new ServiceException("检验项目“" + parameter.getParameterItem() + "”尚未填写检验值");
            }
        }
        /*判断不合格*/
        if (ObjectUtils.isNotNull(qualityInspect.getCheckResult()) && qualityInspect.getCheckResult().equals("不合格")){
            QualityUnqualified qualityUnqualified = new QualityUnqualified();
            BeanUtils.copyProperties(qualityInspect,qualityUnqualified);
            qualityUnqualified.setInspectState(0);//待处理
            List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
            String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(","));
            qualityUnqualified.setDefectivePhenomena(text+"这些指标中存在不合格");//不合格现象
            qualityUnqualifiedMapper.insert(qualityUnqualified);
@@ -110,79 +134,83 @@
        LoginUser loginUser = SecurityUtils.getLoginUser();
        if (qualityInspect.getInspectType() == 0) {
            if ("合格".equals(qualityInspect.getCheckResult())) {
                ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
                procurementRecordOutAdd.setType(1);
                procurementRecordOutAdd.setTypeName("采购原材料检验合格入库");
                procurementRecordOutAdd.setNickName(loginUser.getNickName());
                procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId()));
                if (qualityInspect.getPurchaseLedgerId() == null) {
                    throw new BaseException("请选择采购单");
                }
            // 合格且关联了采购单/产品信息时才自动入库,信息不全时跳过入库但正常提交
            if ("合格".equals(qualityInspect.getCheckResult())
                    && qualityInspect.getPurchaseLedgerId() != null) {
                SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(qualityInspect.getProductId());
                if (salesLedgerProduct != null) {
                    ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
                    procurementRecordOutAdd.setType(1);
                    procurementRecordOutAdd.setTypeName("采购原材料检验合格入库");
                    procurementRecordOutAdd.setNickName(loginUser.getNickName());
                    procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId()));
                ArrayList<Details> detailss = new ArrayList<>();
                Details details = new Details();
                details.setId(Math.toIntExact(salesLedgerProduct.getId()));
                details.setInboundQuantity(qualityInspect.getQuantity());
                details.setWarnNum(salesLedgerProduct.getWarnNum());
                details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
                details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
                details.setProductModelId(qualityInspect.getProductModelId());
                detailss.add( details);
                procurementRecordOutAdd.setDetails(detailss);
                procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId());
                procurementRecordService.add(procurementRecordOutAdd);
                    ArrayList<Details> detailss = new ArrayList<>();
                    Details details = new Details();
                    details.setId(Math.toIntExact(salesLedgerProduct.getId()));
                    details.setInboundQuantity(qualityInspect.getQuantity());
                    details.setWarnNum(salesLedgerProduct.getWarnNum());
                    details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
                    details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
                    details.setProductModelId(qualityInspect.getProductModelId());
                    detailss.add( details);
                    procurementRecordOutAdd.setDetails(detailss);
                    procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId());
                    procurementRecordService.add(procurementRecordOutAdd);
                }
            }
        }else if (qualityInspect.getInspectType() == 1) {
            //查询UnitPrice/TotalPrice
            ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
            procurementRecordOutAdd.setType(2);
            procurementRecordOutAdd.setTypeName("生产过程检验合格入库");
            procurementRecordOutAdd.setNickName(loginUser.getNickName());
            List<Details> details = new ArrayList<>();
            Details details1 = new Details();
            details1.setInboundQuantity(qualityInspect.getQuantity());
            details1.setProductModelId(qualityInspect.getProductModelId());
            procurementRecordOutAdd.setDetails(details);
            // 过程检验仅合格时入库,不合格品由上面的不合格管理流程处理
            if ("合格".equals(qualityInspect.getCheckResult())) {
                ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
                procurementRecordOutAdd.setType(2);
                procurementRecordOutAdd.setTypeName("生产过程检验合格入库");
                procurementRecordOutAdd.setNickName(loginUser.getNickName());
                List<Details> details = new ArrayList<>();
                Details details1 = new Details();
                details1.setInboundQuantity(qualityInspect.getQuantity());
                details1.setProductModelId(qualityInspect.getProductModelId());
                procurementRecordOutAdd.setDetails(details);
            ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder()
                    .salesLedgerProductId(0)
                    .inboundBatches( "生产半成品入库")
                    .inboundNum(details1.getInboundQuantity())
                    .type(2)
                    .warnNum(new BigDecimal(0))
                    .unitPrice(new BigDecimal(0))
                    .totalPrice(new BigDecimal(0))
                    .createTime(LocalDateTime.now())
                    .createUser(loginUser.getUserId())
                    .updateTime(LocalDateTime.now())
                    .updateUser(loginUser.getUserId())
                    .createBy(procurementRecordOutAdd.getNickName())
                    .productModelId(details1.getProductModelId())
                    .qualityInspectId(qualityInspect.getId());
            procurementRecordService.save(procurementRecordBuilder.build());
                ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder()
                        .salesLedgerProductId(0)
                        .inboundBatches( "生产半成品入库")
                        .inboundNum(details1.getInboundQuantity())
                        .type(2)
                        .warnNum(new BigDecimal(0))
                        .unitPrice(new BigDecimal(0))
                        .totalPrice(new BigDecimal(0))
                        .createTime(LocalDateTime.now())
                        .createUser(loginUser.getUserId())
                        .updateTime(LocalDateTime.now())
                        .updateUser(loginUser.getUserId())
                        .createBy(procurementRecordOutAdd.getNickName())
                        .productModelId(details1.getProductModelId())
                        .qualityInspectId(qualityInspect.getId());
                procurementRecordService.save(procurementRecordBuilder.build());
            }
        }else if (qualityInspect.getInspectType() == 2) {
            //查询UnitPrice/TotalPrice
            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId());
            ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
            procurementRecordOutAdd.setType(2);
            procurementRecordOutAdd.setTypeName("生产出厂检验合格入库");
            procurementRecordOutAdd.setNickName(loginUser.getNickName());
            List<Details> details = new ArrayList<>();
            Details details1 = new Details();
            details1.setInboundQuantity(qualityInspect.getQuantity());
            details1.setId(Math.toIntExact(salesLedgerProduct.getId()));
            details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
            details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
            details1.setProductModelId(salesLedgerProduct.getProductModelId());
            details.add(details1);
            procurementRecordOutAdd.setDetails(details);
            procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId());
            procurementRecordService.add(procurementRecordOutAdd);
            // 出厂检验仅合格时入库,缺少产品信息时跳过入库但正常提交
            if ("合格".equals(qualityInspect.getCheckResult())) {
                SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId());
                if (salesLedgerProduct != null) {
                    ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
                    procurementRecordOutAdd.setType(2);
                    procurementRecordOutAdd.setTypeName("生产出厂检验合格入库");
                    procurementRecordOutAdd.setNickName(loginUser.getNickName());
                    List<Details> details = new ArrayList<>();
                    Details details1 = new Details();
                    details1.setInboundQuantity(qualityInspect.getQuantity());
                    details1.setId(Math.toIntExact(salesLedgerProduct.getId()));
                    details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
                    details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
                    details1.setProductModelId(salesLedgerProduct.getProductModelId());
                    details.add(details1);
                    procurementRecordOutAdd.setDetails(details);
                    procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId());
                    procurementRecordService.add(procurementRecordOutAdd);
                }
            }
        }
        qualityInspect.setInspectState(1);//已提交
        return qualityInspectMapper.updateById(qualityInspect);