QualityService.java 7.57 KB
package com.huaheng.api.quality.service;


import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.huaheng.api.quality.domain.QualityDetail;
import com.huaheng.api.quality.domain.QualityHeader;
import com.huaheng.api.quality.domain.QualityModel;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.OkHttpUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.domain.ResultErp;
import com.huaheng.framework.web.service.ConfigService;
import com.huaheng.pc.config.address.domain.Address;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.srm.domain.SrmHeader;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Service
public class QualityService  {

    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ConfigService configService;
    @Resource
    private AddressService addressService;


    public String getQualityAddress(){

        LambdaQueryWrapper<Address> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Address::getParam, "quality");
        queryWrapper.last("limit 1");
        Address address = addressService.getOne(queryWrapper);
        if(address==null){
            throw new ServiceException("请配置质检地址");
        }
        return address.getUrl();
    }
    /**
     * 入库单质检状态生成质检单
     * @return
     */
    @Transactional
    //srm和t100和mes传过来生成的入库单,当入库单有明细需要质检时,QualityStatus为1、FirstStatus状态为0,不能操作入库
    public AjaxResult createQualityByReceipt(){
        //入库单receiptHeader为采购单类型的单子,状态为0
        LambdaQueryWrapper<ReceiptHeader> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(ReceiptHeader::getReceiptType, QuantityConstant.PURCHASE_R, QuantityConstant.PURCHASER_R,QuantityConstant.MES_RECEIPT_TYPE_SI);
//        queryWrapper.eq(ReceiptHeader::getFirstStatus, QuantityConstant.RECEIPT_HEADER_CHECK);
        queryWrapper.eq(ReceiptHeader::getQualityStatus, 1);
        List<ReceiptHeader> receiptHeaders = receiptHeaderService.list(queryWrapper);

        String urlpre=this.getQualityAddress();
        String token=configService.getKey("quality_token",QuantityConstant.WAREHOUSE_CS);
        if(StringUtils.isEmpty( token)){
            throw new ServiceException("请配置质检token");
        }
        //遍历每个入库单,创建质检单
        String url=urlpre+"/api/quality/createQuality";
        for (ReceiptHeader receiptHeader : receiptHeaders) {
            String receiptType=receiptHeader.getReceiptType();
            if(receiptType.equals(QuantityConstant.PURCHASE_R)||receiptType.equals(QuantityConstant.PURCHASER_R)){
                if(!receiptHeader.getFirstStatus().equals(QuantityConstant.RECEIPT_HEADER_CHECK)){
                    ReceiptHeader receiptHeader1=new ReceiptHeader();
                    receiptHeader1.setQualityStatus(2);
                    receiptHeader1.setId(receiptHeader.getId());
                    receiptHeaderService.updateById(receiptHeader1);
                    continue;
                }
            }


            QualityModel qualityModel = createQualityByReceipt(receiptHeader);
            if(qualityModel==null){
                continue;
            }
            //对接质检系统api
            String JsonParam = JSON.toJSONString(qualityModel);
            String result = OkHttpUtils.bodypostToken(url, JsonParam, receiptHeader.getWarehouseCode(),"质检单生成",token);
            if(result==null){
                continue;
            }
            ResultErp resultErp = JSON.parseObject(result, ResultErp.class);
            if(resultErp.isSuccess()){
                ReceiptHeader receiptHeader1=new ReceiptHeader();
                receiptHeader1.setQualityStatus(2);
                receiptHeader1.setId(receiptHeader.getId());
                receiptHeaderService.updateById(receiptHeader1);
            }
        }
        return AjaxResult.success();
    }

    public QualityModel createQualityByReceipt(ReceiptHeader receiptHeader){
        QualityModel qualityModel = new QualityModel();
        //创建质检单主表
        QualityHeader qualityHeader = new QualityHeader();
        String receipType=receiptHeader.getReceiptType();
        switch (receipType){
            case QuantityConstant.PURCHASE_R:
                qualityHeader.setType(QuantityConstant.QUALITY_TYPE_T100);
                break;
            case QuantityConstant.PURCHASER_R:
                qualityHeader.setType(QuantityConstant.QUALITY_TYPE_SRM);
                break;
            case QuantityConstant.SI_R:
                qualityHeader.setType(QuantityConstant.QUALITY_TYPE_MES);
                break;
            default:
                return null;
        }
        qualityHeader.setWarehouseCode(receiptHeader.getWarehouseCode());
        qualityHeader.setCompanyCode(receiptHeader.getCompanyCode());
        qualityHeader.setSourceCode(receiptHeader.getCode());
        qualityHeader.setSourceId(receiptHeader.getId());
        qualityHeader.setReferCode(receiptHeader.getReferCode());
        //保存明细表
        LambdaQueryWrapper<ReceiptDetail> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ReceiptDetail::getReceiptId, receiptHeader.getId());
        queryWrapper.eq(ReceiptDetail::getQcCheck, 0);
        List<ReceiptDetail> receiptDetails = receiptDetailService.list(queryWrapper);
        List<QualityDetail> qualityDetails = new ArrayList<>();
        for (ReceiptDetail receiptDetail : receiptDetails) {
            QualityDetail qualityDetail= createQualityDetailByReceiptDetail(receiptDetail, qualityHeader);
            qualityDetails.add(qualityDetail);
        }
        if(qualityDetails.size()==0){
            return null;
        }
        qualityModel.setQualityHeader(qualityHeader);
        qualityModel.setQualityDetails(qualityDetails);
        return qualityModel;
    }
    
    //根据入库单明细创建质检单明细
    private QualityDetail createQualityDetailByReceiptDetail(ReceiptDetail receiptDetail, QualityHeader qualityHeader){
        QualityDetail qualityDetail = new QualityDetail();
        qualityDetail.setLot(receiptDetail.getLot());
        qualityDetail.setProject(receiptDetail.getMoCode());
        qualityDetail.setReferLineNum(Integer.valueOf(receiptDetail.getReferLineNum()));
        qualityDetail.setBatch(receiptDetail.getBatch());
        qualityDetail.setMaterialCode(receiptDetail.getMaterialCode());
        qualityDetail.setMaterialSpec(receiptDetail.getMaterialSpec());
        qualityDetail.setMaterialName(receiptDetail.getMaterialName());
        qualityDetail.setMaterialUnit(receiptDetail.getMaterialUnit());
        qualityDetail.setQty(receiptDetail.getQty());
        qualityDetail.setReferCode(receiptDetail.getReferCode());
        qualityDetail.setPurchaseCode(receiptDetail.getPurchaseCode());
        return qualityDetail;
    }

}