feat : sku weight finished, grafana, loki, loki4j

pull/8040/head
Gauthier LO 2024-08-26 10:53:15 +02:00
parent e5fb4d9220
commit 694fbb3115
26 changed files with 292 additions and 93 deletions

View File

@ -18,19 +18,27 @@ SHOW VARIABLES LIKE 'collation%';
SHOW TABLE STATUS LIKE 'sen%'; SHOW TABLE STATUS LIKE 'sen%';
ALTER DATABASE wia_app COLLATE utf8mb4_general_ci; ALTER DATABASE wia_app COLLATE utf8mb4_general_ci;
SELECT c.internal_code AS '', WITH latestSkuWeights AS (
s.erp_code AS SKU, SELECT
p.zh_name AS '', sku_id,
p.weight AS '', weight,
effective_date,
ROW_NUMBER() OVER (PARTITION BY sku_id ORDER BY effective_date DESC) AS rn
FROM sku_weight
)
SELECT c.internal_code AS '',
s.erp_code AS SKU,
s.zh_name AS '',
lsw.weight AS '',
ROUND(calculate_shipping_fees(IF(sa.zh_name = '', '-', '-'), 'FR', '2021-06-24', ROUND(calculate_shipping_fees(IF(sa.zh_name = '', '-', '-'), 'FR', '2021-06-24',
p.weight), 2) AS '', lsw.weight), 2) AS '',
get_registration_fees(IF(sa.zh_name = '', '-', '-'), 'FR', '2021-06-24', get_registration_fees(IF(sa.zh_name = '', '-', '-'), 'FR', '2021-06-24',
p.weight) AS '' lsw.weight) AS ''
FROM sku s FROM sku s
LEFT JOIN client_sku ON s.id = client_sku.sku_id LEFT JOIN client_sku ON s.id = client_sku.sku_id
LEFT JOIN client c ON client_sku.client_id = c.id LEFT JOIN client c ON client_sku.client_id = c.id
JOIN product p ON p.id = s.product_id LEFT JOIN latestSkuWeights lsw ON lsw.sku_id = s.id AND lsw.rn = 1
JOIN sensitive_attribute sa ON p.sensitive_attribute_id = sa.id; JOIN sensitive_attribute sa ON s.sensitive_attribute_id = sa.id;
SELECT c.internal_code AS 'Client', SELECT c.internal_code AS 'Client',
po.platform_order_id AS 'Order ID', po.platform_order_id AS 'Order ID',

View File

@ -9,7 +9,7 @@ SELECT s.name AS 'Boutique',
po.country AS 'Pays', po.country AS 'Pays',
po.postcode AS 'Code postal', po.postcode AS 'Code postal',
JSON_ARRAYAGG(sku.erp_code) AS 'SKU', JSON_ARRAYAGG(sku.erp_code) AS 'SKU',
JSON_ARRAYAGG(p.en_name) AS 'Nom produits', JSON_ARRAYAGG(sku.en_name) AS 'Nom produits',
JSON_ARRAYAGG(poc.quantity) AS 'Quantité', JSON_ARRAYAGG(poc.quantity) AS 'Quantité',
SUM(poc.purchase_fee) AS 'Frais d\'achat', SUM(poc.purchase_fee) AS 'Frais d\'achat',
po.fret_fee AS 'Frais de FRET', po.fret_fee AS 'Frais de FRET',
@ -23,7 +23,6 @@ FROM platform_order po
JOIN shop s ON po.shop_id = s.id JOIN shop s ON po.shop_id = s.id
RIGHT JOIN platform_order_content poc ON po.id = poc.platform_order_id RIGHT JOIN platform_order_content poc ON po.id = poc.platform_order_id
JOIN sku ON poc.sku_id = sku.id JOIN sku ON poc.sku_id = sku.id
JOIN product p ON sku.product_id = p.id
WHERE shipping_invoice_number IS NOT NULL WHERE shipping_invoice_number IS NOT NULL
AND poc.erp_status <> 5 AND poc.erp_status <> 5
GROUP BY po.id, s.name, po.order_time GROUP BY po.id, s.name, po.order_time

View File

@ -1,11 +1,11 @@
CREATE OR REPLACE VIEW inventory_record AS CREATE OR REPLACE VIEW inventory_record AS
SELECT sku.id AS id, SELECT sku.id AS id,
cs.client_id AS client_id, cs.client_id AS client_id,
sku.product_id AS product_id, sku.id AS product_id,
sku.erp_code AS erp_code, sku.erp_code AS erp_code,
sku.image_source AS image_source, sku.image_source AS image_source,
sku.available_amount AS available_amount, sku.available_amount AS available_amount,
p.moq AS moq, sku.moq AS moq,
rs.quantity AS red_quantity, rs.quantity AS red_quantity,
gs.quantity AS green_quantity, gs.quantity AS green_quantity,
sales_7.quantity AS sales_7, sales_7.quantity AS sales_7,
@ -13,7 +13,6 @@ SELECT sku.id AS id,
sales_28.quantity AS sales_28, sales_28.quantity AS sales_28,
sipo.quantity AS platform_order_quantity sipo.quantity AS platform_order_quantity
FROM sku FROM sku
JOIN product p ON sku.product_id = p.id
JOIN client_sku cs ON sku.id = cs.sku_id JOIN client_sku cs ON sku.id = cs.sku_id
LEFT JOIN sales_7 ON sku.id = sales_7.sku_id LEFT JOIN sales_7 ON sku.id = sales_7.sku_id
LEFT JOIN sales_14 ON sku.id = sales_14.sku_id LEFT JOIN sales_14 ON sku.id = sales_14.sku_id

