PdaApiServiceImpl.java 6.48 KB
package com.huaheng.api.pda.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.general.domain.ReceiptDomain;
import com.huaheng.api.general.service.ReceiptApiService;
import com.huaheng.api.pda.domain.PdaParameter;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.datasource.DynamicDataSource;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.U8.domain.U8ReceiptDetail;
import com.huaheng.pc.U8.domain.U8ReceiptHeader;
import com.huaheng.pc.U8.service.U8ReceiptDetailService;
import com.huaheng.pc.U8.service.U8ReceiptHeaderService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
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 org.springframework.stereotype.Service;

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


/**
 * pda逻辑处理层
 * @author xcq
 */
@Service
public class PdaApiServiceImpl {
    @Resource
    private U8ReceiptHeaderService u8ReceiptHeaderService;
    @Resource
    private U8ReceiptDetailService u8ReceiptDetailService;
    @Resource
    private ReceiptApiService receiptApiService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;

    /**
     * 通过送货单号创建入库
     * @param parameter
     * @return
     */
    public AjaxResult createReceiptService(PdaParameter parameter){
        if (parameter == null){
            return AjaxResult.error("请勿发送空数据!");
        }
        String code = parameter.getCode();
        String lot = parameter.getLot();
        ReceiptDomain receiptDomain = new ReceiptDomain();
        if (StringUtils.isEmpty(code) || StringUtils.isEmpty(lot)){
            return AjaxResult.error("到货单号货批号不能为空!");
        }
        // 查询到货单是否已经存在
        LambdaQueryWrapper<ReceiptDetail> lambdaQuery = Wrappers.lambdaQuery();
        lambdaQuery.eq(ReceiptDetail::getUserDef1, code)
                .eq(ReceiptDetail::getLot, lot);
        List<ReceiptDetail> receiptDetails = receiptDetailService.list(lambdaQuery);
        if (receiptDetails != null && receiptDetails.size() > 0){
            LambdaQueryWrapper<ReceiptHeader> headerLambdaQueryWrapper = Wrappers.lambdaQuery();
            headerLambdaQueryWrapper.eq(ReceiptHeader::getCode, receiptDetails.get(0).getReceiptCode());
            ReceiptHeader receiptHeader = receiptHeaderService.getOne(headerLambdaQueryWrapper);
            receiptDomain.setReceiptHeader(receiptHeader);
            receiptDomain.setReceiptDetails(receiptDetails);
            AjaxResult result = AjaxResult.success("入库单已存在!");
            result.setData(receiptDomain);
            return result;
        }
        // 切换至从库
        DynamicDataSource.slave();
        // 通过erp数据查询到货单
        LambdaQueryWrapper<U8ReceiptHeader> lambda = Wrappers.lambdaQuery();
        lambda.eq(U8ReceiptHeader::getReferCode, code);
        U8ReceiptHeader u8ReceiptHeader = u8ReceiptHeaderService.getOne(lambda);
        if (u8ReceiptHeader == null){
            return AjaxResult.error("到货单查询失败!");
        }
        String cWhCode = null;
        // 通过到货单号查询到货单详情
        LambdaQueryWrapper<U8ReceiptDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(U8ReceiptDetail::getReferCode, code);
        List<U8ReceiptDetail> u8ReceiptDetails = u8ReceiptDetailService.list(queryWrapper);
        if (u8ReceiptDetails.size() == 0){
            return AjaxResult.error("查询送货单详情失败!");
        }
        if (StringUtils.isNotEmpty(u8ReceiptHeader.getCWhCode())){
            cWhCode = u8ReceiptHeader.getCWhCode();
        }else {
            cWhCode = u8ReceiptDetails.get(0).getCWhCode();
        }
        if (StringUtils.isEmpty(cWhCode)){
            return AjaxResult.error("到货单:"+u8ReceiptHeader.getReferCode()+"仓库为空!");
        }
        // 创建入库单头表
        ReceiptHeader header = new ReceiptHeader();
        // 设置单据类型为采购入库单
        header.setReceiptType(QuantityConstant.PURCHASE_RECEIPT_DOC);
        // 存储到货单号
        header.setUserDef1(code);
        // 设置U8仓库单号
        header.setUserDef2(cWhCode);
        // 设置货主
        header.setCompanyCode(QuantityConstant.COMPANYCODE);
        // 设置仓库
        header.setWarehouseCode(QuantityConstant.WAREHOUSECODE);
        // 供应商编码
        header.setSupplierCode(u8ReceiptHeader.getSupplierCode());
        // 入库头表保存批次号
        header.setUserDef3(lot);
        // 创建入库单详情
        List<ReceiptDetail> receiptDetailList = new ArrayList<>();
        u8ReceiptDetails.forEach(item->{
            ReceiptDetail receiptDetail = new ReceiptDetail();
            // 数量
            receiptDetail.setQty(item.getQty());
            // 物料编码
            receiptDetail.setMaterialCode(item.getMaterialCode());
            // 货主
            receiptDetail.setCompanyCode(QuantityConstant.COMPANYCODE);
            // 仓库编码
            receiptDetail.setWarehouseCode(QuantityConstant.WAREHOUSECODE);
            // 制单人
            receiptDetail.setCreatedBy(ShiroUtils.getUser().getUserName());
            // 送货单号
            receiptDetail.setUserDef1(code);
            // 批次
            receiptDetail.setLot(lot);
            // 到货单子单id
            receiptDetail.setUserDef2(item.getAutoId());
            // 库存状态
            receiptDetail.setInventorySts(QuantityConstant.GOOD);
            receiptDetailList.add(receiptDetail);
        });
        // 切换至主库
        DynamicDataSource.master();
        receiptDomain.setReceiptHeader(header);
        receiptDomain.setReceiptDetails(receiptDetailList);
        AjaxResult result = receiptApiService.receipt(receiptDomain);
        if (result.hasErr()){
            return result;
        }
        result.setData(receiptDomain);
        return result;
    }
}