Browse Source

2025-11-03

pda调整扫描、查询、确认逻辑(生产领料)
master
fengyuan_yang 7 months ago
parent
commit
6ef4713bb1
  1. 84
      src/main/java/com/gaotao/modules/productionPicking/controller/ProductionPickingController.java
  2. 8
      src/main/java/com/gaotao/modules/productionPicking/dao/ProductionPickingMapper.java
  3. 36
      src/main/java/com/gaotao/modules/productionPicking/service/ProductionPickingService.java
  4. 156
      src/main/java/com/gaotao/modules/productionPicking/service/impl/ProductionPickingServiceImpl.java
  5. 8
      src/main/resources/mapper/orderIssure/IssureNotifyMapper.xml
  6. 20
      src/main/resources/mapper/productionPicking/ProductionPickingMapper.xml

84
src/main/java/com/gaotao/modules/productionPicking/controller/ProductionPickingController.java

@ -2,8 +2,10 @@ package com.gaotao.modules.productionPicking.controller;
import com.gaotao.common.utils.R; import com.gaotao.common.utils.R;
import com.gaotao.modules.productionPicking.service.ProductionPickingService; import com.gaotao.modules.productionPicking.service.ProductionPickingService;
import com.gaotao.modules.sys.entity.SysUserEntity;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.shiro.SecurityUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -84,7 +86,7 @@ public class ProductionPickingController {
} }
/** /**
* 验证标签与出库单是否匹配
* 验证标签通过存储过程
*/ */
@PostMapping("/outbound/validateLabel") @PostMapping("/outbound/validateLabel")
@ApiOperation("验证标签与出库单是否匹配") @ApiOperation("验证标签与出库单是否匹配")
@ -92,13 +94,30 @@ public class ProductionPickingController {
try { try {
String labelCode = (String) params.get("labelCode"); String labelCode = (String) params.get("labelCode");
String outboundNo = (String) params.get("outboundNo"); String outboundNo = (String) params.get("outboundNo");
String warehouseId = (String) params.get("warehouseId");
String relatedNo = (String) params.get("relatedNo");
String site = (String) params.get("site"); String site = (String) params.get("site");
String buNo = (String) params.get("buNo"); String buNo = (String) params.get("buNo");
String relatedNo = (String) params.get("relatedNo");
String operationType = (String) params.get("operationType");
if (labelCode == null || labelCode.trim().isEmpty()) {
return R.error("标签条码不能为空");
}
if (outboundNo == null || outboundNo.trim().isEmpty()) {
return R.error("出库单号不能为空");
}
if (operationType == null || operationType.trim().isEmpty()) {
operationType = "I"; // 默认为添加
}
logger.info("验证标签,标签码: {}, 出库单号: {}, 仓库: {}, 站点: {}, 业务单元: {}", labelCode, outboundNo, warehouseId, site, buNo);
List<Map<String, Object>> result = productionPickingService.validateLabelWithOutbound(labelCode, outboundNo, warehouseId, site, buNo, relatedNo);
// 获取当前登录用户
SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
String userName = sysUserEntity.getUsername();
logger.info("验证生产领料标签,标签码: {}, 出库单号: {}, 关联单号: {}, 操作类型: {}", labelCode, outboundNo, relatedNo, operationType);
Map<String, Object> result = productionPickingService.validateLabelWithOutbound(
site, buNo, outboundNo, relatedNo, labelCode, operationType, userName);
return R.ok().put("data", result); return R.ok().put("data", result);
} catch (Exception e) { } catch (Exception e) {
logger.error("标签验证失败", e); logger.error("标签验证失败", e);
@ -107,7 +126,7 @@ public class ProductionPickingController {
} }
/** /**
* 确认生产领料
* 确认生产领料通过存储过程
*/ */
@PostMapping("/outbound/confirm") @PostMapping("/outbound/confirm")
@ApiOperation("确认生产领料") @ApiOperation("确认生产领料")
@ -116,13 +135,24 @@ public class ProductionPickingController {
String site = (String) params.get("site"); String site = (String) params.get("site");
String buNo = (String) params.get("buNo"); String buNo = (String) params.get("buNo");
String outboundNo = (String) params.get("outboundNo"); String outboundNo = (String) params.get("outboundNo");
String warehouseId = (String) params.get("warehouseId");
String relatedNo = (String) params.get("relatedNo"); String relatedNo = (String) params.get("relatedNo");
List<Map<String, Object>> labels = (List<Map<String, Object>>) params.get("labels");
String locationCode = (String) params.get("locationCode");
if (outboundNo == null || outboundNo.trim().isEmpty()) {
return R.error("出库单号不能为空");
}
if (locationCode == null || locationCode.trim().isEmpty()) {
return R.error("库位号不能为空");
}
// 获取当前登录用户
SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
String userName = sysUserEntity.getUsername();
logger.info("确认生产领料,出库单号: {}, 业务单元: {}, 仓库: {}, 标签数量: {}", outboundNo, buNo, warehouseId, labels != null ? labels.size() : 0);
logger.info("确认生产领料,出库单号: {}, 业务单元: {}, 关联单号: {}", outboundNo, buNo, relatedNo);
boolean success = productionPickingService.confirmProductionPicking(site, buNo, outboundNo, warehouseId, labels, relatedNo);
boolean success = productionPickingService.confirmProductionPicking(
site, buNo, outboundNo, relatedNo, locationCode, userName);
if (success) { if (success) {
return R.ok("领料成功"); return R.ok("领料成功");
} else { } else {
@ -185,4 +215,38 @@ public class ProductionPickingController {
return R.error("获取物料明细失败: " + e.getMessage()); return R.error("获取物料明细失败: " + e.getMessage());
} }
} }
/**
* 获取已扫描标签列表从缓存表
*/
@PostMapping("/outbound/getScannedLabelList")
@ApiOperation("获取已扫描标签列表")
public R getScannedLabelList(@RequestBody Map<String, Object> params) {
try {
String site = (String) params.get("site");
String buNo = (String) params.get("buNo");
String outboundNo = (String) params.get("outboundNo");
String relatedNo = (String) params.get("relatedNo");
if (site == null || site.trim().isEmpty()) {
return R.error("站点不能为空");
}
if (buNo == null || buNo.trim().isEmpty()) {
return R.error("业务单元不能为空");
}
if (outboundNo == null || outboundNo.trim().isEmpty()) {
return R.error("出库单号不能为空");
}
List<Map<String, Object>> labelList = productionPickingService.getScannedLabelList(
site, buNo, outboundNo, relatedNo);
return R.ok().put("data", labelList);
} catch (Exception e) {
logger.error("获取已扫描标签列表失败", e);
return R.error("获取已扫描标签列表失败: " + e.getMessage());
}
}
} }