View File

@ -13,9 +13,14 @@ SELECT c.internal_code AS '客户代码',
WHEN s2.erp_code IS NOT NULL WHEN s2.erp_code IS NOT NULL
THEN s2.erp_code THEN s2.erp_code
END AS 'SKU', END AS 'SKU',
p.zh_name AS '', s2.zh_name AS '',
poc.quantity AS '', poc.quantity AS '',
p.weight AS '', (
SELECT sw.weight
FROM sku_weight sw
WHERE sw.sku_id = s.id
ORDER BY effective_date DESC LIMIT 1
) AS '',
poc.purchase_fee AS '', poc.purchase_fee AS '',
poc.service_fee AS '', poc.service_fee AS '',
poc.shipping_fee AS '', poc.shipping_fee AS '',
@ -35,7 +40,6 @@ SELECT c.internal_code AS '客户代码',
po.logistic_channel_name AS '' po.logistic_channel_name AS ''
FROM platform_order_content poc FROM platform_order_content poc
LEFT JOIN sku s2 ON poc.sku_id = s2.id LEFT JOIN sku s2 ON poc.sku_id = s2.id
LEFT JOIN product p ON s2.product_id = p.id
JOIN platform_order po ON poc.platform_order_id = po.id JOIN platform_order po ON poc.platform_order_id = po.id
JOIN shop s ON po.shop_id = s.id JOIN shop s ON po.shop_id = s.id
JOIN client c ON s.owner_id = c.id JOIN client c ON s.owner_id = c.id

View File

@ -1,11 +1,11 @@
CREATE OR REPLACE VIEW sku_country_channel_choice AS CREATE OR REPLACE VIEW sku_country_channel_choice AS
SELECT sku.id AS id, SELECT sku.id AS id,
cs.client_id AS client_id, cs.client_id AS client_id,
sku.product_id AS product_id, sku.id AS product_id,
sku.erp_code AS erp_code, sku.erp_code AS erp_code,
sku.image_source AS image_source, sku.image_source AS image_source,
sku.available_amount AS available_amount, sku.available_amount AS available_amount,
p.moq AS moq, sku.moq AS moq,
rs.quantity AS red_quantity, rs.quantity AS red_quantity,
gs.quantity AS green_quantity, gs.quantity AS green_quantity,
sales_7.quantity AS sales_7, sales_7.quantity AS sales_7,
@ -13,7 +13,6 @@ SELECT sku.id AS id,
sales_28.quantity AS sales_28, sales_28.quantity AS sales_28,
sipo.quantity AS platform_order_quantity sipo.quantity AS platform_order_quantity
FROM sku FROM sku
JOIN product p ON sku.product_id = p.id
JOIN client_sku cs ON sku.id = cs.sku_id JOIN client_sku cs ON sku.id = cs.sku_id
LEFT JOIN sales_7 ON sku.id = sales_7.sku_id LEFT JOIN sales_7 ON sku.id = sales_7.sku_id
LEFT JOIN sales_14 ON sku.id = sales_14.sku_id LEFT JOIN sales_14 ON sku.id = sales_14.sku_id

View File

@ -1,7 +1,7 @@
CREATE OR REPLACE VIEW sku_price_promotion AS CREATE OR REPLACE VIEW sku_price_promotion AS
SELECT s.id AS sku_id, SELECT s.id AS sku_id,
p.en_name AS name_en, s.en_name AS name_en,
p.zh_name AS name_zh, s.zh_name AS name_zh,
s.erp_code AS erp_code, s.erp_code AS erp_code,
s.image_source AS image_source, s.image_source AS image_source,
spr.promotion_id AS promotion_id, spr.promotion_id AS promotion_id,
@ -17,6 +17,5 @@ SELECT s.id AS sku_id,
FROM sku s FROM sku s
LEFT JOIN sku_promotion_relation spr ON s.id = spr.sku_id LEFT JOIN sku_promotion_relation spr ON s.id = spr.sku_id
LEFT JOIN sku_current_price scp ON s.id = scp.sku_id LEFT JOIN sku_current_price scp ON s.id = scp.sku_id
JOIN product p ON s.product_id = p.id
LEFT JOIN sku_in_platform_order sipo ON s.id = sipo.sku_id LEFT JOIN sku_in_platform_order sipo ON s.id = sipo.sku_id
ORDER BY sipo.quantity DESC; ORDER BY sipo.quantity DESC;

