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

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.acs.domain.AcsStatus;
import com.huaheng.api.acs.domain.AgvDomain;
import com.huaheng.api.acs.domain.StateInfoUploadModel;
import com.huaheng.common.constant.HttpConstant;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.constant.ScheduleConstants;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.common.utils.ZoneAreaUtils;
import com.huaheng.common.utils.bean.BeanUtils;
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.location.domain.Location;
import com.huaheng.pc.config.points.domain.Points;
import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
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 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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.huaheng.common.constant.QuantityConstant.TASK_TYPE_SORTINGSHIPMENT;

/**
 * @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;
    }


    @Override
    public AjaxResult createAGVTask(AgvTask agvTask) {
        AgvDomain agvDomain = new AgvDomain();
        BeanUtils.copyBeanProp(agvDomain, agvTask);
        agvDomain.setTaskNo(String.valueOf(agvTask.getId()));
        String url = getUrl(agvTask.getZoneCode());
        url=url+QuantityConstant.ADDRESS_AGV_TASK_ASSIGN;
        String jsonParam = JSON.toJSONString(agvDomain);
        String result = HttpUtils.bodypost(url, jsonParam, agvTask.getWarehouseCode());
        //String result = OkHttpUtils.bodypost(url, jsonParam, agvTask.getWarehouseCode());
        if (StringUtils.isEmpty(result)) {
            throw new ServiceException("接口地址错误或返回为空");
        }
        AjaxResultACS ajaxResultACS = JSON.parseObject(result, AjaxResultACS.class);
        if (ajaxResultACS!=null&&ajaxResultACS.hasErr()) {
            return AjaxResult.error(ajaxResultACS.getMessage());
        }
        return AjaxResult.success("创建AGV任务成功");
    }

    @Override
    public AjaxResult cancelAGVTask(AgvTask agvTask) {
        List<String> ids = new ArrayList<String>();
        ids.add(String.valueOf(agvTask.getId()));
        AgvDomain agvDomain = new AgvDomain();
        agvDomain.setTaskNo(String.valueOf(agvTask.getId()));
        String url = getUrl(agvTask.getZoneCode());
        url=url+QuantityConstant.ADDRESS_AGV_TASK_CANCEL;
        String jsonParam = JSON.toJSONString(agvDomain);
        String result = HttpUtils.bodypost(url, jsonParam, agvTask.getWarehouseCode());
        //String result = OkHttpUtils.bodypost(url, jsonParam,agvTask.getWarehouseCode());
        if (StringUtils.isEmpty(result)) {
            throw new ServiceException("接口地址错误或返回为空");
        }
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        if (ajaxResult.getCode() != HttpConstant.OK) {
            return AjaxResult.error(ajaxResult.getMsg());
        }
        return AjaxResult.success("取消AGV任务成功");
    }

    @Override
    public AjaxResult updateAGVTask(AgvTask agvTask) {
        AgvDomain agvDomain = new AgvDomain();
        agvDomain.setTaskNo(String.valueOf(agvTask.getId()));
        agvDomain.setPriority(agvTask.getPriority());
        String url = getUrl(agvTask.getZoneCode());
        url=url+QuantityConstant.ADDRESS_AGV_TASK_UPDATE;
        String jsonParam = JSON.toJSONString(agvDomain);
        String result = HttpUtils.bodypost(url, jsonParam, agvTask.getWarehouseCode());
        //String result = OkHttpUtils.bodypost(url, jsonParam, agvTask.getWarehouseCode());
        if (StringUtils.isEmpty(result)) {
            throw new ServiceException("接口地址错误或返回为空");
        }
        AjaxResult ajaxResult = JSON.parseObject(result, AjaxResult.class);
        if (ajaxResult.getCode() != HttpConstant.OK) {
            return AjaxResult.error(ajaxResult.getMsg());
        }
        return AjaxResult.success("更新AGV任务成功");
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public AjaxResult notifyAGVTask(String taskNo, String carNo, int status, String updateBy) {
        AgvTask agvTask = agvTaskService.getById(taskNo);
        if (agvTask == null) {
            return AjaxResult.error("没有找到对应AGV任务,任务号为" + taskNo);
        }
        if (agvTask.getStatus() < QuantityConstant.AGV_TASK_STATUS_RELEASE) {
            return AjaxResult.success("该任务状态还未下发,任务号为" + taskNo);
        }
        if (agvTask.getStatus() == status) {
            return AjaxResult.success("该任务状态已更新,任务号为" + taskNo);
        }
        agvTask.setStatus(status);
        agvTask.setCarNo(carNo);
        agvTask.setLastUpdatedBy(updateBy);
        boolean result = agvTaskService.updateById(agvTask);

        if (!result) {
            return AjaxResult.error("更新任务信息失败 ");
        }
        return AjaxResult.success("更新任务信息成功");
    }


    @Override
    public AjaxResult notifyAGVPort(AcsStatus acsStatus) {
        if (acsStatus == null) {
            return AjaxResult.error("更新AGV点位信息,传参信息为空");
        }
        if (StringUtils.isEmpty(acsStatus.getTaskNo())) {
            return AjaxResult.error("更新AGV点位信息,任务号为空");
        }
        if (StringUtils.isEmpty(acsStatus.getCarNo())) {
            return AjaxResult.error("更新AGV点位信息,车辆编号为空");
        }
        if (StringUtils.isEmpty(acsStatus.getOldPort())) {
            return AjaxResult.error("更新AGV点位信息,原来得出入口为空");
        }
        if (StringUtils.isEmpty(acsStatus.getNewPort())) {
            return AjaxResult.error("更新AGV点位信息,新得出入口为空");
        }
        AgvTask agvTask = agvTaskService.getById(acsStatus.getTaskNo());
        if (agvTask == null) {
            return AjaxResult.error("更新AGV点位信息,任务号为" + acsStatus.getTaskNo());
        }
        agvTask.setToPort(acsStatus.getNewPort());
        agvTask.setLastUpdatedBy(acsStatus.getCreatedBy());
        return AjaxResult.success("更新任务信息成功");
    }

}