ShipmentAPIService.java 7.4 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.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.IShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentModel;
import com.huaheng.pc.shipment.shipmentHeader.service.IShipmentHeaderService;
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 ShipmentAPIService {

    @Autowired
    private IDictDataService dictDataService;
    @Autowired
    IShipmentDetailService shipmentDetailService;
    @Autowired
    ICompanyService companyService;
    @Autowired
    IShipmentHeaderService shipmentHeaderService;
    @Autowired
    private IMaterialService materialService;
    @Autowired
    private IWarehouseService warehouseService;

    //出库单下发
    @Transactional
    public AjaxResult insertShipment(@RequestBody ShipmentModel shipmentModel){
        if(shipmentModel==null){
            throw new ServiceException("没有数据");
        }
        ShipmentHeader shipmentHeader=shipmentModel.getShipmentHeader();
        List<ShipmentDetail> shipmentDetails=shipmentModel.getShipmentDetails();
        if(shipmentHeader==null || shipmentDetails==null){
            throw new ServiceException("出库主单或出库子单为空");
        }

        if(dictDataService.checkConfig("shipmentType", shipmentHeader.getType()) == false)
        {
            throw new ServiceException("没有对应的出库单类型");
        }

        shipmentHeader.setCode(shipmentHeaderService.createCode(shipmentHeader.getType()));
        for(ShipmentDetail item: shipmentDetails){
            if(item.getShipmentCode()==null ){
                item.setShipmentCode(shipmentHeader.getCode());
            }
        }

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

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


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


        shipmentHeader.setLastStatus(0);
        shipmentHeader.setTotalQty(new BigDecimal(0));
        shipmentHeader.setTotalLines(0);
        shipmentHeader.setFirstStatus(0);
        try {
            shipmentHeaderService.insert(shipmentHeader);
        }catch (Exception e){
            return AjaxResult.error("新增主单失败,字段有误");
        }

        //添加细表到shipmentDetail
        for(ShipmentDetail shipmentDetail : shipmentDetails) {
            if (shipmentHeader.getFirstStatus() > 100) {
                //表示已经加入了波次
                throw new ServiceException("主单据状态不允许新增明细");
            }
            shipmentDetail.setCompanyId(shipmentHeader.getCompanyId());
            shipmentDetail.setWarehouseId(shipmentHeader.getWarehouseId());
            shipmentDetail.setShipmentId(shipmentHeader.getId());
            Material material = new Material();
            material.setCode(shipmentDetail.getMaterialCode());
            material.setWarehouseId(shipmentDetail.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("物料不属于当前货主!");
            }
            shipmentDetail.setMaterialId(material.getId());
            try{
                shipmentDetailService.insert(shipmentDetail);
            }catch(Exception e){
                return AjaxResult.error("新增单据明细失败,字段有误");
            }
            //更新单据总行数与总数量
            shipmentHeader.setTotalLines(shipmentHeader.getTotalLines() + 1);
            shipmentHeader.setTotalQty(shipmentHeader.getTotalQty().add(shipmentDetail.getQty()));
            shipmentHeaderService.updateByModel(shipmentHeader);

        }
        return AjaxResult.success("出库单下发成功");
    }



    //出库单回传
    public AjaxResult confirmShipment(String url)
    {
        ShipmentHeader shipmentHeader = new ShipmentHeader();
        shipmentHeader.setLastStatus(300);
        shipmentHeader = shipmentHeaderService.selectFirstEntity(shipmentHeader);
        if (shipmentHeader == null) {
            return AjaxResult.error("出库回传主单不存在");
        }
        ShipmentDetail shipmentDetail = new ShipmentDetail();
        shipmentDetail.setShipmentCode(shipmentHeader.getCode());
        List<ShipmentDetail> shipmentDetails = shipmentDetailService.selectListEntityByEqual(shipmentDetail);
        if (shipmentDetails == null) {
            return AjaxResult.error("出库回传子单不存在");
        }
        ShipmentModel model=new ShipmentModel();
        model.setShipmentHeader(shipmentHeader);
        model.setShipmentDetails(shipmentDetails);
        String JsonParam = JSON.toJSONString(model);
        String result = HttpUtils.sendPost(url, JsonParam);
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        shipmentHeader.setFirstStatus(900);
        shipmentHeader.setLastStatus(900);
        shipmentHeaderService.updateByModel(shipmentHeader);
        return ajaxResult;
    }
}