ReceivingController.java 7.8 KB
package com.huaheng.pc.receipt.receiving.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
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.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
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 com.huaheng.pc.receipt.receiving.service.ReceivingService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author mahua
 * @ClassName ReceivingController
 * @projectName huaheng
 * @description: 入库组盘
 * @date 2019/8/31 15:51
 */
@Controller
@RequestMapping("/receipt/receiving")
public class ReceivingController extends BaseController {

    private String prefix = "receipt/receiving";

    @Resource
    private ReceivingService receivingService;
    @Resource
    private ReceiptContainerDetailService receiptContainerDetailService;
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ContainerService containerService;
    @Resource
    private InventoryDetailService inventoryDetailService;

    @RequiresPermissions("receipt:receiving:view")
    @GetMapping()
    public String receiving() {
        return prefix + "/receiving";
    }

    /**
     * 获取订单明细
     */
    @ResponseBody
    @PostMapping("/scanBill")
    @RequiresPermissions("receipt:receiving:receiving")
    @Log(title = "入库-获取订单明细", operating ="PC端扫描收货单号", action = BusinessType.OTHER)
    public AjaxResult scanBill(String code)  {
        AjaxResult result = receivingService.scanReceiptCode(code);
        return result;
    }

    /**
     * 获取收货信息
     */
    @ResponseBody
    @PostMapping("/getReceiptInfoByBill")
    @RequiresPermissions("receipt:receiving:receiving")
    @Log(title = "入库-获取收货信息", operating ="获取收货信息", action = BusinessType.OTHER)
    public AjaxResult getReceiptInfoByBill(String code)  {
        AjaxResult result = receiptContainerDetailService.getReceiptInfoByBill(code);
        return result;
    }


    @GetMapping("/add")
    public String add(Long detailId, String containerCode, ModelMap modelMap) {
        modelMap.put("containerCode", containerCode);
        modelMap.put("receiptDetails", receiptDetailService.getById(detailId));
        return prefix + "/add";
    }

    /**
     * 保存收货
     */
    @ApiOperation(value="保存收货 ", notes="保存收货 ", httpMethod = "POST")
    @ResponseBody
    @PostMapping("/save")
    @RequiresPermissions("receipt:receiving:receiving")
    @Log(title = "入库-保存收货", operating ="PC端保存收货", action = BusinessType.OTHER)
    public AjaxResult save(
            @ApiParam(name="receiptCode",value="入库单编码") String receiptCode,
            @ApiParam(name="containerCode",value="容器编码")String containerCode,
            @ApiParam(name="receiptDetailId",value="入库单详情id")Integer receiptDetailId,
            @ApiParam(name="locationCode",value="库位编码", required = false)String locationCode,
            @ApiParam(name="qty",value="收货数量") BigDecimal qty,
            @ApiParam(name="localtionRule",value="定位规则", required = false)String locatingRule){
        if(qty.intValue() <= 0) {
            return AjaxResult.error("配盘数量必须大于0");
        }

        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = receiptContainerHeaderService.saveContainer(receiptCode, containerCode, receiptDetailId,
                        locationCode, qty, locatingRule);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }


    /**
     * 获取库存信息
     */
    @ResponseBody
    @PostMapping("/getInventoryInfo")
    @RequiresPermissions("receipt:receiving:add")
    @Log(title = "入库-入库单", operating ="获取库存信息", action = BusinessType.OTHER)
    public AjaxResult getInventoryInfo(String code,Integer id)  {
        //找到主单的账套和仓库
        LambdaQueryWrapper<ReceiptHeader> lambdaQueryWrapper= Wrappers.lambdaQuery();
        lambdaQueryWrapper.eq(ReceiptHeader::getCode,code)
        .eq(ReceiptHeader::getWarehouseCode, ShiroUtils.getWarehouseCode());
        ReceiptHeader receiptHeader=receiptHeaderService.getOne(lambdaQueryWrapper);
        if(receiptHeader==null){
            throw new ServiceException("找不到主单");
        }

        //找到子单物料
        LambdaQueryWrapper<ReceiptDetail> lambdaQuery=Wrappers.lambdaQuery();
        lambdaQuery.eq(ReceiptDetail::getReceiptCode,code)
                .eq(ReceiptDetail::getWarehouseCode, ShiroUtils.getWarehouseCode())
        .eq(ReceiptDetail::getId,id);
        ReceiptDetail receiptDetail=receiptDetailService.getOne(lambdaQuery);
        if(receiptDetail==null){
            throw new ServiceException("找不到子单");
        }

        //本物料库存
        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambda = Wrappers.lambdaQuery();
        inventoryDetailLambda.eq(InventoryDetail::getWarehouseCode,ShiroUtils.getWarehouseCode())
                .eq(InventoryDetail::getCompanyCode,receiptHeader.getCompanyCode())
                .eq(InventoryDetail::getMaterialCode,receiptDetail.getMaterialCode())
                .eq((StringUtils.isNotEmpty(receiptDetail.getProjectNo())),InventoryDetail::getProjectNo,
                    receiptDetail.getProjectNo());
        List<InventoryDetail> inventoryList = inventoryDetailService.list(inventoryDetailLambda);

        //空容器
        LambdaQueryWrapper<Container> container=Wrappers.lambdaQuery();
        container.eq(Container::getWarehouseCode,ShiroUtils.getWarehouseCode())
                .eq(Container::getCompanyCode,receiptHeader.getCompanyCode())
                .eq(Container::getStatus, QuantityConstant.STATUS_CONTAINER_EMPTY);
        List<Container> containerList=containerService.list(container);

        Map map=new ModelMap();
        map.put("inventoryList",inventoryList);
        map.put("containerList",containerList);
        return AjaxResult.success(map);
    }
}