TrussRobotController.java 7.49 KB
package com.huaheng.api.acs.controller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.acs.domain.pickContainer.ContainerPositionDomain;
import com.huaheng.api.acs.service.AcsService;
import com.huaheng.api.sap.domain.ZarDomain;
import com.huaheng.api.sap.service.ZarApiService;
import com.huaheng.api.wcs.service.warecellAllocation.LocationAllocationService;
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.framework.web.service.ConfigService;
import com.huaheng.pc.sap.domain.Zarsh;
import com.huaheng.pc.sap.domain.Zarsi;
import com.huaheng.pc.sap.service.SapTaskLogService;
import com.huaheng.pc.sap.service.ZarshService;
import com.huaheng.pc.sap.service.ZarsiService;
import com.huaheng.pc.task.agvTask.domain.AgvTask;
import com.huaheng.pc.task.agvTask.service.AgvTaskService;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/***
 * 商片二楼包装 自动行架抓取
 * @author tongzonghao
 *
 */
@RestController
@RequestMapping("/API/WMS/v2")
public class TrussRobotController {

    @Resource
    private AgvTaskService agvTaskService;
    @Resource
    private ZarshService zarshService;
    @Resource
    private ZarsiService zarsiService;
    @Resource
    private AcsService acsService;
    @Resource
    private LocationAllocationService locationAllocationService;
    @Resource
    private ZarApiService zarApiService;
    @Resource
    private SapTaskLogService sapTaskLogService;

    @PostMapping("/pickContainerPosition")
    @ApiOperation("商片分拣物料")
    @ResponseBody
    @ApiLogger(apiName = "商片分拣物料", from = "acs")
    public AjaxResult pickContainerPosition(@RequestBody ContainerPositionDomain domain) {
        if(StringUtils.isNull(domain)){
            AjaxResult.error("请求内容未空");
        }
        String containerCode = domain.getContainerCode();
        String port = domain.getStationCode();
        if(StringUtils.isEmpty(containerCode)){
            return AjaxResult.error("容器号不能为空");
        }
        if(!"P2026".equals(port)){
            return AjaxResult.error("不是指定站台P2026");
        }
        //AGV任务
        AgvTask agvTask = agvTaskService.getOne(new LambdaQueryWrapper<AgvTask>()
                .eq(AgvTask::getPalletNo,containerCode)
                .eq(AgvTask::getState,60)
                .eq(AgvTask::getIsEmpty,1)
        );
        if(agvTask == null){
            return AjaxResult.error("未找到到位托盘");
        }

        String uniqueId = agvTask.getUniqueId();
        List<Zarsi> zarsis = zarsiService.getListByUniq(uniqueId);
        if(zarsis.isEmpty()){
            return AjaxResult.error("未找到库存记录");
        }
        List<Zarsi> unPickInventories = zarsis.stream().filter(e -> "X".equals(e.getUseFlag())).collect(Collectors.toList());
        JSONObject jsonObject = new JSONObject();
        if(unPickInventories.isEmpty()){
            acsService.busTaskFinish(agvTask);
            jsonObject.put("back",1);
            //生成回库任务
            int allInventories = zarsis.size();
            //分拣库存
            List<Zarsi> pickInventory = zarsis.stream().filter(e -> "XX".equals(e.getUseFlag())).collect(Collectors.toList());
            int pickInventories = pickInventory.size();
            //1.step 判断是否 是空托盘
            boolean isEmptyContainer = pickInventories == allInventories;
            //2.step 判断去缓存架 还是中间仓
            //获取缓存区空库位
            String locationCode = locationAllocationService.agvAllocation("DX", null, null, null);

            //SAP 仓库号
            String lgnum = null;
            String lgort = null;
            uniqueId = uniqueId+"BACK";
            Zarsh zarsh = zarshService.getZarshByUnique(agvTask.getUniqueId());
            if(locationCode == null){
                lgnum = "PPC";
                lgort = "SF22";
            }else{
                lgnum = "XBK";
                lgort = "SF21";
            }
            zarsh.setLocation(null);
            zarsh.setLgnum(lgnum);
            zarsh.setLgort(lgort);
            zarsh.setToPos(null);
            zarsh.setFromPos(null);
            zarsh.setUniqueId(uniqueId);
            zarsh.setMFlag("2");
            zarsh.setFromPos("2D10");
            zarsh.setCFlag(null);
            zarsh.setId(null);
            List<Zarsi> zarsiList = new ArrayList<>();
            ZarDomain zarDomain = new ZarDomain();
            if(!isEmptyContainer){
                zarsis.removeAll(pickInventory);
                for (Zarsi zarsi : zarsis) {
                    zarsi.setId(null);
                    zarsi.setUseFlag(null);
                    zarsi.setUniqueId(uniqueId);
                    zarsiList.add(zarsi);
                }
                zarDomain.setZarsh(zarsh);
                zarDomain.setZarsiList(zarsiList);
            }else{
                zarsh.setInKind(0);
                zarDomain.setZarsh(zarsh);
            }
            AjaxResult ajaxResult = zarApiService.saveSapData(zarDomain);
            sapTaskLogService.addSapTaskLog(zarDomain, ajaxResult.getMsg(), 0);

            return AjaxResult.success(jsonObject);
        }

        zarsis = zarsis.stream().sorted(Comparator.comparing(Zarsi::getPosnr)).collect(Collectors.toList());
        Zarsi zarsi = zarsis.stream().findFirst().get();

        jsonObject.put("back",0);
        jsonObject.put("rollNumber",zarsi.getCharg());
        jsonObject.put("position",zarsi.getPosnr());
        return AjaxResult.success(jsonObject);

    }

    @PostMapping("/leavedContainerPosition")
    @ApiOperation("离开托盘位置")
    @ResponseBody
    @ApiLogger(apiName = "离开托盘位置", from = "acs")
    public AjaxResult leavedContainerPosition(@RequestBody ContainerPositionDomain domain) {

        String containerCode = domain.getContainerCode();
        Integer position = domain.getPosition();
        String rollNumber = domain.getRollNumber();
        if(StringUtils.isEmpty(containerCode)){
            return AjaxResult.error("抓取容器号不能为空");
        }
        if(StringUtils.isNull(position)){
            return AjaxResult.error("抓取位置号不能为空");
        }
        if(StringUtils.isEmpty(rollNumber)){
            return AjaxResult.error("抓取批次不能为空");
        }

        AgvTask agvTask = agvTaskService.getOne(new LambdaQueryWrapper<AgvTask>()
                .eq(AgvTask::getPalletNo,containerCode)
                .eq(AgvTask::getState,60)
                .eq(AgvTask::getIsEmpty,1)
                .isNotNull(AgvTask::getUniqueId));
        if(agvTask == null){
            return AjaxResult.error("未找到到达容器");
        }
        String uniqueId = agvTask.getUniqueId();
        List<Zarsi> zarsis = zarsiService.getListByUniq(uniqueId);

        for (Zarsi zarsi : zarsis) {
            if(zarsi.getCharg().equals(rollNumber)){
                zarsi.setUseFlag("XX");
                zarsiService.updateById(zarsi);
                return AjaxResult.success(zarsi);
            }
        }
        return AjaxResult.success();

    }

}