mirror of https://github.com/jeecgboot/jeecg-boot
feat: product order improvement
parent
f90e02666b
commit
8b80a4134c
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
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());
|
||||
} catch (JSONException e) {
|
||||
log.error("Error while parsing parameter as JSON, falling back to default parameters.");
|
||||
}
|
||||
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.");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 <> 0)
|
||||
OR (sp.price IS NOT NULL AND sp.price <> 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 <> 0)
|
||||
OR (sp.price IS NOT NULL AND sp.price <> 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
|
||||
|
|
|
@ -36,4 +36,6 @@ public interface ISkuListMabangService extends IService<SkuData> {
|
|||
|
||||
Map<Sku, String> skuSyncUpsert(List<String> erpCodes);
|
||||
void updateSkuId();
|
||||
|
||||
void mabangSkuStockUpdate(List<String> erpCodes);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue