AcsServiceImpl.java 9.35 KB
package com.huaheng.api.acs.service;

import com.alibaba.fastjson.JSON;
import com.huaheng.api.acs.domain.StateInfoUploadModel;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.ZoneAreaUtils;
import com.huaheng.common.utils.http.HttpUtils;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.domain.AjaxResultACS;
import com.huaheng.pc.config.address.domain.Address;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.config.agvStation.domain.AgvStation;
import com.huaheng.pc.config.agvStation.service.AgvStationService;
import com.huaheng.pc.config.container.domain.Container;
import com.huaheng.pc.config.container.service.ContainerService;
import com.huaheng.pc.config.points.domain.Points;
import com.huaheng.pc.system.user.domain.User;
import com.huaheng.pc.task.agvTask.controller.AgvTaskController;
import com.huaheng.pc.task.agvTask.domain.AgvTask;
import com.huaheng.pc.task.agvTask.service.AgvTaskService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

/**
 * @ClassName AcsServiceImpl
 * @Description TODO
 * @Author Administrator
 * @Date 2019/12/2615:38
 */
@Service
public class AcsServiceImpl implements AcsService {

    private static final Logger logger = LoggerFactory.getLogger(AcsServiceImpl.class);

    @Resource
    private ContainerService containerService;
    @Resource
    private AddressService addressService;
    @Resource
    private AgvTaskService agvTaskService;
    @Resource
    private AgvStationService agvStationService;


    @Override
    public AjaxResult StateInfoUpload(StateInfoUploadModel model) {
        return null;
    }


    private String getUrl(String zoneCode){
        Integer area=ZoneAreaUtils.getAreaByZoneCode(zoneCode);
        String url=addressService.selectAddress("AGV",ShiroUtils.getWarehouseCode(),area.toString());
        return url;
    }

    /**
     * 下发任务
     * wms-acs
     * @param model
     * @return
     */
    @Override
    public AjaxResult TaskAssign(AgvTask model) {
        String PalletNo=model.getPalletNo();
        if(StringUtils.isEmpty(PalletNo)){
            return AjaxResult.error("没有填写任务托盘号");
        }
        if(StringUtils.isEmpty(ShiroUtils.getLoginName())){
            model.setPlatform("wms");
        }else {
            model.setPlatform(ShiroUtils.getLoginName());
        }
        String url = this.getUrl(model.getZoneCode())+"TaskAssign";
        String JsonParam = JSON.toJSONString(model);
        logger.info("任务下发:{}",JsonParam);
        String result = HttpUtils.bodypost(url, JsonParam,QuantityConstant.WAREHOUSECODE);
        if(StringUtils.isEmpty(result)){
            throw new ServiceException("ACS接口地址错误或服务器连接不到或返回为空");
        }
        AjaxResultACS ajaxResultACS = JSON.parseObject(result, AjaxResultACS.class);
        if(!ajaxResultACS.state){
            return AjaxResult.error(ajaxResultACS.getMessage());
        }
        //任务类型是出库时,锁住站台
        if(model.getTaskType().equals("出库")){
            AgvStation agvStation=agvStationService.getAgvStationByPort(model.getFromPoint());
            if(agvStation!=null){
                agvStation.setLock(2);
                agvStationService.updateById(agvStation);
            }

        }
        return AjaxResult.success(ajaxResultACS.getMessage()).setData(ajaxResultACS.getData());
    }
    /**
     * 回传任务,修改任务状态
     * acs-wms
     * @param model
     * @return
     */
    @Override
    public AjaxResult TaskConfirm(AgvTask model) {
        Integer taskNo=model.getTaskNo();
        if(StringUtils.isNull(taskNo)){
            return AjaxResult.error("没有填写任务托盘号");
        }
        if(StringUtils.isEmpty(model.getAgvNo())){
            return AjaxResult.error("没有填写小车号");
        }
        if(StringUtils.isNull(model.getState())){
            return AjaxResult.error("没有填写任务状态");
        }
        AgvTask agvTask=agvTaskService.getAgvTaskByTaskNo(taskNo);
        if(agvTask==null){
            return AjaxResult.error("找不到该任务"+taskNo);
        }
        agvTask.setState(model.getState());
        agvTaskService.updateById(agvTask);
        //任务类型是出库时,锁住站台
        if(model.getTaskType().equals("出库")){
            AgvStation agvStation=agvStationService.getAgvStationByPort(model.getFromPoint());
            if(agvStation!=null){
                agvStation.setLock(1);
                agvStationService.updateById(agvStation);
            }
        }

        return AjaxResult.success(model);
    }

