ReceiptApi.java 7.91 KB
package com.huaheng.api.general.Controller;


import com.alibaba.fastjson.JSON;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.http.HttpUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
import com.huaheng.framework.web.controller.BaseController;
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 io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

/**
 *  入库下发和入传接口
 *    @author huaheng
 *    @date 2018-12-20
 *
 *
 *
 */
import java.util.List;

@RestController
@RequestMapping("/api/receipt")
@Api(tags = {"receipt"}, description = "入库接口")
public class ReceiptApi extends BaseController {

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



    @Log(title = "入库单下发", action = BusinessType.INSERT)
    @PostMapping("/insertReceipt")
    @ResponseBody
    @Transactional
    public AjaxResult insertReceipt(@RequestBody ReceiptModel receiptModel){

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

        //判断是否有主表和子表
        if(receiptHeader==null || receiptDetails==null){
            return AjaxResult.error("入库主单或入库子单为空");
        }
        Company company=new Company();
        Warehouse warehouse= new Warehouse();

        //判断主表字段是否合格
        if(receiptHeader.getCode()==null || receiptHeader.getCompanyCode()==null ||
        receiptHeader.getWarehouseCode()==null ||receiptHeader.getType()==null ){
            return AjaxResult.error("入库主单字段有误");
        }
        company.setCode(receiptHeader.getCompanyCode());
        company = companyService.selectFirstEntity(company);
        if (company == null) {
            return AjaxResult.error("系统没有该货主");
        } else {
            receiptHeader.setCompanyId(company.getId());
        }
        warehouse.setCode(receiptHeader.getWarehouseCode());
        warehouse = warehouseService.selectFirstEntity(warehouse);
        if (warehouse == null) {
            return AjaxResult.error("系统没有该仓库");
        } else {
            receiptHeader.setWarehouseId(warehouse.getId());
        }



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


        }



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

        receiptHeader.setUploadStatus(0);
        receiptHeader.setFirstStatus((short)0);
        receiptHeader.setLastStatus((short)0);
        receiptHeader.setEnable(true);
        receiptHeader.setDeleted(false);
        try {
           receiptHeaderService.insert(receiptHeader);
        }catch (Exception e){
            return AjaxResult.error("新增主单失败");
        }



        for(ReceiptDetail item :receiptDetails){

            //判断主子单据code是否一样
            if(!receiptHeader.getCode().equals(item.getReceiptCode())){
                return AjaxResult.error("主子单据不匹配");
            }
            if (receiptHeader.getFirstStatus() > 100) {
                //表示已经加入了波次
                return AjaxResult.error("主单据状态不允许新增明细");
            }
            item.setCompanyId(receiptHeader.getCompanyId());
            item.setWarehouseId(receiptHeader.getWarehouseId());
            item.setReceiptId(receiptHeader.getId());
            item.setStatus((short)0);
            item.setDeleted(false);
            Material material = new Material();
            material.setCode(item.getMaterialCode());
            material.setWarehouseId(item.getWarehouseId());
            material = materialService.selectFirstEntity(material);
            if (material == null) {
                return AjaxResult.error("物料未找到");
            }
            if (StringUtils.isNotEmpty(material.getCompanyCode()) &&
                    ShiroUtils.getCompanyCodeList().contains(material.getCompanyCode()) == false)
            {
                return AjaxResult.error("物料不属于当前货主!");
            }
            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("入库单据下发成功");
    }




    //出库单回传
    @Log(title = "入库单回传", action = BusinessType.INSERT)
    @PostMapping("/shipmentAssign")
    @ResponseBody
    public AjaxResult shipmentAssign(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;
    }
}