Browse Source

盘点

master
常熟吴彦祖 3 weeks ago
parent
commit
519b621105
  1. 3
      src/main/java/com/gaotao/modules/api/entity/PushPalletDetailDto.java
  2. 10
      src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java
  3. 77
      src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java
  4. 9
      src/main/resources/mapper/check/PhysicalInventoryMapper.xml

3
src/main/java/com/gaotao/modules/api/entity/PushPalletDetailDto.java

@ -15,10 +15,11 @@ public class PushPalletDetailDto {
private boolean isCommonUsed; //常用料
private boolean autoSort; //自动分拣
private Integer soreType;//分拣方式 0人工 1气胀轴 2抱箱 3直接出库
private String assemblyPosition;//托盘
private String assemblyPosition;//位置
private boolean endFlag;
private List<PalletStationVo> cargoInfos;//明细数据
private PartTypeEnum partType;
private Integer count=1;//托盘数量 默认为1
private Integer isInventoryCompletion=0;//是否为盘点确认的组盘
}

10
src/main/java/com/gaotao/modules/check/mapper/PhysicalInventoryMapper.java

@ -598,4 +598,14 @@ public interface PhysicalInventoryMapper extends BaseMapper<CountHeader> {
* @author rqrq
*/
int countOrderTaskByCountNo(@Param("site") String site, @Param("countNo") String countNo);
/**
* @Description 根据任务号和栈板号获取任务单行号 - rqrq
* @param site 工厂编码
* @param taskNo 任务号
* @param palletId 栈板号
* @return Integer 任务单行号
* @author rqrq
*/
Integer getItemNoByTaskAndPallet(@Param("site") String site, @Param("taskNo") String taskNo, @Param("palletId") String palletId);
}

77
src/main/java/com/gaotao/modules/check/service/impl/PhysicalInventoryServiceImpl.java

@ -1853,6 +1853,9 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM
// 6. 处理任务单与RFID接口一致- rqrq
handleTaskAfterCount(site, countNo, palletId, username);
// 7. 推送组盘数据给WCS告知立库该托盘已盘点- rqrq
pushCountCompletionToWcs(site, countNo, palletId);
log.info("pdaQuickSubmitCount 结束,生成盘点结果数: {}", labelList.size());
return labelList.size();
}
@ -1978,6 +1981,9 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM
// 8. 处理任务单与RFID接口一致- rqrq
handleTaskAfterCount(site, countNo, palletId, username);
// 9. 推送组盘数据给WCS告知立库该托盘已盘点- rqrq
pushCountCompletionToWcs(site, countNo, palletId);
log.info("pdaSubmitCount 结束,生成盘点结果数: {}", labelList.size());
return labelList.size();
}
@ -2118,6 +2124,77 @@ public class PhysicalInventoryServiceImpl extends ServiceImpl<PhysicalInventoryM
* @param username 操作人
* @author rqrq
*/
/**
* @Description 推送盘点完成的组盘数据给WCS - rqrq
*
* <p><b>业务说明</b></p>
* <ul>
* <li>盘点完成后调用WCS接口告知立库该托盘已盘点</li>
* <li>使用 PushPalletDetailDto 构建请求数据</li>
* <li>isInventoryCompletion=1 表示是盘点确认的组盘</li>
* </ul>
*
* @param site 工厂编码
* @param countNo 盘点单号
* @param palletId 栈板号
* @author rqrq
*/
private void pushCountCompletionToWcs(String site, String countNo, String palletId) {
log.info("开始推送盘点完成数据给WCS - rqrq,site: {}, countNo: {}, palletId: {}", site, countNo, palletId);
try {
// 1. 查询任务单号和行号 - rqrq
String taskNo = baseMapper.getTaskNoByPallet(site, countNo, palletId);
if (!StringUtils.hasText(taskNo)) {
log.info("该栈板没有关联任务号,跳过WCS推送,palletId: {}", palletId);
return;
}
Integer itemNo = baseMapper.getItemNoByTaskAndPallet(site, taskNo, palletId);
if (itemNo == null) {
itemNo = 1; // 默认行号1
}
// 2. 查询栈板的pallet_type获取WCS相关配置 - rqrq
com.gaotao.modules.base.entity.PalletType palletTypeInfo = wcsIntegrationMapper.getPalletTypeInfoByPallet(site, palletId);
if (palletTypeInfo == null) {
log.warn("未查询到栈板类型信息,跳过WCS推送,palletId: {}", palletId);
return;
}
// 3. 构建 PushPalletDetailDto 对象 - rqrq
com.gaotao.modules.api.entity.PushPalletDetailDto dto = new com.gaotao.modules.api.entity.PushPalletDetailDto();
dto.setSite(site);
dto.setTaskNo(taskNo);
dto.setItemNo(itemNo);
dto.setPalletBarcode(palletId);
dto.setPalletType(palletTypeInfo.getWcsPalletType());
dto.setBasePalletType(palletTypeInfo.getWcsBasePalletType());
dto.setCommonUsed(false); // isCommonUsed = false
// autoSort 根据 wcs_auto_sort Y/N 来填 true/false - rqrq
dto.setAutoSort("Y".equals(palletTypeInfo.getWcsAutoSort()));
dto.setSoreType(palletTypeInfo.getWcsSoreType());
dto.setAssemblyPosition("R1"); // 固定R1
dto.setEndFlag(true);
dto.setCargoInfos(new java.util.ArrayList<>()); // 空集合
dto.setPartType(com.gaotao.modules.api.entity.PartTypeEnum.OTHER); // partType = 3 (OTHER)
dto.setCount(1); // 默认1
dto.setIsInventoryCompletion(1); // 盘点确认的组盘
log.info("构建WCS请求数据完成 - rqrq,taskNo: {}, itemNo: {}, palletType: {}, basePalletType: {}",
taskNo, itemNo, palletTypeInfo.getWcsPalletType(), palletTypeInfo.getWcsBasePalletType());
// 4. 调用WCS接口 - rqrq
wcsApiService.pushZuPanApi(dto);
log.info("推送盘点完成数据给WCS成功 - rqrq,palletId: {}", palletId);
} catch (Exception e) {
log.error("推送盘点完成数据给WCS失败 - rqrq,palletId: {}, 错误: {}", palletId, e.getMessage());
// 失败时抛出异常让事务回滚 - rqrq
throw new RuntimeException("推送盘点完成数据给WCS失败: " + e.getMessage());
}
}
private void handleTaskAfterCount(String site, String countNo, String palletId, String username) {
// 1. 查询该栈板关联的任务号 - rqrq
String taskNo = baseMapper.getTaskNoByPallet(site, countNo, palletId);

9
src/main/resources/mapper/check/PhysicalInventoryMapper.xml

@ -1041,4 +1041,13 @@
AND source_bill_no = #{countNo}
</select>
<!-- rqrq - 根据任务号和栈板号获取任务单行号 -->
<select id="getItemNoByTaskAndPallet" resultType="java.lang.Integer">
SELECT item_no
FROM wms_order_task_detail WITH (NOLOCK)
WHERE site = #{site}
AND task_no = #{taskNo}
AND pallet_id = #{palletId}
</select>
</mapper>
Loading…
Cancel
Save