AcsService.java 11.3 KB
package com.huaheng.api.ACS.service;

import com.alibaba.fastjson.JSON;
import com.huaheng.api.ACS.domain.AvgTaskModel;
import com.huaheng.api.ACS.domain.Points;
import com.huaheng.api.ACS.domain.StateInfoUploadModel;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.DataUtils;
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.domain.AjaxResult;
import com.huaheng.pc.inventory.inventory.domain.Inventory;
import com.huaheng.pc.inventory.inventory.service.IInventoryService;
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.service.IReceiptHeaderService;
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.service.IShipmentHeaderService;
import com.huaheng.pc.task.task.domain.Task;
import com.huaheng.pc.task.task.mapper.AgvStateInfoMapper;
import com.huaheng.pc.task.task.mapper.AgvTaskMapper;
import com.huaheng.pc.task.task.service.ITaskService;
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.ITaskDetailService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Service
public class AcsService {

    @Autowired
    private ITaskService taskService;
    @Autowired
    private ITaskDetailService taskDetailService;
    @Resource
    private AgvTaskMapper agvTaskMapper;
    @Resource
    private AgvStateInfoMapper agvStateInfoMapper;
    @Resource
    private PointsService pointsService;
    @Autowired
    private IReceiptHeaderService receiptHeaderService;
    @Autowired
    private IShipmentHeaderService shipmentHeaderService;
    @Autowired
    private IReceiptDetailService receiptDetailService;
    @Autowired
    private IShipmentDetailService shipmentDetailService;
    @Autowired
    private IInventoryService iInventoryService;


    final String interactionId = "6EAB7794-CFD7-449A-A754-FFDB98CE44C7";

    //
     public AjaxResult Task(String code){
         //查找下发任务
         ReceiptHeader receiptHeader=new ReceiptHeader();
         ReceiptDetail receiptDetail=new ReceiptDetail();
         ShipmentHeader shipmentHeader=new ShipmentHeader();
         ShipmentDetail shipmentDetail=new ShipmentDetail();
         int headerId=0;
         int detailId=0;
         String containerCode=null;
         Inventory inventory=new Inventory();
         receiptHeader.setCode(code);
         receiptHeader=receiptHeaderService.selectFirstEntity(receiptHeader);
         //判断code是否属于入库单,不属于则查找出库单
         if(receiptHeader==null){
             shipmentHeader.setCode(code);
             shipmentHeader=shipmentHeaderService.selectFirstEntity(shipmentHeader);
             shipmentDetail.setShipmentCode(code);
             shipmentDetail.setWarehouseId(ShiroUtils.getWarehouseId());
             //查找AGV的子单
             List<ShipmentDetail> shipmentDetails=shipmentDetailService.selectListAgvDetail(shipmentDetail);
             for(ShipmentDetail item:shipmentDetails){
                 inventory.setMaterialCode(item.getMaterialCode());
                 //查找物料对应的满盘的库存,没有则查找不满盘的库存
                 inventory.setContainerStatus("full");
                 Inventory inventorie=iInventoryService.selectFirstEntity(inventory);
                 if(inventorie==null){
                     inventory.setContainerStatus("some");
                     inventorie=iInventoryService.selectFirstEntity(inventory);
                     if(inventorie==null){
                         throw new ServiceException(item.getMaterialCode()+"没有库存,无法出库");
                     }
                 }
                 containerCode=inventorie.getContainerCode();


             }
         }else {
            receiptDetail.setReceiptCode(code);
            receiptDetail.setWarehouseCode(ShiroUtils.getWarehouseCode());
            List<ReceiptDetail> receiptDetails=receiptDetailService.selectListAgvEntity(receiptDetail);
            for(ReceiptDetail item: receiptDetails){

            }
         }

        return null;
     }

    /**
     * AGV 任务下发
     */

    public AjaxResult TaskAssign(AvgTaskModel model)
    {
//            AvgTaskModel model = new AvgTaskModel();
//            model.setInteractionId(interactionId);
//            model.setTaskHeaderId(100);
//            model.setTaskDetailId(200);
//            model.setTaskType("pick");
//            model.setShelfNo("H0001");
//            model.setStation("ws01");
//            model.setFromLocationNo("14");
//            model.setToLocationNo("54");
//            model.setOrientation("A");
            model.setPlatform("wms");
            String url = "http://172.16.30.48:8081/api/TaskAssign";
            String JsonParam = JSON.toJSONString(model);
            String result = HttpUtils.sendPost(url, JsonParam);
            AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
//            if(!ajaxResult.hasErr()){
//                points.setIsLocked(1);
//                pointsService.updatePoints(points);
//                agvTaskMapper.insertModel(model);
//            }
            return ajaxResult;
//        }
//        return AjaxResult.success("货架正在任务中");
    }

