Browse Source

2026-01-29

pda采购入库增加关联单号和关联单行号
master
fengyuan_yang 5 months ago
parent
commit
705518b7e5
  1. 46
      src/main/java/com/gaotao/modules/inboundNotification/controller/InboundNotificationController.java
  2. 19
      src/main/java/com/gaotao/modules/inboundNotification/dao/InboundNotificationHeadMapper.java
  3. 24
      src/main/java/com/gaotao/modules/inboundNotification/service/InboundNotificationService.java
  4. 30
      src/main/java/com/gaotao/modules/inboundNotification/service/impl/InboundNotificationServiceImpl.java
  5. 41
      src/main/resources/mapper/inboundNotification/InboundNotificationHeadMapper.xml

46
src/main/java/com/gaotao/modules/inboundNotification/controller/InboundNotificationController.java

@ -87,8 +87,11 @@ public class InboundNotificationController extends AbstractController {
return R.error("仓库ID不能为空"); return R.error("仓库ID不能为空");
} }
String relatedOrderNo = (String) params.get("relatedOrderNo");
String relatedOrderLineNo = (String) params.get("relatedOrderLineNo");
Map<String, Object> result = inboundNotificationService.getInboundDetails( Map<String, Object> result = inboundNotificationService.getInboundDetails(
inboundNo, warehouseId,site,buNo);
inboundNo, warehouseId, site, buNo, relatedOrderNo, relatedOrderLineNo);
if (result == null || result.isEmpty()) { if (result == null || result.isEmpty()) {
return R.error("未找到入库单详情"); return R.error("未找到入库单详情");
@ -134,9 +137,12 @@ public class InboundNotificationController extends AbstractController {
return R.error("操作类型不能为空"); return R.error("操作类型不能为空");
} }
String relatedOrderNo = (String) params.get("relatedOrderNo");
String relatedOrderLineNo = (String) params.get("relatedOrderLineNo");
String userName = getUser().getUsername(); String userName = getUser().getUsername();
Map<String, Object> result = inboundNotificationService.validateLabelWithInbound( Map<String, Object> result = inboundNotificationService.validateLabelWithInbound(
site, buNo, inboundNo, labelCode, operationType, userName, warehouseId);
site, buNo, inboundNo, labelCode, operationType, userName, warehouseId, relatedOrderNo, relatedOrderLineNo);
return R.ok().put("data", result); return R.ok().put("data", result);
} catch (Exception e) { } catch (Exception e) {
logger.error("标签验证失败", e); logger.error("标签验证失败", e);
@ -155,6 +161,8 @@ public class InboundNotificationController extends AbstractController {
String locationCode = (String) params.get("locationCode"); String locationCode = (String) params.get("locationCode");
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 relatedOrderNo = (String) params.get("relatedOrderNo");
String relatedOrderLineNo = (String) params.get("relatedOrderLineNo");
if (inboundNo == null || inboundNo.trim().isEmpty()) { if (inboundNo == null || inboundNo.trim().isEmpty()) {
return R.error("入库单号不能为空"); return R.error("入库单号不能为空");
@ -171,7 +179,7 @@ public class InboundNotificationController extends AbstractController {
String userName = getUser().getUsername(); String userName = getUser().getUsername();
boolean success = inboundNotificationService.confirmInboundStorage( boolean success = inboundNotificationService.confirmInboundStorage(
site, buNo, inboundNo, locationCode, userName);
site, buNo, inboundNo, locationCode, userName, relatedOrderNo, relatedOrderLineNo);
if (success) { if (success) {
return R.ok("上架成功"); return R.ok("上架成功");
} else { } else {
@ -312,6 +320,38 @@ public class InboundNotificationController extends AbstractController {
} }
} }
/**
* 获取采购入库通知单明细列表小卡片
* 返回关联单号和行号等信息
*/
@PostMapping("getInboundNotificationDetails")
public R getInboundNotificationDetails(@RequestBody Map<String, Object> params) {
try {
String site = (String) params.get("site");
String buNo = (String) params.get("buNo");
String orderNo = (String) params.get("orderNo");
if (site == null || site.trim().isEmpty()) {
return R.error("站点不能为空");
}
if (buNo == null || buNo.trim().isEmpty()) {
return R.error("业务单元不能为空");
}
if (orderNo == null || orderNo.trim().isEmpty()) {
return R.error("入库单号不能为空");
}
List<Map<String, Object>> detailList = inboundNotificationService.getInboundNotificationDetails(site, buNo, orderNo);
return R.ok().put("data", detailList);
} catch (Exception e) {
logger.error("获取采购入库通知单明细列表失败", e);
return R.error("获取采购入库通知单明细列表失败: " + e.getMessage());
}
}
// =========================== PC =========================== // =========================== PC ===========================

19
src/main/java/com/gaotao/modules/inboundNotification/dao/InboundNotificationHeadMapper.java

@ -32,12 +32,18 @@ public interface InboundNotificationHeadMapper extends BaseMapper<InboundNotific
* 获取入库单详情 * 获取入库单详情
* @param orderNo 入库单号 * @param orderNo 入库单号
* @param warehouseId 仓库ID * @param warehouseId 仓库ID
* @param site 站点
* @param buNo 业务单元
* @param relatedOrderNo 关联单号
* @param relatedOrderLineNo 关联行号
* @return 入库单详情 * @return 入库单详情
*/ */
Map<String, Object> getInboundDetails(@Param("orderNo") String orderNo, Map<String, Object> getInboundDetails(@Param("orderNo") String orderNo,
@Param("warehouseId") String warehouseId, @Param("warehouseId") String warehouseId,
@Param("site") String site, @Param("site") String site,
@Param("buNo") String buNo);
@Param("buNo") String buNo,
@Param("relatedOrderNo") String relatedOrderNo,
@Param("relatedOrderLineNo") String relatedOrderLineNo);
/** /**
* 更新入库单状态 * 更新入库单状态
@ -139,4 +145,15 @@ public interface InboundNotificationHeadMapper extends BaseMapper<InboundNotific
* 调用存储过程 UspImportRoll * 调用存储过程 UspImportRoll
*/ */
Map<String, Object> callUspImportRoll(Map<String, Object> params); Map<String, Object> callUspImportRoll(Map<String, Object> params);
/**
* 获取采购入库通知单明细列表小卡片
* @param site 站点
* @param buNo 业务单元
* @param orderNo 入库单号
* @return 明细列表包含关联单号和行号
*/
List<Map<String, Object>> getInboundNotificationDetails(@Param("site") String site,
@Param("buNo") String buNo,
@Param("orderNo") String orderNo);
} }

24
src/main/java/com/gaotao/modules/inboundNotification/service/InboundNotificationService.java

@ -24,9 +24,13 @@ public interface InboundNotificationService {
* 获取入库单详情 * 获取入库单详情
* @param orderNo 入库单号 * @param orderNo 入库单号
* @param warehouseId 仓库ID * @param warehouseId 仓库ID
* @param site 站点
* @param buNo 业务单元
* @param relatedOrderNo 关联单号
* @param relatedOrderLineNo 关联行号
* @return 入库单详情 * @return 入库单详情
*/ */
Map<String, Object> getInboundDetails(String orderNo, String warehouseId,String site, String buNo);
Map<String, Object> getInboundDetails(String orderNo, String warehouseId, String site, String buNo, String relatedOrderNo, String relatedOrderLineNo);
/** /**
* 验证标签与入库单是否匹配通过存储过程 * 验证标签与入库单是否匹配通过存储过程
@ -36,9 +40,12 @@ public interface InboundNotificationService {
* @param labelCode 标签条码 * @param labelCode 标签条码
* @param operationType 操作类型 I-添加 D-移除 * @param operationType 操作类型 I-添加 D-移除
* @param userName 当前登录人 * @param userName 当前登录人
* @param warehouseId 仓库ID
* @param relatedOrderNo 关联单号
* @param relatedOrderLineNo 关联行号
* @return 标签信息 * @return 标签信息
*/ */
Map<String, Object> validateLabelWithInbound(String site, String buNo, String inboundNo, String labelCode, String operationType, String userName, String warehouseId);
Map<String, Object> validateLabelWithInbound(String site, String buNo, String inboundNo, String labelCode, String operationType, String userName, String warehouseId, String relatedOrderNo, String relatedOrderLineNo);
/** /**
* 确认入库上架通过存储过程 * 确认入库上架通过存储过程
@ -47,9 +54,11 @@ public interface InboundNotificationService {
* @param inboundNo 入库单号 * @param inboundNo 入库单号
* @param locationCode 库位号 * @param locationCode 库位号
* @param userName 当前登录人 * @param userName 当前登录人
* @param relatedOrderNo 关联单号
* @param relatedOrderLineNo 关联行号
* @return 处理结果 * @return 处理结果
*/ */
boolean confirmInboundStorage(String site, String buNo, String inboundNo, String locationCode, String userName);
boolean confirmInboundStorage(String site, String buNo, String inboundNo, String locationCode, String userName, String relatedOrderNo, String relatedOrderLineNo);
/** /**
* 获取物料清单 * 获取物料清单
@ -139,4 +148,13 @@ public interface InboundNotificationService {
* @return 处理结果 "200"成功 "400"失败 * @return 处理结果 "200"成功 "400"失败
*/ */
String labelImport(String site, String buNo, String orderNo, String orderType, List<Map<String, Object>> dataList); String labelImport(String site, String buNo, String orderNo, String orderType, List<Map<String, Object>> dataList);
/**
* 获取采购入库通知单明细列表小卡片
* @param site 站点
* @param buNo 业务单元
* @param orderNo 入库单号
* @return 明细列表包含关联单号和行号
*/
List<Map<String, Object>> getInboundNotificationDetails(String site, String buNo, String orderNo);
} }

30
src/main/java/com/gaotao/modules/inboundNotification/service/impl/InboundNotificationServiceImpl.java

@ -78,21 +78,21 @@ public class InboundNotificationServiceImpl implements InboundNotificationServic
} }
@Override @Override
public Map<String, Object> getInboundDetails(String orderNo, String warehouseId,String site, String buNo) {
return headMapper.getInboundDetails(orderNo, warehouseId,site,buNo);
public Map<String, Object> getInboundDetails(String orderNo, String warehouseId, String site, String buNo, String relatedOrderNo, String relatedOrderLineNo) {
return headMapper.getInboundDetails(orderNo, warehouseId, site, buNo, relatedOrderNo, relatedOrderLineNo);
} }
@Override @Override
public Map<String, Object> validateLabelWithInbound(String site, String buNo, String inboundNo, String labelCode, String operationType, String userName, String warehouseId) {
logger.info("开始验证标签,标签条码: {}, 入库单号: {}, 操作类型: {}, 仓库: {}", labelCode, inboundNo, operationType, warehouseId);
public Map<String, Object> validateLabelWithInbound(String site, String buNo, String inboundNo, String labelCode, String operationType, String userName, String warehouseId, String relatedOrderNo, String relatedOrderLineNo) {
logger.info("开始验证标签,标签条码: {}, 入库单号: {}, 操作类型: {}, 仓库: {}, 关联单号: {}, 关联行号: {}", labelCode, inboundNo, operationType, warehouseId, relatedOrderNo, relatedOrderLineNo);
// 调用存储过程 GetScanLabelVerification // 调用存储过程 GetScanLabelVerification
List<Object> params = new ArrayList<>(); List<Object> params = new ArrayList<>();
params.add(site); // 参数1: site params.add(site); // 参数1: site
params.add(buNo); // 参数2: buNo params.add(buNo); // 参数2: buNo
params.add(inboundNo); // 参数3: 入库单号 params.add(inboundNo); // 参数3: 入库单号
params.add(""); // 参数4: 空字符串
params.add(""); // 参数5: 空字符串
params.add(relatedOrderNo != null ? relatedOrderNo : ""); // 参数4: 关联单号
params.add(relatedOrderLineNo != null ? relatedOrderLineNo : ""); // 参数5: 关联行号
params.add(""); // 参数6: 空字符串 params.add(""); // 参数6: 空字符串
params.add(""); // 参数7: 空字符串 params.add(""); // 参数7: 空字符串
params.add(labelCode); // 参数8: 扫描的标签条码 params.add(labelCode); // 参数8: 扫描的标签条码
@ -123,8 +123,8 @@ public class InboundNotificationServiceImpl implements InboundNotificationServic
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean confirmInboundStorage(String site, String buNo, String inboundNo, String locationCode, String userName) {
logger.info("开始确认入库上架,入库单号: {}, 库位号: {}", inboundNo, locationCode);
public boolean confirmInboundStorage(String site, String buNo, String inboundNo, String locationCode, String userName, String relatedOrderNo, String relatedOrderLineNo) {
logger.info("开始确认入库上架,入库单号: {}, 库位号: {}, 关联单号: {}, 关联行号: {}", inboundNo, locationCode, relatedOrderNo, relatedOrderLineNo);
try { try {
// 调用存储过程 GetSaveLabelVerification // 调用存储过程 GetSaveLabelVerification
@ -132,8 +132,8 @@ public class InboundNotificationServiceImpl implements InboundNotificationServic
params.add(site); // 参数1: site params.add(site); // 参数1: site
params.add(buNo); // 参数2: buNo params.add(buNo); // 参数2: buNo
params.add(inboundNo); // 参数3: 入库单号 params.add(inboundNo); // 参数3: 入库单号
params.add(""); // 参数4: 空字符串
params.add(""); // 参数5: 空字符串
params.add(relatedOrderNo != null ? relatedOrderNo : ""); // 参数4: 关联单号
params.add(relatedOrderLineNo != null ? relatedOrderLineNo : ""); // 参数5: 关联行号
params.add(""); // 参数6: 空字符串 params.add(""); // 参数6: 空字符串
params.add(""); // 参数7: 空字符串 params.add(""); // 参数7: 空字符串
params.add(locationCode); // 参数8: 入库库位 params.add(locationCode); // 参数8: 入库库位
@ -186,7 +186,7 @@ public class InboundNotificationServiceImpl implements InboundNotificationServic
logger.info("开始处理库存数据,入库单号: {}, 仓库ID: {}, 标签数量: {}", orderNo, warehouseId, labels.size()); logger.info("开始处理库存数据,入库单号: {}, 仓库ID: {}, 标签数量: {}", orderNo, warehouseId, labels.size());
// 获取物料基本信息 // 获取物料基本信息
Map<String, Object> materialInfo = headMapper.getInboundDetails(orderNo, warehouseId, site,buNo);
Map<String, Object> materialInfo = headMapper.getInboundDetails(orderNo, warehouseId, site, buNo, null, null);
if (materialInfo == null) { if (materialInfo == null) {
logger.error("获取物料信息失败,入库单号: {}", orderNo); logger.error("获取物料信息失败,入库单号: {}", orderNo);
throw new RuntimeException("获取物料信息失败"); throw new RuntimeException("获取物料信息失败");
@ -883,4 +883,12 @@ public class InboundNotificationServiceImpl implements InboundNotificationServic
} }
} }
/**
* 获取采购入库通知单明细列表小卡片
*/
@Override
public List<Map<String, Object>> getInboundNotificationDetails(String site, String buNo, String orderNo) {
return headMapper.getInboundNotificationDetails(site, buNo, orderNo);
}
} }

41
src/main/resources/mapper/inboundNotification/InboundNotificationHeadMapper.xml

@ -11,6 +11,8 @@
h.bu_no AS buNo, h.bu_no AS buNo,
'' AS batchNo, '' AS batchNo,
h.required_inbound_date AS inspectionDate, h.required_inbound_date AS inspectionDate,
d.related_order_no AS relatedOrderNo,
d.related_order_line_no AS relatedOrderLineNo,
SUM(CASE WHEN pr.hardtag_in_flag = '已入库' THEN 1 ELSE 0 END) AS labelinCount, -- 已入库标签数 SUM(CASE WHEN pr.hardtag_in_flag = '已入库' THEN 1 ELSE 0 END) AS labelinCount, -- 已入库标签数
COUNT(DISTINCT pr.roll_no) AS totalLabels, -- 需入库标签数 COUNT(DISTINCT pr.roll_no) AS totalLabels, -- 需入库标签数
SUM(CASE WHEN pr.hardtag_in_flag = '已入库' THEN ISNULL(pr.roll_qty, 0) ELSE 0 END) AS totalinLabels, -- 已入库物料总数 SUM(CASE WHEN pr.hardtag_in_flag = '已入库' THEN ISNULL(pr.roll_qty, 0) ELSE 0 END) AS totalinLabels, -- 已入库物料总数
@ -29,7 +31,7 @@
<!-- <if test="searchCode == null or searchCode == ''">--> <!-- <if test="searchCode == null or searchCode == ''">-->
<!-- AND CONVERT(DATE, h.required_inbound_date) = CONVERT(DATE, GETDATE())--> <!-- AND CONVERT(DATE, h.required_inbound_date) = CONVERT(DATE, GETDATE())-->
<!-- </if>--> <!-- </if>-->
GROUP BY h.site,h.bu_no,h.order_no,h.required_inbound_date ,D.required_qty
GROUP BY h.site,h.bu_no,h.order_no,h.required_inbound_date,D.required_qty,d.related_order_no,d.related_order_line_no
ORDER BY h.required_inbound_date DESC ORDER BY h.required_inbound_date DESC
</select> </select>
@ -43,6 +45,8 @@
h.bu_no as buNo, h.bu_no as buNo,
'' as batchNo, '' as batchNo,
h.required_inbound_date as inspectionDate, h.required_inbound_date as inspectionDate,
d.related_order_no as relatedOrderNo,
d.related_order_line_no as relatedOrderLineNo,
SUM(CASE WHEN hardtag_in_flag = '已入库' then 1 else 0 end) labelinCount, --已入库标签数 SUM(CASE WHEN hardtag_in_flag = '已入库' then 1 else 0 end) labelinCount, --已入库标签数
COUNT(DISTINCT pr.roll_no) as totalLabels , --需入库标签数 COUNT(DISTINCT pr.roll_no) as totalLabels , --需入库标签数
SUM(CASE WHEN hardtag_in_flag = '已入库' then CAST(roll_qty AS float) else 0 end) totalinLabels,--已入库物料总数 SUM(CASE WHEN hardtag_in_flag = '已入库' then CAST(roll_qty AS float) else 0 end) totalinLabels,--已入库物料总数
@ -54,7 +58,13 @@
h.site = #{site} h.site = #{site}
AND h.bu_no = #{buNo} AND h.bu_no = #{buNo}
AND h.order_no = #{orderNo} AND h.order_no = #{orderNo}
GROUP BY h.order_no, h.site, h.bu_no, h.required_inbound_date,D.required_qty
<if test="relatedOrderNo != null and relatedOrderNo != ''">
AND d.related_order_no = #{relatedOrderNo}
</if>
<if test="relatedOrderLineNo != null and relatedOrderLineNo != ''">
AND d.related_order_line_no = #{relatedOrderLineNo}
</if>
GROUP BY h.order_no, h.site, h.bu_no, h.required_inbound_date,D.required_qty,d.related_order_no,d.related_order_line_no
</select> </select>
<!-- 更新入库单状态 --> <!-- 更新入库单状态 -->
@ -294,4 +304,31 @@
#{orderNo}, #{orderNo},
#{orderType} #{orderType}
</select> </select>
<!-- 获取采购入库通知单明细列表(小卡片) -->
<select id="getInboundNotificationDetails" resultType="map">
SELECT
a.order_no AS orderNo,
b.order_qty AS orderQty,
SUM(b.required_qty) AS requiredQty,
b.part_no AS partNo,
b.part_desc AS partDesc,
c.UMName AS umName,
b.related_order_no AS relatedOrderNo,
b.related_order_line_no AS relatedOrderLineNo
FROM inbound_notification_head a
INNER JOIN inbound_notification_detail b
ON a.site = b.site
AND a.bu_no = b.bu_no
AND a.order_no = b.order_no
LEFT JOIN UM c
ON c.site = b.site
AND c.UMID = b.unit
WHERE a.site = #{site}
AND a.bu_no = #{buNo}
AND a.order_no = #{orderNo}
AND a.order_type = '采购入库'
AND a.order_status = '待入库'
GROUP BY a.order_no,b.part_no,b.part_desc,c.UMName,b.related_order_no,b.related_order_line_no,b.order_qty
</select>
</mapper> </mapper>
Loading…
Cancel
Save