Merge pull request #120 from LQYBill/feat/client_category_migrate_to_shop

feat: product order improvement
pull/8040/head
Qiuyi LI 2024-10-29 11:02:33 +01:00 committed by GitHub
commit 1c4f1286b8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 383 additions and 65 deletions

View File

@ -405,7 +405,7 @@ public class SkuController {
}
else {
if(clientId != null) {
total = skuService.countAllClientSkus();
total = skuService.countAllClientSkus(clientId);
skuOrdersPage = skuService.fetchSkusByClient(clientId, pageNo, pageSize, parsedColumn, parsedOrder);
} else {
total = skuService.countAllSkus();
@ -419,6 +419,23 @@ public class SkuController {
page.setTotal(total);
return Result.OK(page);
}
@GetMapping("/listAllSelectableSkuIds")
public Result<?> listAllSelectableSkuIds(@RequestParam(name = "clientId") String clientId,
@RequestParam(name = "erpCodes", required = false) String erpCodes,
@RequestParam(name = "zhNames", required = false) String zhNames,
@RequestParam(name = "enNames", required = false) String enNames
) {
List<SkuOrderPage> selectableSkuIds;
if(erpCodes != null || zhNames != null || enNames != null) {
List<String> erpCodeList = erpCodes == null ? null : Arrays.asList(erpCodes.split(","));
List<String> zhNameList = zhNames == null ? null : Arrays.asList(zhNames.split(","));
List<String> enNameList = enNames == null ? null : Arrays.asList(enNames.split(","));
selectableSkuIds = skuService.listSelectableSkuIdsWithFilters(clientId, erpCodeList, zhNameList, enNameList);
} else {
selectableSkuIds = skuService.listSelectableSkuIds(clientId);
}
return Result.OK(selectableSkuIds);
}
@GetMapping("/searchExistingSkuByKeywords")
public Result<?> searchExistingSkuByKeywords(@RequestParam("keywords") String keywords) {
String parsedKeywords = keywords.trim().replaceAll("[{}=$]", "");
@ -472,4 +489,10 @@ public class SkuController {
}
return Result.OK();
}
@PostMapping("/syncSkuQty")
public Result<?> syncSkuQty(@RequestBody List<String> erpCodes) {
skuListMabangService.mabangSkuStockUpdate(erpCodes);
return Result.OK();
}
}

View File

@ -738,10 +738,18 @@ public class InvoiceController {
List<SavRefundWithDetail> refunds = savRefundWithDetailService.getRefundsByInvoiceNumber(invoiceNumber);
return shippingInvoiceService.exportToExcel(factureDetails, refunds, invoiceNumber, invoiceEntity, internalCode);
}
@GetMapping(value = "/downloadInvoiceInventory")
public byte[] downloadInvoiceInventory(@RequestParam("invoiceCode") String invoiceCode, @RequestParam("internalCode") String internalCode, @RequestParam("invoiceEntity") String invoiceEntity) throws IOException {
InvoiceMetaData metaData = new InvoiceMetaData("", invoiceCode, internalCode, invoiceEntity, "");
List<SkuOrderPage> skuOrderPages = skuService.getInventoryByInvoiceNumber(metaData.getInvoiceCode());
return shippingInvoiceService.exportPurchaseInventoryToExcel(skuOrderPages, metaData);
}
@GetMapping(value = "/downloadInventory")
public byte[] downloadInventory(@RequestParam("invoiceCode") String invoiceCode, @RequestParam("internalCode") String internalCode, @RequestParam("invoiceEntity") String invoiceEntity) throws IOException {
InvoiceMetaData metaData = new InvoiceMetaData("", invoiceCode, internalCode, invoiceEntity, "");
List<SkuOrderPage> skuOrderPages = skuService.getInventoryByInvoiceNumber(metaData.getInvoiceCode());
String clientId = clientService.getClientIdByCode(internalCode);
List<String> erpCodes = skuService.listSelectableSkuIds(clientId).stream().map(SkuOrderPage::getErpCode).collect(Collectors.toList());
List<SkuOrderPage> skuOrderPages = skuService.getInventory(erpCodes, metaData.getInvoiceCode());
return shippingInvoiceService.exportPurchaseInventoryToExcel(skuOrderPages, metaData);
}

View File

@ -1,86 +1,49 @@
package org.jeecg.modules.business.domain.job;
import com.amazonaws.services.dynamodbv2.xspec.S;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockData;
import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockRawStream;
import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockRequestBody;
import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockStream;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.jeecg.modules.business.entity.Sku;
import org.jeecg.modules.business.mongoService.SkuMongoService;
import org.jeecg.modules.business.service.ISkuListMabangService;
import org.jeecg.modules.business.service.ISkuService;
import org.jeecg.modules.business.service.MigrationService;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Component
public class MabangSkuStockUpdateJob implements Job {
@Autowired
private ISkuService skuService;
private ISkuListMabangService skuListMabangService;
@Autowired
private SkuMongoService skuMongoService;
private ISkuService skuService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
List<String> skuList = skuService.listSkus().stream().map(Sku::getErpCode).collect(Collectors.toList());
StringBuilder skus = new StringBuilder();
List<SkuStockData> updateList = new ArrayList<>();
List<Sku> skuToUpdate = new ArrayList<>();
log.info("Sku stock update Job has started.");
int count = 1;
for(int i = 1; i <= skuList.size(); i++) {
if(i%100 != 1)
skus.append(",");
skus.append(skuList.get(i - 1));
if(i%100 == 0) {
SkuStockRequestBody body = (new SkuStockRequestBody())
.setStockSkus(skus.toString())
.setTotal(skuList.size());
log.info("Sending request for page {}/{}.", count++, body.getTotalPages());
SkuStockRawStream rawStream = new SkuStockRawStream(body);
SkuStockStream stream = new SkuStockStream(rawStream);
updateList.addAll(stream.all());
skus = new StringBuilder();
List<String> erpCodes = skuService.listSkus().stream().map(Sku::getErpCode).collect(Collectors.toList());
JobDataMap jobDataMap = context.getMergedJobDataMap();
String parameter = ((String) jobDataMap.get("parameter"));
if (parameter != null) {
try {
JSONObject jsonObject = new JSONObject(parameter);
if (!jsonObject.isNull("skus")) {
JSONArray array = jsonObject.getJSONArray("skus");
for(int i = 0; i < array.length(); i++) {
erpCodes.add(array.getString(i));
}
}
} catch (JSONException e) {
log.error("Error while parsing parameter as JSON, falling back to default parameters.");
}
}
if(skus.length() != 0) {
SkuStockRequestBody body = (new SkuStockRequestBody())
.setStockSkus(skus.toString())
.setTotal(skuList.size());
SkuStockRawStream rawStream = new SkuStockRawStream(body);
SkuStockStream stream = new SkuStockStream(rawStream);
updateList.addAll(stream.all());
}
updateList.forEach(skuStockData -> {
Sku sku = skuService.getByErpCode(skuStockData.getStockSku());
Integer availableAmount = skuStockData.getWarehouseStock("SZBA宝安仓").getStockQuantity();
Integer purchasingAmount = skuStockData.getWarehouseStock("SZBA宝安仓").getShippingQuantity();
if(sku.getAvailableAmount().equals(availableAmount) && sku.getPurchasingAmount().equals(purchasingAmount)) {
return;
}
sku.setAvailableAmount(availableAmount);
sku.setPurchasingAmount(purchasingAmount);
sku.setUpdateBy("mabang api");
sku.setUpdateTime(new Date());
skuToUpdate.add(sku);
});
if(skuToUpdate.isEmpty()) {
return;
}
log.info("Updating stock for {} skus.", skuToUpdate.size());
skuService.updateBatchStockByIds(skuToUpdate);
for(Sku sku : skuToUpdate) {
skuMongoService.updateStock(sku);
}
skuListMabangService.mabangSkuStockUpdate(erpCodes);
log.info("Sku stock update Job has ended.");
}
}

View File

@ -17,6 +17,7 @@ import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
@ -28,6 +29,7 @@ import java.util.stream.Collectors;
import static java.util.stream.Collectors.*;
@Slf4j
@Component
public class SkuShippingQtyJob implements Job {
@Autowired
private IPlatformOrderService platformOrderService;

View File

@ -51,7 +51,7 @@ public interface SkuMapper extends BaseMapper<Sku> {
Integer countAllSkus();
Integer countAllSkuWeightsWithFilters(@Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex);
Integer countAllClientSkus();
Integer countAllClientSkus(@Param("clientId") String clientId);
Integer countAllClientSkusWithFilters(@Param("clientId") String clientId, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex);
List<SkuOrderPage> fetchSkuWeights(@Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order);
@ -59,6 +59,9 @@ public interface SkuMapper extends BaseMapper<Sku> {
List<SkuOrderPage> fetchSkuWeightsWithFilters(@Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex);
List<SkuOrderPage> fetchSkusByClientWithFilters(@Param("clientId") String clientId, @Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order, @Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex);
List<SkuOrderPage> listSelectableSkuIdsWithFilters(@Param("clientId") String clientId, @Param("erpCodes") String erpCodeList, @Param("zhNames") String zhNameList, @Param("enNames") String enNameList);
List<SkuOrderPage> listSelectableSkuIds(@Param("clientId") String clientId);
String getIdFromErpCode(@Param("erpCode") String erpCode);
List<Sku> listSkus();
@ -69,6 +72,8 @@ public interface SkuMapper extends BaseMapper<Sku> {
List<SkuOrderPage> getInventoryByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber);
List<SkuOrderPage> getInventory(@Param("erpCodes") List<String> erpCodes, @Param("invoiceNumber") String invoiceNumber);
List<Sku> listByClientId(@Param("clientId") String clientId);
List<SkuOrderPage> searchExistingSkuByKeywords(@Param("keywords") List<String> keywords);

View File

@ -402,6 +402,149 @@
</if>
;
</select>
<select id="listSelectableSkuIds" resultType="org.jeecg.modules.business.vo.SkuOrderPage">
WITH qtyInOrdersNotShippedCTE AS (
SELECT sku_id as ID, SUM(quantity) AS quantity
FROM platform_order_content poc
JOIN platform_order po ON poc.platform_order_id = po.id
JOIN shop s ON po.shop_id = s.id
JOIN client c ON s.owner_id = c.id
WHERE c.id = #{clientId}
AND po.erp_status IN ('1','2')
AND poc.erp_status IN ('1','2')
GROUP BY sku_id
)
SELECT s.id,
s.erp_code,
s.en_name,
s.zh_name,
s.purchasing_amount,
s.available_amount,
qtyInOrdersNotShippedCTE.quantity as qtyInOrdersNotShipped,
s.available_amount + s.purchasing_amount - IF(qtyInOrdersNotShippedCTE.quantity IS NULL, 0, qtyInOrdersNotShippedCTE.quantity) as stock,
s.image_source,
s.service_fee,
IF(sp.price_rmb IS NULL, sp.price,
(
ROUND(
sp.price_rmb /
(SELECT rate
FROM exchange_rates
WHERE original_currency = 'EUR' AND target_currency = 'RMB'
ORDER BY create_time DESC LIMIT 1)
,2)
)
) as sku_price,
sp.threshold as discount_moq,
IF(sp.price_rmb IS NULL, sp.discounted_price,
(
ROUND(
sp.discounted_price_rmb /
(SELECT rate
FROM exchange_rates
WHERE target_currency = 'EUR' AND original_currency = 'RMB'
ORDER BY create_time DESC LIMIT 1)
,2)
)
) as discounted_price,
s7.quantity as sales_last_week,
s28.quantity as sales_four_weeks,
s42.quantity as sales_six_weeks
FROM sku s
JOIN client_sku ON s.id = client_sku.sku_id
LEFT JOIN sku_current_price sp ON s.id = sp.sku_id
LEFT JOIN sales_28 s28 ON s.id = s28.sku_id
LEFT JOIN sales_42 s42 ON s.id = s42.sku_id
LEFT JOIN sales_7 s7 ON s.id = s7.sku_id
LEFT JOIN qtyInOrdersNotShippedCTE ON s.id = qtyInOrdersNotShippedCTE.ID
WHERE client_sku.client_id = #{clientId}
AND s.status = 3
AND (
(sp.price_rmb IS NOT NULL AND sp.price_rmb &lt;&gt; 0)
OR (sp.price IS NOT NULL AND sp.price &lt;&gt; 0)
)
ORDER BY s.erp_code
;
</select>
<select id="listSelectableSkuIdsWithFilters" resultType="org.jeecg.modules.business.vo.SkuOrderPage">
WITH qtyInOrdersNotShippedCTE AS (
SELECT sku_id as ID, SUM(quantity) AS quantity
FROM platform_order_content poc
JOIN platform_order po ON poc.platform_order_id = po.id
JOIN shop s ON po.shop_id = s.id
JOIN client c ON s.owner_id = c.id
WHERE c.id = #{clientId}
AND po.erp_status IN ('1','2')
AND poc.erp_status IN ('1','2')
GROUP BY sku_id
)
SELECT s.id,
s.erp_code,
s.en_name,
s.zh_name,
s.purchasing_amount,
s.available_amount,
qtyInOrdersNotShippedCTE.quantity as qtyInOrdersNotShipped,
s.available_amount + s.purchasing_amount - IF(qtyInOrdersNotShippedCTE.quantity IS NULL, 0, qtyInOrdersNotShippedCTE.quantity) as stock,
s.image_source,
s.service_fee,
IF(sp.price_rmb IS NULL, sp.price,
(
ROUND(
sp.price_rmb /
(SELECT rate
FROM exchange_rates
WHERE original_currency = 'EUR' AND target_currency = 'RMB'
ORDER BY create_time DESC LIMIT 1)
,2)
)) as sku_price,
sp.threshold as discount_moq,
IF(sp.price_rmb IS NULL, sp.discounted_price,
(
ROUND(
sp.discounted_price_rmb /
(SELECT rate
FROM exchange_rates
WHERE target_currency = 'EUR' AND original_currency = 'RMB'
ORDER BY create_time DESC LIMIT 1)
,2)
)) as discounted_price,
s7.quantity as sales_last_week,
s28.quantity as sales_four_weeks,
s42.quantity as sales_six_weeks
FROM sku s
JOIN client_sku ON s.id = client_sku.sku_id
LEFT JOIN sku_current_price sp ON s.id = sp.sku_id
LEFT JOIN sales_28 s28 ON s.id = s28.sku_id
LEFT JOIN sales_42 s42 ON s.id = s42.sku_id
LEFT JOIN sales_7 s7 ON s.id = s7.sku_id
LEFT JOIN qtyInOrdersNotShippedCTE ON s.id = qtyInOrdersNotShippedCTE.ID
WHERE client_sku.client_id = #{clientId}
AND s.status = 3
AND (
<if test="erpCodes != ''">
s.erp_code REGEXP #{erpCodes}
</if>
<if test="zhNames != ''">
<if test="erpCodes != ''">
AND
</if>
s.zh_name REGEXP #{zhNames}
</if>
<if test="enNames != ''">
<if test="erpCodes != '' || zhNames != ''">
AND
</if>
s.en_name REGEXP #{enNames}
</if>
)
AND (
(sp.price_rmb IS NOT NULL AND sp.price_rmb &lt;&gt; 0)
OR (sp.price IS NOT NULL AND sp.price &lt;&gt; 0)
)
ORDER BY s.erp_code
;
</select>
<select id="getInventoryByInvoiceNumber" resultType="org.jeecg.modules.business.vo.SkuOrderPage">
WITH skusFromInvoice AS (
SELECT sku_id, quantity
@ -470,6 +613,77 @@
WHERE s.id IN (SELECT sku_id FROM skusFromInvoice)
GROUP BY s.id;
</select>
<select id="getInventory" resultType="org.jeecg.modules.business.vo.SkuOrderPage">
WITH skusFromInvoice AS (
SELECT sku_id, quantity
FROM purchase_order_sku pos
JOIN purchase_order po ON pos.purchase_order_id = po.id
WHERE po.invoice_number = #{invoiceNumber}
),
qtyInOrdersNotShipped AS (
SELECT sku_id as ID, SUM(quantity) AS quantity
FROM platform_order_content poc
JOIN platform_order po ON poc.platform_order_id = po.id
JOIN shop s ON po.shop_id = s.id
JOIN client c ON s.owner_id = c.id
WHERE sku_id IN (SELECT sku_id FROM skusFromInvoice)
AND po.erp_status IN ('1','2')
AND poc.erp_status IN ('1','2')
GROUP BY sku_id
)
SELECT s.id,
s.erp_code,
s.en_name,
s.zh_name,
IFNULL(sfi.quantity, 0) as qtyOrdered,
s.purchasing_amount as purchasing_amount,
s.available_amount as available_amount,
IFNULL(qtyInOrdersNotShipped.quantity, 0) as qtyInOrdersNotShipped,
IF(s.available_amount IS NULL, 0, s.available_amount)
+ IF(s.purchasing_amount IS NULL, 0, s.purchasing_amount)
- IF(qtyInOrdersNotShipped.quantity IS NULL, 0, qtyInOrdersNotShipped.quantity)
as stock,
s.image_source as image_source,
s.service_fee as service_fee,
IF(sp.price_rmb IS NULL, sp.price,
(
ROUND(
sp.price_rmb /
(SELECT rate
FROM exchange_rates
WHERE original_currency = 'EUR' AND target_currency = 'RMB'
ORDER BY create_time DESC LIMIT 1)
,2)
)
) as sku_price,
sp.threshold as discount_moq,
IF(sp.price_rmb IS NULL, sp.discounted_price,
(
ROUND(
sp.discounted_price_rmb /
(SELECT rate
FROM exchange_rates
WHERE target_currency = 'EUR' AND original_currency = 'RMB'
ORDER BY create_time DESC LIMIT 1)
,2)
)
) as discounted_price,
IFNULL(s7.quantity, 0) as sales_last_week,
IFNULL(s28.quantity, 0) as sales_four_weeks,
IFNULL(s42.quantity, 0) as sales_six_weeks
FROM sku s
LEFT JOIN sku_price sp ON s.id = sp.sku_id
LEFT JOIN sales_28 s28 ON s.id = s28.sku_id
LEFT JOIN sales_42 s42 ON s.id = s42.sku_id
LEFT JOIN sales_7 s7 ON s.id = s7.sku_id
LEFT JOIN qtyInOrdersNotShipped ON s.id = qtyInOrdersNotShipped.ID
LEFT JOIN skusFromInvoice sfi ON s.id = sfi.sku_id
WHERE s.erp_code IN
<foreach collection="erpCodes" item="erpCode" index="index" separator="," open="(" close=")">
#{erpCode}
</foreach>
GROUP BY s.id;
</select>
<select id="getIdFromErpCode" resultType="java.lang.String">
SELECT id
FROM sku

View File

@ -36,4 +36,6 @@ public interface ISkuListMabangService extends IService<SkuData> {
Map<Sku, String> skuSyncUpsert(List<String> erpCodes);
void updateSkuId();
void mabangSkuStockUpdate(List<String> erpCodes);
}

View File

@ -96,7 +96,7 @@ public interface ISkuService extends IService<Sku> {
Integer countAllSkus();
List<SkuOrderPage> fetchSkuWeights(Integer pageNo, Integer pageSize, String parsedColumn, String parsedOrder);
Integer countAllClientSkus();
Integer countAllClientSkus(String clientId);
List<SkuOrderPage> fetchSkusByClient(String clientId, Integer pageNo, Integer pageSize, String column, String order);
Integer countAllSkuWeightsWithFilters(List<String> erpCodeList, List<String> zhNameList, List<String> enNameList);
@ -111,8 +111,13 @@ public interface ISkuService extends IService<Sku> {
void updateBatchStockByIds(List<Sku> skuToUpdate);
List<SkuOrderPage> getInventoryByInvoiceNumber(String invoiceNumber);
List<SkuOrderPage> getInventory(List<String> erpCodes, String invoiceNumber);
List<Sku> listByClientId(String clientId);
List<SkuOrderPage> searchExistingSkuByKeywords(List<String> keywords);
List<SkuOrderPage> listSelectableSkuIdsWithFilters(String clientId, List<String> erpCodeList, List<String> zhNameList, List<String> enNameList);
List<SkuOrderPage> listSelectableSkuIds(String clientId);
}

View File

@ -9,8 +9,13 @@ import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.*;
import org.jeecg.modules.business.domain.api.mabang.stockDoAddStock.SkuAddRequest;
import org.jeecg.modules.business.domain.api.mabang.stockDoAddStock.SkuAddRequestBody;
import org.jeecg.modules.business.domain.api.mabang.stockDoAddStock.SkuAddResponse;
import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockData;
import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockRawStream;
import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockRequestBody;
import org.jeecg.modules.business.domain.api.mabang.stockGetStockQuantity.SkuStockStream;
import org.jeecg.modules.business.entity.*;
import org.jeecg.modules.business.mapper.SkuListMabangMapper;
import org.jeecg.modules.business.mongoService.SkuMongoService;
import org.jeecg.modules.business.service.*;
import org.jeecg.modules.business.vo.Responses;
import org.jeecg.modules.business.vo.SkuOrderPage;
@ -61,6 +66,8 @@ public class SkuListMabangServiceImpl extends ServiceImpl<SkuListMabangMapper, S
@Autowired
private MigrationService migrationService;
@Autowired
private SkuMongoService skuMongoService;
@Autowired
private FreeMarkerConfigurer freemarkerConfigurer;
@Autowired
Environment env;
@ -563,4 +570,56 @@ public class SkuListMabangServiceImpl extends ServiceImpl<SkuListMabangMapper, S
params.put("execute_sql_string", sql);
onlCgformFieldMapper.executeUpdatetSQL(params);
}
@Override
public void mabangSkuStockUpdate(List<String> skuList) {
StringBuilder skus = new StringBuilder();
List<SkuStockData> updateList = new ArrayList<>();
List<Sku> skuToUpdate = new ArrayList<>();
int count = 1;
for(int i = 1; i <= skuList.size(); i++) {
if(i%100 != 1)
skus.append(",");
skus.append(skuList.get(i - 1));
if(i%100 == 0) {
SkuStockRequestBody body = (new SkuStockRequestBody())
.setStockSkus(skus.toString())
.setTotal(skuList.size());
log.info("Sending request for page {}/{}.", count++, body.getTotalPages());
SkuStockRawStream rawStream = new SkuStockRawStream(body);
SkuStockStream stream = new SkuStockStream(rawStream);
updateList.addAll(stream.all());
skus = new StringBuilder();
}
}
if(skus.length() != 0) {
SkuStockRequestBody body = (new SkuStockRequestBody())
.setStockSkus(skus.toString())
.setTotal(skuList.size());
SkuStockRawStream rawStream = new SkuStockRawStream(body);
SkuStockStream stream = new SkuStockStream(rawStream);
updateList.addAll(stream.all());
}
updateList.forEach(skuStockData -> {
Sku sku = skuService.getByErpCode(skuStockData.getStockSku());
Integer availableAmount = skuStockData.getWarehouseStock("SZBA宝安仓").getStockQuantity();
Integer purchasingAmount = skuStockData.getWarehouseStock("SZBA宝安仓").getShippingQuantity();
if(sku.getAvailableAmount().equals(availableAmount) && sku.getPurchasingAmount().equals(purchasingAmount)) {
return;
}
sku.setAvailableAmount(availableAmount);
sku.setPurchasingAmount(purchasingAmount);
sku.setUpdateBy("mabang api");
sku.setUpdateTime(new Date());
skuToUpdate.add(sku);
});
if(skuToUpdate.isEmpty()) {
return;
}
log.info("Updating stock for {} skus.", skuToUpdate.size());
skuService.updateBatchStockByIds(skuToUpdate);
for(Sku sku : skuToUpdate) {
skuMongoService.updateStock(sku);
}
}
}

View File

@ -420,8 +420,8 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
}
@Override
public Integer countAllClientSkus() {
return skuMapper.countAllClientSkus();
public Integer countAllClientSkus(String clientId) {
return skuMapper.countAllClientSkus(clientId);
}
@Override
public List<SkuOrderPage> fetchSkusByClient(String clientId, Integer pageNo, Integer pageSize, String column, String order) {
@ -537,6 +537,38 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
return skuMapper.fetchSkusByClientWithFilters(clientId, offset, pageSize, column, order, erpCodesRegex.toString(), zhNamesRegex.toString(), enNamesRegex.toString());
}
@Override
public List<SkuOrderPage> listSelectableSkuIdsWithFilters(String clientId, List<String> erpCodes, List<String> zhNames, List<String> enNames) {
StringBuilder erpCodesRegex= new StringBuilder(), zhNamesRegex = new StringBuilder(), enNamesRegex = new StringBuilder();
if(erpCodes != null){
erpCodesRegex.append("^");
for(String name : erpCodes){
erpCodesRegex.append("(?=.*").append(name).append(")");
}
erpCodesRegex.append(".*");
}
if(enNames != null){
enNamesRegex.append("^");
for(String name : enNames){
enNamesRegex.append("(?=.*").append(name).append(")");
}
enNamesRegex.append(".*");
}
if(zhNames != null){
zhNamesRegex.append("^");
for(String name : zhNames){
zhNamesRegex.append("(?=.*").append(name).append(")");
}
zhNamesRegex.append(".*$");
}
return skuMapper.listSelectableSkuIdsWithFilters(clientId, erpCodesRegex.toString(), zhNamesRegex.toString(), enNamesRegex.toString());
}
@Override
public List<SkuOrderPage> listSelectableSkuIds(String clientId) {
return skuMapper.listSelectableSkuIds(clientId);
}
@Override
public void addSkuQuantity(Map<String, Integer> quantityPurchased) {
skuMapper.addSkuQuantity(quantityPurchased);
@ -562,6 +594,11 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
return skuMapper.getInventoryByInvoiceNumber(invoiceNumber);
}
@Override
public List<SkuOrderPage> getInventory(List<String> erpCodes, String invoiceNumber) {
return skuMapper.getInventory(erpCodes, invoiceNumber);
}
@Override
public List<Sku> listByClientId(String clientId) {
return skuMapper.listByClientId(clientId);