diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ChangeOrderRequestBody.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ChangeOrderRequestBody.java index d03bdf54b..3ab5bebc2 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ChangeOrderRequestBody.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/dochangeorder/ChangeOrderRequestBody.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.lang3.tuple.Triple; import org.jeecg.modules.business.domain.api.mabang.RequestBody; import java.util.HashSet; @@ -18,9 +19,9 @@ public class ChangeOrderRequestBody implements RequestBody { private String orderStatus; private String remark; - private final HashSet> oldSkuData; + private HashSet> oldSkuData; - private final HashSet> newSkuData; + private HashSet> newSkuData; private final static String DEFAULT_WAREHOUSE_NAME = "SZBA宝安仓"; @@ -36,7 +37,25 @@ public class ChangeOrderRequestBody implements RequestBody { } } - public ChangeOrderRequestBody(String platformOrderId, String orderStatus, HashSet> oldSkuData, + public ChangeOrderRequestBody() { + } + + public static ChangeOrderRequestBody buildChangeOrderRequestBody(String platformOrderId, String orderStatus, + HashSet> oldSkuData, + HashSet> newSkuData, String remark) { + ChangeOrderRequestBody body = new ChangeOrderRequestBody(); + body.platformOrderId = platformOrderId; + body.orderStatus = orderStatus; + body.oldSkuData = new HashSet<>(); + if (oldSkuData != null) { + oldSkuData.forEach(pair -> body.oldSkuData.add(Triple.of(pair.getLeft(), null, pair.getRight()))); + } + body.newSkuData = newSkuData; + body.remark = remark; + return body; + } + + public ChangeOrderRequestBody(String platformOrderId, String orderStatus, HashSet> oldSkuData, HashSet> newSkuData, String remark) { this.platformOrderId = platformOrderId; this.oldSkuData = oldSkuData; @@ -58,17 +77,20 @@ public class ChangeOrderRequestBody implements RequestBody { putNonNull(json, "remark", remark); JSONArray stockDataArray = new JSONArray(); if (oldSkuData != null && !oldSkuData.isEmpty()) { - for (Pair oldSkuDatum : oldSkuData) { + for (Triple oldSkuDatum : oldSkuData) { JSONObject stockData = new JSONObject(); stockData.put("warehouseName", DEFAULT_WAREHOUSE_NAME); - stockData.put("stockSku", oldSkuDatum.getKey()); - stockData.put("quantity", oldSkuDatum.getValue()); + stockData.put("stockSku", oldSkuDatum.getLeft()); + if (oldSkuDatum.getMiddle() != null) { + stockData.put("erpOrderItemId", oldSkuDatum.getMiddle()); + } + stockData.put("quantity", oldSkuDatum.getRight()); stockData.put("type", OperationType.REMOVE.code); stockDataArray.add(stockData); } } - if(newSkuData != null) { + if (newSkuData != null) { for (Pair newSkuDatum : newSkuData) { JSONObject stockData = new JSONObject(); stockData.put("warehouseName", DEFAULT_WAREHOUSE_NAME); @@ -78,7 +100,7 @@ public class ChangeOrderRequestBody implements RequestBody { stockDataArray.add(stockData); } } - putNonNull(json,"stockData", stockDataArray.toJSONString()); + putNonNull(json, "stockData", stockDataArray.toJSONString()); return json; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddCardJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddCardJob.java index b09d1e2c3..7207f2248 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddCardJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddCardJob.java @@ -123,8 +123,8 @@ public class AddCardJob implements Job { // Still no card in order, add one HashSet> card = new HashSet<>(); card.add(Pair.of(CARD_SKU, 1)); - ChangeOrderRequestBody changeOrderRequestBody = new ChangeOrderRequestBody(mabangOrder.getPlatformOrderId(), null, - null, card, null); + ChangeOrderRequestBody changeOrderRequestBody = ChangeOrderRequestBody.buildChangeOrderRequestBody( + mabangOrder.getPlatformOrderId(), null, null, card, null); changeOrderRequests.add(changeOrderRequestBody); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddGiftJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddGiftJob.java new file mode 100644 index 000000000..97648708c --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddGiftJob.java @@ -0,0 +1,232 @@ +package org.jeecg.modules.business.domain.job; + +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.Pair; +import org.apache.commons.lang3.tuple.Triple; +import org.codehaus.jettison.json.JSONArray; +import org.codehaus.jettison.json.JSONException; +import org.codehaus.jettison.json.JSONObject; +import org.jeecg.modules.business.domain.api.mabang.dochangeorder.ChangeOrderRequest; +import org.jeecg.modules.business.domain.api.mabang.dochangeorder.ChangeOrderRequestBody; +import org.jeecg.modules.business.domain.api.mabang.dochangeorder.ChangeOrderResponse; +import org.jeecg.modules.business.domain.api.mabang.getorderlist.*; +import org.jeecg.modules.business.entity.GiftRule; +import org.jeecg.modules.business.entity.PlatformOrder; +import org.jeecg.modules.business.service.IGiftRulesService; +import org.jeecg.modules.business.service.IPlatformOrderMabangService; +import org.jeecg.modules.business.service.IPlatformOrderService; +import org.jetbrains.annotations.NotNull; +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static java.util.stream.Collectors.groupingBy; + +@Slf4j +public class AddGiftJob implements Job { + + private static final Integer DEFAULT_NUMBER_OF_DAYS = 30; + + private static final List DEFAULT_SHOPS = Arrays.asList("FC Takumiya", "FCFR"); + private static final Integer DEFAULT_NUMBER_OF_THREADS = 10; + private static final String OBSOLETE_STATUS_CODE = "4"; + + @Autowired + private IPlatformOrderService platformOrderService; + @Autowired + private IGiftRulesService giftRulesService; + @Autowired + private IPlatformOrderMabangService platformOrderMabangService; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + LocalDateTime endDateTime = LocalDateTime.now(); + LocalDateTime startDateTime = endDateTime.minusDays(DEFAULT_NUMBER_OF_DAYS); + List shops = DEFAULT_SHOPS; + JobDataMap jobDataMap = context.getMergedJobDataMap(); + String parameter = ((String) jobDataMap.get("parameter")); + if (parameter != null) { + try { + JSONObject jsonObject = new JSONObject(parameter); + if (!jsonObject.isNull("startDateTime")) { + String startDateStr = jsonObject.getString("startDateTime"); + startDateTime = LocalDateTime.parse(startDateStr); + } + if (!jsonObject.isNull("endDateTime")) { + String endDateStr = jsonObject.getString("endDateTime"); + endDateTime = LocalDateTime.parse(endDateStr); + } + if (!jsonObject.isNull("shops")) { + JSONArray shopsArray = jsonObject.getJSONArray("shops"); + List shopList = new ArrayList<>(); + for (int i = 0; i < shopsArray.length(); i++) { + shopList.add(shopsArray.getString(i)); + } + shops = shopList; + } + } catch (JSONException e) { + log.error("Error while parsing parameter as JSON, falling back to default parameters."); + } + } + + if (!endDateTime.isAfter(startDateTime)) { + throw new RuntimeException("EndDateTime must be strictly greater than StartDateTime !"); + } + + List platformOrders = platformOrderService.fetchUninvoicedOrdersForShops(startDateTime, endDateTime, shops); + List platformOrderIds = platformOrders.stream().map(PlatformOrder::getPlatformOrderId).collect(Collectors.toList()); + List> platformOrderIdLists = Lists.partition(platformOrderIds, 10); + List giftRules = giftRulesService.findGiftRulesByShopCode(shops); + Map>> rulesMap = giftRules.stream() + .collect(groupingBy(GiftRule::getShopCode, + groupingBy(GiftRule::getMatchQuantity))); + Map> giftSetByShop = giftRules.stream() + .collect(Collectors.groupingBy(GiftRule::getShopCode, + Collector.of(HashSet::new, (s, rule) -> s.add(rule.getSku()), (s1, s2) -> { + s1.addAll(s2); + return s1; + }))); + + List requests = new ArrayList<>(); + for (List platformOrderIdList : platformOrderIdLists) { + requests.add(new OrderListRequestBody().setPlatformOrderIds(platformOrderIdList)); + } + List mabangOrders = new ArrayList<>(); + + ExecutorService executor = Executors.newFixedThreadPool(DEFAULT_NUMBER_OF_THREADS); + List> futures = requests.stream() + .map(request -> CompletableFuture.supplyAsync(() -> { + boolean success = false; + try { + OrderListRawStream rawStream = new OrderListRawStream(request); + OrderListStream stream = new OrderListStream(rawStream); + List orders = stream.all(); + mabangOrders.addAll(orders); + success = !orders.isEmpty(); + } catch (RuntimeException e) { + log.error("Error communicating with MabangAPI", e); + } + return success; + }, executor)) + .collect(Collectors.toList()); + List results = futures.stream().map(CompletableFuture::join).collect(Collectors.toList()); + long nbSuccesses = results.stream().filter(b -> b).count(); + log.info("{}/{} requests have succeeded.", nbSuccesses, requests.size()); + log.info("{}/{} mabang orders have been retrieved.", mabangOrders.size(), platformOrderIds.size()); + + List ordersWithLogistic = new ArrayList<>(); + log.info("Constructing gift insertion requests"); + List giftInsertionRequests = constructGiftInsertionRequests(mabangOrders, rulesMap, giftSetByShop, ordersWithLogistic); + log.info("{} gift insertion requests to be sent to MabangAPI", giftInsertionRequests.size()); + + log.info("Clearing logistic channel names before inserting gifts"); + platformOrderMabangService.clearLogisticChannel(ordersWithLogistic, executor); + + List> giftInsertionFutures = giftInsertionRequests.stream() + .map(giftInsertionRequestBody -> CompletableFuture.supplyAsync(() -> { + boolean success = false; + try { + ChangeOrderRequest changeOrderRequest = new ChangeOrderRequest(giftInsertionRequestBody); + ChangeOrderResponse response = changeOrderRequest.send(); + success = response.success(); + } catch (RuntimeException e) { + log.error("Error communicating with MabangAPI", e); + } + return success; + }, executor)) + .collect(Collectors.toList()); + results = giftInsertionFutures.stream().map(CompletableFuture::join).collect(Collectors.toList()); + nbSuccesses = results.stream().filter(b -> b).count(); + log.info("{}/{} gift insertion requests have succeeded.", nbSuccesses, giftInsertionRequests.size()); + } + + @NotNull + private static List constructGiftInsertionRequests(List mabangOrders, + Map>> rulesMap, + Map> giftSetByShop, + List ordersWithLogistic) { + List giftInsertionRequests = new ArrayList<>(); + Map> ordersByShop = mabangOrders.stream().collect(groupingBy(Order::getShopErpCode)); + // Go through orders by Shop + for (Map.Entry> entry : ordersByShop.entrySet()) { + String shopCode = entry.getKey(); + log.info("Going through orders from shop {}", shopCode); + Map> rulesByType = rulesMap.get(shopCode); + Set giftSkuSet = giftSetByShop.get(shopCode); + List matchingQuantityRules = rulesByType.get(Boolean.TRUE); + List nonMatchingQuantityRules = rulesByType.get(Boolean.FALSE); + + for (Order order : entry.getValue()) { + log.info("Processing order {} ", order.getPlatformOrderId()); + // Non matching-quantity rules only apply once per order + boolean nonMatchingRulesApplied = false; + HashMap newGiftMap = new HashMap<>(); + Map> orderItemMap = order.getOrderItems() + .stream() + .filter(orderItem -> !orderItem.getStatus().equalsIgnoreCase(OBSOLETE_STATUS_CODE)) + .collect(groupingBy(orderItem -> giftSkuSet.contains(orderItem.getErpCode()))); + for (OrderItem orderItem : orderItemMap.get(Boolean.FALSE)) { + String erpCode = orderItem.getErpCode(); + if (!nonMatchingRulesApplied) { + for (GiftRule giftRule : nonMatchingQuantityRules) { + if (erpCode.matches(giftRule.getRegex())) { + nonMatchingRulesApplied = true; + putValueInMapOrReduce(giftRule.getSku(), 1, newGiftMap); + break; + } + } + } + for (GiftRule giftRule : matchingQuantityRules) { + if (erpCode.matches(giftRule.getRegex())) { + putValueInMapOrReduce(giftRule.getSku(), orderItem.getQuantity(), newGiftMap); + break; + } + } + } + log.debug("Order {} 's new gift map : ", newGiftMap); + HashSet> oldSkuData = new HashSet<>(); + HashMap oldGiftMap = new HashMap<>(); + List oldGifts = orderItemMap.get(Boolean.TRUE) == null ? new ArrayList<>() : orderItemMap.get(Boolean.TRUE); + oldGifts.forEach(orderItem -> { + oldSkuData.add(Triple.of(orderItem.getErpCode(), + orderItem.getErpOrderItemId(), orderItem.getQuantity())); + putValueInMapOrReduce(orderItem.getErpCode(), orderItem.getQuantity(), oldGiftMap); + }); + HashSet> newSkuData = new HashSet<>(); + newGiftMap.forEach((key, value) -> newSkuData.add(Pair.of(key, value))); + + if (!newGiftMap.isEmpty() && !newGiftMap.equals(oldGiftMap)) { + ChangeOrderRequestBody changeOrderRequestBody = new ChangeOrderRequestBody(order.getPlatformOrderId(), null, + oldSkuData, newSkuData, null); + giftInsertionRequests.add(changeOrderRequestBody); + + // If the order already has a logistic channel name, then we need to clear it before inserting gifts + if (order.getLogisticChannelName() != null && !order.getLogisticChannelName().isEmpty()) { + ordersWithLogistic.add(order); + } + } + } + log.info("Ended processing orders from shop {}", shopCode); + } + return giftInsertionRequests; + } + + private static void putValueInMapOrReduce(String key, Integer value, HashMap giftMap) { + if (giftMap.containsKey(key)) { + giftMap.put(key, giftMap.get(key) + value); + } else { + giftMap.put(key, value); + } + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddPortraitTubeJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddPortraitTubeJob.java index af393e0f9..0a818e584 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddPortraitTubeJob.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/AddPortraitTubeJob.java @@ -142,8 +142,8 @@ public class AddPortraitTubeJob implements Job { HashSet> adequateTubes = currentAndAdequateTubes.getRight(); // Do nothing if current tubes are the adequate tubes if (!currentTubes.containsAll(adequateTubes) || !adequateTubes.containsAll(currentTubes)) { - ChangeOrderRequestBody changeOrderRequestBody = new ChangeOrderRequestBody(mabangOrder.getPlatformOrderId(), null, - currentTubes, adequateTubes, null); + ChangeOrderRequestBody changeOrderRequestBody = ChangeOrderRequestBody.buildChangeOrderRequestBody( + mabangOrder.getPlatformOrderId(), null, currentTubes, adequateTubes, null); changeOrderRequests.add(changeOrderRequestBody); } } @@ -249,7 +249,7 @@ public class AddPortraitTubeJob implements Job { if (canvasNew46RemainderCount > 0) { // TODO 2024-08-28 Temporarily use OLD 50cm tubes for NEW 46cm canvases tube50SingleCount++; - } else if (canvas40RemainderCount > 0) { + } else if (canvas40RemainderCount > 0 || canvasNew36RemainderCount > 0) { tube40SingleCount++; } else if (canvas30RemainderCount > 0){ tube30SingleDoubleCount++; diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SkuToCsvJob.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SkuToCsvJob.java new file mode 100644 index 000000000..307cdbd74 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/job/SkuToCsvJob.java @@ -0,0 +1,50 @@ +package org.jeecg.modules.business.domain.job; + +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.business.entity.Sku; +import org.jeecg.modules.business.service.ISkuService; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + + +@Slf4j +public class SkuToCsvJob implements Job { + + @Autowired + private ISkuService skuService; + + @Value("${jeecg.path.skuCsvPath}") + private String FILE_PATH; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + log.info("SkuToCsv Job is running ..."); + List skus = new ArrayList<>(); + Sku firstLine = new Sku(); + firstLine.setId("#"); + firstLine.setErpCode("erp_code"); + firstLine.setImageSource("image_source"); + skus.add(firstLine); + skus.addAll(skuService.listImgUrls()); + List csvLines = skus.stream() + .map(sku -> String.format("%s,%s,%s", sku.getId(), sku.getErpCode(), sku.getImageSource())).collect(Collectors.toList()); + File csvFile = new File(FILE_PATH); + + try (PrintWriter writer = new PrintWriter(csvFile)) { + csvLines.forEach(writer::println); + } catch (FileNotFoundException e) { + log.error("Error writing to file", e); + } + log.info("SkuToCsv Job is done."); + } +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/GiftRule.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/GiftRule.java new file mode 100644 index 000000000..f714c41c1 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/GiftRule.java @@ -0,0 +1,15 @@ +package org.jeecg.modules.business.entity; + +import lombok.Data; + +@Data +public class GiftRule { + + private final String shopCode; + + private final String sku; + + private final String regex; + + private final Boolean matchQuantity; +} \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/GiftRulesMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/GiftRulesMapper.java new file mode 100644 index 000000000..f44920581 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/GiftRulesMapper.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.business.entity.GiftRule; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Description: 添加赠品规则 + * @Author: jeecg-boot + * @Date: 2024-09-02 + * @Version: V1.0 + */ +@Repository +public interface GiftRulesMapper extends BaseMapper { + + List findByShop(List shopCodes); +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java index 1047e8685..efe8c8304 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/SkuMapper.java @@ -68,4 +68,6 @@ public interface SkuMapper extends BaseMapper { List getInventoryByInvoiceNumber(@Param("invoiceNumber") String invoiceNumber); List listByClientId(@Param("clientId") String clientId); + + List listImgUrls(); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/GiftRulesMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/GiftRulesMapper.xml new file mode 100644 index 000000000..9ced8b0f4 --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/GiftRulesMapper.xml @@ -0,0 +1,16 @@ + + + + + \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml index f01af9170..eb5ff6e20 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/SkuMapper.xml @@ -413,4 +413,11 @@ JOIN product p ON s.product_id = p.id WHERE client_sku.client_id = #{clientId}; + diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IGiftRulesService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IGiftRulesService.java new file mode 100644 index 000000000..39fcf190e --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IGiftRulesService.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.business.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.business.entity.GiftRule; + +import java.util.List; + +/** + * @Description: 添加赠品规则 + * @Author: jeecg-boot + * @Date: 2024-09-02 + * @Version: V1.0 + */ +public interface IGiftRulesService extends IService { + + List findGiftRulesByShopCode(List shopCodes); +} \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISkuService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISkuService.java index c981cee02..d11e8cd91 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISkuService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/ISkuService.java @@ -104,4 +104,6 @@ public interface ISkuService extends IService { void updateBatchStockByIds(List skuToUpdate); List getInventoryByInvoiceNumber(String invoiceNumber); List listByClientId(String clientId); + + List listImgUrls(); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/GiftRulesServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/GiftRulesServiceImpl.java new file mode 100644 index 000000000..dd618a3eb --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/GiftRulesServiceImpl.java @@ -0,0 +1,34 @@ +package org.jeecg.modules.business.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.jeecg.modules.business.entity.GiftRule; +import org.jeecg.modules.business.mapper.GiftRulesMapper; +import org.jeecg.modules.business.service.IGiftRulesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Description: 添加赠品规则 + * @Author: jeecg-boot + * @Date: 2024-09-02 + * @Version: V1.0 + */ +@Service +@Slf4j +public class GiftRulesServiceImpl extends ServiceImpl implements IGiftRulesService { + + @Autowired + private GiftRulesMapper giftRulesMapper; + + public GiftRulesServiceImpl(GiftRulesMapper giftRulesMapper) { + this.giftRulesMapper = giftRulesMapper; + } + + @Override + public List findGiftRulesByShopCode(List shopCodes) { + return giftRulesMapper.findByShop(shopCodes); + } +} \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuServiceImpl.java index 5be3da6e3..f426385d5 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/SkuServiceImpl.java @@ -480,4 +480,9 @@ public class SkuServiceImpl extends ServiceImpl implements ISkuS return skuMapper.listByClientId(clientId); } + @Override + public List listImgUrls() { + return skuMapper.listImgUrls(); + } + } \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml index efd1a8a4b..236848880 100644 --- a/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml +++ b/jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml @@ -233,6 +233,8 @@ jeecg: shippingInvoiceDetailDir: /wia/invoices/shippingDetail shippingInvoicePdfDir: /wia/invoices/pdf/shipping shippingInvoiceDetailPdfDir: /wia/invoices/pdf/shippingDetail + # sku csv file for image search + skuCsvPath: /mnt/wia/products/sku.csv # CDG location CGS: /wia/files/WIASourcingCGCVF_mai.pdf #webapp文件路径