Merge pull request #162 from LQYBill/feat/saleUrl

feat: sale url and specifics
pull/8523/head
Qiuyi LI 2025-05-15 15:42:55 +02:00 committed by GitHub
commit 6c79152c89
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 90 additions and 67 deletions

View File

@ -579,30 +579,15 @@ public class SkuController {
public Result<?> unpairedSkus(@RequestParam(name = "shop") String shopCode,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "50") Integer pageSize,
@RequestParam(name = "column", defaultValue = "erp_code") String column,
@RequestParam(name = "order", defaultValue = "ASC") String order
@RequestParam(name = "skus[]", required = false) List<String> skuNames
) {
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(400, "Bad Request");
}
try {
specialFilterContentForDictSql(parsedColumn);
} catch (RuntimeException e) {
return Result.error(400, "Bad Request");
}
if(skuNames == null)
skuNames = new ArrayList<>();
String shopId = shopService.getIdByCode(shopCode);
if (shopId == null) return Result.error(404, "Shop not found");
int total = skuListMabangService.countUnpairedSkus(shopId);
List<SkuOrderPage> unpairedSkus = skuListMabangService.unpairedSkus(shopId, pageNo, pageSize, parsedColumn, parsedOrder);
List<SkuOrderPage> unpairedSkus = skuListMabangService.unpairedSkus(shopId, skuNames);
IPage<SkuOrderPage> page = new Page<>();
page.setRecords(unpairedSkus);
page.setCurrent(pageNo);
page.setSize(pageSize);
page.setTotal(total);
return Result.OK(page);
return Result.OK(unpairedSkus);
}
@GetMapping(value = "/latestSkuCounter")

View File

