Browse Source

齐套

master
常熟吴彦祖 10 months ago
parent
commit
d6d26a3644
  1. 14
      src/main/java/com/gaotao/modules/automatedWarehouse/entity/WmsTransportTask.java
  2. 22
      src/main/java/com/gaotao/modules/automatedWarehouse/service/TransportTaskErrorService.java
  3. 27
      src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java
  4. 19
      src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/KitTransportProcessServiceImpl.java
  5. 50
      src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/TransportTaskErrorServiceImpl.java
  6. 6
      src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml

14
src/main/java/com/gaotao/modules/automatedWarehouse/entity/WmsTransportTask.java

@ -164,6 +164,12 @@ public class WmsTransportTask {
*/ */
private String toAreaName; private String toAreaName;
/**
* 托盘类型名称非数据库字段用于显示- rqrq
* <p>通过 site + pallet_type 关联 pallet_type 表获取 type_desc</p>
*/
private String palletTypeName;
public Long getId() { public Long getId() {
return id; return id;
} }
@ -465,4 +471,12 @@ public class WmsTransportTask {
public void setToAreaName(String toAreaName) { public void setToAreaName(String toAreaName) {
this.toAreaName = toAreaName; this.toAreaName = toAreaName;
} }
public String getPalletTypeName() {
return palletTypeName;
}
public void setPalletTypeName(String palletTypeName) {
this.palletTypeName = palletTypeName;
}
} }

22
src/main/java/com/gaotao/modules/automatedWarehouse/service/TransportTaskErrorService.java

@ -0,0 +1,22 @@
package com.gaotao.modules.automatedWarehouse.service;
/**
* 运输任务错误记录服务接口 - rqrq
* <p>专门用于在独立事务中记录错误信息避免循环依赖</p>
*
* @author rqrq
* @date 2025/12/03
*/
public interface TransportTaskErrorService {
/**
* @Description 独立事务记录运输任务错误信息不受外层事务回滚影响- rqrq
* @param taskNo 任务单号
* @param errorCode 错误代码
* @param errorMsg 错误信息
* @author rqrq
* @date 2025/12/03
*/
void updateTransportTaskErrorInNewTransaction(String taskNo, String errorCode, String errorMsg);
}

27
src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/AutoTaskServiceImpl.java

