liweidong
绫Umbrella 1 month ago
parent 6d9288e751
commit 1975c18874
  1. 5
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 15
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/BoxBinding.java
  3. 6
      blade-service/blade-desk/pom.xml
  4. 34
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/controller/OrderBoxController.java
  5. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/OrderBoxService.java
  6. 133
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/OrderBoxServiceImpl.java

@ -12,9 +12,9 @@ public interface LauncherConstant {
/**
* nacos 命名空间
*/
String NACOS_NAMESPACE = "feaf627f-a847-463b-8b73-24a0538f526e";
// String NACOS_NAMESPACE = "feaf627f-a847-463b-8b73-24a0538f526e";
// 生产环境
// String NACOS_NAMESPACE = "db3f4da1-ae19-4104-8c17-6d9b8f069401";
String NACOS_NAMESPACE = "db3f4da1-ae19-4104-8c17-6d9b8f069401";
// 测试环境
// String NACOS_NAMESPACE = "6cdd0310-0d61-4f54-891a-7fb06224d9b8";
@ -32,6 +32,7 @@ public interface LauncherConstant {
* nacos dev 地址
*/
String NACOS_DEV_ADDR = "127.0.0.1:8848";
// String NACOS_DEV_ADDR = "192.168.0.3:8848";
/**
* nacos prod 地址

@ -0,0 +1,15 @@
package org.springblade.desk.logistics.pojo.entity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.ArrayList;
@Data
@Schema(description = "箱绑定接收表")
public class BoxBinding {
private String boxBarcode;
private ArrayList<Long> orderIdList;
private Long wcId;
}

@ -135,6 +135,12 @@
<version>4.6.0.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

@ -1,4 +1,5 @@
package org.springblade.desk.logistics.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -6,10 +7,15 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.api.R;
import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity;
import org.springblade.desk.dashboard.service.IBsWorkCenterService;
import org.springblade.desk.dashboard.wrapper.BsWorkCenterWrapper;
import org.springblade.desk.logistics.pojo.entity.BoxBinding;
import org.springblade.desk.logistics.service.OrderBoxService;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List;
/**
* 订单箱子 控制器
@ -23,6 +29,7 @@ import java.math.BigDecimal;
@Tag(name = "订单箱子", description = "订单箱子称重接口")
public class OrderBoxController extends BladeController {
private final OrderBoxService orderBoxService;
private final IBsWorkCenterService bsWorkCenterService;
@PostMapping("/getWeighing")
@ -47,5 +54,32 @@ public class OrderBoxController extends BladeController {
return orderBoxService.upholdOrderPartWeight(cardNo,new BigDecimal(actualWeight));
}
@GetMapping("/bs-list")
@ApiOperationSupport(order = 2)
@Operation(
summary = "获取作业中心",
description = "获取当前作业中心名称"
)
public R getBSWORKCENTER(){
return R.data(bsWorkCenterService.list(new LambdaQueryWrapper<BsWorkCenterEntity>().eq(BsWorkCenterEntity::getIsDeleted, 0)));
}
@GetMapping("/box-binding")
@ApiOperationSupport(order = 3)
@Operation(
summary = "获取作业中心",
description = "获取当前作业中心名称"
)
public R boxBinding(@RequestBody BoxBinding boxBinding){
// 1.参数合法性校验
if (boxBinding == null || boxBinding.getBoxBarcode().trim().isEmpty()) {
return R.fail("箱条码不能为空");
}
if (boxBinding == null || boxBinding.getWcId()==null||boxBinding.getWcId()==0) {
return R.fail("箱条码不能为空");
}
return orderBoxService.boxBinding(boxBinding);
}
}

@ -1,9 +1,13 @@
package org.springblade.desk.logistics.service;
import org.springblade.core.tool.api.R;
import org.springblade.desk.logistics.pojo.entity.BoxBinding;
import java.math.BigDecimal;
public interface OrderBoxService {
R upholdOrderPartWeight(String cardNo, BigDecimal actualWeight);
R boxBinding(BoxBinding boxBinding);
}

@ -1,17 +1,28 @@
package org.springblade.desk.logistics.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springblade.desk.jobtransfer.service.ICertificateMaintenanceService;
import org.springblade.desk.logistics.pojo.entity.BoxBinding;
import org.springblade.desk.logistics.pojo.entity.OrderBind;
import org.springblade.desk.logistics.pojo.entity.Task;
import org.springblade.desk.logistics.service.OrderBindService;
import org.springblade.desk.logistics.service.OrderBoxService;
import org.springblade.desk.logistics.service.TaskService;
import org.springblade.desk.order.pojo.entity.YieldOrder;
import org.springblade.desk.order.service.IYieldOrderService;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 订单箱子 控制器
@ -23,9 +34,25 @@ import java.util.List;
@Slf4j
public class OrderBoxServiceImpl implements OrderBoxService {
private final IYieldOrderService yieldOrderService;
private final TaskService taskService;
private final OrderBindService orderBindService;
private final OrderBindService orderBindService;
public OrderBoxServiceImpl(IYieldOrderService yieldOrderService) {
public OrderBoxServiceImpl(IYieldOrderService yieldOrderService, TaskService taskService, OrderBindService orderBindService) {
this.yieldOrderService = yieldOrderService;
this.taskService = taskService;
this.orderBindService = orderBindService;
}
private static final Set<Integer> RUNNING_STATUSES = new HashSet<>();
static {
RUNNING_STATUSES.add(Task.STATUS_STATION);
RUNNING_STATUSES.add(Task.STATUS_LOCATION);
RUNNING_STATUSES.add(Task.STATUS_WAITING);
RUNNING_STATUSES.add(Task.STATUS_BACK_TO_STORAGE);
}
private static final Set<Integer> ORDER_STATUSES = new HashSet<>();
static {
ORDER_STATUSES.add(OrderBind.STATUS_BOUND);
}
@Override
@ -39,4 +66,108 @@ public class OrderBoxServiceImpl implements OrderBoxService {
return yieldOrderService.updateById(list.get(0))? R.success():R.fail("实际称重维护:卡号维护失败");
}
@Override
public R boxBinding(BoxBinding boxBinding) {
log.info("接收到箱绑定实际参数:{}", boxBinding);
// 1. 入参非空校验(基础防护)
if (boxBinding == null || boxBinding.getBoxBarcode() == null) {
log.warn("箱绑定参数为空或箱条码缺失");
return R.fail("箱条码不能为空");
}
String boxBarcode = boxBinding.getBoxBarcode();
// 2. 校验箱条码是否存在运行中的任务(封装为独立方法,提升可读性)
R taskCheckResult = checkBoxBarcodeRunningTask(boxBarcode);
if (!taskCheckResult.isSuccess()) {
return taskCheckResult;
}
// 3. 校验订单是否已绑定(封装为独立方法)
R orderCheckResult = checkOrderIdBoundStatus(boxBinding.getOrderIdList());
if (!orderCheckResult.isSuccess()) {
return orderCheckResult;
}
//TODO:判断班次与库位记得写
//5.保存记录到数据库中
Task task = new Task();
task.setBoxBarcode(boxBinding.getBoxBarcode());
task.setTaskStatus(1);
task.set
return null;
}
/**
* 校验箱条码是否存在运行中的任务
*/
private R checkBoxBarcodeRunningTask(String boxBarcode) {
// 查询箱条码对应的任务(MyBatis-Plus的list方法返回空列表,非null,无需判null)
List<Task> taskList = taskService.list(
new LambdaQueryWrapper<Task>().eq(Task::getBoxBarcode, boxBarcode)
);
// 无任务数据,直接通过校验
if (CollectionUtils.isEmpty(taskList)) {
return R.success();
}
// 判断是否有运行中的任务(流式操作简化,无冗余map)
boolean hasRunningTask = taskList.stream()
.map(Task::getTaskStatus)
.filter(status -> status != null) // 过滤null状态,避免NPE
.anyMatch(RUNNING_STATUSES::contains);
if (hasRunningTask) {
log.warn("箱条码{}存在运行中的任务,绑定异常", boxBarcode);
return R.fail("该箱条码在运行中,箱条码异常");
}
return R.success();
}
/**
* 校验订单号是否已绑定核心优化减少遍历次数流式收集数据
*/
private R checkOrderIdBoundStatus(List<Long> orderIdList) {
// 无订单号,直接通过校验
if (CollectionUtils.isEmpty(orderIdList)) {
return R.success();
}
// 查询订单绑定记录
List<OrderBind> orderBindList = orderBindService.list(
new LambdaQueryWrapper<OrderBind>().in(OrderBind::getOrderId, orderIdList)
);
if (CollectionUtils.isEmpty(orderBindList)) {
return R.success();
}
// 步骤1:过滤出已绑定的订单ID(流式收集,替代循环)
List<Long> boundOrderIds = orderBindList.stream()
.filter(orderBind -> OrderBind.STATUS_BOUND.equals(orderBind.getBindingStatus()))
.map(OrderBind::getOrderId)
.filter(orderId -> orderId != null) // 过滤null订单ID
.distinct() // 去重,避免重复查询
.collect(Collectors.toList());
// 无已绑定订单,直接通过
if (CollectionUtils.isEmpty(boundOrderIds)) {
return R.success();
}
// 步骤2:查询已绑定订单对应的流程卡号(流式收集,替代循环)
List<String> boundCardNos = yieldOrderService.list(
new LambdaQueryWrapper<YieldOrder>().in(YieldOrder::getId, boundOrderIds)
).stream()
.map(YieldOrder::getCardNo)
.filter(cardNo -> cardNo != null) // 过滤null卡号
.collect(Collectors.toList());
// 构造异常信息并返回
String errorMsg = String.format("以下流程卡号处于绑定状态,绑定异常:{%s}", String.join(",", boundCardNos));
log.warn(errorMsg);
return R.fail(errorMsg);
}
}

Loading…
Cancel
Save