From 1a6ef4fa36e5e55a4ceee0bc2973fef040174e55 Mon Sep 17 00:00:00 2001 From: Gauthier LO Date: Fri, 18 Apr 2025 09:45:41 +0200 Subject: [PATCH 1/3] feat: (WIP) skus info check between db and api --- .../controller/admin/SkuController.java | 56 +++++++++++++++++++ .../jeecg/modules/business/entity/Sku.java | 6 ++ .../modules/business/mapper/SkuMapper.java | 2 + .../modules/business/mapper/xml/SkuMapper.xml | 8 +++ .../modules/business/service/ISkuService.java | 2 + .../business/service/impl/SkuServiceImpl.java | 5 ++ 6 files changed, 79 insertions(+) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java index 086b9c4d1..030aa3f23 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.base.CaseFormat; +import com.google.common.collect.Lists; import freemarker.template.Template; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -14,7 +15,12 @@ import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuData; +import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuListRawStream; +import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuListRequestBody; +import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.SkuUpdateListStream; import org.jeecg.modules.business.entity.*; +import org.jeecg.modules.business.model.SkuDocument; import org.jeecg.modules.business.mongoService.SkuMongoService; import org.jeecg.modules.business.service.*; import org.jeecg.modules.business.vo.*; @@ -42,6 +48,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -63,6 +70,8 @@ public class SkuController { @Autowired private ISkuService skuService; @Autowired + private ISkuWeightService skuWeightService; + @Autowired private ISkuPriceService skuPriceService; @Autowired private IShippingDiscountService shippingDiscountService; @@ -614,4 +623,51 @@ public class SkuController { @RequestParam(name= "date") String date) { return Result.OK(skuService.latestSkuCounter(userCode, clientCode, date)); } + + @GetMapping(value = "/compare") + public Result compareClientSkuWithMabang(@RequestParam(name="clientId") String clientId) { + List skuIds = skuService.listByClientId(clientId).stream() + .map(Sku::getId) + .collect(Collectors.toList()); + List clientSkus = new ArrayList<>(); + for(String skuId: skuIds) { + List skus = skuMongoService.findBySkuId(skuId); + if(skus.size() > 1) { + SkuDocument latestSkuDocument = skus.stream().map(sku -> sku.getLatestSkuWeight().getEffectiveDate()) + .max(Date::compareTo) + .flatMap(date -> skus.stream().filter(sku -> sku.getLatestSkuWeight().getEffectiveDate().equals(date)).findFirst()) + .orElse(null); + + clientSkus.add(latestSkuDocument); + } else { + clientSkus.add(skus.get(0)); + } + } + + List> erpCodes = Lists.partition(clientSkus, 50) + .stream() + .map(skus -> skus.stream().map(SkuDocument::getErpCode).collect(Collectors.toList())) + .collect(Collectors.toList()); + List skusFromMabang = new ArrayList<>(); + for(List skuPartition : erpCodes) { + SkuListRequestBody body = new SkuListRequestBody(); + body.setStockSkuList(String.join(",", skuPartition)); + SkuListRawStream rawStream = new SkuListRawStream(body); + SkuUpdateListStream stream = new SkuUpdateListStream(rawStream); + skusFromMabang.addAll(stream.all()); + } + List desyncedSkus = new ArrayList<>(); + for(SkuDocument sku : clientSkus) { + skusFromMabang.stream().filter(skuData -> skuData.getErpCode().equals(sku.getErpCode())) + .findFirst() + .ifPresent(skuData -> { + if(!Objects.equals(skuData.getWeight(), sku.getLatestSkuWeight().getWeight()) || !Objects.equals(skuData.getSalePrice(), sku.getLatestSkuPrice().getPrice())) { + desyncedSkus.add(skuData.getErpCode()); + } + }); + } + skuService.setDesynced(desyncedSkus); + + return Result.OK(); + } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Sku.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Sku.java index b0c3cf171..70f12f232 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Sku.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Sku.java @@ -126,4 +126,10 @@ public class Sku implements Serializable { */ @JSONField(name="isGift") private Integer isGift; + /** + * 是否一致 0否;1是 + */ + @Excel(name = "是否一致", width = 15, dicCode = "is_synced") + @JSONField(name="isSynced") + private Integer isSynced; } 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 81fcdf091..c61f52fcf 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 @@ -86,4 +86,6 @@ public interface SkuMapper extends BaseMapper { int countUnpairedSkus(@Param("shopId") String shopId); List latestSkuCounter(@Param("userCode") String userCode, @Param("clientCode") String clientCode, @Param("date") String date); + + void setDesynced(@Param("erpCodes") List erpCodes); } 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 88349c633..5aa82233a 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 @@ -821,4 +821,12 @@ FROM sku s WHERE erp_code LIKE CONCAT(#{date}, #{userCode}, '%%%-', #{clientCode}); + + UPDATE sku + SET is_synced = 0 + WHERE erp_code IN + + #{erpCode} + ; + 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 20bf72ad3..7fa78c128 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 @@ -130,4 +130,6 @@ public interface ISkuService extends IService { int countUnpairedSkus(String shopId); int latestSkuCounter(String userCode, String clientCode, String date); + + void setDesynced(List erpCodes); } 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 18357e2da..3d68842ff 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 @@ -636,4 +636,9 @@ public class SkuServiceImpl extends ServiceImpl implements ISkuS }).collect(Collectors.toList()); return counters.stream().max(Integer::compareTo).orElse(0) + 1; } + + @Override + public void setDesynced(List erpCodes) { + skuMapper.setDesynced(erpCodes); + } } \ No newline at end of file From 16de117dc8694fdadaf143c795f5d222b68a2d34 Mon Sep 17 00:00:00 2001 From: Gauthier LO Date: Fri, 25 Apr 2025 10:35:33 +0200 Subject: [PATCH 2/3] feat: compare sku in Mongo and Mabang --- .../admin/PlatformOrderController.java | 4 +- .../controller/admin/SkuController.java | 80 ++++++++------ .../shippingInvoice/InvoiceController.java | 84 +++++---------- .../api/mabang/getorderlist/OrderStatus.java | 3 + .../modules/business/entity/Invoice.java | 22 ++++ .../business/entity/PlatformOrder.java | 2 +- .../mapper/PlatformOrderContentMapper.java | 3 + .../business/mapper/PlatformOrderMapper.java | 10 ++ .../modules/business/mapper/SkuMapper.java | 6 +- .../mapper/xml/PlatformOrderContentMapper.xml | 24 ++++- .../mapper/xml/PlatformOrderMapper.xml | 87 +++++++++++++++ .../modules/business/mapper/xml/SkuMapper.xml | 14 ++- .../service/IPlatformOrderService.java | 6 ++ .../modules/business/service/ISkuService.java | 4 +- .../impl/PlatformOrderServiceImpl.java | 74 ++++++++++--- .../business/service/impl/SkuServiceImpl.java | 6 +- .../vo/PlatformOrderContentFront.java | 100 ++++++++++++++++++ .../business/vo/PlatformOrderFront.java | 45 +++++++- 18 files changed, 451 insertions(+), 123 deletions(-) create mode 100644 jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/PlatformOrderContentFront.java diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PlatformOrderController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PlatformOrderController.java index b2e008c63..4130a7e5f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PlatformOrderController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/PlatformOrderController.java @@ -245,8 +245,8 @@ public class PlatformOrderController { @ApiOperation(value = "Order content query", notes = "Query order contents by order's identifier") @GetMapping(value = "/queryPlatformOrderContentByMainId") public Result queryPlatformOrderContentListByMainId(@RequestParam(name = "id") String id) { - List platformOrderContentList = platformOrderService.selectByMainId(id); - IPage page = new Page<>(); + List platformOrderContentList = platformOrderService.selectByMainIdAndSkuSync(id); + IPage page = new Page<>(); page.setRecords(platformOrderContentList); page.setTotal(platformOrderContentList.size()); return Result.OK(page); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java index 030aa3f23..23c83772b 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java @@ -48,7 +48,6 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -376,11 +375,6 @@ public class SkuController { .collect(Collectors.toList()) ); } - @GetMapping("/skuListByClient") - public Result skusListByClient(@RequestParam("clientId") String clientId) { - List skus = skuService.listByClientId(clientId); - return Result.OK(skus); - } @GetMapping("/listWithFilters") public Result listWithFilters(@RequestParam(name = "clientId", required = false) String clientId, @@ -626,47 +620,71 @@ public class SkuController { @GetMapping(value = "/compare") public Result compareClientSkuWithMabang(@RequestParam(name="clientId") String clientId) { - List skuIds = skuService.listByClientId(clientId).stream() - .map(Sku::getId) - .collect(Collectors.toList()); - List clientSkus = new ArrayList<>(); + Map clientSkus = skuService.listByClientId(clientId); + List skuIds = new ArrayList<>(clientSkus.keySet()); + List clientSkuDocs = new ArrayList<>(); for(String skuId: skuIds) { List skus = skuMongoService.findBySkuId(skuId); - if(skus.size() > 1) { - SkuDocument latestSkuDocument = skus.stream().map(sku -> sku.getLatestSkuWeight().getEffectiveDate()) - .max(Date::compareTo) - .flatMap(date -> skus.stream().filter(sku -> sku.getLatestSkuWeight().getEffectiveDate().equals(date)).findFirst()) - .orElse(null); - - clientSkus.add(latestSkuDocument); - } else { - clientSkus.add(skus.get(0)); + if(skus.isEmpty()) { + skuMongoService.migrateOneSku(clientSkus.get(skuId)); + skus = skuMongoService.findBySkuId(skuId); } + SkuDocument sku = skus.get(0); + clientSkuDocs.add(sku); } - List> erpCodes = Lists.partition(clientSkus, 50) + List> erpCodePartition = Lists.partition(clientSkuDocs, 50) .stream() .map(skus -> skus.stream().map(SkuDocument::getErpCode).collect(Collectors.toList())) .collect(Collectors.toList()); List skusFromMabang = new ArrayList<>(); - for(List skuPartition : erpCodes) { + for(List partition : erpCodePartition) { SkuListRequestBody body = new SkuListRequestBody(); - body.setStockSkuList(String.join(",", skuPartition)); + body.setStockSkuList(String.join(",", partition)); SkuListRawStream rawStream = new SkuListRawStream(body); SkuUpdateListStream stream = new SkuUpdateListStream(rawStream); skusFromMabang.addAll(stream.all()); } List desyncedSkus = new ArrayList<>(); - for(SkuDocument sku : clientSkus) { - skusFromMabang.stream().filter(skuData -> skuData.getErpCode().equals(sku.getErpCode())) - .findFirst() - .ifPresent(skuData -> { - if(!Objects.equals(skuData.getWeight(), sku.getLatestSkuWeight().getWeight()) || !Objects.equals(skuData.getSalePrice(), sku.getLatestSkuPrice().getPrice())) { - desyncedSkus.add(skuData.getErpCode()); - } - }); + List syncedSkus = new ArrayList<>(); + for(SkuDocument sku : clientSkuDocs) { + SkuData skuData = skusFromMabang.stream().filter(s -> s.getErpCode().equals(sku.getErpCode())) + .findFirst().orElse(null); + if(skuData != null) { + boolean isDesynced = false; + BigDecimal mabangPrice = skuData.getSalePrice().setScale(2, RoundingMode.HALF_UP); // because price from mabang has 4 decimal places, so Objects.equals will always return false + if(skuData.getWeight() == null && sku.getLatestSkuWeight() != null) { + log.info("sku {} doesn't have a weight on Mabang but has one in Mongo", skuData.getErpCode()); + isDesynced = true; + } + if (sku.getLatestSkuWeight() != null && !Objects.equals(skuData.getWeight(), sku.getLatestSkuWeight().getWeight())) { + log.info("sku {} has a different weight on Mabang and in Mongo : mabang :{}; mongo :{}", skuData.getErpCode() ,skuData.getWeight(), sku.getLatestSkuWeight().getWeight()); + isDesynced = true; + } + if(skuData.getSalePrice() == null && sku.getLatestSkuPrice() != null) { + log.info("sku {} doesn't have a price on Mabang but has one in mongo", skuData.getErpCode()); + isDesynced = true; + } + if(sku.getLatestSkuPrice() != null && !Objects.equals(mabangPrice, sku.getLatestSkuPrice().getPrice())) { + log.info("sku {} has a different price on Mabang and in Mongo : mabang :{}; mongo :{}", skuData.getErpCode() ,skuData.getSalePrice(), sku.getLatestSkuPrice().getPrice()); + isDesynced = true; + } + if(isDesynced) + desyncedSkus.add(skuData.getErpCode()); + else + syncedSkus.add(skuData.getErpCode()); + } else { + desyncedSkus.add(sku.getErpCode()); + } + } + if(!desyncedSkus.isEmpty()) { + log.info("Desynced skus : {}", desyncedSkus); + skuService.setIsSynced(desyncedSkus, false); + } + if(!syncedSkus.isEmpty()) { + log.info("Synced skus : {}", syncedSkus); + skuService.setIsSynced(syncedSkus, true); } - skuService.setDesynced(desyncedSkus); return Result.OK(); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java index 9086fb2d2..7d072fafb 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/shippingInvoice/InvoiceController.java @@ -56,6 +56,7 @@ import static org.jeecg.common.util.SqlInjectionUtil.specialFilterContentForDict import static org.jeecg.modules.business.entity.Invoice.InvoiceType.*; import static org.jeecg.modules.business.entity.Task.TaskCode.SI_G; import static org.jeecg.modules.business.entity.TaskHistory.TaskStatus.*; +import static org.jeecg.modules.business.vo.PlatformOrderFront.*; /** * Controller for request related to shipping invoice @@ -157,67 +158,40 @@ public class InvoiceController { @GetMapping(value = "/orders") public Result getOrdersByClientAndShops(PlatformOrder platformOrder, @RequestParam("clientId") String clientId, - @RequestParam(name = "shopIds[]", required = false) List shopIDs, - @RequestParam(name = "start", required = false) String start, - @RequestParam(name = "end", required = false) String end, + @RequestParam(name = "shopIds[]") List shopIDs, + @RequestParam(name = "start") String start, + @RequestParam(name = "end") String end, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, @RequestParam(name = "type") String type, @RequestParam(name = "warehouses[]") List warehouses, - HttpServletRequest req) { - String warehouseString = String.join(",", warehouses); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(platformOrder, req.getParameterMap()); - LambdaQueryWrapper lambdaQueryWrapper = queryWrapper.lambda(); - switch (type) { - case "shipping": - lambdaQueryWrapper.in(PlatformOrder::getErpStatus, OrderStatus.Shipped.getCode()); - break; - case "pre-shipping": - lambdaQueryWrapper.in(PlatformOrder::getErpStatus, Arrays.asList(OrderStatus.Pending.getCode(), OrderStatus.Preparing.getCode())); - break; - case "all": - lambdaQueryWrapper.in(PlatformOrder::getErpStatus, Arrays.asList(OrderStatus.Pending.getCode(), OrderStatus.Preparing.getCode(), OrderStatus.Shipped.getCode())); - break; - default: - return Result.error("Error 404 : page not found."); + @RequestParam(name = "column", defaultValue = "shop_id") String column, + @RequestParam(name = "order", defaultValue = "ASC") String order + ) { + log.info("Request for {} orders from client : {} between {} and {} for shops : {}", type, clientId, start, end, shopIDs); + + String parsedColumn = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, column.replace("_dictText", "")); + String parsedOrder = order.toUpperCase(); + if(!parsedOrder.equals("ASC") && !parsedOrder.equals("DESC")) { + return Result.error("Error 400 Bad Request"); } - lambdaQueryWrapper.isNull(PlatformOrder::getShippingInvoiceNumber); - Page page = new Page<>(pageNo, pageSize); - IPage pageList; - log.info("Request for " + type + " orders from client : " + clientId); - if (shopIDs == null || shopIDs.isEmpty()) { // obsolete, used in old pages only - lambdaQueryWrapper.inSql(PlatformOrder::getId, "SELECT po.id FROM platform_order po\n" + - " JOIN shop s ON po.shop_id = s.id\n" + - " JOIN client c ON s.owner_id = c.id WHERE c.id = '" + clientId + "'"); - pageList = platformOrderMapper.selectPage(page, lambdaQueryWrapper); - } else { - log.info("Specified shop IDs : " + shopIDs); - lambdaQueryWrapper.in(PlatformOrder::getShopId, shopIDs); - if(start != null || end != null){ - log.info("Specified period between " + start + " and " + end); - if (type.equals("shipping")) - lambdaQueryWrapper.inSql(PlatformOrder::getId, "SELECT po.id FROM platform_order po\n" + - "LEFT JOIN logistic_channel lc ON po.logistic_channel_name = lc.zh_name\n" + - "WHERE po.shipping_time between '" + start + "' AND '" + end + "'\n" + - "AND (lc.warehouse_in_china IN (" + warehouseString + ") OR po.logistic_channel_name = '' OR po.logistic_channel_name IS NULL)"); - else - lambdaQueryWrapper.inSql(PlatformOrder::getId, "SELECT po.id FROM platform_order po\n" + - "LEFT JOIN logistic_channel lc ON po.logistic_channel_name = lc.zh_name\n" + - "WHERE po.order_time between '" + start + "' AND '" + end + "'\n" + - "AND (lc.warehouse_in_china IN (" + warehouseString + ") OR po.logistic_channel_name = '' OR po.logistic_channel_name IS NULL)"); - } - else {// obsolete - lambdaQueryWrapper.inSql(PlatformOrder::getId, "SELECT po.id FROM platform_order po\n" + - "JOIN logistic_channel lc ON po.logistic_channel_name = lc.zh_name\n" + - "WHERE (lc.warehouse_in_china IN (" + warehouseString + ") OR po.logistic_channel_name = '' OR po.logistic_channel_name IS NULL)"); - } - pageList = platformOrderMapper.selectPage(page, lambdaQueryWrapper); - return Result.OK(pageList); + try { + specialFilterContentForDictSql(parsedColumn); + } catch (RuntimeException e) { + return Result.error("Error 400 Bad Request"); } - if (pageList.getSize() > 0) { - return Result.OK(pageList); + + List orders = platformOrderService.listByClientAndShops(clientId, shopIDs, start, end, type, pageNo, pageSize, warehouses, order, parsedColumn); + int total = platformOrderService.countListByClientAndShops(clientId, shopIDs, start, end, type, warehouses); + if (!orders.isEmpty()) { + IPage page = new Page<>(); + page.setRecords(orders); + page.setCurrent(pageNo); + page.setSize(pageSize); + page.setTotal(total); + return Result.OK(page); } - return Result.error("No orders for selected client/shops"); + return Result.error(404, "No orders for selected client/shops"); } @PostMapping(value = "/period") public Result getValidPeriod(@RequestBody List shopIDs) { @@ -540,7 +514,7 @@ public class InvoiceController { log.info("User : {} is requesting uninvoiced orders for shops : [{}]", ((LoginUser) SecurityUtils.getSubject().getPrincipal()).getUsername(), shopIds); - List productStatuses = productAvailable == null || productAvailable.isEmpty() ? Arrays.asList(Integer.valueOf(PlatformOrderFront.productStatus.Unavailable.code), Integer.valueOf(PlatformOrderFront.productStatus.Available.code), Integer.valueOf(PlatformOrderFront.productStatus.Ordered.code)) : productAvailable; + List productStatuses = productAvailable == null || productAvailable.isEmpty() ? Arrays.asList(Integer.valueOf(productStatus.Unavailable.code), Integer.valueOf(productStatus.Available.code), Integer.valueOf(productStatus.Ordered.code)) : productAvailable; String parsedColumn = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, column.replace("_dictText","")); String parsedOrder = order.toUpperCase(); if(!parsedOrder.equals("ASC") && !parsedOrder.equals("DESC")) { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/getorderlist/OrderStatus.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/getorderlist/OrderStatus.java index e88e5714b..ceeae89f6 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/getorderlist/OrderStatus.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/domain/api/mabang/getorderlist/OrderStatus.java @@ -20,6 +20,9 @@ public enum OrderStatus { public String getCode() { return String.valueOf(code); } + public Integer getCodeInt() { + return code; + } public static OrderStatus fromCode(Integer code) { for (OrderStatus orderStatus : OrderStatus.values()) { diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Invoice.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Invoice.java index 776a6e324..674d26841 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Invoice.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/Invoice.java @@ -119,6 +119,28 @@ public class Invoice implements Serializable { } } + @Getter + public enum InvoicingMethod { + PRESHIPPING ("pre-shipping"), + POSTSHIPPING("post-shipping"), + ALL("all"); + + private final String method; + + public static InvoicingMethod fromString(String method) { + for(InvoicingMethod invoicingMethod : InvoicingMethod.values()) { + if(invoicingMethod.method.equalsIgnoreCase(method)) { + return invoicingMethod; + } + } + throw new IllegalArgumentException("Incorrect invoicing method : " + method); + } + + InvoicingMethod(String method) { + this.method = method; + } + } + @Getter public enum Status { Cancelled (0), diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/PlatformOrder.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/PlatformOrder.java index 66d98a11c..c1731370d 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/PlatformOrder.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/entity/PlatformOrder.java @@ -41,7 +41,7 @@ public class PlatformOrder implements Serializable { /** * 主键 */ - @TableId(type = IdType.ASSIGN_ID) + @TableId(type = IdType.ASSIGN_UUID) @ApiModelProperty(value = "主键") private String id; /** diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java index d7bf3045b..a87d0113f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderContentMapper.java @@ -6,6 +6,7 @@ import org.jeecg.modules.business.entity.ClientPlatformOrderContent; import org.jeecg.modules.business.entity.PlatformOrderContent; import org.jeecg.modules.business.entity.SkuPrice; import org.jeecg.modules.business.entity.ShoumanOrderContent; +import org.jeecg.modules.business.vo.PlatformOrderContentFront; import org.jeecg.modules.business.vo.SkuDetail; import org.jeecg.modules.business.vo.SkuQuantity; import org.jeecg.modules.business.vo.SkuWeightDiscountServiceFees; @@ -27,6 +28,8 @@ public interface PlatformOrderContentMapper extends BaseMapper selectByMainId(@Param("mainId") String mainId); + List selectByMainIdAndSkuSync(@Param("mainId") String mainId); + List selectClientVersionByMainId(@Param("mainId") String mainId); /** diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java index 0dff6b7be..08a980431 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/PlatformOrderMapper.java @@ -244,4 +244,14 @@ public interface PlatformOrderMapper extends BaseMapper { Integer countPotentialShoumanOrders(); List getPlatformOrderIdsByInvoiceNumbers(@Param("invoiceNumbers") List invoiceNumbers); + int countListByClientAndShops(@Param("clientId") String clientId,@Param("shopIds") List shopIds, + @Param("erpStatuses") List erpStatuses, + @Param("warehouses") List warehouses, + @Param("start") String startDate, @Param("end") String endDate); + List listByClientAndShops(@Param("clientId") String clientId,@Param("shopIds") List shopIds, + @Param("erpStatuses") List erpStatuses, + @Param("warehouses") List warehouses, + @Param("start") String startDate, @Param("end") String endDate, + @Param("order") String order, @Param("column") String column, + @Param("offset") Integer offset, @Param("size") Integer pageSize); } 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 c61f52fcf..4a9c48aa2 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 @@ -1,6 +1,7 @@ package org.jeecg.modules.business.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.MapKey; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.business.entity.Sku; import org.jeecg.modules.business.vo.SkuOrderPage; @@ -74,7 +75,8 @@ public interface SkuMapper extends BaseMapper { List getInventory(@Param("erpCodes") List erpCodes, @Param("invoiceNumber") String invoiceNumber); - List listByClientId(@Param("clientId") String clientId); + @MapKey("id") + Map listByClientId(@Param("clientId") String clientId); List searchExistingSkuByKeywords(@Param("keywords") List keywords); List listImgUrls(); @@ -87,5 +89,5 @@ public interface SkuMapper extends BaseMapper { List latestSkuCounter(@Param("userCode") String userCode, @Param("clientCode") String clientCode, @Param("date") String date); - void setDesynced(@Param("erpCodes") List erpCodes); + void setIsSynced(@Param("erpCodes")List erpCodes, @Param("isSynced") boolean isSynced); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml index b59e8885a..6e4f96b9c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/mapper/xml/PlatformOrderContentMapper.xml @@ -30,7 +30,29 @@ resultType="org.jeecg.modules.business.entity.PlatformOrderContent"> SELECT * FROM platform_order_content - WHERE platform_order_id = #{mainId} + WHERE platform_order_id = #{mainId} + + + + + 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 5aa82233a..c56c0b9c4 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 @@ -723,14 +723,12 @@ #{sku.id} - + SELECT * FROM sku s JOIN client_sku ON s.id = client_sku.sku_id - WHERE client_sku.client_id = #{clientId}; + WHERE client_sku.client_id = #{clientId} + AND s.status = 3; - + UPDATE sku - SET is_synced = 0 + SET is_synced = IF(#{isSynced} = true, 1, 0) WHERE erp_code IN #{erpCode} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java index 0c282eb52..b700c5c04 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/IPlatformOrderService.java @@ -59,6 +59,8 @@ public interface IPlatformOrderService extends IService { List selectByMainId(String mainId); + List selectByMainIdAndSkuSync(String mainId); + List selectClientVersionByMainId(String mainId); PurchaseConfirmation confirmPurchaseByPlatformOrder(List platformOrderIdList) throws UserException; @@ -286,4 +288,8 @@ public interface IPlatformOrderService extends IService { void pagePotentialShoumanOrders(IPage page, String column, String order); List getPlatformOrderIdsByInvoiceNumbers(List invoiceNumbers); + + List listByClientAndShops(String clientId, List shopIds, String startDate, String endDate, String invoicingMethod, Integer pageNo, Integer pageSize, List warehouses, String order, String column); + + int countListByClientAndShops(String clientId, List shopIDs, String start, String end, String invoicingMethod, List warehouses); } 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 7fa78c128..0d01fa3eb 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 @@ -113,7 +113,7 @@ public interface ISkuService extends IService { List getInventoryByInvoiceNumber(String invoiceNumber); List getInventory(List erpCodes, String invoiceNumber); - List listByClientId(String clientId); + Map listByClientId(String clientId); List searchExistingSkuByKeywords(List keywords); @@ -131,5 +131,5 @@ public interface ISkuService extends IService { int latestSkuCounter(String userCode, String clientCode, String date); - void setDesynced(List erpCodes); + void setIsSynced(List erpCodes, boolean isSynced); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java index 731ee89e3..41d434088 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/PlatformOrderServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.business.controller.UserException; +import org.jeecg.modules.business.domain.api.mabang.getorderlist.OrderStatus; import org.jeecg.modules.business.domain.api.yd.YDTrackingNumberData; import org.jeecg.modules.business.entity.*; import org.jeecg.modules.business.mapper.ExchangeRatesMapper; @@ -23,6 +24,7 @@ import org.jeecg.modules.business.vo.clientPlatformOrder.section.OrdersStatistic import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.jeecg.modules.business.entity.Invoice.InvoicingMethod; import java.io.Serializable; import java.math.BigDecimal; @@ -35,6 +37,7 @@ import java.util.function.Predicate; import java.util.stream.Collectors; import static java.util.stream.Collectors.*; +import static org.jeecg.modules.business.entity.Invoice.InvoicingMethod.*; /** * @Description: 平台订单表 @@ -46,22 +49,16 @@ import static java.util.stream.Collectors.*; @Slf4j public class PlatformOrderServiceImpl extends ServiceImpl implements IPlatformOrderService { - private final PlatformOrderMapper platformOrderMap; - private final PlatformOrderContentMapper platformOrderContentMap; - private final IShippingFeesWaiverProductService shippingFeesWaiverProductService; - private final IClientService clientService; - private final ExchangeRatesMapper exchangeRatesMapper; - @Autowired - public PlatformOrderServiceImpl(PlatformOrderMapper platformOrderMap, PlatformOrderContentMapper platformOrderContentMap, - IShippingFeesWaiverProductService shippingFeesWaiverProductService, IClientService clientService, - ExchangeRatesMapper exchangeRatesMapper) { - this.platformOrderMap = platformOrderMap; - this.platformOrderContentMap = platformOrderContentMap; - this.shippingFeesWaiverProductService = shippingFeesWaiverProductService; - this.clientService = clientService; - this.exchangeRatesMapper = exchangeRatesMapper; - } + private PlatformOrderMapper platformOrderMap; + @Autowired + private PlatformOrderContentMapper platformOrderContentMap; + @Autowired + private IShippingFeesWaiverProductService shippingFeesWaiverProductService; + @Autowired + private IClientService clientService; + @Autowired + private ExchangeRatesMapper exchangeRatesMapper; @Override @Transactional @@ -188,12 +185,16 @@ public class PlatformOrderServiceImpl extends ServiceImpl selectByMainId(String mainId) { return platformOrderContentMap.selectByMainId(mainId); } + @Override + public List selectByMainIdAndSkuSync(String mainId) { + return platformOrderContentMap.selectByMainIdAndSkuSync(mainId); + } + @Override public List selectClientVersionByMainId(String mainId) { return platformOrderContentMap.selectClientVersionByMainId(mainId); @@ -205,7 +206,6 @@ public class PlatformOrderServiceImpl extends ServiceImpl skuIDQuantityMap) throws UserException { Client client = clientService.getCurrentClient(); @@ -556,4 +556,44 @@ public class PlatformOrderServiceImpl extends ServiceImpl listByClientAndShops(String clientId, List shopIds, String startDate, String endDate, String invoicingMethod, Integer pageNo, Integer pageSize, List warehouses, String order, String column) { + List erpStatuses; + InvoicingMethod method = InvoicingMethod.fromString(invoicingMethod); + switch (method) { + case PRESHIPPING : + erpStatuses = Arrays.asList(OrderStatus.Pending.getCodeInt(), OrderStatus.Preparing.getCodeInt()); + break; + case POSTSHIPPING: + erpStatuses = Collections.singletonList(OrderStatus.Shipped.getCodeInt()); + break; + case ALL : + erpStatuses = Arrays.asList(OrderStatus.Pending.getCodeInt(), OrderStatus.Preparing.getCodeInt(), OrderStatus.Shipped.getCodeInt()); + break; + default: + throw new IllegalArgumentException("The specified invoicing method is not supported : " + invoicingMethod); + } + int offset = (pageNo - 1) * pageSize; + return platformOrderMap.listByClientAndShops(clientId, shopIds, erpStatuses, warehouses, startDate, endDate, order, column, offset, pageSize); + } + + @Override + public int countListByClientAndShops(String clientId, List shopIDs, String start, String end, String invoicingMethod, List warehouses) { + List erpStatuses; + InvoicingMethod method = InvoicingMethod.fromString(invoicingMethod); + switch (method) { + case PRESHIPPING : + erpStatuses = Arrays.asList(OrderStatus.Pending.getCodeInt(), OrderStatus.Preparing.getCodeInt()); + break; + case POSTSHIPPING: + erpStatuses = Collections.singletonList(OrderStatus.Shipped.getCodeInt()); + break; + case ALL : + erpStatuses = Arrays.asList(OrderStatus.Pending.getCodeInt(), OrderStatus.Preparing.getCodeInt(), OrderStatus.Shipped.getCodeInt()); + break; + default: + throw new IllegalArgumentException("The specified invoicing method is not supported : " + invoicingMethod); + } + return platformOrderMap.countListByClientAndShops(clientId, shopIDs, erpStatuses, warehouses, start, end); + } } 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 3d68842ff..17691a4e2 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 @@ -598,7 +598,7 @@ public class SkuServiceImpl extends ServiceImpl implements ISkuS } @Override - public List listByClientId(String clientId) { + public Map listByClientId(String clientId) { return skuMapper.listByClientId(clientId); } @@ -638,7 +638,7 @@ public class SkuServiceImpl extends ServiceImpl implements ISkuS } @Override - public void setDesynced(List erpCodes) { - skuMapper.setDesynced(erpCodes); + public void setIsSynced(List erpCodes, boolean isSynced) { + skuMapper.setIsSynced(erpCodes, isSynced); } } \ No newline at end of file diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/PlatformOrderContentFront.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/PlatformOrderContentFront.java new file mode 100644 index 000000000..8ab06d9fe --- /dev/null +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/PlatformOrderContentFront.java @@ -0,0 +1,100 @@ +package org.jeecg.modules.business.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.io.Serializable; + +@Data +@ApiModel(value = "platform_order_content对象", description = "平台订单内容") +public class PlatformOrderContentFront implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_UUID) + @ApiModelProperty(value = "主键") + private String id; + /** + * 平台订单ID + */ + @Excel(name = "平台订单ID", width = 15, dictTable = "platform_order", dicText = "platform_order_id", dicCode = "id") + @Dict(dictTable = "platform_order", dicText = "platform_order_id", dicCode = "id") + @ApiModelProperty(value = "平台订单ID") + private String platformOrderId; + /** + * SKU ID + */ + @Excel(name = "SKU ID", width = 15, dictTable = "sku", dicText = "erp_code", dicCode = "id") + @Dict(dictTable = "sku", dicText = "erp_code", dicCode = "id") + @ApiModelProperty(value = "SKU ID") + private String skuId; + /** + * SKU数量 + */ + @Excel(name = "SKU数量", width = 15) + @ApiModelProperty(value = "SKU数量") + private Integer quantity; + /** + * 商品采购总费用 + */ + @Excel(name = "商品采购总费用", width = 15) + @ApiModelProperty(value = "商品采购总费用") + private java.math.BigDecimal purchaseFee; + /** + * 物流总费用 + */ + @Excel(name = "物流总费用", width = 15) + @ApiModelProperty(value = "物流总费用") + private java.math.BigDecimal shippingFee; + /** + * 服务总费用 + */ + @Excel(name = "服务总费用", width = 15) + @ApiModelProperty(value = "服务总费用") + private java.math.BigDecimal serviceFee; + /** + * 海外仓操作费 + */ + @Excel(name = "海外仓操作费", width = 15) + @ApiModelProperty(value = "海外仓操作费") + private java.math.BigDecimal pickingFee; + /** + * 物流保险费 + */ + @Excel(name = "物流保险费", width = 15) + @ApiModelProperty(value = "物流保险费") + private java.math.BigDecimal insuranceFee; + /** + * 增值税 + */ + @Excel(name = "增值税", width = 15) + @ApiModelProperty(value = "增值税") + private java.math.BigDecimal vat; + /** + * ERP中状态 + */ + @Excel(name = "ERP中状态", width = 15) + @ApiModelProperty(value = "ERP中状态") + private String erpStatus; + + /** + * 有货(1=有,0=没有) + */ + @Excel(name = "有货(1=有,0=没有)", width = 15) + @ApiModelProperty(value = "有货(1=有,0=没有)") + private String productAvailable; + /** + * 商品是否一致(1=一致,0=不一致) + * if latest price or weight is not the same in Mongo and Mabang + */ + @Excel(name = "商品是否一致(1=一致,0=不一致)", width = 15) + @ApiModelProperty(value = "商品是否一致(1=一致,0=不一致)") + private Integer isSynced; +} diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/PlatformOrderFront.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/PlatformOrderFront.java index 1b00a316a..e8bb07128 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/PlatformOrderFront.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/vo/PlatformOrderFront.java @@ -24,7 +24,7 @@ public class PlatformOrderFront { /** * 主键 */ - @TableId(type = IdType.ASSIGN_ID) + @TableId(type = IdType.ASSIGN_UUID) @ApiModelProperty(value = "主键") private String id; /** @@ -40,6 +40,31 @@ public class PlatformOrderFront { @Excel(name = "平台订单交易号", width = 15) @ApiModelProperty(value = "平台订单交易号") private String platformOrderNumber; + /** + * 平台订单号码 + */ + @Excel(name = "平台订单号码", width = 15) + @ApiModelProperty(value = "平台订单号码") + private String platformOrderId; + /** + * 物流渠道 + */ + @Excel(name = "物流渠道", width = 15, dictTable = "logistic_channel", dicText = "zh_name", dicCode = "zh_name") + @Dict(dictTable = "logistic_channel", dicText = "zh_name", dicCode = "zh_name") + @ApiModelProperty(value = "物流渠道") + private String logisticChannelName; + /** + * 开票物流渠道名称 + */ + @Excel(name = "开票物流渠道名称", width = 15) + @ApiModelProperty(value = "开票物流渠道名称") + private String invoiceLogisticChannelName; + /** + * 物流内部单号 + */ + @Excel(name = "物流跟踪号", width = 15) + @ApiModelProperty(value = "物流跟踪号") + private String trackingNumber; /** * 订单交易时间 */ @@ -87,6 +112,18 @@ public class PlatformOrderFront { @Excel(name = "采购发票号", width = 15) @ApiModelProperty(value = "采购发票号") private java.lang.String purchaseInvoiceNumber; + /** + * ERP中状态 + */ + @Excel(name = "ERP中状态", width = 15) + @ApiModelProperty(value = "ERP中状态") + private String erpStatus; + /** + * 待审核订单(1=正常订单,2=异常订单) + */ + @Excel(name = "待审核订单(1=正常订单,2=异常订单)", width = 15) + @ApiModelProperty(value = "待审核订单(1=正常订单,2=异常订单)") + private java.lang.String canSend; /** * 有货(1=有,0=没有) */ @@ -105,6 +142,12 @@ public class PlatformOrderFront { @Excel(name = "可开采购票(0=不可,1=可)", width = 15) @ApiModelProperty(value = "可开采购票(0=不可,1=可)") private String purchaseAvailable; + /** + * 不一致的产品(1=有,0=没有) + */ + @Excel(name = "不一致的产品(1=有,0=没有)", width = 15) + @ApiModelProperty(value = "不一致的产品(1=有,0=没有)") + private Integer hasDesyncedSku; private Integer totalCount; From b83a5cde3a944b959a0a484cfc2804969f59c331 Mon Sep 17 00:00:00 2001 From: Gauthier LO Date: Fri, 25 Apr 2025 12:34:12 +0200 Subject: [PATCH 3/3] feat: better sku listing --- .../controller/admin/SkuController.java | 5 +++-- .../modules/business/mapper/SkuMapper.java | 2 +- .../modules/business/mapper/xml/SkuMapper.xml | 18 ++++++++++++++---- .../modules/business/service/ISkuService.java | 2 +- .../business/service/impl/SkuServiceImpl.java | 4 ++-- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java index 23c83772b..5ec9a222c 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/admin/SkuController.java @@ -619,8 +619,9 @@ public class SkuController { } @GetMapping(value = "/compare") - public Result compareClientSkuWithMabang(@RequestParam(name="clientId") String clientId) { - Map clientSkus = skuService.listByClientId(clientId); + public Result compareClientSkuWithMabang(@RequestParam(name="clientId") String clientId, + @RequestParam(name="erpStatuses[]") List erpStatuses) { + Map clientSkus = skuService.listInUninvoicedOrders(clientId, erpStatuses); List skuIds = new ArrayList<>(clientSkus.keySet()); List clientSkuDocs = new ArrayList<>(); for(String skuId: skuIds) { 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 4a9c48aa2..2f5397da9 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 @@ -76,7 +76,7 @@ public interface SkuMapper extends BaseMapper { List getInventory(@Param("erpCodes") List erpCodes, @Param("invoiceNumber") String invoiceNumber); @MapKey("id") - Map listByClientId(@Param("clientId") String clientId); + Map listInUninvoicedOrders(@Param("clientId") String clientId, @Param("erpStatuses") List erpStatuses); List searchExistingSkuByKeywords(@Param("keywords") List keywords); List listImgUrls(); 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 c56c0b9c4..f235fc6b5 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 @@ -723,12 +723,22 @@ #{sku.id} - + SELECT DISTINCT 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 platform_order_content poc ON s.id = poc.sku_id + JOIN platform_order po ON poc.platform_order_id = po.id WHERE client_sku.client_id = #{clientId} - AND s.status = 3; + AND po.shipping_invoice_number IS NULL + AND poc.erp_status <> 5 + AND po.erp_status IN + + #{erpStatus} + + AND po.order_time >= '2024-01-01 00:00:00' + AND s.status = 3 + ;