8
src/main/java/com/gaotao/modules/productionPicking/dao/ProductionPickingMapper.java

@ -76,4 +76,12 @@ public interface ProductionPickingMapper {
void updateSoBomPickedQty(@Param("site") String site, @Param("relatedNo") String relatedNo, @Param("partNo") String partno, @Param("transQty") BigDecimal transqty); void updateSoBomPickedQty(@Param("site") String site, @Param("relatedNo") String relatedNo, @Param("partNo") String partno, @Param("transQty") BigDecimal transqty);
/**
* 获取已扫描标签列表从缓存表
*/
List<Map<String, Object>> getScannedLabelList(@Param("site") String site,
@Param("buNo") String buNo,
@Param("outboundNo") String outboundNo,
@Param("relatedNo") String relatedNo);
} }

36
src/main/java/com/gaotao/modules/productionPicking/service/ProductionPickingService.java

@ -20,16 +20,32 @@ public interface ProductionPickingService {
Map<String, Object> getOutboundDetails(String outboundNo, String buNo, String warehouseId, String site, String relatedNo); Map<String, Object> getOutboundDetails(String outboundNo, String buNo, String warehouseId, String site, String relatedNo);
/** /**
* 验证标签与出库单是否匹配并检查库存
* 验证标签通过存储过程
* @param site 站点
* @param buNo 业务单元
* @param outboundNo 出库单号
* @param relatedNo 关联单号
* @param labelCode 标签条码
* @param operationType 操作类型 I-添加 D-移除
* @param userName 当前登录人
* @return 标签信息
*/ */
List<Map<String, Object>> validateLabelWithOutbound(String labelCode, String outboundNo,
String warehouseId, String site, String buNo, String relatedNo);
Map<String, Object> validateLabelWithOutbound(String site, String buNo, String outboundNo,
String relatedNo, String labelCode,
String operationType, String userName);
/** /**
* 确认生产领料
* 确认生产领料通过存储过程
* @param site 站点
* @param buNo 业务单元
* @param outboundNo 出库单号
* @param relatedNo 关联单号
* @param locationCode 库位号
* @param userName 当前登录人
* @return 处理结果
*/ */
boolean confirmProductionPicking(String site, String buNo, String outboundNo, boolean confirmProductionPicking(String site, String buNo, String outboundNo,
String warehouseId, List<Map<String, Object>> labels, String relatedNo);
String relatedNo, String locationCode, String userName);
/** /**
* 获取出库单物料清单 * 获取出库单物料清单
@ -40,4 +56,14 @@ public interface ProductionPickingService {
* 获取出库单物料明细列表 * 获取出库单物料明细列表
*/ */
List<Map<String, Object>> getOutboundMaterialDetails(String site, String outboundNo); List<Map<String, Object>> getOutboundMaterialDetails(String site, String outboundNo);
/**
* 获取已扫描标签列表从缓存表
* @param site 站点
* @param buNo 业务单元
* @param outboundNo 出库单号
* @param relatedNo 关联单号
* @return 已扫描标签列表
*/
List<Map<String, Object>> getScannedLabelList(String site, String buNo, String outboundNo, String relatedNo);
} }