@ -141,6 +141,12 @@ public class SkuData {
private String supplier;
@JSONField(name="productLinkAddress")
private String supplierLink;
@JSONField(name="saleUrl")
private String saleUrl;
/**
*
*/
private String specifics;
public SkuStatus getStatus() {
return SkuStatus.fromCode(this.status);
@ -168,7 +174,9 @@ public class SkuData {
"\nIs Flammable : " + this.isFlammable +
"\nIs Knife : " + this.isKnife +
"\nIs Gift : " + this.isGift +
"\nProvider : " + this.supplier
"\nProvider : " + this.supplier +
"\nProduct Link : " + this.supplierLink +
"\nSale Url : " + this.saleUrl
;
}
}

View File

@ -50,7 +50,7 @@ public class SkuListRequestBody implements RequestBody {
putNonNull(json, "showProvider", showProvider);
putNonNull(json, "showWarehouse", String.valueOf(showWarehouse));
putNonNull(json, "showLabel", String.valueOf(showLabel));
putNonNull(json, "showAttributes", showAttributes);
putNonNull(json, "showattributes", String.valueOf(showAttributes));
return json;
}

View File

@ -9,12 +9,17 @@ import lombok.Data;
@Data
public class OrderItem {
@JSONField(name="stockId")
private String stockId;
/**
* Erp code of sku in DB.
*/
@JSONField(name = "stockSku")
private String erpCode;
@JSONField(name="title")
private String title;
@JSONField(name="originTitle")
private String originTitle;
@JSONField(deserialize = false)
private String platformOrderId;
@ -42,6 +47,8 @@ public class OrderItem {
@JSONField(name = "specifics")
private String specifics;
@JSONField(name="amazonAsin")
private String saleUrl;
/**
* Status :
* 2 = Normal

View File

@ -7,6 +7,7 @@ import org.jeecg.modules.business.entity.Sku;
import org.jeecg.modules.business.vo.SkuOrderPage;
import org.jeecg.modules.business.vo.SkuQuantity;
import org.jeecg.modules.business.vo.SkuUpdate;
import org.jeecg.modules.business.vo.UnpairedSku;
import org.jeecg.modules.business.vo.inventory.InventoryRecord;
import org.springframework.stereotype.Repository;
@ -83,9 +84,7 @@ public interface SkuMapper extends BaseMapper<Sku> {
List<String> fetchAllClientSkuCodes(@Param("clientCode") String clientCode);
List<String> fetchUnpairedSkus(@Param("shopId") String shopId, @Param("offset") Integer offset, @Param("size") Integer pageSize, @Param("column") String column, @Param("order") String order);
int countUnpairedSkus(@Param("shopId") String shopId);
List<UnpairedSku> fetchUnpairedSkus(@Param("shopId") String shopId);
List<String> latestSkuCounter(@Param("userCode") String userCode, @Param("clientCode") String clientCode, @Param("date") String date);

View File

@ -799,8 +799,8 @@
WHERE c.internal_code = #{clientCode};
</select>
<select id="fetchUnpairedSkus" resultType="java.lang.String">
SELECT poc.sku_id as erp_code
<select id="fetchUnpairedSkus" resultType="org.jeecg.modules.business.vo.UnpairedSku">
SELECT po.platform_order_id as platform_order_id, poc.sku_id as stock_sku
FROM platform_order po
JOIN shop s ON po.shop_id = s.id
JOIN platform_order_content poc ON po.id = poc.platform_order_id
@ -809,20 +809,7 @@
AND po.erp_status IN (1, 2)
AND poc.erp_status &lt;&gt; 5
AND s.id = #{shopId}
GROUP BY poc.sku_id
ORDER BY ${column} ${order}
LIMIT #{offset}, #{size};
</select>
<select id="countUnpairedSkus" resultType="java.lang.Integer">
SELECT COUNT(DISTINCT poc.sku_id)
FROM platform_order_content poc
JOIN platform_order po ON poc.platform_order_id = po.id
JOIN shop s ON po.shop_id = s.id
LEFT JOIN sku ON poc.sku_id = sku.id
WHERE sku.id IS NULL
AND po.erp_status IN (1, 2)
AND poc.erp_status &lt;&gt; 5
AND s.id = #{shopId};
GROUP BY poc.sku_id;
</select>
<select id="latestSkuCounter" resultType="java.lang.String">
SELECT erp_code

View File

@ -44,9 +44,7 @@ public interface ISkuListMabangService extends IService<SkuData> {
List<SkuData> fetchUnpairedSkus(List<String> stockSkuList);
List<SkuOrderPage> unpairedSkus(String shopId, Integer pageNo, Integer pageSize, String column, String order);
int countUnpairedSkus(String shopId);
List<SkuOrderPage> unpairedSkus(String shopId, List<String> skuNames);
void compareClientSkusWithMabang(Map<String, Sku> clientSkus);
}

View File

@ -125,9 +125,7 @@ public interface ISkuService extends IService<Sku> {
List<String> fetchAllClientSkuCodes(String clientCode);
List<String> fetchUnpairedSkus(String shopId, int offset, Integer pageSize, String column, String order);
int countUnpairedSkus(String shopId);
List<UnpairedSku> fetchUnpairedSkus(String shopId);
int latestSkuCounter(String userCode, String clientCode, String date);

View File

@ -3,7 +3,6 @@ package org.jeecg.modules.business.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.jeecg.qywx.api.conversation.ConversationAPI;
import freemarker.template.Template;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
@ -11,6 +10,9 @@ import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.common.util.SpringContextUtils;
import org.jeecg.modules.business.domain.api.mabang.Response;
import org.jeecg.modules.business.domain.api.mabang.doSearchSkuListNew.*;
import org.jeecg.modules.business.domain.api.mabang.getorderlist.Order;
import org.jeecg.modules.business.domain.api.mabang.getorderlist.OrderItem;
import org.jeecg.modules.business.domain.api.mabang.getorderlist.OrderListRequestBody;
import org.jeecg.modules.business.domain.api.mabang.stockDoAddStock.SkuAddRequest;
import org.jeecg.modules.business.domain.api.mabang.stockDoAddStock.SkuAddRequestBody;
import org.jeecg.modules.business.domain.api.mabang.stockDoAddStock.SkuAddResponse;
@ -29,6 +31,7 @@ import org.jeecg.modules.business.mongoService.SkuMongoService;
import org.jeecg.modules.business.service.*;
import org.jeecg.modules.business.vo.ResponsesWithMsg;
import org.jeecg.modules.business.vo.SkuOrderPage;
import org.jeecg.modules.business.vo.UnpairedSku;
import org.jeecg.modules.message.websocket.WebSocketSender;
import org.jeecg.modules.online.cgform.mapper.OnlCgformFieldMapper;
import org.springframework.beans.factory.annotation.Autowired;
@ -81,6 +84,8 @@ public class SkuListMabangServiceImpl extends ServiceImpl<SkuListMabangMapper, S
@Autowired
private SkuMongoService skuMongoService;
@Autowired
private IPlatformOrderMabangService platformOrderMabangService;
@Autowired
private FreeMarkerConfigurer freemarkerConfigurer;
@Autowired
Environment env;
@ -625,6 +630,10 @@ public class SkuListMabangServiceImpl extends ServiceImpl<SkuListMabangMapper, S
sop.setIsGift(skuData.getIsGift());
sop.setSupplier(skuData.getSupplier());
sop.setSupplierLink(skuData.getSupplierLink());
if(skuData.getSaleUrl() != null)
sop.setSaleUrl(skuData.getSaleUrl());
if(skuData.getSpecifics() != null)
sop.setSpecifics(skuData.getSpecifics());
sop.setStatus(skuData.getStatusValue());
return sop;
}
@ -868,6 +877,7 @@ public class SkuListMabangServiceImpl extends ServiceImpl<SkuListMabangMapper, S
body.setShowWarehouse(1);
body.setShowLabel(1);
body.setStockSkuList(String.join(",", skuPartition));
body.setShowAttributes(1);
SkuListRawStream rawStream = new SkuListRawStream(body);
UnpairedSkuListStream stream = new UnpairedSkuListStream(rawStream);
skuDataList.addAll(stream.all());
@ -876,23 +886,40 @@ public class SkuListMabangServiceImpl extends ServiceImpl<SkuListMabangMapper, S
}
@Override
public List<SkuOrderPage> unpairedSkus(String shopId, Integer pageNo, Integer pageSize, String column, String order) {
int offset = (pageNo - 1) * pageSize;
List<String> stockSkuList = skuService.fetchUnpairedSkus(shopId, offset, pageSize, column, order);
if(stockSkuList.isEmpty()){
public List<SkuOrderPage> unpairedSkus(String shopId, List<String> skuNames) {
List<UnpairedSku> unpairedSkus = skuService.fetchUnpairedSkus(shopId);
if(unpairedSkus.isEmpty()){
return new ArrayList<>();
}
List<SkuData> skuDataList = fetchUnpairedSkus(stockSkuList);
return skuDataList.stream()
List<String> platformOrderIds = unpairedSkus.stream().distinct().map(UnpairedSku::getPlatformOrderId).collect(Collectors.toList());
List<List<String>> platformOrderPartitions = Lists.partition(platformOrderIds, 50);
List<OrderListRequestBody> orderRequestBodies = new ArrayList<>();
for (List<String> platformOrderIdList : platformOrderPartitions) {
orderRequestBodies.add(new OrderListRequestBody().setPlatformOrderIds(platformOrderIdList));
}
ExecutorService executor = Executors.newFixedThreadPool(DEFAULT_NUMBER_OF_THREADS);
List<Order> mabangOrders = platformOrderMabangService.getOrdersFromMabang(orderRequestBodies, executor);
List<OrderItem> mabangOrderItems = mabangOrders.stream().map(Order::getOrderItems).flatMap(List::stream).collect(Collectors.toList());
List<SkuData> skuDataList = fetchUnpairedSkus(unpairedSkus.stream().map(UnpairedSku::getStockSku).collect(toList()));
skuDataList.forEach(skuData -> {
mabangOrderItems.stream().filter(orderItem -> orderItem.getStockId().equals(String.valueOf(skuData.getStockSkuId()))).findFirst()
.ifPresent(orderItem -> {
skuData.setSaleUrl(orderItem.getSaleUrl());
skuData.setSpecifics(orderItem.getSpecifics());
});
});
if(skuNames.isEmpty())
return skuDataList.stream()
.map(this::SkuDataToSkuOrderPage)
.sorted(Comparator.comparing(SkuOrderPage::getErpCode))
.collect(toList());
else
return skuDataList.stream()
.filter(skuData -> skuNames.contains(skuData.getNameEN()) || skuNames.contains(skuData.getDeclareNameEn()))
.map(this::SkuDataToSkuOrderPage)
.collect(toList());
}
@Override
public int countUnpairedSkus(String shopId) {
return skuService.countUnpairedSkus(shopId);
}
@Override
public void compareClientSkusWithMabang(Map<String, Sku> clientSkus) {

View File

@ -618,13 +618,8 @@ public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuS
}
@Override
public List<String> fetchUnpairedSkus(String shopId, int offset, Integer pageSize, String column, String order) {
return skuMapper.fetchUnpairedSkus(shopId, offset, pageSize, column, order);
}
@Override
public int countUnpairedSkus(String shopId) {
return skuMapper.countUnpairedSkus(shopId);
public List<UnpairedSku> fetchUnpairedSkus(String shopId) {
return skuMapper.fetchUnpairedSkus(shopId);
}
@Override

View File

@ -205,6 +205,10 @@ public class SkuOrderPage {
@ApiModelProperty(value = "供应商商品网址")
private String supplierLink;
@Excel(name="产品销售链接", width = 15)
@ApiModelProperty(value = "产品销售链接")
private String saleUrl;
@Excel(name = "仓库", width = 15)
@ApiModelProperty(value = "仓库")
private String warehouse;
@ -212,4 +216,8 @@ public class SkuOrderPage {
@Excel(name ="自定义分类", width = 15)
@ApiModelProperty(value = "自定义分类")
private String labelData;
@Excel(name = "商品多属性", width = 15)
@ApiModelProperty(value = "商品多属性")
private String specifics;
}

View File

@ -0,0 +1,11 @@
package org.jeecg.modules.business.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(value = "UnpairedSku", description = "Unpaired SKU")
public class UnpairedSku {
private String stockSku;
private String platformOrderId;
}