    /**
     * 取消任务
     * wms-acs
     * @param model
     * @return
     */
    @Override
    public AjaxResult TaskCancel(AgvTask model) {
        Integer taskNo=model.getTaskNo();
        if(StringUtils.isNull(taskNo)){
            return AjaxResult.error("没有填写任务号");
        }
        Map<String, Object> map = new HashMap<>();
        map.put("TaskNo", taskNo);
        map.put("Reason", model.getRemark());
        String JsonParam = JSON.toJSONString(map);
        String url= this.getUrl(model.getZoneCode())+"TaskCancel";
        String result = HttpUtils.bodypost(url, JsonParam,QuantityConstant.WAREHOUSECODE);
        AjaxResultACS ajaxResultACS = JSON.parseObject(result, AjaxResultACS.class);
        if(!ajaxResultACS.state){
            return AjaxResult.error(ajaxResultACS.getMessage());
        }
        //任务类型是出库时,锁住站台
        if(model.getTaskType().equals("出库")){
            AgvStation agvStation=agvStationService.getAgvStationByPort(model.getFromPoint());
            if(agvStation!=null){
                agvStation.setLock(1);
                agvStationService.updateById(agvStation);
            }
        }
        return AjaxResult.success(ajaxResultACS.getMessage()).setData(ajaxResultACS.getData());
    }

    /**
     * 人工完成接口
     * wms-acs
     * @param model
     * @return
     */
    @Override
    public AjaxResult TaskFinish(AgvTask model){
        if(StringUtils.isEmpty(model.getPalletNo())){
            return AjaxResult.error("没有填写任务托盘号");
        }
        Map<String, Object> map = new HashMap<>();
        //站台
        map.put("StName", model.getToPoint());
        map.put("PalletNo", model.getPalletNo());
        map.put("StState", 99);
        String JsonParam = JSON.toJSONString(map);
        String url= this.getUrl(model.getZoneCode())+"TaskFinish";
        String result = HttpUtils.bodypost(url, JsonParam,QuantityConstant.WAREHOUSECODE);
        AjaxResultACS ajaxResultACS = JSON.parseObject(result, AjaxResultACS.class);
        if(!ajaxResultACS.state){
            return AjaxResult.error(ajaxResultACS.getMessage());
        }
        //任务类型是出库时,锁住站台
        if(model.getTaskType().equals("出库")){
            AgvStation agvStation=agvStationService.getAgvStationByPort(model.getFromPoint());
            if(agvStation!=null){
                agvStation.setLock(1);
                agvStationService.updateById(agvStation);
            }
        }
        return AjaxResult.success(ajaxResultACS.getMessage()).setData(ajaxResultACS.getData());
    }


    /**
     *查询AGV 的状态信息
     *wms-acs
     * @param model
     * @return
     */
    @Override
    public AjaxResult AgvInfo(AgvTask model){
        if(StringUtils.isEmpty(model.getAgvNo())){
            return AjaxResult.error("没有填写小车号");
        }
        Map<String, Object> map = new HashMap<>();
        //小车,多个用,隔开
        map.put("AgvNos", model.getAgvNo());
        String JsonParam = JSON.toJSONString(map);
        String url= this.getUrl(model.getZoneCode())+"AgvInfo";
        String result = HttpUtils.bodypost(url, JsonParam,QuantityConstant.WAREHOUSECODE);
        AjaxResultACS ajaxResultACS = JSON.parseObject(result, AjaxResultACS.class);
        if(!ajaxResultACS.state){
            return AjaxResult.error(ajaxResultACS.getMessage());
        }
        return AjaxResult.success(ajaxResultACS.getMessage()).setData(ajaxResultACS.getData());
    }

    /**
     *继续任务
     * wms-acs
     * @param model
     * @return
     */
    @Override
    public AjaxResult ContinueTask(AgvTask model){
        if(StringUtils.isNull(model.getTaskNo())){
            return AjaxResult.error("没有填写任务号");
        }
        Map<String, Object> map = new HashMap<>();
        //站台
        map.put("TaskNo", model.getTaskNo());
        map.put("TaskStatus", model.getState());
        String JsonParam = JSON.toJSONString(map);
        String url= this.getUrl(model.getZoneCode())+"ContinueTask";
        String result = HttpUtils.bodypost(url, JsonParam,QuantityConstant.WAREHOUSECODE);
        AjaxResultACS ajaxResultACS = JSON.parseObject(result, AjaxResultACS.class);
        if(!ajaxResultACS.state){
            return AjaxResult.error(ajaxResultACS.getMessage());
        }
        return AjaxResult.success(ajaxResultACS.getMessage()).setData(ajaxResultACS.getData());
    }

}