156
src/main/java/com/gaotao/modules/productionPicking/service/impl/ProductionPickingServiceImpl.java

@ -6,6 +6,7 @@ import com.gaotao.modules.productionPicking.service.ProductionPickingService;
import com.gaotao.modules.inventoryStock.entity.InventoryStock; import com.gaotao.modules.inventoryStock.entity.InventoryStock;
import com.gaotao.modules.inventoryStock.service.InventoryStockService; import com.gaotao.modules.inventoryStock.service.InventoryStockService;
import com.gaotao.modules.productionPicking.service.StockTransactionLogService; import com.gaotao.modules.productionPicking.service.StockTransactionLogService;
import com.gaotao.modules.schedule.mapper.ProcedureMapper;
import com.gaotao.modules.sys.entity.SysUserEntity; import com.gaotao.modules.sys.entity.SysUserEntity;
import com.gaotao.modules.trans.entity.TransDetail; import com.gaotao.modules.trans.entity.TransDetail;
import com.gaotao.modules.trans.entity.TransDetailDto; import com.gaotao.modules.trans.entity.TransDetailDto;
@ -50,6 +51,8 @@ public class ProductionPickingServiceImpl implements ProductionPickingService {
@Autowired @Autowired
private StockTransactionLogService stockTransactionLogService; private StockTransactionLogService stockTransactionLogService;
@Autowired
private ProcedureMapper procedureMapper;
@Override @Override
public List<Map<String, Object>> getOutboundList(String site, String warehouseId, String searchCode, String status) { public List<Map<String, Object>> getOutboundList(String site, String warehouseId, String searchCode, String status) {
@ -65,48 +68,120 @@ public class ProductionPickingServiceImpl implements ProductionPickingService {
} }
@Override @Override
public List<Map<String, Object>> validateLabelWithOutbound(String labelCode, String outboundNo, String warehouseId, String site, String buNo, String relatedNo) {
logger.info("验证标签与出库单匹配,标签码: {}, 出库单号: {}, 仓库: {}, 站点: {}, 业务单元: {}", labelCode, outboundNo, warehouseId, site, buNo);
// 1. 验证标签与出库单物料是否匹配
List<Map<String, Object>> labelInfos = pickingMapper.validateLabelWithOutbound(labelCode, outboundNo, site, buNo, warehouseId, relatedNo);
if (labelInfos == null || labelInfos.isEmpty()) {
throw new RuntimeException("该标签与出库单不符,请检查");
public Map<String, Object> validateLabelWithOutbound(String site, String buNo, String outboundNo,
String relatedNo, String labelCode,
String operationType, String userName) {
logger.info("验证生产领料标签,site: {}, buNo: {}, 出库单号: {}, 关联单号: {}, 标签: {}, 操作类型: {}",
site, buNo, outboundNo, relatedNo, labelCode, operationType);
try {
// 调用存储过程 GetScanLabelVerification
List<Object> params = new ArrayList<>();
params.add(site); // 参数1: site
params.add(buNo); // 参数2: buNo
params.add(outboundNo); // 参数3: 出库单号
params.add(relatedNo); // 参数4: 关联单号
params.add(""); // 参数5: 空字符串
params.add(""); // 参数6: 空字符串
params.add(""); // 参数7: 空字符串
params.add(labelCode); // 参数8: 扫描的标签条码
params.add(""); // 参数9: 空字符串
params.add("生产领料"); // 参数10: 生产领料
params.add(operationType); // 参数11: 操作类型 I或D
params.add(userName); // 参数12: 当前登陆人
List<Map<String, Object>> resultList = procedureMapper.getProcedureData("GetScanLabelVerification", params);
// 判断返回结果
if (resultList == null || resultList.isEmpty()) {
throw new RuntimeException("存储过程调用失败");
}
Map<String, Object> result = resultList.get(0);
String code = String.valueOf(result.get("code"));
if (!"200".equals(code)) {
String msg = String.valueOf(result.get("message"));
throw new RuntimeException(msg);
}
logger.info("标签验证成功,标签: {}, 操作类型: {}", labelCode, operationType);
return result;
} catch (Exception e) {
logger.error("标签验证失败,标签: {}, 错误: {}", labelCode, e.getMessage(), e);
throw new RuntimeException(e.getMessage(), e);
} }
return labelInfos;
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean confirmProductionPicking(String site, String buNo, String outboundNo, String warehouseId, List<Map<String, Object>> labels, String relatedNo) {
logger.info("开始确认生产领料,出库单号: {}, 业务单元: {}, 仓库: {}, 标签数量: {}", outboundNo, buNo, warehouseId, labels.size());
SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
String userName = sysUserEntity.getUsername();
public boolean confirmProductionPicking(String site, String buNo, String outboundNo,
String relatedNo, String locationCode, String userName) {
logger.info("开始确认生产领料,site: {}, buNo: {}, 出库单号: {}, 关联单号: {}, 库位: {}",
site, buNo, outboundNo, relatedNo, locationCode);
try { try {
// 1. 提取标签条码列表
List<String> labelCodes = labels.stream()
.map(label -> (String) label.get("labelCode"))
.collect(Collectors.toList());
// 2. 更新WMS库存表中的标签状态生产领料直接操作库存
updateInventoryStockStatus(labels, site, buNo, warehouseId, outboundNo);
// // 3. 更新出库单状态
// int updatedHead = pickingMapper.updateOutboundStatus(outboundNo, buNo, "已出库", site);
// if (updatedHead == 0) {
// throw new RuntimeException("出库单状态更新失败");
// }
// 4. 生成WMS出库记录
generateOutboundTransaction(outboundNo, warehouseId, labels, site, buNo, relatedNo, userName);
logger.info("生产领料确认完成,出库单号: {}, 处理标签数: {}", outboundNo, labels.size());
// 调用存储过程 GetSaveLabelVerification
List<Object> params = new ArrayList<>();
params.add(site); // 参数1: site
params.add(buNo); // 参数2: buNo
params.add(outboundNo); // 参数3: 出库单号
params.add(relatedNo); // 参数4: 关联单号
params.add(""); // 参数5: 空字符串
params.add(""); // 参数6: 空字符串
params.add(""); // 参数7: 空字符串
params.add(locationCode); // 参数8: 库位
params.add("生产领料"); // 参数9: 生产领料
params.add(userName); // 参数10: 当前登陆人
List<Map<String, Object>> resultList = procedureMapper.getProcedureData("GetSaveLabelVerification", params);
// 判断返回结果
if (resultList == null || resultList.isEmpty()) {
throw new RuntimeException("存储过程调用失败");
}
Map<String, Object> result = resultList.get(0);
String code = String.valueOf(result.get("code"));
if (!"200".equals(code)) {
String msg = String.valueOf(result.get("message"));
throw new RuntimeException(msg);
}
logger.info("生产领料确认成功,出库单号: {}", outboundNo);
return true; return true;
} catch (Exception e) { } catch (Exception e) {
logger.error("生产领料确认失败,出库单号: {}, 错误信息: {}", outboundNo, e.getMessage(), e);
logger.error("生产领料确认失败,出库单号: {}, 错误: {}", outboundNo, e.getMessage(), e);
throw new RuntimeException(e.getMessage(), e); throw new RuntimeException(e.getMessage(), e);
} }
} }
// 保留原有的实现方法作为注释以防需要
// private boolean confirmProductionPickingOld(String site, String buNo, String outboundNo, String warehouseId, List<Map<String, Object>> labels, String relatedNo) {
// logger.info("开始确认生产领料(旧方法),出库单号: {}, 业务单元: {}, 仓库: {}, 标签数量: {}", outboundNo, buNo, warehouseId, labels.size());
// SysUserEntity sysUserEntity = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
// String userName = sysUserEntity.getUsername();
//
// try {
// // 1. 提取标签条码列表
// List<String> labelCodes = labels.stream()
// .map(label -> (String) label.get("labelCode"))
// .collect(Collectors.toList());
//
// // 2. 更新WMS库存表中的标签状态生产领料直接操作库存
// updateInventoryStockStatus(labels, site, buNo, warehouseId, outboundNo);
//
// // 3. 生成WMS出库记录
// generateOutboundTransaction(outboundNo, warehouseId, labels, site, buNo, relatedNo, userName);
// logger.info("生产领料确认完成,出库单号: {}, 处理标签数: {}", outboundNo, labels.size());
// return true;
// } catch (Exception e) {
// logger.error("生产领料确认失败,出库单号: {}, 错误信息: {}", outboundNo, e.getMessage(), e);
// throw new RuntimeException(e.getMessage(), e);
// }
// }
@Override @Override
public List<Map<String, Object>> getMaterialList(String site, String buNo, String outboundNo, String warehouseId, String relatedNo) { public List<Map<String, Object>> getMaterialList(String site, String buNo, String outboundNo, String warehouseId, String relatedNo) {
logger.info("获取出库单物料清单,站点: {}, 业务单元: {}, 出库单号: {}", site, buNo, outboundNo); logger.info("获取出库单物料清单,站点: {}, 业务单元: {}, 出库单号: {}", site, buNo, outboundNo);
@ -385,4 +460,25 @@ public class ProductionPickingServiceImpl implements ProductionPickingService {
} }
} }
} }
@Override
public List<Map<String, Object>> getScannedLabelList(String site, String buNo, String outboundNo, String relatedNo) {
logger.info("获取已扫描标签列表,site: {}, buNo: {}, 出库单号: {}, 关联单号: {}",
site, buNo, outboundNo, relatedNo);
try {
List<Map<String, Object>> labelList = pickingMapper.getScannedLabelList(
site, buNo, outboundNo, relatedNo);
if (labelList == null) {
labelList = new ArrayList<>();
}
logger.info("获取已扫描标签列表成功,共 {} 条记录", labelList.size());
return labelList;
} catch (Exception e) {
logger.error("获取已扫描标签列表失败,错误: {}", e.getMessage(), e);
throw new RuntimeException("获取已扫描标签列表失败: " + e.getMessage(), e);
}
}
} }