    /**
     * agv  putway任务下发
     *
     */
    public AjaxResult TaskAssigns(String code,String containerCode,String materialCode,String station)
    {
        //查找下发任务
        ReceiptHeader receiptHeader=new ReceiptHeader();
        ReceiptDetail receiptDetail=new ReceiptDetail();
        ShipmentHeader shipmentHeader=new ShipmentHeader();
        ShipmentDetail shipmentDetail=new ShipmentDetail();
        int headerId=0;
        int detailId=0;
        receiptHeader.setCode(code);
        receiptHeader=receiptHeaderService.selectFirstEntity(receiptHeader);

        //判断code是否属于入库单,不属于则查找出库单
        if(receiptHeader==null){
            shipmentHeader.setCode(code);
            shipmentHeader=shipmentHeaderService.selectFirstEntity(shipmentHeader);
            shipmentDetail.setShipmentCode(code);
            shipmentDetail.setWarehouseCode(ShiroUtils.getWarehouseCode());
            shipmentDetail.setMaterialCode(materialCode);
            shipmentDetail=shipmentDetailService.selectFirstEntity(shipmentDetail);
            headerId=shipmentHeader.getId();
            detailId=shipmentDetail.getId();
        }else {
            receiptDetail.setReceiptCode(code);
            receiptDetail.setMaterialCode(materialCode);
            receiptDetail.setWarehouseCode(ShiroUtils.getWarehouseCode());
            receiptDetail=receiptDetailService.selectFirstEntity(receiptDetail);
            headerId=receiptHeader.getId();
            detailId=shipmentDetail.getId();
        }

        //查找对应的货架
        String containCode=containerCode.substring(0,4);
        Points points=new Points();
        points=pointsService.selectEntity(code);

//        if(points.getIsLocked().equals(0)) {
        AvgTaskModel model = new AvgTaskModel();
        model.setInteractionId(interactionId);
        model.setTaskHeaderId(headerId);
        model.setTaskDetailId(detailId);
        model.setTaskType("putway");
        model.setShelfNo(points.getGoodsShelfNo());
        model.setStation(station);
        model.setFromLocationNo(points.getXpos().toString());
        model.setToLocationNo(points.getYpos().toString());
        if(containerCode.substring(5,7).equals("1")) {
            model.setOrientation("A");
        }else {
            model.setOrientation("C");
        }
        model.setPlatform("wms");
        String JsonParam = JSON.toJSONString(model);
        String url="http://172.16.30.242:8081/api/TaskAssign";
        String result = HttpUtils.sendPost(url, JsonParam);
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        if(!ajaxResult.hasErr()){
            agvTaskMapper.insertModel(model);
        }
        return ajaxResult;
    }
    /**
     * AGV 任务取消
     */
    public AjaxResult TaskCancel(String message)
    {
        Map<String, Object> map = new HashMap<>();
        map.put("interactionId", interactionId);
        map.put("reason", message);
        String JsonParam = JSON.toJSONString(map);
        String url= "http://172.16.30.242:8081/api/TaskCancel";
        String result = HttpUtils.sendPost(url, JsonParam);
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        return ajaxResult;
    }

    /**
     * AGV 信息查询
     */

    public AjaxResult StateInfoGET(String carNo)
    {
        Map<String, String> map = new HashMap<>();
        map.put("carNo", carNo);
        map.put("interactionId", interactionId);
        String JsonParam = JSON.toJSONString(map);
        String url= "http://172.16.30.242:8081/api/StateInfoGET";
        String result = HttpUtils.sendPost(url, JsonParam);
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        return ajaxResult;
    }

    /**
     * AGV 旋转方向
     */
    public AjaxResult TurnOriention(String carNo,String orientation)
    {
        Map<String, String> map = new HashMap<>();
        map.put("carNo", carNo);
        map.put("orientation", orientation);
        String JsonParam = JSON.toJSONString(map);
        String url= "http://172.16.30.242:8081/api/TurnOriention";
        String result = HttpUtils.sendPost(url, JsonParam);
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        return ajaxResult;
    }

    /**
     * AGV 任务回传
     */
    public AjaxResult TaskConfirm(@RequestBody AvgTaskModel model)
    {
        try {
            model.getTaskHeaderId();
            model.getTaskDetailId();
            model.getTaskType();
            AvgTaskModel avgTaskModel=agvTaskMapper.selectModel(model);
            if(avgTaskModel==null){
                agvTaskMapper.insertModel(model);
            }else {
            model.setId(avgTaskModel.getId());
            agvTaskMapper.updateModel(model);
            }

        }catch (Exception e){
            return AjaxResult.error("没有数据");
        }
        return AjaxResult.success(model);
    }

    /**
     * AGV 信息上传
     */
    public AjaxResult StateInfoUpload(@RequestBody StateInfoUploadModel model)
    {
        try {
            agvStateInfoMapper.insertModel(model);
        }catch (Exception e){
            return AjaxResult.error("没有数据");
        }
        return AjaxResult.success("收到");
    }
}