View File

@ -1,7 +1,7 @@
CREATE OR REPLACE VIEW sku_weight_discount_service_fees AS CREATE OR REPLACE VIEW sku_weight_discount_service_fees AS
SELECT s.id, SELECT s.id,
s.erp_code, s.erp_code,
p.weight, (SELECT sw.weight FROM sku_weight sw WHERE sw.sku_id = s.id ORDER BY effective_date DESC LIMIT 1) as weight,
s.shipping_discount, s.shipping_discount,
s.service_fee s.service_fee
FROM sku s JOIN product p ON p.id = s.product_id; FROM sku s

View File

@ -0,0 +1,43 @@
networks:
loki:
services:
loki:
container_name: loki
image: grafana/loki:2.9.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
volumes:
- "C:/Users/logau/Documents/wia_app/grafana/loki:/etc/loki"
networks:
- loki
grafana:
container_name: grafana
environment:
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
entrypoint:
- sh
- -euc
- |
mkdir -p /etc/grafana/provisioning/datasources
cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
orgId: 1
url: http://loki:3100
basicAuth: false
isDefault: true
version: 1
editable: false
EOF
/run.sh
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki

View File

@ -0,0 +1,62 @@
auth_enabled: false
server:
http_listen_port: 3100
common:
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
## added
query_range:
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 500
chunk_store_config:
max_look_back_period: 0s
chunk_cache_config:
embedded_cache:
enabled: true
max_size_mb: 500
ttl: 24h
## end added
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
## added
limits_config:
split_queries_by_interval: 0
ruler:
alertmanager_url: http://localhost:9093
# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration
# analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/
#
# Statistics help us better understand how Loki is used, and they show us performance
# levels for most users. This helps us prioritize features and documentation.
# For more information on what's sent, look at
# https://github.com/grafana/loki/blob/main/pkg/usagestats/stats.go
# Refer to the buildReport method to see what goes into a report.
#
# If you would like to disable reporting, uncomment the following lines:
#analytics:
# reporting_enabled: false

View File

@ -3,7 +3,6 @@ package org.jeecg.modules.business.controller.admin;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.business.entity.ShippingDiscount;
import org.jeecg.modules.business.entity.ShippingFeesWaiver; import org.jeecg.modules.business.entity.ShippingFeesWaiver;
import org.jeecg.modules.business.entity.ShippingFeesWaiverProduct; import org.jeecg.modules.business.entity.ShippingFeesWaiverProduct;
import org.jeecg.modules.business.service.IShippingFeesWaiverProductService; import org.jeecg.modules.business.service.IShippingFeesWaiverProductService;

View File

