自动化立体仓库 - WMS系统
zyh
22 小时以前 3bf6f972604761c9ac59a2cb9ea01eeacaec2189
src/main/java/com/zy/asrs/controller/MesController.java
@@ -2,17 +2,32 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.AppAuth;
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.CanFin;
import com.zy.asrs.entity.Task;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.mes.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.mapper.CanFinMapper;
import com.zy.asrs.service.MesService;
import com.zy.asrs.service.MobileService;
import com.zy.asrs.service.TaskService;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Date;
import java.util.List;
@RestController
@Slf4j
@@ -20,6 +35,15 @@
    @Resource
    private MesService mesService;
    @Autowired
    private MobileService mobileService;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private CanFinMapper canFinMapper;
    private void auth(String appkey, Object obj, HttpServletRequest request) {
        log.info("{}接口被访问;appkey:{};请求数据:{}", request.getRequestURI(), appkey, JSON.toJSONString(obj));
@@ -29,12 +53,17 @@
    // 物料信息同步
    @PostMapping("/api/mes/synMatInfo")
    @AppAuth(memo = "物料信息同步")
    public MesReturn synMatInfo(@RequestHeader(required = false) String appkey,@RequestBody MesMatRecvForm param, HttpServletRequest request){
        auth(appkey, param, request);
//    public MesReturn synMatInfo(@RequestHeader(required = false) String appkey, @RequestBody List<MesMatRecvForm> params, HttpServletRequest request){
    public MesReturn synMatInfo(@RequestHeader(required = false) String appkey, @RequestBody MesMatRecvForm params, HttpServletRequest request){
        auth(appkey, params, request);
        MesReturn mesReturn = new MesReturn();
        try {
            mesReturn = mesService.matInfoAndInBound(param);
//            for (MesMatRecvForm param : params){
//                mesReturn = mesService.matInfoAndInBound(param);
//            }
                mesReturn = mesService.matInfoAndInBound(params);
        } catch (Exception e) {
            log.error(String.valueOf(e));
            mesReturn.setSuccess("2");
            mesReturn.setMessage("物料信息同步失败");
        }
@@ -50,7 +79,7 @@
        return mesReturn;
    }
    // 出库申请(叫料),装配库、滑块库
//    // 出库入库订单申请
    @PostMapping("/api/mes/callOutBoundOrder")
    public MesReturn callOutBoundOrder(@RequestBody MesCallOutApply param){
@@ -71,14 +100,12 @@
    // 入站允许
    @PostMapping("/api/mes/allowInStation")
    public MesReturn allowInStation(@RequestBody TransInOutStationAllow param){
        return mesService.allowInStation(param);
    }
    // 离站允许,装配库、滑块库
    @PostMapping("/api/mes/allowOutStation")
    public MesReturn allowOutStation(@RequestBody TransInOutStationAllow param){
        return mesService.allowOutStation(param);
    }
@@ -120,4 +147,143 @@
        return mesService.queryInventory(itemno,orderNo);
    }
    /**
     * MES调用PDA的AGV订单入库接口
     * @param combParam
     * @return
     */
    @RequestMapping("/comb/auth")
    @ManagerAuth(memo = "组托")
    public R comb(@RequestBody CombParam combParam){
        log.info("=============== MES下发组托订单 ===============");
        log.info("{}", combParam);
        log.info("=============== MES下发组托订单 ===============");
        if (combParam.getUserId() != null && !combParam.getUserId().equals(null)){
            mobileService.comb(combParam, combParam.getUserId());
        }else {
            mobileService.comb(combParam, getUserId());
        }
        return R.ok("组托成功");
    }
    /**
     * MES调用PDA的补空板
     *
     * @param locNo 目标站点
     * @param size  托盘大小 1:小托盘  2:大托盘
     * @return
     */
    @PostMapping("/callEmptyBinOutBound")
    public synchronized R callEmptyBinOutBound(@RequestParam(required = false) String locNo
            , @RequestParam(required = false) String size
            , @RequestParam(required = false) String palletFormat
            , @RequestParam(required = false) String agvTaskNo) {
        if (Cools.isEmpty(locNo) || Cools.isEmpty(size)) {
            return R.error("站点或者大小不能为空");
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("memo", locNo));
        if (wrkMast != null) {
            return R.error("该站点="+locNo+"已经有空板出库任务,为了不堵塞堆垛机接驳站点,禁止下发多个空板出库任务");
        }
        return mobileService.callEmptyBinOutBound(locNo, size, palletFormat, agvTaskNo, 9995L);
    }
    /**
     * 空板回库或者拣料回库
     *
     * @param sourceStaNo
     * @param staNo
     * @return
     */
    @RequestMapping("/AGVStartReturn")
    public synchronized R AGVStartReturn(@RequestParam(required = false) String sourceStaNo
            , @RequestParam(required = false) String staNo
            , @RequestParam(required = false) String taskNo) {
        if (Cools.isEmpty(sourceStaNo) || Cools.isEmpty(staNo)) {
            return R.error("源站点和托盘码不能为空");
        }
        List<Task> tasks = taskService.selectList(new EntityWrapper<Task>().eq("source_sta_no", sourceStaNo).eq("barcode", staNo));
        if (tasks.size() > 0) {
            return R.error("该托盘="+staNo+"已经存在搬运任务,请不要重复下发");
        }
        String barcode = staNo.substring(0,1);
        if(barcode.equals("3")){
            taskNo = "307";
        }else if(barcode.equals("4")){
            taskNo = "402";
        }else if(barcode.equals("5")){
            taskNo = "401";
        }
        R r = R.ok();
        //生成AGV搬运出库任务
        // 保存工作档
        Task task = new Task();
        Date date = new Date();
        String TaskNo = 555555 + "aa" + date.getTime();
        task.setWrkNo((int) date.getTime())
                .setTaskNo(TaskNo)
                .setIoTime(date)
                .setWrkSts(301L) // 工作状态:301.任务下发
                .setIoType(3) // 入出库状态: 3.站到站  4.站到区域
                .setTaskType("agv")
                .setIoPri(10D)
                .setFullPlt("Y") // 满板:Y
                .setPicking("N") // 拣料
                .setExitMk("N")// 退出
                .setStaNo(taskNo)
                .setSourceStaNo(sourceStaNo)//agv取货站点
                .setEmptyMk("N")// 空板
                .setBarcode(staNo)// 托盘码
                .setLinkMis("N")
                .setAppeUser(9945L)
                .setAppeTime(date)
                .setModiUser(9945L)
                .setModiTime(date);
        if (taskService.insert(task)) {
            Date now = new Date();
            CanFin canFin = new CanFin();
            canFin.setAgvType("agv-in");
            canFin.setInNo(TaskNo);
            canFin.setApplyTime(now);
            canFinMapper.insert(canFin);
        }else{
            throw new CoolException("保存工作档失败");
        }
        return r;
    }
    @PostMapping("/api/mes/pauseAGV")
    public MesReturn AGVPause(@RequestBody JSONObject param){
        MesReturn mesReturn = new MesReturn();
        String type = "STOP";
        if (param.getString("type") != null){
            type = "START";
        }
        switch (mesService.AGVPause(param, type)){
            case 1:
                mesReturn.setSuccess("1");
                mesReturn.setMessage("AGV暂停或启动成功");
                return mesReturn;
            case 2:
                mesReturn.setSuccess("1");
                mesReturn.setMessage("海康AGV暂停或启动成功");
                return mesReturn;
            case 3:
                mesReturn.setSuccess("1");
                mesReturn.setMessage("华晓AGV暂停或启动成功");
                return mesReturn;
            case 4:
                mesReturn.setSuccess("2");
                mesReturn.setMessage("AGV暂停或启动调用失败");
                return mesReturn;
        }
        mesReturn.setSuccess("2");
        mesReturn.setMessage("AGV暂停或启动调用失败");
        return mesReturn;
    }
}