8
src/main/resources/mapper/orderIssure/IssureNotifyMapper.xml

@ -347,18 +347,18 @@ RecordVersion,OutWorkOrderFlag,ProjectID,OrderType,AuthRuleID,bu)
A.NotifyNo, A.NotifyNo,
a.ComponentPartNo, a.ComponentPartNo,
sum(a.QtyToIssue) QtyToIssue, sum(a.QtyToIssue) QtyToIssue,
dbo.Get_InboundQty(a.site, B.bu, a.NotifyNo, a.ComponentPartNo, 'SI') as QtyToIssue_Original,
dbo.Get_InboundQty(a.site, B.bu, a.NotifyNo, SOOrderNo,SeqNo, 'soi') as QtyToIssue_Original,
dbo.Get_PartDesc(a.site,a.ComponentPartNo) partDesc, dbo.Get_PartDesc(a.site,a.ComponentPartNo) partDesc,
a.issueType, a.issueType,
a.warehouse_id, a.warehouse_id,
W.WareHouseName AS warehouseName W.WareHouseName AS warehouseName
from SOIssueNotifyHeader B from SOIssueNotifyHeader B
INNER JOIN SOIssueNotifyOrderMaterialList a ON A.SITE = B.SITE AND A.NotifyNo = B.NotifyNo
INNER JOIN SOIssueNotifyOrderList C ON B.SITE = C.SITE AND B.NotifyNo = C.NotifyNo
INNER JOIN SOIssueNotifyOrderMaterialList a ON A.SITE = C.SITE AND A.NotifyNo = C.NotifyNo AND A.ItemNo = C.ItemNo
left join WareHouse w on a.site = w.site and a.warehouse_id = w.WareHouseID left join WareHouse w on a.site = w.site and a.warehouse_id = w.WareHouseID
where a.NotifyNo = #{notifyNo} and a.site = #{site} and b.bu = #{bu} where a.NotifyNo = #{notifyNo} and a.site = #{site} and b.bu = #{bu}
group by a.site, a.ComponentPartNo, a.issueType , b.BU ,a.warehouse_id ,wareHouseName, a.site, b.bu, A.NotifyNo
group by a.site, a.ComponentPartNo, a.issueType , b.BU ,a.warehouse_id ,wareHouseName, a.site, b.bu, A.NotifyNo,SOOrderNo,SeqNo
order by a.issueType order by a.issueType
</select> </select>
<select id="getPartList" resultType="PartEntity" > <select id="getPartList" resultType="PartEntity" >

