mirror of https://github.com/jeecgboot/jeecg-boot
feat : first sheet and latest weight imported in Mabang
parent
e555b705be
commit
b23a273b89
|
@ -212,9 +212,13 @@ public class PurchaseOrderController {
|
|||
BeanUtils.copyProperties(purchaseOrderPage, purchaseOrder);
|
||||
purchaseOrder.setPaymentDocumentString(new String(purchaseOrderPage.getPaymentDocument()));
|
||||
purchaseOrder.setInventoryDocumentString(new String(purchaseOrderPage.getInventoryDocument()));
|
||||
Map<String, Responses> responsesMappedByReason = new HashMap<>();
|
||||
if(purchaseOrderPage.getPlatformOrderId() == null) {
|
||||
Responses purchaseUpdateResponse = new Responses();
|
||||
purchaseOrderService.updateById(purchaseOrder);
|
||||
return Result.OK("sys.api.entryEditSuccess");
|
||||
purchaseUpdateResponse.addSuccess("updated");
|
||||
responsesMappedByReason.put("orderUpdate : " + purchaseOrder.getInvoiceNumber(), purchaseUpdateResponse);
|
||||
return Result.OK("sys.api.entryEditSuccess", responsesMappedByReason);
|
||||
}
|
||||
List<String> platformOrderIds = new ArrayList<>(Arrays.asList(purchaseOrderPage.getPlatformOrderId().split(",")));
|
||||
log.info("Editing purchase order and attributing it to orders : {}", platformOrderIds);
|
||||
|
@ -222,7 +226,7 @@ public class PurchaseOrderController {
|
|||
platformOrderService.removePurchaseInvoiceNumber(purchaseOrder.getInvoiceNumber(), purchaseOrder.getClientId());
|
||||
List<PlatformOrder> platformOrders = platformOrderService.selectByPlatformOrderIds(platformOrderIds);
|
||||
log.info("Platform orders found for attribution : {}", platformOrders.stream().map(PlatformOrder::getPlatformOrderId).collect(Collectors.toList()));
|
||||
Map<String, Responses> responsesMappedByReason = new HashMap<>();
|
||||
|
||||
Responses platformOrderIdUpdateResponse = new Responses();
|
||||
if(!platformOrders.isEmpty()) {
|
||||
for(PlatformOrder po : platformOrders) {
|
||||
|
@ -237,7 +241,7 @@ public class PurchaseOrderController {
|
|||
platformOrderIdUpdateResponse.getFailures().addAll(platformOrderIds);
|
||||
}
|
||||
purchaseOrderService.updateById(purchaseOrder);
|
||||
responsesMappedByReason.put("Platform Order IDs Update / 平台订单号码更新 : " + purchaseOrder.getInvoiceNumber(), platformOrderIdUpdateResponse);
|
||||
responsesMappedByReason.put("orderIdUpdate : " + purchaseOrder.getInvoiceNumber(), platformOrderIdUpdateResponse);
|
||||
return Result.OK("sys.api.entryEditSuccess", responsesMappedByReason);
|
||||
}
|
||||
|
||||
|
|
|
@ -186,56 +186,59 @@ public class SkuWeightController extends JeecgController<SkuWeight, ISkuWeightSe
|
|||
MultipartFile file = entity.getValue();
|
||||
try (InputStream inputStream = file.getInputStream()){
|
||||
Workbook workbook = new XSSFWorkbook(inputStream);
|
||||
for (Sheet sheet : workbook) {
|
||||
int firstRow = sheet.getFirstRowNum();
|
||||
int lastRow = sheet.getLastRowNum();
|
||||
for (int rowIndex = firstRow + 1; rowIndex <= lastRow; rowIndex++) {
|
||||
Row row = sheet.getRow(rowIndex);
|
||||
SkuWeight skuWeight = new SkuWeight();
|
||||
boolean hasError = false;
|
||||
String erpCode = null;
|
||||
for (int cellIndex = row.getFirstCellNum(); cellIndex < NUMBER_OF_SKU_EXCEL_COLUMNS; cellIndex++) {
|
||||
Cell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||
String cellValue = cell.getStringCellValue();
|
||||
if(hasError) continue;
|
||||
if(cellValue.isEmpty()){
|
||||
responses.addFailure("Row " + rowIndex + " has empty cell at index " + cellIndex);
|
||||
hasError = true;
|
||||
continue;
|
||||
}
|
||||
switch (cellIndex) {
|
||||
case 0:
|
||||
Sku sku = skuService.getByErpCode(cellValue);
|
||||
if(sku == null){
|
||||
responses.addFailure("Row " + rowIndex + " SKU not found : " + cellValue);
|
||||
hasError = true;
|
||||
continue;
|
||||
}
|
||||
erpCode = cellValue;
|
||||
skuWeight.setSkuId(sku.getId());
|
||||
break;
|
||||
case 1:
|
||||
skuWeight.setWeight((int) Double.parseDouble(cellValue));
|
||||
break;
|
||||
case 2:
|
||||
Date effectiveDate = formatter.parse(cellValue);
|
||||
skuWeight.setEffectiveDate(effectiveDate);
|
||||
break;
|
||||
}
|
||||
}
|
||||
Sheet firstSheet = workbook.getSheetAt(0);
|
||||
int firstRow = firstSheet.getFirstRowNum();
|
||||
int lastRow = firstSheet.getLastRowNum();
|
||||
for (int rowIndex = firstRow + 1; rowIndex <= lastRow; rowIndex++) {
|
||||
Row row = firstSheet.getRow(rowIndex);
|
||||
SkuWeight skuWeight = new SkuWeight();
|
||||
boolean hasError = false;
|
||||
String erpCode = null;
|
||||
for (int cellIndex = row.getFirstCellNum(); cellIndex < NUMBER_OF_SKU_EXCEL_COLUMNS; cellIndex++) {
|
||||
Cell cell = row.getCell(cellIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
|
||||
String cellValue = cell.getStringCellValue();
|
||||
if(hasError) continue;
|
||||
skuWeights.add(skuWeight);
|
||||
assert erpCode != null;
|
||||
skuWeightMappedByErpCode.put(erpCode, skuWeight);
|
||||
if(cellValue.isEmpty()){
|
||||
responses.addFailure("Row " + rowIndex + " has empty cell at index " + cellIndex);
|
||||
hasError = true;
|
||||
continue;
|
||||
}
|
||||
switch (cellIndex) {
|
||||
case 0:
|
||||
Sku sku = skuService.getByErpCode(cellValue);
|
||||
if(sku == null){
|
||||
responses.addFailure("Row " + rowIndex + " SKU not found : " + cellValue);
|
||||
hasError = true;
|
||||
continue;
|
||||
}
|
||||
erpCode = cellValue;
|
||||
skuWeight.setSkuId(sku.getId());
|
||||
break;
|
||||
case 1:
|
||||
skuWeight.setWeight((int) Double.parseDouble(cellValue));
|
||||
break;
|
||||
case 2:
|
||||
Date effectiveDate = formatter.parse(cellValue);
|
||||
skuWeight.setEffectiveDate(effectiveDate);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(hasError) continue;
|
||||
skuWeights.add(skuWeight);
|
||||
assert erpCode != null;
|
||||
skuWeightMappedByErpCode.put(erpCode, skuWeight);
|
||||
}
|
||||
log.info("Import weights for skus: {}", skuWeightMappedByErpCode.keySet());
|
||||
Responses mabangResponses = skuListMabangService.mabangSkuWeightUpdate(skuWeights);
|
||||
List<SkuWeight> skuWeightSuccesses = new ArrayList<>();
|
||||
mabangResponses.getSuccesses().forEach(skuErpCode -> skuWeightSuccesses.add(skuWeightMappedByErpCode.get(skuErpCode)));
|
||||
mabangResponses.getSuccesses().forEach(skuErpCode -> {
|
||||
String erpCode = skuErpCode.split(":")[0].trim();
|
||||
skuWeightSuccesses.add(skuWeightMappedByErpCode.get(erpCode));
|
||||
});
|
||||
skuWeightSuccesses.forEach(skuWeight -> skuMongoService.upsertSkuWeight(skuWeight));
|
||||
skuWeightService.saveBatch(skuWeights);
|
||||
responses.setSuccesses(mabangResponses.getSuccesses());
|
||||
responses.getSuccesses().addAll(mabangResponses.getSuccesses());
|
||||
responses.getFailures().addAll(mabangResponses.getFailures());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
String msg = e.getMessage();
|
||||
|
|
|
@ -638,11 +638,38 @@ public class SkuListMabangServiceImpl extends ServiceImpl<SkuListMabangMapper, S
|
|||
public Responses mabangSkuWeightUpdate(List<SkuWeight> skuWeights) {
|
||||
Responses responses = new Responses();
|
||||
List<String> failures = new ArrayList<>();
|
||||
List<Sku> skus = skuService.listByIds(skuWeights.stream()
|
||||
.map(SkuWeight::getSkuId).collect(toList()));
|
||||
|
||||
List<String> skuIds = skuWeights.stream()
|
||||
.map(SkuWeight::getSkuId)
|
||||
.collect(toList());
|
||||
List<Sku> skus = skuService.listByIds(skuIds);
|
||||
// Map skuWeights by skuId, if skuId already in map, keep the skuWeight with the latest effective date
|
||||
Map<String, SkuWeight> skuWeightMappedById = skuWeights.stream()
|
||||
.collect(Collectors.toMap(SkuWeight::getSkuId, Function.identity(), (skuWeight1, skuWeight2) -> {
|
||||
if(skuWeight1.getEffectiveDate().after(skuWeight2.getEffectiveDate())) {
|
||||
log.info("The weight [{}] for sku [{}] is more recent.", skuWeight1.getWeight() ,skuWeight1.getSkuId());
|
||||
return skuWeight1;
|
||||
}
|
||||
log.info("The weight [{}] for sku [{}] is more recent.", skuWeight2.getWeight() ,skuWeight2.getSkuId());
|
||||
return skuWeight2;
|
||||
}));
|
||||
List<Sku> skusToUpdate = new ArrayList<>();
|
||||
for(Sku sku : skus) {
|
||||
SkuWeight latestSkuWeight = skuWeightService.getBySkuId(sku.getId());
|
||||
if(latestSkuWeight == null) {
|
||||
skusToUpdate.add(sku);
|
||||
continue;
|
||||
}
|
||||
Date latestEffectiveDate = latestSkuWeight.getEffectiveDate();
|
||||
Date effectiveDateToImport = skuWeightMappedById.get(sku.getId()).getEffectiveDate();
|
||||
if(latestEffectiveDate.after(effectiveDateToImport)) {
|
||||
log.info("Sku {} has a more recent weight in DB. Therefore won't be imported to Mabang", sku.getErpCode());
|
||||
responses.addSuccess(sku.getErpCode());
|
||||
continue;
|
||||
}
|
||||
skusToUpdate.add(sku);
|
||||
}
|
||||
Map<String, String> remarkMappedByErpCode = new HashMap<>();
|
||||
List<List<String>> skusPartition = Lists.partition(skus.stream().map(Sku::getErpCode).collect(toList()), 50);
|
||||
List<List<String>> skusPartition = Lists.partition(skusToUpdate.stream().map(Sku::getErpCode).collect(toList()), 50);
|
||||
for(List<String> skuPartition : skusPartition) {
|
||||
SkuListRequestBody body = new SkuListRequestBody();
|
||||
body.setStockSkuList(String.join(",", skuPartition));
|
||||
|
@ -664,15 +691,22 @@ public class SkuListMabangServiceImpl extends ServiceImpl<SkuListMabangMapper, S
|
|||
|
||||
List<SkuData> skuDataList = skuWeights.stream()
|
||||
.map(skuWeight -> {
|
||||
Sku sku = skus.stream()
|
||||
Sku sku = skusToUpdate.stream()
|
||||
.filter(s -> s.getId().equals(skuWeight.getSkuId()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if(null == sku) {
|
||||
Sku skuInDb = skus.stream()
|
||||
.filter(s -> s.getId().equals(skuWeight.getSkuId()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
if(null == skuInDb) {
|
||||
log.error("Sku not found : {}", skuWeight.getSkuId());
|
||||
failures.add(skuWeight.getSkuId());
|
||||
return null;
|
||||
}
|
||||
if(null == sku) {
|
||||
return null;
|
||||
}
|
||||
SkuData skuData = new SkuData();
|
||||
skuData.setErpCode(sku.getErpCode());
|
||||
if(remarkMappedByErpCode.containsKey(sku.getErpCode())) {
|
||||
|
@ -713,14 +747,14 @@ public class SkuListMabangServiceImpl extends ServiceImpl<SkuListMabangMapper, S
|
|||
log.info("{}/{} skus updated successfully.", successCount, skuDataList.size());
|
||||
List<String> successes = results.stream()
|
||||
.filter(SkuChangeResponse::success)
|
||||
.map(SkuChangeResponse::getStockSku)
|
||||
.map(response -> response.getStockSku() + " : Mabang OK")
|
||||
.collect(toList());
|
||||
failures.addAll(results.stream()
|
||||
.filter(response -> !response.success())
|
||||
.map(SkuChangeResponse::getStockSku)
|
||||
.map(response -> response.getStockSku() + " | Mabang")
|
||||
.collect(toList()));
|
||||
|
||||
responses.setSuccesses(successes);
|
||||
responses.getSuccesses().addAll(successes);
|
||||
responses.setFailures(failures);
|
||||
return responses;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue