diff --git a/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/LogRecordConstants.java b/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/LogRecordConstants.java new file mode 100644 index 0000000000..42ce52d311 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/enums/LogRecordConstants.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.haoka.enums; + +public interface LogRecordConstants { + + String HAOKA_CREATE="创建"; + String HAOKA_UPDATE="修改"; + String HAOKA_DELETE="删除"; + + String HAOKA_PRODUCT = "产品"; + String HAOKA_PRODUCT_CREATE_SUCCESS = "产品名称:【{{#haoKaProduct.name}}】,编码:【{{#haoKaProduct.sku}}】"; + String HAOKA_PRODUCT_UPDATE_SUCCESS = "更新了产品【{{#old.name}}】: {_DIFF{#updateReqVO}}"; + + + String HAOKA_SALE_PRODUCT = "在售商品"; + String HAOKA_SALE_PRODUCT_CREATE_SUCCESS = "名称:【{{#create.name}}】,编码:【{{#create.sku}}】"; + String HAOKA_SALE_PRODUCT_UPDATE_SUCCESS = "更新【{{#old.name}}】: {_DIFF{#updateReqVO}}"; + + + + + // ---------------------------- + String SYSTEM_USER_CREATE_SUCCESS = "创建了用户【{{#user.nickname}}】"; + String SYSTEM_USER_UPDATE_SUB_TYPE = "更新用户"; + String SYSTEM_USER_UPDATE_SUCCESS = "更新了用户【{{#user.nickname}}】: {_DIFF{#updateReqVO}}"; + String SYSTEM_USER_DELETE_SUB_TYPE = "删除用户"; + String SYSTEM_USER_DELETE_SUCCESS = "删除了用户【{{#user.nickname}}】"; + String SYSTEM_USER_UPDATE_PASSWORD_SUB_TYPE = "重置用户密码"; + String SYSTEM_USER_UPDATE_PASSWORD_SUCCESS = "将用户【{{#user.nickname}}】的密码从【{{#user.password}}】重置为【{{#newPassword}}】"; + +} diff --git a/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/utils/SnowflakeId.java b/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/utils/SnowflakeId.java new file mode 100644 index 0000000000..9697dd8fd7 --- /dev/null +++ b/yudao-module-haoka/yudao-module-haoka-api/src/main/java/cn/iocoder/yudao/module/haoka/utils/SnowflakeId.java @@ -0,0 +1,103 @@ +package cn.iocoder.yudao.module.haoka.utils; + +public class SnowflakeId { + + // 起始的时间戳(毫秒) + private final static long START_TIMESTAMP = 1609459200000L; // 2021-01-01 00:00:00 + + // 每一部分占用的位数 + private final static long MACHINE_ID_BITS = 10L; // 机器ID占用的位数 + private final static long SEQUENCE_BITS = 12L; // 序列号占用的位数 + + // 每一部分的最大值 + private final static long MAX_MACHINE_ID = ~(-1L << MACHINE_ID_BITS); // 机器ID最大值 + private final static long MAX_SEQUENCE = ~(-1L << SEQUENCE_BITS); // 序列号最大值 + + // 每一部分向左的位移 + private final static long MACHINE_ID_SHIFT = SEQUENCE_BITS; // 机器ID左移位数 + private final static long TIMESTAMP_SHIFT = SEQUENCE_BITS + MACHINE_ID_BITS; // 时间戳左移位数 + + private final long machineId; // 机器ID + private long sequence = 0L; // 序列号 + private long lastTimestamp = -1L; // 上一次生成ID的时间戳 + + + public SnowflakeId() { + this.machineId = 1L; + } + + /** + * 构造函数 + * + * @param machineId 机器ID (0~1023) + */ + public SnowflakeId(long machineId) { + if (machineId > MAX_MACHINE_ID || machineId < 0) { + throw new IllegalArgumentException("MachineId can't be greater than " + MAX_MACHINE_ID + " or less than 0"); + } + this.machineId = machineId; + } + + /** + * 生成下一个ID + * + * @return 生成的ID + */ + public synchronized long nextId() { + long currentTimestamp = getCurrentTimestamp(); + + // 如果当前时间小于上一次生成ID的时间戳,说明系统时钟回退过,抛出异常 + if (currentTimestamp < lastTimestamp) { + throw new RuntimeException("Clock moved backwards. Refusing to generate id for " + (lastTimestamp - currentTimestamp) + " milliseconds"); + } + + // 如果是同一时间生成的,则进行序列号自增 + if (currentTimestamp == lastTimestamp) { + sequence = (sequence + 1) & MAX_SEQUENCE; + // 如果序列号溢出,则等待下一毫秒 + if (sequence == 0) { + currentTimestamp = getNextMillisecond(); + } + } else { + // 时间戳改变,序列号重置 + sequence = 0L; + } + + // 更新上一次生成ID的时间戳 + lastTimestamp = currentTimestamp; + + // 生成ID + return (currentTimestamp - START_TIMESTAMP) << TIMESTAMP_SHIFT // 时间戳部分 + | machineId << MACHINE_ID_SHIFT // 机器ID部分 + | sequence; // 序列号部分 + } + + /** + * 获取当前时间戳(毫秒) + * + * @return 当前时间戳 + */ + private long getCurrentTimestamp() { + return System.currentTimeMillis(); + } + + /** + * 获取下一毫秒的时间戳 + * + * @return 下一毫秒的时间戳 + */ + private long getNextMillisecond() { + long timestamp = getCurrentTimestamp(); + while (timestamp <= lastTimestamp) { + timestamp = getCurrentTimestamp(); + } + return timestamp; + } + + private static final SnowflakeId SHARE = new SnowflakeId(); + + public static long generate() { + return SHARE.nextId(); + } + +} diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/OnSaleProductController.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/OnSaleProductController.java index 3607a85772..f6561753f9 100644 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/OnSaleProductController.java +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/OnSaleProductController.java @@ -1,5 +1,9 @@ package cn.iocoder.yudao.module.haoka.controller.admin.onsaleproduct; +import cn.hutool.core.collection.CollectionUtil; +import cn.iocoder.yudao.module.haoka.controller.admin.product.vo.HaoKaProductRespVO; +import cn.iocoder.yudao.module.haoka.dal.dataobject.product.HaoKaProductDO; +import cn.iocoder.yudao.module.haoka.service.product.HaoKaProductService; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -11,18 +15,22 @@ import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.constraints.*; import jakarta.validation.*; import jakarta.servlet.http.*; + import java.util.*; import java.io.IOException; +import java.util.stream.Collectors; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; + import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; import cn.iocoder.yudao.module.haoka.controller.admin.onsaleproduct.vo.*; @@ -38,6 +46,9 @@ public class OnSaleProductController { @Resource private OnSaleProductService onSaleProductService; + @Resource + private HaoKaProductService haoKaProductService; + @PostMapping("/create") @Operation(summary = "创建在售产品") @PreAuthorize("@ss.hasPermission('haoka:on-sale-product:create')") @@ -76,7 +87,20 @@ public class OnSaleProductController { @PreAuthorize("@ss.hasPermission('haoka:on-sale-product:query')") public CommonResult> getOnSaleProductPage(@Valid OnSaleProductPageReqVO pageReqVO) { PageResult pageResult = onSaleProductService.getOnSaleProductPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, OnSaleProductRespVO.class)); + PageResult bean = BeanUtils.toBean(pageResult, OnSaleProductRespVO.class); + if (CollectionUtil.isNotEmpty(bean.getList())) { + List collect = bean.getList().stream().map(OnSaleProductRespVO::getParentProductId) + .toList(); + List haoKaProductDOS = haoKaProductService.listByIds(collect); + Map map = haoKaProductDOS.stream().collect(Collectors.toMap(HaoKaProductDO::getId, it -> it)); + bean.getList().forEach(it -> { + HaoKaProductDO haoKaProductDO = map.get(it.getParentProductId()); + it.setParentProduct(BeanUtils.toBean(haoKaProductDO, HaoKaProductRespVO.class)); + }); + } + + + return success(bean); } @GetMapping("/export-excel") @@ -84,12 +108,12 @@ public class OnSaleProductController { @PreAuthorize("@ss.hasPermission('haoka:on-sale-product:export')") @ApiAccessLog(operateType = EXPORT) public void exportOnSaleProductExcel(@Valid OnSaleProductPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { + HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = onSaleProductService.getOnSaleProductPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "在售产品.xls", "数据", OnSaleProductRespVO.class, - BeanUtils.toBean(list, OnSaleProductRespVO.class)); + BeanUtils.toBean(list, OnSaleProductRespVO.class)); } -} \ No newline at end of file +} diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/vo/OnSaleProductRespVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/vo/OnSaleProductRespVO.java index c313f6a500..ea9660ab56 100644 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/vo/OnSaleProductRespVO.java +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/vo/OnSaleProductRespVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.haoka.controller.admin.onsaleproduct.vo; +import cn.iocoder.yudao.module.haoka.controller.admin.product.vo.HaoKaProductRespVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -22,6 +23,11 @@ public class OnSaleProductRespVO { @ExcelProperty("产品") private Long parentProductId; + + @ExcelIgnore + @Schema(description = "产品", requiredMode = Schema.RequiredMode.REQUIRED) + private HaoKaProductRespVO parentProduct; + @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("商品名称") private String name; @@ -115,4 +121,4 @@ public class OnSaleProductRespVO { @ExcelProperty("创建时间") private LocalDateTime createTime; -} \ No newline at end of file +} diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/vo/OnSaleProductSaveReqVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/vo/OnSaleProductSaveReqVO.java index 9fc9646ee0..972ab629ab 100644 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/vo/OnSaleProductSaveReqVO.java +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/onsaleproduct/vo/OnSaleProductSaveReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.haoka.controller.admin.onsaleproduct.vo; +import com.mzt.logapi.starter.annotation.DiffLogField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -14,14 +15,17 @@ public class OnSaleProductSaveReqVO { @Schema(description = "产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "17875") @NotNull(message = "产品不能为空") + @DiffLogField(name = "产品ID") private Long parentProductId; @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "商品名称不能为空") + @DiffLogField(name = "商品名称") private String name; @Schema(description = "商家编码", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "商家编码不能为空") + @DiffLogField(name = "商家编码") private String sku; @Schema(description = "商品注意点") @@ -34,6 +38,7 @@ public class OnSaleProductSaveReqVO { private String acceptanceRules; @Schema(description = "结算要求") + @DiffLogField(name = "结算要求") private String settlementRequirement; @Schema(description = "佣金结算规则(内部)") @@ -44,6 +49,7 @@ public class OnSaleProductSaveReqVO { private Boolean needSaleUploadImage; @Schema(description = "产品主图") + @DiffLogField(name = "产品主图") private String mainImg; @Schema(description = "商品分享图") @@ -81,9 +87,10 @@ public class OnSaleProductSaveReqVO { @Schema(description = "上架", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "上架不能为空") + @DiffLogField(name = "上架") private Boolean onSale; @Schema(description = "是否顶置") private Boolean isTop; -} \ No newline at end of file +} diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/product/vo/HaoKaProductSaveReqVO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/product/vo/HaoKaProductSaveReqVO.java index 0bdd92ff79..2b9ced97ec 100644 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/product/vo/HaoKaProductSaveReqVO.java +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/controller/admin/product/vo/HaoKaProductSaveReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.haoka.controller.admin.product.vo; +import com.mzt.logapi.starter.annotation.DiffLogField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -15,14 +16,17 @@ public class HaoKaProductSaveReqVO { @Schema(description = "运营商", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "运营商不能为空") + @DiffLogField(name = "运营商") private Integer operator; @Schema(description = "产品编码", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "产品编码不能为空") + @DiffLogField(name = "产品编码") private String sku; @Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") @NotEmpty(message = "产品名称不能为空") + @DiffLogField(name = "产品名称") private String name; @Schema(description = "产品类型", example = "21014") @@ -58,6 +62,7 @@ public class HaoKaProductSaveReqVO { private Boolean enableStockLimit; @Schema(description = "库存数量") + @DiffLogField(name = "库存数量") private Integer stockNum; @Schema(description = "库存报警数量") @@ -73,6 +78,7 @@ public class HaoKaProductSaveReqVO { private String estimatedRevenue; @Schema(description = "上架") + @DiffLogField(name = "上架") private Boolean onSale; @Schema(description = "是否顶置") diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/onsaleproduct/OnSaleProductDO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/onsaleproduct/OnSaleProductDO.java index b9e8ab8bbc..746c40ba9b 100644 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/onsaleproduct/OnSaleProductDO.java +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/onsaleproduct/OnSaleProductDO.java @@ -25,7 +25,7 @@ public class OnSaleProductDO extends BaseDO { /** * ID */ - @TableId + @TableId(type = IdType.ASSIGN_ID) private Long id; /** * 产品 @@ -126,4 +126,4 @@ public class OnSaleProductDO extends BaseDO { */ private Long deptId; -} \ No newline at end of file +} diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/product/HaoKaProductDO.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/product/HaoKaProductDO.java index cf6150cc41..e2c8c09667 100644 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/product/HaoKaProductDO.java +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/dal/dataobject/product/HaoKaProductDO.java @@ -25,7 +25,7 @@ public class HaoKaProductDO extends BaseDO { /** * 产品ID */ - @TableId(type = IdType.ASSIGN_ID) + @TableId private Long id; /** * 运营商 diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/onsaleproduct/OnSaleProductServiceImpl.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/onsaleproduct/OnSaleProductServiceImpl.java index 55b5248bfe..790cb141e2 100644 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/onsaleproduct/OnSaleProductServiceImpl.java +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/onsaleproduct/OnSaleProductServiceImpl.java @@ -1,5 +1,11 @@ package cn.iocoder.yudao.module.haoka.service.onsaleproduct; +import cn.iocoder.yudao.module.haoka.controller.admin.product.vo.HaoKaProductSaveReqVO; +import cn.iocoder.yudao.module.haoka.enums.LogRecordConstants; +import cn.iocoder.yudao.module.haoka.utils.SnowflakeId; +import com.mzt.logapi.context.LogRecordContext; +import com.mzt.logapi.service.impl.DiffParseFunction; +import com.mzt.logapi.starter.annotation.LogRecord; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -30,21 +36,37 @@ public class OnSaleProductServiceImpl implements OnSaleProductService { private OnSaleProductMapper onSaleProductMapper; @Override + @LogRecord(type = LogRecordConstants.HAOKA_SALE_PRODUCT, + subType = LogRecordConstants.HAOKA_UPDATE, + bizNo = "{{#create.id}}", + success = LogRecordConstants.HAOKA_SALE_PRODUCT_CREATE_SUCCESS) public Long createOnSaleProduct(OnSaleProductSaveReqVO createReqVO) { // 插入 OnSaleProductDO onSaleProduct = BeanUtils.toBean(createReqVO, OnSaleProductDO.class); onSaleProductMapper.insert(onSaleProduct); + onSaleProduct.setId(SnowflakeId.generate()); + + // 日志 + LogRecordContext.putVariable("create",onSaleProduct); + // 返回 return onSaleProduct.getId(); } @Override + @LogRecord(type = LogRecordConstants.HAOKA_SALE_PRODUCT, + subType = LogRecordConstants.HAOKA_UPDATE, + bizNo = "{{#updateReqVO.id}}", + success = LogRecordConstants.HAOKA_SALE_PRODUCT_UPDATE_SUCCESS) public void updateOnSaleProduct(OnSaleProductSaveReqVO updateReqVO) { // 校验存在 validateOnSaleProductExists(updateReqVO.getId()); // 更新 OnSaleProductDO updateObj = BeanUtils.toBean(updateReqVO, OnSaleProductDO.class); + OnSaleProductDO old = onSaleProductMapper.selectById(updateObj.getId()); onSaleProductMapper.updateById(updateObj); + LogRecordContext.putVariable(DiffParseFunction.OLD_OBJECT, BeanUtils.toBean(old, OnSaleProductSaveReqVO.class)); + LogRecordContext.putVariable("old", old); } @Override @@ -71,4 +93,4 @@ public class OnSaleProductServiceImpl implements OnSaleProductService { return onSaleProductMapper.selectPage(pageReqVO); } -} \ No newline at end of file +} diff --git a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/product/HaoKaProductServiceImpl.java b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/product/HaoKaProductServiceImpl.java index add48135a0..5cabb05be3 100644 --- a/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/product/HaoKaProductServiceImpl.java +++ b/yudao-module-haoka/yudao-module-haoka-biz/src/main/java/cn/iocoder/yudao/module/haoka/service/product/HaoKaProductServiceImpl.java @@ -1,7 +1,13 @@ package cn.iocoder.yudao.module.haoka.service.product; +import cn.iocoder.yudao.module.haoka.utils.SnowflakeId; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.haoka.enums.LogRecordConstants; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.mzt.logapi.context.LogRecordContext; +import com.mzt.logapi.service.impl.DiffParseFunction; +import com.mzt.logapi.starter.annotation.LogRecord; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -13,7 +19,6 @@ import cn.iocoder.yudao.module.haoka.controller.admin.product.vo.*; import cn.iocoder.yudao.module.haoka.dal.dataobject.product.HaoKaProductDO; import cn.iocoder.yudao.module.haoka.dal.dataobject.superiorproductconfig.SuperiorProductConfigDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.haoka.dal.mysql.product.HaoKaProductMapper; @@ -29,6 +34,7 @@ import static cn.iocoder.yudao.module.haoka.enums.ErrorCodeConstants.*; */ @Service @Validated +@Slf4j public class HaoKaProductServiceImpl extends ServiceImpl implements HaoKaProductService { @Resource @@ -37,15 +43,25 @@ public class HaoKaProductServiceImpl extends ServiceImpl