ReceiptAPIservice.java 7.56 KB
package com.huaheng.api.general.service;

import com.alibaba.fastjson.JSON;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.HttpUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.pc.general.company.domain.Company;
import com.huaheng.pc.general.company.service.ICompanyService;
import com.huaheng.pc.general.material.domain.Material;
import com.huaheng.pc.general.material.service.IMaterialService;
import com.huaheng.pc.general.warehouse.domain.Warehouse;
import com.huaheng.pc.general.warehouse.service.IWarehouseService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.IReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptModel;
import com.huaheng.pc.receipt.receiptHeader.service.IReceiptHeaderService;
import com.huaheng.pc.system.dict.service.IDictDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;

import java.math.BigDecimal;
import java.util.List;

@Service
public class ReceiptAPIservice {

    @Autowired
    private IDictDataService dictDataService;
    @Autowired
    private IReceiptHeaderService receiptHeaderService;
    @Autowired
    private IReceiptDetailService receiptDetailService;
    @Autowired
    private IMaterialService materialService;
    @Autowired
    private ICompanyService companyService;
    @Autowired
    private IWarehouseService warehouseService;



    //入库单下发
    @Transactional
    public AjaxResult insertReceipt(@RequestBody ReceiptModel receiptModel){

        //判断是否有数据
        if(receiptModel==null){
            throw new ServiceException("没有数据");
        }
        ReceiptHeader receiptHeader=receiptModel.getReceiptHeader();
        List<ReceiptDetail> receiptDetails=receiptModel.getReceiptDetails();

        //判断是否有主表和子表
        if(receiptHeader==null || receiptDetails==null){
            throw new ServiceException("入库主单或入库子单为空");
        }

        //判断入库类型是否匹配
        if(dictDataService.checkConfig("receiptType", receiptHeader.getType()) == false)
        {
            throw new ServiceException("没有对应的入库单类型");
        }

        receiptHeader.setCode(receiptHeaderService.createCode(receiptHeader.getType()));
        for(ReceiptDetail item: receiptDetails){
            if(item.getReceiptCode()==null ){
                item.setReceiptCode(receiptHeader.getCode());
            }
        }
        Company company=new Company();
        Warehouse warehouse= new Warehouse();

        //判断主表字段是否合格
        if(receiptHeader.getCode()==null || receiptHeader.getCompanyCode()==null ||
                receiptHeader.getWarehouseCode()==null ||receiptHeader.getType()==null ){
            throw new ServiceException("入库主单字段有误");
        }

        company.setCode(receiptHeader.getCompanyCode());
        company = companyService.selectFirstEntity(company);
        if (company == null) {
            throw new ServiceException("系统没有该货主");
        } else {
            receiptHeader.setCompanyId(company.getId());
        }
        warehouse.setCode(receiptHeader.getWarehouseCode());
        warehouse = warehouseService.selectFirstEntity(warehouse);
        if (warehouse == null) {
            throw new ServiceException("系统没有该仓库");
        } else {
            receiptHeader.setWarehouseId(warehouse.getId());
        }

        //判断子表字段是否合格
        for(ReceiptDetail item: receiptDetails){
            if(item.getWarehouseCode()==null ||item.getCompanyCode()==null ||
                    item.getReceiptCode()==null || item.getMaterialCode()==null ||item.getInventoryStatus()==null){
                throw new ServiceException("入库子单字段有误");
            }


        }

        receiptHeader.setLastStatus((short)0);
        receiptHeader.setTotalQty(new BigDecimal(0));
        receiptHeader.setTotalLines(0);
        receiptHeader.setFirstStatus((short)0);
        try {
            receiptHeaderService.insert(receiptHeader);
        }catch (Exception e){
            throw new ServiceException("新增主单失败");
        }



        for(ReceiptDetail item :receiptDetails){

            //判断主子单据code是否一样
            if(!receiptHeader.getCode().equals(item.getReceiptCode())){
                throw new ServiceException("主子单据不匹配");
            }
            if (receiptHeader.getFirstStatus() > 100) {
                //表示已经加入了波次
                throw new ServiceException("主单据状态不允许新增明细");
            }
            item.setCompanyId(receiptHeader.getCompanyId());
            item.setWarehouseId(receiptHeader.getWarehouseId());
            item.setReceiptId(receiptHeader.getId());
            Material material = new Material();
            material.setCode(item.getMaterialCode());
            material.setWarehouseId(item.getWarehouseId());
            material = materialService.selectFirstEntity(material);
            if (material == null) {
                throw new ServiceException("物料未找到");
            }
            if (StringUtils.isNotEmpty(material.getCompanyCode()) &&
                    ShiroUtils.getCompanyCodeList().contains(material.getCompanyCode()) == false)
            {
                throw new ServiceException("物料不属于当前货主!");
            }
            item.setMaterialId(material.getId());
            try{
                receiptDetailService.insert(item);
            }catch(Exception e){
                return AjaxResult.error("新增单据明细失败");
            }
            //更新表头的总行数和总数量统计
            receiptHeader.setTotalQty(receiptHeader.getTotalQty().add(item.getQty()));
            receiptHeader.setTotalLines(receiptHeader.getTotalLines() + 1);
            receiptHeaderService.updateByModel(receiptHeader);
        }
        return AjaxResult.success("入库单据下发成功");
    }




    //入库单回传

    public AjaxResult ConfirmReceipt(String url)
    {
        ReceiptHeader receiptHeader = new ReceiptHeader();
        receiptHeader.setLastStatus((short)800);
        receiptHeader = receiptHeaderService.selectFirstEntity(receiptHeader);
        if (receiptHeader == null) {
            return AjaxResult.error("入库回传主单不存在");
        }
        ReceiptDetail receiptDetail = new ReceiptDetail();
        receiptDetail.setReceiptCode(receiptHeader.getCode());
        List<ReceiptDetail> receiptDetails = receiptDetailService.selectListEntityByEqual(receiptDetail);
        if (receiptDetails == null) {
            return AjaxResult.error("入库回传子单不存在");
        }
        ReceiptModel model=new ReceiptModel();
        model.setReceiptHeader(receiptHeader);
        model.setReceiptDetails(receiptDetails);
        String JsonParam = JSON.toJSONString(model);
        String result = HttpUtils.sendPost(url, JsonParam);
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        receiptHeader.setFirstStatus((short)900);
        receiptHeader.setLastStatus((short)900);
        receiptHeaderService.updateByModel(receiptHeader);
        return ajaxResult;
    }
}