Browse Source

齐套运输

clodop
常熟吴彦祖 2 months ago
parent
commit
05266e4561
  1. 10
      src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnAgvTaskMapper.java
  2. 45
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAgvTaskServiceImpl.java
  3. 3
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java
  4. 3
      src/main/java/com/gaotao/modules/autoWareHourceHaian/staticData/HaiAnTaskSourceStaticData.java
  5. 10
      src/main/resources/mapper/autoWareHourceHaian/HaiAnAgvTaskMapper.xml

10
src/main/java/com/gaotao/modules/autoWareHourceHaian/mapper/HaiAnAgvTaskMapper.java

@ -18,6 +18,16 @@ import java.util.List;
@Mapper
public interface HaiAnAgvTaskMapper {
/**
* 按工厂、托盘、实际任务号及来源WOT判断齐套运输;仅下达和缺主单取消使用,未匹配返回false。- rqrq
* 只认WOT的齐套运输类型,不兼容旧单据;SQL失败由调用方事务回滚。- rqrq
*/
boolean isCacheTransportTask(@Param("site") String site,
@Param("palletId") String palletId,
@Param("taskNo") String taskNo,
@Param("sourceBillNo") String sourceBillNo);
/**
* @author rqrq
* @Description 分页查询海安运输任务主表 - rqrq

45
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnAgvTaskServiceImpl.java

@ -23,6 +23,7 @@ import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnOperatorStaticData
import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnOutboundRfidActionStaticData;
import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnRfidCheckResultStaticData;
import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnStatusStaticData;
import com.gaotao.modules.autoWareHourceHaian.staticData.HaiAnTaskSourceStaticData;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -213,7 +214,7 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService {
taskData.setSite(site);
taskData.setTaskNo(taskNo);
taskData.setItemNo(1);
taskData.setSourceType("运输栈板");
taskData.setSourceType(HaiAnTaskSourceStaticData.TRANSPORT_PALLET);
taskData.setSourceBillNo(normalizeText(taskDetail.getComment()));
// 海安AGV来源指向WOT主任务,来源行号统一为1(原为0),新增与补偿更新保持一致 - rqrq
taskData.setSourceLineId(1L);
@ -240,8 +241,22 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService {
taskData.setToArea(toArea);
HaiAnWmsTransportTask existedTask = haiAnAgvTaskMapper.getTransportTaskByTaskNo(site, taskNo);
// 下达回调证明WCS已受理,可供齐套调度核实超时结果;与本回调一起回滚。- rqrq
haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, taskData.getSourceBillNo(), "DISPATCH", null, null);
// 重复下达保留已有来源WOT,避免空备注覆盖后无法关联齐套明细。- rqrq
if (!StringUtils.hasText(taskData.getSourceBillNo()) && existedTask != null) {
taskData.setSourceBillNo(existedTask.getSourceBillNo());
}
// 仅下达时按site、托盘和WOT识别齐套来源;查询失败由回调事务回滚,后续阶段直接使用主单类型。- rqrq
boolean cacheTransport = existedTask != null
&& HaiAnTaskSourceStaticData.CACHE_TRANSPORT.equals(existedTask.getSourceType());
if (!cacheTransport) {
// 精确查询来源WOT的齐套运输类型;旧单据不补判,不按单号前缀猜测。- rqrq
cacheTransport = haiAnAgvTaskMapper.isCacheTransportTask(site, palletId, taskNo, taskData.getSourceBillNo());
}
if (cacheTransport) {
taskData.setSourceType(HaiAnTaskSourceStaticData.CACHE_TRANSPORT);
// 下达回调证明WCS已受理;仅齐套运输更新执行事实,失败与本回调一起回滚。- rqrq
haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, taskData.getSourceBillNo(), "DISPATCH", null, null);
}
if (existedTask == null) {
int insertRows = haiAnAgvTaskMapper.insertTransportTask(taskData);
if (insertRows <= 0) {
@ -274,7 +289,10 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService {
HaiAnOperatorStaticData.AGV_SCHEDULER
);
// 持久化本齐套明细实际取货时间;仅匹配本运输来源,不用当前托盘位置推算历史。- rqrq
haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, task.getSourceBillNo(), "PICK", null, null);
if (HaiAnTaskSourceStaticData.CACHE_TRANSPORT.equals(task.getSourceType())) {
// 复用已读取主单类型,仅齐套运输按site、托盘及来源WOT更新;失败回滚回调事务。- rqrq
haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, task.getSourceBillNo(), "PICK", null, null);
}
}
/**
@ -327,7 +345,10 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService {
HaiAnOperatorStaticData.AGV_SCHEDULER
);
// 实际送达与自动下发完成分开记录,放货事务失败时一并回滚。- rqrq
haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, task.getSourceBillNo(), "ARRIVE", toArea, null);
if (HaiAnTaskSourceStaticData.CACHE_TRANSPORT.equals(task.getSourceType())) {
// 复用已读取主单类型,仅齐套运输按site、托盘及来源WOT更新;失败回滚回调事务。- rqrq
haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, task.getSourceBillNo(), "ARRIVE", toArea, null);
}
}
/**
@ -358,9 +379,17 @@ public class HaiAnAgvTaskServiceImpl implements HaiAnAgvTaskService {
if (pickupDoneCount != null && pickupDoneCount > 0) {
haiAnPdaAutoWarehouseMapper.clearHaiAnPalletLocationAndArea(site, palletId, HaiAnOperatorStaticData.AGV_SCHEDULER);
}
// 取消释放本齐套明细的活跃关联,后续回到缓存区可再次建单;历史仍显示取消。- rqrq
haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo,
task == null ? normalizeText(taskDetail.getComment()) : task.getSourceBillNo(), "CANCEL", null, callbackType);
String sourceBillNo = task == null ? normalizeText(taskDetail.getComment()) : task.getSourceBillNo();
boolean cacheTransport = task != null
&& HaiAnTaskSourceStaticData.CACHE_TRANSPORT.equals(task.getSourceType());
if (task == null) {
// 主单尚未生成的异常取消才补查来源;无精确关联则跳过,查询失败回滚本回调。- rqrq
cacheTransport = haiAnAgvTaskMapper.isCacheTransportTask(site, palletId, taskNo, sourceBillNo);
}
if (cacheTransport) {
// 仅齐套取消释放本明细关联,普通运输不访问齐套明细更新;历史保留取消事实。- rqrq
haiAnCacheTransportMapper.recordExecution(site, palletId, taskNo, sourceBillNo, "CANCEL", null, callbackType);
}
}
/**

3
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnCacheTransportDispatchServiceImpl.java

@ -368,7 +368,8 @@ public class HaiAnCacheTransportDispatchServiceImpl implements HaiAnCacheTranspo
orderTask.setSite(detail.getSite());
orderTask.setTaskNo(detail.getTaskNo());
orderTask.setItemNo(1);
orderTask.setSourceType(HaiAnTaskSourceStaticData.TRANSPORT_PALLET);
// 单独标记齐套来源,供AGV下达回调传递到实际运输主单。- rqrq
orderTask.setSourceType(HaiAnTaskSourceStaticData.CACHE_TRANSPORT);
orderTask.setSourceBillNo(detail.getOrderNo());
orderTask.setSourceLineId(detail.getId());
orderTask.setPartNo("");

3
src/main/java/com/gaotao/modules/autoWareHourceHaian/staticData/HaiAnTaskSourceStaticData.java

@ -39,6 +39,9 @@ public final class HaiAnTaskSourceStaticData {
*/
public static final String TRANSPORT_PALLET = "运输栈板";
/** 齐套缓存运输来源,写入WOT及实际AGV主单,回调据此决定是否联动齐套明细。- rqrq */
public static final String CACHE_TRANSPORT = "齐套运输";
/**
* 任务来源:空托盘入库。空托盘通知入库/入库并运输写 WOT.source_type。 - rqrq
*/

10
src/main/resources/mapper/autoWareHourceHaian/HaiAnAgvTaskMapper.xml

@ -2,6 +2,16 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gaotao.modules.autoWareHourceHaian.mapper.HaiAnAgvTaskMapper">
<!-- 来源识别用于业务流转,禁止脏读;只在下达或缺主单取消时执行,只认WOT齐套类型,不查齐套明细兼容旧单。- rqrq -->
<select id="isCacheTransportTask" resultType="boolean">
SELECT CASE WHEN EXISTS (
SELECT 1 FROM haian_wms_order_task w
WHERE w.site = #{site} AND w.pallet_id = #{palletId}
AND w.item_no = 1 AND w.source_type = N'齐套运输'
AND (w.task_no = #{sourceBillNo} OR w.task_no = #{taskNo})
) THEN 1 ELSE 0 END
</select>
<!-- rqrq - 海安AGV任务主查询,仅查haian_wms_transport_task,不包含任何控制类动作 -->
<select id="getTransportTaskList" resultType="com.gaotao.modules.autoWareHourceHaian.entity.vo.HaiAnWmsTransportTask">
SELECT

Loading…
Cancel
Save