| | |
| | | |
| | | 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 |
| | |
| | | |
| | | @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)); |
| | |
| | | // 物料信息同步 |
| | | @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("物料信息同步失败"); |
| | | } |
| | | return mesReturn; |
| | | } |
| | | |
| | | // // 出库申请 |
| | | // @PostMapping("/api/mes/outBoundOrder") |
| | | // public MesReturn outBoundOrder(@RequestBody MesOutApply param){ |
| | | // |
| | | // MesReturn mesReturn = new MesReturn(); |
| | | // mesReturn.setSuccess(mesService.outBoundOrder(param) == 1 ? "1" : "2"); |
| | | // return mesReturn; |
| | | // } |
| | | // 出库申请 |
| | | @PostMapping("/api/mes/outBoundOrder") |
| | | public MesReturn outBoundOrder(@RequestBody MesOutApply param){ |
| | | |
| | | MesReturn mesReturn = new MesReturn(); |
| | | mesReturn.setSuccess(mesService.outBoundOrder(param) == 1 ? "1" : "2"); |
| | | return mesReturn; |
| | | } |
| | | |
| | | // // 出库入库订单申请 |
| | | @PostMapping("/api/mes/callOutBoundOrder") |
| | |
| | | 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; |
| | | } |
| | | } |