rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -1,14 +1,13 @@ package com.vincent.rsf.server.api.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.controller.params.CheckObjParams; import com.vincent.rsf.server.api.controller.params.OpStockParams; import com.vincent.rsf.server.api.controller.params.OtherReceiptParams; import com.vincent.rsf.server.api.controller.params.ReceiptParams; import com.vincent.rsf.server.api.service.MobileService; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.entity.QlyIsptItem; import com.vincent.rsf.server.system.controller.BaseController; import com.vincent.rsf.server.system.controller.param.LoginParam; @@ -201,8 +200,18 @@ @PostMapping("/inspect/check/update") public R checkUpdate(@RequestBody QlyIsptItem params) { if (Objects.isNull(params)) { throw new CoolException("参数不能为空!!"); return R.error("参数不能为空!!"); } return mobileService.checkUpdate(params); } @ApiOperation("获取上架信息") @PreAuthorize("hasAuthority('manager:qlyInspect:list')") @PostMapping("/stock/operate") public R operateToStock(@RequestBody OpStockParams params) { if (Objects.isNull(params)) { return R.error("参数不能为空!!"); } return mobileService.operateToStock(params); } } rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/OpStockParams.java
New file @@ -0,0 +1,19 @@ package com.vincent.rsf.server.api.controller.params; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; @Data @Accessors(chain = true) @ApiModel(value = "OpStockParams", description = "人工上架参数") public class OpStockParams { @ApiModelProperty("拖盘码") private String barcode; @ApiModelProperty("单号") private String asnCode; @ApiModelProperty("物料编码") private String matnrCode; } rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/OperateStockDto.java
New file @@ -0,0 +1,8 @@ package com.vincent.rsf.server.api.entity.dto; import com.vincent.rsf.server.manager.entity.AsnOrderItem; public class OperateStockDto extends AsnOrderItem { } rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -2,6 +2,7 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.api.controller.params.CheckObjParams; import com.vincent.rsf.server.api.controller.params.OpStockParams; import com.vincent.rsf.server.api.controller.params.OtherReceiptParams; import com.vincent.rsf.server.api.controller.params.ReceiptParams; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; @@ -50,4 +51,6 @@ R checkObjs(CheckObjParams params); R checkUpdate(QlyIsptItem params); R operateToStock(OpStockParams params); } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -5,6 +5,7 @@ import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.controller.params.CheckObjParams; import com.vincent.rsf.server.api.controller.params.OpStockParams; import com.vincent.rsf.server.api.controller.params.OtherReceiptParams; import com.vincent.rsf.server.api.controller.params.ReceiptParams; import com.vincent.rsf.server.api.entity.dto.CheckObjDto; @@ -35,7 +36,7 @@ import com.vincent.rsf.server.system.service.FieldsService; import com.vincent.rsf.server.system.service.UserLoginService; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.apache.tika.utils.StringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -107,6 +108,9 @@ @Autowired private FieldsItemService fieldsItemService; @Autowired private LocService locService; /** * @author Ryan @@ -152,7 +156,7 @@ */ @Override public R getOrderByCode(String barcode) { if (StringUtils.isEmpty(barcode)) { if (StringUtils.isBlank(barcode)) { return R.error("标签码不能为空!!"); } List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, barcode)); @@ -559,6 +563,50 @@ } /** * @author Ryan * @description 人工上架 * @param * @return * @time 2025/4/2 16:33 */ @Override public R operateToStock(OpStockParams params) { if (org.apache.commons.lang3.StringUtils.isBlank(params.getBarcode())) { throw new CoolException("拖盘码不能为空!!"); } if (StringUtils.isBlank(params.getAsnCode())) { throw new CoolException("单据不能为空!!"); } if (StringUtils.isBlank(params.getMatnrCode())) { 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("拖盘已使用!!"); } List<AsnOrderItem> orderItems = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>() .eq(AsnOrderItem::getAsnId, asnOrders.getId()) .eq(AsnOrderItem::getMatnrCode, params.getMatnrCode())); if (orderItems.isEmpty()) { throw new CoolException("单据明细不存在!!"); } List<AsnOrderItem> stocks = new ArrayList<>(); orderItems.forEach(item -> { item.setBarcode(params.getBarcode()); stocks.add(item); }); return R.ok(stocks); } /** * 获取ReceiptDetlsDtos */ private R getAsnOrderItem(List<AsnOrderItem> items) { rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -23,7 +23,6 @@ public class AsnOrderItem implements Serializable { private static final long serialVersionUID = 1L; /** * ID */ rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -54,6 +54,7 @@ * @time 2025/4/2 12:37 */ @Scheduled(cron = "0 0/05 * * * ? ") // @Scheduled(cron = "0/5 * * * * ?") @Transactional(rollbackFor = Exception.class) public void completeInStock() { List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.COMPLETE_IN.id)); @@ -65,27 +66,14 @@ if (taskItems.isEmpty()) { throw new CoolException("任务明细为空!!"); } Map<Long, List<TaskItem>> listMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getTaskId)); /**对任务明细按订单进行分组*/ Map<Long, List<TaskItem>> orderMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getOrderId)); List<StockItem> stockItems = new ArrayList<>(); for (Task task : tasks) { List<TaskItem> taskItem = listMap.get(task.getId()); if (taskItem.isEmpty()) { throw new CoolException("数据错误 ") } Stock stock = new Stock(); listMap.get(task.getId()).forEach(item -> { }); } taskItems.forEach(item -> { Stock stock = new Stock(); orderMap.keySet().forEach(key -> { AsnOrder order = asnOrderService.getOne(new LambdaQueryWrapper<AsnOrder>() .eq(AsnOrder::getId, item.getOrderId()) .eq(AsnOrder::getId, key) .select(AsnOrder::getId, AsnOrder::getPoCode, AsnOrder::getCode)); Stock stock = new Stock(); if (!Objects.isNull(order.getPoCode()) && StringUtils.isNotBlank(order.getPoCode())) { Purchase purchase = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, order.getPoCode())); stock.setPlatOrderNo(purchase.getPlatCode()).setPlatToken(purchase.getPlatId()); @@ -95,10 +83,12 @@ throw new CoolException("当前业务:" + SerialRuleCode.SYS_STOCK_CODE + ",编码规则不存在!!"); } stock.setAsnId(order.getId()).setAsnCode(order.getCode()); if (!stockService.save(stock)) { throw new CoolException("库存保存失败!!"); } List<TaskItem> items = orderMap.get(key); for (TaskItem item : items) { /**通过任务明细中的taskId查询,获取TASK的目标库位信息*/ Task taskServiceOne = taskService.getOne(new LambdaQueryWrapper<Task>() .select(Task::getId, Task::getTargLoc, Task::getOrgLoc, Task::getBarcode) .eq(Task::getId, item.getTaskId())); @@ -118,11 +108,12 @@ .setId(null) .setStockId(stock.getId()); stockItems.add(stockItem); }); } if (!stockItemService.saveBatch(stockItems)) { throw new CoolException("库存修改架失败!!"); } }); /**修改库位状态为F.在库*/ List<String> locCodes = tasks.stream().map(Task::getTargLoc).collect(Collectors.toList()); if (!locService.update(new LambdaUpdateWrapper<Loc>().set(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type).in(Loc::getCode, locCodes))) { throw new CoolException("库位状态修改失败!!"); rsf-server/src/main/resources/application.yml
@@ -23,7 +23,7 @@ # global-config: # field-strategy: 0 configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: true call-setters-on-nulls: true