Merge branch 'liweidong'

liweidong
liweidong-hj 1 month ago
commit 8d5605d338
  1. 4
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/Location.java
  3. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/logistics/pojo/entity/Station.java
  4. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/LocationMapper.java
  5. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/LocationMapper.xml
  6. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.java
  7. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/StationMapper.xml
  8. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/mapper/TaskMapper.xml
  9. 13
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/ILocationService.java
  10. 8
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/IStationService.java
  11. 16
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/LocationServiceImpl.java
  12. 136
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/PipelineServiceImpl.java
  13. 9
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/StationServiceImpl.java
  14. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/logistics/service/impl/TaskServiceImpl.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";

@ -31,12 +31,12 @@ public class Location extends BaseEntity {
/**
* 状态常量占用
*/
public static final Integer STATUS_OCCUPIED = 0;
public static final Integer STATUS_OCCUPIED = 1;
/**
* 状态常量空闲
*/
public static final Integer STATUS_FREE = 1;
public static final Integer STATUS_FREE = 0;
/**

@ -25,12 +25,12 @@ public class Station extends BaseEntity {
/**
* 状态常量空闲
*/
public static final Integer STATUS_OCCUPIED = 0;
public static final Integer STATUS_FREE = 0;
/**
* 状态常量占用
*/
public static final Integer STATUS_FREE = 1;
public static final Integer STATUS_OCCUPIED = 1;
/**
* 状态常量预占用

@ -1,8 +1,16 @@
package org.springblade.desk.logistics.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.logistics.pojo.entity.Location;
import org.springblade.desk.logistics.pojo.entity.OrderBind;
import java.util.List;
public interface LocationMapper extends BaseMapper<Location> {
List<Location> selectByLocationStatus(@Param("statusFree") Integer statusFree);
List<Location> selectByStatus(@Param("status") Integer status);
}

@ -5,4 +5,12 @@
<mapper namespace = "org.springblade.desk.logistics.mapper.LocationMapper">
<select id="selectByLocationStatus" resultType="org.springblade.desk.logistics.pojo.entity.Location">
select id, location_name, location_code, location_status, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, remark
from LM_LOCATION where IS_DELETED = 0 and status != 1 and LOCATION_STATUS = #{statusFree}
</select>
<select id="selectByStatus" resultType="org.springblade.desk.logistics.pojo.entity.Location">
select id, location_name, location_code, location_status, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, remark
from LM_LOCATION where IS_DELETED = 0 and status = #{status} and LOCATION_STATUS = 0;
</select>
</mapper>

@ -1,8 +1,13 @@
package org.springblade.desk.logistics.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springblade.desk.logistics.pojo.entity.OrderBind;
import org.springblade.desk.logistics.pojo.entity.Station;
import java.util.List;
public interface StationMapper extends BaseMapper<Station> {
List<Station> selectByWcId(@Param("wcId") Long wcId);
}

@ -5,4 +5,8 @@
<mapper namespace = "org.springblade.desk.logistics.mapper.StationMapper">
<select id="selectByWcId" resultType="org.springblade.desk.logistics.pojo.entity.Station">
select id, station_name, station_code, station_status, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, remark, station_position, wc_id
from LM_STATION where IS_DELETED = 0 and WC_ID = #{wcId}
</select>
</mapper>

@ -6,7 +6,7 @@
<select id="selectByBoxBarcode" resultType="org.springblade.desk.logistics.pojo.entity.Task">
SELECT id, box_barcode, station_id, location_id, task_status, weight, machine_weight, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, remark
SELECT id, box_barcode, station_id, location_id, task_status, weight, machine_weight, status, create_user, create_time, create_dept, update_user, update_time, is_deleted, wc_id,remark
FROM LM_TASK
WHERE IS_DELETED = 0
AND BOX_BARCODE = #{boxBarcode}

@ -30,6 +30,7 @@ import org.springblade.desk.logistics.pojo.entity.Location;
import org.springblade.desk.logistics.pojo.entity.WeighData;
import java.math.BigDecimal;
import java.util.List;
/**
* 物流库位 服务类
@ -39,4 +40,16 @@ import java.math.BigDecimal;
*/
public interface ILocationService extends BaseService<Location> {
/**
* 获取空闲库位
* @param statusFree
* @return
*/
List<Location> selectByLocationStatus(Integer statusFree);
/**
* 获取空闲 梳齿架子
* @return
*/
List<Location> selectByStatus(Integer status);
}

@ -29,6 +29,8 @@ import org.springblade.core.mp.base.BaseService;
import org.springblade.desk.logistics.pojo.entity.Location;
import org.springblade.desk.logistics.pojo.entity.Station;
import java.util.List;
/**
* 物流站点 服务类
*
@ -37,4 +39,10 @@ import org.springblade.desk.logistics.pojo.entity.Station;
*/
public interface IStationService extends BaseService<Station> {
/**
* 根据作业中心 查询站点
* @param wcId
* @return
*/
List<Station> selectByWcId(Long wcId);
}

@ -26,12 +26,16 @@
package org.springblade.desk.logistics.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.logistics.mapper.LocationMapper;
import org.springblade.desk.logistics.pojo.entity.Location;
import org.springblade.desk.logistics.service.ILocationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 物流库位 服务实现类
@ -44,4 +48,16 @@ import org.springframework.stereotype.Service;
public class LocationServiceImpl extends BaseServiceImpl<LocationMapper, Location> implements ILocationService {
@Autowired
LocationMapper locationMapper;
@Override
public List<Location> selectByLocationStatus(Integer statusFree) {
return locationMapper.selectByLocationStatus(statusFree);
}
@Override
public List<Location> selectByStatus(Integer status) {
return locationMapper.selectByStatus(status);
}
}

@ -25,16 +25,20 @@
*/
package org.springblade.desk.logistics.service.impl;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springblade.desk.logistics.pojo.entity.Location;
import org.springblade.desk.logistics.pojo.entity.Station;
import org.springblade.desk.logistics.pojo.entity.Task;
import org.springblade.desk.logistics.pojo.entity .WeighData;
import org.springblade.desk.logistics.service.IPipelineService;
import org.springblade.desk.logistics.service.IStationService;
import org.springblade.desk.logistics.service.ITaskService;
import org.springblade.desk.logistics.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springblade.core.log.exception.ServiceException;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
/**
* 工艺能力表 服务实现类
@ -52,6 +56,12 @@ public class PipelineServiceImpl implements IPipelineService {
@Autowired
IStationService stationService;
@Autowired
ILocationService locationService;
@Autowired
IOrderBoxService orderBoxService;
@Override
public boolean verifyConveyorBoxWeighing(String boxBarcode, BigDecimal actualWeight, BigDecimal ratedWeight, Integer returnStatus) {
@ -60,7 +70,11 @@ public class PipelineServiceImpl implements IPipelineService {
// 2. 保存称重数据
taskService.savePipelineWeigh(boxBarcode,actualWeight, Task.STATUS_RETURNED);
// todo 3.超重处理,解绑
// 3.超重处理,解绑
R ret = orderBoxService.boxOrderUnbind(boxBarcode);
if(!ret.isSuccess()){
throw new ServiceException("解绑失败: "+boxBarcode);
}
return false;
} else {
@ -88,25 +102,121 @@ public class PipelineServiceImpl implements IPipelineService {
return task.getWeight();
}
@Override
public boolean receiveBoxArriveConveyorEnd(String boxBarcode) {
// 1. 基础校验
Task task = taskService.getBoxBarcode(boxBarcode);
if (null == task ) {
throw new ServiceException("查询不到该物料箱: "+boxBarcode);
if (null == task) {
throw new ServiceException("查询不到该物料箱: " + boxBarcode);
}
// 2. 判断站点是否有预占(是否站点没满)
if (null != task.getStationId()) {
// 站点没满,有预占 - 送往指定站点
return handlePreOccupiedStation(boxBarcode, task.getStationId());
} else {
// 站点已满,无预占 - 需要找空闲站点或库位
return handleNoPreOccupiedStation(task);
}
if(null == task.getStationId()){
throw new ServiceException("查询不到站点信息: "+boxBarcode);
}
/**
* 处理有预占的情况站点没满- 直接送往指定站点
*/
private boolean handlePreOccupiedStation(String boxBarcode, Long stationId) {
Station station = stationService.getById(stationId);
if (null == station) {
log.error("预占站点不存在:{}", stationId);
return false;
}
//查询站点 判断站点是否为空闲
Station station = stationService.getById(task.getStationId());
// 校验站点状态是否为预占用
if (!Station.PRE_STATUS_OCCUPIED.equals(station.getStationStatus())) {
log.error("站点状态不是预占用,无法送往:{}", station.getStationCode());
return false;
}
//证明预占用
if(Station.PRE_STATUS_OCCUPIED.equals(station.getStationStatus())){
log.info("站点有预占,将物料箱送往指定站点:{}", station.getStationCode());
// TODO 查询站点位置并调用AGV小车送往站点
return true;
}
/**
* 处理无预占的情况站点已满- 找空闲站点或库位
* @param task
*/
private boolean handleNoPreOccupiedStation(Task task) {
// 查找空闲站点
Long wcId = task.getWcId();
if (null != wcId) {
// 尝试找空闲站点
String freeStationCode = findFreeStationCode(wcId);
if (null != freeStationCode) {
log.info("找到空闲站点:{},将物料箱送往该站点", freeStationCode);
// TODO 调用AGV小车送往空闲站点
return true;
}
}
// 没有空闲站点,走库位逻辑
log.info("无空闲站点,尝试将物料箱移入库位");
return handleLocationLogic(task.getBoxBarcode());
}
return false;
/**
* 查找空闲站点编码
*/
private String findFreeStationCode(Long wcId) {
List<Station> stationList = stationService.selectByWcId(wcId);
if (CollectionUtils.isEmpty(stationList)) {
return null;
}
// 过滤出状态为空闲的站点
List<Station> freeStations = stationList.stream()
.filter(sn -> sn.getStationStatus().equals(Station.STATUS_FREE))
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(freeStations)) {
return null;
}
return freeStations.get(0).getStationCode();
}
/**
* 处理库位逻辑
*/
private boolean handleLocationLogic(String boxBarcode) {
// 1. 查询空闲库位
List<Location> freeLocations = locationService.selectByLocationStatus(Location.STATUS_FREE);
if (CollectionUtils.isEmpty(freeLocations)) {
log.warn("没有空闲库位可用,物料箱:{}", boxBarcode);
return false;
}
String targetLocationCode = freeLocations.get(0).getLocationCode();
log.info("找到空闲库位:{}", targetLocationCode);
// 2. 查询库位梳齿架子
List<Location> combLocations = locationService.selectByStatus(1);
if (CollectionUtils.isEmpty(combLocations)) {
log.warn("没有可用的库位梳齿架子,物料箱:{}", boxBarcode);
return false;
}
String combLocationCode = combLocations.get(0).getLocationCode();
log.info("找到库位梳齿架子:{}", combLocationCode);
// 3. 两步操作
log.info("第一步:AGV将物料箱从输送线放入梳齿架子:{}", combLocationCode);
// TODO 调用AGV小车 将输送线物资放入梳齿架子
log.info("第二步:CTU将物料箱从梳齿架子送往库位:{}", targetLocationCode);
// TODO 调用CTU 将梳齿架子物资放入库位
return true;
}
}

@ -30,8 +30,11 @@ import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.desk.logistics.mapper.StationMapper;
import org.springblade.desk.logistics.pojo.entity.Station;
import org.springblade.desk.logistics.service.IStationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 物流站点 服务类
*
@ -42,5 +45,11 @@ import org.springframework.stereotype.Service;
@Slf4j
public class StationServiceImpl extends BaseServiceImpl<StationMapper, Station> implements IStationService {
@Autowired
StationMapper stationMapper;
@Override
public List<Station> selectByWcId(Long wcId) {
return stationMapper.selectByWcId(wcId);
}
}

@ -52,8 +52,11 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
@Override
public void savePipelineWeigh(String boxBarcode, BigDecimal actualWeight, Integer statusReturned) {
// 1.查询物料箱 筛选状态
Task task = taskMapper.selectByBoxBarcode(boxBarcode);
// 2.更新重量以及任务状态
task.setMachineWeight(actualWeight);
task.setTaskStatus(statusReturned);
taskMapper.updateById(task);
}
@Override

Loading…
Cancel
Save