AssignTaskController.java 7.45 KB
package com.huaheng.api.wcs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.wcs.domain.AssignTask;
import com.huaheng.api.wcs.domain.WmsTask;
import com.huaheng.api.wcs.service.assignTask.AssignTaskService;
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.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.domain.RetCode;
import com.huaheng.pc.config.address.service.AddressService;
import com.huaheng.pc.config.station.domain.Station;
import com.huaheng.pc.config.station.service.StationService;
import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService;
import com.huaheng.pc.system.config.service.IConfigService;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.spi.http.HttpContext;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**任务完成
 * wcs向wms传递数据
 * @author ricard
 * @date   2019/10/11
 *
 */

@RestController
@RequestMapping("/API/WMS/v2")
public class AssignTaskController extends BaseController {
    @Resource
    private AssignTaskService assignTaskService;
    @Resource
    private InventoryHeaderService inventoryHeaderService;
    @Resource
    private AddressService addressService;
    @Resource
    private IConfigService iConfigService;
    @Resource
    private StationService stationService;
    @Resource
    private IConfigService configService;

    @PostMapping("/assignTask")
    @ApiOperation(value = "cwms任务下发", notes = "cwms任务下发")
    @ApiLogger(apiName = "cwms任务下发")
    @ResponseBody
    public AjaxResult assignTask(@RequestBody AssignTask assignTask)    {
        //System.out.println("调用接口的ip:"+request.getRemoteAddr());
        //String ip=configService.selectConfigByKey(QuantityConstant.APIIPLIMIT);
        String ipflag=configService.selectConfigByKey(QuantityConstant.APIIPLIMITBUTTON);
        AjaxResult ajaxResult=null;
        if (ipflag.equals("1")){
            //if(ip.equals(request.getRemoteAddr())){
                ajaxResult=assignTaskService.assignTaskByWIS(assignTask);
           // }else{
               // return AjaxResult.error("此ip访问受限制!");
           // }
        }else{
              ajaxResult=assignTaskService.assignTaskByWIS(assignTask);
        }
        return ajaxResult;
    }


    @Log(title = "站台呼叫空托盘", action = BusinessType.INSERT)
    @PostMapping("/emptyContainerOutWcs")
    @ApiOperation("站台呼叫空托盘")
    @ResponseBody
    public AjaxResult emptyContainerOutWcs(){
        String containercode="";
        AjaxResult result=inventoryHeaderService.emptyContainerOutWcs(containercode);
        return result;
    }

    @Log(title = "空托盘校验", action = BusinessType.INSERT)
    @PostMapping("/wmsPltCheck")
    @ApiOperation("空托盘校验")
    @ResponseBody
    public AjaxResult wmsPltCheck(@RequestBody WmsTask wmsTask){
        wmsTask.setReqID("123");
        wmsTask.setRequestTime("2021.11.18");
        String JsonParam = JSON.toJSONString(wmsTask);
        System.out.println(JsonParam);
        String url="";
        String result = HttpUtils.bodypost(url, JsonParam);
        if (StringUtils.isEmpty(result)) {
            throw new ServiceException("接口地址错误或返回为空");
        }
        return null;
    }

    @PostMapping("/StationInfos")
    @ResponseBody
    public AjaxResult StationInfos() {
        JSONObject json=new JSONObject();
        String port []= {"P1001","P1004","P1005","P1008"};
        json.put("stations",port);
        String url="http://10.20.137.43:8124/api/WCSTask/StationInfos";
        //String url = addressService.selectAddress(QuantityConstant.ADDRESS_WCS_TASK_ASSIGN, warehouseCode, area);
        String result = HttpUtils.bodypost(url, json.toJSONString());
        json=JSONObject.parseObject(result);
        String data=json.getString("data");
        List<JSONObject>jsonlist=JSON.parseArray(data,JSONObject.class);
        for(JSONObject ob:jsonlist){
            System.out.println(ob.getString("station"));
            System.out.println(ob.getString("state"));
            if(ob.getString("state")=="0"){
                result=ob.getString("station");
                break;
            }
        }

        return  AjaxResult.success(result);
    }

    @PostMapping("/getTaskNo")
    @ResponseBody
    public AjaxResult getTaskNo(@RequestBody WmsTask wmsTask){
       String code= getPort(wmsTask.getTaskNo(),wmsTask.getContainerCode(), wmsTask.getTaskStatus());
        JSONObject data=new JSONObject();
        data.put("code",code);
        data.put("message","分拣任务下发成功");
        return AjaxResult.success(data);
    }


    public String getOptimalPort (String port []){
        JSONObject json=new JSONObject();
        json.put("stations",port);
        String station="";
        String url = addressService.selectAddress(QuantityConstant.ADDRESS_WCS_STATION_INFOS, "ZH0001", "1");
        try {
            String result = HttpUtils.bodypost(url, json.toJSONString());
            json=JSONObject.parseObject(result);
            String data=json.getString("data");
            if(StringUtils.isEmpty(data)){
                station="";
            }else{
                List<JSONObject>jsonlist= JSON.parseArray(data,JSONObject.class);
                for(JSONObject ob:jsonlist){
                    if(ob.getString("state").equals("0")){
                        station=ob.getString("station");
                        break;            }
                }
            }
        }catch(Exception e){
            e.printStackTrace();
            station="";
        }
        return station;
    }




    /**
     * 方法描述   根据区域,类型,巷道确认获取最优出站口
     * @param: [area, type, roadway]
     * @return: java.lang.String
     * @author: chenao
     * @date: 2021/11/27
     */
    public String getPort(String area,String type,Integer roadway){
        String port="";
        if (roadway==1){
            roadway=2;
        }else{
            roadway=1;
        }
        LambdaQueryWrapper<Station> lambdaQueryWrapper = Wrappers.lambdaQuery();
        lambdaQueryWrapper.eq(Station::getStationGroup, area)
                .eq(Station::getType,type)
                .ne(roadway!=0,Station::getRoadway,roadway);
        List<Station> list = stationService.list(lambdaQueryWrapper);
        String ports []= new String[list.size()];
        int i=0;
        for (Station sa:list){
            ports[i]=sa.getCode();
            i++;
        }
        port=getOptimalPort(ports);
        if(StringUtils.isEmpty(port)){//当没有空闲库位时,默认给查询的第一个库位
            int index = (int) (Math.random() * list.size());
            port = list.get(index).getCode();
        }
        return port;
    }
}