@ -12,6 +12,7 @@ import com.gaotao.modules.automatedWarehouse.entity.WmsTransportTaskDetail;
import com.gaotao.modules.automatedWarehouse.mapper.AgvTaskMapper; import com.gaotao.modules.automatedWarehouse.mapper.AgvTaskMapper;
import com.gaotao.modules.automatedWarehouse.mapper.WcsIntegrationMapper; import com.gaotao.modules.automatedWarehouse.mapper.WcsIntegrationMapper;
import com.gaotao.modules.automatedWarehouse.service.AutoTaskService; import com.gaotao.modules.automatedWarehouse.service.AutoTaskService;
import com.gaotao.modules.automatedWarehouse.service.TransportTaskErrorService;
import com.gaotao.modules.trans.entity.TransNoControl; import com.gaotao.modules.trans.entity.TransNoControl;
import com.gaotao.modules.trans.service.TransNoControlService; import com.gaotao.modules.trans.service.TransNoControlService;
import com.gaotao.modules.warehouse.service.PalletOperationLogService; import com.gaotao.modules.warehouse.service.PalletOperationLogService;
@ -45,6 +46,8 @@ public class AutoTaskServiceImpl implements AutoTaskService {
private AgvTaskMapper agvTaskMapper; // 添加AgvTaskMapper注入 - rqrq private AgvTaskMapper agvTaskMapper; // 添加AgvTaskMapper注入 - rqrq
@Autowired @Autowired
private WmsTaskLimitConfig wmsTaskLimitConfig; // 注入任务限制配置 - rqrq private WmsTaskLimitConfig wmsTaskLimitConfig; // 注入任务限制配置 - rqrq
@Autowired
private TransportTaskErrorService transportTaskErrorService; // 用于独立事务记录错误 - rqrq
/** /**
* @Description 栈板万能预约任务 - rqrq * @Description 栈板万能预约任务 - rqrq
@ -236,16 +239,13 @@ public class AutoTaskServiceImpl implements AutoTaskService {
"未执行" "未执行"
); );
// 记录错误信息到error_code和error_msg - rqrq
String errorMsg = e.getMessage();
if (errorMsg != null && errorMsg.length() > 500) {
errorMsg = errorMsg.substring(0, 500); // 限制错误信息长度 - rqrq
}
agvTaskMapper.updateTransportTaskError(wmsTransportTask.getTaskNo(), "500", errorMsg);
System.out.println("任务错误信息已记录 - rqrq:errorCode=500");
// 使用独立事务记录错误信息避免被主事务回滚影响 - rqrq
transportTaskErrorService.updateTransportTaskErrorInNewTransaction(
wmsTransportTask.getTaskNo(), "500", e.getMessage());
System.out.println("任务错误信息已通过独立事务记录 - rqrq:errorCode=500");
throw e; throw e;
}
}
} }
/** /**
@ -318,13 +318,10 @@ public class AutoTaskServiceImpl implements AutoTaskService {
"未执行" "未执行"
); );
// 记录错误信息到error_code和error_msg - rqrq
String errorMsg = e.getMessage();
if (errorMsg != null && errorMsg.length() > 500) {
errorMsg = errorMsg.substring(0, 500); // 限制错误信息长度 - rqrq
}
agvTaskMapper.updateTransportTaskError(wmsTransportTask.getTaskNo(), "500", errorMsg);
System.out.println("任务错误信息已记录 - rqrq:errorCode=500");
// 使用独立事务记录错误信息避免被主事务回滚影响 - rqrq
transportTaskErrorService.updateTransportTaskErrorInNewTransaction(
wmsTransportTask.getTaskNo(), "500", e.getMessage());
System.out.println("任务错误信息已通过独立事务记录 - rqrq:errorCode=500");
throw e; throw e;
} }

19
src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/KitTransportProcessServiceImpl.java

@ -113,19 +113,18 @@ public class KitTransportProcessServiceImpl implements KitTransportProcessServic
notifyNo, itemNo, palletLocations); notifyNo, itemNo, palletLocations);
// 如果没有找到任何栈板位置可能物料还在打托中跳过 - rqrq // 如果没有找到任何栈板位置可能物料还在打托中跳过 - rqrq
if (palletLocations.isEmpty()) {
log.info("未找到栈板位置信息,物料可能还在打托中 - rqrq:notifyNo={}, itemNo={}", notifyNo, itemNo);
return false;
if (!palletLocations.isEmpty()) {
// 检查是否还有栈板在分拣位 - rqrq
boolean hasInSorting = palletLocations.stream()
.anyMatch(loc -> SORTING_STATIONS.contains(loc));
if (hasInSorting) {
log.info("仍有栈板在分拣位,未齐套 - rqrq:notifyNo={}, itemNo={}", notifyNo, itemNo);
return false;
}
} }
// 检查是否还有栈板在分拣位 - rqrq
boolean hasInSorting = palletLocations.stream()
.anyMatch(loc -> SORTING_STATIONS.contains(loc));
if (hasInSorting) {
log.info("仍有栈板在分拣位,未齐套 - rqrq:notifyNo={}, itemNo={}", notifyNo, itemNo);
return false;
}
log.info("所有栈板都不在分拣位,判断为已齐套 - rqrq:notifyNo={}, itemNo={}", notifyNo, itemNo); log.info("所有栈板都不在分拣位,判断为已齐套 - rqrq:notifyNo={}, itemNo={}", notifyNo, itemNo);

50
src/main/java/com/gaotao/modules/automatedWarehouse/service/impl/TransportTaskErrorServiceImpl.java

@ -0,0 +1,50 @@
package com.gaotao.modules.automatedWarehouse.service.impl;
import com.gaotao.modules.automatedWarehouse.mapper.AgvTaskMapper;
import com.gaotao.modules.automatedWarehouse.service.TransportTaskErrorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* 运输任务错误记录服务实现类 - rqrq
* <p>专门用于在独立事务中记录错误信息避免循环依赖</p>
*
* @author rqrq
* @date 2025/12/03
*/
@Service
public class TransportTaskErrorServiceImpl implements TransportTaskErrorService {
@Autowired
private AgvTaskMapper agvTaskMapper;
/**
* @Description 独立事务记录运输任务错误信息不受外层事务回滚影响- rqrq
* <p>使用 REQUIRES_NEW 传播级别在独立事务中执行即使外层事务回滚此方法的更新也会提交</p>
* @param taskNo 任务单号
* @param errorCode 错误代码
* @param errorMsg 错误信息
* @author rqrq
* @date 2025/12/03
*/
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateTransportTaskErrorInNewTransaction(String taskNo, String errorCode, String errorMsg) {
System.out.println("独立事务记录错误信息 - rqrq,taskNo=" + taskNo + ",errorCode=" + errorCode);
try {
// 限制错误信息长度 - rqrq
String limitedErrorMsg = errorMsg;
if (limitedErrorMsg != null && limitedErrorMsg.length() > 500) {
limitedErrorMsg = limitedErrorMsg.substring(0, 500);
}
agvTaskMapper.updateTransportTaskError(taskNo, errorCode, limitedErrorMsg);
System.out.println("错误信息记录完成 - rqrq");
} catch (Exception e) {
System.out.println("记录错误信息失败 - rqrq:" + e.getMessage());
// 不抛出异常避免影响主流程 - rqrq
}
}
}

6
src/main/resources/mapper/automatedWarehouse/AgvTaskMapper.xml

@ -37,10 +37,12 @@
t.wms_status AS wmsStatus, t.wms_status AS wmsStatus,
t.pallet_type AS palletType, t.pallet_type AS palletType,
t.to_area AS toArea, t.to_area AS toArea,
isnull(a.area_desc ,b.station_area) AS toAreaName
ISNULL(a.area_desc, b.station_area) AS toAreaName,
pt.type_desc AS palletTypeName
FROM wms_transport_task t WITH (NOLOCK) FROM wms_transport_task t WITH (NOLOCK)
LEFT JOIN area a WITH (NOLOCK) ON t.to_area = a.area_id LEFT JOIN area a WITH (NOLOCK) ON t.to_area = a.area_id
left join agv_station b WITH (NOLOCK) on t.to_location= b.station_code
LEFT JOIN agv_station b WITH (NOLOCK) ON t.to_location = b.station_code
LEFT JOIN pallet_type pt WITH (NOLOCK) ON t.site = pt.site AND t.pallet_type = pt.pallet_type
WHERE 1=1 WHERE 1=1
<if test="data.site != null and data.site != ''"> <if test="data.site != null and data.site != ''">
AND t.site = #{data.site} AND t.site = #{data.site}

Loading…
Cancel
Save