feat(buildpackage): 添加 BOM版本并优化退货汇总逻辑- 在 ConsignmachiningInBodyDto 中添加 BOM 版本字段

- 与妮姐确认后设置核销方式为"按 BOM 核销"
-优化 groupSummary 方法,支持按指定维度汇总
- 移除不必要的键值对,提高数据处理效率
- 更新测试用例以适应新的业务逻辑
This commit is contained in:
liuy 2025-02-13 18:23:26 +08:00
parent 215997007a
commit 748b12b405
5 changed files with 47 additions and 7 deletions

View File

@ -467,8 +467,12 @@ public class ConsignmachiningInReturn extends PluginBaseEntity {
consignmachiningInBodyDto.setVsourcerowno(u8cPoOrderDetail.getCrowno());//来源单据行号
// consignmachiningInBodyDto.setVsourcebillcode(scOrderEntity.getVordercode());//来源单据号
// consignmachiningInBodyDto.setWriteofftype("按备料发料核销");//核销方式和妮姐已经确认不用传递
//2025年2月13日 17:36:28 和妮姐电话确认核销方式永远为按BOM核销问了2遍
consignmachiningInBodyDto.setWriteofftype("按BOM核销");//核销方式和妮姐已经确认不用传递
consignmachiningInBodyDto.setDbizdate(generateBusinessDate);// 入库日期
// consignmachiningInBodyDto.setVdef16(bomVersion.get(0).getVersion());//BOM version
//2025年2月13日 17:35:45 和妮姐电话确认bom版本永远为1.0问了3遍
consignmachiningInBodyDto.setBomversion("1.0");//BOM version
consignmachiningInBodyDto.setCsourcebillbid(u8cPoOrderDetail.getCorderBid());//来源明细主键
consignmachiningInBodyDto.setCsourcebillhid(scOrderEntity.getCorderid());//来源表头主键
consignmachiningInBodyDtoArrayList.add(consignmachiningInBodyDto);

View File

@ -704,7 +704,9 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
String sceneType = "stock";
List<GoodsRertunSonDetailsDto> goodsRertunSonDetailsDtos = queryBasicArchivesStock(returnGoodHeaderDetailsDataDtoList1, sceneType);
// 分组汇总
Map<String, List<GoodsRertunSonDetailsDto>> summaryDimensionMap = groupSummary(goodsRertunSonDetailsDtos);
String dimension = null;
// dimension = "1001&dy-intoyou&B2CHA20240033&6973391733588&SALES&002";
Map<String, List<GoodsRertunSonDetailsDto>> summaryDimensionMap = groupSummary(goodsRertunSonDetailsDtos, dimension);
// 查询U8C业务流程
BdBusitypeEntity bdBusitypeEntity = u8cOperationFlow();
// 查询销售收发类别
@ -989,7 +991,8 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
String sceneType = "tran";
List<GoodsRertunSonDetailsDto> goodsRertunSonDetailsDtos = queryBasicArchivesStock(returnGoodHeaderDetailsDataDtoList1, sceneType);
// 分组汇总
Map<String, List<GoodsRertunSonDetailsDto>> summaryDimensionMap = groupSummary(goodsRertunSonDetailsDtos);
String dimension = null;
Map<String, List<GoodsRertunSonDetailsDto>> summaryDimensionMap = groupSummary(goodsRertunSonDetailsDtos, dimension);
// 查询U8C业务流程
BdBusitypeEntity bdBusitypeEntity = u8cOperationFlowV2();
//初始化所有存货管理档案对应的结存价+采购价
@ -1608,7 +1611,7 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
*
* @author liuyang
*/
private Map<String, List<GoodsRertunSonDetailsDto>> groupSummary(List<GoodsRertunSonDetailsDto> goodsRertunSonDetailsDtos) {
private Map<String, List<GoodsRertunSonDetailsDto>> groupSummary(List<GoodsRertunSonDetailsDto> goodsRertunSonDetailsDtos, String dimension) {
if (goodsRertunSonDetailsDtos != null && goodsRertunSonDetailsDtos.size() > 0) {
for (int i = 0; i < goodsRertunSonDetailsDtos.size(); i++) {
GoodsRertunSonDetailsDto goodsRertunSonDetailsDto = goodsRertunSonDetailsDtos.get(i);
@ -1683,12 +1686,43 @@ public class SoSaleReturnPluginInitializerToC extends PluginBaseEntity {
goodsRertunSonDetailsDto.setSummaryDimensionStr(summaryDimensionStr.toString());
}
logger.info("TOC{} 个出库单对象需要汇总", goodsRertunSonDetailsDtos.size());
return goodsRertunSonDetailsDtos.stream().collect(Collectors.groupingBy(GoodsRertunSonDetailsDto::getSummaryDimensionStr));
if (dimension == null) {
return goodsRertunSonDetailsDtos.stream().collect(Collectors.groupingBy(GoodsRertunSonDetailsDto::getSummaryDimensionStr));
} else {
Map<String, List<GoodsRertunSonDetailsDto>> collect = goodsRertunSonDetailsDtos.stream().collect(Collectors.groupingBy(GoodsRertunSonDetailsDto::getSummaryDimensionStr));
keepOnlyNeededKeys(collect, dimension);
return collect;
}
}
logger.info("TOC0个对象需要汇总");
return null;
}
/**
* 移除不需要的键
*
* @author liuyang
*/
private static void keepOnlyNeededKeys(Map<String, List<GoodsRertunSonDetailsDto>> map, String... neededKeys) {
Iterator<Map.Entry<String, List<GoodsRertunSonDetailsDto>>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, List<GoodsRertunSonDetailsDto>> entry = iterator.next();
// 如果不是需要的键则移除
if (!contains(neededKeys, entry.getKey())) {
iterator.remove();
}
}
}
private static boolean contains(String[] array, String targetValue) {
for (String value : array) {
if (value.equals(targetValue)) {
return true;
}
}
return false;
}
/**
* 2024年8月6日 10:59:03 查询U8C业务流程
*

View File

@ -19,6 +19,7 @@ public class ConsignmachiningInBodyDto {
private String vsourcerowno;
private String vsourcebillcode;
private String writeofftype;//核销方式
private String bomversion;//BOM版本
private String dbizdate;
private String vdef16;
private String csourcebillbid;//来源明细主键

View File

@ -50,7 +50,7 @@ public class SoSaleReturnPluginInitializerToCTest {
// soSaleReturnPluginInitializerToC.startImplementByCode("LETS-RE2025010900002384", "tran");
// soSaleReturnPluginInitializerToC.startImplementStockByTime("2024-12-24 16:02:17", "2024-12-24 16:02:17", "0");
soSaleReturnPluginInitializerToC.startImplementStockByTime("2025-01-31 00:00:00", "2025-01-31 23:59:59", "1");
// JSONObject jsonObject = new JSONObject();
// soSaleReturnPluginInitializerToC.executeBusiness(jsonObject);
@ -82,7 +82,7 @@ public class SoSaleReturnPluginInitializerToCTest {
// BdBusitypeEntity bdBusitypeEntity3 = queryBdBusitypeUtil.queryBdBusitype("TOC确认收入");
// System.out.println("TOC确认收入:" + bdBusitypeEntity3.getPkBusitype());
BdBusitypeEntity bdBusitypeEntity4 = queryBdBusitypeUtil.queryBdBusitype("TOC售后完成");
System.out.println("TOC售后完成:" + bdBusitypeEntity4.getPkBusitype());
// BdBusitypeEntity bdBusitypeEntity4 = queryBdBusitypeUtil.queryBdBusitype("TOC售后完成");
// System.out.println("TOC售后完成:" + bdBusitypeEntity4.getPkBusitype());
}
}

View File

@ -104,6 +104,7 @@ public class DeleteU8cDataUtil {
/**
* 销售订单取消签字
* 每1000条取消签字需要236秒平均0.2秒一条
*/
public void cancelSignatureSoSaleV2() {
try {