Merge remote-tracking branch 'origin/main'

This commit is contained in:
Jack 2025-10-24 17:44:01 +08:00
commit dfab392ed6
5 changed files with 63 additions and 17 deletions

View File

@ -83,13 +83,12 @@ public class ProductMapping implements Serializable {
/** /**
* 生成唯一键productName + storeId + specValue + specUnit * 生成唯一键productName + productNumber + storeId
*/ */
public String getUniqueKey() { public String getUniqueKey() {
return String.format("%s|%d|%s|%s", return String.format("%s|%s|%d",
productName, productName,
storeId, productNumber,
specValue.stripTrailingZeros().toPlainString(), storeId);
specUnit);
} }
} }

View File

@ -207,8 +207,9 @@ public class ProductMappingController extends BaseControllerImpl {
*/ */
@ApiOperation(value = "查找为同步的商品数据", notes = "删除查找为同步的商品数据") @ApiOperation(value = "查找为同步的商品数据", notes = "删除查找为同步的商品数据")
@RequestMapping(value = "/getSyncBaseMapingProducts", method = RequestMethod.GET) @RequestMapping(value = "/getSyncBaseMapingProducts", method = RequestMethod.GET)
public CommonResult getSyncBaseMapingProducts(Integer storeId) { public CommonResult getSyncBaseMapingProducts(@RequestParam Integer storeId,@RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
return productMappingService.getSyncProductUnchecked(storeId); @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
return productMappingService.getSyncProductUnchecked(storeId,pageNum,pageSize);
} }
/** /**
@ -294,5 +295,13 @@ public class ProductMappingController extends BaseControllerImpl {
return CommonResult.success(syncThirdDataService.importLibProductImg(null)); return CommonResult.success(syncThirdDataService.importLibProductImg(null));
} }
/**
* 导出未分配商品数据
* @param storeId
* @param response
*/
@PostMapping("/exportUncheckShopData")
public void exportUncheckShopData(@RequestParam(value = "storeId",required = false) Integer storeId, HttpServletResponse response) {
productMappingService.exportUncheckShopData(storeId,response);
}
} }

View File

@ -64,11 +64,9 @@ public class ProductMappingExcel {
* 生成唯一键productName + storeId + specValue + specUnit * 生成唯一键productName + storeId + specValue + specUnit
*/ */
public String getUniqueKey() { public String getUniqueKey() {
return String.format("%s|%s|%d|%s|%s", return String.format("%s|%s|%d",
productName, productName,
productNumber, productNumber,
storeId, storeId);
specValue.stripTrailingZeros().toPlainString(),
specUnit);
} }
} }

View File

@ -29,7 +29,7 @@ public interface ProductMappingService extends IBaseService<ProductMapping> {
CommonResult syncAllProductMapping(Integer storeId,String isPublish); CommonResult syncAllProductMapping(Integer storeId,String isPublish);
CommonResult getSyncProductUnchecked(Integer storeId); CommonResult getSyncProductUnchecked(Integer storeId,Integer pageNum,Integer pageSize);
// 下载导入模板 // 下载导入模板
void downloadTemplate(HttpServletResponse response); void downloadTemplate(HttpServletResponse response);
@ -44,4 +44,7 @@ public interface ProductMappingService extends IBaseService<ProductMapping> {
// 保存数据 // 保存数据
CommonResult saveProductMapping(ProductMapping data); CommonResult saveProductMapping(ProductMapping data);
// 导出未分配商品数据
void exportUncheckShopData(Integer storeId, HttpServletResponse response);
} }

View File