20
src/main/resources/mapper/productionPicking/ProductionPickingMapper.xml

@ -106,7 +106,7 @@
a.ComponentPartNo AS partNo, a.ComponentPartNo AS partNo,
P.PartDescription AS part_desc, P.PartDescription AS part_desc,
SUM(CAST(a.QtyToIssue AS float)) as requiredQty, SUM(CAST(a.QtyToIssue AS float)) as requiredQty,
dbo.Get_InboundQty(B.site, B.bu, B.NotifyNo, a.ComponentPartNo, 'SI') as pickedQty
dbo.Get_InboundQty(a.site, B.bu, a.NotifyNo, SOOrderNo,SeqNo, 'soi') as pickedQty
from SOIssueNotifyHeader B from SOIssueNotifyHeader B
INNER JOIN SOIssueNotifyOrderList C ON B.SITE = C.SITE AND B.NotifyNo = C.NotifyNo INNER JOIN SOIssueNotifyOrderList C ON B.SITE = C.SITE AND B.NotifyNo = C.NotifyNo
INNER JOIN SOIssueNotifyOrderMaterialList a ON A.SITE = C.SITE AND A.NotifyNo = C.NotifyNo AND C.ItemNo = A.ItemNo INNER JOIN SOIssueNotifyOrderMaterialList a ON A.SITE = C.SITE AND A.NotifyNo = C.NotifyNo AND C.ItemNo = A.ItemNo
@ -119,7 +119,7 @@
AND a.warehouse_id = #{warehouseId} AND a.warehouse_id = #{warehouseId}
AND B.NotifyNo = #{outboundNo} AND B.NotifyNo = #{outboundNo}
AND C.SOOrderNo = #{relatedNo} AND C.SOOrderNo = #{relatedNo}
GROUP BY b.site, b.NotifyNo, b.bu ,b.NotifyDate, a.ComponentPartNo, P.PartDescription
GROUP BY b.site, b.NotifyNo, b.bu ,b.NotifyDate, a.ComponentPartNo, P.PartDescription,SOOrderNo,SeqNo
</select> </select>
<!-- 获取出库单物料明细列表 --> <!-- 获取出库单物料明细列表 -->
@ -169,4 +169,20 @@
AND OrderNo = #{relatedNo} AND OrderNo = #{relatedNo}
AND ComponentPartNo = #{partNo} AND ComponentPartNo = #{partNo}
</update> </update>
<!-- 获取已扫描标签列表(从缓存表) -->
<select id="getScannedLabelList" resultType="java.util.Map">
SELECT
site,
bu_no as buNo,
part_no as partNo,
RollNo as labelCode,
RollQty as quantity
FROM ScannedRollTempTable
WHERE site = #{site}
AND bu_no = #{buNo}
AND NotifyNo = #{outboundNo}
AND OrderNo = #{relatedNo}
ORDER BY RollNo DESC
</select>
</mapper> </mapper>
Loading…
Cancel
Save