From ccf944bd85f8c6033e824fd86b70eceabd0c3597 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Thu, 13 Nov 2025 18:24:11 +0800 Subject: [PATCH] fix:bug --- .../yudao-module-product-biz/pom.xml | 21 ++++ .../admin/spu/ProductSpuController.java | 48 +++++++- .../admin/spu/vo/ProductImportExcelResVO.java | 28 +++++ .../admin/spu/vo/ProductImportExcelVO.java | 62 ++++++++++ .../service/brand/ProductBrandService.java | 4 +- .../brand/ProductBrandServiceImpl.java | 7 ++ .../category/ProductCategoryService.java | 5 + .../category/ProductCategoryServiceImpl.java | 14 ++- .../service/spu/ProductSpuService.java | 8 +- .../service/spu/ProductSpuServiceImpl.java | 116 +++++++++++++++++- .../main/resources/file/商品导入-模版.xlsx | Bin 0 -> 9726 bytes .../admin/photo/vo/PhotoPageReqVO.java | 2 +- .../admin/photo/vo/PhotoRespVO.java | 2 +- .../admin/photo/vo/PhotoSaveReqVO.java | 2 +- .../app/photo/vo/AppUploadReqVo.java | 2 +- .../app/user/vo/AppMemberUserUpdateReqVO.java | 20 +++ .../member/dal/dataobject/photo/PhotoDO.java | 2 +- .../service/user/MemberUserServiceImpl.java | 19 +++ .../module/pay/enums/ErrorCodeConstants.java | 1 + .../wallet/PayWalletRechargeServiceImpl.java | 2 +- 20 files changed, 341 insertions(+), 24 deletions(-) create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductImportExcelResVO.java create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductImportExcelVO.java create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/resources/file/商品导入-模版.xlsx diff --git a/yudao-module-mall/yudao-module-product-biz/pom.xml b/yudao-module-mall/yudao-module-product-biz/pom.xml index c8bad46..eb6ec12 100644 --- a/yudao-module-mall/yudao-module-product-biz/pom.xml +++ b/yudao-module-mall/yudao-module-product-biz/pom.xml @@ -60,4 +60,25 @@ + + + + src/main/resources + true + + **/*.xlsx + **/*.xls + + + + src/main/resources + false + + **/*.xlsx + **/*.xls + + + + + diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java index 0c30897..5101b24 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/ProductSpuController.java @@ -1,6 +1,8 @@ package cn.iocoder.yudao.module.product.controller.admin.spu; +import cn.hutool.core.io.resource.ResourceUtil; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -12,21 +14,27 @@ import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; import cn.iocoder.yudao.module.product.service.sku.ProductSkuService; import cn.iocoder.yudao.module.product.service.spu.ProductSpuService; +import cn.iocoder.yudao.module.system.enums.common.SexEnum; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillConfig; +import com.alibaba.fastjson.JSON; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; -import java.util.Map; +import java.util.*; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -36,6 +44,7 @@ import static cn.iocoder.yudao.framework.common.pojo.PageParam.PAGE_SIZE_NONE; @RestController @RequestMapping("/product/spu") @Validated +@Slf4j public class ProductSpuController { @Resource @@ -129,7 +138,7 @@ public class ProductSpuController { @PreAuthorize("@ss.hasPermission('product:spu:export')") @ApiAccessLog(operateType = EXPORT) public void exportSpuList(@Validated ProductSpuPageReqVO reqVO, - HttpServletResponse response) throws IOException { + HttpServletResponse response) throws IOException { reqVO.setPageSize(PAGE_SIZE_NONE); List list = productSpuService.getSpuPage(reqVO).getList(); // 导出 Excel @@ -137,4 +146,33 @@ public class ProductSpuController { BeanUtils.toBean(list, ProductSpuRespVO.class)); } + @GetMapping("/get-import-template") + @Operation(summary = "获得导入商品模板") + public void importTemplate(HttpServletResponse response) throws IOException { + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(ResourceUtil.getStream("file/商品导入-模版.xlsx")).build()) { + WriteSheet writeSheet = EasyExcel.writerSheet().build(); + FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); + + Map map = new HashMap(); + + excelWriter.fill(map, writeSheet); + excelWriter.fill(new ArrayList<>(), fillConfig, writeSheet); + } catch (IOException e) { + e.printStackTrace(); + log.error("|获得导入商品模板|意外的错误:{}", e.getMessage()); + } + } + + @PostMapping("/import") + @Operation(summary = "导入商品") + @Parameters({ + @Parameter(name = "file", description = "Excel 文件", required = true), + }) + @PreAuthorize("@ss.hasPermission('system:user:import')") + public CommonResult> importExcel(@RequestParam("file") MultipartFile file) throws Exception { + List list = ExcelUtils.read(file, ProductImportExcelVO.class); + return success(productSpuService.importProductList(list)); + } + + } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductImportExcelResVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductImportExcelResVO.java new file mode 100644 index 0000000..9204d86 --- /dev/null +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductImportExcelResVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.product.controller.admin.spu.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) +public class ProductImportExcelResVO { + + /** + * 行号 + */ + private Integer lineNumber; + + /** + * 错误信息 + */ + private List errors; + +} diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductImportExcelVO.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductImportExcelVO.java new file mode 100644 index 0000000..d48b225 --- /dev/null +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/spu/vo/ProductImportExcelVO.java @@ -0,0 +1,62 @@ +package cn.iocoder.yudao.module.product.controller.admin.spu.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) +public class ProductImportExcelVO { + + @ExcelProperty("商品名称") + private String name; + + @ExcelProperty("商品分类") + private String categoryStr; + + /** + * 商品分类编号 + */ + private Long categoryId; + + @ExcelProperty("商品品牌") + private String brandStr; + + /** + * 品牌编号 + */ + private Long brandId; + + @ExcelProperty("商品关键字") + private String keyword; + + @ExcelProperty("商品简介") + private String introduction; + + @ExcelProperty("销售价") + private BigDecimal price; + + @ExcelProperty("市场价") + private BigDecimal marketPrice; + + @ExcelProperty("成本价") + private BigDecimal costPrice; + + @ExcelProperty("库存") + private Integer stock; + + @ExcelProperty("重量(kg)") + private BigDecimal weight; + + @ExcelProperty("体积(m^3)") + private BigDecimal volume; + +} diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandService.java index aa401ed..1dabb9b 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandService.java @@ -53,6 +53,8 @@ public interface ProductBrandService { */ List getBrandList(Collection ids); + List getBrandListByNames(Collection names); + /** * 获得品牌列表 * @@ -80,7 +82,7 @@ public interface ProductBrandService { * 获取指定状态的品牌列表 * * @param status 状态 - * @return 返回品牌列表 + * @return 返回品牌列表 */ List getBrandListByStatus(Integer status); } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImpl.java index b97123f..b65ddfd 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/brand/ProductBrandServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.product.service.brand; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandCreateReqVO; import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandListReqVO; import cn.iocoder.yudao.module.product.controller.admin.brand.vo.ProductBrandPageReqVO; @@ -15,6 +16,7 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.util.Collection; +import java.util.Collections; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -93,6 +95,11 @@ public class ProductBrandServiceImpl implements ProductBrandService { return brandMapper.selectBatchIds(ids); } + @Override + public List getBrandListByNames(Collection names) { + return brandMapper.selectList(new LambdaQueryWrapperX().in(ProductBrandDO::getName, names)); + } + @Override public List getBrandList(ProductBrandListReqVO listReqVO) { return brandMapper.selectList(listReqVO); diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryService.java index 73a93fa..3e5bf6d 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryService.java @@ -68,6 +68,11 @@ public interface ProductCategoryService { */ List getCategoryList(ProductCategoryListReqVO listReqVO); + /** + * 获取一级分类 + */ + List getStairCategoryList(List names); + /** * 获得开启状态的商品分类列表 * diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java index 42db6d9..579f38f 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/category/ProductCategoryServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryListReqVO; import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategorySaveReqVO; import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO; @@ -14,10 +15,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO.CATEGORY_LEVEL; @@ -171,6 +169,14 @@ public class ProductCategoryServiceImpl implements ProductCategoryService { return productCategoryMapper.selectList(listReqVO); } + @Override + public List getStairCategoryList(List names) { + return productCategoryMapper.selectList(new LambdaQueryWrapperX() + .in(ProductCategoryDO::getName, names) + .eq(ProductCategoryDO::getParentId, PARENT_ID_NULL) + ); + } + @Override public List getEnableCategoryList() { return productCategoryMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()); diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java index 75ef927..1e59359 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuService.java @@ -2,9 +2,7 @@ package cn.iocoder.yudao.module.product.service.spu; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReqVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuSaveReqVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateStatusReqVO; +import cn.iocoder.yudao.module.product.controller.admin.spu.vo.*; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; import org.springframework.scheduling.annotation.Async; @@ -143,4 +141,8 @@ public interface ProductSpuService { @Async void updateBrowseCount(Long id, int incrCount); + /** + * 导入商品 + */ + List importProductList(List list); } diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java index ce80f9b..624340b 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java +++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/spu/ProductSpuServiceImpl.java @@ -7,26 +7,30 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.product.controller.admin.category.vo.ProductCategoryListReqVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSkuSaveReqVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuPageReqVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuSaveReqVO; -import cn.iocoder.yudao.module.product.controller.admin.spu.vo.ProductSpuUpdateStatusReqVO; +import cn.iocoder.yudao.module.product.controller.admin.spu.vo.*; import cn.iocoder.yudao.module.product.controller.app.spu.vo.AppProductSpuPageReqVO; +import cn.iocoder.yudao.module.product.dal.dataobject.brand.ProductBrandDO; import cn.iocoder.yudao.module.product.dal.dataobject.category.ProductCategoryDO; +import cn.iocoder.yudao.module.product.dal.dataobject.sku.ProductSkuDO; import cn.iocoder.yudao.module.product.dal.dataobject.spu.ProductSpuDO; +import cn.iocoder.yudao.module.product.dal.mysql.sku.ProductSkuMapper; import cn.iocoder.yudao.module.product.dal.mysql.spu.ProductSpuMapper; import cn.iocoder.yudao.module.product.enums.spu.ProductSpuStatusEnum; import cn.iocoder.yudao.module.product.service.brand.ProductBrandService; import cn.iocoder.yudao.module.product.service.category.ProductCategoryService; import cn.iocoder.yudao.module.product.service.sku.ProductSkuService; import com.google.common.collect.Maps; +import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; @@ -38,12 +42,15 @@ import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.*; * * @author 芋道源码 */ +@Slf4j @Service @Validated public class ProductSpuServiceImpl implements ProductSpuService { @Resource private ProductSpuMapper productSpuMapper; + @Resource + private ProductSkuMapper productSkuMapper; @Resource @Lazy // 循环依赖,避免报错 @@ -154,7 +161,106 @@ public class ProductSpuServiceImpl implements ProductSpuService { @Override public void updateBrowseCount(Long id, int incrCount) { - productSpuMapper.updateBrowseCount(id , incrCount); + productSpuMapper.updateBrowseCount(id, incrCount); + } + + /** + * 导入商品 + */ + @Override + public List importProductList(List list) { + List resList = new ArrayList<>(); + if (ObjectUtil.isEmpty(list)) return resList; + // excel品牌 + List excelBrandStrList = list.stream().map(ProductImportExcelVO::getBrandStr).distinct().filter(ObjectUtil::isNotEmpty).map(s -> s.replaceAll("\\s+", "")).collect(Collectors.toList()); + // excel所有的一级分类 + List excelCategoryStrList = list.stream().map(ProductImportExcelVO::getCategoryStr).distinct().filter(ObjectUtil::isNotEmpty).map(s -> s.replaceAll("\\s+", "")).map(s -> s.split("-")[0]).collect(Collectors.toList()); + // db品牌 + List brandList = brandService.getBrandListByNames(excelBrandStrList); + // db一级分类 + List categoryList = categoryService.getStairCategoryList(excelCategoryStrList); + // 新增的商品 + List addList = new ArrayList<>(); + try { + for (int i = 0; i < list.size(); i++) { + ProductImportExcelVO v = list.get(i); + List errors = new ArrayList<>(); + ProductImportExcelResVO entity = new ProductImportExcelResVO(); + entity.setLineNumber(i + 1); + // 开始处理导入数据 + ProductBrandDO targetBrand = brandList.stream().filter(item -> ObjectUtil.equals(v.getBrandStr(), item.getName())).findFirst().orElse(null); + if (ObjectUtil.isEmpty(targetBrand)) { + errors.add("品牌[" + v.getBrandStr() + "]不存在,请添加后再导入"); + } else { + v.setBrandId(targetBrand.getId()); + } + List categoryStrs = Arrays.asList(v.getCategoryStr().split("-")); + // 查询一级分类 + ProductCategoryDO targetCategory = categoryList.stream().filter(item -> ObjectUtil.equals(categoryStrs.get(0), item.getName())).findFirst().orElse(null); + if (ObjectUtil.isNull(targetCategory)) { + errors.add("一级分类[" + v.getCategoryStr() + "]不存在,请添加后再导入"); + } else { + v.setCategoryId(targetCategory.getId()); + } + // 如果有二级分类 + if (categoryStrs.size() > 1) { + ProductCategoryDO targetCategory2 = categoryList.stream().filter(item -> ObjectUtil.equals(categoryStrs.get(1), item.getName())).findFirst().orElse(null); + if (ObjectUtil.isNull(targetCategory2)) { + errors.add("二级分类[" + v.getCategoryStr() + "]不存在,请添加后再导入"); + } else { + v.setCategoryId(targetCategory2.getId()); + } + } + if (ObjectUtil.isNotEmpty(errors)) { + entity.setErrors(errors); + resList.add(entity); + continue; + } + addList.add(v); + } + if (ObjectUtil.isNotEmpty(resList)) return resList; + // 新增商品 + for (ProductImportExcelVO v : addList) { + int price = v.getPrice().multiply(BigDecimal.valueOf(100)).setScale(0, RoundingMode.HALF_UP).intValue(); + int marketPrice = v.getMarketPrice().multiply(BigDecimal.valueOf(100)).setScale(0, RoundingMode.HALF_UP).intValue(); + int costPrice = v.getCostPrice().multiply(BigDecimal.valueOf(100)).setScale(0, RoundingMode.HALF_UP).intValue(); + ProductSpuDO spuObj = new ProductSpuDO(); + spuObj.setName(v.getName()); + spuObj.setKeyword(v.getKeyword()); + spuObj.setCategoryId(v.getCategoryId()); + spuObj.setBrandId(v.getBrandId()); + spuObj.setPicUrl(""); + spuObj.setSliderPicUrls(new ArrayList<>()); + spuObj.setSort(0); + spuObj.setStatus(ProductSpuStatusEnum.ENABLE.getStatus()); + spuObj.setSpecType(false); + spuObj.setPrice(price); + spuObj.setMarketPrice(marketPrice); + spuObj.setCostPrice(costPrice); + spuObj.setStock(v.getStock()); + spuObj.setDeliveryTypes(new ArrayList<>()); + productSpuMapper.insert(spuObj); + // 插入 + List skuList = new ArrayList<>(); + ProductSkuSaveReqVO skuObj = new ProductSkuSaveReqVO(); + skuObj.setName(v.getName()); + skuObj.setPrice(price); + skuObj.setMarketPrice(marketPrice); + skuObj.setCostPrice(costPrice); + skuObj.setBarCode(""); + skuObj.setPicUrl(""); + skuObj.setStock(v.getStock()); + skuObj.setWeight(v.getWeight().doubleValue()); + skuObj.setVolume(v.getVolume().doubleValue()); + productSkuService.validateSkuList(skuList, false); + productSkuService.updateSkuList(spuObj.getId(), skuList); + skuList.add(skuObj); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("|导入商品|意外的错误f:{}", e.getMessage()); + } + return resList; } @Override diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/resources/file/商品导入-模版.xlsx b/yudao-module-mall/yudao-module-product-biz/src/main/resources/file/商品导入-模版.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..379180b2c9409ac850cab634b7f56962706f9b50 GIT binary patch literal 9726 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 literal 0 HcmV?d00001 diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoPageReqVO.java index 8e761bd..7fa4dba 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoPageReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoPageReqVO.java @@ -29,7 +29,7 @@ public class PhotoPageReqVO extends PageParam { private PhotoResourceTypeEnum resourceType; @Schema(description = "资源地址") - private Long address; + private String address; @Schema(description = "tag_json") private String tagJson; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoRespVO.java index 6862a65..ae85657 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoRespVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoRespVO.java @@ -32,7 +32,7 @@ public class PhotoRespVO { @Schema(description = "资源地址", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("资源地址") - private Long address; + private String address; @Schema(description = "tag") @ExcelProperty("tag-json") diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoSaveReqVO.java index 598c559..67bb159 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoSaveReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/photo/vo/PhotoSaveReqVO.java @@ -25,7 +25,7 @@ public class PhotoSaveReqVO { @Schema(description = "资源地址", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "资源地址不能为空") - private Long address; + private String address; @Schema(description = "tag") private String tagJson; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/photo/vo/AppUploadReqVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/photo/vo/AppUploadReqVo.java index 5d49347..62233ff 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/photo/vo/AppUploadReqVo.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/photo/vo/AppUploadReqVo.java @@ -22,7 +22,7 @@ public class AppUploadReqVo { @Schema(description = "资源地址") @NotNull(message = "资源地址不能为空") - private Long address; + private String address; @Schema(description = "发布-经度") private Double issueLong; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateReqVO.java index 0adbf2b..66fb030 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateReqVO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/user/vo/AppMemberUserUpdateReqVO.java @@ -1,10 +1,14 @@ package cn.iocoder.yudao.module.member.controller.app.user.vo; +import cn.iocoder.yudao.module.member.enums.photo.PhotoResourceTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.hibernate.validator.constraints.URL; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "用户 App - 会员用户更新 Request VO") @Data @@ -32,4 +36,20 @@ public class AppMemberUserUpdateReqVO { @Schema(description = "个人介绍") private String description; + @Schema(description = "用户相册") + private List photo; + + @Data + public static class UploadReqVo { + + @Schema(description = "资源类型") + @NotEmpty(message = "上传途径不能为空") + private PhotoResourceTypeEnum resourceType; + + @Schema(description = "资源地址") + @NotNull(message = "资源地址不能为空") + private String address; + + } + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/photo/PhotoDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/photo/PhotoDO.java index a480985..44cee17 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/photo/PhotoDO.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/photo/PhotoDO.java @@ -46,7 +46,7 @@ public class PhotoDO extends BaseDO { /** * 资源地址 */ - private Long address; + private String address; /** * tag-json diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 6f1744d..b5d7c4f 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -13,8 +13,12 @@ import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateR import cn.iocoder.yudao.module.member.controller.app.user.vo.*; import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; +import cn.iocoder.yudao.module.member.dal.dataobject.photo.PhotoDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; +import cn.iocoder.yudao.module.member.dal.mysql.photo.PhotoMapper; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; +import cn.iocoder.yudao.module.member.enums.photo.PhotoBizTypeEnum; +import cn.iocoder.yudao.module.member.enums.photo.PhotoResourceTypeEnum; import cn.iocoder.yudao.module.member.mq.producer.user.MemberUserProducer; import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; @@ -34,6 +38,8 @@ import javax.validation.Valid; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.servlet.ServletUtils.getClientIP; @@ -51,6 +57,8 @@ public class MemberUserServiceImpl implements MemberUserService { @Resource private MemberUserMapper memberUserMapper; + @Resource + private PhotoMapper photoMapper; @Resource private SmsCodeApi smsCodeApi; @@ -144,6 +152,17 @@ public class MemberUserServiceImpl implements MemberUserService { public void updateUser(Long userId, AppMemberUserUpdateReqVO reqVO) { MemberUserDO updateObj = BeanUtils.toBean(reqVO, MemberUserDO.class).setId(userId); memberUserMapper.updateById(updateObj); + if (ObjectUtil.isNotEmpty(reqVO.getPhoto())) { + List photoList = reqVO.getPhoto().stream().map(item -> { + PhotoDO entity = new PhotoDO(); + entity.setMemberId(userId); + entity.setBizType(PhotoBizTypeEnum.USER_PHOTO.getType()); + entity.setResourceType(item.getResourceType().getType()); + entity.setAddress(item.getAddress()); + return entity; + }).collect(Collectors.toList()); + photoMapper.insert(photoList); + } } @Override diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java index cb9e568..7b0d673 100644 --- a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java +++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/enums/ErrorCodeConstants.java @@ -77,6 +77,7 @@ public interface ErrorCodeConstants { // ========== 钱包用户转账模块 1-007-010-000 ========== ErrorCode WALLET_USER_TRANSFER_NOT_FOUND = new ErrorCode(1_007_010_000, "用户转账单不存在"); + ErrorCode WALLET_USER_TRANSFER_NOT_SELF = new ErrorCode(1_007_010_001, "自己不能给自己送出礼物"); // ========== 示例订单 1-007-900-000 ========== ErrorCode DEMO_ORDER_NOT_FOUND = new ErrorCode(1_007_900_000, "示例订单不存在"); diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java index 5fec2f2..3a6e117 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletRechargeServiceImpl.java @@ -127,7 +127,7 @@ public class PayWalletRechargeServiceImpl implements PayWalletRechargeService { public Long sendGift(AppPayWalletGiftSendReqVo dto) { // 自己不能给自己送出礼物 if (ObjectUtil.equals(dto.getTargetMemberId(), dto.getOperationMemberId())) { - throw new RuntimeException("自己不能给自己送出礼物"); + throw exception(WALLET_USER_TRANSFER_NOT_SELF); } // 查询目标用户钱包