ReceiptAPIService.java 12.1 KB
package com.huaheng.api.general.service;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

import com.alibaba.fastjson.JSON;
import com.huaheng.api.general.domain.ReceiptModelDetail;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.HttpUtils;
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.api.general.domain.ReceiptModel;
import com.huaheng.pc.receipt.receiptHeader.service.IReceiptHeaderService;
import com.huaheng.pc.system.dict.service.IDictDataService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
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;

    private static final Logger log = LoggerFactory.getLogger(ReceiptAPIService.class);

    //入库单下发
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult insertReceipt(ReceiptModel receiptModel){
        log.warn("入库单下发数据:"+ receiptModel);
        //主单校验
        if(StringUtils.isEmpty(receiptModel.getReceiptCode()) ||
                StringUtils.isEmpty(receiptModel.getWarehouseCode()) ||
                StringUtils.isEmpty(receiptModel.getCompanyCode()) ||
                StringUtils.isEmpty(receiptModel.getReceiptType())
                                                                    ){
                return AjaxResult.error("入库信息主单数据必填项有误");
        }
        //明细校验
        List<ReceiptModelDetail> receiptModelDetailList = receiptModel.ReceiptModelDetails;
        if(receiptModelDetailList == null || receiptModelDetailList.size() < 1){
            return AjaxResult.error("明细子单没有数据!");
        }
        if(receiptModelDetailList.size() > 200){
           return AjaxResult.error("明细单不能超过200行");
        }
        //判断入库类型是否匹配
        if(!dictDataService.checkConfig("receiptType", receiptModel.getReceiptType())){
            throw new ServiceException("没有对应的入库单类型");
        }
        ReceiptHeader receiptHeader = new ReceiptHeader();
        receiptHeader.setCode(receiptHeaderService.createCode(receiptModel.getReceiptType()));//主单编码
        receiptHeader.setStation(String.valueOf(2));
        receiptHeader.setType(receiptModel.getReceiptType());
        receiptHeader.setSourceCode(receiptModel.getReceiptId().toString());
        receiptHeader.setSourcePlatform("ERP");
        receiptHeader.setFirstStatus((short) 0);
        receiptHeader.setLastStatus((short) 0);
        receiptHeader.setCreated(new Date());
        receiptHeader.setCreatedBy("ERP");
        receiptHeader.setLastUpdated(new Date());
        receiptHeader.setLastUpdatedBy("ERP");
        receiptHeader.setTotalQty(new BigDecimal(0));
        receiptHeader.setTotalLines(0);
        //校验货主和仓库
        Company company=new Company();
        company.setCode(receiptModel.getCompanyCode());
        company = companyService.selectFirstEntity(company);
        if (company == null) {
            return AjaxResult.error("系统没有该货主");
        } else {
            receiptHeader.setCompanyId(company.getId());
        }
        Warehouse warehouse= new Warehouse();
        warehouse.setCode(receiptModel.getWarehouseCode());
        warehouse = warehouseService.selectFirstEntity(warehouse);
        if (warehouse == null) {
            return AjaxResult.error("系统没有该仓库");
        } else {
            receiptHeader.setWarehouseId(warehouse.getId());
        }
        //插入主单
        int j = receiptHeaderService.insert(receiptHeader);
        if(j < 1){
            throw new ServiceException("新增入库主单失败!");
        }
        //明细单
        BigDecimal totalQty = BigDecimal.ZERO;
        List<ReceiptDetail> receiptDetails = new ArrayList<>();
        for(ReceiptModelDetail item :receiptModelDetailList){
            //校验数据
            if(StringUtils.isEmpty(item.getItemCode()) ||
                item.getQty() == null ||
                    item.getQty() ==0 ){
                throw new ServiceException("入库明细单必填项数据错误!");
            }
            Material material = new Material();
            material.setCode(item.getItemCode());
            material.setWarehouseCode(receiptHeader.getWarehouseCode());
            material = materialService.selectFirstEntity(material);
            if (StringUtils.isNull(material) ) {
                throw new ServiceException("没有该物料");
            }
            ReceiptDetail receiptDetail = new ReceiptDetail();

            receiptDetail.setWarehouseId(receiptHeader.getWarehouseId());
            receiptDetail.setWarehouseCode(receiptHeader.getWarehouseCode());
            receiptDetail.setCompanyId(receiptHeader.getCompanyId());
            receiptDetail.setCompanyCode(receiptHeader.getCompanyCode());
            receiptDetail.setSourceCode(item.getItemId().toString());
            receiptDetail.setSourceLine("");
            receiptDetail.setReceiptId(receiptHeader.getId());
            receiptDetail.setReceiptCode(receiptHeader.getCode());
            receiptDetail.setMaterialId(material.getId());
            receiptDetail.setMaterialCode(material.getCode());
//            receiptDetail.setMaterialName(material.getName());
//            receiptDetail.setSpecification(material.getSpecification());
            receiptDetail.setBatch("");
            receiptDetail.setLot("");
            receiptDetail.setProject(item.getItemBatch());
            receiptDetail.setManufactureDate(null);
            receiptDetail.setExpirationDate(null);
            if(StringUtils.isNotEmpty(item.getItemState())){
                receiptDetail.setInventoryStatus(item.getItemState());
            }else{
                receiptDetail.setInventoryStatus("good");
            }
            try {
                receiptDetail.setQty(BigDecimal.valueOf(item.getQty()));
            }catch (Exception e){
                throw new ServiceException(e.toString());
            }
            receiptDetail.setQtyCompleted(new BigDecimal("0"));
            receiptDetail.setPrice(new BigDecimal("0"));
            receiptDetail.setStatus((short) 0);
            receiptDetail.setCreated(new Date());
            receiptDetail.setCreatedBy("ERP");
            receiptDetail.setLastUpdated(new Date());
            receiptDetail.setLastUpdatedBy("ERP");
            receiptDetail.setZoneCode("LK");
            if(StringUtils.isNotEmpty(item.getItemUnit())){
                receiptDetail.setUnit(item.getItemUnit());
            }else{
                receiptDetail.setUnit("PCS");
            }
            receiptDetail.setDeleted(false);
            receiptDetail.setUserDef1("");
            receiptDetail.setUserDef2("");
            receiptDetail.setUserDef3("");
            receiptDetails.add(receiptDetail);
            //更新表头的总行数和总数量统计
            totalQty = totalQty.add(receiptDetail.getQty());
        }
        //批量插入入库明细
        int k = receiptDetailService.insertBatch(receiptDetails);
        if(receiptDetails.size() != k){
            throw new ServiceException("明细单插入失败");
        }
        //更新表头的总行数和总数量统计
        receiptHeader.setTotalQty(totalQty);
        receiptHeader.setTotalLines( receiptDetails.size());
        receiptHeaderService.updateByModel(receiptHeader);
        return AjaxResult.success("入库单据下发成功");
    }




    //入库单单据回传,整单回传
    public AjaxResult ConfirmReceipt(String url)
    {
        ReceiptHeader receiptHeader = new ReceiptHeader();
        receiptHeader.setWarehouseCode("TD0001");
        receiptHeader.setLastStatus((short)800);
        ReceiptHeader header = receiptHeaderService.selectFirstEntity(receiptHeader);
        if (StringUtils.isNull(header)) {
            return AjaxResult.success("没有需要回传的主单");
        }
        ReceiptDetail receiptDetail = new ReceiptDetail();
        receiptDetail.setReceiptCode(receiptHeader.getCode());
        receiptDetail.setWarehouseCode(receiptHeader.getWarehouseCode());
        List<ReceiptDetail> receiptDetails = receiptDetailService.selectListEntityByEqual(receiptDetail);
        if (receiptDetails == null || receiptDetails.size() < 1) {
            return AjaxResult.error("该入库主单没有子单");
        }
        //主单写入
        ReceiptModel receiptModel = new ReceiptModel();
        receiptModel.setReceiptId(header.getId());
        receiptModel.setReceiptCode(header.getCode());
        receiptModel.setReceiptType(header.getType());
        receiptModel.setWarehouseCode(header.getWarehouseCode());
        receiptModel.setCompanyCode(header.getCompanyCode());
        String dateTime = null;
        try{
            dateTime = new java.sql.Timestamp(System.currentTimeMillis()).toString();
        }catch (Exception e){
            throw new ServiceException(e.toString());
        }
        receiptModel.setcDatetime(dateTime);
        //明细
        List<ReceiptModelDetail> receiptModelDetailList = new ArrayList<>();
        for (ReceiptDetail item:receiptDetails){
                ReceiptModelDetail receiptModelDetail = new ReceiptModelDetail();
                receiptModelDetail.setItemId(item.getId());
                receiptModelDetail.setItemCode(item.getMaterialCode());
                Material material = new Material();
                material.setCode(item.getMaterialCode());
                material.setWarehouseCode(receiptHeader.getWarehouseCode());
                material = materialService.selectFirstEntity(material);
                if (StringUtils.isNull(material) ) {
                    return AjaxResult.error("没有该物料");
                }
                receiptModelDetail.setItemName(material.getName());
                receiptModelDetail.setItemSpecification(material.getSpecification());
                receiptModelDetail.setItemBarcode(material.getBarcode());
                receiptModelDetail.setItemBatch(item.getProject());
                receiptModelDetail.setItemState(item.getInventoryStatus());
                try{
                    receiptModelDetail.setQty(item.getQty().floatValue());
                }catch (Exception e){
                    throw new ServiceException(e.toString());
                }
                receiptModelDetail.setItemUnit("PCS");
                receiptModelDetailList.add(receiptModelDetail);
        }
        receiptModel.setReceiptModelDetails(receiptModelDetailList); //明细加入到回传
        String JsonParam = JSON.toJSONString(receiptModel);
        String result = HttpUtils.bodypost(url, JsonParam);
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        if(ajaxResult.getCode() != 200){
            return AjaxResult.error("回传入库单ERP回复错误!");
        }
        receiptHeader.setFirstStatus((short)900);
        receiptHeader.setLastStatus((short)900);
        receiptHeaderService.updateByModel(receiptHeader);
        return ajaxResult;
    }
}