package com.ruoyi.api.controller; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.ruoyi.api.domain.ErpProduct; import com.ruoyi.api.domain.ReMaterialParam; import com.ruoyi.api.domain.RequestEnter; import com.ruoyi.api.domain.WmsJobRequest; import com.ruoyi.api.service.IToWmsService; import com.ruoyi.bas.BasProduct.domain.BasProduct; import com.ruoyi.bas.BasProduct.service.IBasProductService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.device.agv.domain.AgvContainerTask; import com.ruoyi.device.agv.service.IAgvContainerTaskService; import com.ruoyi.job.mydojob.domain.MydoJob; import com.ruoyi.job.mydojob.mapper.MydoJobMapper; import com.ruoyi.log.domain.RequestLog; import com.ruoyi.log.service.IRequestLogService; import com.ruoyi.out.outStockout.domain.OutStockoutVo; import com.ruoyi.out.outStockout.service.IOutStockoutService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.*; /** * 作业统计 Controller */ @RestController @RequestMapping("/api2wms") public class ToWmsApiController { @Autowired private IToWmsService toWmsService; @Autowired private IRequestLogService requestLogService; @Autowired private IOutStockoutService outStockoutService; @Autowired private IBasProductService basProductService; @Autowired private MydoJobMapper mapper; @Autowired private IAgvContainerTaskService agvContainerTaskService; /** * 入库请求生成作业 */ @PostMapping("/requestEnterByTrayCode") public AjaxResult requestEnterByTrayCode(@RequestBody RequestEnter requestEnter) { AjaxResult ajaxResult = toWmsService.requestEnterByTrayCode(requestEnter); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(requestEnter), "入库任务创建请求", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } // 入库分货位 @PostMapping("/sendCargoSpace") public AjaxResult sendCargoSpace(@RequestBody RequestEnter requestEnter) { AjaxResult ajaxResult = toWmsService.requestEnterByTaskNo(requestEnter); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(requestEnter), "入库请求分配货位", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } // 出库到位更新LED显示屏 @PostMapping("/updateLed") public AjaxResult updateLed(@RequestBody RequestEnter requestEnter) { HashMap map = new HashMap<>(); map.put("v_task_no", requestEnter.getTaskNo()); map.put("v_code", requestEnter.getDeviceCode()); mapper.updateLed(map); return AjaxResult.success(); } // 线体报警更新报警信息 @PostMapping("/updateLedError") public AjaxResult updateLedError(@RequestBody RequestEnter requestEnter) { HashMap map = new HashMap<>(); map.put("v_code", requestEnter.getDeviceCode()); map.put("v_error_code", requestEnter.getErrorCode()); mapper.updateLedError(map); return AjaxResult.success(); } /** * 请求补码作业 */ @RequestMapping("/requestByNoTrayCode") public AjaxResult requestByNoTrayCode(@RequestBody RequestEnter requestEnter) { AjaxResult ajaxResult = toWmsService.selectMydoJobByEntranceId(requestEnter); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(requestEnter), "请求补码作业", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 获取入库作业 */ @RequestMapping("/requestEnterByTrayCodeAndEntranceId") public AjaxResult requestEnterByTrayCodeAndEntranceId(@RequestBody RequestEnter requestEnter) { AjaxResult ajaxResult = toWmsService.requestEnterByTrayCodeAndEntranceId(requestEnter); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(requestEnter), "获取入库作业", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 入库、出库 任务完成回传 * Map * "wmsType": "任务类型" 1-入库 2-出库 3-agv搬运, * taskNo:出库 入库任务号 * trayCode:托盘码 * positionCode1:起点 * positionCode2:终点 * containerCode:容器编码 */ @PostMapping("/jobFinish") public AjaxResult jobFinish(@RequestBody WmsJobRequest wmsJobRequest) { AjaxResult ajaxResult = toWmsService.jobFinish(wmsJobRequest); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(wmsJobRequest), "jobFinish", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 放货有货,重新分配货位 */ @PostMapping("/reAssign") public AjaxResult reAssign(@RequestBody ReMaterialParam reMaterialParam) { AjaxResult ajaxResult = toWmsService.reAssign(reMaterialParam); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(reMaterialParam), "reAssign", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 取货无货,重新分配物料 */ @PostMapping("/reMaterial") public AjaxResult reMaterial(@RequestBody ReMaterialParam reMaterialParam) { AjaxResult ajaxResult = toWmsService.reMaterial(reMaterialParam); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(reMaterialParam), "reMaterial", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 出库单据保存 * * @param outStockoutVo * @return */ @Log(title = "出库主单保存", businessType = BusinessType.OTHER) @PostMapping("/saveOutBill") @ResponseBody public AjaxResult saveBill(@RequestBody OutStockoutVo outStockoutVo) { String stockOutId = outStockoutService.saveBill(outStockoutVo); AjaxResult ajaxResult = AjaxResult.success(stockOutId); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(outStockoutVo), "出库单据保存", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 接收物料 */ @Log(title = "接收物料", businessType = BusinessType.INSERT) @PutMapping("/receiveProduct") public AjaxResult receiveProduct(@RequestBody ErpProduct erpProduct) { AjaxResult ajaxResult = toWmsService.receiveProduct(erpProduct); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(erpProduct), "接收物料", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 修改物料管理 */ @Log(title = "修改物料管理", businessType = BusinessType.UPDATE) @PutMapping("/updateProduct") public AjaxResult updateProduct(@RequestBody ErpProduct erpProduct) { AjaxResult ajaxResult = toWmsService.updateProduct(erpProduct); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(erpProduct), "修改物料管理", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 作废物料 */ @Log(title = "作废物料", businessType = BusinessType.UPDATE) @PutMapping("/InvalidProduct") public AjaxResult InvalidProduct(@RequestBody ErpProduct erpProduct) { AjaxResult ajaxResult = toWmsService.InvalidProduct(erpProduct); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(erpProduct), "作废物料", ajaxResult); requestLogService.insertRequestLog(requestLog); return ajaxResult; } /** * 请求AGV执行队列 */ // @Log(title = "请求未下发的AGV执行队列", businessType = BusinessType.OTHER) @RequestMapping("/queryAgvQuene") public AjaxResult queryAgvQuene() { AgvContainerTask agvContainerTask = new AgvContainerTask(); agvContainerTask.setStatus("0"); List agvContainerTasks = agvContainerTaskService.selectAgvContainerTaskList(agvContainerTask); RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(""), "请求未下发的AGV执行队列", AjaxResult.success(agvContainerTasks)); requestLogService.insertRequestLog(requestLog); if (agvContainerTasks != null && agvContainerTasks.size() > 0) { for (AgvContainerTask containerTask : agvContainerTasks) { containerTask.setStatus("1"); agvContainerTaskService.updateAgvContainerTask(containerTask); } return AjaxResult.success(agvContainerTasks.get(0)); } else { return AjaxResult.error("无队列"); } } /** * 请求AGV执行队列 */ @Log(title = "完成AGV执行队列", businessType = BusinessType.UPDATE) @RequestMapping("/finishAgvQuene") public AjaxResult finishAgvQuene(@RequestBody JSONObject jsonObject) { String order = (String) jsonObject.get("order"); agvContainerTaskService.deleteAgvJobByOrder(order); return AjaxResult.success(); } @Log(title = "自动生成Agv搬运队列到线边", businessType = BusinessType.INSERT) @PutMapping("/insertAgvQuene") public AjaxResult insertAgvQuene(@RequestBody WmsJobRequest wmsJobRequest) { String taskNo = wmsJobRequest.getTaskNo();// 到位任务号 String code = wmsJobRequest.getCode();// 线体号 AgvContainerTask agvContainerTask = new AgvContainerTask(); agvContainerTask.setTaskNo(taskNo); List agvContainerTasks = agvContainerTaskService.selectAgvContainerTaskList(agvContainerTask); if (Objects.isNull(agvContainerTasks)) { MydoJob mydoJob = new MydoJob(); mydoJob.setTaskNo(taskNo); List mydoJobs = mapper.selectMydoJobList(mydoJob); AgvContainerTask agvContainerTask1 = new AgvContainerTask(); agvContainerTask1.setContainer(UUID.randomUUID().toString()); agvContainerTask1.setTaskNo(taskNo); agvContainerTask1.setStartPoint(code); agvContainerTask1.setEndPoint(mydoJobs.get(0).getEndPoint());//TODO 需要修改 agvContainerTask1.setSpare2(mydoJobs.get(0).getTrayCode()); // 10缓存区到线边 11立库到线边 12 立库到缓存区 13 缓存到立库 agvContainerTask1.setSpare1("11"); agvContainerTask1.setStatus("0"); agvContainerTaskService.insertAgvContainerTask(agvContainerTask1); } RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(wmsJobRequest), "自动生成Agv搬运队列到线边", AjaxResult.success()); requestLogService.insertRequestLog(requestLog); return AjaxResult.success(); } }