@ -373,24 +373,23 @@ public class SkuController {
} catch (RuntimeException e) { } catch (RuntimeException e) {
return Result.error("Error 400 Bad Request"); return Result.error("Error 400 Bad Request");
} }
List<SkuOrderPage> allSkuOrdersPage = new ArrayList<>(); List<SkuOrderPage> skuOrdersPage;
List<SkuOrderPage> skuOrdersPage = new ArrayList<>(); int total;
int total = 0;
if(erpCodes != null || zhNames != null || enNames != null) { if(erpCodes != null || zhNames != null || enNames != null) {
List<String> erpCodeList = erpCodes == null ? null : Arrays.asList(erpCodes.split(",")); List<String> erpCodeList = erpCodes == null ? null : Arrays.asList(erpCodes.split(","));
List<String> zhNameList = zhNames == null ? null : Arrays.asList(zhNames.split(",")); List<String> zhNameList = zhNames == null ? null : Arrays.asList(zhNames.split(","));
List<String> enNameList = enNames == null ? null : Arrays.asList(enNames.split(",")); List<String> enNameList = enNames == null ? null : Arrays.asList(enNames.split(","));
if(clientId != null) { if(clientId != null) {
allSkuOrdersPage = skuService.fetchSkusByClientWithFilters(clientId, 1, -1, parsedColumn, parsedOrder, erpCodeList, zhNameList, enNameList); total = skuService.countAllClientSkusWithFilters(clientId, erpCodeList, zhNameList, enNameList);
skuOrdersPage = skuService.fetchSkusByClientWithFilters(clientId, pageNo, pageSize, parsedColumn, parsedOrder, erpCodeList, zhNameList, enNameList); skuOrdersPage = skuService.fetchSkusByClientWithFilters(clientId, pageNo, pageSize, parsedColumn, parsedOrder, erpCodeList, zhNameList, enNameList);
} else { } else {
total = skuService.countAllSkuWeightsWithFilters(); total = skuService.countAllSkuWeightsWithFilters(erpCodeList, zhNameList, enNameList);
skuOrdersPage = skuService.fetchSkuWeightsWithFilters(pageNo, pageSize, parsedColumn, parsedOrder, erpCodeList, zhNameList, enNameList); skuOrdersPage = skuService.fetchSkuWeightsWithFilters(pageNo, pageSize, parsedColumn, parsedOrder, erpCodeList, zhNameList, enNameList);
} }
} }
else { else {
if(clientId != null) { if(clientId != null) {
allSkuOrdersPage = skuService.fetchSkusByClient(clientId, 1, -1, parsedColumn, parsedOrder); total = skuService.countAllClientSkus();
skuOrdersPage = skuService.fetchSkusByClient(clientId, pageNo, pageSize, parsedColumn, parsedOrder); skuOrdersPage = skuService.fetchSkusByClient(clientId, pageNo, pageSize, parsedColumn, parsedOrder);
} else { } else {
total = skuService.countAllSkus(); total = skuService.countAllSkus();

View File

@ -18,6 +18,7 @@ import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
@ -29,6 +30,7 @@ import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toList;
@Component
@Slf4j @Slf4j
public class ChangeWarehouseJob implements Job { public class ChangeWarehouseJob implements Job {
@Autowired @Autowired

View File

@ -13,6 +13,7 @@ import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
@ -25,7 +26,7 @@ import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Component
@Slf4j @Slf4j
public class ConfirmedClientsInvoicingJob implements Job { public class ConfirmedClientsInvoicingJob implements Job {
@Autowired @Autowired

View File

@ -12,6 +12,7 @@ import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
@ -22,11 +23,12 @@ import java.util.List;
import static org.jeecg.modules.business.domain.api.mabang.getorderlist.OrderStatus.*; import static org.jeecg.modules.business.domain.api.mabang.getorderlist.OrderStatus.*;
@Setter
@Component
@Slf4j @Slf4j
public class MabangJob implements Job { public class MabangJob implements Job {
@Autowired @Autowired
@Setter
private IPlatformOrderMabangService platformOrderMabangService; private IPlatformOrderMabangService platformOrderMabangService;
private static final Integer DEFAULT_NUMBER_OF_DAYS = 5; private static final Integer DEFAULT_NUMBER_OF_DAYS = 5;

View File

@ -13,10 +13,12 @@ import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext; import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*; import java.util.*;
@Slf4j @Slf4j
@Component
public class MabangOrderSyncJob implements Job { public class MabangOrderSyncJob implements Job {
@Autowired @Autowired

View File

@ -5,7 +5,6 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject; import org.codehaus.jettison.json.JSONObject;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.*; import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.*;
import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuData; import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuData;
@ -51,9 +50,6 @@ public class MabangSkuJob implements Job {
private static final Integer DEFAULT_NUMBER_OF_DAYS = 5; private static final Integer DEFAULT_NUMBER_OF_DAYS = 5;
private static final DateType DEFAULT_DATE_TYPE = DateType.CREATE; private static final DateType DEFAULT_DATE_TYPE = DateType.CREATE;
@Autowired
private ISysBaseAPI ISysBaseApi;
@Override @Override
public void execute(JobExecutionContext context) throws JobExecutionException { public void execute(JobExecutionContext context) throws JobExecutionException {
LocalDateTime endDateTime = LocalDateTime.now(ZoneId.of(ZoneId.SHORT_IDS.get("CTT"))); LocalDateTime endDateTime = LocalDateTime.now(ZoneId.of(ZoneId.SHORT_IDS.get("CTT")));

View File

@ -73,5 +73,5 @@ public class ShippingFeesWaiverProduct implements Serializable {
@Excel(name = "产品ID", width = 15, dictTable = "product", dicText = "code", dicCode = "id") @Excel(name = "产品ID", width = 15, dictTable = "product", dicText = "code", dicCode = "id")
@Dict(dictTable = "product", dicText = "code", dicCode = "id") @Dict(dictTable = "product", dicText = "code", dicCode = "id")
@ApiModelProperty(value = "产品ID") @ApiModelProperty(value = "产品ID")
private java.lang.String productId; private java.lang.String skuId;
} }

View File

@ -22,11 +22,6 @@ import java.util.Map;
*/ */
@Repository @Repository
public interface SkuMapper extends BaseMapper<Sku> { public interface SkuMapper extends BaseMapper<Sku> {
boolean deleteByMainId(@Param("mainId") String mainId);
List<Sku> selectByMainId(@Param("mainId") String mainId);
List<InventoryRecord> pageSkuByClientId(String clientId, long offset, long size); List<InventoryRecord> pageSkuByClientId(String clientId, long offset, long size);
long countTotal(String clientId); long countTotal(String clientId);
@ -55,7 +50,10 @@ public interface SkuMapper extends BaseMapper<Sku> {
List<SkuQuantity> getSkuQuantitiesFromOrderIds(@Param("orderIds") List<String> orderIds); List<SkuQuantity> getSkuQuantitiesFromOrderIds(@Param("orderIds") List<String> orderIds);
Integer countAllSkus(); Integer countAllSkus();
Integer countAllSkuWeightsWithFilters(); Integer countAllSkuWeightsWithFilters(@Param("erpCodes") String erpCodesRegex, @Param("zhNames") String zhNamesRegex, @Param("enNames") String enNamesRegex);
Integer countAllClientSkus();
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); List<SkuOrderPage> fetchSkuWeights(@Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order);
List<SkuOrderPage> fetchSkusByClient(@Param("clientId") String clientId, @Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order); List<SkuOrderPage> fetchSkusByClient(@Param("clientId") String clientId, @Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order);
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> 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);

View File

@ -13,17 +13,15 @@
FROM purchase_order_sku FROM purchase_order_sku
WHERE purchase_order_id = #{mainId} </select> WHERE purchase_order_id = #{mainId} </select>
<select id="selectInvoiceDataByID" resultType="org.jeecg.modules.business.domain.purchase.invoice.PurchaseInvoiceEntry"> <select id="selectInvoiceDataByID" resultType="org.jeecg.modules.business.domain.purchase.invoice.PurchaseInvoiceEntry">
SELECT s.erp_code, p.en_name, pos.quantity, pos.total_amount SELECT s.erp_code, s.en_name, pos.quantity, pos.total_amount
FROM purchase_order_sku pos FROM purchase_order_sku pos
JOIN sku s on pos.sku_id = s.id JOIN sku s on pos.sku_id = s.id
JOIN product p on s.product_id = p.id
WHERE purchase_order_id = #{purchaseID} WHERE purchase_order_id = #{purchaseID}
</select> </select>
<select id="selectInvoicesDataByID" resultType="org.jeecg.modules.business.domain.purchase.invoice.PurchaseInvoiceEntry"> <select id="selectInvoicesDataByID" resultType="org.jeecg.modules.business.domain.purchase.invoice.PurchaseInvoiceEntry">
SELECT s.erp_code, p.en_name, SUM(pos.quantity) as quantity, SUM(pos.total_amount) as total_amount SELECT s.erp_code, s.en_name, SUM(pos.quantity) as quantity, SUM(pos.total_amount) as total_amount
FROM purchase_order_sku pos FROM purchase_order_sku pos
JOIN sku s on pos.sku_id = s.id JOIN sku s on pos.sku_id = s.id
JOIN product p on s.product_id = p.id
WHERE purchase_order_id IN WHERE purchase_order_id IN
<foreach collection="purchaseIds" item="purchaseId" index="i" open="(" close=")" separator=","> <foreach collection="purchaseIds" item="purchaseId" index="i" open="(" close=")" separator=",">
#{purchaseId} #{purchaseId}

View File

@ -4,10 +4,8 @@
<select id="getHighestPriorityAttribute" resultType="org.jeecg.modules.business.entity.SensitiveAttribute"> <select id="getHighestPriorityAttribute" resultType="org.jeecg.modules.business.entity.SensitiveAttribute">
SELECT sa.en_name, sa.priority SELECT sa.en_name, sa.priority
FROM sensitive_attribute sa FROM sensitive_attribute sa
JOIN product p
ON sa.id = p.sensitive_attribute_id
JOIN sku s JOIN sku s
ON p.id = s.product_id ON s.sensitive_attribute_id = sa.id
JOIN platform_order_content poc JOIN platform_order_content poc
ON s.id = poc.sku_id ON s.id = poc.sku_id
JOIN platform_order po JOIN platform_order po
@ -18,10 +16,8 @@
<select id="getHighestPriorityAttributeId" resultType="java.lang.String"> <select id="getHighestPriorityAttributeId" resultType="java.lang.String">
SELECT sa.id SELECT sa.id
FROM sensitive_attribute sa FROM sensitive_attribute sa
JOIN product p
ON sa.id = p.sensitive_attribute_id
JOIN sku s JOIN sku s
ON p.id = s.product_id ON sa.id = s.sensitive_attribute_id
JOIN platform_order_content poc JOIN platform_order_content poc
ON s.id = poc.sku_id ON s.id = poc.sku_id
JOIN platform_order po JOIN platform_order po

View File

@ -20,7 +20,7 @@
SELECT sku.id, sku.erp_code, sfw.id AS waiver_id, sfw.name AS waiver_name, sfw.threshold, sfw.fees SELECT sku.id, sku.erp_code, sfw.id AS waiver_id, sfw.name AS waiver_name, sfw.threshold, sfw.fees
FROM shipping_fees_waiver_product sfwp FROM shipping_fees_waiver_product sfwp
JOIN shipping_fees_waiver sfw ON sfwp.waiver_id = sfw.id JOIN shipping_fees_waiver sfw ON sfwp.waiver_id = sfw.id
JOIN sku ON sku.product_id = sfwp.product_id JOIN sku ON sku.id = sfwp.sku_id
WHERE sku.id IN WHERE sku.id IN
<foreach collection="list" index="i" item="item" open="(" separator="," close=")">#{item}</foreach> <foreach collection="list" index="i" item="item" open="(" separator="," close=")">#{item}</foreach>
</select> </select>

View File

@ -1,18 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.business.mapper.SkuMapper"> <mapper namespace="org.jeecg.modules.business.mapper.SkuMapper">
<delete id="deleteByMainId" parameterType="java.lang.String">
DELETE
FROM sku
WHERE product_id = #{mainId} </delete>
<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.business.entity.Sku">
SELECT *
FROM sku
WHERE product_id = #{mainId} </select>
<sql id="selectSkuByClientId"> <sql id="selectSkuByClientId">
SELECT * SELECT *
FROM inventory_record i FROM inventory_record i
@ -179,6 +167,13 @@
LIMIT #{offset}, #{size} LIMIT #{offset}, #{size}
; ;
</select> </select>
<select id="countAllClientSkus" resultType="java.lang.Integer">
SELECT COUNT(*) AS total
FROM sku s
JOIN client_sku ON s.id = client_sku.sku_id
WHERE s.status = 3
AND client_sku.client_id = #{clientId};
</select>
<select id="fetchSkusByClient" resultType="org.jeecg.modules.business.vo.SkuOrderPage"> <select id="fetchSkusByClient" resultType="org.jeecg.modules.business.vo.SkuOrderPage">
WITH qtyInOrdersNotShipped AS ( WITH qtyInOrdersNotShipped AS (
SELECT sku_id as ID, SUM(quantity) AS quantity SELECT sku_id as ID, SUM(quantity) AS quantity
@ -193,11 +188,11 @@
) )
SELECT s.id, SELECT s.id,
s.erp_code, s.erp_code,
p.en_name as productEn, s.en_name as productEn,
p.zh_name as product, s.zh_name as product,
s.purchasing_amount, s.purchasing_amount,
s.available_amount, s.available_amount,
qtyInOrdersNotShipped.quantity as qtyInOrdersNotShipped, qtyInOrdersNotShipped.quantity as qtyInOrdersNotShipped,
s.available_amount + s.purchasing_amount - IF(qtyInOrdersNotShipped.quantity IS NULL, 0, qtyInOrdersNotShipped.quantity) as stock, s.available_amount + s.purchasing_amount - IF(qtyInOrdersNotShipped.quantity IS NULL, 0, qtyInOrdersNotShipped.quantity) as stock,
s.image_source, s.image_source,
s.service_fee, s.service_fee,
@ -229,7 +224,6 @@
s42.quantity as sales_six_weeks s42.quantity as sales_six_weeks
FROM sku s FROM sku s
JOIN client_sku ON s.id = client_sku.sku_id JOIN client_sku ON s.id = client_sku.sku_id
JOIN product p ON s.product_id = p.id
LEFT JOIN sku_current_price sp ON s.id = sp.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_28 s28 ON s.id = s28.sku_id
LEFT JOIN sales_42 s42 ON s.id = s42.sku_id LEFT JOIN sales_42 s42 ON s.id = s42.sku_id
@ -238,9 +232,7 @@
WHERE client_sku.client_id = #{clientId} WHERE client_sku.client_id = #{clientId}
AND s.status = 3 AND s.status = 3
ORDER BY ${column} ${order} ORDER BY ${column} ${order}
<if test="size != -1"> LIMIT #{offset}, #{size}
LIMIT #{offset}, #{size}
</if>
; ;
</select> </select>
<select id="countAllSkuWeightsWithFilters" resultType="java.lang.Integer"> <select id="countAllSkuWeightsWithFilters" resultType="java.lang.Integer">
@ -306,6 +298,30 @@
</if> </if>
; ;
</select> </select>
<select id="countAllClientSkusWithFilters" resultType="java.lang.Integer">
SELECT COUNT(*) AS total
FROM sku s
JOIN client_sku ON s.id = client_sku.sku_id
WHERE s.status = 3
AND client_sku.client_id = #{clientId}
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>
);
</select>
<select id="fetchSkusByClientWithFilters" resultType="org.jeecg.modules.business.vo.SkuOrderPage"> <select id="fetchSkusByClientWithFilters" resultType="org.jeecg.modules.business.vo.SkuOrderPage">
WITH qtyInOrdersNotShippedCTE AS ( WITH qtyInOrdersNotShippedCTE AS (
SELECT sku_id as ID, SUM(quantity) AS quantity SELECT sku_id as ID, SUM(quantity) AS quantity
@ -320,8 +336,8 @@
) )
SELECT s.id, SELECT s.id,
s.erp_code, s.erp_code,
p.en_name as productEn, s.en_name as productEn,
p.zh_name as product, s.zh_name as product,
s.purchasing_amount, s.purchasing_amount,
s.available_amount, s.available_amount,
qtyInOrdersNotShippedCTE.quantity as qtyInOrdersNotShipped, qtyInOrdersNotShippedCTE.quantity as qtyInOrdersNotShipped,
@ -356,7 +372,6 @@
s42.quantity as sales_six_weeks s42.quantity as sales_six_weeks
FROM sku s FROM sku s
JOIN client_sku ON s.id = client_sku.sku_id JOIN client_sku ON s.id = client_sku.sku_id
JOIN product p ON s.product_id = p.id
LEFT JOIN sku_current_price sp ON s.id = sp.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_28 s28 ON s.id = s28.sku_id
LEFT JOIN sales_42 s42 ON s.id = s42.sku_id LEFT JOIN sales_42 s42 ON s.id = s42.sku_id
@ -372,13 +387,13 @@
<if test="erpCodes != ''"> <if test="erpCodes != ''">
AND AND
</if> </if>
p.zh_name REGEXP #{zhNames} s.zh_name REGEXP #{zhNames}
</if> </if>
<if test="enNames != ''"> <if test="enNames != ''">
<if test="erpCodes != '' || zhNames != ''"> <if test="erpCodes != '' || zhNames != ''">
AND AND
</if> </if>
p.en_name REGEXP #{enNames} s.en_name REGEXP #{enNames}
</if> </if>
) )
ORDER BY ${column} ${order} ORDER BY ${column} ${order}
@ -407,8 +422,8 @@
) )
SELECT s.id, SELECT s.id,
s.erp_code, s.erp_code,
p.en_name as productEn, s.en_name as productEn,
p.zh_name as product, s.zh_name as product,
sfi.quantity as qtyOrdered, sfi.quantity as qtyOrdered,
s.purchasing_amount as purchasing_amount, s.purchasing_amount as purchasing_amount,
s.available_amount as available_amount, s.available_amount as available_amount,
@ -446,7 +461,6 @@
IFNULL(s28.quantity, 0) as sales_four_weeks, IFNULL(s28.quantity, 0) as sales_four_weeks,
IFNULL(s42.quantity, 0) as sales_six_weeks IFNULL(s42.quantity, 0) as sales_six_weeks
FROM sku s FROM sku s
JOIN product p ON s.product_id = p.id
LEFT JOIN sku_price sp ON s.id = sp.sku_id 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_28 s28 ON s.id = s28.sku_id
LEFT JOIN sales_42 s42 ON s.id = s42.sku_id LEFT JOIN sales_42 s42 ON s.id = s42.sku_id

View File

@ -21,8 +21,6 @@ import java.util.Map;
*/ */
public interface ISkuService extends IService<Sku> { public interface ISkuService extends IService<Sku> {
List<Sku> listSkus(); List<Sku> listSkus();
List<Sku> selectByMainId(String mainId);
/** /**
* *
*/ */
@ -97,10 +95,14 @@ public interface ISkuService extends IService<Sku> {
Integer countAllSkus(); Integer countAllSkus();
List<SkuOrderPage> fetchSkuWeights(Integer pageNo, Integer pageSize, String parsedColumn, String parsedOrder); List<SkuOrderPage> fetchSkuWeights(Integer pageNo, Integer pageSize, String parsedColumn, String parsedOrder);
Integer countAllClientSkus();
List<SkuOrderPage> fetchSkusByClient(String clientId, Integer pageNo, Integer pageSize, String column, String order); List<SkuOrderPage> fetchSkusByClient(String clientId, Integer pageNo, Integer pageSize, String column, String order);
Integer countAllSkuWeightsWithFilters(); Integer countAllSkuWeightsWithFilters(List<String> erpCodeList, List<String> zhNameList, List<String> enNameList);
List<SkuOrderPage> fetchSkuWeightsWithFilters(Integer pageNo, Integer pageSize, String parsedColumn, String parsedOrder, List<String> erpCodes, List<String> zhNames, List<String> enNames); List<SkuOrderPage> fetchSkuWeightsWithFilters(Integer pageNo, Integer pageSize, String parsedColumn, String parsedOrder, List<String> erpCodes, List<String> zhNames, List<String> enNames);
Integer countAllClientSkusWithFilters(String clientId, List<String> erpCodeList, List<String> zhNameList, List<String> enNameList);
List<SkuOrderPage> fetchSkusByClientWithFilters(String clientId, Integer pageNo, Integer pageSize, String column, String order, List<String> erpCodes, List<String> zhNames, List<String> enNames); List<SkuOrderPage> fetchSkusByClientWithFilters(String clientId, Integer pageNo, Integer pageSize, String column, String order, List<String> erpCodes, List<String> zhNames, List<String> enNames);
void addSkuQuantity(Map<String, Integer> quantityPurchased); void addSkuQuantity(Map<String, Integer> quantityPurchased);

View File

@ -36,7 +36,6 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuService { public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuService {
@Autowired @Autowired
private SkuMapper skuMapper; private SkuMapper skuMapper;
@Autowired @Autowired
@ -158,11 +157,6 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
return skuMapper.listSkus(); return skuMapper.listSkus();
} }
@Override
public List<Sku> selectByMainId(String mainId) {
return skuMapper.selectByMainId(mainId);
}
@Override @Override
public void fillPageForCurrentClient(Page<InventoryRecord> page) { public void fillPageForCurrentClient(Page<InventoryRecord> page) {
// search client id for current user // search client id for current user
@ -425,14 +419,40 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
return skuMapper.fetchSkuWeights(offset, pageSize, column, order); return skuMapper.fetchSkuWeights(offset, pageSize, column, order);
} }
@Override
public Integer countAllClientSkus() {
return skuMapper.countAllClientSkus();
}
@Override @Override
public List<SkuOrderPage> fetchSkusByClient(String clientId, Integer pageNo, Integer pageSize, String column, String order) { public List<SkuOrderPage> fetchSkusByClient(String clientId, Integer pageNo, Integer pageSize, String column, String order) {
int offset = (pageNo - 1) * pageSize; int offset = (pageNo - 1) * pageSize;
return skuMapper.fetchSkusByClient(clientId, offset, pageSize, column, order); return skuMapper.fetchSkusByClient(clientId, offset, pageSize, column, order);
} }
@Override @Override
public Integer countAllSkuWeightsWithFilters() { public Integer countAllSkuWeightsWithFilters(List<String> erpCodes, List<String> zhNames, List<String> enNames) {
return skuMapper.countAllSkuWeightsWithFilters(); 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.countAllSkuWeightsWithFilters(erpCodesRegex.toString(), zhNamesRegex.toString(), enNamesRegex.toString());
} }
@Override @Override
public List<SkuOrderPage> fetchSkuWeightsWithFilters(Integer pageNo, Integer pageSize, String column, String order, List<String> erpCodes, List<String> zhNames, List<String> enNames) { public List<SkuOrderPage> fetchSkuWeightsWithFilters(Integer pageNo, Integer pageSize, String column, String order, List<String> erpCodes, List<String> zhNames, List<String> enNames) {
@ -462,6 +482,33 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
return skuMapper.fetchSkuWeightsWithFilters(offset, pageSize, column, order, erpCodesRegex.toString(), zhNamesRegex.toString(), enNamesRegex.toString()); return skuMapper.fetchSkuWeightsWithFilters(offset, pageSize, column, order, erpCodesRegex.toString(), zhNamesRegex.toString(), enNamesRegex.toString());
} }
@Override
public Integer countAllClientSkusWithFilters(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.countAllClientSkusWithFilters(clientId, erpCodesRegex.toString(), zhNamesRegex.toString(), enNamesRegex.toString());
}
@Override @Override
public List<SkuOrderPage> fetchSkusByClientWithFilters(String clientId, Integer pageNo, Integer pageSize, String column, String order, List<String> erpCodes, List<String> zhNames, List<String> enNames) { public List<SkuOrderPage> fetchSkusByClientWithFilters(String clientId, Integer pageNo, Integer pageSize, String column, String order, List<String> erpCodes, List<String> zhNames, List<String> enNames) {
int offset = (pageNo - 1) * pageSize; int offset = (pageNo - 1) * pageSize;

View File

@ -60,6 +60,30 @@
</appender> </appender>
<!-- 每天生成一个html格式的日志结束 --> <!-- 每天生成一个html格式的日志结束 -->
<!-- loki日志输出 -->
<appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
<http>
<url>http://localhost:3100/loki/api/v1/push</url>
</http>
<format>
<label>
<pattern>app=WIA-APP,host=${HOSTNAME},level=%level</pattern>
<readMarkers>true</readMarkers>
</label>
<message>
<pattern>
{
"level":"%-5level",
"class":"%class{0}",
"thread":%.10thread,
"message": "%msg",
"exception": "%ex"
}
</pattern>
</message>
</format>
</appender>
<!--myibatis log configure --> <!--myibatis log configure -->
<logger name="com.apache.ibatis" level="TRACE" /> <logger name="com.apache.ibatis" level="TRACE" />
<logger name="java.sql.Connection" level="DEBUG" /> <logger name="java.sql.Connection" level="DEBUG" />
@ -72,6 +96,7 @@
<appender-ref ref="FILE" /> <appender-ref ref="FILE" />
<appender-ref ref="HTML" /> <appender-ref ref="HTML" />
<appender-ref ref="FILE_HTML" /> <appender-ref ref="FILE_HTML" />
<appender-ref ref="LOKI" />
</root> </root>
</configuration> </configuration>

View File

@ -116,6 +116,11 @@
</repositories> </repositories>
<dependencies> <dependencies>
<dependency>
<groupId>com.github.loki4j</groupId>
<artifactId>loki-logback-appender</artifactId>
<version>1.4.1</version>
</dependency>
<dependency> <dependency>
<!-- For MongoDB connectivity --> <!-- For MongoDB connectivity -->
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>