rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/ManualShelvingParams.java
New file @@ -0,0 +1,26 @@ package com.vincent.rsf.server.api.controller.params; import com.vincent.rsf.server.manager.entity.WaitPakin; import com.vincent.rsf.server.manager.entity.WaitPakinItem; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.List; @Data @Accessors(chain = true) @ApiModel(value = "ManualShelvingParams", description = "人工上架") public class ManualShelvingParams implements Serializable { @ApiModelProperty("库位编码") private String locCode; @ApiModelProperty("托盘码") private String barcode; @ApiModelProperty("单据明细") private List<WaitPakinItem> itemList; } rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/PublicToStockParams.java
@@ -1,6 +1,8 @@ package com.vincent.rsf.server.api.controller.params; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.entity.WaitPakin; import com.vincent.rsf.server.manager.entity.WaitPakinItem; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/MobileController.java
@@ -1,11 +1,16 @@ package com.vincent.rsf.server.api.controller.pda; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.controller.params.*; import com.vincent.rsf.server.api.service.MobileService; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; import com.vincent.rsf.server.manager.entity.QlyIsptItem; import com.vincent.rsf.server.manager.entity.WaitPakin; import com.vincent.rsf.server.manager.service.TaskService; import com.vincent.rsf.server.manager.service.WaitPakinService; import com.vincent.rsf.server.system.controller.BaseController; import com.vincent.rsf.server.system.controller.param.LoginParam; import io.swagger.annotations.Api; @@ -34,6 +39,10 @@ @Autowired private MobileService mobileService; @Autowired private TaskService taskService; @Autowired private WaitPakinService waitPakinService; /** * PDA用户登录 * @param param @@ -232,11 +241,15 @@ @ApiOperation("人工上架") @PreAuthorize("hasAuthority('manager:qlyInspect:update')") @PostMapping("/stock/operate") public R publicToStock(@RequestBody PublicToStockParams params) { if (Objects.isNull(params)) { public R publicToStock(@RequestBody ManualShelvingParams params) { if (Cools.isEmpty(params.getItemList()) || Cools.isEmpty(params.getLocCode()) || Cools.isEmpty(params.getBarcode())) { return R.error("参数不能为空!!"); } return mobileService.publicToStock(params, getLoginUserId()); WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode())); return taskService.generateFlatWarehouseTasks(waitPakin, params.getLocCode(), getLoginUserId()); // return mobileService.publicToStock(params, getLoginUserId()); } @ApiOperation("获取任务信息") rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -656,35 +656,22 @@ @Override public R operateToStock(OpStockParams params) { if (org.apache.commons.lang3.StringUtils.isBlank(params.getBarcode())) { throw new CoolException("拖盘码不能为空!!"); throw new CoolException("托盘码不能为空!!"); } if (StringUtils.isBlank(params.getAsnCode())) { throw new CoolException("单据不能为空!!"); WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>() .eq(WaitPakin::getBarcode, params.getBarcode()) .eq(WaitPakin::getIoStatus,PakinIOStatus.PAKIN_IO_STATUS_DONE.val) ); if (Cools.isEmpty(waitPakin)){ throw new CoolException("未找到组托数据,请检查状态"); } if (StringUtils.isBlank(params.getMatnrCode())) { throw new CoolException("物料编码不能为空!!"); List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin.getId())); if (Cools.isEmpty(waitPakinItems)){ throw new CoolException("数据错误,未找到组托明细"); } AsnOrder asnOrders = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, params.getAsnCode())); if (Objects.isNull(asnOrders)) { throw new CoolException("单据不存在!!"); } List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, params.getBarcode())); if (!locs.isEmpty()) { throw new CoolException("拖盘已使用"); } List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode())); if (!waitPakins.isEmpty()) { throw new CoolException("拖盘已使用!!"); } AsnOrderItem orderItems = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() .eq(AsnOrderItem::getAsnId, asnOrders.getId()) .eq(AsnOrderItem::getMatnrCode, params.getMatnrCode())); if (Objects.isNull(orderItems)) { return R.ok(null); } orderItems.setBarcode(params.getBarcode()); return R.ok(orderItems); return R.ok(waitPakinItems); } /** rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskType.java
@@ -10,6 +10,8 @@ public enum TaskType { TASK_TYPE_IN("1", "入库"), TASK_TYPE_FLAT_WAREHOUSE_IN("2", "平库上架"), TASK_TYPE_AGV_IN("3", "AGV入库"), TASK_TYPE_EMPITY_IN("10", "空板入库"), TASK_TYPE_LOC_MOVE("11", "库格移载"), TASK_TYPE_PICK_IN("53", "拣料再入库"), rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
@@ -4,6 +4,7 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams; import com.vincent.rsf.server.manager.entity.Task; import com.vincent.rsf.server.manager.entity.WaitPakin; import java.util.List; @@ -11,6 +12,8 @@ R generateTasks(GenerateTaskParams waitPakin, Long loginUserId); R generateFlatWarehouseTasks(WaitPakin waitPakins,String locCode, Long loginUserId); // R completeTask(String id); void completeTask(List<Task> task) throws Exception; rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -65,6 +65,90 @@ private WarehouseAreasItemService warehouseAreasItemService; @Override @Transactional(rollbackFor = Exception.class) public synchronized R generateFlatWarehouseTasks(WaitPakin pakins,String locCode, Long loginUserId) { if (Cools.isEmpty(pakins) || Cools.isEmpty(locCode)) { throw new CoolException("参数不能为空!!"); } /**获取组拖*/ // List<Long> ids = pakins.stream().map(WaitPakin::getId).collect(Collectors.toList()); List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>() .in(WaitPakin::getId, pakins.getId()) .eq(WaitPakin::getIoStatus, Short.parseShort(PakinIOStatus.PAKIN_IO_STATUS_DONE.val))); if (waitPakins.isEmpty()) { throw new CoolException("请检查组托状态是否完成!!"); } waitPakins.forEach(pakin -> { /**获取库位*/ String targetLoc = locCode; if (Cools.isEmpty(targetLoc)) { throw new CoolException("该站点对应库区未找到库位"); } List<TaskItem> taskItems = new ArrayList<>(); String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); if (StringUtils.isBlank(ruleCode)) { throw new CoolException("编码错误:请确认编码「SYS_TASK_CODE」是否已生成!!"); } Task task = new Task(); task.setTaskCode(ruleCode) .setTaskStatus(TaskStsType.COMPLETE_IN.id.shortValue()) .setTaskType(TaskType.TASK_TYPE_FLAT_WAREHOUSE_IN.type.shortValue()) .setTargLoc(targetLoc) .setBarcode(pakin.getBarcode()) .setCreateBy(loginUserId) .setUpdateBy(loginUserId); if (!this.save(task)) { throw new CoolException("任务保存失败!!"); } if (!locService.update(new LambdaUpdateWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()) .set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_S.type).set(Loc::getBarcode, pakin.getBarcode()))) { throw new CoolException("库位预约失败!!"); } /**获取组拖明细**/ List<WaitPakinItem> waitPakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, pakin.getId())); if (waitPakinItems.isEmpty()) { throw new CoolException("数据错误:组拖明细不存在"); } waitPakinItems.forEach(item -> { TaskItem taskItem = new TaskItem(); BeanUtils.copyProperties(item, taskItem); taskItem.setTaskId(task.getId()) .setOrderType(OrderType.ORDER_RECEIPT.type) .setSource(item.getId()) .setTrackCode(item.getTrackCode()) .setCreateBy(loginUserId) .setUpdateBy(loginUserId) .setExtendFields(item.getExtendFields()) .setOrderId(item.getAsnId()) .setOrderItemId(item.getAsnItemId()); taskItems.add(taskItem); }); if (!taskItemService.saveBatch(taskItems)) { throw new CoolException("任务明细保存失败!!"); } waitPakinItems.forEach(item -> { if (! waitPakinItemService.update(new LambdaUpdateWrapper<WaitPakinItem>() .set(WaitPakinItem::getWorkQty, item.getAnfme()) .eq(WaitPakinItem::getId, item.getId()))) { throw new CoolException("组托明细修执行数量修改失败!!"); } }); }); if (!waitPakinService.update(new LambdaUpdateWrapper<WaitPakin>() .in(WaitPakin::getId, pakins.getId()) .set(WaitPakin::getUpdateBy, loginUserId) .set(WaitPakin::getCreateBy, loginUserId) .set(WaitPakin::getIoStatus, PakinIOStatus.PAKIN_IO_STATUS_TASK_EXCE.val))) { throw new CoolException("组拖状态修改失败!!"); } return R.ok("任务生成完毕!"); } /** * @param * @param loginUserId