package com.wms.controller; import com.alibaba.fastjson2.JSON; import com.wms.constants.enums.*; import com.wms.entity.app.ResponseEntity; import com.wms.entity.table.Location; import com.wms.entity.app.wcs.WmsReceiveTaskResultEntity; import com.wms.entity.table.Stock; import com.wms.entity.table.Task; import com.wms.service.LocationService; import com.wms.service.StockService; import com.wms.service.TaskService; import com.wms.utils.HttpUtils; import com.wms.utils.StringUtils; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Objects; /** * 这个类处理任务反馈信息 */ @Controller @CrossOrigin @RequiredArgsConstructor(onConstructor = @__(@Autowired)) @RequestMapping(value = "/wms/taskDeal") public class TaskDealController extends BaseController{ private final TaskService taskService; private final HttpServletRequest servletRequest; private final TaskController taskController; private final StockService stockService; private final LocationService locationService; /** * 更改任务状态 * * @param request 请求参数 * @return 结果 */ @PostMapping("/changeTaskStatus") @ResponseBody @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) public String changeTaskStatus(@RequestBody Task request) { logger.info("用户请求更改任务状态,用户名:{},ip地址:{}", request.getUserName(), HttpUtils.getIpAddr(servletRequest)); logger.info("请求详细:{}", JSON.toJSONString(request)); ResponseEntity response = new ResponseEntity(); try { if (request.getTaskStatus() == null) { logger.error("请选择任务状态"); response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("请选择任务状态"); return JSON.toJSONString(response); } // 更改后的任务状态 int taskStatusRequest = request.getTaskStatus(); int wcsTaskStatusAfter = 0; // 查询任务 Task taskQuery = new Task(); taskQuery.setTaskId(request.getTaskId()); List tasks = taskService.selTasks(taskQuery); if (tasks.size() == 0) { logger.error("当前任务不存在"); response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("当前任务不存在"); return JSON.toJSONString(response); } Task currentTask = tasks.get(0); String newDestination = ""; if (Objects.equals(currentTask.getTaskType(), TaskType.IN.getCode()) && StringUtils.isNotEmpty(request.getDestination()) && !Objects.equals(request.getDestination(), currentTask.getDestination())) {// 入库任务库位变更 if (taskStatusRequest != 0) { logger.error("更改库位必须重置任务"); response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("更改库位必须重置任务"); return JSON.toJSONString(response); } newDestination = request.getDestination(); } if (currentTask.getTaskId().startsWith("HK") && taskStatusRequest == 1) { logger.error("回库任务不允许取消"); response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("回库任务不允许取消"); return JSON.toJSONString(response); } String taskGroupId = currentTask.getTaskGroup(); if (taskStatusRequest == 0) {// 重置任务 logger.info("任务重置"); // 将当前taskGroup的所有任务都设置为新建状态 Task taskQuery2 = new Task(); taskQuery2.setTaskGroup(taskGroupId); List tasks2 = taskService.selTasks(taskQuery2); for (Task task2 : tasks2) { if (StringUtils.isNotEmpty(newDestination)) { task2.setDestination(newDestination); } task2.setTaskStatus(WmsTaskStatus.NEW.getCode()); task2.setUserName(request.getUserName()); taskService.executeTask(task2); } // 如果更新了任务,那么该库位信息也要变更 if (Objects.equals(currentTask.getTaskType(), TaskType.IN.getCode()) && StringUtils.isNotEmpty(newDestination)) { Location newLocationQuery = new Location(newDestination); List newLocations = locationService.selLocations(newLocationQuery); for (Location newLocation : newLocations) { newLocation.setVehicleId(currentTask.getVehicleNo()); newLocation.setLocationStatus(LocationStatus.EMPTY.getCode()); locationService.modifyLocation(newLocation); break; } } // WCS取消任务 } else if (taskStatusRequest == 1) {// 取消任务 logger.info("任务取消"); WmsReceiveTaskResultEntity sendToWmsRequest = new WmsReceiveTaskResultEntity(); sendToWmsRequest.setTaskId(taskGroupId); sendToWmsRequest.setTaskStatus(WcsTaskStatus.CANCEL.getCode()); sendToWmsRequest.setVehicleNo(currentTask.getVehicleNo()); sendToWmsRequest.setDestination(currentTask.getDestination()); taskController.receiveTaskResult(sendToWmsRequest); wcsTaskStatusAfter = 999; } else if (taskStatusRequest == 2) {// 完成任务 logger.info("任务完成"); WmsReceiveTaskResultEntity sendToWmsRequest = new WmsReceiveTaskResultEntity(); sendToWmsRequest.setTaskId(taskGroupId); sendToWmsRequest.setTaskStatus(WcsTaskStatus.FINISH.getCode()); sendToWmsRequest.setVehicleNo(currentTask.getVehicleNo()); sendToWmsRequest.setDestination(currentTask.getDestination()); taskController.receiveTaskResult(sendToWmsRequest); wcsTaskStatusAfter = 3; } // 向WCS反馈 WmsReceiveTaskResultEntity sendToWcsRequest = new WmsReceiveTaskResultEntity(); sendToWcsRequest.setTaskId(taskGroupId); sendToWcsRequest.setTaskStatus(wcsTaskStatusAfter); if (StringUtils.isNotEmpty(newDestination)) { sendToWcsRequest.setDestination(newDestination); } ResponseEntity response1; for (int i = 0; i < 5; i++) { response1 = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(UrlEnums.URL_WMS_TO_WCS_CHANGE_TASK.getValue(), JSON.toJSONString(sendToWcsRequest)), ResponseEntity.class); logger.info("向WCS反馈任务状态变更"); if (Objects.equals(response1.getCode(), 0)) {// 发送成功,则不再发送;不成功,一共尝试发送5次 break; } } logger.info("更新任务状态成功"); response.setCode(ResponseCode.OK.getCode()); response.setMessage("更新任务状态成功"); return JSON.toJSONString(response); } catch (Exception e) { // 回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); logger.error("发生异常{}", e.getMessage()); response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("发生异常" + e.getMessage()); return JSON.toJSONString(response); } } /** * 删除kate清单数据 * * @param request 请求参数 * @return 结果 */ @PostMapping("/deleteAllKateTasks") @ResponseBody @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) public String deleteAllKateTasks(@RequestBody Task request) { logger.info("用户请求删除配料任务清单,包括配件、合件、紧急件,用户名:{},ip地址:{}", request.getUserName(), HttpUtils.getIpAddr(servletRequest)); ResponseEntity response = new ResponseEntity(); try { // 有任务正在执行时不允许删除清单 Task taskQuery = new Task(); taskQuery.setTaskType(TaskType.OUT.getCode()); List tasks = taskService.selTasks(taskQuery); if (tasks.size() > 0) { for (Task task : tasks) { if (StringUtils.isNotEmpty(task.getKateTaskId())) {// 卡特任务未做完 logger.error("卡特任务未做完,不允许删除"); response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("卡特任务未做完,不允许删除"); return JSON.toJSONString(response); } } } stockService.resetStock(new Stock()); logger.info("删除任务清单成功"); response.setCode(ResponseCode.OK.getCode()); response.setMessage("删除任务清单成功"); return JSON.toJSONString(response); } catch (Exception e) { // 回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); logger.error("发生异常{}", e.getMessage()); response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("发生异常" + e.getMessage()); return JSON.toJSONString(response); } } }