MesController.java 11.8 KB
package com.huaheng.api.mes.controller;

<<<<<<< HEAD
import com.huaheng.api.mes.domain.MesDomain;
import com.huaheng.api.mes.service.MesService;
import com.huaheng.api.wcs.domain.WcsTask;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * @author 游杰
 */
@RestController
@RequestMapping("/API/WMS/v2")
public class MesController extends BaseController {

    @Resource
    private MesService mesService;

    @PostMapping("/receipt")
    @ApiOperation("入库")
    @ResponseBody
    public AjaxResult receipt(@RequestBody MesDomain mesDomain) {
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = mesService.receipt(mesDomain);
                return ajaxResult;
            }
        });
        return ajaxResult;
    }

    @PostMapping("/shipment")
    @ApiOperation("出库")
    @ResponseBody
    public AjaxResult shipment(@RequestBody MesDomain mesDomain) {
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = mesService.shipment(mesDomain);
                return ajaxResult;
            }
        });
        return ajaxResult;
=======
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.api.R;
import com.huaheng.api.acs.service.AcsService;
import com.huaheng.api.mes.domain.MesCallIn;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.mobile.receipt.ReceiptBill;
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.inventory.inventoryHeader.domain.InventoryHeader;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderForShipmentService;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerView;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
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.task.agvTask.domain.AgvTask;
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.ReceiptTaskService;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import io.swagger.annotations.ApiOperation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@RestController
@RequestMapping("/API/WMS/v2")
public class MesController {

    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptContainerDetailService receiptContainerDetailService;
    @Resource
    private ContainerService containerService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private InventoryHeaderService inventoryHeaderService;
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private ReceiptTaskService receiptTaskService;
    @Resource
    private InventoryHeaderForShipmentService inventoryHeaderForShipmentService;
    @Resource
    private AcsService acsService;