@ -532,7 +532,7 @@ public class ProductMappingServiceImpl extends BaseServiceImpl<ProductMappingMap
} }
@Override @Override
public CommonResult getSyncProductUnchecked(Integer storeId) { public CommonResult getSyncProductUnchecked(Integer storeId,Integer pageNum,Integer pageSize) {
if(ObjectUtil.isEmpty(storeId)){ if(ObjectUtil.isEmpty(storeId)){
storeId= Integer.valueOf(Objects.requireNonNull(ContextUtil.getCurrentUser()).getStore_id()); storeId= Integer.valueOf(Objects.requireNonNull(ContextUtil.getCurrentUser()).getStore_id());
} }
@ -540,7 +540,7 @@ public class ProductMappingServiceImpl extends BaseServiceImpl<ProductMappingMap
QueryWrapper<ShopProductBase> queryWrapper= new QueryWrapper<>(); QueryWrapper<ShopProductBase> queryWrapper= new QueryWrapper<>();
queryWrapper.eq("product_state_id", StateCode.PRODUCT_STATE_OFF_THE_SHELF_UNCHECK); queryWrapper.eq("product_state_id", StateCode.PRODUCT_STATE_OFF_THE_SHELF_UNCHECK);
queryWrapper.eq("store_id", storeId); queryWrapper.eq("store_id", storeId);
return CommonResult.success(shopProductBaseService.list(queryWrapper)); return CommonResult.success(shopProductBaseService.lists(queryWrapper,pageNum,pageSize));
} }
@Override @Override
@ -612,7 +612,7 @@ public class ProductMappingServiceImpl extends BaseServiceImpl<ProductMappingMap
productMappingService.saveBatch(toInsert,toInsert.size()); productMappingService.saveBatch(toInsert,toInsert.size());
} }
if (!toUpdate.isEmpty()) { if (!toUpdate.isEmpty()) {
productMappingService.updateBatchById(toUpdate,toInsert.size()); productMappingService.updateBatchById(toUpdate,toUpdate.size());
} }
// 5. 生成错误报告如果有错误 // 5. 生成错误报告如果有错误
@ -688,7 +688,7 @@ public class ProductMappingServiceImpl extends BaseServiceImpl<ProductMappingMap
// 构建唯一键查询条件 // 构建唯一键查询条件
private String buildUniqueKeyCondition(List<String> uniqueKeys) { private String buildUniqueKeyCondition(List<String> uniqueKeys) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append("CONCAT_WS('|', product_name, store_id, TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM CAST(spec_value AS CHAR))), spec_unit) IN ("); sb.append("CONCAT_WS('|', product_name,product_number, store_id) IN (");
for (int i = 0; i < uniqueKeys.size(); i++) { for (int i = 0; i < uniqueKeys.size(); i++) {
if (i > 0) sb.append(","); if (i > 0) sb.append(",");
@ -809,6 +809,43 @@ public class ProductMappingServiceImpl extends BaseServiceImpl<ProductMappingMap
return CommonResult.success(false); return CommonResult.success(false);
} }
@Override
public void exportUncheckShopData(Integer storeId, HttpServletResponse response) {
try {
// 设置响应头
setExcelResponseHeader(response, EXPORT_NAME);
if(ObjectUtil.isEmpty(storeId)){
storeId= Integer.valueOf(Objects.requireNonNull(ContextUtil.getCurrentUser()).getStore_id());
}
//找出范围内的规格产品
QueryWrapper<ShopProductBase> queryWrapper= new QueryWrapper<>();
queryWrapper.eq("product_state_id", StateCode.PRODUCT_STATE_OFF_THE_SHELF_UNCHECK);
queryWrapper.eq("store_id", storeId);
List<ShopProductBase> shopProductBaseList= shopProductBaseService.lists(queryWrapper,1,5000).getRecords();
List<ProductMappingExcel> excelData=new ArrayList<>();
shopProductBaseList.forEach(shopBase->{
ProductMappingExcel productMappingExcel=new ProductMappingExcel();
productMappingExcel.setProductName(shopBase.getProduct_name());
productMappingExcel.setStoreId(shopBase.getStore_id());
productMappingExcel.setProductNumber(shopBase.getProduct_number());
productMappingExcel.setStoreName(shopBase.getStore_name());
productMappingExcel.setSortOrder(10);
productMappingExcel.setSpecUnit("g");
excelData.add(productMappingExcel);
});
// 导出Excel
EasyExcel.write(response.getOutputStream(), ProductMappingExcel.class)
.sheet("需要映射的商品数据")
.registerWriteHandler(new ExportStyleHandler())
.doWrite(excelData);
} catch (IOException e) {
log.error("导出数据失败", e);
throw new RuntimeException("导出数据失败");
}
}
// 错误信息类 // 错误信息类
@Data @Data