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

import com.alibaba.fastjson.JSON;
import com.huaheng.api.acs.domain.AcsStatus;
import com.huaheng.api.acs.domain.StateInfoUploadModel;
import com.huaheng.api.wcs.domain.TaskFinishDomain;
import com.huaheng.api.wcs.service.taskFinish.TaskFinishService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
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.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 com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.Date;
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 TaskHeaderService taskHeaderService;
    @Resource
    private TaskFinishService taskFinishService;

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


    private String getUrl(String zoneCode){
        String url=addressService.selectAddress("AGV",ShiroUtils.getWarehouseCode(),zoneCode);
        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){
            model.setRemark(ajaxResultACS.getMessage());
            agvTaskService.updateById(model);
            return AjaxResult.error(ajaxResultACS.getMessage());
        }
        //下发成功
        model.setState(10);
        agvTaskService.updateById(model);
        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());
        agvTask.setLastUpdatedBy("acs");
        agvTaskService.updateById(agvTask);

        return AjaxResult.success(agvTask);
    }

    /**
     * 取消任务
     * 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());
        }
        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());
        }
        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());
    }


    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult notifyAGVTask(AcsStatus acsStatus) {
        if(acsStatus == null) {
            return AjaxResult.error("更新AGV状态信息为空");
        }
        String taskNo = acsStatus.getTaskNo();
        String carNo = acsStatus.getAgvNo();
        int status = acsStatus.getState();
        if(StringUtils.isNull(acsStatus.getTaskNo()) ) {
            return AjaxResult.error("更新AGV状态,任务号为空");
        }
        if(status == 0) {
            return AjaxResult.error("更新AGV状态,状态信息为空");
        }
        String updateBy = "acs";
        AgvTask agvTask = agvTaskService.getById(taskNo);
        if (agvTask == null) {
            return AjaxResult.error("没有找到对应AGV任务,任务号为" + taskNo);
        }
        if (agvTask.getState() < QuantityConstant.AGV_TASK_STATUS_RELEASE) {
            return AjaxResult.success("该任务状态还未下发,任务号为" + taskNo);
        }
        if (agvTask.getState() == status) {
            return AjaxResult.success("该任务状态已更新,任务号为" + taskNo);
        }
        agvTask.setState(status);
        agvTask.setAgvNo(carNo);
        agvTask.setLastUpdatedBy(updateBy);
        agvTask.setLocationCode(acsStatus.getLocationCode());
        boolean result = agvTaskService.updateById(agvTask);

        if (!result) {
            return AjaxResult.error("更新AGV任务状态信息失败 ");
        }
        TaskHeader task=taskHeaderService.getById(agvTask.getTaskId());
        if(task!=null&&StringUtils.isNotEmpty(acsStatus.getLocationCode())){
            //当acs返回库位的时候任务库位改成acs返回的
            task.setToLocation(acsStatus.getLocationCode());
            taskHeaderService.updateById(task);
        }
        if(task!=null&&task.getSendTo().equals("AGV")){
            //当任务时AGV任务时,调用通用完成任务接口
            TaskFinishDomain taskFinishDomain=new TaskFinishDomain();
            taskFinishDomain.setTaskNo(task.getId().toString());
            AjaxResult ajaxResult = taskFinishService.completeTaskByWCS(taskFinishDomain);
            return ajaxResult;
        }
        return AjaxResult.success("更新任务信息成功");
    }
}