Browse Source

修改库存数据写入逻辑中,出现了Map中Key重复的问题,同时增加sku和园区账册关联

csk 4 years ago
parent
commit
adb702f9d5

+ 17 - 3
src/main/java/com/emato/cus/supervise/biz/acqInventoryInfo/AcqInventoryInfoCusData.java

@@ -5,6 +5,7 @@ import com.emato.cus.supervise.constant.EmtRecordTimeEnum;
 import com.emato.cus.supervise.domainCus.CusAcqGoodsMove05;
 import com.emato.cus.supervise.domainCus.CusAcqInventoryInfo03;
 import com.emato.cus.supervise.domainOms.OmsCusUnitCode;
+import com.emato.cus.supervise.domainOms.OmsMerchInfo;
 import com.emato.cus.supervise.mapperOms.OmsCusUnitCodeMapper;
 import com.emato.cus.supervise.service.cus.CusAcqInventoryInfoService03;
 import com.google.common.collect.Lists;
@@ -70,8 +71,21 @@ public class AcqInventoryInfoCusData implements CusData {
                 });
         // 查询已有库存信息表对应sku数据
         List<CusAcqInventoryInfo03> listInveInfo = cusAcqInventoryInfoService03.listCusAcqInventoryInfo(listSku);
-        Map<String, String> exitInveInfo = listInveInfo.stream().collect(Collectors.toMap(k->k.getSkuNo(), v->v.getLocalEmsNo()));
-
+        Map<String, CusAcqInventoryInfo03> exitInveInfo = new HashMap<>();
+        // 会报异常:"Duplicate key 99999",即可能出现重复的id,
+        //Map<String, String> exitInveInfo = listInveInfo.stream().collect(Collectors.toMap(k->k.getSkuNo(), v->v.getId()));
+        //exitInveInfo = listInveInfo.stream().collect(Collectors.toMap(k -> k.getSkuNo() + "_" + k.getLocalEmsNo(), v -> v));
+        /*List<String> exitInveInfo = new ArrayList<>();
+        listInveInfo.stream().forEach(i->exitInveInfo.add(i.getSkuNo()));*/
+
+        for (int i = 0, len = listInveInfo.size(); i < len; i++) {
+            String key = listInveInfo.get(i).getSkuNo() + "_" + listInveInfo.get(i).getLocalEmsNo();
+            if (exitInveInfo.containsKey(key)) {
+                continue;
+            } else {
+                exitInveInfo.put(key, listInveInfo.get(i));
+            }
+        }
 
         List<OmsCusUnitCode> codeList = omsCusUnitCodeMapper.getOmsCusUnitCodeList(gUnitNameList);
         Map<String,OmsCusUnitCode> omsCusUnitCodeMap = codeList.stream().collect(Collectors.toMap(k->k.getgUnitName(), v->v));
@@ -89,7 +103,7 @@ public class AcqInventoryInfoCusData implements CusData {
                 info.setgUnit(omsProductInfo.getgUnitCode());
             }
 
-            if (exitInveInfo.containsKey(info.getSkuNo())) {
+            if (exitInveInfo.containsKey(info.getSkuNo() + "_" + info.getLocalEmsNo())) {
                 // 存在, 则更新
                 updateList.add(info);
             } else {