zy-asrs-admin/src/views/task/task/index.vue
@@ -401,6 +401,9 @@ <a-button v-if="record.taskType == 103" type="link" primary @click="handlePick(record)">{{ formatMessage('page.pick', '拣料') }}</a-button> <a-button v-if="record.taskType == 107 && record.taskSts == 198" type="link" primary @click="handlePick(record)">{{ formatMessage('page.pick', '盘点') }}</a-button> <a-button type="link" primary @click="handleComplete(record)">{{ formatMessage('page.complete', '完成') }}</a-button> <a-button type="link" danger @click="handleCancel(record)">{{ formatMessage('page.cancel', '取消') zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/schedule/ScheduleJobs.java
@@ -15,10 +15,13 @@ import com.zy.asrs.wms.apis.wcs.entity.request.TaskDescribe; import com.zy.asrs.wms.apis.wcs.entity.request.TaskParam; import com.zy.asrs.wms.apis.wcs.entity.response.CommonReponse; import com.zy.asrs.wms.asrs.entity.Task; import com.zy.asrs.wms.asrs.entity.*; import com.zy.asrs.wms.asrs.entity.dto.OrderOutMergeDto; import com.zy.asrs.wms.asrs.entity.enums.LocStsType; import com.zy.asrs.wms.asrs.entity.enums.TaskStsType; import com.zy.asrs.wms.asrs.service.TaskService; import com.zy.asrs.wms.asrs.service.WorkService; import com.zy.asrs.wms.asrs.service.*; import com.zy.asrs.wms.asrs.service.impl.LocServiceImpl; import com.zy.asrs.wms.utils.Utils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; @@ -49,9 +52,22 @@ private RestTemplate restTemplate; @Autowired private WorkService workService; @Resource private SystemProperties properties; @Autowired private LocServiceImpl locService; @Autowired private LocDetlService locDetlService; @Autowired private TaskDetlService taskDetlService; @Autowired private LocDetlFieldService locDetlFieldService; @Autowired private TaskDetlFieldService taskDetlFieldService; @Autowired private CacheSiteService cacheSiteService; @Autowired private OperationPortService operationPortService; /*** * 入库任务---通知ESS输送线流动 @@ -98,6 +114,78 @@ } }); } /** * 生成自动盘点任务 */ @Scheduled(cron = "0/50 * * * * ?") @Transactional(rollbackFor = Exception.class) public void genCheckTask() { Loc locs = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocStsId, LocStsType.F.val()).orderByAsc(Loc::getLocNo).last("limit 1")); if (Objects.isNull(locs)) { return; } List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().select(Task::getId).eq(Task::getTaskType, 107L)); if (!tasks.isEmpty() && tasks.size() >= 4) { //默认生成四个盘点任务,超过4个,停止生成盘点任务; return; } OperationPort operationPort = operationPortService.getOne(new LambdaQueryWrapper<OperationPort>().last("ORDER BY RAND() LIMIT 1;")); if (operationPort == null || Objects.isNull(operationPort)) { throw new CoolException("作业口不存在"); } Task task = new Task(); task.setTaskNo(workService.generateTaskNo(TaskStsType.GENERATE_OUT.id)); task.setTaskSts(TaskStsType.GENERATE_OUT.id); task.setTaskType(107L); //默认107盘点任务,盘点任务没有,按103处理 task.setIoPri(workService.generateIoPri(TaskStsType.GENERATE_OUT.id)); task.setOriginLoc(locs.getLocNo()); task.setTargetSite(operationPort.getFlag()); task.setBarcode(locs.getBarcode()); if (!taskService.save(task)) { throw new CoolException("任务生成失败!!"); } List<LocDetl> locDetls = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocId, locs.getId())); if (locDetls.isEmpty()) { throw new CoolException("明细不存在!!"); } for (LocDetl locDetl : locDetls) { TaskDetl taskDetl = new TaskDetl(); taskDetl.sync(locDetl); taskDetl.setId(null); taskDetl.setTaskId(task.getId()); taskDetl.setTaskNo(task.getTaskNo()); taskDetl.setAnfme(locDetl.getAnfme()); taskDetl.setStock(locDetl.getAnfme()); taskDetl.setWaveId(null); taskDetl.setWaveNo(null); taskDetl.setOrderId(null); taskDetl.setOrderNo(null); if (!taskDetlService.save(taskDetl)) { throw new CoolException("保存工作档明细失败"); } List<LocDetlField> locDetlFields = locDetlFieldService.list(new LambdaQueryWrapper<LocDetlField>().eq(LocDetlField::getDetlId, locDetl.getId())); for (LocDetlField locDetlField : locDetlFields) { TaskDetlField taskDetlField = new TaskDetlField(); taskDetlField.sync(locDetlField); taskDetlField.setId(null); taskDetlField.setDetlId(taskDetl.getId()); if (!taskDetlFieldService.save(taskDetlField)) { throw new CoolException("明细扩展生成失败"); } } } if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getId, locs.getId()) .set(Loc::getUpdateTime, new Date()) .set(Loc::getLocStsId, LocStsType.R.val()))) { throw new CoolException("库位状态修改失败!!"); } } @@ -211,7 +299,7 @@ // } else { // CommonReponse commonReponse = JSON.toJavaObject(JSON.parseObject(exchange.getBody()), CommonReponse.class); // if (commonReponse.getCode() == 0) { //流动通知下发完成后,修改任务状态为输送线流动中。。 //流动通知下发完成后,修改任务状态为输送线流动中。。 // taskService.update(new LambdaUpdateWrapper<Task>() // .eq(Task::getId, task.getId()) // .set(Task::getTaskSts, TaskStsType.COMPLETE_OUT.id)); @@ -244,8 +332,8 @@ public void waveToTask() throws JsonProcessingException { //获取当前任务档中,所有为待出库状态的任务档,按时间升序排列 List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() .ge(Task::getTaskType, 101) //TODO 如何确认是101,还是103 .eq(Task::getTaskSts, TaskStsType.GENERATE_OUT.id)); .ge(Task::getTaskType, 101) //TODO 如何确认是101,还是103 .eq(Task::getTaskSts, TaskStsType.GENERATE_OUT.id)); if (tasks.isEmpty()) { return; } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -584,7 +584,7 @@ locDto.setWorkQty(detl.getWorkQty()); locDtos.add(locDto); //库位实际可用数量 double surplusQty = detl.getAnfme() - detl.getWorkQty(); Double surplusQty = Math.round((detl.getAnfme() - detl.getWorkQty()) * 10000) / 10000.0; if (surplusQty <= 0) { continue; } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WorkServiceImpl.java
@@ -441,13 +441,12 @@ } else { //出库 TaskDetl taskDetl = taskDetls.get(0); //TODO 出库流程待确认,ESS取货后,输送线流转到扫码处状态 if (taskDetl.getWaveId() == null) { if (taskDetl.getWaveId() == null && task.getTaskType() != 103 && task.getTaskType() != 107) { task.setTaskSts(TaskStsType.COMPLETE_OUT.id);//199.出库完成 } else { task.setTaskSts(TaskStsType.WAVE_SEED.id);//198.播种中 } } task.setUpdateTime(new Date()); if (!taskService.updateById(task)) { throw new CoolException("任务更新失败"); @@ -639,7 +638,7 @@ throw new CoolException("任务不存在"); } if (task.getTaskType() != 103) { if (task.getTaskType() != 103 && task.getTaskType() != 107) { throw new CoolException("任务类型不可拣料"); } @@ -654,7 +653,9 @@ } //获取源库位高度 LocTypeBind locTypeBind = locTypeBindService.getOne(new LambdaQueryWrapper<LocTypeBind>().eq(LocTypeBind::getLocId, originLoc.getId()).in(LocTypeBind::getTypeId, LocBindType.HEIGHT.list())); LocTypeBind locTypeBind = locTypeBindService.getOne(new LambdaQueryWrapper<LocTypeBind>() .eq(LocTypeBind::getLocId, originLoc.getId()) .in(LocTypeBind::getTypeId, LocBindType.HEIGHT.list())); if (locTypeBind == null) { throw new CoolException("库位类型不存在"); } zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
@@ -87,6 +87,7 @@ executeTask11(task); break; case 53://拣料再入库 case 57: executeTask53(task); break; default: @@ -147,6 +148,7 @@ executeTask101(task); break; case 103://拣料 case 107: executeTask103(task); break; default: @@ -323,7 +325,8 @@ * @param task */ //拣料再入库 private void executeTask53(Task task) { @Transactional(rollbackFor = Exception.class) public void executeTask53(Task task) { Long hostId = task.getHostId(); Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, task.getTargetLoc()).eq(Loc::getHostId, hostId)); if (loc == null) { @@ -431,7 +434,7 @@ if (loc == null) { throw new CoolException("库位不存在"); } if (loc.getLocStsId() != LocStsType.S.val()) { if (loc.getLocStsId() != LocStsType.R.val()) { throw new CoolException("库位状态不处于R.出库预约"); } List<TaskDetl> taskDetls = taskDetlService.getTaskDetlByTaskId(task.getId()); zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
@@ -63,7 +63,8 @@ } //查询状态为RCS任务完成所有任务单据 // List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WAVE_SEED.id)); List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT.id)); HashSet<String> sycMatnrs = new HashSet<>(); List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskSts, TaskStsType.WCS_EXECUTE_OUT.id)); HashSet<String> sycMatnrs = new HashSet<>(); if (taskList.isEmpty()) { // throw new CoolException("没有可播种任务!!"); } else { @@ -84,7 +85,7 @@ //分配订单 Long waveId = taskDetl.getWaveId(); //同一个物料只添加一次播种任务 if(sycMatnrs.contains(taskDetl.getMatnr())) { if (sycMatnrs.contains(taskDetl.getMatnr())) { continue; } sycMatnrs.add(taskDetl.getMatnr()); @@ -104,7 +105,7 @@ .in(OrderDetl::getOrderId, orderIds) .eq(OrderDetl::getStockIndex, matUniqueKey) .eq(OrderDetl::getHostId, hostId)); if(orderDetls.isEmpty()){ if (orderDetls.isEmpty()) { throw new CoolException("订单明细不存在"); } @@ -112,11 +113,15 @@ for (OrderDetl orderDetl : orderDetls) { //fixme 作业中数量调整放至,生成出库任务成功后 double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty() - orderDetl.getWorkQty()).orElse(0.0D); if (issued <= 0.0D) { continue; } if (anfme <= 0.0D) { break; } if (issued <= 0.0D) { continue; } if (anfme <= 0.0D) { break; } double workQty = issued; if(anfme - issued < 0){ if (anfme - issued < 0) { workQty = anfme; } anfme -= workQty; @@ -168,7 +173,7 @@ } catch (Exception e) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); }finally { } finally { InterceptorIgnoreHelper.clearIgnoreStrategy(); } }