    @PostMapping("/MesQuickReceipt")
    @ApiOperation("Mes入库")
    @ApiLogger(apiName = "Mes入库", from="ROBOT")
    @Transactional(rollbackFor = Exception.class)
    @ResponseBody
    public AjaxResult MesQuickReceipt(@RequestBody MesCallIn mesCallIn) {
        String materialCode=mesCallIn.getMaterialCode();
        String containerCode = mesCallIn.getContainerCode();
        String port = mesCallIn.getPort();
        String locationCode ="";
        String companyCode="BHF";
        if (StringUtils.isEmpty(materialCode)){
            return AjaxResult.error("物料信息不能为空");
        }
        if (StringUtils.isEmpty(containerCode)){
            return AjaxResult.error("容器号不能为空");
        }
        if (StringUtils.isEmpty(port)){
            return AjaxResult.error("站台不能为空");
        }
        LambdaQueryWrapper<Container> containerLambdaQueryWrapper= Wrappers.lambdaQuery();
        containerLambdaQueryWrapper.eq(Container::getCode,containerCode)
                .eq(Container::getWarehouseCode,"CS0001");
        Container one = containerService.getOne(containerLambdaQueryWrapper);
        if (one==null){
            return AjaxResult.error(containerCode+"容器不存在");
        }
        List<TaskHeader> unfinishTask = taskHeaderService.getUnCompleteTaskList().stream().filter((t) -> {
            return t.getContainerCode().equals(one.getCode());
        }).collect(Collectors.toList());

        if (unfinishTask.size() > 0) {
            TaskHeader t = unfinishTask.get(0);
            String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(t.getCreated());
            throw new ServiceException(one.getCode() + "托盘已经有未完成的任务,请不要重复下发\n该托盘任务创建于:" + time);
        }

        List<ReceiptBill> receiptBills = new ArrayList<>();
        ReceiptBill receiptBill =new ReceiptBill();
        String substring = materialCode.substring(0, 2);
        switch (substring){
            case "dz":
                receiptBill.setMaterialCode("dz");
                receiptBill.setMaterialName("端子盘");
                break;
            case "mj":
                receiptBill.setMaterialCode("mj");
                receiptBill.setMaterialName("模具");
                break;
            case "dx":
                receiptBill.setMaterialCode("dx");
                receiptBill.setMaterialName("导线");
                break;
        }


        receiptBill.setCompanyCode("BHF");
        receiptBill.setReceiptContainerCode(containerCode);
        receiptBill.setQty(new BigDecimal(1));
        receiptBills.add(receiptBill);

        ReceiptContainerView record = new ReceiptContainerView();
        record.setReceiptContainerCode(containerCode);
        record.setLocationCode(locationCode);
        record.setTaskType((short)100);
        record.setCompanyCode("BHF");
        receiptContainerHeaderService.checkContainer(record);
        if(locationCode != null) {
            receiptContainerHeaderService.mobileCheckLocationCode(record);
        }
        int receiptHeaderId = receiptHeaderService.createTodayHeader(companyCode);
        ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptHeaderId);
        List<Integer> receiptDetailIds = receiptDetailService.insertTodayReceiptDetail(receiptHeaderId, receiptBills, true, companyCode);
        if(receiptDetailIds != null && receiptDetailIds.size() > 0) {
            int containerHeaderId = receiptContainerHeaderService.insertTodayReceiptContainerHeader(receiptBills.get(0), receiptHeader.getCode());
            if(containerHeaderId > 0) {
                List<Integer> receiptContainerDetailIds = receiptContainerDetailService.insertTodayReceiptcContainerDetail(containerHeaderId, receiptHeaderId, receiptDetailIds, receiptBills);
                if(receiptContainerDetailIds != null && receiptContainerDetailIds.size() > 0) {
                    List<Integer> idList = Arrays.asList(containerHeaderId);
                    List<Integer> idsList = idList.stream().distinct().collect(Collectors.toList());
                    AjaxResult receiptTask = receiptTaskService.createReceiptTask(idsList);
                    if (receiptTask.hasErr()){
                        return AjaxResult.error("生成任务失败");
                    }
                    AgvTask agvTask=new AgvTask();
                    agvTask.setWarehouseCode("CS0001");
                    agvTask.setFromPort(port);
                    agvTask.setToPort("1001");
                    agvTask.setContainerCode(containerCode);
                    agvTask.setTaskType(QuantityConstant.TASK_TYPE_WHOLESHIPMENT);
//                    agvTask.setPreTaskNo(one.getId());
                    agvTask.setCreatedBy("Mes");
                    AjaxResult ajaxResult = acsService.executeAGVTask(agvTask);
                    if (ajaxResult.hasErr()){
                        return AjaxResult.error("下发AGV任务失败");
                    }
                    return AjaxResult.success();
                } else {
                    return AjaxResult.error("入库组盘失败");
                }
            } else {
                return AjaxResult.error("插入入库容器表单头失败");
            }
        } else {
            return AjaxResult.error("插入入库明细表单失败");
        }

    }

    @PostMapping("/MesCallOut")
    @ApiOperation("Mes出库")
    @ApiLogger(apiName = "Mes出库", from="ROBOT")
    @Transactional(rollbackFor = Exception.class)
    @ResponseBody
    public AjaxResult MesCallOut(@RequestBody MesCallIn mesCallIn) {
        String materialCode=mesCallIn.getMaterialCode();
        String port = mesCallIn.getPort();
        if (StringUtils.isEmpty(materialCode)){
            return AjaxResult.error("物料信息不能为空");
        }
        if (StringUtils.isEmpty(port)){
            return AjaxResult.error("站台不能为空");
        }
        switch (materialCode){
            case "1" :
                materialCode="dx";
                break;
            case "2" :
                materialCode="dz";
                break;
            case "3" :
                materialCode="mj";
                break;
            case "4" :
                materialCode="kongpan";
                break;
        }
        LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper=Wrappers.lambdaQuery();
        inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getMaterialCode,materialCode)
                .last("ORDER BY  id asc limit 1");
        InventoryDetail one = inventoryDetailService.getOne(inventoryDetailLambdaQueryWrapper);
        if (one==null){
            return AjaxResult.error("库内没有该物料信息");
        }
        LambdaQueryWrapper<InventoryHeader> inventoryHeaderLambdaQueryWrapper =Wrappers.lambdaQuery();
        inventoryHeaderLambdaQueryWrapper.eq(InventoryHeader::getId,one.getInventoryHeaderId());
        InventoryHeader one1 = inventoryHeaderService.getOne(inventoryHeaderLambdaQueryWrapper);
        if (one1==null){
            return AjaxResult.error("库内没有该物料信息");
        }
        String inventoryHeaderId = one1.getId().toString();
        inventoryHeaderForShipmentService.shipmentContainer(inventoryHeaderId, port);

        return AjaxResult.success();
>>>>>>> d3df4772feeca5d7bb71da9dfbf2dfb9cde02b24
    }
}