From ba3fe6a2420bf796c8276236098edfb1c26dfcbd Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Mon, 28 Jul 2025 17:28:04 +0800 Subject: [PATCH 01/22] =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tashow-framework/tashow-common/pom.xml | 19 + .../util/serializer/ImgJsonSerializer.java | 64 +++ tashow-framework/tashow-data-mybatis/pom.xml | 5 + .../src/main/resources/application-local.yaml | 4 +- tashow-module/pom.xml | 1 + .../codegen/java/controller/controller.vm | 253 ------------ .../codegen/java/controller/vo/listReqVO.vm | 51 --- .../codegen/java/controller/vo/pageReqVO.vm | 53 --- .../codegen/java/controller/vo/respVO.vm | 57 --- .../codegen/java/controller/vo/saveReqVO.vm | 72 ---- .../src/main/resources/codegen/java/dal/do.vm | 52 --- .../main/resources/codegen/java/dal/do_sub.vm | 49 --- .../main/resources/codegen/java/dal/mapper.vm | 82 ---- .../resources/codegen/java/dal/mapper.xml.vm | 12 - .../resources/codegen/java/dal/mapper_sub.vm | 57 --- .../resources/codegen/java/enums/errorcode.vm | 22 -- .../resources/codegen/java/service/service.vm | 147 ------- .../codegen/java/service/serviceImpl.vm | 351 ---------------- .../codegen/java/test/serviceTest.vm | 168 -------- .../src/main/resources/codegen/sql/h2.vm | 37 -- .../src/main/resources/codegen/sql/sql.vm | 28 -- .../main/resources/codegen/vue/api/api.js.vm | 141 ------- .../vue/views/components/form_sub_erp.vue.vm | 205 ---------- .../views/components/form_sub_inner.vue.vm | 2 - .../views/components/form_sub_normal.vue.vm | 347 ---------------- .../vue/views/components/list_sub_erp.vue.vm | 165 -------- .../views/components/list_sub_inner.vue.vm | 4 - .../resources/codegen/vue/views/form.vue.vm | 320 --------------- .../resources/codegen/vue/views/index.vue.vm | 340 ---------------- .../main/resources/codegen/vue3/api/api.ts.vm | 115 ------ .../vue3/views/components/form_sub_erp.vue.vm | 204 ---------- .../views/components/form_sub_inner.vue.vm | 2 - .../views/components/form_sub_normal.vue.vm | 360 ----------------- .../vue3/views/components/list_sub_erp.vue.vm | 184 --------- .../views/components/list_sub_inner.vue.vm | 4 - .../resources/codegen/vue3/views/form.vue.vm | 300 -------------- .../resources/codegen/vue3/views/index.vue.vm | 374 ------------------ .../resources/codegen/vue3_vben/api/api.ts.vm | 32 -- .../codegen/vue3_vben/views/data.ts.vm | 260 ------------ .../codegen/vue3_vben/views/form.vue.vm | 58 --- .../codegen/vue3_vben/views/index.vue.vm | 92 ----- .../controller/CategoryController.java | 54 +++ .../product/controller/ProdController.java | 77 ++++ .../tashow/cloud/product/domain/Category.java | 142 +++++++ .../com/tashow/cloud/product/domain/Prod.java | 200 ++++++++++ .../product/domain/ServerResponseEntity.java | 198 ++++++++++ .../com/tashow/cloud/product/dto/ProdDO.java | 143 +++++++ .../cloud/product/mapper/CategoryMapper.java | 46 +++ .../cloud/product/mapper/ProdMapper.java | 22 ++ .../product/service/CategoryService.java | 71 ++++ .../cloud/product/service/ProdService.java | 57 +++ .../service/impl/CategoryServiceImpl.java | 79 ++++ .../product/service/impl/ProdServiceImpl.java | 75 ++++ .../cloud/product/vo/prod/ProdPageReqVO.java | 108 +++++ .../cloud/product/vo/prod/ProdRespVO.java | 135 +++++++ .../cloud/product/vo/prod/ProdSaveReqVO.java | 99 +++++ .../src/main/resources/application-local.yaml | 16 + .../src/main/resources/application.yaml | 12 + .../mapper/product/CategoryMapper.xml | 35 ++ .../src/main/resources/application-local.yaml | 4 +- 60 files changed, 1662 insertions(+), 5004 deletions(-) create mode 100644 tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/serializer/ImgJsonSerializer.java delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/controller.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/listReqVO.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/pageReqVO.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/respVO.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/saveReqVO.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do_sub.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.xml.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper_sub.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/enums/errorcode.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/service.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/test/serviceTest.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/sql/h2.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/sql/sql.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/api/api.js.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/form.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/index.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/api/api.ts.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/form.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/index.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/api/api.ts.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/data.ts.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/form.vue.vm delete mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/index.vue.vm create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Category.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Prod.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ServerResponseEntity.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/resources/application-local.yaml create mode 100644 tashow-module/tashow-module-product/src/main/resources/application.yaml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml diff --git a/tashow-framework/tashow-common/pom.xml b/tashow-framework/tashow-common/pom.xml index cf54682..4e246cb 100644 --- a/tashow-framework/tashow-common/pom.xml +++ b/tashow-framework/tashow-common/pom.xml @@ -108,6 +108,25 @@ jackson-datatype-jsr310 provided + + + + + org.apache.commons + commons-lang3 + + + org.slf4j diff --git a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/serializer/ImgJsonSerializer.java b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/serializer/ImgJsonSerializer.java new file mode 100644 index 0000000..9af3bca --- /dev/null +++ b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/serializer/ImgJsonSerializer.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ + +package com.tashow.cloud.common.util.serializer; + +import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.IOException; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author lanhai + */ +@Component +public class ImgJsonSerializer extends JsonSerializer { + + /* @Autowired + private Qiniu qiniu; + @Autowired + private ImgUploadUtil imgUploadUtil;*/ + + @Override + public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + /*if (StrUtil.isBlank(value)) { + gen.writeString(StrUtil.EMPTY); + return; + } + String[] imgs = value.split(StrUtil.COMMA); + StringBuilder sb = new StringBuilder(); + String resourceUrl = ""; + String rule="^((http[s]{0,1})://)"; + Pattern pattern= Pattern.compile(rule); + if (Objects.equals(imgUploadUtil.getUploadType(), 2)) { + resourceUrl = qiniu.getResourcesUrl(); + } else if (Objects.equals(imgUploadUtil.getUploadType(), 1)) { + resourceUrl = imgUploadUtil.getResourceUrl(); + } + for (String img : imgs) { + Matcher matcher = pattern.matcher(img); + //若图片以http或https开头,直接返回 + if (matcher.find()){ + sb.append(img).append(StrUtil.COMMA); + }else { + sb.append(resourceUrl).append(img).append(StrUtil.COMMA); + } + } + sb.deleteCharAt(sb.length()-1); + gen.writeString(sb.toString());*/ + } +} diff --git a/tashow-framework/tashow-data-mybatis/pom.xml b/tashow-framework/tashow-data-mybatis/pom.xml index cff3557..f45fe8a 100644 --- a/tashow-framework/tashow-data-mybatis/pom.xml +++ b/tashow-framework/tashow-data-mybatis/pom.xml @@ -37,6 +37,11 @@ ojdbc8 true + org.postgresql postgresql diff --git a/tashow-gateway/src/main/resources/application-local.yaml b/tashow-gateway/src/main/resources/application-local.yaml index afff069..93af80b 100644 --- a/tashow-gateway/src/main/resources/application-local.yaml +++ b/tashow-gateway/src/main/resources/application-local.yaml @@ -7,10 +7,10 @@ spring: username: nacos # Nacos 账号 password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 - namespace: liwq # 命名空间。这里使用 dev 开发环境 + namespace: 76667956-2ac2-4e05-906b-4bca4ebcc5f0 # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP config: # 【注册中心】配置项 - namespace: liwq # 命名空间。这里使用 dev 开发环境 + namespace: 76667956-2ac2-4e05-906b-4bca4ebcc5f0 # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP # 日志文件配置 diff --git a/tashow-module/pom.xml b/tashow-module/pom.xml index 37c811b..ffdb6c5 100644 --- a/tashow-module/pom.xml +++ b/tashow-module/pom.xml @@ -14,6 +14,7 @@ tashow-module-system tashow-module-infra tashow-module-app + tashow-module-product diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/controller.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/controller.vm deleted file mode 100644 index e47b61e..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/controller.vm +++ /dev/null @@ -1,253 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}; - -import org.springframework.web.bind.annotation.*; -import ${jakartaPackage}.annotation.Resource; -import org.springframework.validation.annotation.Validated; -#if ($sceneEnum.scene == 1)import org.springframework.security.access.prepost.PreAuthorize;#end - -import ${jakartaPackage}.validation.constraints.*; -import ${jakartaPackage}.validation.*; -import ${jakartaPackage}.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import ${PageParamClassName}; -import ${PageResultClassName}; -import ${CommonResultClassName}; -import ${BeanUtils}; -import static ${CommonResultClassName}.success; - -import ${ExcelUtilsClassName}; - -import ${ApiAccessLogClassName}; -import static ${OperateTypeEnumClassName}.*; - -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; -#end -import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.${table.className}Service; - -/** - * ${sceneEnum.name} - ${table.classComment} - */ -@RestController -##二级的 businessName 暂时不算在 HTTP 路径上,可以根据需要写 -@RequestMapping("/${table.moduleName}/${simpleClassName_strikeCase}") -@Validated -public class ${sceneEnum.prefixClass}${table.className}Controller { - - @Resource - private ${table.className}Service ${classNameVar}Service; - - /** - * 创建${table.classComment} - */ - @PostMapping("/create") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')") -#end - public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) { - return success(${classNameVar}Service.create${simpleClassName}(createReqVO)); - } - - /** - * 更新${table.classComment} - */ - @PutMapping("/update") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')") -#end - public CommonResult update${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) { - ${classNameVar}Service.update${simpleClassName}(updateReqVO); - return success(true); - } - - /** - * 删除${table.classComment} - */ - @DeleteMapping("/delete") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") -#end - public CommonResult delete${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { - ${classNameVar}Service.delete${simpleClassName}(id); - return success(true); - } - - /** - * 获得${table.classComment} - */ - @GetMapping("/get") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") -#end - public CommonResult<${sceneEnum.prefixClass}${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { - ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id); - return success(BeanUtils.toBean(${classNameVar}, ${sceneEnum.prefixClass}${table.className}RespVO.class)); - } - -#if ( $table.templateType != 2 ) - - /** - * 获得${table.classComment}分页 - */ - @GetMapping("/page") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") -#end - public CommonResult> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { - PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO); - return success(BeanUtils.toBean(pageResult, ${sceneEnum.prefixClass}${table.className}RespVO.class)); - } - -## 特殊:树表专属逻辑(树不需要分页接口) -#else - /** - * 获得${table.classComment}列表 - */ - @GetMapping("/list") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") -#end - public CommonResult> get${simpleClassName}List(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) { - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO); - return success(BeanUtils.toBean(list, ${sceneEnum.prefixClass}${table.className}RespVO.class)); - } - -#end - /** - * 导出${table.classComment} Excel - */ - @GetMapping("/export-excel") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')") -#end - @ApiAccessLog(operateType = EXPORT) -#if ( $table.templateType != 2 ) - public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO, - HttpServletResponse response) throws IOException { - pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO).getList(); - // 导出 Excel - ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${sceneEnum.prefixClass}${table.className}RespVO.class, - BeanUtils.toBean(list, ${sceneEnum.prefixClass}${table.className}RespVO.class)); - } -## 特殊:树表专属逻辑(树不需要分页接口) -#else - public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO, - HttpServletResponse response) throws IOException { - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO); - // 导出 Excel - ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${table.className}RespVO.class, - BeanUtils.toBean(list, ${table.className}RespVO.class)); - } -#end - -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) -#set ($subSimpleClassName = $subSimpleClassNames.get($index)) -#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 -#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 -#set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) -#set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) -#set ($subClassNameVar = $subClassNameVars.get($index)) - // ==================== 子表($subTable.classComment) ==================== - -## 情况一:MASTER_ERP 时,需要分查询页子表 -#if ( $table.templateType == 11 ) - /** - * 获得${subTable.classComment}分页 - */ - @GetMapping("/${subSimpleClassName_strikeCase}/page") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") -#end - public CommonResult> get${subSimpleClassName}Page(PageParam pageReqVO, - @RequestParam("${subJoinColumn.javaField}") ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return success(${classNameVar}Service.get${subSimpleClassName}Page(pageReqVO, ${subJoinColumn.javaField})); - } - -## 情况二:非 MASTER_ERP 时,需要列表查询子表 -#else - #if ( $subTable.subJoinMany ) - /** - * 获得${subTable.classComment}列表 - */ - @GetMapping("/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") -#end - public CommonResult> get${subSimpleClassName}ListBy${SubJoinColumnName}(@RequestParam("${subJoinColumn.javaField}") ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return success(${classNameVar}Service.get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField})); - } - - #else - /** - * 获得${subTable.classComment} - */ - @GetMapping("/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") -#end - public CommonResult<${subTable.className}DO> get${subSimpleClassName}By${SubJoinColumnName}(@RequestParam("${subJoinColumn.javaField}") ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return success(${classNameVar}Service.get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField})); - } - - #end -#end -## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 -#if ( $table.templateType == 11 ) - /** - * 创建${subTable.classComment} - */ - @PostMapping("/${subSimpleClassName_strikeCase}/create") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')") -#end - public CommonResult<${subPrimaryColumn.javaType}> create${subSimpleClassName}(@Valid @RequestBody ${subTable.className}DO ${subClassNameVar}) { - return success(${classNameVar}Service.create${subSimpleClassName}(${subClassNameVar})); - } - - /** - * 更新${subTable.classComment} - */ - @PutMapping("/${subSimpleClassName_strikeCase}/update") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')") -#end - public CommonResult update${subSimpleClassName}(@Valid @RequestBody ${subTable.className}DO ${subClassNameVar}) { - ${classNameVar}Service.update${subSimpleClassName}(${subClassNameVar}); - return success(true); - } - - /** - * 删除${subTable.classComment} - */ - @DeleteMapping("/${subSimpleClassName_strikeCase}/delete") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") -#end - public CommonResult delete${subSimpleClassName}(@RequestParam("id") ${subPrimaryColumn.javaType} id) { - ${classNameVar}Service.delete${subSimpleClassName}(id); - return success(true); - } - - /** - * 获得${subTable.classComment} - */ - @GetMapping("/${subSimpleClassName_strikeCase}/get") -#if ($sceneEnum.scene == 1) - @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") -#end - public CommonResult<${subTable.className}DO> get${subSimpleClassName}(@RequestParam("id") ${subPrimaryColumn.javaType} id) { - return success(${classNameVar}Service.get${subSimpleClassName}(id)); - } - -#end -#end -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/listReqVO.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/listReqVO.vm deleted file mode 100644 index 4797c0b..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/listReqVO.vm +++ /dev/null @@ -1,51 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - -import lombok.*; -import java.util.*; - -import ${PageParamClassName}; -#foreach ($column in $columns) -#if (${column.javaType} == "BigDecimal") -import java.math.BigDecimal; -#break -#end -#end -## 处理 LocalDateTime 字段的引入 -#foreach ($column in $columns) -#if (${column.listOperation} && ${column.javaType} == "LocalDateTime") -import java.time.LocalDateTime; -import org.springframework.format.annotation.DateTimeFormat; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end -## 字段模板 -#macro(columnTpl $prefix $prefixStr) - /** - * ${prefixStr}${column.columnComment}"#if ("$!column.example" != " - */, example = "${column.example}"#end) - private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; -#end - -/** - * ${sceneEnum.name} - ${table.classComment}列表 Request VO - */ -@Data -public class ${sceneEnum.prefixClass}${table.className}ListReqVO { - -#foreach ($column in $columns) -#if (${column.listOperation})##查询操作 -#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 - /** - * ${column.columnComment}"#if ("$!column.example" != " - */, example = "${column.example}"#end) - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private ${column.javaType}[] ${column.javaField}; -#else##情况二,非 Between 的时间 - #columnTpl('', '') -#end - -#end -#end -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/pageReqVO.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/pageReqVO.vm deleted file mode 100644 index f7841c0..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/pageReqVO.vm +++ /dev/null @@ -1,53 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - -import lombok.*; -import java.util.*; - -import ${PageParamClassName}; -#foreach ($column in $columns) -#if (${column.javaType} == "BigDecimal") -import java.math.BigDecimal; -#break -#end -#end -## 处理 LocalDateTime 字段的引入 -#foreach ($column in $columns) -#if (${column.listOperationCondition} && ${column.javaType} == "LocalDateTime") -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; -#break -#end -#end -## 字段模板 -#macro(columnTpl $prefix $prefixStr) - /** - * ${prefixStr}${column.columnComment}"#if ("$!column.example" != " - */, example = "${column.example}"#end) - private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; -#end - -/** - * ${sceneEnum.name} - ${table.classComment}分页 Request VO - */ -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -public class ${sceneEnum.prefixClass}${table.className}PageReqVO extends PageParam { - -#foreach ($column in $columns) -#if (${column.listOperation})##查询操作 -#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 - /** - * ${column.columnComment}"#if ("$!column.example" != " - */, example = "${column.example}"#end) - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private ${column.javaType}[] ${column.javaField}; -#else##情况二,非 Between 的时间 - #columnTpl('', '') -#end - -#end -#end -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/respVO.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/respVO.vm deleted file mode 100644 index e4fcf6f..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/respVO.vm +++ /dev/null @@ -1,57 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - - -import lombok.*; -import java.util.*; -## 处理 BigDecimal 字段的引入 -#foreach ($column in $columns) -#if (${column.javaType} == "BigDecimal") -import java.math.BigDecimal; -#break -#end -#end -## 处理 LocalDateTime 字段的引入 -#foreach ($column in $columns) -#if (${column.listOperationResult} && ${column.javaType} == "LocalDateTime") -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -#break -#end -#end -## 处理 Excel 导出 -import com.alibaba.excel.annotation.*; -#foreach ($column in $columns) -#if ("$!column.dictType" != "")## 有设置数据字典 -import ${DictFormatClassName}; -import ${DictConvertClassName}; -#break -#end -#end - -/** - * ${sceneEnum.name} - ${table.classComment} Response VO - */ -@Data -@ExcelIgnoreUnannotated -public class ${sceneEnum.prefixClass}${table.className}RespVO { - -## 逐个处理字段 -#foreach ($column in $columns) -#if (${column.listOperationResult}) -## 1. 处理 Swagger 注解 - /** - * ${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != " - */, example = "${column.example}"#end) -## 2. 处理 Excel 导出 -#if ("$!column.dictType" != "")##处理枚举值 - @ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class) - @DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 -#else - @ExcelProperty("${column.columnComment}") -#end -## 3. 处理字段定义 - private ${column.javaType} ${column.javaField}; - -#end -#end -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/saveReqVO.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/saveReqVO.vm deleted file mode 100644 index ba32472..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/saveReqVO.vm +++ /dev/null @@ -1,72 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; - - -import lombok.*; -import java.util.*; -import ${jakartaPackage}.validation.constraints.*; -## 处理 BigDecimal 字段的引入 -#foreach ($column in $columns) -#if (${column.javaType} == "BigDecimal") -import java.math.BigDecimal; -#break -#end -#end -## 处理 LocalDateTime 字段的引入 -#foreach ($column in $columns) -#if ((${column.createOperation} || ${column.updateOperation}) && ${column.javaType} == "LocalDateTime") -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -#break -#end -#end -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; -#end - -/** - * ${sceneEnum.name} - ${table.classComment}新增/修改 Request VO - */ -@Data -public class ${sceneEnum.prefixClass}${table.className}SaveReqVO { - -## 逐个处理字段 -#foreach ($column in $columns) -#if (${column.createOperation} || ${column.updateOperation}) -## 1. 处理 Swagger 注解 - /** - * ${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != " - */, example = "${column.example}"#end) -## 2. 处理 Validator 参数校验 -#if (!${column.nullable} && !${column.primaryKey}) -#if (${column.javaType} == 'String') - @NotEmpty(message = "${column.columnComment}不能为空") -#else - @NotNull(message = "${column.columnComment}不能为空") -#end -#end -## 3. 处理字段定义 - private ${column.javaType} ${column.javaField}; - -#end -#end -## 特殊:主子表专属逻辑(非 ERP 模式) -#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) - #if ( $subTable.subJoinMany) - /** - * ${subTable.classComment}列表 - */ - private List<${subTable.className}DO> ${subClassNameVars.get($index)}s; - - #else - /** - * ${subTable.classComment} - */ - private ${subTable.className}DO ${subClassNameVars.get($index)}; - - #end -#end -#end -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do.vm deleted file mode 100644 index b019d6e..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do.vm +++ /dev/null @@ -1,52 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}; - -import lombok.*; -import java.util.*; -#foreach ($column in $columns) -#if (${column.javaType} == "BigDecimal") -import java.math.BigDecimal; -#end -#if (${column.javaType} == "LocalDateTime") -import java.time.LocalDateTime; -#end -#end -import com.baomidou.mybatisplus.annotation.*; -import ${BaseDOClassName}; - -/** - * ${table.classComment} DO - * - * @author ${table.author} - */ -@TableName("${table.tableName.toLowerCase()}") -@KeySequence("${table.tableName.toLowerCase()}_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class ${table.className}DO extends BaseDO { - -## 特殊:树表专属逻辑 -#if ( $table.templateType == 2 ) - public static final Long ${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT = 0L; - -#end -#foreach ($column in $columns) -#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 - /** - * ${column.columnComment} - #if ("$!column.dictType" != "")##处理枚举值 - * - * 枚举 {@link TODO ${column.dictType} 对应的类} - #end - */ - #if (${column.primaryKey})##处理主键 - @TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#end - #end - private ${column.javaType} ${column.javaField}; -#end -#end - -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do_sub.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do_sub.vm deleted file mode 100644 index 16be55e..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do_sub.vm +++ /dev/null @@ -1,49 +0,0 @@ -#set ($subTable = $subTables.get($subIndex))##当前表 -#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 -package ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}; - -import lombok.*; -import java.util.*; -#foreach ($column in $subColumns) -#if (${column.javaType} == "BigDecimal") -import java.math.BigDecimal; -#end -#if (${column.javaType} == "LocalDateTime") -import java.time.LocalDateTime; -#end -#end -import com.baomidou.mybatisplus.annotation.*; -import ${BaseDOClassName}; - -/** - * ${subTable.classComment} DO - * - * @author ${subTable.author} - */ -@TableName("${subTable.tableName.toLowerCase()}") -@KeySequence("${subTable.tableName.toLowerCase()}_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 -@Data -@EqualsAndHashCode(callSuper = true) -@ToString(callSuper = true) -@Builder -@NoArgsConstructor -@AllArgsConstructor -public class ${subTable.className}DO extends BaseDO { - -#foreach ($column in $subColumns) -#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 - /** - * ${column.columnComment} - #if ("$!column.dictType" != "")##处理枚举值 - * - * 枚举 {@link TODO ${column.dictType} 对应的类} - #end - */ - #if (${column.primaryKey})##处理主键 - @TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#end - #end - private ${column.javaType} ${column.javaField}; -#end -#end - -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.vm deleted file mode 100644 index b98b471..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.vm +++ /dev/null @@ -1,82 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}; - -import java.util.*; - -import ${PageResultClassName}; -import ${QueryWrapperClassName}; -import ${BaseMapperClassName}; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import org.apache.ibatis.annotations.Mapper; -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; - -## 字段模板 -#macro(listCondition) -#foreach ($column in $columns) -#if (${column.listOperation}) -#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 -#if (${column.listOperationCondition} == "=")##情况一,= 的时候 - .eqIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "!=")##情况二,!= 的时候 - .neIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == ">")##情况三,> 的时候 - .gtIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == ">=")##情况四,>= 的时候 - .geIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "<")##情况五,< 的时候 - .ltIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "<=")##情况五,<= 的时候 - .leIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "LIKE")##情况七,Like 的时候 - .likeIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#if (${column.listOperationCondition} == "BETWEEN")##情况八,Between 的时候 - .betweenIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) -#end -#end -#end -#end -/** - * ${table.classComment} Mapper - * - * @author ${table.author} - */ -@Mapper -public interface ${table.className}Mapper extends BaseMapperX<${table.className}DO> { - -## 特殊:树表专属逻辑(树不需要分页接口) -#if ( $table.templateType != 2 ) - default PageResult<${table.className}DO> selectPage(${sceneEnum.prefixClass}${table.className}PageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX<${table.className}DO>() - #listCondition() - .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 - - } -#else - default List<${table.className}DO> selectList(${sceneEnum.prefixClass}${table.className}ListReqVO reqVO) { - return selectList(new LambdaQueryWrapperX<${table.className}DO>() - #listCondition() - .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 - - } -#end - -## 特殊:树表专属逻辑 -#if ( $table.templateType == 2 ) -#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 -#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 - default ${table.className}DO selectBy${TreeParentJavaField}And${TreeNameJavaField}(Long ${treeParentColumn.javaField}, String ${treeNameColumn.javaField}) { - return selectOne(${table.className}DO::get${TreeParentJavaField}, ${treeParentColumn.javaField}, ${table.className}DO::get${TreeNameJavaField}, ${treeNameColumn.javaField}); - } - - default Long selectCountBy${TreeParentJavaField}(${treeParentColumn.javaType} ${treeParentColumn.javaField}) { - return selectCount(${table.className}DO::get${TreeParentJavaField}, ${treeParentColumn.javaField}); - } - -#end -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.xml.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.xml.vm deleted file mode 100644 index 290378d..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.xml.vm +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper_sub.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper_sub.vm deleted file mode 100644 index 6ccaea7..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper_sub.vm +++ /dev/null @@ -1,57 +0,0 @@ -#set ($subTable = $subTables.get($subIndex))##当前表 -#set ($subColumns = $subJoinColumnsList.get($subIndex))##当前字段数组 -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 -package ${basePackage}.module.${subTable.moduleName}.dal.mysql.${subTable.businessName}; - -import java.util.*; - -import ${PageResultClassName}; -import ${PageParamClassName}; -import ${QueryWrapperClassName}; -import ${BaseMapperClassName}; -import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; -import org.apache.ibatis.annotations.Mapper; - -/** - * ${subTable.classComment} Mapper - * - * @author ${subTable.author} - */ -@Mapper -public interface ${subTable.className}Mapper extends BaseMapperX<${subTable.className}DO> { - -## 情况一:MASTER_ERP 时,需要分查询页子表 -#if ( $table.templateType == 11 ) - default PageResult<${subTable.className}DO> selectPage(PageParam reqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return selectPage(reqVO, new LambdaQueryWrapperX<${subTable.className}DO>() - .eq(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}) - .orderByDesc(${subTable.className}DO::getId));## 大多数情况下,id 倒序 - - } -## 主表与子表是一对一时 - #if (!$subTable.subJoinMany) - default ${subTable.className}DO selectBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return selectOne(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); - } - #end - -## 情况二:非 MASTER_ERP 时,需要列表查询子表 -#else - #if ( $subTable.subJoinMany) - default List<${subTable.className}DO> selectListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return selectList(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); - } - - #else - default ${subTable.className}DO selectBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return selectOne(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); - } - - #end - #end - default int deleteBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return delete(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); - } - -} diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/enums/errorcode.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/enums/errorcode.vm deleted file mode 100644 index b7e21e6..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/enums/errorcode.vm +++ /dev/null @@ -1,22 +0,0 @@ -// TODO 待办:请将下面的错误码复制到 yudao-module-${table.moduleName}-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! -// ========== ${table.classComment} TODO 补充编号 ========== -ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在"); -## 特殊:树表专属逻辑 -#if ( $table.templateType == 2 ) -ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN = new ErrorCode(TODO 补充编号, "存在存在子${table.classComment},无法删除"); -ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS = new ErrorCode(TODO 补充编号,"父级${table.classComment}不存在"); -ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR = new ErrorCode(TODO 补充编号, "不能设置自己为父${table.classComment}"); -ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE = new ErrorCode(TODO 补充编号, "已经存在该${treeNameColumn.columnComment}的${table.classComment}"); -ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_IS_CHILD = new ErrorCode(TODO 补充编号, "不能设置自己的子${table.className}为父${table.className}"); -#end -## 特殊:主子表专属逻辑 -#if ( $table.templateType == 11 )## 特殊:ERP 情况 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) -#set ($simpleClassNameUnderlineCase = $simpleClassNameUnderlineCases.get($index)) -ErrorCode ${simpleClassNameUnderlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${subTable.classComment}不存在"); -#if ( !$subTable.subJoinMany ) -ErrorCode ${simpleClassNameUnderlineCase.toUpperCase()}_EXISTS = new ErrorCode(TODO 补充编号, "${subTable.classComment}已存在"); -#end -#end -#end \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/service.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/service.vm deleted file mode 100644 index c4ee4f0..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/service.vm +++ /dev/null @@ -1,147 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; - -import java.util.*; -import ${jakartaPackage}.validation.*; -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; -#end -import ${PageResultClassName}; -import ${PageParamClassName}; - -/** - * ${table.classComment} Service 接口 - * - * @author ${table.author} - */ -public interface ${table.className}Service { - - /** - * 创建${table.classComment} - * - * @param createReqVO 创建信息 - * @return 编号 - */ - ${primaryColumn.javaType} create${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO); - - /** - * 更新${table.classComment} - * - * @param updateReqVO 更新信息 - */ - void update${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO); - - /** - * 删除${table.classComment} - * - * @param id 编号 - */ - void delete${simpleClassName}(${primaryColumn.javaType} id); - - /** - * 获得${table.classComment} - * - * @param id 编号 - * @return ${table.classComment} - */ - ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id); - -## 特殊:树表专属逻辑(树不需要分页接口) -#if ( $table.templateType != 2 ) - /** - * 获得${table.classComment}分页 - * - * @param pageReqVO 分页查询 - * @return ${table.classComment}分页 - */ - PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO); -#else - /** - * 获得${table.classComment}列表 - * - * @param listReqVO 查询条件 - * @return ${table.classComment}列表 - */ - List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO); -#end - -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) -#set ($subSimpleClassName = $subSimpleClassNames.get($index)) -#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 -#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 -#set ($subClassNameVar = $subClassNameVars.get($index)) - // ==================== 子表($subTable.classComment) ==================== - -## 情况一:MASTER_ERP 时,需要分查询页子表 -#if ( $table.templateType == 11 ) - /** - * 获得${subTable.classComment}分页 - * - * @param pageReqVO 分页查询 - * @param ${subJoinColumn.javaField} ${subJoinColumn.columnComment} - * @return ${subTable.classComment}分页 - */ - PageResult<${subTable.className}DO> get${subSimpleClassName}Page(PageParam pageReqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}); - -## 情况二:非 MASTER_ERP 时,需要列表查询子表 -#else - #if ( $subTable.subJoinMany ) - /** - * 获得${subTable.classComment}列表 - * - * @param ${subJoinColumn.javaField} ${subJoinColumn.columnComment} - * @return ${subTable.classComment}列表 - */ - List<${subTable.className}DO> get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}); - - #else - /** - * 获得${subTable.classComment} - * - * @param ${subJoinColumn.javaField} ${subJoinColumn.columnComment} - * @return ${subTable.classComment} - */ - ${subTable.className}DO get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}); - - #end -#end -## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 -#if ( $table.templateType == 11 ) - /** - * 创建${subTable.classComment} - * - * @param ${subClassNameVar} 创建信息 - * @return 编号 - */ - ${subPrimaryColumn.javaType} create${subSimpleClassName}(@Valid ${subTable.className}DO ${subClassNameVar}); - - /** - * 更新${subTable.classComment} - * - * @param ${subClassNameVar} 更新信息 - */ - void update${subSimpleClassName}(@Valid ${subTable.className}DO ${subClassNameVar}); - - /** - * 删除${subTable.classComment} - * - * @param id 编号 - */ - void delete${subSimpleClassName}(${subPrimaryColumn.javaType} id); - - /** - * 获得${subTable.classComment} - * - * @param id 编号 - * @return ${subTable.classComment} - */ - ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id); - -#end -#end -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm deleted file mode 100644 index 80bc71b..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm +++ /dev/null @@ -1,351 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; - -import org.springframework.stereotype.Service; -import ${jakartaPackage}.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; -#end -import ${PageResultClassName}; -import ${PageParamClassName}; -import ${BeanUtils}; - -import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) -import ${basePackage}.module.${subTable.moduleName}.dal.mysql.${subTable.businessName}.${subTable.className}Mapper; -#end - -import static ${ServiceExceptionUtilClassName}.exception; -import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; - -/** - * ${table.classComment} Service 实现类 - * - * @author ${table.author} - */ -@Service -@Validated -public class ${table.className}ServiceImpl implements ${table.className}Service { - - @Resource - private ${table.className}Mapper ${classNameVar}Mapper; -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) - @Resource - private ${subTable.className}Mapper ${subClassNameVars.get($index)}Mapper; -#end - - @Override -## 特殊:主子表专属逻辑(非 ERP 模式) -#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) - @Transactional(rollbackFor = Exception.class) -#end - public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) { -## 特殊:树表专属逻辑 -#if ( $table.templateType == 2 ) -#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 -#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 - // 校验${treeParentColumn.columnComment}的有效性 - validateParent${simpleClassName}(null, createReqVO.get${TreeParentJavaField}()); - // 校验${treeNameColumn.columnComment}的唯一性 - validate${simpleClassName}${TreeNameJavaField}Unique(null, createReqVO.get${TreeParentJavaField}(), createReqVO.get${TreeNameJavaField}()); - -#end - // 插入 - ${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class); - ${classNameVar}Mapper.insert(${classNameVar}); -## 特殊:主子表专属逻辑(非 ERP 模式) -#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) - - // 插入子表 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) -#set ($subSimpleClassName = $subSimpleClassNames.get($index)) -#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 - #if ( $subTable.subJoinMany) - create${subSimpleClassName}List(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}s()); - #else - create${subSimpleClassName}(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}()); - #end -#end -#end - // 返回 - return ${classNameVar}.getId(); - } - - @Override -## 特殊:主子表专属逻辑(非 ERP 模式) -#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) - @Transactional(rollbackFor = Exception.class) -#end - public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) { - // 校验存在 - validate${simpleClassName}Exists(updateReqVO.getId()); -## 特殊:树表专属逻辑 -#if ( $table.templateType == 2 ) -#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 -#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 - // 校验${treeParentColumn.columnComment}的有效性 - validateParent${simpleClassName}(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}()); - // 校验${treeNameColumn.columnComment}的唯一性 - validate${simpleClassName}${TreeNameJavaField}Unique(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}(), updateReqVO.get${TreeNameJavaField}()); - -#end - // 更新 - ${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class); - ${classNameVar}Mapper.updateById(updateObj); -## 特殊:主子表专属逻辑(非 ERP 模式) -#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11) - - // 更新子表 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) -#set ($subSimpleClassName = $subSimpleClassNames.get($index)) -#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 - #if ( $subTable.subJoinMany) - update${subSimpleClassName}List(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}s()); - #else - update${subSimpleClassName}(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}()); - #end -#end -#end - } - - @Override -## 特殊:主子表专属逻辑 -#if ( $subTables && $subTables.size() > 0) - @Transactional(rollbackFor = Exception.class) -#end - public void delete${simpleClassName}(${primaryColumn.javaType} id) { - // 校验存在 - validate${simpleClassName}Exists(id); -## 特殊:树表专属逻辑 -#if ( $table.templateType == 2 ) -#set ($ParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 - // 校验是否有子${table.classComment} - if (${classNameVar}Mapper.selectCountBy${ParentJavaField}(id) > 0) { - throw exception(${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN); - } -#end - // 删除 - ${classNameVar}Mapper.deleteById(id); -## 特殊:主子表专属逻辑 -#if ( $subTables && $subTables.size() > 0) - - // 删除子表 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) -#set ($subSimpleClassName = $subSimpleClassNames.get($index)) -#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 - delete${subSimpleClassName}By${SubJoinColumnName}(id); -#end -#end - } - - private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) { - if (${classNameVar}Mapper.selectById(id) == null) { - throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); - } - } - -## 特殊:树表专属逻辑 -#if ( $table.templateType == 2 ) -#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 -#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 - private void validateParent${simpleClassName}(Long id, Long ${treeParentColumn.javaField}) { - if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) { - return; - } - // 1. 不能设置自己为父${table.classComment} - if (Objects.equals(id, ${treeParentColumn.javaField})) { - throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR); - } - // 2. 父${table.classComment}不存在 - ${simpleClassName}DO parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField}); - if (parent${simpleClassName} == null) { - throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS); - } - // 3. 递归校验父${table.classComment},如果父${table.classComment}是自己的子${table.classComment},则报错,避免形成环路 - if (id == null) { // id 为空,说明新增,不需要考虑环路 - return; - } - for (int i = 0; i < Short.MAX_VALUE; i++) { - // 3.1 校验环路 - ${treeParentColumn.javaField} = parent${simpleClassName}.get${TreeParentJavaField}(); - if (Objects.equals(id, ${treeParentColumn.javaField})) { - throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_IS_CHILD); - } - // 3.2 继续递归下一级父${table.classComment} - if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) { - break; - } - parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField}); - if (parent${simpleClassName} == null) { - break; - } - } - } - - private void validate${simpleClassName}${TreeNameJavaField}Unique(Long id, Long ${treeParentColumn.javaField}, String ${treeNameColumn.javaField}) { - ${simpleClassName}DO ${classNameVar} = ${classNameVar}Mapper.selectBy${TreeParentJavaField}And${TreeNameJavaField}(${treeParentColumn.javaField}, ${treeNameColumn.javaField}); - if (${classNameVar} == null) { - return; - } - // 如果 id 为空,说明不用比较是否为相同 id 的${table.classComment} - if (id == null) { - throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE); - } - if (!Objects.equals(${classNameVar}.getId(), id)) { - throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE); - } - } - -#end - @Override - public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) { - return ${classNameVar}Mapper.selectById(id); - } - -## 特殊:树表专属逻辑(树不需要分页接口) -#if ( $table.templateType != 2 ) - @Override - public PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { - return ${classNameVar}Mapper.selectPage(pageReqVO); - } -#else - @Override - public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) { - return ${classNameVar}Mapper.selectList(listReqVO); - } -#end - -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) -#set ($subSimpleClassName = $subSimpleClassNames.get($index)) -#set ($simpleClassNameUnderlineCase = $simpleClassNameUnderlineCases.get($index)) -#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 -#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 -#set ($subClassNameVar = $subClassNameVars.get($index)) - // ==================== 子表($subTable.classComment) ==================== - -## 情况一:MASTER_ERP 时,需要分查询页子表 -#if ( $table.templateType == 11 ) - @Override - public PageResult<${subTable.className}DO> get${subSimpleClassName}Page(PageParam pageReqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return ${subClassNameVars.get($index)}Mapper.selectPage(pageReqVO, ${subJoinColumn.javaField}); - } - -## 情况二:非 MASTER_ERP 时,需要列表查询子表 -#else - #if ( $subTable.subJoinMany ) - @Override - public List<${subTable.className}DO> get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return ${subClassNameVars.get($index)}Mapper.selectListBy${SubJoinColumnName}(${subJoinColumn.javaField}); - } - - #else - @Override - public ${subTable.className}DO get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { - return ${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subJoinColumn.javaField}); - } - - #end -#end -## 情况一:MASTER_ERP 时,支持单个的新增、修改、删除操作 -#if ( $table.templateType == 11 ) - @Override - public ${subPrimaryColumn.javaType} create${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) { -## 特殊:一对一时,需要保证只有一条,不能重复插入 -#if ( !$subTable.subJoinMany) - // 校验是否已经存在 - if (${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subClassNameVar}.get${SubJoinColumnName}()) != null) { - throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_EXISTS); - } - // 插入 -#end - ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar}); - return ${subClassNameVar}.getId(); - } - - @Override - public void update${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) { - // 校验存在 - validate${subSimpleClassName}Exists(${subClassNameVar}.getId()); - // 更新 - ${subClassNameVar}.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 不更新 - ${subClassNameVars.get($index)}Mapper.updateById(${subClassNameVar}); - } - - @Override - public void delete${subSimpleClassName}(${subPrimaryColumn.javaType} id) { - // 校验存在 - validate${subSimpleClassName}Exists(id); - // 删除 - ${subClassNameVars.get($index)}Mapper.deleteById(id); - } - - @Override - public ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id) { - return ${subClassNameVars.get($index)}Mapper.selectById(id); - } - - private void validate${subSimpleClassName}Exists(${subPrimaryColumn.javaType} id) { - if (${subClassNameVar}Mapper.selectById(id) == null) { - throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_NOT_EXISTS); - } - } - -## 情况二:非 MASTER_ERP 时,支持批量的新增、修改操作 -#else - #if ( $subTable.subJoinMany) - private void create${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) { - list.forEach(o -> o.set$SubJoinColumnName(${subJoinColumn.javaField})); - ${subClassNameVars.get($index)}Mapper.insertBatch(list); - } - - private void update${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) { - delete${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}); - list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 - create${subSimpleClassName}List(${subJoinColumn.javaField}, list); - } - - #else - private void create${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) { - if (${subClassNameVar} == null) { - return; - } - ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField}); - ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar}); - } - - private void update${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) { - if (${subClassNameVar} == null) { - return; - } - ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField}); - ${subClassNameVar}.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 不更新 - ${subClassNameVars.get($index)}Mapper.insertOrUpdate(${subClassNameVar}); - } - - #end -#end - private void delete${subSimpleClassName}By${SubJoinColumnName}(${primaryColumn.javaType} ${subJoinColumn.javaField}) { - ${subClassNameVars.get($index)}Mapper.deleteBy${SubJoinColumnName}(${subJoinColumn.javaField}); - } - -#end -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/test/serviceTest.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/test/serviceTest.vm deleted file mode 100644 index bfd4600..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/test/serviceTest.vm +++ /dev/null @@ -1,168 +0,0 @@ -package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import ${jakartaPackage}.annotation.Resource; - -import ${baseFrameworkPackage}.test.core.ut.BaseDbUnitTest; - -import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; -import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; -import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; -import ${PageResultClassName}; - -import ${jakartaPackage}.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; -import static ${baseFrameworkPackage}.test.core.util.AssertUtils.*; -import static ${baseFrameworkPackage}.test.core.util.RandomUtils.*; -import static ${LocalDateTimeUtilsClassName}.*; -import static ${ObjectUtilsClassName}.*; -import static ${DateUtilsClassName}.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - -## 字段模板 -#macro(getPageCondition $VO) - // mock 数据 - ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class, o -> { // 等会查询到 - #foreach ($column in $columns) - #if (${column.listOperation}) - #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 - o.set$JavaField(null); - #end - #end - }); - ${classNameVar}Mapper.insert(db${simpleClassName}); - #foreach ($column in $columns) - #if (${column.listOperation}) - #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 - // 测试 ${column.javaField} 不匹配 - ${classNameVar}Mapper.insert(cloneIgnoreId(db${simpleClassName}, o -> o.set$JavaField(null))); - #end - #end - // 准备参数 - ${sceneEnum.prefixClass}${table.className}${VO} reqVO = new ${sceneEnum.prefixClass}${table.className}${VO}(); - #foreach ($column in $columns) - #if (${column.listOperation}) - #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 - #if (${column.listOperationCondition} == "BETWEEN")## BETWEEN 的情况 - reqVO.set${JavaField}(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); - #else - reqVO.set$JavaField(null); - #end - #end - #end -#end -/** - * {@link ${table.className}ServiceImpl} 的单元测试类 - * - * @author ${table.author} - */ -@Import(${table.className}ServiceImpl.class) -public class ${table.className}ServiceImplTest extends BaseDbUnitTest { - - @Resource - private ${table.className}ServiceImpl ${classNameVar}Service; - - @Resource - private ${table.className}Mapper ${classNameVar}Mapper; - - @Test - public void testCreate${simpleClassName}_success() { - // 准备参数 - ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class).setId(null); - - // 调用 - ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(createReqVO); - // 断言 - assertNotNull(${classNameVar}Id); - // 校验记录的属性是否正确 - ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id); - assertPojoEquals(createReqVO, ${classNameVar}, "id"); - } - - @Test - public void testUpdate${simpleClassName}_success() { - // mock 数据 - ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); - ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 - // 准备参数 - ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class, o -> { - o.setId(db${simpleClassName}.getId()); // 设置更新的 ID - }); - - // 调用 - ${classNameVar}Service.update${simpleClassName}(updateReqVO); - // 校验是否更新正确 - ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(updateReqVO.getId()); // 获取最新的 - assertPojoEquals(updateReqVO, ${classNameVar}); - } - - @Test - public void testUpdate${simpleClassName}_notExists() { - // 准备参数 - ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class); - - // 调用, 并断言异常 - assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(updateReqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); - } - - @Test - public void testDelete${simpleClassName}_success() { - // mock 数据 - ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); - ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 - // 准备参数 - ${primaryColumn.javaType} id = db${simpleClassName}.getId(); - - // 调用 - ${classNameVar}Service.delete${simpleClassName}(id); - // 校验数据不存在了 - assertNull(${classNameVar}Mapper.selectById(id)); - } - - @Test - public void testDelete${simpleClassName}_notExists() { - // 准备参数 - ${primaryColumn.javaType} id = random${primaryColumn.javaType}Id(); - - // 调用, 并断言异常 - assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); - } - -## 特殊:树表专属逻辑(树不需要分页接口) -#if ( $table.templateType != 2 ) - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGet${simpleClassName}Page() { - #getPageCondition("PageReqVO") - - // 调用 - PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO); - // 断言 - assertEquals(1, pageResult.getTotal()); - assertEquals(1, pageResult.getList().size()); - assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0)); - } -#else - @Test - @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 - public void testGet${simpleClassName}List() { - #getPageCondition("ListReqVO") - - // 调用 - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO); - // 断言 - assertEquals(1, list.size()); - assertPojoEquals(db${simpleClassName}, list.get(0)); - } -#end - -} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/h2.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/h2.vm deleted file mode 100644 index a073fdb..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/h2.vm +++ /dev/null @@ -1,37 +0,0 @@ --- 将该建表 SQL 语句,添加到 yudao-module-${table.moduleName}-biz 模块的 test/resources/sql/create_tables.sql 文件里 -CREATE TABLE IF NOT EXISTS "${table.tableName.toLowerCase()}" ( -#foreach ($column in $columns) -#if (${column.javaType} == 'Long') - #set ($dataType='bigint') -#elseif (${column.javaType} == 'Integer') - #set ($dataType='int') -#elseif (${column.javaType} == 'Boolean') - #set ($dataType='bit') -#elseif (${column.javaType} == 'Date') - #set ($dataType='datetime') -#else - #set ($dataType='varchar') -#end - #if (${column.primaryKey})##处理主键 - "${column.javaField}"#if (${column.javaType} == 'String') ${dataType} NOT NULL#else ${dataType} NOT NULL GENERATED BY DEFAULT AS IDENTITY#end, - #else - #if (${column.columnName} == 'create_time') - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, - #elseif (${column.columnName} == 'update_time') - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater') - "${column.columnName}" ${dataType} DEFAULT '', - #elseif (${column.columnName} == 'deleted') - "deleted" bit NOT NULL DEFAULT FALSE, - #elseif (${column.columnName} == 'tenant_id') - "tenant_id" bigint NOT NULL DEFAULT 0, - #else - "${column.columnName.toLowerCase()}" ${dataType}#if (${column.nullable} == false) NOT NULL#end, - #end - #end -#end - PRIMARY KEY ("${primaryColumn.columnName.toLowerCase()}") -) COMMENT '${table.tableComment}'; - --- 将该删表 SQL 语句,添加到 yudao-module-${table.moduleName}-biz 模块的 test/resources/sql/clean.sql 文件里 -DELETE FROM "${table.tableName}"; \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/sql.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/sql.vm deleted file mode 100644 index 41b107d..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/sql.vm +++ /dev/null @@ -1,28 +0,0 @@ --- 菜单 SQL -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status, component_name -) -VALUES ( - '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, - '${simpleClassName_strikeCase}', '', '${table.moduleName}/${table.businessName}/index', 0, '${table.className}' -); - --- 按钮父菜单ID --- 暂时只支持 MySQL。如果你是 Oracle、PostgreSQL、SQLServer 的话,需要手动修改 @parentId 的部分的代码 -SELECT @parentId := LAST_INSERT_ID(); - --- 按钮 SQL -#set ($functionNames = ['查询', '创建', '更新', '删除', '导出']) -#set ($functionOps = ['query', 'create', 'update', 'delete', 'export']) -#foreach ($functionName in $functionNames) -#set ($index = $foreach.count - 1) -INSERT INTO system_menu( - name, permission, type, sort, parent_id, - path, icon, component, status -) -VALUES ( - '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, - '', '', '', 0 -); -#end \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/api/api.js.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/api/api.js.vm deleted file mode 100644 index 835c019..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/api/api.js.vm +++ /dev/null @@ -1,141 +0,0 @@ -import request from '@/utils/request' -#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") - -// 创建${table.classComment} -export function create${simpleClassName}(data) { - return request({ - url: '${baseURL}/create', - method: 'post', - data: data - }) -} - -// 更新${table.classComment} -export function update${simpleClassName}(data) { - return request({ - url: '${baseURL}/update', - method: 'put', - data: data - }) -} - -// 删除${table.classComment} -export function delete${simpleClassName}(id) { - return request({ - url: '${baseURL}/delete?id=' + id, - method: 'delete' - }) -} - -// 获得${table.classComment} -export function get${simpleClassName}(id) { - return request({ - url: '${baseURL}/get?id=' + id, - method: 'get' - }) -} - -#if ( $table.templateType != 2 ) -// 获得${table.classComment}分页 -export function get${simpleClassName}Page(params) { - return request({ - url: '${baseURL}/page', - method: 'get', - params - }) -} -#else -// 获得${table.classComment}列表 -export function get${simpleClassName}List(params) { - return request({ - url: '${baseURL}/list', - method: 'get', - params - }) -} -#end -// 导出${table.classComment} Excel -export function export${simpleClassName}Excel(params) { - return request({ - url: '${baseURL}/export-excel', - method: 'get', - params, - responseType: 'blob' - }) -} -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) - #set ($index = $foreach.count - 1) - #set ($subSimpleClassName = $subSimpleClassNames.get($index)) - #set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 - #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 - #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 - #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) - #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) - #set ($subClassNameVar = $subClassNameVars.get($index)) - -// ==================== 子表($subTable.classComment) ==================== - ## 情况一:MASTER_ERP 时,需要分查询页子表 - #if ($table.templateType == 11) - // 获得${subTable.classComment}分页 - export function get${subSimpleClassName}Page(params) { - return request({ - url: '${baseURL}/${subSimpleClassName_strikeCase}/page', - method: 'get', - params - }) - } - ## 情况二:非 MASTER_ERP 时,需要列表查询子表 - #else - #if ($subTable.subJoinMany) - // 获得${subTable.classComment}列表 - export function get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField}) { - return request({ - url: '${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=' + ${subJoinColumn.javaField}, - method: 'get' - }) - } - #else - // 获得${subTable.classComment} - export function get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}) { - return request({ - url: '${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=' + ${subJoinColumn.javaField}, - method: 'get' - }) - } - #end - #end - ## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 - #if ($table.templateType == 11) - // 新增${subTable.classComment} - export function create${subSimpleClassName}(data) { - return request({ - url: '${baseURL}/${subSimpleClassName_strikeCase}/create', - method: 'post', - data - }) - } - // 修改${subTable.classComment} - export function update${subSimpleClassName}(data) { - return request({ - url: '${baseURL}/${subSimpleClassName_strikeCase}/update', - method: 'post', - data - }) - } - // 删除${subTable.classComment} - export function delete${subSimpleClassName}(id) { - return request({ - url: '${baseURL}/${subSimpleClassName_strikeCase}/delete?id=' + id, - method: 'delete' - }) - } - // 获得${subTable.classComment} - export function get${subSimpleClassName}(id) { - return request({ - url: '${baseURL}/${subSimpleClassName_strikeCase}/get?id=' + id, - method: 'get' - }) - } - #end -#end \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm deleted file mode 100644 index 99aa91a..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm +++ /dev/null @@ -1,205 +0,0 @@ -#set ($subTable = $subTables.get($subIndex))##当前表 -#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 -#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 - - - diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm deleted file mode 100644 index ca266be..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm +++ /dev/null @@ -1,2 +0,0 @@ -## 主表的 normal 和 inner 使用相同的 form 表单 -#parse("codegen/vue/views/components/form_sub_normal.vue.vm") \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm deleted file mode 100644 index 48a404a..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm +++ /dev/null @@ -1,347 +0,0 @@ -#set ($subTable = $subTables.get($subIndex))##当前表 -#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 -#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 - - - diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm deleted file mode 100644 index 589736b..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm +++ /dev/null @@ -1,165 +0,0 @@ -#set ($subTable = $subTables.get($subIndex))##当前表 -#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 -#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 - - - diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm deleted file mode 100644 index 90b8e41..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm +++ /dev/null @@ -1,4 +0,0 @@ -## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: -## 1)inner 使用 list 不分页,erp 使用 page 分页 -## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 -#parse("codegen/vue/views/components/list_sub_erp.vue.vm") \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/form.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/form.vue.vm deleted file mode 100644 index 634d05d..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/form.vue.vm +++ /dev/null @@ -1,320 +0,0 @@ - - - diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/index.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/index.vue.vm deleted file mode 100644 index 9c1e124..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/index.vue.vm +++ /dev/null @@ -1,340 +0,0 @@ - - - diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/api/api.ts.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/api/api.ts.vm deleted file mode 100644 index c3044fb..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/api/api.ts.vm +++ /dev/null @@ -1,115 +0,0 @@ -import request from '@/config/axios' -#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") - -// ${table.classComment} VO -export interface ${simpleClassName}VO { -#foreach ($column in $columns) -#if ($column.createOperation || $column.updateOperation) -#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") - ${column.javaField}: number // ${column.columnComment} -#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdate" || ${column.javaType.toLowerCase()} == "localdatetime") - ${column.javaField}: Date // ${column.columnComment} -#else - ${column.javaField}: ${column.javaType.toLowerCase()} // ${column.columnComment} -#end -#end -#end -} - -// ${table.classComment} API -export const ${simpleClassName}Api = { -#if ( $table.templateType != 2 ) - // 查询${table.classComment}分页 - get${simpleClassName}Page: async (params: any) => { - return await request.get({ url: `${baseURL}/page`, params }) - }, -#else - // 查询${table.classComment}列表 - get${simpleClassName}List: async (params) => { - return await request.get({ url: `${baseURL}/list`, params }) - }, -#end - - // 查询${table.classComment}详情 - get${simpleClassName}: async (id: number) => { - return await request.get({ url: `${baseURL}/get?id=` + id }) - }, - - // 新增${table.classComment} - create${simpleClassName}: async (data: ${simpleClassName}VO) => { - return await request.post({ url: `${baseURL}/create`, data }) - }, - - // 修改${table.classComment} - update${simpleClassName}: async (data: ${simpleClassName}VO) => { - return await request.put({ url: `${baseURL}/update`, data }) - }, - - // 删除${table.classComment} - delete${simpleClassName}: async (id: number) => { - return await request.delete({ url: `${baseURL}/delete?id=` + id }) - }, - - // 导出${table.classComment} Excel - export${simpleClassName}: async (params) => { - return await request.download({ url: `${baseURL}/export-excel`, params }) - }, -## 特殊:主子表专属逻辑 -#foreach ($subTable in $subTables) -#set ($index = $foreach.count - 1) -#set ($subSimpleClassName = $subSimpleClassNames.get($index)) -#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 -#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 -#set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) -#set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) -#set ($subClassNameVar = $subClassNameVars.get($index)) - -// ==================== 子表($subTable.classComment) ==================== -## 情况一:MASTER_ERP 时,需要分查询页子表 -#if ( $table.templateType == 11 ) - - // 获得${subTable.classComment}分页 - get${subSimpleClassName}Page: async (params) => { - return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/page`, params }) - }, -## 情况二:非 MASTER_ERP 时,需要列表查询子表 -#else - #if ( $subTable.subJoinMany ) - - // 获得${subTable.classComment}列表 - get${subSimpleClassName}ListBy${SubJoinColumnName}: async (${subJoinColumn.javaField}) => { - return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=` + ${subJoinColumn.javaField} }) - }, - #else - - // 获得${subTable.classComment} - get${subSimpleClassName}By${SubJoinColumnName}: async (${subJoinColumn.javaField}) => { - return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=` + ${subJoinColumn.javaField} }) - }, - #end -#end -## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 -#if ( $table.templateType == 11 ) - // 新增${subTable.classComment} - create${subSimpleClassName}: async (data) => { - return await request.post({ url: `${baseURL}/${subSimpleClassName_strikeCase}/create`, data }) - }, - - // 修改${subTable.classComment} - update${subSimpleClassName}: async (data) => { - return await request.put({ url: `${baseURL}/${subSimpleClassName_strikeCase}/update`, data }) - }, - - // 删除${subTable.classComment} - delete${subSimpleClassName}: async (id: number) => { - return await request.delete({ url: `${baseURL}/${subSimpleClassName_strikeCase}/delete?id=` + id }) - }, - - // 获得${subTable.classComment} - get${subSimpleClassName}: async (id: number) => { - return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/get?id=` + id }) - }, -#end -#end -} diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm deleted file mode 100644 index 81cd977..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm +++ /dev/null @@ -1,204 +0,0 @@ -#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 -#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 - - \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm deleted file mode 100644 index d8542c3..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm +++ /dev/null @@ -1,2 +0,0 @@ -## 主表的 normal 和 inner 使用相同的 form 表单 -#parse("codegen/vue3/views/components/form_sub_normal.vue.vm") \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm deleted file mode 100644 index 3fa1eff..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm +++ /dev/null @@ -1,360 +0,0 @@ -#set ($subTable = $subTables.get($subIndex))##当前表 -#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 -#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 - - \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm deleted file mode 100644 index 3f0710e..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm +++ /dev/null @@ -1,184 +0,0 @@ -#set ($subTable = $subTables.get($subIndex))##当前表 -#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 -#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) -#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 -#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 - - \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm deleted file mode 100644 index 3fe6488..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm +++ /dev/null @@ -1,4 +0,0 @@ -## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: -## 1)inner 使用 list 不分页,erp 使用 page 分页 -## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 -#parse("codegen/vue3/views/components/list_sub_erp.vue.vm") \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/form.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/form.vue.vm deleted file mode 100644 index e37474b..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/form.vue.vm +++ /dev/null @@ -1,300 +0,0 @@ - - \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/index.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/index.vue.vm deleted file mode 100644 index 399b58e..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/index.vue.vm +++ /dev/null @@ -1,374 +0,0 @@ - - - \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/api/api.ts.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/api/api.ts.vm deleted file mode 100644 index b7f2651..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/api/api.ts.vm +++ /dev/null @@ -1,32 +0,0 @@ -import { defHttp } from '@/utils/http/axios' -#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") - -// 查询${table.classComment}列表 -export function get${simpleClassName}Page(params) { - return defHttp.get({ url: '${baseURL}/page', params }) -} - -// 查询${table.classComment}详情 -export function get${simpleClassName}(id: number) { - return defHttp.get({ url: `${baseURL}/get?id=${id}` }) -} - -// 新增${table.classComment} -export function create${simpleClassName}(data) { - return defHttp.post({ url: '${baseURL}/create', data }) -} - -// 修改${table.classComment} -export function update${simpleClassName}(data) { - return defHttp.put({ url: '${baseURL}/update', data }) -} - -// 删除${table.classComment} -export function delete${simpleClassName}(id: number) { - return defHttp.delete({ url: `${baseURL}/delete?id=${id}` }) -} - -// 导出${table.classComment} Excel -export function export${simpleClassName}(params) { - return defHttp.download({ url: '${baseURL}/export-excel', params }, '${table.classComment}.xls') -} diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/data.ts.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/data.ts.vm deleted file mode 100644 index 56f4e82..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/data.ts.vm +++ /dev/null @@ -1,260 +0,0 @@ -import type {BasicColumn, FormSchema} from '@/components/Table' -import {useRender} from '@/components/Table' -import {DICT_TYPE, getDictOptions} from '@/utils/dict' - -export const columns: BasicColumn[] = [ -#foreach($column in $columns) -#if ($column.listOperationResult) - #set ($dictType=$column.dictType) - #set ($javaField = $column.javaField) - #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) - #set ($comment=$column.columnComment) -#if ($column.javaType == "LocalDateTime")## 时间类型 - { - title: '${comment}', - dataIndex: '${javaField}', - width: 180, - customRender: ({ text }) => { - return useRender.renderDate(text) - }, - }, -#elseif("" != $column.dictType)## 数据字典 - { - title: '${comment}', - dataIndex: '${javaField}', - width: 180, - customRender: ({ text }) => { - return useRender.renderDict(text, DICT_TYPE.$dictType.toUpperCase()) - }, - }, -#else - { - title: '${comment}', - dataIndex: '${javaField}', - width: 160, - }, -#end -#end -#end -] - -export const searchFormSchema: FormSchema[] = [ -#foreach($column in $columns) -#if ($column.listOperation) - #set ($dictType=$column.dictType) - #set ($javaType = $column.javaType) - #set ($javaField = $column.javaField) - #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) - #set ($comment=$column.columnComment) - #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") - #set ($dictMethod = "number") - #elseif ($javaType == "String") - #set ($dictMethod = "string") - #elseif ($javaType == "Boolean") - #set ($dictMethod = "boolean") - #end - { - label: '${comment}', - field: '${javaField}', - #if ($column.htmlType == "input") - component: 'Input', - #elseif ($column.htmlType == "select") - component: 'Select', - componentProps: { - #if ("" != $dictType)## 设置了 dictType 数据字典的情况 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else## 未设置 dictType 数据字典的情况 - options: [], - #end - }, - #elseif ($column.htmlType == "radio") - component: 'RadioButtonGroup', - componentProps: { - #if ("" != $dictType)## 设置了 dictType 数据字典的情况 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else## 未设置 dictType 数据字典的情况 - options: [], - #end - }, - #elseif($column.htmlType == "datetime") - component: 'RangePicker', - #end - colProps: { span: 8 }, - }, -#end -#end -] - -export const createFormSchema: FormSchema[] = [ - { - label: '编号', - field: 'id', - show: false, - component: 'Input', - }, -#foreach($column in $columns) -#if ($column.createOperation) - #set ($dictType = $column.dictType) - #set ($javaType = $column.javaType) - #set ($javaField = $column.javaField) - #set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) - #set ($comment = $column.columnComment) - #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") - #set ($dictMethod = "number") - #elseif ($javaType == "String") - #set ($dictMethod = "string") - #elseif ($javaType == "Boolean") - #set ($dictMethod = "boolean") - #end -#if (!$column.primaryKey)## 忽略主键,不用在表单里 - { - label: '${comment}', - field: '${javaField}', - #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 - required: true, - #end - #if ($column.htmlType == "input") - component: 'Input', - #elseif($column.htmlType == "imageUpload")## 图片上传 - component: 'FileUpload', - componentProps: { - fileType: 'image', - maxCount: 1, - }, - #elseif($column.htmlType == "fileUpload")## 文件上传 - component: 'FileUpload', - componentProps: { - fileType: 'file', - maxCount: 1, - }, - #elseif($column.htmlType == "editor")## 文本编辑器 - component: 'Editor', - #elseif($column.htmlType == "select")## 下拉框 - component: 'Select', - componentProps: { - #if ("" != $dictType)## 有数据字典 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else##没数据字典 - options:[], - #end - }, - #elseif($column.htmlType == "checkbox")## 多选框 - component: 'Checkbox', - componentProps: { - #if ("" != $dictType)## 有数据字典 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else##没数据字典 - options:[], - #end - }, - #elseif($column.htmlType == "radio")## 单选框 - component: 'RadioButtonGroup', - componentProps: { - #if ("" != $dictType)## 有数据字典 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else##没数据字典 - options:[], - #end - }, - #elseif($column.htmlType == "datetime")## 时间框 - component: 'DatePicker', - componentProps: { - showTime: true, - format: 'YYYY-MM-DD HH:mm:ss', - valueFormat: 'x', - }, - #elseif($column.htmlType == "textarea")## 文本域 - component: 'InputTextArea', - #end - }, -#end -#end -#end -] - -export const updateFormSchema: FormSchema[] = [ - { - label: '编号', - field: 'id', - show: false, - component: 'Input', - }, -#foreach($column in $columns) -#if ($column.updateOperation) -#set ($dictType = $column.dictType) -#set ($javaType = $column.javaType) -#set ($javaField = $column.javaField) -#set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) -#set ($comment = $column.columnComment) -#if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") - #set ($dictMethod = "number") -#elseif ($javaType == "String") - #set ($dictMethod = "string") -#elseif ($javaType == "Boolean") - #set ($dictMethod = "boolean") -#end - #if (!$column.primaryKey)## 忽略主键,不用在表单里 - { - label: '${comment}', - field: '${javaField}', - #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 - required: true, - #end - #if ($column.htmlType == "input") - component: 'Input', - #elseif($column.htmlType == "imageUpload")## 图片上传 - component: 'FileUpload', - componentProps: { - fileType: 'image', - maxCount: 1, - }, - #elseif($column.htmlType == "fileUpload")## 文件上传 - component: 'FileUpload', - componentProps: { - fileType: 'file', - maxCount: 1, - }, - #elseif($column.htmlType == "editor")## 文本编辑器 - component: 'Editor', - #elseif($column.htmlType == "select")## 下拉框 - component: 'Select', - componentProps: { - #if ("" != $dictType)## 有数据字典 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else##没数据字典 - options:[], - #end - }, - #elseif($column.htmlType == "checkbox")## 多选框 - component: 'Checkbox', - componentProps: { - #if ("" != $dictType)## 有数据字典 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else##没数据字典 - options:[], - #end - }, - #elseif($column.htmlType == "radio")## 单选框 - component: 'RadioButtonGroup', - componentProps: { - #if ("" != $dictType)## 有数据字典 - options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), - #else##没数据字典 - options:[], - #end - }, - #elseif($column.htmlType == "datetime")## 时间框 - component: 'DatePicker', - componentProps: { - showTime: true, - format: 'YYYY-MM-DD HH:mm:ss', - valueFormat: 'x', - }, - #elseif($column.htmlType == "textarea")## 文本域 - component: 'InputTextArea', - #end - }, - #end -#end -#end -] \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/form.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/form.vue.vm deleted file mode 100644 index 1804365..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/form.vue.vm +++ /dev/null @@ -1,58 +0,0 @@ - - \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/index.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/index.vue.vm deleted file mode 100644 index 9e59b12..0000000 --- a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/index.vue.vm +++ /dev/null @@ -1,92 +0,0 @@ - - diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java new file mode 100644 index 0000000..351c86d --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + *//* + + +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.domain.Category; +import com.tashow.cloud.product.domain.ServerResponseEntity; +import com.tashow.cloud.product.service.CategoryService; +import jakarta.annotation.security.PermitAll; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +*/ +/** + * 分类接口 + * @author lanhai + *//* + +@RestController +@RequestMapping("/category") +public class CategoryController { + + @Autowired + private CategoryService categoryService; + + */ +/** + * 分类信息列表接口 + *//* + + @PermitAll + @GetMapping("/categoryInfo") + public ServerResponseEntity> categoryInfo() { + List categories = categoryService.tableCategory(1L); + return ServerResponseEntity.success(categories); + } + + + +} +*/ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java new file mode 100644 index 0000000..79aeea8 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java @@ -0,0 +1,77 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdDO; +import com.tashow.cloud.product.vo.prod.*; +import jakarta.annotation.security.PermitAll; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import com.tashow.cloud.product.service.ProdService; + +@Tag(name = "管理后台 - 商品") +@RestController +@RequestMapping("/prod") +@Validated +public class ProdController { + + @Resource + private ProdService prodService; + + @PostMapping("/create") + @Operation(summary = "创建商品") + @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:create')") + public CommonResult createProd(@Valid @RequestBody ProdSaveReqVO createReqVO) { + return success(prodService.createProd(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品") + @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:update')") + public CommonResult updateProd(@Valid @RequestBody ProdSaveReqVO updateReqVO) { + prodService.updateProd(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:delete')") + public CommonResult deleteProd(@RequestParam("id") Long id) { + prodService.deleteProd(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:query')") + public CommonResult getProd(@RequestParam("id") Long id) { + ProdDO prod = prodService.getProd(id); + return success(BeanUtils.toBean(prod, ProdRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品分页") + @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:query')") + @PermitAll + public CommonResult> getProdPage(@Valid ProdPageReqVO pageReqVO) { + PageResult pageResult = prodService.getProdPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdRespVO.class)); + } +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Category.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Category.java new file mode 100644 index 0000000..3ccde10 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Category.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + *//* + + +package com.tashow.cloud.product.domain; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +*/ +/** + * @author lanhai + *//* + +@Data +@TableName("tz_category") +public class Category implements Serializable { + + */ +/** + * 类目ID + *//* + + private Long categoryId; + + */ +/** + * 店铺ID + *//* + + private Long shopId; + + */ +/** + * 父节点 + *//* + + private Long parentId; + + */ +/** + * 产品类目名称 + *//* + + private String categoryName; + + */ +/** + * 类目图标 + *//* + + private String icon; + + */ +/** + * 类目的显示图片 + *//* + + private String pic; + + */ +/** + * 类目描述 + *//* + + private String describe; + + */ +/** + * 标签 + *//* + + private String tag; + + */ +/** + * 排序 + *//* + + private Integer seq; + + */ +/** + * 默认是1,表示正常状态,0为下线状态 + *//* + + private Integer status; + + */ +/** + * 创建时间 + *//* + + private Date createTime; + + */ +/** + * 创建时间 + *//* + + private String creator; + + */ +/** + * 分类层级 + *//* + + private Integer grade; + + */ +/** + * 更新时间 + *//* + + private Date updateTime; + + */ +/** + * 修改人 + *//* + + private String updater; + + private static final long serialVersionUID = 1L; + + +} +*/ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Prod.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Prod.java new file mode 100644 index 0000000..4938e2b --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Prod.java @@ -0,0 +1,200 @@ +package com.tashow.cloud.product.domain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; +/** + * 商品对象 prod + * + * @author ruoyi + * @date 2025-07-25 + */ + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class Prod extends BaseEntity { +private static final long serialVersionUID=1L; + + + /** + * 产品ID + */ + @ApiModelProperty(value = "产品ID", position = 0) + private Long prodId; + + + /** + * 商品名称 + */ + @ApiModelProperty(value = "商品名称", position = 1) + private String prodName; + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "商品简称", position = 2) + private String abbreviation; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "seo标题", position = 3) + private String seoName; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "seo搜索", position = 4) + private String seoSearch; + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "关键词", position = 5) + private String keyword; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "店铺id", position = 6) + private Long shopId; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "简要描述,卖点等", position = 7) + private String brief; + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "品牌", position = 8) + private String brand; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "详细描述", position = 9) + private String content; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "商品编号", position = 10) + private String prodNumber; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "商品主图", position = 11) + private String pic; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "商品轮播图片,以,分割", position = 12) + private String imgs; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "默认是1,表示正常状态, -1表示删除, 0下架", position = 13) + private Long status; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "商品分类", position = 14) + private Long categoryId; + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "销量", position = 15) + private Long soldNum; + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "分享图", position = 16) + private String shareImage; + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "分享话术", position = 17) + private String shareContent; + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "是否开启区域0关1开", position = 18) + private Integer regionSwitch; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "是否特殊时段0关1开", position = 19) + private Integer additionalSwitch; + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "是否特殊日期(节假日周末什么的)0关1开", position = 20) + private Integer additionalFeeSwitch; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "是否紧急响应服务0关1开", position = 21) + private Integer emergencySwitch; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "是否预约0关1开", position = 22) + private Integer reservationSwitch; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "是否接单上线0关1开", position = 23) + private Integer orderLimitSwitch; + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "是否开启体重配置0关1开", position = 24) + private Integer weightSwitch; + + + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "版本 乐观锁", position = 29) + private Long version; + + /** + * 展示的权重 + */ + @ApiModelProperty(value = "展示的权重", position = 30) + private Long top; + +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ServerResponseEntity.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ServerResponseEntity.java new file mode 100644 index 0000000..0646c3f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ServerResponseEntity.java @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ + +package com.tashow.cloud.product.domain; + +import lombok.extern.slf4j.Slf4j; + +import java.io.Serializable; +import java.util.Objects; + +/** + * @author lanhai + */ +@Slf4j +public class ServerResponseEntity implements Serializable { + + /** + * 状态码 + */ + private String code; + + /** + * 信息 + */ + private String msg; + + /** + * 数据 + */ + private T data; + + /** + * 版本 + */ + private String version; + + /** + * 时间 + */ + private Long timestamp; + + private String sign; + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return data; + } + + public ServerResponseEntity setData(T data) { + this.data = data; + return this; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Long getTimestamp() { + return timestamp; + } + + public void setTimestamp(Long timestamp) { + this.timestamp = timestamp; + } + + public boolean isSuccess() { + return Objects.equals(ResponseEnum.OK.value(), this.code); + } + public boolean isFail() { + return !Objects.equals(ResponseEnum.OK.value(), this.code); + } + + public ServerResponseEntity() { + // 版本号 + this.version = "mall4j.v230424"; + } + + public static ServerResponseEntity success(T data) { + ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); + serverResponseEntity.setData(data); + serverResponseEntity.setCode(ResponseEnum.OK.value()); + return serverResponseEntity; + } + + public static ServerResponseEntity success() { + ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); + serverResponseEntity.setCode(ResponseEnum.OK.value()); + serverResponseEntity.setMsg(ResponseEnum.OK.getMsg()); + return serverResponseEntity; + } + + public static ServerResponseEntity success(Integer code, T data) { + return success(String.valueOf(code), data); + } + + public static ServerResponseEntity success(String code, T data) { + ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); + serverResponseEntity.setCode(code); + serverResponseEntity.setData(data); + return serverResponseEntity; + } + + /** + * 前端显示失败消息 + * @param msg 失败消息 + * @return + */ + public static ServerResponseEntity showFailMsg(String msg) { + log.error(msg); + ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); + serverResponseEntity.setMsg(msg); + serverResponseEntity.setCode(ResponseEnum.SHOW_FAIL.value()); + return serverResponseEntity; + } + + public static ServerResponseEntity fail(ResponseEnum responseEnum) { + log.error(responseEnum.toString()); + ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); + serverResponseEntity.setMsg(responseEnum.getMsg()); + serverResponseEntity.setCode(responseEnum.value()); + return serverResponseEntity; + } + + public static ServerResponseEntity fail(ResponseEnum responseEnum, T data) { + log.error(responseEnum.toString()); + ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); + serverResponseEntity.setMsg(responseEnum.getMsg()); + serverResponseEntity.setCode(responseEnum.value()); + serverResponseEntity.setData(data); + return serverResponseEntity; + } + + public static ServerResponseEntity fail(String code, String msg, T data) { + log.error(msg); + ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); + serverResponseEntity.setMsg(msg); + serverResponseEntity.setCode(code); + serverResponseEntity.setData(data); + return serverResponseEntity; + } + + public static ServerResponseEntity fail(String code, String msg) { + return fail(code, msg, null); + } + + public static ServerResponseEntity fail(Integer code, T data) { + ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); + serverResponseEntity.setCode(String.valueOf(code)); + serverResponseEntity.setData(data); + return serverResponseEntity; + } + + @Override + public String toString() { + return "ServerResponseEntity{" + + "code='" + code + '\'' + + ", msg='" + msg + '\'' + + ", data=" + data + + ", version='" + version + '\'' + + ", timestamp=" + timestamp + + ", sign='" + sign + '\'' + + '}'; + } +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java new file mode 100644 index 0000000..fe9a9e4 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java @@ -0,0 +1,143 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 商品 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod") +@KeySequence("tz_prod_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdDO extends BaseDO { + + /** + * 产品ID + */ + @TableId + private Long prodId; + /** + * 商品名称 + */ + private String prodName; + /** + * 商品简称 + */ + private String abbreviation; + /** + * seo标题 + */ + private String seoName; + /** + * seo搜索 + */ + private String seoSearch; + /** + * 关键词 + */ + private String keyword; + /** + * 店铺id + */ + private Long shopId; + /** + * 简要描述,卖点等 + */ + private String brief; + /** + * 品牌 + */ + private String brand; + /** + * 详细描述 + */ + private String content; + /** + * 商品编号 + */ + private String prodNumber; + /** + * 商品主图 + */ + private String pic; + /** + * 商品轮播图片,以,分割 + */ + private String imgs; + /** + * 默认是1,表示正常状态, -1表示删除, 0下架 + */ + private Integer status; + /** + * 商品分类 + */ + private Long categoryId; + /** + * 销量 + */ + private Integer soldNum; + /** + * 分享图 + */ + private String shareImage; + /** + * 分享话术 + */ + private String shareContent; + /** + * 是否开启区域0关1开 + */ + private Boolean regionSwitch; + /** + * 是否特殊时段0关1开 + */ + private Boolean additionalSwitch; + /** + * 是否特殊日期(节假日周末什么的)0关1开 + */ + private Boolean additionalFeeSwitch; + /** + * 是否紧急响应服务0关1开 + */ + private Boolean emergencySwitch; + /** + * 是否预约0关1开 + */ + private Boolean reservationSwitch; + /** + * 是否接单上线0关1开 + */ + private Boolean orderLimitSwitch; + /** + * 是否开启体重配置0关1开 + */ + private Boolean weightSwitch; + /** + * 创建人 + */ + private String createBy; + /** + * 修改人 + */ + private String updateBy; + /** + * 版本 乐观锁 + */ + private Integer version; + /** + * 展示的权重 + */ + private Integer top; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java new file mode 100644 index 0000000..81239f8 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + *//* + + +package com.tashow.cloud.product.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tashow.cloud.product.domain.Category; + +import java.util.List; + +*/ +/** + * @author lanhai + *//* + +public interface CategoryMapper extends BaseMapper { + + */ +/** + * 根据父级id获取分类列表 + * + * @param parentId + * @return + *//* + + List listByParentId(Long parentId); + + + */ +/** + * 根据店铺id获取分类列表 + * + * @param shopId + * @return + *//* + + List tableCategory(Long shopId); +}*/ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java new file mode 100644 index 0000000..ce403c8 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java @@ -0,0 +1,22 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdDO; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 商品 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdMapper extends BaseMapperX { + +// PageResult getProdPage1(ProdPageReqVO reqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java new file mode 100644 index 0000000..9d72680 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + *//* + + +package com.tashow.cloud.product.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tashow.cloud.product.domain.Category; + +import java.util.List; + +*/ +/** + * @author lanhai + * 商品分类 + *//* + +public interface CategoryService extends IService { + + */ +/** + * 根据parentId获取分类 + * @param parentId 0 一级分类 + * @return + *//* + + List listByParentId(Long parentId); + + + */ +/** + * 获取用于页面表单展现的category列表,根据seq排序 + * @param shopId 店铺id + * @return + *//* + + List tableCategory(Long shopId); + + */ +/** + * 保存分类、品牌、参数 + * @param category + *//* + + void saveCategory(Category category); + + */ +/** + * 修改分类、品牌、参数 + * @param category + *//* + + void updateCategory(Category category); + + */ +/** + * 删除分类、品牌、参数 以及分类对应的图片 + * @param categoryId 分类id + *//* + + void deleteCategory(Long categoryId); + +} +*/ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java new file mode 100644 index 0000000..7550b55 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdDO; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 商品 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdService { + + /** + * 创建商品 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProd(@Valid ProdSaveReqVO createReqVO); + + /** + * 更新商品 + * + * @param updateReqVO 更新信息 + */ + void updateProd(@Valid ProdSaveReqVO updateReqVO); + + /** + * 删除商品 + * + * @param id 编号 + */ + void deleteProd(Long id); + + /** + * 获得商品 + * + * @param id 编号 + * @return 商品 + */ + ProdDO getProd(Long id); + + /** + * 获得商品分页 + * + * @param pageReqVO 分页查询 + * @return 商品分页 + */ + PageResult getProdPage(ProdPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java new file mode 100644 index 0000000..0ac5676 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + *//* + + +package com.tashow.cloud.product.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; +import com.tashow.cloud.product.domain.Category; +import com.tashow.cloud.product.mapper.CategoryMapper; +import com.tashow.cloud.product.service.CategoryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +*/ +/** + * @author lanhai + *//* + +@Service +public class CategoryServiceImpl extends ServiceImpl implements CategoryService { + + @Autowired + private CategoryMapper categoryMapper; + + @Override + public List listByParentId(Long parentId) { + return categoryMapper.listByParentId(parentId); + } + + @Override + public List tableCategory(Long shopId) { + return categoryMapper.tableCategory(shopId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveCategory(Category category) { + category.setCreateTime(new Date()); + // 保存分类信息 + categoryMapper.insert(category); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateCategory(Category category) { + Category dbCategory = categoryMapper.selectById(category.getCategoryId()); + category.setUpdateTime(new Date()); + // 保存分类信息 + categoryMapper.updateById(category); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteCategory(Long categoryId) { + Category category = categoryMapper.selectById(categoryId); + categoryMapper.deleteById(categoryId); + } + + + +} +*/ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java new file mode 100644 index 0000000..c2eb3ee --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -0,0 +1,75 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdDO; +import com.tashow.cloud.product.mapper.ProdMapper; +import com.tashow.cloud.product.service.ProdService; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 商品 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdServiceImpl implements ProdService { + + @Resource + private ProdMapper prodMapper; + + @Override + public Long createProd(ProdSaveReqVO createReqVO) { + // 插入 + ProdDO prod = BeanUtils.toBean(createReqVO, ProdDO.class); + prodMapper.insert(prod); + // 返回 + return prod.getProdId(); + } + + @Override + public void updateProd(ProdSaveReqVO updateReqVO) { + // 校验存在 + validateProdExists(updateReqVO.getProdId()); + // 更新 + ProdDO updateObj = BeanUtils.toBean(updateReqVO, ProdDO.class); + prodMapper.updateById(updateObj); + } + + @Override + public void deleteProd(Long id) { + // 校验存在 + validateProdExists(id); + // 删除 + prodMapper.deleteById(id); + } + + private void validateProdExists(Long id) { + if (prodMapper.selectById(id) == null) { + //throw exception(100, "商品不存在"); + } + } + + @Override + public ProdDO getProd(Long id) { + return prodMapper.selectById(id); + } + + @Override + public PageResult getProdPage(ProdPageReqVO pageReqVO) { + return null;// prodMapper.getProdPage1(pageReqVO); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java new file mode 100644 index 0000000..3613231 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java @@ -0,0 +1,108 @@ +package com.tashow.cloud.product.vo.prod; + +import com.tashow.cloud.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 商品分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdPageReqVO extends PageParam { + + @Schema(description = "商品名称", example = "赵六") + private String prodName; + + @Schema(description = "商品简称") + private String abbreviation; + + @Schema(description = "seo标题", example = "李四") + private String seoName; + + @Schema(description = "seo搜索") + private String seoSearch; + + @Schema(description = "关键词") + private String keyword; + + @Schema(description = "店铺id", example = "10843") + private Long shopId; + + @Schema(description = "简要描述,卖点等") + private String brief; + + @Schema(description = "品牌") + private String brand; + + @Schema(description = "详细描述") + private String content; + + @Schema(description = "商品编号") + private String prodNumber; + + @Schema(description = "商品主图") + private String pic; + + @Schema(description = "商品轮播图片,以,分割") + private String imgs; + + @Schema(description = "默认是1,表示正常状态, -1表示删除, 0下架", example = "2") + private Integer status; + + @Schema(description = "商品分类", example = "14895") + private Long categoryId; + + @Schema(description = "销量") + private Integer soldNum; + + @Schema(description = "分享图") + private String shareImage; + + @Schema(description = "分享话术") + private String shareContent; + + @Schema(description = "是否开启区域0关1开") + private Boolean regionSwitch; + + @Schema(description = "是否特殊时段0关1开") + private Boolean additionalSwitch; + + @Schema(description = "是否特殊日期(节假日周末什么的)0关1开") + private Boolean additionalFeeSwitch; + + @Schema(description = "是否紧急响应服务0关1开") + private Boolean emergencySwitch; + + @Schema(description = "是否预约0关1开") + private Boolean reservationSwitch; + + @Schema(description = "是否接单上线0关1开") + private Boolean orderLimitSwitch; + + @Schema(description = "是否开启体重配置0关1开") + private Boolean weightSwitch; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "创建人") + private String createBy; + + @Schema(description = "修改人") + private String updateBy; + + @Schema(description = "版本 乐观锁") + private Integer version; + + @Schema(description = "展示的权重") + private Integer top; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java new file mode 100644 index 0000000..50af918 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java @@ -0,0 +1,135 @@ +package com.tashow.cloud.product.vo.prod; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 商品 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdRespVO { + + @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6943") + @ExcelProperty("产品ID") + private Long prodId; + + @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("商品名称") + private String prodName; + + @Schema(description = "商品简称") + @ExcelProperty("商品简称") + private String abbreviation; + + @Schema(description = "seo标题", example = "李四") + @ExcelProperty("seo标题") + private String seoName; + + @Schema(description = "seo搜索") + @ExcelProperty("seo搜索") + private String seoSearch; + + @Schema(description = "关键词") + @ExcelProperty("关键词") + private String keyword; + + @Schema(description = "店铺id", example = "10843") + @ExcelProperty("店铺id") + private Long shopId; + + @Schema(description = "简要描述,卖点等") + @ExcelProperty("简要描述,卖点等") + private String brief; + + @Schema(description = "品牌") + @ExcelProperty("品牌") + private String brand; + + @Schema(description = "详细描述") + @ExcelProperty("详细描述") + private String content; + + @Schema(description = "商品编号") + @ExcelProperty("商品编号") + private String prodNumber; + + @Schema(description = "商品主图") + @ExcelProperty("商品主图") + private String pic; + + @Schema(description = "商品轮播图片,以,分割") + @ExcelProperty("商品轮播图片,以,分割") + private String imgs; + + @Schema(description = "默认是1,表示正常状态, -1表示删除, 0下架", example = "2") + @ExcelProperty("默认是1,表示正常状态, -1表示删除, 0下架") + private Integer status; + + @Schema(description = "商品分类", example = "14895") + @ExcelProperty("商品分类") + private Long categoryId; + + @Schema(description = "销量") + @ExcelProperty("销量") + private Integer soldNum; + + @Schema(description = "分享图") + @ExcelProperty("分享图") + private String shareImage; + + @Schema(description = "分享话术") + @ExcelProperty("分享话术") + private String shareContent; + + @Schema(description = "是否开启区域0关1开") + @ExcelProperty("是否开启区域0关1开") + private Boolean regionSwitch; + + @Schema(description = "是否特殊时段0关1开") + @ExcelProperty("是否特殊时段0关1开") + private Boolean additionalSwitch; + + @Schema(description = "是否特殊日期(节假日周末什么的)0关1开") + @ExcelProperty("是否特殊日期(节假日周末什么的)0关1开") + private Boolean additionalFeeSwitch; + + @Schema(description = "是否紧急响应服务0关1开") + @ExcelProperty("是否紧急响应服务0关1开") + private Boolean emergencySwitch; + + @Schema(description = "是否预约0关1开") + @ExcelProperty("是否预约0关1开") + private Boolean reservationSwitch; + + @Schema(description = "是否接单上线0关1开") + @ExcelProperty("是否接单上线0关1开") + private Boolean orderLimitSwitch; + + @Schema(description = "是否开启体重配置0关1开") + @ExcelProperty("是否开启体重配置0关1开") + private Boolean weightSwitch; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "创建人") + @ExcelProperty("创建人") + private String createBy; + + @Schema(description = "修改人") + @ExcelProperty("修改人") + private String updateBy; + + @Schema(description = "版本 乐观锁") + @ExcelProperty("版本 乐观锁") + private Integer version; + + @Schema(description = "展示的权重") + @ExcelProperty("展示的权重") + private Integer top; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java new file mode 100644 index 0000000..945173a --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java @@ -0,0 +1,99 @@ +package com.tashow.cloud.product.vo.prod; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +@Schema(description = "管理后台 - 商品新增/修改 Request VO") +@Data +public class ProdSaveReqVO { + + @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6943") + private Long prodId; + + @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotEmpty(message = "商品名称不能为空") + private String prodName; + + @Schema(description = "商品简称") + private String abbreviation; + + @Schema(description = "seo标题", example = "李四") + private String seoName; + + @Schema(description = "seo搜索") + private String seoSearch; + + @Schema(description = "关键词") + private String keyword; + + @Schema(description = "店铺id", example = "10843") + private Long shopId; + + @Schema(description = "简要描述,卖点等") + private String brief; + + @Schema(description = "品牌") + private String brand; + + @Schema(description = "详细描述") + private String content; + + @Schema(description = "商品编号") + private String prodNumber; + + @Schema(description = "商品主图") + private String pic; + + @Schema(description = "商品轮播图片,以,分割") + private String imgs; + + @Schema(description = "默认是1,表示正常状态, -1表示删除, 0下架", example = "2") + private Integer status; + + @Schema(description = "商品分类", example = "14895") + private Long categoryId; + + @Schema(description = "销量") + private Integer soldNum; + + @Schema(description = "分享图") + private String shareImage; + + @Schema(description = "分享话术") + private String shareContent; + + @Schema(description = "是否开启区域0关1开") + private Boolean regionSwitch; + + @Schema(description = "是否特殊时段0关1开") + private Boolean additionalSwitch; + + @Schema(description = "是否特殊日期(节假日周末什么的)0关1开") + private Boolean additionalFeeSwitch; + + @Schema(description = "是否紧急响应服务0关1开") + private Boolean emergencySwitch; + + @Schema(description = "是否预约0关1开") + private Boolean reservationSwitch; + + @Schema(description = "是否接单上线0关1开") + private Boolean orderLimitSwitch; + + @Schema(description = "是否开启体重配置0关1开") + private Boolean weightSwitch; + + @Schema(description = "创建人") + private String createBy; + + @Schema(description = "修改人") + private String updateBy; + + @Schema(description = "版本 乐观锁") + private Integer version; + + @Schema(description = "展示的权重") + private Integer top; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/application-local.yaml b/tashow-module/tashow-module-product/src/main/resources/application-local.yaml new file mode 100644 index 0000000..c2316fd --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/application-local.yaml @@ -0,0 +1,16 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 43.139.42.137:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: 76667956-2ac2-4e05-906b-4bca4ebcc5f0 # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: 76667956-2ac2-4e05-906b-4bca4ebcc5f0 # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP diff --git a/tashow-module/tashow-module-product/src/main/resources/application.yaml b/tashow-module/tashow-module-product/src/main/resources/application.yaml new file mode 100644 index 0000000..1d33782 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/application.yaml @@ -0,0 +1,12 @@ +server: + port: 48083 +spring: + application: + name: product-server + profiles: + active: local + config: + import: + - optional:classpath:application-${spring.profiles.active}.yaml # 加载【本地】配置 + - optional:nacos:application.yaml # 加载【Nacos】的配置 + - optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml # 加载【Nacos】的配置 diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml new file mode 100644 index 0000000..c1a9fc1 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml @@ -0,0 +1,35 @@ + diff --git a/tashow-module/tashow-module-system/src/main/resources/application-local.yaml b/tashow-module/tashow-module-system/src/main/resources/application-local.yaml index 03bada2..08f0e60 100644 --- a/tashow-module/tashow-module-system/src/main/resources/application-local.yaml +++ b/tashow-module/tashow-module-system/src/main/resources/application-local.yaml @@ -5,11 +5,11 @@ spring: username: nacos # Nacos 账号 password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 - namespace: dev # 命名空间。这里使用 dev 开发环境 + namespace: 76667956-2ac2-4e05-906b-4bca4ebcc5f0 # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP metadata: version: 1.0.0 # 服务实例的版本号,可用于灰度发布 config: # 【注册中心】配置项 - namespace: dev # 命名空间。这里使用 dev 开发环境 + namespace: 76667956-2ac2-4e05-906b-4bca4ebcc5f0 # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP From d07d884286b1deede9e79f47b9083a50a2aa7688 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Mon, 28 Jul 2025 17:32:31 +0800 Subject: [PATCH 02/22] =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=A8=A1=E5=9D=971?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logs/gateway-server.log.2025-07-25.0.gz | Bin 0 -> 2078 bytes logs/infra-server.log.2025-07-25.0.gz | Bin 0 -> 4880 bytes logs/system-server.log.2025-07-25.0.gz | Bin 0 -> 4413 bytes .../codegen/java/controller/controller.vm | 233 +++++++++++ .../codegen/java/controller/vo/listReqVO.vm | 45 +++ .../codegen/java/controller/vo/pageReqVO.vm | 47 +++ .../codegen/java/controller/vo/respVO.vm | 53 +++ .../codegen/java/controller/vo/saveReqVO.vm | 64 +++ .../src/main/resources/codegen/java/dal/do.vm | 52 +++ .../main/resources/codegen/java/dal/do_sub.vm | 49 +++ .../main/resources/codegen/java/dal/mapper.vm | 82 ++++ .../resources/codegen/java/dal/mapper.xml.vm | 12 + .../resources/codegen/java/dal/mapper_sub.vm | 57 +++ .../resources/codegen/java/enums/errorcode.vm | 22 ++ .../resources/codegen/java/service/service.vm | 147 +++++++ .../codegen/java/service/serviceImpl.vm | 351 ++++++++++++++++ .../codegen/java/test/serviceTest.vm | 168 ++++++++ .../src/main/resources/codegen/sql/h2.vm | 37 ++ .../src/main/resources/codegen/sql/sql.vm | 28 ++ .../main/resources/codegen/vue/api/api.js.vm | 141 +++++++ .../vue/views/components/form_sub_erp.vue.vm | 205 ++++++++++ .../views/components/form_sub_inner.vue.vm | 2 + .../views/components/form_sub_normal.vue.vm | 347 ++++++++++++++++ .../vue/views/components/list_sub_erp.vue.vm | 165 ++++++++ .../views/components/list_sub_inner.vue.vm | 4 + .../resources/codegen/vue/views/form.vue.vm | 320 +++++++++++++++ .../resources/codegen/vue/views/index.vue.vm | 340 ++++++++++++++++ .../main/resources/codegen/vue3/api/api.ts.vm | 115 ++++++ .../vue3/views/components/form_sub_erp.vue.vm | 204 ++++++++++ .../views/components/form_sub_inner.vue.vm | 2 + .../views/components/form_sub_normal.vue.vm | 360 +++++++++++++++++ .../vue3/views/components/list_sub_erp.vue.vm | 184 +++++++++ .../views/components/list_sub_inner.vue.vm | 4 + .../resources/codegen/vue3/views/form.vue.vm | 300 ++++++++++++++ .../resources/codegen/vue3/views/index.vue.vm | 374 ++++++++++++++++++ .../resources/codegen/vue3_vben/api/api.ts.vm | 32 ++ .../codegen/vue3_vben/views/data.ts.vm | 260 ++++++++++++ .../codegen/vue3_vben/views/form.vue.vm | 58 +++ .../codegen/vue3_vben/views/index.vue.vm | 92 +++++ tashow-module/tashow-module-product/pom.xml | 97 +++++ .../product/ProductServerApplication.java | 20 + .../cloud/product/domain/BaseEntity.java | 125 ++++++ .../cloud/product/domain/ResponseCode.java | 19 + .../cloud/product/domain/ResponseEnum.java | 69 ++++ .../resources/mapper/product/ProdMapper.xml | 14 + 45 files changed, 5300 insertions(+) create mode 100644 logs/gateway-server.log.2025-07-25.0.gz create mode 100644 logs/infra-server.log.2025-07-25.0.gz create mode 100644 logs/system-server.log.2025-07-25.0.gz create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/controller.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/listReqVO.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/pageReqVO.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/respVO.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/saveReqVO.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do_sub.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.xml.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper_sub.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/enums/errorcode.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/service.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/java/test/serviceTest.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/sql/h2.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/sql/sql.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/api/api.js.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/form.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/index.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/api/api.ts.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/form.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/index.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/api/api.ts.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/data.ts.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/form.vue.vm create mode 100644 tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/index.vue.vm create mode 100644 tashow-module/tashow-module-product/pom.xml create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/ProductServerApplication.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/BaseEntity.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseCode.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseEnum.java create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml diff --git a/logs/gateway-server.log.2025-07-25.0.gz b/logs/gateway-server.log.2025-07-25.0.gz new file mode 100644 index 0000000000000000000000000000000000000000..9c34c973df0940a4f1e0a614c1f49d05f61c5a18 GIT binary patch literal 2078 zcmV+(2;ui1iwFP!00000|Lt4PZ`(!|KF2`+f?NhgfnYDYJ*Zs_O_=Y?5kZFx};2Z`WBFpj_qH@NC= zKG@JoePG{)51#oH^;sCQk+igmhMe_-kfI<##1+9M?Vt}s=92Kka@dBZ)d8CT>=^zX z5tk)9Eba$`T_VUKBOc{w@^gLK(`+KjXPzTD54qWwQxDc1cn=FBw33W{E8~F2Bnls( z0cYv(;qIfot>=f&KHu+t`uzADC8_JuBv~_-Xl!Pp`iI+trVMy!z93=n1TPE`l&Y zFTeiw>YKlxm%(*#+fZvVH^Ak%3p)_qrG1G8P-b5bA=u?cH4QflG7n|r$DDdHYUsrN zr(1nN`8omKrm&aN^+GI0l*a1>d55u!V6BY&n98kmtq`+BtP|c(sPLJ$PKb|*@GJ4w z_2{b+?{8De$Lj>R3pd?1^VSS=#01^)yz0%Ofv7**V|+w7%vewSCo~xN)!SVI5%0*H zc8{g8$H&;~|@kP?52@5ZaV&VF*39M3SfP3ZWP0Ps9s}VZc>K?6x{#C;Kk+keK2}$fy zzC-$b8pQO3@c57o29!_r0ft;+&rFS`7s)ErO*yBr2**ek*m7Rh0T58PdbCf{P#~AM zKE>$7mxZhFGkqf$Ss@&yyoTeo@8;ILX-e zIfu@q0vu_F(ELSh1@lUI-i$T}6$wYc1$wpBw4rns}0h(!`pxI^;QXLJe zrj1pss(L36?0hK<$_Gy3Q?Hy}TeEJh)e1LbN?3VC3Wc)4l&E2$A1R>rgaXb@j-Bcc!&0scKEB|cV`S17t`p;i~ zzWVl`SKs`U_ul^Z?=Ls*y!`V&uKx1F%kRE=`TY+abVojUlFsI4-lhzg%RI`l8*h?f z(DInOi8k)6j^Z`L>K&tvb;nsGqk6W0Mdg+*(-H_^`hvPCq;WW3cMNWsZ0b|-^V;Bf zz70U?1A81B%UHUeQ;y$IlqTWdmB{m?3$cEd13{Kn2Xu2m=rV}#WBACQZL*2|n1xyU zehPZogc9rL=S0`DtC*-uFtOjjB!5`vY+@#YK0F<>UpoL`{C5yr1)>KPfwSjhVCo=ow+Zjy+<4&Umu9c)?3 zEPU0`^@eL6B*gbZ@=$m{y9E#2K=F{Fw&yFjl~6ZV@X%T?t|=DZvbZ5bYiM<}o7Pp^@cx)!HEBb}-=6

p&;fonAiA_;Bd-mXu;n~Q^QhNxiz+-^|xFK2SA z875x}^!z*XQqb!yX8@+Uf|d3nnMM=T3=*$~m3eu2ot}ATVuqZHsxOi%G(pSof2adY Ib-_UZ099KS{{R30 literal 0 HcmV?d00001 diff --git a/logs/infra-server.log.2025-07-25.0.gz b/logs/infra-server.log.2025-07-25.0.gz new file mode 100644 index 0000000000000000000000000000000000000000..16fd04f135c4b9dfaa3cb896f9b6a25bc52994fa GIT binary patch literal 4880 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 CJE~Ry literal 0 HcmV?d00001 diff --git a/logs/system-server.log.2025-07-25.0.gz b/logs/system-server.log.2025-07-25.0.gz new file mode 100644 index 0000000000000000000000000000000000000000..4ce6b9bf97c80c1be72b30a80c2b921b264c49e9 GIT binary patch literal 4413 zcmV-D5yI{tiwFP!00000|Lt8*Z{tXIKTiYs1bZng8t5LNStcn`q}1aH+;+Ri19y)h zyE6y3F({EGiQ5#ZB`Lern?1}ai_Idtm)*-ENEVAAK@Qn-f*{|s ze9s|?7X}D^CfS}QBuc!Xix#CG#_aCb5B1 zI82E5E}&Q6@$c|KNl4rauatpLl1>=)-!1sw58a_pXTK=|2V9K0G!)kMqU0HCu+*1jG*D{~O|j@qQR|yzT)>$Z<$q8lmiGlI=N9h(yW@#L^*$ ze>r#Ixg&R16oL|S_zH)BN2KpRL)|DG4t5V-9`3z8KKt%f>zlVH7bqS&4vph214$;; z3J|+qa1V%$azadKK!W7q;hL(tCBfCOUX#Gf5XZQUJMjB}cF53Aj=|88wohMB5*&gN z2&2&~xNktCBF|+8qYY`0OFLj4xorUhC$2s5f=)zI^}~nM>jwM2M}y>aKpn4>B7Y)G zJVCD4>CgynPi59b5e1{^u=kw5q5+LOhiBeI+(hq&Q5VO92=2qH`ji=9?D*l(#o>Sk z9rn(JZ+?zq2U6`mN2JZ{x|8g7h#%AE$R{61Mq^L&yn4>yv1dWek7(Hi1XR-+9@xVtxbSr|(OzzNSep zbf>PfLYZ8Q)2l88;lt7VjSEq(RjJ*r)G95j_)=-vX0*(->!sDQ8DFwevr5gjq0|DmAOrtWvYBDYXS^)=(=os|Zu6*=p6SuGLDbX4MEtrDfYzYL%8%e5tf- zGg{U#jr(gEsF#Z)?BEt1gt5nj6;pk~h?ndE^=TIhVUq1@P(^RxQ*_EJ3$fWlB$gk< zpl8FteTJZZD8C7KJSSlalV+aI9j3Xn=jbAI68fEYNB1HO6ULyyfUoeFg4m+27f+CQ zfR-(v5R;r72+l)dVAYZ^aeH?phisikkGeA;rYa(KND#0a@LEmPQ9s7$kX0X2=dq3; z4OA$QnZ^r1nsrHo-a_SpB?IHR?5`MvRWq zs5LC5ZaHe38m3BBD_{P4Bc+?xN8j$X-Yg}5GFumqnRF*%oSZ}E?dpARF*@N>+U=QzWNwWU5-frt{eBI!oH z=$y;G7eIzw(D5BEu}h(`h~UAb7lp$vYodcNP-2$W$*e8va|4RNz9c=8i1y_exMG#IJ%MW;;#{}ED!>S9YV(OAPl(kc{5YNIML*RTLHX_C$0yy zBs;{t^jIMPtj-iHH>9Fad*qTb3~h?QCMU|cJfCGM!MMzwtJXKiFTVp5+}b-mYrWk+ zd)s=MOKB6UYHf3rUhM7xJNuxjDIM{?_=;U1pd5?#BZ`4-Z=u{oN%DW_j}f%_Gdi4T+$g|LhVaGPB`{p16nnst@x0LDj4DoU9Vct{h6iHBCdahh2HV#6;+UDdtm!5RIT>HQZItbPnN{@N zKKeE`*cWqW=`E_Yxc+nquI0zf7VgEPz`2t> zE%JPM=edfqZj;kqCbsL+mhxO-+HX_Wr7ljwzC#jx#{Yav+hS|~^k#m3hcA=xi0^#_ z=$z_3CIu-VHr;o&}S04r@|G@JsBc( zQz37TBXIUUz~V6D0U{WhVWNKS=J`6-Wh^k^YcKMbS{+W7HceN>Ay~1Q<#bQb z+tx9+kOMI)>tgh+2Uax!<23M`_pGuY4`y*#Ckq?OZEVhfaaHF@!U# z-&Y6Gs%@?k*8aBU6iA+-T^5>k3UMK42f2!+IJHqgku`Gk1Jh(Vq1QV2ysx zwT-$91eLKF!+|Exg?|U5fb>156%LuvofdK4wz(pu!sLxb8U+#8W$REUmmm$;gmZ!8 zlgDb52}o+(I8m7R+Qk&6XX)C?#W3^WHL#{hSOHmL!v_d;N$yu^5!$MZGbtiA0`5Xb z75cA#L!&r79cun(sv%BOqZ&3etmeq3gZpC@I$$h&vl2kJVx(w_@u|8P%L$Ho09{tr z<=!8EjK2zfcg7Xg&?I3z;}Ns&ho-X=#z54a@uz0JW;OBw>GeVia|4jpkcmh)q(Rca ziI#Gr)dzOk820cBa6jLl3_pJK={^}GPLHI1{ts!%O6dq{_e_ z#_0MN|9Jhce}Da}-~Hv^fAznA`u@-V{QdQR{r39z|MSHcU%*rC$qVuT=~!z#XqDF` z9z#=7S4TInT9bAL2*DIz(Kdb=xP#COl4CD;AGc^6`j_c}U6X8IeqbxML1B$Zh(U2Vh_#|I`qnPEpO{+S+IGy@V=f!clXjJrh-X@+uBfr9b zZl;N8aZYXqwB_Yk-IQYa*g1<7yPlJXk%I&HbeJt)V5J|=9SFzl^~L$v z%AuSGe)z?2u7CMYd0rdHZK<-h3Y4~LEJNB6m{<5G@cV1xypMBch;FHxui=?nYsAE+ zEy<5wYLG8GofOdA7~T`3e(7$I%y#A4EECr?DTPjOfCuoK@kzE z7eF1Ws>D+=Bidz0<&H#sq(ZdPi!%klF`z8{Gce{S!3l&_6XlS7vP3s^@nOyck-32g)j&v3lap zU&{3f)&(-=9kf_Tf^UlZX^?luWEZ05nlbH9O;^p#W3kz*{HZHlv>64kupxd$(-kpi zu4uPA&27<{c|idDbX(OLvJ2CKKT?+ddGy&|{_vlF{{4Sk|K?BEzx+4hV*lTNfB)#S zAO7KAu7CZmmXUj{GQ?h0a zSW;+J@>zirW!_-gi>K)_1$;JMy^#5XQ%3B@%?sf|WCt8D+E3CflE2Vu|5W~ZLHSut z;IH79@GV&%F&&`vLQsXIO7>Ej;9kumx>e#rqi#!9&fR;=2UN*Ay}TBpu#bfE zn~oC&;T6Vty?g*uFE+fselY2%T-J+UBz~ii*R!x`5@`CPCgy zRoJ>=QBPwm?a@suY&B~JwrX?gq8YkvuV(%__oFYPM=MD{s%NQnO0Uwyx9`sM-8_ z>q^Zk!c=M|UCrkAl9Wizsu7S%%eJl57HOG;iP=ia9w1*TEt98Zc1=Rhtc)Sc1Uf_8 z1Uk7P%K%9Ot1>2TR~)j;xJSq`4)Vr6O-W;W?kYyE-r4iY*N=f7@WLZW3bgH%(g)FOhxrmqc27888$g+yL%QLsJLBF{QSypi}hm+QP9QAdNvsEF> zD*E1ozS<_8)GB0I#m-N%Gdr8M6vnj*Syt+hWxyB>*XECxUw$didP0^7spkW&EhqKr zLYA#f%2k9csNqIYX8KBnvlWw3{UfSq6Y?tm~4Fk0`0i zH*kG}2-o52m@00}M^0J3+q~|OWgx$Xt@&V}%W2g{LY8p=jrj;D4~=8cDVjeadiiq} z*A=o%$Zbj5gIV6H(R685v*M6t7CRSKt4Z4xyP1$>0);8T=59P(*U}-&9#9!97qW~O zfMG~!xXKr@OrWzRcup$`S*Ami3zB{^WEqQAtLk|}_UuS~UCK~Jxk8qu$fO)oU7C<( zDJZFWR;G|;DLyHhR?d)R9ATrFrQF((Whux))wnGo%LJzRxRs^A^r?_#_57(T)4)cf z(9~5Gvg{5a%S?@LXjTg?L@Hs(vP}L$n-fbF=qr=FQ4-0E#hXf{&JG|e2Vd?cx_JlD z%NgA+MWWw@^yP^W2hy`G^7DbD@}=MIkYy>3*mo{X4wD$ Dv3Qy> literal 0 HcmV?d00001 diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/controller.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/controller.vm new file mode 100644 index 0000000..5aa3bae --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/controller.vm @@ -0,0 +1,233 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}; + +import org.springframework.web.bind.annotation.*; +import ${jakartaPackage}.annotation.Resource; +import org.springframework.validation.annotation.Validated; +#if ($sceneEnum.scene == 1)import org.springframework.security.access.prepost.PreAuthorize;#end + +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import ${jakartaPackage}.validation.constraints.*; +import ${jakartaPackage}.validation.*; +import ${jakartaPackage}.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import ${PageParamClassName}; +import ${PageResultClassName}; +import ${CommonResultClassName}; +import ${BeanUtils}; +import static ${CommonResultClassName}.success; + +import ${ExcelUtilsClassName}; + +import ${ApiAccessLogClassName}; +import static ${OperateTypeEnumClassName}.*; + +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +#end +import ${basePackage}.module.${table.moduleName}.service.${table.businessName}.${table.className}Service; + +@Tag(name = "${sceneEnum.name} - ${table.classComment}") +@RestController +##二级的 businessName 暂时不算在 HTTP 路径上,可以根据需要写 +@RequestMapping("/${table.moduleName}/${simpleClassName_strikeCase}") +@Validated +public class ${sceneEnum.prefixClass}${table.className}Controller { + + @Resource + private ${table.className}Service ${classNameVar}Service; + + @PostMapping("/create") + @Operation(summary = "创建${table.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')") +#end + public CommonResult<${primaryColumn.javaType}> create${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) { + return success(${classNameVar}Service.create${simpleClassName}(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新${table.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')") +#end + public CommonResult update${simpleClassName}(@Valid @RequestBody ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) { + ${classNameVar}Service.update${simpleClassName}(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除${table.classComment}") + @Parameter(name = "id", description = "编号", required = true) +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") +#end + public CommonResult delete${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { + ${classNameVar}Service.delete${simpleClassName}(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得${table.classComment}") + @Parameter(name = "id", description = "编号", required = true, example = "1024") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult<${sceneEnum.prefixClass}${table.className}RespVO> get${simpleClassName}(@RequestParam("id") ${primaryColumn.javaType} id) { + ${table.className}DO ${classNameVar} = ${classNameVar}Service.get${simpleClassName}(id); + return success(BeanUtils.toBean(${classNameVar}, ${sceneEnum.prefixClass}${table.className}RespVO.class)); + } + +#if ( $table.templateType != 2 ) + @GetMapping("/page") + @Operation(summary = "获得${table.classComment}分页") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { + PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO); + return success(BeanUtils.toBean(pageResult, ${sceneEnum.prefixClass}${table.className}RespVO.class)); + } + +## 特殊:树表专属逻辑(树不需要分页接口) +#else + @GetMapping("/list") + @Operation(summary = "获得${table.classComment}列表") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult> get${simpleClassName}List(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) { + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO); + return success(BeanUtils.toBean(list, ${sceneEnum.prefixClass}${table.className}RespVO.class)); + } + +#end + @GetMapping("/export-excel") + @Operation(summary = "导出${table.classComment} Excel") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')") +#end + @ApiAccessLog(operateType = EXPORT) +#if ( $table.templateType != 2 ) + public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${sceneEnum.prefixClass}${table.className}RespVO.class, + BeanUtils.toBean(list, ${sceneEnum.prefixClass}${table.className}RespVO.class)); + } +## 特殊:树表专属逻辑(树不需要分页接口) +#else + public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO, + HttpServletResponse response) throws IOException { + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO); + // 导出 Excel + ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${table.className}RespVO.class, + BeanUtils.toBean(list, ${table.className}RespVO.class)); + } +#end + +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +#set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) +#set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) +#set ($subClassNameVar = $subClassNameVars.get($index)) + // ==================== 子表($subTable.classComment) ==================== + +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + @GetMapping("/${subSimpleClassName_strikeCase}/page") + @Operation(summary = "获得${subTable.classComment}分页") + @Parameter(name = "${subJoinColumn.javaField}", description = "${subJoinColumn.columnComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult> get${subSimpleClassName}Page(PageParam pageReqVO, + @RequestParam("${subJoinColumn.javaField}") ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return success(${classNameVar}Service.get${subSimpleClassName}Page(pageReqVO, ${subJoinColumn.javaField})); + } + +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany ) + @GetMapping("/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}") + @Operation(summary = "获得${subTable.classComment}列表") + @Parameter(name = "${subJoinColumn.javaField}", description = "${subJoinColumn.columnComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult> get${subSimpleClassName}ListBy${SubJoinColumnName}(@RequestParam("${subJoinColumn.javaField}") ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return success(${classNameVar}Service.get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField})); + } + + #else + @GetMapping("/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}") + @Operation(summary = "获得${subTable.classComment}") + @Parameter(name = "${subJoinColumn.javaField}", description = "${subJoinColumn.columnComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult<${subTable.className}DO> get${subSimpleClassName}By${SubJoinColumnName}(@RequestParam("${subJoinColumn.javaField}") ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return success(${classNameVar}Service.get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField})); + } + + #end +#end +## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 +#if ( $table.templateType == 11 ) + @PostMapping("/${subSimpleClassName_strikeCase}/create") + @Operation(summary = "创建${subTable.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:create')") +#end + public CommonResult<${subPrimaryColumn.javaType}> create${subSimpleClassName}(@Valid @RequestBody ${subTable.className}DO ${subClassNameVar}) { + return success(${classNameVar}Service.create${subSimpleClassName}(${subClassNameVar})); + } + + @PutMapping("/${subSimpleClassName_strikeCase}/update") + @Operation(summary = "更新${subTable.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:update')") +#end + public CommonResult update${subSimpleClassName}(@Valid @RequestBody ${subTable.className}DO ${subClassNameVar}) { + ${classNameVar}Service.update${subSimpleClassName}(${subClassNameVar}); + return success(true); + } + + @DeleteMapping("/${subSimpleClassName_strikeCase}/delete") + @Parameter(name = "id", description = "编号", required = true) + @Operation(summary = "删除${subTable.classComment}") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:delete')") +#end + public CommonResult delete${subSimpleClassName}(@RequestParam("id") ${subPrimaryColumn.javaType} id) { + ${classNameVar}Service.delete${subSimpleClassName}(id); + return success(true); + } + + @GetMapping("/${subSimpleClassName_strikeCase}/get") + @Operation(summary = "获得${subTable.classComment}") + @Parameter(name = "id", description = "编号", required = true) +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult<${subTable.className}DO> get${subSimpleClassName}(@RequestParam("id") ${subPrimaryColumn.javaType} id) { + return success(${classNameVar}Service.get${subSimpleClassName}(id)); + } + +#end +#end +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/listReqVO.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/listReqVO.vm new file mode 100644 index 0000000..46b6a25 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/listReqVO.vm @@ -0,0 +1,45 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import ${PageParamClassName}; +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#break +#end +#end +## 处理 LocalDateTime 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperation} && ${column.javaType} == "LocalDateTime") +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end +## 字段模板 +#macro(columnTpl $prefix $prefixStr) + @Schema(description = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; +#end + +@Schema(description = "${sceneEnum.name} - ${table.classComment}列表 Request VO") +@Data +public class ${sceneEnum.prefixClass}${table.className}ListReqVO { + +#foreach ($column in $columns) +#if (${column.listOperation})##查询操作 +#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 + @Schema(description = "${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private ${column.javaType}[] ${column.javaField}; +#else##情况二,非 Between 的时间 + #columnTpl('', '') +#end + +#end +#end +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/pageReqVO.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/pageReqVO.vm new file mode 100644 index 0000000..003bac9 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/pageReqVO.vm @@ -0,0 +1,47 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import ${PageParamClassName}; +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#break +#end +#end +## 处理 LocalDateTime 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperationCondition} && ${column.javaType} == "LocalDateTime") +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +#break +#end +#end +## 字段模板 +#macro(columnTpl $prefix $prefixStr) + @Schema(description = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; +#end + +@Schema(description = "${sceneEnum.name} - ${table.classComment}分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ${sceneEnum.prefixClass}${table.className}PageReqVO extends PageParam { + +#foreach ($column in $columns) +#if (${column.listOperation})##查询操作 +#if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 + @Schema(description = "${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private ${column.javaType}[] ${column.javaField}; +#else##情况二,非 Between 的时间 + #columnTpl('', '') +#end + +#end +#end +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/respVO.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/respVO.vm new file mode 100644 index 0000000..24c3519 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/respVO.vm @@ -0,0 +1,53 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +## 处理 BigDecimal 字段的引入 +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#break +#end +#end +## 处理 LocalDateTime 字段的引入 +#foreach ($column in $columns) +#if (${column.listOperationResult} && ${column.javaType} == "LocalDateTime") +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +#break +#end +#end +## 处理 Excel 导出 +import com.alibaba.excel.annotation.*; +#foreach ($column in $columns) +#if ("$!column.dictType" != "")## 有设置数据字典 +import ${DictFormatClassName}; +import ${DictConvertClassName}; +#break +#end +#end + +@Schema(description = "${sceneEnum.name} - ${table.classComment} Response VO") +@Data +@ExcelIgnoreUnannotated +public class ${sceneEnum.prefixClass}${table.className}RespVO { + +## 逐个处理字段 +#foreach ($column in $columns) +#if (${column.listOperationResult}) +## 1. 处理 Swagger 注解 + @Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != ""), example = "${column.example}"#end) +## 2. 处理 Excel 导出 +#if ("$!column.dictType" != "")##处理枚举值 + @ExcelProperty(value = "${column.columnComment}", converter = DictConvert.class) + @DictFormat("${column.dictType}") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 +#else + @ExcelProperty("${column.columnComment}") +#end +## 3. 处理字段定义 + private ${column.javaType} ${column.javaField}; + +#end +#end +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/saveReqVO.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/saveReqVO.vm new file mode 100644 index 0000000..b432c75 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/controller/vo/saveReqVO.vm @@ -0,0 +1,64 @@ +package ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import ${jakartaPackage}.validation.constraints.*; +## 处理 BigDecimal 字段的引入 +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#break +#end +#end +## 处理 LocalDateTime 字段的引入 +#foreach ($column in $columns) +#if ((${column.createOperation} || ${column.updateOperation}) && ${column.javaType} == "LocalDateTime") +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +#break +#end +#end +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +#end + +@Schema(description = "${sceneEnum.name} - ${table.classComment}新增/修改 Request VO") +@Data +public class ${sceneEnum.prefixClass}${table.className}SaveReqVO { + +## 逐个处理字段 +#foreach ($column in $columns) +#if (${column.createOperation} || ${column.updateOperation}) +## 1. 处理 Swagger 注解 + @Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != ""), example = "${column.example}"#end) +## 2. 处理 Validator 参数校验 +#if (!${column.nullable} && !${column.primaryKey}) +#if (${column.javaType} == 'String') + @NotEmpty(message = "${column.columnComment}不能为空") +#else + @NotNull(message = "${column.columnComment}不能为空") +#end +#end +## 3. 处理字段定义 + private ${column.javaType} ${column.javaField}; + +#end +#end +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) + #if ( $subTable.subJoinMany) + @Schema(description = "${subTable.classComment}列表") + private List<${subTable.className}DO> ${subClassNameVars.get($index)}s; + + #else + @Schema(description = "${subTable.classComment}") + private ${subTable.className}DO ${subClassNameVars.get($index)}; + + #end +#end +#end +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do.vm new file mode 100644 index 0000000..b019d6e --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do.vm @@ -0,0 +1,52 @@ +package ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}; + +import lombok.*; +import java.util.*; +#foreach ($column in $columns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#end +#if (${column.javaType} == "LocalDateTime") +import java.time.LocalDateTime; +#end +#end +import com.baomidou.mybatisplus.annotation.*; +import ${BaseDOClassName}; + +/** + * ${table.classComment} DO + * + * @author ${table.author} + */ +@TableName("${table.tableName.toLowerCase()}") +@KeySequence("${table.tableName.toLowerCase()}_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ${table.className}DO extends BaseDO { + +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) + public static final Long ${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT = 0L; + +#end +#foreach ($column in $columns) +#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 + /** + * ${column.columnComment} + #if ("$!column.dictType" != "")##处理枚举值 + * + * 枚举 {@link TODO ${column.dictType} 对应的类} + #end + */ + #if (${column.primaryKey})##处理主键 + @TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#end + #end + private ${column.javaType} ${column.javaField}; +#end +#end + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do_sub.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do_sub.vm new file mode 100644 index 0000000..16be55e --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/do_sub.vm @@ -0,0 +1,49 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +package ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}; + +import lombok.*; +import java.util.*; +#foreach ($column in $subColumns) +#if (${column.javaType} == "BigDecimal") +import java.math.BigDecimal; +#end +#if (${column.javaType} == "LocalDateTime") +import java.time.LocalDateTime; +#end +#end +import com.baomidou.mybatisplus.annotation.*; +import ${BaseDOClassName}; + +/** + * ${subTable.classComment} DO + * + * @author ${subTable.author} + */ +@TableName("${subTable.tableName.toLowerCase()}") +@KeySequence("${subTable.tableName.toLowerCase()}_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ${subTable.className}DO extends BaseDO { + +#foreach ($column in $subColumns) +#if (!${baseDOFields.contains(${column.javaField})})##排除 BaseDO 的字段 + /** + * ${column.columnComment} + #if ("$!column.dictType" != "")##处理枚举值 + * + * 枚举 {@link TODO ${column.dictType} 对应的类} + #end + */ + #if (${column.primaryKey})##处理主键 + @TableId#if (${column.javaType} == 'String')(type = IdType.INPUT)#end + #end + private ${column.javaType} ${column.javaField}; +#end +#end + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.vm new file mode 100644 index 0000000..b98b471 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.vm @@ -0,0 +1,82 @@ +package ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}; + +import java.util.*; + +import ${PageResultClassName}; +import ${QueryWrapperClassName}; +import ${BaseMapperClassName}; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import org.apache.ibatis.annotations.Mapper; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; + +## 字段模板 +#macro(listCondition) +#foreach ($column in $columns) +#if (${column.listOperation}) +#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 +#if (${column.listOperationCondition} == "=")##情况一,= 的时候 + .eqIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "!=")##情况二,!= 的时候 + .neIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == ">")##情况三,> 的时候 + .gtIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == ">=")##情况四,>= 的时候 + .geIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "<")##情况五,< 的时候 + .ltIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "<=")##情况五,<= 的时候 + .leIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "LIKE")##情况七,Like 的时候 + .likeIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#if (${column.listOperationCondition} == "BETWEEN")##情况八,Between 的时候 + .betweenIfPresent(${table.className}DO::get${JavaField}, reqVO.get${JavaField}()) +#end +#end +#end +#end +/** + * ${table.classComment} Mapper + * + * @author ${table.author} + */ +@Mapper +public interface ${table.className}Mapper extends BaseMapperX<${table.className}DO> { + +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) + default PageResult<${table.className}DO> selectPage(${sceneEnum.prefixClass}${table.className}PageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX<${table.className}DO>() + #listCondition() + .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 + + } +#else + default List<${table.className}DO> selectList(${sceneEnum.prefixClass}${table.className}ListReqVO reqVO) { + return selectList(new LambdaQueryWrapperX<${table.className}DO>() + #listCondition() + .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 + + } +#end + +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 +#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 + default ${table.className}DO selectBy${TreeParentJavaField}And${TreeNameJavaField}(Long ${treeParentColumn.javaField}, String ${treeNameColumn.javaField}) { + return selectOne(${table.className}DO::get${TreeParentJavaField}, ${treeParentColumn.javaField}, ${table.className}DO::get${TreeNameJavaField}, ${treeNameColumn.javaField}); + } + + default Long selectCountBy${TreeParentJavaField}(${treeParentColumn.javaType} ${treeParentColumn.javaField}) { + return selectCount(${table.className}DO::get${TreeParentJavaField}, ${treeParentColumn.javaField}); + } + +#end +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.xml.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.xml.vm new file mode 100644 index 0000000..290378d --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper.xml.vm @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper_sub.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper_sub.vm new file mode 100644 index 0000000..6ccaea7 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/dal/mapper_sub.vm @@ -0,0 +1,57 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subJoinColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +package ${basePackage}.module.${subTable.moduleName}.dal.mysql.${subTable.businessName}; + +import java.util.*; + +import ${PageResultClassName}; +import ${PageParamClassName}; +import ${QueryWrapperClassName}; +import ${BaseMapperClassName}; +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +import org.apache.ibatis.annotations.Mapper; + +/** + * ${subTable.classComment} Mapper + * + * @author ${subTable.author} + */ +@Mapper +public interface ${subTable.className}Mapper extends BaseMapperX<${subTable.className}DO> { + +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + default PageResult<${subTable.className}DO> selectPage(PageParam reqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return selectPage(reqVO, new LambdaQueryWrapperX<${subTable.className}DO>() + .eq(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}) + .orderByDesc(${subTable.className}DO::getId));## 大多数情况下,id 倒序 + + } +## 主表与子表是一对一时 + #if (!$subTable.subJoinMany) + default ${subTable.className}DO selectBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return selectOne(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); + } + #end + +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany) + default List<${subTable.className}DO> selectListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return selectList(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); + } + + #else + default ${subTable.className}DO selectBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return selectOne(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); + } + + #end + #end + default int deleteBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return delete(${subTable.className}DO::get${SubJoinColumnName}, ${subJoinColumn.javaField}); + } + +} diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/enums/errorcode.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/enums/errorcode.vm new file mode 100644 index 0000000..b7e21e6 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/enums/errorcode.vm @@ -0,0 +1,22 @@ +// TODO 待办:请将下面的错误码复制到 yudao-module-${table.moduleName}-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! +// ========== ${table.classComment} TODO 补充编号 ========== +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在"); +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN = new ErrorCode(TODO 补充编号, "存在存在子${table.classComment},无法删除"); +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS = new ErrorCode(TODO 补充编号,"父级${table.classComment}不存在"); +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR = new ErrorCode(TODO 补充编号, "不能设置自己为父${table.classComment}"); +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE = new ErrorCode(TODO 补充编号, "已经存在该${treeNameColumn.columnComment}的${table.classComment}"); +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_PARENT_IS_CHILD = new ErrorCode(TODO 补充编号, "不能设置自己的子${table.className}为父${table.className}"); +#end +## 特殊:主子表专属逻辑 +#if ( $table.templateType == 11 )## 特殊:ERP 情况 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($simpleClassNameUnderlineCase = $simpleClassNameUnderlineCases.get($index)) +ErrorCode ${simpleClassNameUnderlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${subTable.classComment}不存在"); +#if ( !$subTable.subJoinMany ) +ErrorCode ${simpleClassNameUnderlineCase.toUpperCase()}_EXISTS = new ErrorCode(TODO 补充编号, "${subTable.classComment}已存在"); +#end +#end +#end \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/service.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/service.vm new file mode 100644 index 0000000..c4ee4f0 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/service.vm @@ -0,0 +1,147 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import java.util.*; +import ${jakartaPackage}.validation.*; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +#end +import ${PageResultClassName}; +import ${PageParamClassName}; + +/** + * ${table.classComment} Service 接口 + * + * @author ${table.author} + */ +public interface ${table.className}Service { + + /** + * 创建${table.classComment} + * + * @param createReqVO 创建信息 + * @return 编号 + */ + ${primaryColumn.javaType} create${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO); + + /** + * 更新${table.classComment} + * + * @param updateReqVO 更新信息 + */ + void update${simpleClassName}(@Valid ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO); + + /** + * 删除${table.classComment} + * + * @param id 编号 + */ + void delete${simpleClassName}(${primaryColumn.javaType} id); + + /** + * 获得${table.classComment} + * + * @param id 编号 + * @return ${table.classComment} + */ + ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id); + +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) + /** + * 获得${table.classComment}分页 + * + * @param pageReqVO 分页查询 + * @return ${table.classComment}分页 + */ + PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO); +#else + /** + * 获得${table.classComment}列表 + * + * @param listReqVO 查询条件 + * @return ${table.classComment}列表 + */ + List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO); +#end + +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +#set ($subClassNameVar = $subClassNameVars.get($index)) + // ==================== 子表($subTable.classComment) ==================== + +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + /** + * 获得${subTable.classComment}分页 + * + * @param pageReqVO 分页查询 + * @param ${subJoinColumn.javaField} ${subJoinColumn.columnComment} + * @return ${subTable.classComment}分页 + */ + PageResult<${subTable.className}DO> get${subSimpleClassName}Page(PageParam pageReqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}); + +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany ) + /** + * 获得${subTable.classComment}列表 + * + * @param ${subJoinColumn.javaField} ${subJoinColumn.columnComment} + * @return ${subTable.classComment}列表 + */ + List<${subTable.className}DO> get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}); + + #else + /** + * 获得${subTable.classComment} + * + * @param ${subJoinColumn.javaField} ${subJoinColumn.columnComment} + * @return ${subTable.classComment} + */ + ${subTable.className}DO get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}); + + #end +#end +## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 +#if ( $table.templateType == 11 ) + /** + * 创建${subTable.classComment} + * + * @param ${subClassNameVar} 创建信息 + * @return 编号 + */ + ${subPrimaryColumn.javaType} create${subSimpleClassName}(@Valid ${subTable.className}DO ${subClassNameVar}); + + /** + * 更新${subTable.classComment} + * + * @param ${subClassNameVar} 更新信息 + */ + void update${subSimpleClassName}(@Valid ${subTable.className}DO ${subClassNameVar}); + + /** + * 删除${subTable.classComment} + * + * @param id 编号 + */ + void delete${subSimpleClassName}(${subPrimaryColumn.javaType} id); + + /** + * 获得${subTable.classComment} + * + * @param id 编号 + * @return ${subTable.classComment} + */ + ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id); + +#end +#end +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm new file mode 100644 index 0000000..80bc71b --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/service/serviceImpl.vm @@ -0,0 +1,351 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import org.springframework.stereotype.Service; +import ${jakartaPackage}.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO; +#end +import ${PageResultClassName}; +import ${PageParamClassName}; +import ${BeanUtils}; + +import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +import ${basePackage}.module.${subTable.moduleName}.dal.mysql.${subTable.businessName}.${subTable.className}Mapper; +#end + +import static ${ServiceExceptionUtilClassName}.exception; +import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; + +/** + * ${table.classComment} Service 实现类 + * + * @author ${table.author} + */ +@Service +@Validated +public class ${table.className}ServiceImpl implements ${table.className}Service { + + @Resource + private ${table.className}Mapper ${classNameVar}Mapper; +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) + @Resource + private ${subTable.className}Mapper ${subClassNameVars.get($index)}Mapper; +#end + + @Override +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) + @Transactional(rollbackFor = Exception.class) +#end + public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO) { +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 +#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 + // 校验${treeParentColumn.columnComment}的有效性 + validateParent${simpleClassName}(null, createReqVO.get${TreeParentJavaField}()); + // 校验${treeNameColumn.columnComment}的唯一性 + validate${simpleClassName}${TreeNameJavaField}Unique(null, createReqVO.get${TreeParentJavaField}(), createReqVO.get${TreeNameJavaField}()); + +#end + // 插入 + ${table.className}DO ${classNameVar} = BeanUtils.toBean(createReqVO, ${table.className}DO.class); + ${classNameVar}Mapper.insert(${classNameVar}); +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) + + // 插入子表 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + #if ( $subTable.subJoinMany) + create${subSimpleClassName}List(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}s()); + #else + create${subSimpleClassName}(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}()); + #end +#end +#end + // 返回 + return ${classNameVar}.getId(); + } + + @Override +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 ) + @Transactional(rollbackFor = Exception.class) +#end + public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO) { + // 校验存在 + validate${simpleClassName}Exists(updateReqVO.getId()); +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 +#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 + // 校验${treeParentColumn.columnComment}的有效性 + validateParent${simpleClassName}(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}()); + // 校验${treeNameColumn.columnComment}的唯一性 + validate${simpleClassName}${TreeNameJavaField}Unique(updateReqVO.getId(), updateReqVO.get${TreeParentJavaField}(), updateReqVO.get${TreeNameJavaField}()); + +#end + // 更新 + ${table.className}DO updateObj = BeanUtils.toBean(updateReqVO, ${table.className}DO.class); + ${classNameVar}Mapper.updateById(updateObj); +## 特殊:主子表专属逻辑(非 ERP 模式) +#if ( $subTables && $subTables.size() > 0 && $table.templateType != 11) + + // 更新子表 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + #if ( $subTable.subJoinMany) + update${subSimpleClassName}List(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}s()); + #else + update${subSimpleClassName}(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}()); + #end +#end +#end + } + + @Override +## 特殊:主子表专属逻辑 +#if ( $subTables && $subTables.size() > 0) + @Transactional(rollbackFor = Exception.class) +#end + public void delete${simpleClassName}(${primaryColumn.javaType} id) { + // 校验存在 + validate${simpleClassName}Exists(id); +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($ParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 + // 校验是否有子${table.classComment} + if (${classNameVar}Mapper.selectCountBy${ParentJavaField}(id) > 0) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN); + } +#end + // 删除 + ${classNameVar}Mapper.deleteById(id); +## 特殊:主子表专属逻辑 +#if ( $subTables && $subTables.size() > 0) + + // 删除子表 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + delete${subSimpleClassName}By${SubJoinColumnName}(id); +#end +#end + } + + private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) { + if (${classNameVar}Mapper.selectById(id) == null) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + } + +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($TreeParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 +#set ($TreeNameJavaField = $treeNameColumn.javaField.substring(0,1).toUpperCase() + ${treeNameColumn.javaField.substring(1)})##首字母大写 + private void validateParent${simpleClassName}(Long id, Long ${treeParentColumn.javaField}) { + if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) { + return; + } + // 1. 不能设置自己为父${table.classComment} + if (Objects.equals(id, ${treeParentColumn.javaField})) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_ERROR); + } + // 2. 父${table.classComment}不存在 + ${simpleClassName}DO parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField}); + if (parent${simpleClassName} == null) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_NOT_EXITS); + } + // 3. 递归校验父${table.classComment},如果父${table.classComment}是自己的子${table.classComment},则报错,避免形成环路 + if (id == null) { // id 为空,说明新增,不需要考虑环路 + return; + } + for (int i = 0; i < Short.MAX_VALUE; i++) { + // 3.1 校验环路 + ${treeParentColumn.javaField} = parent${simpleClassName}.get${TreeParentJavaField}(); + if (Objects.equals(id, ${treeParentColumn.javaField})) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_PARENT_IS_CHILD); + } + // 3.2 继续递归下一级父${table.classComment} + if (${treeParentColumn.javaField} == null || ${simpleClassName}DO.${treeParentColumn_javaField_underlineCase.toUpperCase()}_ROOT.equals(${treeParentColumn.javaField})) { + break; + } + parent${simpleClassName} = ${classNameVar}Mapper.selectById(${treeParentColumn.javaField}); + if (parent${simpleClassName} == null) { + break; + } + } + } + + private void validate${simpleClassName}${TreeNameJavaField}Unique(Long id, Long ${treeParentColumn.javaField}, String ${treeNameColumn.javaField}) { + ${simpleClassName}DO ${classNameVar} = ${classNameVar}Mapper.selectBy${TreeParentJavaField}And${TreeNameJavaField}(${treeParentColumn.javaField}, ${treeNameColumn.javaField}); + if (${classNameVar} == null) { + return; + } + // 如果 id 为空,说明不用比较是否为相同 id 的${table.classComment} + if (id == null) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE); + } + if (!Objects.equals(${classNameVar}.getId(), id)) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_${treeNameColumn_javaField_underlineCase.toUpperCase()}_DUPLICATE); + } + } + +#end + @Override + public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) { + return ${classNameVar}Mapper.selectById(id); + } + +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) + @Override + public PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { + return ${classNameVar}Mapper.selectPage(pageReqVO); + } +#else + @Override + public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) { + return ${classNameVar}Mapper.selectList(listReqVO); + } +#end + +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($simpleClassNameUnderlineCase = $simpleClassNameUnderlineCases.get($index)) +#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +#set ($subClassNameVar = $subClassNameVars.get($index)) + // ==================== 子表($subTable.classComment) ==================== + +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + @Override + public PageResult<${subTable.className}DO> get${subSimpleClassName}Page(PageParam pageReqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return ${subClassNameVars.get($index)}Mapper.selectPage(pageReqVO, ${subJoinColumn.javaField}); + } + +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany ) + @Override + public List<${subTable.className}DO> get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return ${subClassNameVars.get($index)}Mapper.selectListBy${SubJoinColumnName}(${subJoinColumn.javaField}); + } + + #else + @Override + public ${subTable.className}DO get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) { + return ${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subJoinColumn.javaField}); + } + + #end +#end +## 情况一:MASTER_ERP 时,支持单个的新增、修改、删除操作 +#if ( $table.templateType == 11 ) + @Override + public ${subPrimaryColumn.javaType} create${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) { +## 特殊:一对一时,需要保证只有一条,不能重复插入 +#if ( !$subTable.subJoinMany) + // 校验是否已经存在 + if (${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subClassNameVar}.get${SubJoinColumnName}()) != null) { + throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_EXISTS); + } + // 插入 +#end + ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar}); + return ${subClassNameVar}.getId(); + } + + @Override + public void update${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) { + // 校验存在 + validate${subSimpleClassName}Exists(${subClassNameVar}.getId()); + // 更新 + ${subClassNameVar}.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 不更新 + ${subClassNameVars.get($index)}Mapper.updateById(${subClassNameVar}); + } + + @Override + public void delete${subSimpleClassName}(${subPrimaryColumn.javaType} id) { + // 校验存在 + validate${subSimpleClassName}Exists(id); + // 删除 + ${subClassNameVars.get($index)}Mapper.deleteById(id); + } + + @Override + public ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id) { + return ${subClassNameVars.get($index)}Mapper.selectById(id); + } + + private void validate${subSimpleClassName}Exists(${subPrimaryColumn.javaType} id) { + if (${subClassNameVar}Mapper.selectById(id) == null) { + throw exception(${simpleClassNameUnderlineCase.toUpperCase()}_NOT_EXISTS); + } + } + +## 情况二:非 MASTER_ERP 时,支持批量的新增、修改操作 +#else + #if ( $subTable.subJoinMany) + private void create${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) { + list.forEach(o -> o.set$SubJoinColumnName(${subJoinColumn.javaField})); + ${subClassNameVars.get($index)}Mapper.insertBatch(list); + } + + private void update${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) { + delete${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}); + list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新 + create${subSimpleClassName}List(${subJoinColumn.javaField}, list); + } + + #else + private void create${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) { + if (${subClassNameVar} == null) { + return; + } + ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField}); + ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar}); + } + + private void update${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) { + if (${subClassNameVar} == null) { + return; + } + ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField}); + ${subClassNameVar}.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 不更新 + ${subClassNameVars.get($index)}Mapper.insertOrUpdate(${subClassNameVar}); + } + + #end +#end + private void delete${subSimpleClassName}By${SubJoinColumnName}(${primaryColumn.javaType} ${subJoinColumn.javaField}) { + ${subClassNameVars.get($index)}Mapper.deleteBy${SubJoinColumnName}(${subJoinColumn.javaField}); + } + +#end +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/java/test/serviceTest.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/test/serviceTest.vm new file mode 100644 index 0000000..bfd4600 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/java/test/serviceTest.vm @@ -0,0 +1,168 @@ +package ${basePackage}.module.${table.moduleName}.service.${table.businessName}; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import ${jakartaPackage}.annotation.Resource; + +import ${baseFrameworkPackage}.test.core.ut.BaseDbUnitTest; + +import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*; +import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO; +import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper; +import ${PageResultClassName}; + +import ${jakartaPackage}.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*; +import static ${baseFrameworkPackage}.test.core.util.AssertUtils.*; +import static ${baseFrameworkPackage}.test.core.util.RandomUtils.*; +import static ${LocalDateTimeUtilsClassName}.*; +import static ${ObjectUtilsClassName}.*; +import static ${DateUtilsClassName}.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +## 字段模板 +#macro(getPageCondition $VO) + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class, o -> { // 等会查询到 + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + o.set$JavaField(null); + #end + #end + }); + ${classNameVar}Mapper.insert(db${simpleClassName}); + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + // 测试 ${column.javaField} 不匹配 + ${classNameVar}Mapper.insert(cloneIgnoreId(db${simpleClassName}, o -> o.set$JavaField(null))); + #end + #end + // 准备参数 + ${sceneEnum.prefixClass}${table.className}${VO} reqVO = new ${sceneEnum.prefixClass}${table.className}${VO}(); + #foreach ($column in $columns) + #if (${column.listOperation}) + #set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 + #if (${column.listOperationCondition} == "BETWEEN")## BETWEEN 的情况 + reqVO.set${JavaField}(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + #else + reqVO.set$JavaField(null); + #end + #end + #end +#end +/** + * {@link ${table.className}ServiceImpl} 的单元测试类 + * + * @author ${table.author} + */ +@Import(${table.className}ServiceImpl.class) +public class ${table.className}ServiceImplTest extends BaseDbUnitTest { + + @Resource + private ${table.className}ServiceImpl ${classNameVar}Service; + + @Resource + private ${table.className}Mapper ${classNameVar}Mapper; + + @Test + public void testCreate${simpleClassName}_success() { + // 准备参数 + ${sceneEnum.prefixClass}${table.className}SaveReqVO createReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class).setId(null); + + // 调用 + ${primaryColumn.javaType} ${classNameVar}Id = ${classNameVar}Service.create${simpleClassName}(createReqVO); + // 断言 + assertNotNull(${classNameVar}Id); + // 校验记录的属性是否正确 + ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(${classNameVar}Id); + assertPojoEquals(createReqVO, ${classNameVar}, "id"); + } + + @Test + public void testUpdate${simpleClassName}_success() { + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); + ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 + // 准备参数 + ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class, o -> { + o.setId(db${simpleClassName}.getId()); // 设置更新的 ID + }); + + // 调用 + ${classNameVar}Service.update${simpleClassName}(updateReqVO); + // 校验是否更新正确 + ${table.className}DO ${classNameVar} = ${classNameVar}Mapper.selectById(updateReqVO.getId()); // 获取最新的 + assertPojoEquals(updateReqVO, ${classNameVar}); + } + + @Test + public void testUpdate${simpleClassName}_notExists() { + // 准备参数 + ${sceneEnum.prefixClass}${table.className}SaveReqVO updateReqVO = randomPojo(${sceneEnum.prefixClass}${table.className}SaveReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> ${classNameVar}Service.update${simpleClassName}(updateReqVO), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + + @Test + public void testDelete${simpleClassName}_success() { + // mock 数据 + ${table.className}DO db${simpleClassName} = randomPojo(${table.className}DO.class); + ${classNameVar}Mapper.insert(db${simpleClassName});// @Sql: 先插入出一条存在的数据 + // 准备参数 + ${primaryColumn.javaType} id = db${simpleClassName}.getId(); + + // 调用 + ${classNameVar}Service.delete${simpleClassName}(id); + // 校验数据不存在了 + assertNull(${classNameVar}Mapper.selectById(id)); + } + + @Test + public void testDelete${simpleClassName}_notExists() { + // 准备参数 + ${primaryColumn.javaType} id = random${primaryColumn.javaType}Id(); + + // 调用, 并断言异常 + assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); + } + +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGet${simpleClassName}Page() { + #getPageCondition("PageReqVO") + + // 调用 + PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0)); + } +#else + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGet${simpleClassName}List() { + #getPageCondition("ListReqVO") + + // 调用 + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(db${simpleClassName}, list.get(0)); + } +#end + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/h2.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/h2.vm new file mode 100644 index 0000000..a073fdb --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/h2.vm @@ -0,0 +1,37 @@ +-- 将该建表 SQL 语句,添加到 yudao-module-${table.moduleName}-biz 模块的 test/resources/sql/create_tables.sql 文件里 +CREATE TABLE IF NOT EXISTS "${table.tableName.toLowerCase()}" ( +#foreach ($column in $columns) +#if (${column.javaType} == 'Long') + #set ($dataType='bigint') +#elseif (${column.javaType} == 'Integer') + #set ($dataType='int') +#elseif (${column.javaType} == 'Boolean') + #set ($dataType='bit') +#elseif (${column.javaType} == 'Date') + #set ($dataType='datetime') +#else + #set ($dataType='varchar') +#end + #if (${column.primaryKey})##处理主键 + "${column.javaField}"#if (${column.javaType} == 'String') ${dataType} NOT NULL#else ${dataType} NOT NULL GENERATED BY DEFAULT AS IDENTITY#end, + #else + #if (${column.columnName} == 'create_time') + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + #elseif (${column.columnName} == 'update_time') + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + #elseif (${column.columnName} == 'creator' || ${column.columnName} == 'updater') + "${column.columnName}" ${dataType} DEFAULT '', + #elseif (${column.columnName} == 'deleted') + "deleted" bit NOT NULL DEFAULT FALSE, + #elseif (${column.columnName} == 'tenant_id') + "tenant_id" bigint NOT NULL DEFAULT 0, + #else + "${column.columnName.toLowerCase()}" ${dataType}#if (${column.nullable} == false) NOT NULL#end, + #end + #end +#end + PRIMARY KEY ("${primaryColumn.columnName.toLowerCase()}") +) COMMENT '${table.tableComment}'; + +-- 将该删表 SQL 语句,添加到 yudao-module-${table.moduleName}-biz 模块的 test/resources/sql/clean.sql 文件里 +DELETE FROM "${table.tableName}"; \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/sql.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/sql.vm new file mode 100644 index 0000000..41b107d --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/sql/sql.vm @@ -0,0 +1,28 @@ +-- 菜单 SQL +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status, component_name +) +VALUES ( + '${table.classComment}管理', '', 2, 0, ${table.parentMenuId}, + '${simpleClassName_strikeCase}', '', '${table.moduleName}/${table.businessName}/index', 0, '${table.className}' +); + +-- 按钮父菜单ID +-- 暂时只支持 MySQL。如果你是 Oracle、PostgreSQL、SQLServer 的话,需要手动修改 @parentId 的部分的代码 +SELECT @parentId := LAST_INSERT_ID(); + +-- 按钮 SQL +#set ($functionNames = ['查询', '创建', '更新', '删除', '导出']) +#set ($functionOps = ['query', 'create', 'update', 'delete', 'export']) +#foreach ($functionName in $functionNames) +#set ($index = $foreach.count - 1) +INSERT INTO system_menu( + name, permission, type, sort, parent_id, + path, icon, component, status +) +VALUES ( + '${table.classComment}${functionName}', '${permissionPrefix}:${functionOps.get($index)}', 3, $foreach.count, @parentId, + '', '', '', 0 +); +#end \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/api/api.js.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/api/api.js.vm new file mode 100644 index 0000000..835c019 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/api/api.js.vm @@ -0,0 +1,141 @@ +import request from '@/utils/request' +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +// 创建${table.classComment} +export function create${simpleClassName}(data) { + return request({ + url: '${baseURL}/create', + method: 'post', + data: data + }) +} + +// 更新${table.classComment} +export function update${simpleClassName}(data) { + return request({ + url: '${baseURL}/update', + method: 'put', + data: data + }) +} + +// 删除${table.classComment} +export function delete${simpleClassName}(id) { + return request({ + url: '${baseURL}/delete?id=' + id, + method: 'delete' + }) +} + +// 获得${table.classComment} +export function get${simpleClassName}(id) { + return request({ + url: '${baseURL}/get?id=' + id, + method: 'get' + }) +} + +#if ( $table.templateType != 2 ) +// 获得${table.classComment}分页 +export function get${simpleClassName}Page(params) { + return request({ + url: '${baseURL}/page', + method: 'get', + params + }) +} +#else +// 获得${table.classComment}列表 +export function get${simpleClassName}List(params) { + return request({ + url: '${baseURL}/list', + method: 'get', + params + }) +} +#end +// 导出${table.classComment} Excel +export function export${simpleClassName}Excel(params) { + return request({ + url: '${baseURL}/export-excel', + method: 'get', + params, + responseType: 'blob' + }) +} +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) + #set ($index = $foreach.count - 1) + #set ($subSimpleClassName = $subSimpleClassNames.get($index)) + #set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 + #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 + #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + #set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) + #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) + #set ($subClassNameVar = $subClassNameVars.get($index)) + +// ==================== 子表($subTable.classComment) ==================== + ## 情况一:MASTER_ERP 时,需要分查询页子表 + #if ($table.templateType == 11) + // 获得${subTable.classComment}分页 + export function get${subSimpleClassName}Page(params) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/page', + method: 'get', + params + }) + } + ## 情况二:非 MASTER_ERP 时,需要列表查询子表 + #else + #if ($subTable.subJoinMany) + // 获得${subTable.classComment}列表 + export function get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaField}) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=' + ${subJoinColumn.javaField}, + method: 'get' + }) + } + #else + // 获得${subTable.classComment} + export function get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField}) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=' + ${subJoinColumn.javaField}, + method: 'get' + }) + } + #end + #end + ## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 + #if ($table.templateType == 11) + // 新增${subTable.classComment} + export function create${subSimpleClassName}(data) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/create', + method: 'post', + data + }) + } + // 修改${subTable.classComment} + export function update${subSimpleClassName}(data) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/update', + method: 'post', + data + }) + } + // 删除${subTable.classComment} + export function delete${subSimpleClassName}(id) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/delete?id=' + id, + method: 'delete' + }) + } + // 获得${subTable.classComment} + export function get${subSimpleClassName}(id) { + return request({ + url: '${baseURL}/${subSimpleClassName_strikeCase}/get?id=' + id, + method: 'get' + }) + } + #end +#end \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm new file mode 100644 index 0000000..99aa91a --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_erp.vue.vm @@ -0,0 +1,205 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 + + + diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm new file mode 100644 index 0000000..ca266be --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_inner.vue.vm @@ -0,0 +1,2 @@ +## 主表的 normal 和 inner 使用相同的 form 表单 +#parse("codegen/vue/views/components/form_sub_normal.vue.vm") \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm new file mode 100644 index 0000000..48a404a --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/form_sub_normal.vue.vm @@ -0,0 +1,347 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + + + diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm new file mode 100644 index 0000000..589736b --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_erp.vue.vm @@ -0,0 +1,165 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + + + diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm new file mode 100644 index 0000000..90b8e41 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/components/list_sub_inner.vue.vm @@ -0,0 +1,4 @@ +## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: +## 1)inner 使用 list 不分页,erp 使用 page 分页 +## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 +#parse("codegen/vue/views/components/list_sub_erp.vue.vm") \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/form.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/form.vue.vm new file mode 100644 index 0000000..634d05d --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/form.vue.vm @@ -0,0 +1,320 @@ + + + diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/index.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/index.vue.vm new file mode 100644 index 0000000..9c1e124 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue/views/index.vue.vm @@ -0,0 +1,340 @@ + + + diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/api/api.ts.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/api/api.ts.vm new file mode 100644 index 0000000..c3044fb --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/api/api.ts.vm @@ -0,0 +1,115 @@ +import request from '@/config/axios' +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +// ${table.classComment} VO +export interface ${simpleClassName}VO { +#foreach ($column in $columns) +#if ($column.createOperation || $column.updateOperation) +#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer" || ${column.javaType.toLowerCase()} == "short" || ${column.javaType.toLowerCase()} == "double" || ${column.javaType.toLowerCase()} == "bigdecimal") + ${column.javaField}: number // ${column.columnComment} +#elseif(${column.javaType.toLowerCase()} == "date" || ${column.javaType.toLowerCase()} == "localdate" || ${column.javaType.toLowerCase()} == "localdatetime") + ${column.javaField}: Date // ${column.columnComment} +#else + ${column.javaField}: ${column.javaType.toLowerCase()} // ${column.columnComment} +#end +#end +#end +} + +// ${table.classComment} API +export const ${simpleClassName}Api = { +#if ( $table.templateType != 2 ) + // 查询${table.classComment}分页 + get${simpleClassName}Page: async (params: any) => { + return await request.get({ url: `${baseURL}/page`, params }) + }, +#else + // 查询${table.classComment}列表 + get${simpleClassName}List: async (params) => { + return await request.get({ url: `${baseURL}/list`, params }) + }, +#end + + // 查询${table.classComment}详情 + get${simpleClassName}: async (id: number) => { + return await request.get({ url: `${baseURL}/get?id=` + id }) + }, + + // 新增${table.classComment} + create${simpleClassName}: async (data: ${simpleClassName}VO) => { + return await request.post({ url: `${baseURL}/create`, data }) + }, + + // 修改${table.classComment} + update${simpleClassName}: async (data: ${simpleClassName}VO) => { + return await request.put({ url: `${baseURL}/update`, data }) + }, + + // 删除${table.classComment} + delete${simpleClassName}: async (id: number) => { + return await request.delete({ url: `${baseURL}/delete?id=` + id }) + }, + + // 导出${table.classComment} Excel + export${simpleClassName}: async (params) => { + return await request.download({ url: `${baseURL}/export-excel`, params }) + }, +## 特殊:主子表专属逻辑 +#foreach ($subTable in $subTables) +#set ($index = $foreach.count - 1) +#set ($subSimpleClassName = $subSimpleClassNames.get($index)) +#set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段 +#set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 +#set ($subSimpleClassName_strikeCase = $subSimpleClassName_strikeCases.get($index)) +#set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index)) +#set ($subClassNameVar = $subClassNameVars.get($index)) + +// ==================== 子表($subTable.classComment) ==================== +## 情况一:MASTER_ERP 时,需要分查询页子表 +#if ( $table.templateType == 11 ) + + // 获得${subTable.classComment}分页 + get${subSimpleClassName}Page: async (params) => { + return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/page`, params }) + }, +## 情况二:非 MASTER_ERP 时,需要列表查询子表 +#else + #if ( $subTable.subJoinMany ) + + // 获得${subTable.classComment}列表 + get${subSimpleClassName}ListBy${SubJoinColumnName}: async (${subJoinColumn.javaField}) => { + return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/list-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=` + ${subJoinColumn.javaField} }) + }, + #else + + // 获得${subTable.classComment} + get${subSimpleClassName}By${SubJoinColumnName}: async (${subJoinColumn.javaField}) => { + return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/get-by-${subJoinColumn_strikeCase}?${subJoinColumn.javaField}=` + ${subJoinColumn.javaField} }) + }, + #end +#end +## 特殊:MASTER_ERP 时,支持单个的新增、修改、删除操作 +#if ( $table.templateType == 11 ) + // 新增${subTable.classComment} + create${subSimpleClassName}: async (data) => { + return await request.post({ url: `${baseURL}/${subSimpleClassName_strikeCase}/create`, data }) + }, + + // 修改${subTable.classComment} + update${subSimpleClassName}: async (data) => { + return await request.put({ url: `${baseURL}/${subSimpleClassName_strikeCase}/update`, data }) + }, + + // 删除${subTable.classComment} + delete${subSimpleClassName}: async (id: number) => { + return await request.delete({ url: `${baseURL}/${subSimpleClassName_strikeCase}/delete?id=` + id }) + }, + + // 获得${subTable.classComment} + get${subSimpleClassName}: async (id: number) => { + return await request.get({ url: `${baseURL}/${subSimpleClassName_strikeCase}/get?id=` + id }) + }, +#end +#end +} diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm new file mode 100644 index 0000000..81cd977 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_erp.vue.vm @@ -0,0 +1,204 @@ +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 + + \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm new file mode 100644 index 0000000..d8542c3 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_inner.vue.vm @@ -0,0 +1,2 @@ +## 主表的 normal 和 inner 使用相同的 form 表单 +#parse("codegen/vue3/views/components/form_sub_normal.vue.vm") \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm new file mode 100644 index 0000000..3fa1eff --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm @@ -0,0 +1,360 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + + \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm new file mode 100644 index 0000000..3f0710e --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm @@ -0,0 +1,184 @@ +#set ($subTable = $subTables.get($subIndex))##当前表 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex)) +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写 + + \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm new file mode 100644 index 0000000..3fe6488 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm @@ -0,0 +1,4 @@ +## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点: +## 1)inner 使用 list 不分页,erp 使用 page 分页 +## 2)erp 支持单个子表的新增、修改、删除,inner 不支持 +#parse("codegen/vue3/views/components/list_sub_erp.vue.vm") \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/form.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/form.vue.vm new file mode 100644 index 0000000..e37474b --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/form.vue.vm @@ -0,0 +1,300 @@ + + \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/index.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/index.vue.vm new file mode 100644 index 0000000..399b58e --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3/views/index.vue.vm @@ -0,0 +1,374 @@ + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/api/api.ts.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/api/api.ts.vm new file mode 100644 index 0000000..b7f2651 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/api/api.ts.vm @@ -0,0 +1,32 @@ +import { defHttp } from '@/utils/http/axios' +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") + +// 查询${table.classComment}列表 +export function get${simpleClassName}Page(params) { + return defHttp.get({ url: '${baseURL}/page', params }) +} + +// 查询${table.classComment}详情 +export function get${simpleClassName}(id: number) { + return defHttp.get({ url: `${baseURL}/get?id=${id}` }) +} + +// 新增${table.classComment} +export function create${simpleClassName}(data) { + return defHttp.post({ url: '${baseURL}/create', data }) +} + +// 修改${table.classComment} +export function update${simpleClassName}(data) { + return defHttp.put({ url: '${baseURL}/update', data }) +} + +// 删除${table.classComment} +export function delete${simpleClassName}(id: number) { + return defHttp.delete({ url: `${baseURL}/delete?id=${id}` }) +} + +// 导出${table.classComment} Excel +export function export${simpleClassName}(params) { + return defHttp.download({ url: '${baseURL}/export-excel', params }, '${table.classComment}.xls') +} diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/data.ts.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/data.ts.vm new file mode 100644 index 0000000..56f4e82 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/data.ts.vm @@ -0,0 +1,260 @@ +import type {BasicColumn, FormSchema} from '@/components/Table' +import {useRender} from '@/components/Table' +import {DICT_TYPE, getDictOptions} from '@/utils/dict' + +export const columns: BasicColumn[] = [ +#foreach($column in $columns) +#if ($column.listOperationResult) + #set ($dictType=$column.dictType) + #set ($javaField = $column.javaField) + #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #set ($comment=$column.columnComment) +#if ($column.javaType == "LocalDateTime")## 时间类型 + { + title: '${comment}', + dataIndex: '${javaField}', + width: 180, + customRender: ({ text }) => { + return useRender.renderDate(text) + }, + }, +#elseif("" != $column.dictType)## 数据字典 + { + title: '${comment}', + dataIndex: '${javaField}', + width: 180, + customRender: ({ text }) => { + return useRender.renderDict(text, DICT_TYPE.$dictType.toUpperCase()) + }, + }, +#else + { + title: '${comment}', + dataIndex: '${javaField}', + width: 160, + }, +#end +#end +#end +] + +export const searchFormSchema: FormSchema[] = [ +#foreach($column in $columns) +#if ($column.listOperation) + #set ($dictType=$column.dictType) + #set ($javaType = $column.javaType) + #set ($javaField = $column.javaField) + #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #set ($comment=$column.columnComment) + #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") + #set ($dictMethod = "number") + #elseif ($javaType == "String") + #set ($dictMethod = "string") + #elseif ($javaType == "Boolean") + #set ($dictMethod = "boolean") + #end + { + label: '${comment}', + field: '${javaField}', + #if ($column.htmlType == "input") + component: 'Input', + #elseif ($column.htmlType == "select") + component: 'Select', + componentProps: { + #if ("" != $dictType)## 设置了 dictType 数据字典的情况 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), + #else## 未设置 dictType 数据字典的情况 + options: [], + #end + }, + #elseif ($column.htmlType == "radio") + component: 'RadioButtonGroup', + componentProps: { + #if ("" != $dictType)## 设置了 dictType 数据字典的情况 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), + #else## 未设置 dictType 数据字典的情况 + options: [], + #end + }, + #elseif($column.htmlType == "datetime") + component: 'RangePicker', + #end + colProps: { span: 8 }, + }, +#end +#end +] + +export const createFormSchema: FormSchema[] = [ + { + label: '编号', + field: 'id', + show: false, + component: 'Input', + }, +#foreach($column in $columns) +#if ($column.createOperation) + #set ($dictType = $column.dictType) + #set ($javaType = $column.javaType) + #set ($javaField = $column.javaField) + #set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) + #set ($comment = $column.columnComment) + #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") + #set ($dictMethod = "number") + #elseif ($javaType == "String") + #set ($dictMethod = "string") + #elseif ($javaType == "Boolean") + #set ($dictMethod = "boolean") + #end +#if (!$column.primaryKey)## 忽略主键,不用在表单里 + { + label: '${comment}', + field: '${javaField}', + #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 + required: true, + #end + #if ($column.htmlType == "input") + component: 'Input', + #elseif($column.htmlType == "imageUpload")## 图片上传 + component: 'FileUpload', + componentProps: { + fileType: 'image', + maxCount: 1, + }, + #elseif($column.htmlType == "fileUpload")## 文件上传 + component: 'FileUpload', + componentProps: { + fileType: 'file', + maxCount: 1, + }, + #elseif($column.htmlType == "editor")## 文本编辑器 + component: 'Editor', + #elseif($column.htmlType == "select")## 下拉框 + component: 'Select', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "checkbox")## 多选框 + component: 'Checkbox', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "radio")## 单选框 + component: 'RadioButtonGroup', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "datetime")## 时间框 + component: 'DatePicker', + componentProps: { + showTime: true, + format: 'YYYY-MM-DD HH:mm:ss', + valueFormat: 'x', + }, + #elseif($column.htmlType == "textarea")## 文本域 + component: 'InputTextArea', + #end + }, +#end +#end +#end +] + +export const updateFormSchema: FormSchema[] = [ + { + label: '编号', + field: 'id', + show: false, + component: 'Input', + }, +#foreach($column in $columns) +#if ($column.updateOperation) +#set ($dictType = $column.dictType) +#set ($javaType = $column.javaType) +#set ($javaField = $column.javaField) +#set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#set ($comment = $column.columnComment) +#if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short") + #set ($dictMethod = "number") +#elseif ($javaType == "String") + #set ($dictMethod = "string") +#elseif ($javaType == "Boolean") + #set ($dictMethod = "boolean") +#end + #if (!$column.primaryKey)## 忽略主键,不用在表单里 + { + label: '${comment}', + field: '${javaField}', + #if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 + required: true, + #end + #if ($column.htmlType == "input") + component: 'Input', + #elseif($column.htmlType == "imageUpload")## 图片上传 + component: 'FileUpload', + componentProps: { + fileType: 'image', + maxCount: 1, + }, + #elseif($column.htmlType == "fileUpload")## 文件上传 + component: 'FileUpload', + componentProps: { + fileType: 'file', + maxCount: 1, + }, + #elseif($column.htmlType == "editor")## 文本编辑器 + component: 'Editor', + #elseif($column.htmlType == "select")## 下拉框 + component: 'Select', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "checkbox")## 多选框 + component: 'Checkbox', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "radio")## 单选框 + component: 'RadioButtonGroup', + componentProps: { + #if ("" != $dictType)## 有数据字典 + options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), '$dictMethod'), + #else##没数据字典 + options:[], + #end + }, + #elseif($column.htmlType == "datetime")## 时间框 + component: 'DatePicker', + componentProps: { + showTime: true, + format: 'YYYY-MM-DD HH:mm:ss', + valueFormat: 'x', + }, + #elseif($column.htmlType == "textarea")## 文本域 + component: 'InputTextArea', + #end + }, + #end +#end +#end +] \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/form.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/form.vue.vm new file mode 100644 index 0000000..1804365 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/form.vue.vm @@ -0,0 +1,58 @@ + + \ No newline at end of file diff --git a/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/index.vue.vm b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/index.vue.vm new file mode 100644 index 0000000..9e59b12 --- /dev/null +++ b/tashow-module/tashow-module-infra/src/main/resources/codegen/vue3_vben/views/index.vue.vm @@ -0,0 +1,92 @@ + + diff --git a/tashow-module/tashow-module-product/pom.xml b/tashow-module/tashow-module-product/pom.xml new file mode 100644 index 0000000..2096593 --- /dev/null +++ b/tashow-module/tashow-module-product/pom.xml @@ -0,0 +1,97 @@ + + 4.0.0 + + com.tashow.cloud + tashow-module + ${revision} + + + tashow-module-product + jar + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + io.swagger + swagger-models + 1.6.2 + + + + io.swagger.core.v3 + swagger-core + 2.2.20 + + + + + io.swagger.core.v3 + swagger-models + 2.2.20 + + + + com.github.jsqlparser + jsqlparser + 4.5 + + + + + com.alibaba + easyexcel + 4.0.3 + + + + + + com.tashow.cloud + tashow-framework-rpc + + + com.tashow.cloud + tashow-data-mybatis + + + com.tashow.cloud + tashow-framework-web + + + com.tashow.cloud + tashow-framework-env + + + com.tashow.cloud + tashow-framework-websocket + + + com.tashow.cloud + tashow-data-redis + + + com.tashow.cloud + tashow-framework-security + + + org.springframework.boot + spring-boot-starter-actuator + + + com.tashow.cloud + tashow-data-redis + + + diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/ProductServerApplication.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/ProductServerApplication.java new file mode 100644 index 0000000..969623d --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/ProductServerApplication.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableScheduling; + +/** + * 应用服务启动类 + */ +@SpringBootApplication +@EnableScheduling +@MapperScan("com.tashow.cloud.product.mapper") +public class ProductServerApplication { + + public static void main(String[] args) { + SpringApplication.run(ProductServerApplication.class, args); + } +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/BaseEntity.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/BaseEntity.java new file mode 100644 index 0000000..b39a557 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/BaseEntity.java @@ -0,0 +1,125 @@ +package com.tashow.cloud.product.domain; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * Entity基类 + * + * @author ruoyi + */ +public class BaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 搜索值 + */ + @JsonIgnore + @TableField(exist = false) + private String searchValue; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + /** + * 备注 + */ + private String remark; + + /** + * 请求参数 + */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + @TableField(exist = false) + private Map params; + + public String getSearchValue() { + return searchValue; + } + + public void setSearchValue(String searchValue) { + this.searchValue = searchValue; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Map getParams() { + if (params == null) { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map params) { + this.params = params; + } +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseCode.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseCode.java new file mode 100644 index 0000000..7252f6f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseCode.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ +package com.tashow.cloud.product.domain; + +/** + * @author lanhai + */ +public interface ResponseCode { + + int SUCCESS = 1; + int FAIL = -1; +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseEnum.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseEnum.java new file mode 100644 index 0000000..0101340 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseEnum.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ +package com.tashow.cloud.product.domain; + +/** + * @author FrozenWatermelon + * @date 2020/7/9 + */ +public enum ResponseEnum { + + /** + * ok + */ + OK("00000", "ok"), + SHOW_FAIL("A00001", "cw"), + + /** + * 用于直接显示提示用户的错误,内容由输入内容决定 + */ + + /** + * 用于直接显示提示系统的成功,内容由输入内容决定 + */ + SHOW_SUCCESS("A00002", ""), + + /** + * 未授权 + */ + UNAUTHORIZED("A00004", "Unauthorized"), + + /** + * 服务器出了点小差 + */ + EXCEPTION("A00005", "服务器出了点小差"), + /** + * 方法参数没有校验,内容由输入内容决定 + */ + METHOD_ARGUMENT_NOT_VALID("A00014", "方法参数没有校验"); + + private final String code; + + private final String msg; + + public String value() { + return code; + } + + public String getMsg() { + return msg; + } + + ResponseEnum(String code, String msg) { + this.code = code; + this.msg = msg; + } + + @Override + public String toString() { + return "ResponseEnum{" + "code='" + code + '\'' + ", msg='" + msg + '\'' + "} " + super.toString(); + } + +} diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml new file mode 100644 index 0000000..144eef5 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + \ No newline at end of file From d36f914aa36526a70a62cf13d9d17b81e16d1332 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Mon, 28 Jul 2025 17:51:25 +0800 Subject: [PATCH 03/22] =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=A8=A1=E5=9D=972?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tashow-module/tashow-module-product/pom.xml | 10 +++--- .../product/ProductServerApplication.java | 2 -- .../product/controller/ProdController.java | 9 +++-- .../cloud/product/mapper/ProdMapper.java | 2 +- .../cloud/product/service/ProdService.java | 2 +- .../product/service/impl/ProdServiceImpl.java | 4 +-- .../mapper/product/CategoryMapper.xml | 35 ------------------- .../resources/mapper/product/ProdMapper.xml | 6 ++-- 8 files changed, 16 insertions(+), 54 deletions(-) delete mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml diff --git a/tashow-module/tashow-module-product/pom.xml b/tashow-module/tashow-module-product/pom.xml index 2096593..24b9ddb 100644 --- a/tashow-module/tashow-module-product/pom.xml +++ b/tashow-module/tashow-module-product/pom.xml @@ -42,11 +42,11 @@ 2.2.20 - - com.github.jsqlparser - jsqlparser - 4.5 - + + + + + diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/ProductServerApplication.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/ProductServerApplication.java index 969623d..d74f92c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/ProductServerApplication.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/ProductServerApplication.java @@ -10,8 +10,6 @@ import org.springframework.scheduling.annotation.EnableScheduling; * 应用服务启动类 */ @SpringBootApplication -@EnableScheduling -@MapperScan("com.tashow.cloud.product.mapper") public class ProductServerApplication { public static void main(String[] args) { diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java index 79aeea8..c4f4e03 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java @@ -66,12 +66,11 @@ public class ProdController { return success(BeanUtils.toBean(prod, ProdRespVO.class)); } + @PermitAll @GetMapping("/page") @Operation(summary = "获得商品分页") - @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:query')") - @PermitAll - public CommonResult> getProdPage(@Valid ProdPageReqVO pageReqVO) { - PageResult pageResult = prodService.getProdPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, ProdRespVO.class)); + public CommonResult>> getProdPage(@Valid ProdPageReqVO pageReqVO) { + PageResult> pageResult = prodService.getProdPage(pageReqVO); + return success(pageResult); } } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java index ce403c8..71e94bb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java @@ -17,6 +17,6 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ProdMapper extends BaseMapperX { -// PageResult getProdPage1(ProdPageReqVO reqVO); + PageResult> getProdPageList(ProdPageReqVO reqVO); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index 7550b55..37bf98b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -52,6 +52,6 @@ public interface ProdService { * @param pageReqVO 分页查询 * @return 商品分页 */ - PageResult getProdPage(ProdPageReqVO pageReqVO); + PageResult> getProdPage(ProdPageReqVO pageReqVO); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index c2eb3ee..c6e2156 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -68,8 +68,8 @@ public class ProdServiceImpl implements ProdService { } @Override - public PageResult getProdPage(ProdPageReqVO pageReqVO) { - return null;// prodMapper.getProdPage1(pageReqVO); + public PageResult> getProdPage(ProdPageReqVO pageReqVO) { + return prodMapper.getProdPageList(pageReqVO); } } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml deleted file mode 100644 index c1a9fc1..0000000 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml +++ /dev/null @@ -1,35 +0,0 @@ - diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml index 144eef5..2d68480 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml @@ -8,7 +8,7 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - - - + \ No newline at end of file From 203749552d2c8049e6008055aaf8a406056f1c2b Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Mon, 28 Jul 2025 18:11:54 +0800 Subject: [PATCH 04/22] =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=A8=A1=E5=9D=973?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/product/controller/ProdController.java | 4 ++-- .../com/tashow/cloud/product/mapper/ProdMapper.java | 4 +++- .../com/tashow/cloud/product/service/ProdService.java | 2 +- .../cloud/product/service/impl/ProdServiceImpl.java | 10 ++++++++-- .../src/main/resources/mapper/product/ProdMapper.xml | 2 +- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java index c4f4e03..4a2f408 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java @@ -69,8 +69,8 @@ public class ProdController { @PermitAll @GetMapping("/page") @Operation(summary = "获得商品分页") - public CommonResult>> getProdPage(@Valid ProdPageReqVO pageReqVO) { - PageResult> pageResult = prodService.getProdPage(pageReqVO); + public CommonResult> getProdPage(@Valid ProdPageReqVO pageReqVO) { + PageResult pageResult = prodService.getProdPage(pageReqVO); return success(pageResult); } } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java index 71e94bb..b428c5d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java @@ -2,6 +2,8 @@ package com.tashow.cloud.product.mapper; import java.util.*; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; @@ -17,6 +19,6 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ProdMapper extends BaseMapperX { - PageResult> getProdPageList(ProdPageReqVO reqVO); + IPage getProdPageList(Page page, ProdPageReqVO reqVO); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index 37bf98b..7550b55 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -52,6 +52,6 @@ public interface ProdService { * @param pageReqVO 分页查询 * @return 商品分页 */ - PageResult> getProdPage(ProdPageReqVO pageReqVO); + PageResult getProdPage(ProdPageReqVO pageReqVO); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index c6e2156..3bf0996 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -1,10 +1,14 @@ package com.tashow.cloud.product.service.impl; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils; import com.tashow.cloud.product.dto.ProdDO; import com.tashow.cloud.product.mapper.ProdMapper; import com.tashow.cloud.product.service.ProdService; import com.tashow.cloud.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; +import lombok.val; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -68,8 +72,10 @@ public class ProdServiceImpl implements ProdService { } @Override - public PageResult> getProdPage(ProdPageReqVO pageReqVO) { - return prodMapper.getProdPageList(pageReqVO); + public PageResult getProdPage(ProdPageReqVO pageReqVO) { + IPage prodPageList = prodMapper.getProdPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO); + + return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); } } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml index 2d68480..e6e0eb6 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml @@ -8,7 +8,7 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - select * from tz_prod \ No newline at end of file From 61f5816910cbec08b770b2bf531848ad3be16f44 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Tue, 29 Jul 2025 10:25:56 +0800 Subject: [PATCH 05/22] =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=A8=A1=E5=9D=974?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logs/gateway-server.log.2025-07-28.0.gz | Bin 0 -> 437342 bytes logs/infra-server.log.2025-07-28.0.gz | Bin 0 -> 93006 bytes logs/system-server.log.2025-07-28.0.gz | Bin 0 -> 42566 bytes tashow-feign/pom.xml | 1 + tashow-feign/tashow-product-api/pom.xml | 40 ++++ .../cloud/productapi/api/package-info.java | 4 + .../cloud/productapi/enums/ApiConstants.java | 24 +++ .../productapi/enums/DictTypeConstants.java | 20 ++ .../productapi/enums/ErrorCodeConstants.java | 17 ++ tashow-module/tashow-module-product/pom.xml | 22 +- .../controller/CategoryController.java | 117 ++++++---- .../ProdAdditionalFeeDatesController.java | 97 +++++++++ .../cloud/product/domain/BaseEntity.java | 125 ----------- .../tashow/cloud/product/domain/Category.java | 142 ------------- .../com/tashow/cloud/product/domain/Prod.java | 200 ------------------ .../cloud/product/domain/ResponseCode.java | 19 -- .../cloud/product/domain/ResponseEnum.java | 69 ------ .../product/domain/ServerResponseEntity.java | 198 ----------------- .../tashow/cloud/product/dto/CategoryDO.java | 71 +++++++ .../product/dto/ProdAdditionalFeeDatesDO.java | 72 +++++++ .../cloud/product/mapper/CategoryMapper.java | 51 ++--- .../mapper/ProdAdditionalFeeDatesMapper.java | 20 ++ .../product/service/CategoryService.java | 106 ++++------ .../ProdAdditionalFeeDatesService.java | 57 +++++ .../service/impl/CategoryServiceImpl.java | 121 ++++++----- .../ProdAdditionalFeeDatesServiceImpl.java | 76 +++++++ .../product/service/impl/ProdServiceImpl.java | 1 - .../vo/category/CategoryPageReqVO.java | 52 +++++ .../product/vo/category/CategoryRespVO.java | 63 ++++++ .../vo/category/CategorySaveReqVO.java | 51 +++++ .../ProdAdditionalFeeDatesPageReqVO.java | 49 +++++ .../ProdAdditionalFeeDatesRespVO.java | 60 ++++++ .../ProdAdditionalFeeDatesSaveReqVO.java | 53 +++++ .../src/main/resources/logback-spring.xml | 76 +++++++ .../mapper/product/CategoryMapper.xml | 12 ++ .../product/ProdAdditionalFeeDatesMapper.xml | 12 ++ 36 files changed, 1140 insertions(+), 958 deletions(-) create mode 100644 logs/gateway-server.log.2025-07-28.0.gz create mode 100644 logs/infra-server.log.2025-07-28.0.gz create mode 100644 logs/system-server.log.2025-07-28.0.gz create mode 100644 tashow-feign/tashow-product-api/pom.xml create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/package-info.java create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ApiConstants.java create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/DictTypeConstants.java create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeeDatesController.java delete mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/BaseEntity.java delete mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Category.java delete mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Prod.java delete mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseCode.java delete mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseEnum.java delete mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ServerResponseEntity.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeeDatesMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeeDatesService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeeDatesServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/resources/logback-spring.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdAdditionalFeeDatesMapper.xml diff --git a/logs/gateway-server.log.2025-07-28.0.gz b/logs/gateway-server.log.2025-07-28.0.gz new file mode 100644 index 0000000000000000000000000000000000000000..f54c22a80585db24b00f0b6ff8f75aa52944075d GIT binary patch literal 437342 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%0A!& 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

?^6 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 OE=Sg#vcSd*_WuCWt2hn- literal 0 HcmV?d00001 diff --git a/logs/infra-server.log.2025-07-28.0.gz b/logs/infra-server.log.2025-07-28.0.gz new file mode 100644 index 0000000000000000000000000000000000000000..1aa75732e8e6c20916ae91045a86536cf15b6fbc GIT binary patch literal 93006 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 b7+fAX>6LD}Z%EDb_zeHZv}UAkfCBe#*Pb2G literal 0 HcmV?d00001 diff --git a/tashow-feign/pom.xml b/tashow-feign/pom.xml index feb8d49..762c0de 100644 --- a/tashow-feign/pom.xml +++ b/tashow-feign/pom.xml @@ -13,6 +13,7 @@ tashow-infra-api tashow-system-api + tashow-product-api diff --git a/tashow-feign/tashow-product-api/pom.xml b/tashow-feign/tashow-product-api/pom.xml new file mode 100644 index 0000000..782cc10 --- /dev/null +++ b/tashow-feign/tashow-product-api/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + com.tashow.cloud + tashow-feign + ${revision} + + tashow-product-api + jar + + ${project.artifactId} + + infra 模块 API,暴露给其它模块调用 + + + + + com.tashow.cloud + tashow-common + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + true + + + + diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/package-info.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/package-info.java new file mode 100644 index 0000000..608b3bb --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/package-info.java @@ -0,0 +1,4 @@ +/** + * infra API 包,定义暴露给其它模块的 API + */ +package com.tashow.cloud.productapi.api; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ApiConstants.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ApiConstants.java new file mode 100644 index 0000000..0fd09af --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ApiConstants.java @@ -0,0 +1,24 @@ +package com.tashow.cloud.productapi.enums; + + +import com.tashow.cloud.common.enums.RpcConstants; + +/** + * API 相关的枚举 + * + * @author 芋道源码 + */ +public class ApiConstants { + + /** + * 服务名 + * + * 注意,需要保证和 spring.application.name 保持一致 + */ + public static final String NAME = "product-server"; + + public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/infra"; + + public static final String VERSION = "1.0.0"; + +} diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/DictTypeConstants.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/DictTypeConstants.java new file mode 100644 index 0000000..2a68d4f --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/DictTypeConstants.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.productapi.enums; + +/** + * Infra 字典类型的枚举类 + * + * @author 芋道源码 + */ +public interface DictTypeConstants { + + String JOB_STATUS = "product_job_status"; // 定时任务状态的枚举 + String JOB_LOG_STATUS = "product_job_log_status"; // 定时任务日志状态的枚举 + + String API_ERROR_LOG_PROCESS_STATUS = "product_api_error_log_process_status"; // API 错误日志的处理状态的枚举 + + String CONFIG_TYPE = "product_config_type"; // 参数配置类型 + String BOOLEAN_STRING = "product_boolean_string"; // Boolean 是否类型 + + String OPERATE_TYPE = "product_operate_type"; // 操作类型 + +} diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java new file mode 100644 index 0000000..94780f5 --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java @@ -0,0 +1,17 @@ +package com.tashow.cloud.productapi.enums; + + +import com.tashow.cloud.common.exception.ErrorCode; + +/** + * Infra 错误码枚举类 + * + * infra 系统,使用 1-001-000-000 段 + */ +public interface ErrorCodeConstants { + + ErrorCode CATEGORY_NOT_EXISTS = new ErrorCode(10001, "产品类目不存在"); + ErrorCode PROD_NOT_EXISTS = new ErrorCode(10002, "商品不存在"); + ErrorCode PROD_ADDITIONAL_FEE_DATES_NOT_EXISTS = new ErrorCode(10003, "特殊日期附加费用规则不存在"); + ErrorCode PROD_ADDITIONAL_FEE_PERIODS_NOT_EXISTS = new ErrorCode(10004, "特殊时段附加费用规则不存在"); +} diff --git a/tashow-module/tashow-module-product/pom.xml b/tashow-module/tashow-module-product/pom.xml index 24b9ddb..d8255bc 100644 --- a/tashow-module/tashow-module-product/pom.xml +++ b/tashow-module/tashow-module-product/pom.xml @@ -42,11 +42,12 @@ 2.2.20 - - - - - + + + com.tashow.cloud + tashow-framework-monitor + + @@ -55,7 +56,16 @@ 4.0.3 - + + com.tashow.cloud + tashow-product-api + ${revision} + + + com.tashow.cloud + tashow-data-excel + ${revision} + com.tashow.cloud diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java index 351c86d..c415850 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java @@ -1,54 +1,93 @@ -/* - * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. - * - * https://www.mall4j.com/ - * - * 未经允许,不可做商业用途! - * - * 版权所有,侵权必究! - *//* - - package com.tashow.cloud.product.controller; -import com.tashow.cloud.product.domain.Category; -import com.tashow.cloud.product.domain.ServerResponseEntity; +import com.tashow.cloud.product.dto.CategoryDO; import com.tashow.cloud.product.service.CategoryService; -import jakarta.annotation.security.PermitAll; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import com.tashow.cloud.product.vo.category.*; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; -import java.util.List; +import jakarta.validation.constraints.*; +import jakarta.validation.*; +import jakarta.servlet.http.*; +import java.util.*; +import java.io.IOException; -*/ -/** - * 分类接口 - * @author lanhai - *//* +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 产品类目") @RestController -@RequestMapping("/category") +@RequestMapping("/tz/category") +@Validated public class CategoryController { - @Autowired + @Resource private CategoryService categoryService; - */ -/** - * 分类信息列表接口 - *//* - - @PermitAll - @GetMapping("/categoryInfo") - public ServerResponseEntity> categoryInfo() { - List categories = categoryService.tableCategory(1L); - return ServerResponseEntity.success(categories); + @PostMapping("/create") + @Operation(summary = "创建产品类目") + @PreAuthorize("@ss.hasPermission('tz:category:create')") + public CommonResult createCategory(@Valid @RequestBody CategorySaveReqVO createReqVO) { + return success(categoryService.createCategory(createReqVO)); } + @PutMapping("/update") + @Operation(summary = "更新产品类目") + @PreAuthorize("@ss.hasPermission('tz:category:update')") + public CommonResult updateCategory(@Valid @RequestBody CategorySaveReqVO updateReqVO) { + categoryService.updateCategory(updateReqVO); + return success(true); + } + @DeleteMapping("/delete") + @Operation(summary = "删除产品类目") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:category:delete')") + public CommonResult deleteCategory(@RequestParam("id") Long id) { + categoryService.deleteCategory(id); + return success(true); + } -} -*/ + @GetMapping("/get") + @Operation(summary = "获得产品类目") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:category:query')") + public CommonResult getCategory(@RequestParam("id") Long id) { + CategoryDO category = categoryService.getCategory(id); + return success(BeanUtils.toBean(category, CategoryRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得产品类目分页") + @PreAuthorize("@ss.hasPermission('tz:category:query')") + public CommonResult> getCategoryPage(@Valid CategoryPageReqVO pageReqVO) { + PageResult pageResult = categoryService.getCategoryPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, CategoryRespVO.class)); + } + +/* @GetMapping("/export-excel") + @Operation(summary = "导出产品类目 Excel") + @PreAuthorize("@ss.hasPermission('tz:category:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportCategoryExcel(@Valid CategoryPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = categoryService.getCategoryPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "产品类目.xls", "数据", CategoryRespVO.class, + BeanUtils.toBean(list, CategoryRespVO.class)); + }*/ + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeeDatesController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeeDatesController.java new file mode 100644 index 0000000..4776e21 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeeDatesController.java @@ -0,0 +1,97 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdAdditionalFeeDatesDO; +import com.tashow.cloud.product.service.ProdAdditionalFeeDatesService; +import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; +import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesRespVO; +import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + + +@Tag(name = "管理后台 - 特殊日期附加费用规则") +@RestController +@RequestMapping("/tz/prod-additional-fee-dates") +@Validated +public class ProdAdditionalFeeDatesController { + + @Resource + private ProdAdditionalFeeDatesService prodAdditionalFeeDatesService; + + @PostMapping("/create") + @Operation(summary = "创建特殊日期附加费用规则") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-dates:create')") + public CommonResult createProdAdditionalFeeDates(@Valid @RequestBody ProdAdditionalFeeDatesSaveReqVO createReqVO) { + return success(prodAdditionalFeeDatesService.createProdAdditionalFeeDates(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新特殊日期附加费用规则") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-dates:update')") + public CommonResult updateProdAdditionalFeeDates(@Valid @RequestBody ProdAdditionalFeeDatesSaveReqVO updateReqVO) { + prodAdditionalFeeDatesService.updateProdAdditionalFeeDates(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除特殊日期附加费用规则") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-dates:delete')") + public CommonResult deleteProdAdditionalFeeDates(@RequestParam("id") Long id) { + prodAdditionalFeeDatesService.deleteProdAdditionalFeeDates(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得特殊日期附加费用规则") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-dates:query')") + public CommonResult getProdAdditionalFeeDates(@RequestParam("id") Long id) { + ProdAdditionalFeeDatesDO prodAdditionalFeeDates = prodAdditionalFeeDatesService.getProdAdditionalFeeDates(id); + return success(BeanUtils.toBean(prodAdditionalFeeDates, ProdAdditionalFeeDatesRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得特殊日期附加费用规则分页") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-dates:query')") + public CommonResult> getProdAdditionalFeeDatesPage(@Valid ProdAdditionalFeeDatesPageReqVO pageReqVO) { + PageResult pageResult = prodAdditionalFeeDatesService.getProdAdditionalFeeDatesPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdAdditionalFeeDatesRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出特殊日期附加费用规则 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-dates:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdAdditionalFeeDatesExcel(@Valid ProdAdditionalFeeDatesPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodAdditionalFeeDatesService.getProdAdditionalFeeDatesPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "特殊日期附加费用规则.xls", "数据", ProdAdditionalFeeDatesRespVO.class, + BeanUtils.toBean(list, ProdAdditionalFeeDatesRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/BaseEntity.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/BaseEntity.java deleted file mode 100644 index b39a557..0000000 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/BaseEntity.java +++ /dev/null @@ -1,125 +0,0 @@ -package com.tashow.cloud.product.domain; - -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonInclude; - -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -/** - * Entity基类 - * - * @author ruoyi - */ -public class BaseEntity implements Serializable { - private static final long serialVersionUID = 1L; - - /** - * 搜索值 - */ - @JsonIgnore - @TableField(exist = false) - private String searchValue; - - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - - /** - * 备注 - */ - private String remark; - - /** - * 请求参数 - */ - @JsonInclude(JsonInclude.Include.NON_EMPTY) - @TableField(exist = false) - private Map params; - - public String getSearchValue() { - return searchValue; - } - - public void setSearchValue(String searchValue) { - this.searchValue = searchValue; - } - - public String getCreateBy() { - return createBy; - } - - public void setCreateBy(String createBy) { - this.createBy = createBy; - } - - public Date getCreateTime() { - return createTime; - } - - public void setCreateTime(Date createTime) { - this.createTime = createTime; - } - - public String getUpdateBy() { - return updateBy; - } - - public void setUpdateBy(String updateBy) { - this.updateBy = updateBy; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } - - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } - - public Map getParams() { - if (params == null) { - params = new HashMap<>(); - } - return params; - } - - public void setParams(Map params) { - this.params = params; - } -} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Category.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Category.java deleted file mode 100644 index 3ccde10..0000000 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Category.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. - * - * https://www.mall4j.com/ - * - * 未经允许,不可做商业用途! - * - * 版权所有,侵权必究! - *//* - - -package com.tashow.cloud.product.domain; - -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import lombok.Data; - -import java.io.Serializable; -import java.util.Date; -import java.util.List; - -*/ -/** - * @author lanhai - *//* - -@Data -@TableName("tz_category") -public class Category implements Serializable { - - */ -/** - * 类目ID - *//* - - private Long categoryId; - - */ -/** - * 店铺ID - *//* - - private Long shopId; - - */ -/** - * 父节点 - *//* - - private Long parentId; - - */ -/** - * 产品类目名称 - *//* - - private String categoryName; - - */ -/** - * 类目图标 - *//* - - private String icon; - - */ -/** - * 类目的显示图片 - *//* - - private String pic; - - */ -/** - * 类目描述 - *//* - - private String describe; - - */ -/** - * 标签 - *//* - - private String tag; - - */ -/** - * 排序 - *//* - - private Integer seq; - - */ -/** - * 默认是1,表示正常状态,0为下线状态 - *//* - - private Integer status; - - */ -/** - * 创建时间 - *//* - - private Date createTime; - - */ -/** - * 创建时间 - *//* - - private String creator; - - */ -/** - * 分类层级 - *//* - - private Integer grade; - - */ -/** - * 更新时间 - *//* - - private Date updateTime; - - */ -/** - * 修改人 - *//* - - private String updater; - - private static final long serialVersionUID = 1L; - - -} -*/ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Prod.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Prod.java deleted file mode 100644 index 4938e2b..0000000 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/Prod.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.tashow.cloud.product.domain; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Data; -/** - * 商品对象 prod - * - * @author ruoyi - * @date 2025-07-25 - */ - -@Data -@JsonInclude(JsonInclude.Include.NON_NULL) -public class Prod extends BaseEntity { -private static final long serialVersionUID=1L; - - - /** - * 产品ID - */ - @ApiModelProperty(value = "产品ID", position = 0) - private Long prodId; - - - /** - * 商品名称 - */ - @ApiModelProperty(value = "商品名称", position = 1) - private String prodName; - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "商品简称", position = 2) - private String abbreviation; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "seo标题", position = 3) - private String seoName; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "seo搜索", position = 4) - private String seoSearch; - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "关键词", position = 5) - private String keyword; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "店铺id", position = 6) - private Long shopId; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "简要描述,卖点等", position = 7) - private String brief; - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "品牌", position = 8) - private String brand; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "详细描述", position = 9) - private String content; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "商品编号", position = 10) - private String prodNumber; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "商品主图", position = 11) - private String pic; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "商品轮播图片,以,分割", position = 12) - private String imgs; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "默认是1,表示正常状态, -1表示删除, 0下架", position = 13) - private Long status; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "商品分类", position = 14) - private Long categoryId; - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "销量", position = 15) - private Long soldNum; - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "分享图", position = 16) - private String shareImage; - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "分享话术", position = 17) - private String shareContent; - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "是否开启区域0关1开", position = 18) - private Integer regionSwitch; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "是否特殊时段0关1开", position = 19) - private Integer additionalSwitch; - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "是否特殊日期(节假日周末什么的)0关1开", position = 20) - private Integer additionalFeeSwitch; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "是否紧急响应服务0关1开", position = 21) - private Integer emergencySwitch; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "是否预约0关1开", position = 22) - private Integer reservationSwitch; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "是否接单上线0关1开", position = 23) - private Integer orderLimitSwitch; - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "是否开启体重配置0关1开", position = 24) - private Integer weightSwitch; - - - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "版本 乐观锁", position = 29) - private Long version; - - /** - * 展示的权重 - */ - @ApiModelProperty(value = "展示的权重", position = 30) - private Long top; - -} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseCode.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseCode.java deleted file mode 100644 index 7252f6f..0000000 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseCode.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. - * - * https://www.mall4j.com/ - * - * 未经允许,不可做商业用途! - * - * 版权所有,侵权必究! - */ -package com.tashow.cloud.product.domain; - -/** - * @author lanhai - */ -public interface ResponseCode { - - int SUCCESS = 1; - int FAIL = -1; -} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseEnum.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseEnum.java deleted file mode 100644 index 0101340..0000000 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ResponseEnum.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. - * - * https://www.mall4j.com/ - * - * 未经允许,不可做商业用途! - * - * 版权所有,侵权必究! - */ -package com.tashow.cloud.product.domain; - -/** - * @author FrozenWatermelon - * @date 2020/7/9 - */ -public enum ResponseEnum { - - /** - * ok - */ - OK("00000", "ok"), - SHOW_FAIL("A00001", "cw"), - - /** - * 用于直接显示提示用户的错误,内容由输入内容决定 - */ - - /** - * 用于直接显示提示系统的成功,内容由输入内容决定 - */ - SHOW_SUCCESS("A00002", ""), - - /** - * 未授权 - */ - UNAUTHORIZED("A00004", "Unauthorized"), - - /** - * 服务器出了点小差 - */ - EXCEPTION("A00005", "服务器出了点小差"), - /** - * 方法参数没有校验,内容由输入内容决定 - */ - METHOD_ARGUMENT_NOT_VALID("A00014", "方法参数没有校验"); - - private final String code; - - private final String msg; - - public String value() { - return code; - } - - public String getMsg() { - return msg; - } - - ResponseEnum(String code, String msg) { - this.code = code; - this.msg = msg; - } - - @Override - public String toString() { - return "ResponseEnum{" + "code='" + code + '\'' + ", msg='" + msg + '\'' + "} " + super.toString(); - } - -} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ServerResponseEntity.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ServerResponseEntity.java deleted file mode 100644 index 0646c3f..0000000 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/domain/ServerResponseEntity.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. - * - * https://www.mall4j.com/ - * - * 未经允许,不可做商业用途! - * - * 版权所有,侵权必究! - */ - -package com.tashow.cloud.product.domain; - -import lombok.extern.slf4j.Slf4j; - -import java.io.Serializable; -import java.util.Objects; - -/** - * @author lanhai - */ -@Slf4j -public class ServerResponseEntity implements Serializable { - - /** - * 状态码 - */ - private String code; - - /** - * 信息 - */ - private String msg; - - /** - * 数据 - */ - private T data; - - /** - * 版本 - */ - private String version; - - /** - * 时间 - */ - private Long timestamp; - - private String sign; - - public String getSign() { - return sign; - } - - public void setSign(String sign) { - this.sign = sign; - } - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - public String getMsg() { - return msg; - } - - public void setMsg(String msg) { - this.msg = msg; - } - - public T getData() { - return data; - } - - public ServerResponseEntity setData(T data) { - this.data = data; - return this; - } - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public Long getTimestamp() { - return timestamp; - } - - public void setTimestamp(Long timestamp) { - this.timestamp = timestamp; - } - - public boolean isSuccess() { - return Objects.equals(ResponseEnum.OK.value(), this.code); - } - public boolean isFail() { - return !Objects.equals(ResponseEnum.OK.value(), this.code); - } - - public ServerResponseEntity() { - // 版本号 - this.version = "mall4j.v230424"; - } - - public static ServerResponseEntity success(T data) { - ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); - serverResponseEntity.setData(data); - serverResponseEntity.setCode(ResponseEnum.OK.value()); - return serverResponseEntity; - } - - public static ServerResponseEntity success() { - ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); - serverResponseEntity.setCode(ResponseEnum.OK.value()); - serverResponseEntity.setMsg(ResponseEnum.OK.getMsg()); - return serverResponseEntity; - } - - public static ServerResponseEntity success(Integer code, T data) { - return success(String.valueOf(code), data); - } - - public static ServerResponseEntity success(String code, T data) { - ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); - serverResponseEntity.setCode(code); - serverResponseEntity.setData(data); - return serverResponseEntity; - } - - /** - * 前端显示失败消息 - * @param msg 失败消息 - * @return - */ - public static ServerResponseEntity showFailMsg(String msg) { - log.error(msg); - ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); - serverResponseEntity.setMsg(msg); - serverResponseEntity.setCode(ResponseEnum.SHOW_FAIL.value()); - return serverResponseEntity; - } - - public static ServerResponseEntity fail(ResponseEnum responseEnum) { - log.error(responseEnum.toString()); - ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); - serverResponseEntity.setMsg(responseEnum.getMsg()); - serverResponseEntity.setCode(responseEnum.value()); - return serverResponseEntity; - } - - public static ServerResponseEntity fail(ResponseEnum responseEnum, T data) { - log.error(responseEnum.toString()); - ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); - serverResponseEntity.setMsg(responseEnum.getMsg()); - serverResponseEntity.setCode(responseEnum.value()); - serverResponseEntity.setData(data); - return serverResponseEntity; - } - - public static ServerResponseEntity fail(String code, String msg, T data) { - log.error(msg); - ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); - serverResponseEntity.setMsg(msg); - serverResponseEntity.setCode(code); - serverResponseEntity.setData(data); - return serverResponseEntity; - } - - public static ServerResponseEntity fail(String code, String msg) { - return fail(code, msg, null); - } - - public static ServerResponseEntity fail(Integer code, T data) { - ServerResponseEntity serverResponseEntity = new ServerResponseEntity<>(); - serverResponseEntity.setCode(String.valueOf(code)); - serverResponseEntity.setData(data); - return serverResponseEntity; - } - - @Override - public String toString() { - return "ServerResponseEntity{" + - "code='" + code + '\'' + - ", msg='" + msg + '\'' + - ", data=" + data + - ", version='" + version + '\'' + - ", timestamp=" + timestamp + - ", sign='" + sign + '\'' + - '}'; - } -} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java new file mode 100644 index 0000000..d73eeed --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java @@ -0,0 +1,71 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 产品类目 DO + * + * @author 芋道源码 + */ +@TableName("tz_category") +@KeySequence("tz_category_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CategoryDO extends BaseDO { + + /** + * 类目ID + */ + @TableId + private Long categoryId; + /** + * 店铺ID + */ + private Long shopId; + /** + * 父节点 + */ + private Long parentId; + /** + * 产品类目名称 + */ + private String categoryName; + /** + * 类目图标 + */ + private String icon; + /** + * 类目的显示图片 + */ + private String pic; + /** + * 类目描述 + */ + private String describe; + /** + * 标签 + */ + private String tag; + /** + * 排序 + */ + private Integer seq; + /** + * 默认是1,表示正常状态,0为下线状态 + */ + private Integer status; + /** + * 分类层级 + */ + private Integer grade; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java new file mode 100644 index 0000000..5013996 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java @@ -0,0 +1,72 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 特殊日期附加费用规则 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_additional_fee_dates") +@KeySequence("tz_prod_additional_fee_dates_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdAdditionalFeeDatesDO extends BaseDO { + + /** + * 特殊日期规则的唯一标识符 + */ + @TableId + private Long id; + /** + * 商品id + */ + private Long prodId; + /** + * 名称 + */ + private String name; + /** + * 日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日' + */ + private Boolean dateType; + /** + * 自定义日期时间段(JSON格式存储) + */ + private String customTimeSlots; + /** + * 指定日期(JSON格式存储) + */ + private String specificDates; + /** + * 收费方式 + */ + private String chargeMode; + /** + * 价格或上浮百分比 + */ + private BigDecimal price; + /** + * 是否启用该规则 + */ + private Boolean isEnabled; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java index 81239f8..290dda0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java @@ -1,46 +1,21 @@ -/* - * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. - * - * https://www.mall4j.com/ - * - * 未经允许,不可做商业用途! - * - * 版权所有,侵权必究! - *//* - - package com.tashow.cloud.product.mapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.tashow.cloud.product.domain.Category; +import java.util.*; -import java.util.List; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.CategoryDO; +import org.apache.ibatis.annotations.Mapper; -*/ /** - * @author lanhai - *//* - -public interface CategoryMapper extends BaseMapper { - - */ -/** - * 根据父级id获取分类列表 - * - * @param parentId - * @return - *//* - - List listByParentId(Long parentId); + * 产品类目 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface CategoryMapper extends BaseMapperX { - */ -/** - * 根据店铺id获取分类列表 - * - * @param shopId - * @return - *//* - List tableCategory(Long shopId); -}*/ +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeeDatesMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeeDatesMapper.java new file mode 100644 index 0000000..515e425 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeeDatesMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdAdditionalFeeDatesDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 特殊日期附加费用规则 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdAdditionalFeeDatesMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java index 9d72680..d0fa5a3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java @@ -1,71 +1,57 @@ -/* - * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. - * - * https://www.mall4j.com/ - * - * 未经允许,不可做商业用途! - * - * 版权所有,侵权必究! - *//* - - package com.tashow.cloud.product.service; -import com.baomidou.mybatisplus.extension.service.IService; -import com.tashow.cloud.product.domain.Category; +import java.util.*; -import java.util.List; +import com.tashow.cloud.product.dto.CategoryDO; +import com.tashow.cloud.product.vo.category.CategoryPageReqVO; +import com.tashow.cloud.product.vo.category.CategorySaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; -*/ /** - * @author lanhai - * 商品分类 - *//* + * 产品类目 Service 接口 + * + * @author 芋道源码 + */ +public interface CategoryService { -public interface CategoryService extends IService { + /** + * 创建产品类目 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createCategory(@Valid CategorySaveReqVO createReqVO); - */ -/** - * 根据parentId获取分类 - * @param parentId 0 一级分类 - * @return - *//* + /** + * 更新产品类目 + * + * @param updateReqVO 更新信息 + */ + void updateCategory(@Valid CategorySaveReqVO updateReqVO); - List listByParentId(Long parentId); + /** + * 删除产品类目 + * + * @param id 编号 + */ + void deleteCategory(Long id); + /** + * 获得产品类目 + * + * @param id 编号 + * @return 产品类目 + */ + CategoryDO getCategory(Long id); - */ -/** - * 获取用于页面表单展现的category列表,根据seq排序 - * @param shopId 店铺id - * @return - *//* + /** + * 获得产品类目分页 + * + * @param pageReqVO 分页查询 + * @return 产品类目分页 + */ + PageResult getCategoryPage(CategoryPageReqVO pageReqVO); - List tableCategory(Long shopId); - - */ -/** - * 保存分类、品牌、参数 - * @param category - *//* - - void saveCategory(Category category); - - */ -/** - * 修改分类、品牌、参数 - * @param category - *//* - - void updateCategory(Category category); - - */ -/** - * 删除分类、品牌、参数 以及分类对应的图片 - * @param categoryId 分类id - *//* - - void deleteCategory(Long categoryId); - -} -*/ +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeeDatesService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeeDatesService.java new file mode 100644 index 0000000..b4f15ce --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeeDatesService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdAdditionalFeeDatesDO; +import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; +import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 特殊日期附加费用规则 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdAdditionalFeeDatesService { + + /** + * 创建特殊日期附加费用规则 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdAdditionalFeeDates(@Valid ProdAdditionalFeeDatesSaveReqVO createReqVO); + + /** + * 更新特殊日期附加费用规则 + * + * @param updateReqVO 更新信息 + */ + void updateProdAdditionalFeeDates(@Valid ProdAdditionalFeeDatesSaveReqVO updateReqVO); + + /** + * 删除特殊日期附加费用规则 + * + * @param id 编号 + */ + void deleteProdAdditionalFeeDates(Long id); + + /** + * 获得特殊日期附加费用规则 + * + * @param id 编号 + * @return 特殊日期附加费用规则 + */ + ProdAdditionalFeeDatesDO getProdAdditionalFeeDates(Long id); + + /** + * 获得特殊日期附加费用规则分页 + * + * @param pageReqVO 分页查询 + * @return 特殊日期附加费用规则分页 + */ + PageResult getProdAdditionalFeeDatesPage(ProdAdditionalFeeDatesPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java index 0ac5676..2214cb4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java @@ -1,79 +1,78 @@ -/* - * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. - * - * https://www.mall4j.com/ - * - * 未经允许,不可做商业用途! - * - * 版权所有,侵权必究! - *//* - - package com.tashow.cloud.product.service.impl; -import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.google.common.collect.Lists; -import com.tashow.cloud.product.domain.Category; +import com.tashow.cloud.common.exception.ErrorCode; +import com.tashow.cloud.product.dto.CategoryDO; import com.tashow.cloud.product.mapper.CategoryMapper; import com.tashow.cloud.product.service.CategoryService; -import org.springframework.beans.factory.annotation.Autowired; +import com.tashow.cloud.product.vo.category.CategoryPageReqVO; +import com.tashow.cloud.product.vo.category.CategorySaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; -*/ /** - * @author lanhai - *//* - + * 产品类目 Service 实现类 + * + * @author 芋道源码 + */ @Service -public class CategoryServiceImpl extends ServiceImpl implements CategoryService { +@Validated +public class CategoryServiceImpl implements CategoryService { - @Autowired - private CategoryMapper categoryMapper; + @Resource + private CategoryMapper categoryMapper; - @Override - public List listByParentId(Long parentId) { - return categoryMapper.listByParentId(parentId); - } + @Override + public Long createCategory(CategorySaveReqVO createReqVO) { + // 插入 + CategoryDO category = BeanUtils.toBean(createReqVO, CategoryDO.class); + categoryMapper.insert(category); + // 返回 + return category.getCategoryId(); + } - @Override - public List tableCategory(Long shopId) { - return categoryMapper.tableCategory(shopId); - } + @Override + public void updateCategory(CategorySaveReqVO updateReqVO) { + // 校验存在 + validateCategoryExists(updateReqVO.getCategoryId()); + // 更新 + CategoryDO updateObj = BeanUtils.toBean(updateReqVO, CategoryDO.class); + categoryMapper.updateById(updateObj); + } - @Override - @Transactional(rollbackFor = Exception.class) - public void saveCategory(Category category) { - category.setCreateTime(new Date()); - // 保存分类信息 - categoryMapper.insert(category); - } + @Override + public void deleteCategory(Long id) { + // 校验存在 + validateCategoryExists(id); + // 删除 + categoryMapper.deleteById(id); + } - @Override - @Transactional(rollbackFor = Exception.class) - public void updateCategory(Category category) { - Category dbCategory = categoryMapper.selectById(category.getCategoryId()); - category.setUpdateTime(new Date()); - // 保存分类信息 - categoryMapper.updateById(category); - } + private void validateCategoryExists(Long id) { + if (categoryMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.CATEGORY_NOT_EXISTS); + } + } - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteCategory(Long categoryId) { - Category category = categoryMapper.selectById(categoryId); - categoryMapper.deleteById(categoryId); - } + @Override + public CategoryDO getCategory(Long id) { + return categoryMapper.selectById(id); + } + @Override + public PageResult getCategoryPage(CategoryPageReqVO pageReqVO) { + return null; + } - -} -*/ +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeeDatesServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeeDatesServiceImpl.java new file mode 100644 index 0000000..48675c4 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeeDatesServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdAdditionalFeeDatesDO; +import com.tashow.cloud.product.mapper.ProdAdditionalFeeDatesMapper; +import com.tashow.cloud.product.service.ProdAdditionalFeeDatesService; +import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; +import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 特殊日期附加费用规则 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdAdditionalFeeDatesServiceImpl implements ProdAdditionalFeeDatesService { + + @Resource + private ProdAdditionalFeeDatesMapper prodAdditionalFeeDatesMapper; + + @Override + public Long createProdAdditionalFeeDates(ProdAdditionalFeeDatesSaveReqVO createReqVO) { + // 插入 + ProdAdditionalFeeDatesDO prodAdditionalFeeDates = BeanUtils.toBean(createReqVO, ProdAdditionalFeeDatesDO.class); + prodAdditionalFeeDatesMapper.insert(prodAdditionalFeeDates); + // 返回 + return prodAdditionalFeeDates.getId(); + } + + @Override + public void updateProdAdditionalFeeDates(ProdAdditionalFeeDatesSaveReqVO updateReqVO) { + // 校验存在 + validateProdAdditionalFeeDatesExists(updateReqVO.getId()); + // 更新 + ProdAdditionalFeeDatesDO updateObj = BeanUtils.toBean(updateReqVO, ProdAdditionalFeeDatesDO.class); + prodAdditionalFeeDatesMapper.updateById(updateObj); + } + + @Override + public void deleteProdAdditionalFeeDates(Long id) { + // 校验存在 + validateProdAdditionalFeeDatesExists(id); + // 删除 + prodAdditionalFeeDatesMapper.deleteById(id); + } + + private void validateProdAdditionalFeeDatesExists(Long id) { + if (prodAdditionalFeeDatesMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_ADDITIONAL_FEE_DATES_NOT_EXISTS); + } + } + + @Override + public ProdAdditionalFeeDatesDO getProdAdditionalFeeDates(Long id) { + return prodAdditionalFeeDatesMapper.selectById(id); + } + + @Override + public PageResult getProdAdditionalFeeDatesPage(ProdAdditionalFeeDatesPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index 3bf0996..0f90d48 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -74,7 +74,6 @@ public class ProdServiceImpl implements ProdService { @Override public PageResult getProdPage(ProdPageReqVO pageReqVO) { IPage prodPageList = prodMapper.getProdPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO); - return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java new file mode 100644 index 0000000..77fe7d6 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java @@ -0,0 +1,52 @@ +package com.tashow.cloud.product.vo.category; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 产品类目分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class CategoryPageReqVO extends PageParam { + + @Schema(description = "店铺ID", example = "22369") + private Long shopId; + + @Schema(description = "父节点", example = "16509") + private Long parentId; + + @Schema(description = "产品类目名称", example = "王五") + private String categoryName; + + @Schema(description = "类目图标") + private String icon; + + @Schema(description = "类目的显示图片") + private String pic; + + @Schema(description = "类目描述") + private String describe; + + @Schema(description = "标签") + private String tag; + + @Schema(description = "排序") + private Integer seq; + + @Schema(description = "默认是1,表示正常状态,0为下线状态", example = "1") + private Integer status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "分类层级") + private Integer grade; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java new file mode 100644 index 0000000..57090dd --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java @@ -0,0 +1,63 @@ +package com.tashow.cloud.product.vo.category; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 产品类目 Response VO") +@Data +@ExcelIgnoreUnannotated +public class CategoryRespVO { + + @Schema(description = "类目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15856") + @ExcelProperty("类目ID") + private Long categoryId; + + @Schema(description = "店铺ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22369") + @ExcelProperty("店铺ID") + private Long shopId; + + @Schema(description = "父节点", requiredMode = Schema.RequiredMode.REQUIRED, example = "16509") + @ExcelProperty("父节点") + private Long parentId; + + @Schema(description = "产品类目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @ExcelProperty("产品类目名称") + private String categoryName; + + @Schema(description = "类目图标") + @ExcelProperty("类目图标") + private String icon; + + @Schema(description = "类目的显示图片") + @ExcelProperty("类目的显示图片") + private String pic; + + @Schema(description = "类目描述") + @ExcelProperty("类目描述") + private String describe; + + @Schema(description = "标签") + @ExcelProperty("标签") + private String tag; + + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("排序") + private Integer seq; + + @Schema(description = "默认是1,表示正常状态,0为下线状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("默认是1,表示正常状态,0为下线状态") + private Integer status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "分类层级", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("分类层级") + private Integer grade; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java new file mode 100644 index 0000000..a368797 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java @@ -0,0 +1,51 @@ +package com.tashow.cloud.product.vo.category; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 产品类目新增/修改 Request VO") +@Data +public class CategorySaveReqVO { + + @Schema(description = "类目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15856") + private Long categoryId; + + @Schema(description = "店铺ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22369") + @NotNull(message = "店铺ID不能为空") + private Long shopId; + + @Schema(description = "父节点", requiredMode = Schema.RequiredMode.REQUIRED, example = "16509") + @NotNull(message = "父节点不能为空") + private Long parentId; + + @Schema(description = "产品类目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @NotEmpty(message = "产品类目名称不能为空") + private String categoryName; + + @Schema(description = "类目图标") + private String icon; + + @Schema(description = "类目的显示图片") + private String pic; + + @Schema(description = "类目描述") + private String describe; + + @Schema(description = "标签") + private String tag; + + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "排序不能为空") + private Integer seq; + + @Schema(description = "默认是1,表示正常状态,0为下线状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "默认是1,表示正常状态,0为下线状态不能为空") + private Integer status; + + @Schema(description = "分类层级", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "分类层级不能为空") + private Integer grade; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java new file mode 100644 index 0000000..1d194da --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java @@ -0,0 +1,49 @@ +package com.tashow.cloud.product.vo.prodadditionalfeedates; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 特殊日期附加费用规则分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdAdditionalFeeDatesPageReqVO extends PageParam { + + @Schema(description = "商品id", example = "24324") + private Long prodId; + + @Schema(description = "名称", example = "赵六") + private String name; + + @Schema(description = "日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'", example = "2") + private Boolean dateType; + + @Schema(description = "自定义日期时间段(JSON格式存储)") + private String customTimeSlots; + + @Schema(description = "指定日期(JSON格式存储)") + private String specificDates; + + @Schema(description = "收费方式") + private String chargeMode; + + @Schema(description = "价格或上浮百分比", example = "17305") + private BigDecimal price; + + @Schema(description = "是否启用该规则") + private Boolean isEnabled; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java new file mode 100644 index 0000000..8618abc --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java @@ -0,0 +1,60 @@ +package com.tashow.cloud.product.vo.prodadditionalfeedates; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 特殊日期附加费用规则 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdAdditionalFeeDatesRespVO { + + @Schema(description = "特殊日期规则的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "1445") + @ExcelProperty("特殊日期规则的唯一标识符") + private Long id; + + @Schema(description = "商品id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24324") + @ExcelProperty("商品id") + private Long prodId; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("名称") + private String name; + + @Schema(description = "日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'") + private Boolean dateType; + + @Schema(description = "自定义日期时间段(JSON格式存储)") + @ExcelProperty("自定义日期时间段(JSON格式存储)") + private String customTimeSlots; + + @Schema(description = "指定日期(JSON格式存储)") + @ExcelProperty("指定日期(JSON格式存储)") + private String specificDates; + + @Schema(description = "收费方式", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("收费方式") + private String chargeMode; + + @Schema(description = "价格或上浮百分比", example = "17305") + @ExcelProperty("价格或上浮百分比") + private BigDecimal price; + + @Schema(description = "是否启用该规则", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用该规则") + private Boolean isEnabled; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + @ExcelProperty("更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java new file mode 100644 index 0000000..98e04f6 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java @@ -0,0 +1,53 @@ +package com.tashow.cloud.product.vo.prodadditionalfeedates; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 特殊日期附加费用规则新增/修改 Request VO") +@Data +public class ProdAdditionalFeeDatesSaveReqVO { + + @Schema(description = "特殊日期规则的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "1445") + private Long id; + + @Schema(description = "商品id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24324") + @NotNull(message = "商品id不能为空") + private Long prodId; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotEmpty(message = "名称不能为空") + private String name; + + @Schema(description = "日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'不能为空") + private Boolean dateType; + + @Schema(description = "自定义日期时间段(JSON格式存储)") + private String customTimeSlots; + + @Schema(description = "指定日期(JSON格式存储)") + private String specificDates; + + @Schema(description = "收费方式", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "收费方式不能为空") + private String chargeMode; + + @Schema(description = "价格或上浮百分比", example = "17305") + private BigDecimal price; + + @Schema(description = "是否启用该规则", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用该规则不能为空") + private Boolean isEnabled; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/logback-spring.xml b/tashow-module/tashow-module-product/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..16f0c0f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml new file mode 100644 index 0000000..8be73bc --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdAdditionalFeeDatesMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdAdditionalFeeDatesMapper.xml new file mode 100644 index 0000000..49e31a2 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdAdditionalFeeDatesMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file From baaec3f5dc09b5456a7777869b140e393adcc95c Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Tue, 29 Jul 2025 10:54:37 +0800 Subject: [PATCH 06/22] =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=A8=A1=E5=9D=975?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../productapi/enums/ErrorCodeConstants.java | 2 + .../ProdAdditionalFeePeriodsController.java | 96 ++++++++++++++++++ .../ProdEmergencyResponseController.java | 97 +++++++++++++++++++ ...dEmergencyResponseIntervalsController.java | 96 ++++++++++++++++++ .../dto/ProdAdditionalFeePeriodsDO.java | 65 +++++++++++++ .../product/dto/ProdEmergencyResponseDO.java | 63 ++++++++++++ .../dto/ProdEmergencyResponseIntervalsDO.java | 65 +++++++++++++ .../ProdAdditionalFeePeriodsMapper.java | 20 ++++ .../ProdEmergencyResponseIntervalsMapper.java | 20 ++++ .../mapper/ProdEmergencyResponseMapper.java | 20 ++++ .../ProdAdditionalFeePeriodsService.java | 57 +++++++++++ ...ProdEmergencyResponseIntervalsService.java | 57 +++++++++++ .../service/ProdEmergencyResponseService.java | 57 +++++++++++ .../ProdAdditionalFeePeriodsServiceImpl.java | 76 +++++++++++++++ ...EmergencyResponseIntervalsServiceImpl.java | 76 +++++++++++++++ .../ProdEmergencyResponseServiceImpl.java | 76 +++++++++++++++ .../ProdAdditionalFeePeriodsPageReqVO.java | 43 ++++++++ .../ProdAdditionalFeePeriodsRespVO.java | 52 ++++++++++ .../ProdAdditionalFeePeriodsSaveReqVO.java | 46 +++++++++ .../ProdEmergencyResponsePageReqVO.java | 42 ++++++++ .../ProdEmergencyResponseRespVO.java | 51 ++++++++++ .../ProdEmergencyResponseSaveReqVO.java | 42 ++++++++ ...odEmergencyResponseIntervalsPageReqVO.java | 43 ++++++++ .../ProdEmergencyResponseIntervalsRespVO.java | 52 ++++++++++ ...odEmergencyResponseIntervalsSaveReqVO.java | 46 +++++++++ .../ProdAdditionalFeePeriodsMapper.xml | 12 +++ .../product/ProdEmergencyResponseMapper.xml | 12 +++ 27 files changed, 1384 insertions(+) create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeePeriodsController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseIntervalsController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeePeriodsMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeePeriodsService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseIntervalsService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeePeriodsServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseIntervalsServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdAdditionalFeePeriodsMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseMapper.xml diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java index 94780f5..64fc66d 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java @@ -14,4 +14,6 @@ public interface ErrorCodeConstants { ErrorCode PROD_NOT_EXISTS = new ErrorCode(10002, "商品不存在"); ErrorCode PROD_ADDITIONAL_FEE_DATES_NOT_EXISTS = new ErrorCode(10003, "特殊日期附加费用规则不存在"); ErrorCode PROD_ADDITIONAL_FEE_PERIODS_NOT_EXISTS = new ErrorCode(10004, "特殊时段附加费用规则不存在"); + ErrorCode PROD_EMERGENCY_RESPONSE_NOT_EXISTS = new ErrorCode(10005, "商品紧急响应服务设置不存在"); + ErrorCode PROD_EMERGENCY_RESPONSE_INTERVALS_NOT_EXISTS = new ErrorCode(10006, "紧急响应时间区间设置不存在"); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeePeriodsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeePeriodsController.java new file mode 100644 index 0000000..d36789f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeePeriodsController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdAdditionalFeePeriodsDO; +import com.tashow.cloud.product.service.ProdAdditionalFeePeriodsService; +import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; +import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsRespVO; +import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 特殊时段附加费用规则") +@RestController +@RequestMapping("/tz/prod-additional-fee-periods") +@Validated +public class ProdAdditionalFeePeriodsController { + + @Resource + private ProdAdditionalFeePeriodsService prodAdditionalFeePeriodsService; + + @PostMapping("/create") + @Operation(summary = "创建特殊时段附加费用规则") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-periods:create')") + public CommonResult createProdAdditionalFeePeriods(@Valid @RequestBody ProdAdditionalFeePeriodsSaveReqVO createReqVO) { + return success(prodAdditionalFeePeriodsService.createProdAdditionalFeePeriods(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新特殊时段附加费用规则") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-periods:update')") + public CommonResult updateProdAdditionalFeePeriods(@Valid @RequestBody ProdAdditionalFeePeriodsSaveReqVO updateReqVO) { + prodAdditionalFeePeriodsService.updateProdAdditionalFeePeriods(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除特殊时段附加费用规则") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-periods:delete')") + public CommonResult deleteProdAdditionalFeePeriods(@RequestParam("id") Long id) { + prodAdditionalFeePeriodsService.deleteProdAdditionalFeePeriods(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得特殊时段附加费用规则") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-periods:query')") + public CommonResult getProdAdditionalFeePeriods(@RequestParam("id") Long id) { + ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods = prodAdditionalFeePeriodsService.getProdAdditionalFeePeriods(id); + return success(BeanUtils.toBean(prodAdditionalFeePeriods, ProdAdditionalFeePeriodsRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得特殊时段附加费用规则分页") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-periods:query')") + public CommonResult> getProdAdditionalFeePeriodsPage(@Valid ProdAdditionalFeePeriodsPageReqVO pageReqVO) { + PageResult pageResult = prodAdditionalFeePeriodsService.getProdAdditionalFeePeriodsPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdAdditionalFeePeriodsRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出特殊时段附加费用规则 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-additional-fee-periods:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdAdditionalFeePeriodsExcel(@Valid ProdAdditionalFeePeriodsPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodAdditionalFeePeriodsService.getProdAdditionalFeePeriodsPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "特殊时段附加费用规则.xls", "数据", ProdAdditionalFeePeriodsRespVO.class, + BeanUtils.toBean(list, ProdAdditionalFeePeriodsRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseController.java new file mode 100644 index 0000000..0909dc0 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseController.java @@ -0,0 +1,97 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; +import com.tashow.cloud.product.service.ProdEmergencyResponseService; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseRespVO; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + + +@Tag(name = "管理后台 - 商品紧急响应服务设置") +@RestController +@RequestMapping("/tz/prod-emergency-response") +@Validated +public class ProdEmergencyResponseController { + + @Resource + private ProdEmergencyResponseService prodEmergencyResponseService; + + @PostMapping("/create") + @Operation(summary = "创建商品紧急响应服务设置") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response:create')") + public CommonResult createProdEmergencyResponse(@Valid @RequestBody ProdEmergencyResponseSaveReqVO createReqVO) { + return success(prodEmergencyResponseService.createProdEmergencyResponse(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品紧急响应服务设置") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response:update')") + public CommonResult updateProdEmergencyResponse(@Valid @RequestBody ProdEmergencyResponseSaveReqVO updateReqVO) { + prodEmergencyResponseService.updateProdEmergencyResponse(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品紧急响应服务设置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response:delete')") + public CommonResult deleteProdEmergencyResponse(@RequestParam("id") Long id) { + prodEmergencyResponseService.deleteProdEmergencyResponse(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品紧急响应服务设置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response:query')") + public CommonResult getProdEmergencyResponse(@RequestParam("id") Long id) { + ProdEmergencyResponseDO prodEmergencyResponse = prodEmergencyResponseService.getProdEmergencyResponse(id); + return success(BeanUtils.toBean(prodEmergencyResponse, ProdEmergencyResponseRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品紧急响应服务设置分页") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response:query')") + public CommonResult> getProdEmergencyResponsePage(@Valid ProdEmergencyResponsePageReqVO pageReqVO) { + PageResult pageResult = prodEmergencyResponseService.getProdEmergencyResponsePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdEmergencyResponseRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品紧急响应服务设置 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdEmergencyResponseExcel(@Valid ProdEmergencyResponsePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodEmergencyResponseService.getProdEmergencyResponsePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品紧急响应服务设置.xls", "数据", ProdEmergencyResponseRespVO.class, + BeanUtils.toBean(list, ProdEmergencyResponseRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseIntervalsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseIntervalsController.java new file mode 100644 index 0000000..8bfe543 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseIntervalsController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; +import com.tashow.cloud.product.service.ProdEmergencyResponseIntervalsService; +import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; +import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsRespVO; +import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 紧急响应时间区间设置") +@RestController +@RequestMapping("/tz/prod-emergency-response-intervals") +@Validated +public class ProdEmergencyResponseIntervalsController { + + @Resource + private ProdEmergencyResponseIntervalsService prodEmergencyResponseIntervalsService; + + @PostMapping("/create") + @Operation(summary = "创建紧急响应时间区间设置") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response-intervals:create')") + public CommonResult createProdEmergencyResponseIntervals(@Valid @RequestBody ProdEmergencyResponseIntervalsSaveReqVO createReqVO) { + return success(prodEmergencyResponseIntervalsService.createProdEmergencyResponseIntervals(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新紧急响应时间区间设置") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response-intervals:update')") + public CommonResult updateProdEmergencyResponseIntervals(@Valid @RequestBody ProdEmergencyResponseIntervalsSaveReqVO updateReqVO) { + prodEmergencyResponseIntervalsService.updateProdEmergencyResponseIntervals(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除紧急响应时间区间设置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response-intervals:delete')") + public CommonResult deleteProdEmergencyResponseIntervals(@RequestParam("id") Long id) { + prodEmergencyResponseIntervalsService.deleteProdEmergencyResponseIntervals(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得紧急响应时间区间设置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response-intervals:query')") + public CommonResult getProdEmergencyResponseIntervals(@RequestParam("id") Long id) { + ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals = prodEmergencyResponseIntervalsService.getProdEmergencyResponseIntervals(id); + return success(BeanUtils.toBean(prodEmergencyResponseIntervals, ProdEmergencyResponseIntervalsRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得紧急响应时间区间设置分页") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response-intervals:query')") + public CommonResult> getProdEmergencyResponseIntervalsPage(@Valid ProdEmergencyResponseIntervalsPageReqVO pageReqVO) { + PageResult pageResult = prodEmergencyResponseIntervalsService.getProdEmergencyResponseIntervalsPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdEmergencyResponseIntervalsRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出紧急响应时间区间设置 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-emergency-response-intervals:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdEmergencyResponseIntervalsExcel(@Valid ProdEmergencyResponseIntervalsPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodEmergencyResponseIntervalsService.getProdEmergencyResponseIntervalsPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "紧急响应时间区间设置.xls", "数据", ProdEmergencyResponseIntervalsRespVO.class, + BeanUtils.toBean(list, ProdEmergencyResponseIntervalsRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java new file mode 100644 index 0000000..664c6e6 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java @@ -0,0 +1,65 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 特殊时段附加费用规则 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_additional_fee_periods") +@KeySequence("tz_prod_additional_fee_periods_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdAdditionalFeePeriodsDO extends BaseDO { + + /** + * 特殊时段规则的唯一标识符 + */ + @TableId + private Long id; + /** + * 商品ID + */ + private Long prodId; + /** + * 名称 + */ + private String name; + /** + * 特殊时段设置(JSON格式存储) + */ + private String specialTimeSlots; + /** + * 收费方式0:'固定金额',1:'基准价上浮' + */ + private Integer chargeMode; + /** + * 价格或上浮百分比 + */ + private BigDecimal price; + /** + * 浮动百分比 + */ + private BigDecimal floatingPercentage; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java new file mode 100644 index 0000000..152ed8f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java @@ -0,0 +1,63 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 商品紧急响应服务设置 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_emergency_response") +@KeySequence("tz_prod_emergency_response_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdEmergencyResponseDO extends BaseDO { + + /** + * 紧急响应服务配置的唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的商品ID + */ + private Long prodId; + /** + * 可响应时间段(JSON格式存储) + */ + private String responseTimeSlots; + /** + * 黑名自定义日期(JSON格式存储) + */ + private String blacklistedDates; + /** + * 黑名单指定日期(JSON格式存储) + */ + private String blackAppointDates; + /** + * 法定节假日是否开启0:关闭1开启 + */ + private Boolean blackHappy; + /** + * 固定休息日周末是否开启0关闭1开启 + */ + private Boolean blackWeekend; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java new file mode 100644 index 0000000..5397b3e --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java @@ -0,0 +1,65 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 紧急响应时间区间设置 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_emergency_response_intervals") +@KeySequence("tz_prod_emergency_response_intervals_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdEmergencyResponseIntervalsDO extends BaseDO { + + /** + * 响应时间区间的唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的紧急响应服务配置ID + */ + private Long configId; + /** + * 响应模式名称 + */ + private String modeName; + /** + * 响应时间(小时) + */ + private Integer responseHours; + /** + * 收费模式0:固定收费 1:浮动收费 + */ + private Boolean chargeMode; + /** + * 浮动百分比 + */ + private BigDecimal floatingPercentage; + /** + * 价格或上浮百分比 + */ + private BigDecimal price; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 最后更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeePeriodsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeePeriodsMapper.java new file mode 100644 index 0000000..2a2859c --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeePeriodsMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdAdditionalFeePeriodsDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 特殊时段附加费用规则 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdAdditionalFeePeriodsMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java new file mode 100644 index 0000000..ca38065 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 紧急响应时间区间设置 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdEmergencyResponseIntervalsMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseMapper.java new file mode 100644 index 0000000..3d0bbbd --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 商品紧急响应服务设置 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdEmergencyResponseMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeePeriodsService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeePeriodsService.java new file mode 100644 index 0000000..cad4817 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeePeriodsService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdAdditionalFeePeriodsDO; +import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; +import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 特殊时段附加费用规则 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdAdditionalFeePeriodsService { + + /** + * 创建特殊时段附加费用规则 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdAdditionalFeePeriods(@Valid ProdAdditionalFeePeriodsSaveReqVO createReqVO); + + /** + * 更新特殊时段附加费用规则 + * + * @param updateReqVO 更新信息 + */ + void updateProdAdditionalFeePeriods(@Valid ProdAdditionalFeePeriodsSaveReqVO updateReqVO); + + /** + * 删除特殊时段附加费用规则 + * + * @param id 编号 + */ + void deleteProdAdditionalFeePeriods(Long id); + + /** + * 获得特殊时段附加费用规则 + * + * @param id 编号 + * @return 特殊时段附加费用规则 + */ + ProdAdditionalFeePeriodsDO getProdAdditionalFeePeriods(Long id); + + /** + * 获得特殊时段附加费用规则分页 + * + * @param pageReqVO 分页查询 + * @return 特殊时段附加费用规则分页 + */ + PageResult getProdAdditionalFeePeriodsPage(ProdAdditionalFeePeriodsPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseIntervalsService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseIntervalsService.java new file mode 100644 index 0000000..3a1fc1d --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseIntervalsService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; +import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; +import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 紧急响应时间区间设置 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdEmergencyResponseIntervalsService { + + /** + * 创建紧急响应时间区间设置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdEmergencyResponseIntervals(@Valid ProdEmergencyResponseIntervalsSaveReqVO createReqVO); + + /** + * 更新紧急响应时间区间设置 + * + * @param updateReqVO 更新信息 + */ + void updateProdEmergencyResponseIntervals(@Valid ProdEmergencyResponseIntervalsSaveReqVO updateReqVO); + + /** + * 删除紧急响应时间区间设置 + * + * @param id 编号 + */ + void deleteProdEmergencyResponseIntervals(Long id); + + /** + * 获得紧急响应时间区间设置 + * + * @param id 编号 + * @return 紧急响应时间区间设置 + */ + ProdEmergencyResponseIntervalsDO getProdEmergencyResponseIntervals(Long id); + + /** + * 获得紧急响应时间区间设置分页 + * + * @param pageReqVO 分页查询 + * @return 紧急响应时间区间设置分页 + */ + PageResult getProdEmergencyResponseIntervalsPage(ProdEmergencyResponseIntervalsPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseService.java new file mode 100644 index 0000000..d53c836 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 商品紧急响应服务设置 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdEmergencyResponseService { + + /** + * 创建商品紧急响应服务设置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdEmergencyResponse(@Valid ProdEmergencyResponseSaveReqVO createReqVO); + + /** + * 更新商品紧急响应服务设置 + * + * @param updateReqVO 更新信息 + */ + void updateProdEmergencyResponse(@Valid ProdEmergencyResponseSaveReqVO updateReqVO); + + /** + * 删除商品紧急响应服务设置 + * + * @param id 编号 + */ + void deleteProdEmergencyResponse(Long id); + + /** + * 获得商品紧急响应服务设置 + * + * @param id 编号 + * @return 商品紧急响应服务设置 + */ + ProdEmergencyResponseDO getProdEmergencyResponse(Long id); + + /** + * 获得商品紧急响应服务设置分页 + * + * @param pageReqVO 分页查询 + * @return 商品紧急响应服务设置分页 + */ + PageResult getProdEmergencyResponsePage(ProdEmergencyResponsePageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeePeriodsServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeePeriodsServiceImpl.java new file mode 100644 index 0000000..2ffc3b7 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeePeriodsServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdAdditionalFeePeriodsDO; +import com.tashow.cloud.product.mapper.ProdAdditionalFeePeriodsMapper; +import com.tashow.cloud.product.service.ProdAdditionalFeePeriodsService; +import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; +import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 特殊时段附加费用规则 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdAdditionalFeePeriodsServiceImpl implements ProdAdditionalFeePeriodsService { + + @Resource + private ProdAdditionalFeePeriodsMapper prodAdditionalFeePeriodsMapper; + + @Override + public Long createProdAdditionalFeePeriods(ProdAdditionalFeePeriodsSaveReqVO createReqVO) { + // 插入 + ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods = BeanUtils.toBean(createReqVO, ProdAdditionalFeePeriodsDO.class); + prodAdditionalFeePeriodsMapper.insert(prodAdditionalFeePeriods); + // 返回 + return prodAdditionalFeePeriods.getId(); + } + + @Override + public void updateProdAdditionalFeePeriods(ProdAdditionalFeePeriodsSaveReqVO updateReqVO) { + // 校验存在 + validateProdAdditionalFeePeriodsExists(updateReqVO.getId()); + // 更新 + ProdAdditionalFeePeriodsDO updateObj = BeanUtils.toBean(updateReqVO, ProdAdditionalFeePeriodsDO.class); + prodAdditionalFeePeriodsMapper.updateById(updateObj); + } + + @Override + public void deleteProdAdditionalFeePeriods(Long id) { + // 校验存在 + validateProdAdditionalFeePeriodsExists(id); + // 删除 + prodAdditionalFeePeriodsMapper.deleteById(id); + } + + private void validateProdAdditionalFeePeriodsExists(Long id) { + if (prodAdditionalFeePeriodsMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_ADDITIONAL_FEE_PERIODS_NOT_EXISTS); + } + } + + @Override + public ProdAdditionalFeePeriodsDO getProdAdditionalFeePeriods(Long id) { + return prodAdditionalFeePeriodsMapper.selectById(id); + } + + @Override + public PageResult getProdAdditionalFeePeriodsPage(ProdAdditionalFeePeriodsPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseIntervalsServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseIntervalsServiceImpl.java new file mode 100644 index 0000000..b1f045c --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseIntervalsServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; +import com.tashow.cloud.product.mapper.ProdEmergencyResponseIntervalsMapper; +import com.tashow.cloud.product.service.ProdEmergencyResponseIntervalsService; +import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; +import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 紧急响应时间区间设置 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdEmergencyResponseIntervalsServiceImpl implements ProdEmergencyResponseIntervalsService { + + @Resource + private ProdEmergencyResponseIntervalsMapper prodEmergencyResponseIntervalsMapper; + + @Override + public Long createProdEmergencyResponseIntervals(ProdEmergencyResponseIntervalsSaveReqVO createReqVO) { + // 插入 + ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals = BeanUtils.toBean(createReqVO, ProdEmergencyResponseIntervalsDO.class); + prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + // 返回 + return prodEmergencyResponseIntervals.getId(); + } + + @Override + public void updateProdEmergencyResponseIntervals(ProdEmergencyResponseIntervalsSaveReqVO updateReqVO) { + // 校验存在 + validateProdEmergencyResponseIntervalsExists(updateReqVO.getId()); + // 更新 + ProdEmergencyResponseIntervalsDO updateObj = BeanUtils.toBean(updateReqVO, ProdEmergencyResponseIntervalsDO.class); + prodEmergencyResponseIntervalsMapper.updateById(updateObj); + } + + @Override + public void deleteProdEmergencyResponseIntervals(Long id) { + // 校验存在 + validateProdEmergencyResponseIntervalsExists(id); + // 删除 + prodEmergencyResponseIntervalsMapper.deleteById(id); + } + + private void validateProdEmergencyResponseIntervalsExists(Long id) { + if (prodEmergencyResponseIntervalsMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_EMERGENCY_RESPONSE_INTERVALS_NOT_EXISTS); + } + } + + @Override + public ProdEmergencyResponseIntervalsDO getProdEmergencyResponseIntervals(Long id) { + return prodEmergencyResponseIntervalsMapper.selectById(id); + } + + @Override + public PageResult getProdEmergencyResponseIntervalsPage(ProdEmergencyResponseIntervalsPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseServiceImpl.java new file mode 100644 index 0000000..cf119a2 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; +import com.tashow.cloud.product.mapper.ProdEmergencyResponseMapper; +import com.tashow.cloud.product.service.ProdEmergencyResponseService; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 商品紧急响应服务设置 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdEmergencyResponseServiceImpl implements ProdEmergencyResponseService { + + @Resource + private ProdEmergencyResponseMapper prodEmergencyResponseMapper; + + @Override + public Long createProdEmergencyResponse(ProdEmergencyResponseSaveReqVO createReqVO) { + // 插入 + ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(createReqVO, ProdEmergencyResponseDO.class); + prodEmergencyResponseMapper.insert(prodEmergencyResponse); + // 返回 + return prodEmergencyResponse.getId(); + } + + @Override + public void updateProdEmergencyResponse(ProdEmergencyResponseSaveReqVO updateReqVO) { + // 校验存在 + validateProdEmergencyResponseExists(updateReqVO.getId()); + // 更新 + ProdEmergencyResponseDO updateObj = BeanUtils.toBean(updateReqVO, ProdEmergencyResponseDO.class); + prodEmergencyResponseMapper.updateById(updateObj); + } + + @Override + public void deleteProdEmergencyResponse(Long id) { + // 校验存在 + validateProdEmergencyResponseExists(id); + // 删除 + prodEmergencyResponseMapper.deleteById(id); + } + + private void validateProdEmergencyResponseExists(Long id) { + if (prodEmergencyResponseMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_EMERGENCY_RESPONSE_NOT_EXISTS); + } + } + + @Override + public ProdEmergencyResponseDO getProdEmergencyResponse(Long id) { + return prodEmergencyResponseMapper.selectById(id); + } + + @Override + public PageResult getProdEmergencyResponsePage(ProdEmergencyResponsePageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java new file mode 100644 index 0000000..de4f4e4 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java @@ -0,0 +1,43 @@ +package com.tashow.cloud.product.vo.prodadditionalfeeperiods; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 特殊时段附加费用规则分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdAdditionalFeePeriodsPageReqVO extends PageParam { + + @Schema(description = "商品ID", example = "11100") + private Long prodId; + + @Schema(description = "名称", example = "张三") + private String name; + + @Schema(description = "特殊时段设置(JSON格式存储)") + private String specialTimeSlots; + + @Schema(description = "收费方式0:'固定金额',1:'基准价上浮'") + private Integer chargeMode; + + @Schema(description = "价格或上浮百分比", example = "20834") + private BigDecimal price; + + @Schema(description = "浮动百分比") + private BigDecimal floatingPercentage; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java new file mode 100644 index 0000000..86db206 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java @@ -0,0 +1,52 @@ +package com.tashow.cloud.product.vo.prodadditionalfeeperiods; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 特殊时段附加费用规则 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdAdditionalFeePeriodsRespVO { + + @Schema(description = "特殊时段规则的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "24746") + @ExcelProperty("特殊时段规则的唯一标识符") + private Long id; + + @Schema(description = "商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11100") + @ExcelProperty("商品ID") + private Long prodId; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("名称") + private String name; + + @Schema(description = "特殊时段设置(JSON格式存储)", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("特殊时段设置(JSON格式存储)") + private String specialTimeSlots; + + @Schema(description = "收费方式0:'固定金额',1:'基准价上浮'", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("收费方式0:'固定金额',1:'基准价上浮'") + private Integer chargeMode; + + @Schema(description = "价格或上浮百分比", example = "20834") + @ExcelProperty("价格或上浮百分比") + private BigDecimal price; + + @Schema(description = "浮动百分比") + @ExcelProperty("浮动百分比") + private BigDecimal floatingPercentage; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + @ExcelProperty("更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java new file mode 100644 index 0000000..ef9692d --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java @@ -0,0 +1,46 @@ +package com.tashow.cloud.product.vo.prodadditionalfeeperiods; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 特殊时段附加费用规则新增/修改 Request VO") +@Data +public class ProdAdditionalFeePeriodsSaveReqVO { + + @Schema(description = "特殊时段规则的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "24746") + private Long id; + + @Schema(description = "商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11100") + @NotNull(message = "商品ID不能为空") + private Long prodId; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "名称不能为空") + private String name; + + @Schema(description = "特殊时段设置(JSON格式存储)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "特殊时段设置(JSON格式存储)不能为空") + private String specialTimeSlots; + + @Schema(description = "收费方式0:'固定金额',1:'基准价上浮'", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "收费方式0:'固定金额',1:'基准价上浮'不能为空") + private Integer chargeMode; + + @Schema(description = "价格或上浮百分比", example = "20834") + private BigDecimal price; + + @Schema(description = "浮动百分比") + private BigDecimal floatingPercentage; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java new file mode 100644 index 0000000..7b9f759 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java @@ -0,0 +1,42 @@ +package com.tashow.cloud.product.vo.prodemergencyresponse; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 商品紧急响应服务设置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdEmergencyResponsePageReqVO extends PageParam { + + @Schema(description = "关联的商品ID", example = "29152") + private Long prodId; + + @Schema(description = "可响应时间段(JSON格式存储)") + private String responseTimeSlots; + + @Schema(description = "黑名自定义日期(JSON格式存储)") + private String blacklistedDates; + + @Schema(description = "黑名单指定日期(JSON格式存储)") + private String blackAppointDates; + + @Schema(description = "法定节假日是否开启0:关闭1开启") + private Boolean blackHappy; + + @Schema(description = "固定休息日周末是否开启0关闭1开启") + private Boolean blackWeekend; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java new file mode 100644 index 0000000..1c1c3c3 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java @@ -0,0 +1,51 @@ +package com.tashow.cloud.product.vo.prodemergencyresponse; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品紧急响应服务设置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdEmergencyResponseRespVO { + + @Schema(description = "紧急响应服务配置的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "7448") + @ExcelProperty("紧急响应服务配置的唯一标识符") + private Long id; + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29152") + @ExcelProperty("关联的商品ID") + private Long prodId; + + @Schema(description = "可响应时间段(JSON格式存储)") + @ExcelProperty("可响应时间段(JSON格式存储)") + private String responseTimeSlots; + + @Schema(description = "黑名自定义日期(JSON格式存储)") + @ExcelProperty("黑名自定义日期(JSON格式存储)") + private String blacklistedDates; + + @Schema(description = "黑名单指定日期(JSON格式存储)") + @ExcelProperty("黑名单指定日期(JSON格式存储)") + private String blackAppointDates; + + @Schema(description = "法定节假日是否开启0:关闭1开启") + @ExcelProperty("法定节假日是否开启0:关闭1开启") + private Boolean blackHappy; + + @Schema(description = "固定休息日周末是否开启0关闭1开启") + @ExcelProperty("固定休息日周末是否开启0关闭1开启") + private Boolean blackWeekend; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + @ExcelProperty("更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java new file mode 100644 index 0000000..fbca04f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java @@ -0,0 +1,42 @@ +package com.tashow.cloud.product.vo.prodemergencyresponse; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 商品紧急响应服务设置新增/修改 Request VO") +@Data +public class ProdEmergencyResponseSaveReqVO { + + @Schema(description = "紧急响应服务配置的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "7448") + private Long id; + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29152") + @NotNull(message = "关联的商品ID不能为空") + private Long prodId; + + @Schema(description = "可响应时间段(JSON格式存储)") + private String responseTimeSlots; + + @Schema(description = "黑名自定义日期(JSON格式存储)") + private String blacklistedDates; + + @Schema(description = "黑名单指定日期(JSON格式存储)") + private String blackAppointDates; + + @Schema(description = "法定节假日是否开启0:关闭1开启") + private Boolean blackHappy; + + @Schema(description = "固定休息日周末是否开启0关闭1开启") + private Boolean blackWeekend; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java new file mode 100644 index 0000000..0fe313c --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java @@ -0,0 +1,43 @@ +package com.tashow.cloud.product.vo.prodemergencyresponseintervals; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 紧急响应时间区间设置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdEmergencyResponseIntervalsPageReqVO extends PageParam { + + @Schema(description = "关联的紧急响应服务配置ID", example = "5737") + private Long configId; + + @Schema(description = "响应模式名称", example = "王五") + private String modeName; + + @Schema(description = "响应时间(小时)") + private Integer responseHours; + + @Schema(description = "收费模式0:固定收费 1:浮动收费") + private Boolean chargeMode; + + @Schema(description = "浮动百分比") + private BigDecimal floatingPercentage; + + @Schema(description = "价格或上浮百分比", example = "17810") + private BigDecimal price; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java new file mode 100644 index 0000000..6d9975a --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java @@ -0,0 +1,52 @@ +package com.tashow.cloud.product.vo.prodemergencyresponseintervals; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 紧急响应时间区间设置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdEmergencyResponseIntervalsRespVO { + + @Schema(description = "响应时间区间的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "29650") + @ExcelProperty("响应时间区间的唯一标识符") + private Long id; + + @Schema(description = "关联的紧急响应服务配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5737") + @ExcelProperty("关联的紧急响应服务配置ID") + private Long configId; + + @Schema(description = "响应模式名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @ExcelProperty("响应模式名称") + private String modeName; + + @Schema(description = "响应时间(小时)", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("响应时间(小时)") + private Integer responseHours; + + @Schema(description = "收费模式0:固定收费 1:浮动收费", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("收费模式0:固定收费 1:浮动收费") + private Boolean chargeMode; + + @Schema(description = "浮动百分比") + @ExcelProperty("浮动百分比") + private BigDecimal floatingPercentage; + + @Schema(description = "价格或上浮百分比", example = "17810") + @ExcelProperty("价格或上浮百分比") + private BigDecimal price; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + @ExcelProperty("最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java new file mode 100644 index 0000000..a77d042 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java @@ -0,0 +1,46 @@ +package com.tashow.cloud.product.vo.prodemergencyresponseintervals; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 紧急响应时间区间设置新增/修改 Request VO") +@Data +public class ProdEmergencyResponseIntervalsSaveReqVO { + + @Schema(description = "响应时间区间的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "29650") + private Long id; + + @Schema(description = "关联的紧急响应服务配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5737") + @NotNull(message = "关联的紧急响应服务配置ID不能为空") + private Long configId; + + @Schema(description = "响应模式名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @NotEmpty(message = "响应模式名称不能为空") + private String modeName; + + @Schema(description = "响应时间(小时)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "响应时间(小时)不能为空") + private Integer responseHours; + + @Schema(description = "收费模式0:固定收费 1:浮动收费", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "收费模式0:固定收费 1:浮动收费不能为空") + private Boolean chargeMode; + + @Schema(description = "浮动百分比") + private BigDecimal floatingPercentage; + + @Schema(description = "价格或上浮百分比", example = "17810") + private BigDecimal price; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdAdditionalFeePeriodsMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdAdditionalFeePeriodsMapper.xml new file mode 100644 index 0000000..80bd3d5 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdAdditionalFeePeriodsMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseMapper.xml new file mode 100644 index 0000000..c17a966 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file From cdaeb3d9080698d91670582f613b39f12e154fcd Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Tue, 29 Jul 2025 16:54:57 +0800 Subject: [PATCH 07/22] =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=A8=A1=E5=9D=976?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../productapi/enums/ErrorCodeConstants.java | 12 ++ .../controller/ProdPropController.java | 96 +++++++++++++ .../controller/ProdPropValueController.java | 97 +++++++++++++ .../ProdReservationConfigController.java | 96 +++++++++++++ .../ProdServiceAreaRelevanceController.java | 96 +++++++++++++ .../ProdServiceAreasController.java | 96 +++++++++++++ .../ProdServiceOverAreaRulesController.java | 97 +++++++++++++ .../controller/ProdTagsController.java | 96 +++++++++++++ .../ProdWeightRangePricesController.java | 96 +++++++++++++ .../ProductOrderLimitController.java | 97 +++++++++++++ .../controller/ShopDetailController.java | 96 +++++++++++++ .../product/controller/SkuController.java | 96 +++++++++++++ .../SkuServiceDeliverController.java | 96 +++++++++++++ .../tashow/cloud/product/dto/ProdPropDO.java | 49 +++++++ .../cloud/product/dto/ProdPropValueDO.java | 41 ++++++ .../product/dto/ProdReservationConfigDO.java | 83 +++++++++++ .../dto/ProdServiceAreaRelevanceDO.java | 34 +++++ .../cloud/product/dto/ProdServiceAreasDO.java | 34 +++++ .../dto/ProdServiceOverAreaRulesDO.java | 52 +++++++ .../tashow/cloud/product/dto/ProdTagsDO.java | 35 +++++ .../product/dto/ProdWeightRangePricesDO.java | 56 ++++++++ .../product/dto/ProductOrderLimitDO.java | 51 +++++++ .../cloud/product/dto/ShopDetailDO.java | 129 +++++++++++++++++ .../com/tashow/cloud/product/dto/SkuDO.java | 136 ++++++++++++++++++ .../product/dto/SkuServiceDeliverDO.java | 76 ++++++++++ .../cloud/product/mapper/ProdPropMapper.java | 20 +++ .../product/mapper/ProdPropValueMapper.java | 20 +++ .../mapper/ProdReservationConfigMapper.java | 20 +++ .../ProdServiceAreaRelevanceMapper.java | 19 +++ .../mapper/ProdServiceAreasMapper.java | 20 +++ .../ProdServiceOverAreaRulesMapper.java | 20 +++ .../cloud/product/mapper/ProdTagsMapper.java | 19 +++ .../mapper/ProdWeightRangePricesMapper.java | 20 +++ .../mapper/ProductOrderLimitMapper.java | 20 +++ .../product/mapper/ShopDetailMapper.java | 20 +++ .../cloud/product/mapper/SkuMapper.java | 20 +++ .../mapper/SkuServiceDeliverMapper.java | 20 +++ .../product/service/ProdPropService.java | 57 ++++++++ .../product/service/ProdPropValueService.java | 57 ++++++++ .../service/ProdReservationConfigService.java | 57 ++++++++ .../ProdServiceAreaRelevanceService.java | 57 ++++++++ .../service/ProdServiceAreasService.java | 57 ++++++++ .../ProdServiceOverAreaRulesService.java | 57 ++++++++ .../product/service/ProdTagsService.java | 57 ++++++++ .../service/ProdWeightRangePricesService.java | 57 ++++++++ .../service/ProductOrderLimitService.java | 57 ++++++++ .../product/service/ShopDetailService.java | 57 ++++++++ .../cloud/product/service/SkuService.java | 57 ++++++++ .../service/SkuServiceDeliverService.java | 57 ++++++++ .../service/impl/ProdPropServiceImpl.java | 76 ++++++++++ .../impl/ProdPropValueServiceImpl.java | 73 ++++++++++ .../ProdReservationConfigServiceImpl.java | 76 ++++++++++ .../ProdServiceAreaRelevanceServiceImpl.java | 76 ++++++++++ .../impl/ProdServiceAreasServiceImpl.java | 76 ++++++++++ .../ProdServiceOverAreaRulesServiceImpl.java | 76 ++++++++++ .../service/impl/ProdTagsServiceImpl.java | 73 ++++++++++ .../ProdWeightRangePricesServiceImpl.java | 76 ++++++++++ .../impl/ProductOrderLimitServiceImpl.java | 74 ++++++++++ .../service/impl/ShopDetailServiceImpl.java | 76 ++++++++++ .../impl/SkuServiceDeliverServiceImpl.java | 76 ++++++++++ .../product/service/impl/SkuServiceImpl.java | 76 ++++++++++ .../vo/prodprop/ProdPropPageReqVO.java | 29 ++++ .../product/vo/prodprop/ProdPropRespVO.java | 37 +++++ .../vo/prodprop/ProdPropSaveReqVO.java | 30 ++++ .../prodpropvalue/ProdPropValuePageReqVO.java | 23 +++ .../vo/prodpropvalue/ProdPropValueRespVO.java | 29 ++++ .../prodpropvalue/ProdPropValueSaveReqVO.java | 24 ++++ .../ProdReservationConfigPageReqVO.java | 57 ++++++++ .../ProdReservationConfigRespVO.java | 71 +++++++++ .../ProdReservationConfigSaveReqVO.java | 61 ++++++++ .../ProdServiceAreaRelevancePageReqVO.java | 14 ++ .../ProdServiceAreaRelevanceRespVO.java | 21 +++ .../ProdServiceAreaRelevanceSaveReqVO.java | 18 +++ .../ProdServiceAreasPageReqVO.java | 25 ++++ .../ProdServiceAreasRespVO.java | 27 ++++ .../ProdServiceAreasSaveReqVO.java | 19 +++ .../ProdServiceOverAreaRulesPageReqVO.java | 34 +++++ .../ProdServiceOverAreaRulesRespVO.java | 40 ++++++ .../ProdServiceOverAreaRulesSaveReqVO.java | 35 +++++ .../vo/prodtags/ProdTagsPageReqVO.java | 22 +++ .../product/vo/prodtags/ProdTagsRespVO.java | 27 ++++ .../vo/prodtags/ProdTagsSaveReqVO.java | 18 +++ .../ProductOrderLimitPageReqVO.java | 33 +++++ .../ProductOrderLimitRespVO.java | 39 +++++ .../ProductOrderLimitSaveReqVO.java | 35 +++++ .../ProdWeightRangePricesPageReqVO.java | 37 +++++ .../ProdWeightRangePricesRespVO.java | 44 ++++++ .../ProdWeightRangePricesSaveReqVO.java | 40 ++++++ .../vo/shopdetail/ShopDetailPageReqVO.java | 96 +++++++++++++ .../vo/shopdetail/ShopDetailRespVO.java | 120 ++++++++++++++++ .../vo/shopdetail/ShopDetailSaveReqVO.java | 88 ++++++++++++ .../cloud/product/vo/sku/SkuPageReqVO.java | 98 +++++++++++++ .../cloud/product/vo/sku/SkuRespVO.java | 124 ++++++++++++++++ .../cloud/product/vo/sku/SkuSaveReqVO.java | 93 ++++++++++++ .../SkuServiceDeliverPageReqVO.java | 52 +++++++ .../SkuServiceDeliverRespVO.java | 64 +++++++++ .../SkuServiceDeliverSaveReqVO.java | 54 +++++++ .../ProdEmergencyResponseIntervalsMapper.xml | 12 ++ .../mapper/product/ProdPropMapper.xml | 12 ++ .../mapper/product/ProdPropValueMapper.xml | 12 ++ .../product/ProdReservationConfigMapper.xml | 12 ++ .../ProdServiceAreaRelevanceMapper.xml | 12 ++ .../mapper/product/ProdServiceAreasMapper.xml | 12 ++ .../ProdServiceOverAreaRulesMapper.xml | 12 ++ .../mapper/product/ProdTagsMapper.xml | 12 ++ .../product/ProdWeightRangePricesMapper.xml | 12 ++ .../product/ProductOrderLimitMapper.xml | 12 ++ .../mapper/product/ShopDetailMapper.xml | 12 ++ .../resources/mapper/product/SkuMapper.xml | 12 ++ .../product/SkuServiceDeliverMapper.xml | 12 ++ 110 files changed, 5603 insertions(+) create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropValueController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdReservationConfigController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreaRelevanceController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreasController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceOverAreaRulesController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdTagsController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdWeightRangePricesController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProductOrderLimitController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ShopDetailController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDeliverController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreasDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ShopDetailDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdReservationConfigMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreasMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceOverAreaRulesMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdTagsMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdWeightRangePricesMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProductOrderLimitMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ShopDetailMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdReservationConfigService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreaRelevanceService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceOverAreaRulesService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdTagsService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdWeightRangePricesService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProductOrderLimitService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ShopDetailService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDeliverService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdReservationConfigServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreaRelevanceServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceOverAreaRulesServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdTagsServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdWeightRangePricesServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProductOrderLimitServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ShopDetailServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDeliverServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseIntervalsMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdReservationConfigMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreaRelevanceMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreasMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceOverAreaRulesMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdTagsMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdWeightRangePricesMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProductOrderLimitMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ShopDetailMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDeliverMapper.xml diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java index 64fc66d..2a9cc9b 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java @@ -16,4 +16,16 @@ public interface ErrorCodeConstants { ErrorCode PROD_ADDITIONAL_FEE_PERIODS_NOT_EXISTS = new ErrorCode(10004, "特殊时段附加费用规则不存在"); ErrorCode PROD_EMERGENCY_RESPONSE_NOT_EXISTS = new ErrorCode(10005, "商品紧急响应服务设置不存在"); ErrorCode PROD_EMERGENCY_RESPONSE_INTERVALS_NOT_EXISTS = new ErrorCode(10006, "紧急响应时间区间设置不存在"); + ErrorCode PROD_PROP_NOT_EXISTS = new ErrorCode(10007, "商品属性不存在"); + ErrorCode PROD_PROP_VALUE_NOT_EXISTS = new ErrorCode(10008, "属性规则不存在"); + ErrorCode PROD_RESERVATION_CONFIG_NOT_EXISTS = new ErrorCode(10009, "商品预约配置不存在"); + ErrorCode PROD_SERVICE_AREA_RELEVANCE_NOT_EXISTS = new ErrorCode(10010, "商品与服务区域关联不存在"); + ErrorCode PROD_SERVICE_AREAS_NOT_EXISTS = new ErrorCode(10011, "服务区域不存在"); + ErrorCode PROD_SERVICE_OVER_AREA_RULES_NOT_EXISTS = new ErrorCode(10012, "超区规则不存在"); + ErrorCode PROD_TAGS_NOT_EXISTS = new ErrorCode(10013, "商品和标签管理不存在"); + ErrorCode PRODUCT_ORDER_LIMIT_NOT_EXISTS = new ErrorCode(10014, "商品接单上限设置不存在"); + ErrorCode PROD_WEIGHT_RANGE_PRICES_NOT_EXISTS = new ErrorCode(10015, "体重区间价格不存在"); + ErrorCode SHOP_DETAIL_NOT_EXISTS = new ErrorCode(10016, "店铺信息不存在"); + ErrorCode SKU_NOT_EXISTS = new ErrorCode(10017, "单品SKU不存在"); + ErrorCode SKU_SERVICE_DELIVER_NOT_EXISTS = new ErrorCode(10016, "服务交付方式不存在"); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java new file mode 100644 index 0000000..6c8bf74 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdPropDO; +import com.tashow.cloud.product.service.ProdPropService; +import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; +import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO; +import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 商品属性") +@RestController +@RequestMapping("/tz/prod-prop") +@Validated +public class ProdPropController { + + @Resource + private ProdPropService prodPropService; + + @PostMapping("/create") + @Operation(summary = "创建商品属性") + @PreAuthorize("@ss.hasPermission('tz:prod-prop:create')") + public CommonResult createProdProp(@Valid @RequestBody ProdPropSaveReqVO createReqVO) { + return success(prodPropService.createProdProp(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品属性") + @PreAuthorize("@ss.hasPermission('tz:prod-prop:update')") + public CommonResult updateProdProp(@Valid @RequestBody ProdPropSaveReqVO updateReqVO) { + prodPropService.updateProdProp(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品属性") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-prop:delete')") + public CommonResult deleteProdProp(@RequestParam("id") Long id) { + prodPropService.deleteProdProp(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品属性") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-prop:query')") + public CommonResult getProdProp(@RequestParam("id") Long id) { + ProdPropDO prodProp = prodPropService.getProdProp(id); + return success(BeanUtils.toBean(prodProp, ProdPropRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品属性分页") + @PreAuthorize("@ss.hasPermission('tz:prod-prop:query')") + public CommonResult> getProdPropPage(@Valid ProdPropPageReqVO pageReqVO) { + PageResult pageResult = prodPropService.getProdPropPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdPropRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品属性 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-prop:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdPropExcel(@Valid ProdPropPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodPropService.getProdPropPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品属性.xls", "数据", ProdPropRespVO.class, + BeanUtils.toBean(list, ProdPropRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropValueController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropValueController.java new file mode 100644 index 0000000..e1be643 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropValueController.java @@ -0,0 +1,97 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.product.service.ProdPropValueService; +import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValuePageReqVO; +import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueRespVO; +import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + + +@Tag(name = "管理后台 - 属性规则") +@RestController +@RequestMapping("/tz/prod-prop-value") +@Validated +public class ProdPropValueController { + + @Resource + private ProdPropValueService prodPropValueService; + + @PostMapping("/create") + @Operation(summary = "创建属性规则") + @PreAuthorize("@ss.hasPermission('tz:prod-prop-value:create')") + public CommonResult createProdPropValue(@Valid @RequestBody ProdPropValueSaveReqVO createReqVO) { + return success(prodPropValueService.createProdPropValue(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新属性规则") + @PreAuthorize("@ss.hasPermission('tz:prod-prop-value:update')") + public CommonResult updateProdPropValue(@Valid @RequestBody ProdPropValueSaveReqVO updateReqVO) { + prodPropValueService.updateProdPropValue(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除属性规则") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-prop-value:delete')") + public CommonResult deleteProdPropValue(@RequestParam("id") Long id) { + prodPropValueService.deleteProdPropValue(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得属性规则") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-prop-value:query')") + public CommonResult getProdPropValue(@RequestParam("id") Long id) { + ProdPropValueDO prodPropValue = prodPropValueService.getProdPropValue(id); + return success(BeanUtils.toBean(prodPropValue, ProdPropValueRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得属性规则分页") + @PreAuthorize("@ss.hasPermission('tz:prod-prop-value:query')") + public CommonResult> getProdPropValuePage(@Valid ProdPropValuePageReqVO pageReqVO) { + PageResult pageResult = prodPropValueService.getProdPropValuePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdPropValueRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出属性规则 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-prop-value:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdPropValueExcel(@Valid ProdPropValuePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodPropValueService.getProdPropValuePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "属性规则.xls", "数据", ProdPropValueRespVO.class, + BeanUtils.toBean(list, ProdPropValueRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdReservationConfigController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdReservationConfigController.java new file mode 100644 index 0000000..6bd64cf --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdReservationConfigController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdReservationConfigDO; +import com.tashow.cloud.product.service.ProdReservationConfigService; +import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; +import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigRespVO; +import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 商品预约配置") +@RestController +@RequestMapping("/tz/prod-reservation-config") +@Validated +public class ProdReservationConfigController { + + @Resource + private ProdReservationConfigService prodReservationConfigService; + + @PostMapping("/create") + @Operation(summary = "创建商品预约配置") + @PreAuthorize("@ss.hasPermission('tz:prod-reservation-config:create')") + public CommonResult createProdReservationConfig(@Valid @RequestBody ProdReservationConfigSaveReqVO createReqVO) { + return success(prodReservationConfigService.createProdReservationConfig(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品预约配置") + @PreAuthorize("@ss.hasPermission('tz:prod-reservation-config:update')") + public CommonResult updateProdReservationConfig(@Valid @RequestBody ProdReservationConfigSaveReqVO updateReqVO) { + prodReservationConfigService.updateProdReservationConfig(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品预约配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-reservation-config:delete')") + public CommonResult deleteProdReservationConfig(@RequestParam("id") Long id) { + prodReservationConfigService.deleteProdReservationConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品预约配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-reservation-config:query')") + public CommonResult getProdReservationConfig(@RequestParam("id") Long id) { + ProdReservationConfigDO prodReservationConfig = prodReservationConfigService.getProdReservationConfig(id); + return success(BeanUtils.toBean(prodReservationConfig, ProdReservationConfigRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品预约配置分页") + @PreAuthorize("@ss.hasPermission('tz:prod-reservation-config:query')") + public CommonResult> getProdReservationConfigPage(@Valid ProdReservationConfigPageReqVO pageReqVO) { + PageResult pageResult = prodReservationConfigService.getProdReservationConfigPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdReservationConfigRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品预约配置 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-reservation-config:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdReservationConfigExcel(@Valid ProdReservationConfigPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodReservationConfigService.getProdReservationConfigPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品预约配置.xls", "数据", ProdReservationConfigRespVO.class, + BeanUtils.toBean(list, ProdReservationConfigRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreaRelevanceController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreaRelevanceController.java new file mode 100644 index 0000000..61ba834 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreaRelevanceController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; +import com.tashow.cloud.product.service.ProdServiceAreaRelevanceService; +import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; +import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceRespVO; +import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 商品与服务区域关联") +@RestController +@RequestMapping("/tz/prod-service-area-relevance") +@Validated +public class ProdServiceAreaRelevanceController { + + @Resource + private ProdServiceAreaRelevanceService prodServiceAreaRelevanceService; + + @PostMapping("/create") + @Operation(summary = "创建商品与服务区域关联") + @PreAuthorize("@ss.hasPermission('tz:prod-service-area-relevance:create')") + public CommonResult createProdServiceAreaRelevance(@Valid @RequestBody ProdServiceAreaRelevanceSaveReqVO createReqVO) { + return success(prodServiceAreaRelevanceService.createProdServiceAreaRelevance(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品与服务区域关联") + @PreAuthorize("@ss.hasPermission('tz:prod-service-area-relevance:update')") + public CommonResult updateProdServiceAreaRelevance(@Valid @RequestBody ProdServiceAreaRelevanceSaveReqVO updateReqVO) { + prodServiceAreaRelevanceService.updateProdServiceAreaRelevance(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品与服务区域关联") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-service-area-relevance:delete')") + public CommonResult deleteProdServiceAreaRelevance(@RequestParam("id") Long id) { + prodServiceAreaRelevanceService.deleteProdServiceAreaRelevance(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品与服务区域关联") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-service-area-relevance:query')") + public CommonResult getProdServiceAreaRelevance(@RequestParam("id") Long id) { + ProdServiceAreaRelevanceDO prodServiceAreaRelevance = prodServiceAreaRelevanceService.getProdServiceAreaRelevance(id); + return success(BeanUtils.toBean(prodServiceAreaRelevance, ProdServiceAreaRelevanceRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品与服务区域关联分页") + @PreAuthorize("@ss.hasPermission('tz:prod-service-area-relevance:query')") + public CommonResult> getProdServiceAreaRelevancePage(@Valid ProdServiceAreaRelevancePageReqVO pageReqVO) { + PageResult pageResult = prodServiceAreaRelevanceService.getProdServiceAreaRelevancePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdServiceAreaRelevanceRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品与服务区域关联 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-service-area-relevance:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdServiceAreaRelevanceExcel(@Valid ProdServiceAreaRelevancePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodServiceAreaRelevanceService.getProdServiceAreaRelevancePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品与服务区域关联.xls", "数据", ProdServiceAreaRelevanceRespVO.class, + BeanUtils.toBean(list, ProdServiceAreaRelevanceRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreasController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreasController.java new file mode 100644 index 0000000..081c859 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreasController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdServiceAreasDO; +import com.tashow.cloud.product.service.ProdServiceAreasService; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasRespVO; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 服务区域") +@RestController +@RequestMapping("/tz/prod-service-areas") +@Validated +public class ProdServiceAreasController { + + @Resource + private ProdServiceAreasService prodServiceAreasService; + + @PostMapping("/create") + @Operation(summary = "创建服务区域") + @PreAuthorize("@ss.hasPermission('tz:prod-service-areas:create')") + public CommonResult createProdServiceAreas(@Valid @RequestBody ProdServiceAreasSaveReqVO createReqVO) { + return success(prodServiceAreasService.createProdServiceAreas(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新服务区域") + @PreAuthorize("@ss.hasPermission('tz:prod-service-areas:update')") + public CommonResult updateProdServiceAreas(@Valid @RequestBody ProdServiceAreasSaveReqVO updateReqVO) { + prodServiceAreasService.updateProdServiceAreas(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除服务区域") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-service-areas:delete')") + public CommonResult deleteProdServiceAreas(@RequestParam("id") Long id) { + prodServiceAreasService.deleteProdServiceAreas(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得服务区域") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-service-areas:query')") + public CommonResult getProdServiceAreas(@RequestParam("id") Long id) { + ProdServiceAreasDO prodServiceAreas = prodServiceAreasService.getProdServiceAreas(id); + return success(BeanUtils.toBean(prodServiceAreas, ProdServiceAreasRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得服务区域分页") + @PreAuthorize("@ss.hasPermission('tz:prod-service-areas:query')") + public CommonResult> getProdServiceAreasPage(@Valid ProdServiceAreasPageReqVO pageReqVO) { + PageResult pageResult = prodServiceAreasService.getProdServiceAreasPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdServiceAreasRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出服务区域 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-service-areas:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdServiceAreasExcel(@Valid ProdServiceAreasPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodServiceAreasService.getProdServiceAreasPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "服务区域.xls", "数据", ProdServiceAreasRespVO.class, + BeanUtils.toBean(list, ProdServiceAreasRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceOverAreaRulesController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceOverAreaRulesController.java new file mode 100644 index 0000000..1c65770 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceOverAreaRulesController.java @@ -0,0 +1,97 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; +import com.tashow.cloud.product.service.ProdServiceOverAreaRulesService; +import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; +import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesRespVO; +import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + + +@Tag(name = "管理后台 - 超区规则") +@RestController +@RequestMapping("/tz/prod-service-over-area-rules") +@Validated +public class ProdServiceOverAreaRulesController { + + @Resource + private ProdServiceOverAreaRulesService prodServiceOverAreaRulesService; + + @PostMapping("/create") + @Operation(summary = "创建超区规则") + @PreAuthorize("@ss.hasPermission('tz:prod-service-over-area-rules:create')") + public CommonResult createProdServiceOverAreaRules(@Valid @RequestBody ProdServiceOverAreaRulesSaveReqVO createReqVO) { + return success(prodServiceOverAreaRulesService.createProdServiceOverAreaRules(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新超区规则") + @PreAuthorize("@ss.hasPermission('tz:prod-service-over-area-rules:update')") + public CommonResult updateProdServiceOverAreaRules(@Valid @RequestBody ProdServiceOverAreaRulesSaveReqVO updateReqVO) { + prodServiceOverAreaRulesService.updateProdServiceOverAreaRules(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除超区规则") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-service-over-area-rules:delete')") + public CommonResult deleteProdServiceOverAreaRules(@RequestParam("id") Long id) { + prodServiceOverAreaRulesService.deleteProdServiceOverAreaRules(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得超区规则") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-service-over-area-rules:query')") + public CommonResult getProdServiceOverAreaRules(@RequestParam("id") Long id) { + ProdServiceOverAreaRulesDO prodServiceOverAreaRules = prodServiceOverAreaRulesService.getProdServiceOverAreaRules(id); + return success(BeanUtils.toBean(prodServiceOverAreaRules, ProdServiceOverAreaRulesRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得超区规则分页") + @PreAuthorize("@ss.hasPermission('tz:prod-service-over-area-rules:query')") + public CommonResult> getProdServiceOverAreaRulesPage(@Valid ProdServiceOverAreaRulesPageReqVO pageReqVO) { + PageResult pageResult = prodServiceOverAreaRulesService.getProdServiceOverAreaRulesPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdServiceOverAreaRulesRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出超区规则 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-service-over-area-rules:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdServiceOverAreaRulesExcel(@Valid ProdServiceOverAreaRulesPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodServiceOverAreaRulesService.getProdServiceOverAreaRulesPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "超区规则.xls", "数据", ProdServiceOverAreaRulesRespVO.class, + BeanUtils.toBean(list, ProdServiceOverAreaRulesRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdTagsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdTagsController.java new file mode 100644 index 0000000..2eece01 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdTagsController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdTagsDO; +import com.tashow.cloud.product.service.ProdTagsService; +import com.tashow.cloud.product.vo.prodtags.ProdTagsPageReqVO; +import com.tashow.cloud.product.vo.prodtags.ProdTagsRespVO; +import com.tashow.cloud.product.vo.prodtags.ProdTagsSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 商品和标签管理") +@RestController +@RequestMapping("/tz/prod-tags") +@Validated +public class ProdTagsController { + + @Resource + private ProdTagsService prodTagsService; + + @PostMapping("/create") + @Operation(summary = "创建商品和标签管理") + @PreAuthorize("@ss.hasPermission('tz:prod-tags:create')") + public CommonResult createProdTags(@Valid @RequestBody ProdTagsSaveReqVO createReqVO) { + return success(prodTagsService.createProdTags(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品和标签管理") + @PreAuthorize("@ss.hasPermission('tz:prod-tags:update')") + public CommonResult updateProdTags(@Valid @RequestBody ProdTagsSaveReqVO updateReqVO) { + prodTagsService.updateProdTags(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品和标签管理") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-tags:delete')") + public CommonResult deleteProdTags(@RequestParam("id") Long id) { + prodTagsService.deleteProdTags(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品和标签管理") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-tags:query')") + public CommonResult getProdTags(@RequestParam("id") Long id) { + ProdTagsDO prodTags = prodTagsService.getProdTags(id); + return success(BeanUtils.toBean(prodTags, ProdTagsRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品和标签管理分页") + @PreAuthorize("@ss.hasPermission('tz:prod-tags:query')") + public CommonResult> getProdTagsPage(@Valid ProdTagsPageReqVO pageReqVO) { + PageResult pageResult = prodTagsService.getProdTagsPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdTagsRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品和标签管理 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-tags:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdTagsExcel(@Valid ProdTagsPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodTagsService.getProdTagsPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品和标签管理.xls", "数据", ProdTagsRespVO.class, + BeanUtils.toBean(list, ProdTagsRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdWeightRangePricesController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdWeightRangePricesController.java new file mode 100644 index 0000000..a3cd582 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdWeightRangePricesController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProdWeightRangePricesDO; +import com.tashow.cloud.product.service.ProdWeightRangePricesService; +import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; +import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesRespVO; +import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 体重区间价格") +@RestController +@RequestMapping("/tz/prod-weight-range-prices") +@Validated +public class ProdWeightRangePricesController { + + @Resource + private ProdWeightRangePricesService prodWeightRangePricesService; + + @PostMapping("/create") + @Operation(summary = "创建体重区间价格") + @PreAuthorize("@ss.hasPermission('tz:prod-weight-range-prices:create')") + public CommonResult createProdWeightRangePrices(@Valid @RequestBody ProdWeightRangePricesSaveReqVO createReqVO) { + return success(prodWeightRangePricesService.createProdWeightRangePrices(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新体重区间价格") + @PreAuthorize("@ss.hasPermission('tz:prod-weight-range-prices:update')") + public CommonResult updateProdWeightRangePrices(@Valid @RequestBody ProdWeightRangePricesSaveReqVO updateReqVO) { + prodWeightRangePricesService.updateProdWeightRangePrices(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除体重区间价格") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:prod-weight-range-prices:delete')") + public CommonResult deleteProdWeightRangePrices(@RequestParam("id") Long id) { + prodWeightRangePricesService.deleteProdWeightRangePrices(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得体重区间价格") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:prod-weight-range-prices:query')") + public CommonResult getProdWeightRangePrices(@RequestParam("id") Long id) { + ProdWeightRangePricesDO prodWeightRangePrices = prodWeightRangePricesService.getProdWeightRangePrices(id); + return success(BeanUtils.toBean(prodWeightRangePrices, ProdWeightRangePricesRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得体重区间价格分页") + @PreAuthorize("@ss.hasPermission('tz:prod-weight-range-prices:query')") + public CommonResult> getProdWeightRangePricesPage(@Valid ProdWeightRangePricesPageReqVO pageReqVO) { + PageResult pageResult = prodWeightRangePricesService.getProdWeightRangePricesPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProdWeightRangePricesRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出体重区间价格 Excel") + @PreAuthorize("@ss.hasPermission('tz:prod-weight-range-prices:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProdWeightRangePricesExcel(@Valid ProdWeightRangePricesPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = prodWeightRangePricesService.getProdWeightRangePricesPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "体重区间价格.xls", "数据", ProdWeightRangePricesRespVO.class, + BeanUtils.toBean(list, ProdWeightRangePricesRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProductOrderLimitController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProductOrderLimitController.java new file mode 100644 index 0000000..7b57e4c --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProductOrderLimitController.java @@ -0,0 +1,97 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ProductOrderLimitDO; +import com.tashow.cloud.product.service.ProductOrderLimitService; +import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitPageReqVO; +import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitRespVO; +import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + + +@Tag(name = "管理后台 - 商品接单上限设置") +@RestController +@RequestMapping("/tz/product-order-limit") +@Validated +public class ProductOrderLimitController { + + @Resource + private ProductOrderLimitService productOrderLimitService; + + @PostMapping("/create") + @Operation(summary = "创建商品接单上限设置") + @PreAuthorize("@ss.hasPermission('tz:product-order-limit:create')") + public CommonResult createProductOrderLimit(@Valid @RequestBody ProductOrderLimitSaveReqVO createReqVO) { + return success(productOrderLimitService.createProductOrderLimit(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品接单上限设置") + @PreAuthorize("@ss.hasPermission('tz:product-order-limit:update')") + public CommonResult updateProductOrderLimit(@Valid @RequestBody ProductOrderLimitSaveReqVO updateReqVO) { + productOrderLimitService.updateProductOrderLimit(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品接单上限设置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:product-order-limit:delete')") + public CommonResult deleteProductOrderLimit(@RequestParam("id") Long id) { + productOrderLimitService.deleteProductOrderLimit(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品接单上限设置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:product-order-limit:query')") + public CommonResult getProductOrderLimit(@RequestParam("id") Long id) { + ProductOrderLimitDO productOrderLimit = productOrderLimitService.getProductOrderLimit(id); + return success(BeanUtils.toBean(productOrderLimit, ProductOrderLimitRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品接单上限设置分页") + @PreAuthorize("@ss.hasPermission('tz:product-order-limit:query')") + public CommonResult> getProductOrderLimitPage(@Valid ProductOrderLimitPageReqVO pageReqVO) { + PageResult pageResult = productOrderLimitService.getProductOrderLimitPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ProductOrderLimitRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品接单上限设置 Excel") + @PreAuthorize("@ss.hasPermission('tz:product-order-limit:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportProductOrderLimitExcel(@Valid ProductOrderLimitPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = productOrderLimitService.getProductOrderLimitPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品接单上限设置.xls", "数据", ProductOrderLimitRespVO.class, + BeanUtils.toBean(list, ProductOrderLimitRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ShopDetailController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ShopDetailController.java new file mode 100644 index 0000000..a28007e --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ShopDetailController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.ShopDetailDO; +import com.tashow.cloud.product.service.ShopDetailService; +import com.tashow.cloud.product.vo.shopdetail.ShopDetailPageReqVO; +import com.tashow.cloud.product.vo.shopdetail.ShopDetailRespVO; +import com.tashow.cloud.product.vo.shopdetail.ShopDetailSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 店铺信息") +@RestController +@RequestMapping("/tz/shop-detail") +@Validated +public class ShopDetailController { + + @Resource + private ShopDetailService shopDetailService; + + @PostMapping("/create") + @Operation(summary = "创建店铺信息") + @PreAuthorize("@ss.hasPermission('tz:shop-detail:create')") + public CommonResult createShopDetail(@Valid @RequestBody ShopDetailSaveReqVO createReqVO) { + return success(shopDetailService.createShopDetail(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新店铺信息") + @PreAuthorize("@ss.hasPermission('tz:shop-detail:update')") + public CommonResult updateShopDetail(@Valid @RequestBody ShopDetailSaveReqVO updateReqVO) { + shopDetailService.updateShopDetail(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除店铺信息") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:shop-detail:delete')") + public CommonResult deleteShopDetail(@RequestParam("id") Long id) { + shopDetailService.deleteShopDetail(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得店铺信息") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:shop-detail:query')") + public CommonResult getShopDetail(@RequestParam("id") Long id) { + ShopDetailDO shopDetail = shopDetailService.getShopDetail(id); + return success(BeanUtils.toBean(shopDetail, ShopDetailRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得店铺信息分页") + @PreAuthorize("@ss.hasPermission('tz:shop-detail:query')") + public CommonResult> getShopDetailPage(@Valid ShopDetailPageReqVO pageReqVO) { + PageResult pageResult = shopDetailService.getShopDetailPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ShopDetailRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出店铺信息 Excel") + @PreAuthorize("@ss.hasPermission('tz:shop-detail:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportShopDetailExcel(@Valid ShopDetailPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = shopDetailService.getShopDetailPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "店铺信息.xls", "数据", ShopDetailRespVO.class, + BeanUtils.toBean(list, ShopDetailRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java new file mode 100644 index 0000000..ba92b74 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.service.SkuService; +import com.tashow.cloud.product.vo.sku.SkuPageReqVO; +import com.tashow.cloud.product.vo.sku.SkuRespVO; +import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 单品SKU") +@RestController +@RequestMapping("/tz/sku") +@Validated +public class SkuController { + + @Resource + private SkuService skuService; + + @PostMapping("/create") + @Operation(summary = "创建单品SKU") + @PreAuthorize("@ss.hasPermission('tz:sku:create')") + public CommonResult createSku(@Valid @RequestBody SkuSaveReqVO createReqVO) { + return success(skuService.createSku(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新单品SKU") + @PreAuthorize("@ss.hasPermission('tz:sku:update')") + public CommonResult updateSku(@Valid @RequestBody SkuSaveReqVO updateReqVO) { + skuService.updateSku(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除单品SKU") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:sku:delete')") + public CommonResult deleteSku(@RequestParam("id") Long id) { + skuService.deleteSku(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得单品SKU") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:sku:query')") + public CommonResult getSku(@RequestParam("id") Long id) { + SkuDO sku = skuService.getSku(id); + return success(BeanUtils.toBean(sku, SkuRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得单品SKU分页") + @PreAuthorize("@ss.hasPermission('tz:sku:query')") + public CommonResult> getSkuPage(@Valid SkuPageReqVO pageReqVO) { + PageResult pageResult = skuService.getSkuPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SkuRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出单品SKU Excel") + @PreAuthorize("@ss.hasPermission('tz:sku:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSkuExcel(@Valid SkuPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = skuService.getSkuPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "单品SKU.xls", "数据", SkuRespVO.class, + BeanUtils.toBean(list, SkuRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDeliverController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDeliverController.java new file mode 100644 index 0000000..87d4f84 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDeliverController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.product.service.SkuServiceDeliverService; +import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; +import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverRespVO; +import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 服务交付方式") +@RestController +@RequestMapping("/tz/sku-service-deliver") +@Validated +public class SkuServiceDeliverController { + + @Resource + private SkuServiceDeliverService skuServiceDeliverService; + + @PostMapping("/create") + @Operation(summary = "创建服务交付方式") + @PreAuthorize("@ss.hasPermission('tz:sku-service-deliver:create')") + public CommonResult createSkuServiceDeliver(@Valid @RequestBody SkuServiceDeliverSaveReqVO createReqVO) { + return success(skuServiceDeliverService.createSkuServiceDeliver(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新服务交付方式") + @PreAuthorize("@ss.hasPermission('tz:sku-service-deliver:update')") + public CommonResult updateSkuServiceDeliver(@Valid @RequestBody SkuServiceDeliverSaveReqVO updateReqVO) { + skuServiceDeliverService.updateSkuServiceDeliver(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除服务交付方式") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:sku-service-deliver:delete')") + public CommonResult deleteSkuServiceDeliver(@RequestParam("id") Long id) { + skuServiceDeliverService.deleteSkuServiceDeliver(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得服务交付方式") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:sku-service-deliver:query')") + public CommonResult getSkuServiceDeliver(@RequestParam("id") Long id) { + SkuServiceDeliverDO skuServiceDeliver = skuServiceDeliverService.getSkuServiceDeliver(id); + return success(BeanUtils.toBean(skuServiceDeliver, SkuServiceDeliverRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得服务交付方式分页") + @PreAuthorize("@ss.hasPermission('tz:sku-service-deliver:query')") + public CommonResult> getSkuServiceDeliverPage(@Valid SkuServiceDeliverPageReqVO pageReqVO) { + PageResult pageResult = skuServiceDeliverService.getSkuServiceDeliverPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SkuServiceDeliverRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出服务交付方式 Excel") + @PreAuthorize("@ss.hasPermission('tz:sku-service-deliver:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSkuServiceDeliverExcel(@Valid SkuServiceDeliverPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = skuServiceDeliverService.getSkuServiceDeliverPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "服务交付方式.xls", "数据", SkuServiceDeliverRespVO.class, + BeanUtils.toBean(list, SkuServiceDeliverRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java new file mode 100644 index 0000000..fa66b18 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java @@ -0,0 +1,49 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 商品属性 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_prop") +@KeySequence("tz_prod_prop_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdPropDO extends BaseDO { + + /** + * 属性id + */ + @TableId + private Long propId; + /** + * 属性名称 + */ + private String propName; + /** + * ProdPropRule 1:销售属性(规格); 2:参数属性; + */ + private Integer rule; + /** + * 店铺id + */ + private Long shopId; + /** + * 商品id + */ + private Integer prodId; + /** + * 是否删除0否1是 + */ + private Boolean isDelete; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java new file mode 100644 index 0000000..86e63fb --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java @@ -0,0 +1,41 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 属性规则 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_prop_value") +@KeySequence("tz_prod_prop_value_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdPropValueDO extends BaseDO { + + /** + * 属性值ID + */ + @TableId + private Long valueId; + /** + * 属性值名称 + */ + private String propValue; + /** + * 属性ID + */ + private Long propId; + /** + * 是否删除0否1是 + */ + private Boolean isDelete; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java new file mode 100644 index 0000000..49c0122 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java @@ -0,0 +1,83 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 商品预约配置 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_reservation_config") +@KeySequence("tz_prod_reservation_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdReservationConfigDO extends BaseDO { + + /** + * 预约配置的唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的商品ID + */ + private Long prodId; + /** + * 预约时段设置(JSON格式存储) + */ + private String reservationTimeSlots; + /** + * 需提前多少小时预约 + */ + private Integer advanceHours; + /** + * 预约日期范围 7天 10天 15天 30天 + */ + private Integer reservationDateRange; + /** + * 是否允许更改预约时间 1可以 0不可以 + */ + private Boolean allowChange; + /** + * 更改预约时间的时间规则(如服务开始前1小时可更改) + */ + private Integer changeTimeRule; + /** + * 允许更改预约时间的最大次数 + */ + private Integer maxChangeTimes; + /** + * 黑名自定义日期(JSON格式存储) + */ + private String blacklistedDates; + /** + * 黑名单指定日期(JSON格式存储) + */ + private String blackAppointDates; + /** + * 法定节假日是否开启0:关闭1开启 + */ + private Boolean blackHappy; + /** + * 固定休息日周末是否开启0关闭1开启 + */ + private Boolean blackWeekend; + /** + * 配置创建时间 + */ + private LocalDateTime createdAt; + /** + * 配置最后更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java new file mode 100644 index 0000000..dde95df --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java @@ -0,0 +1,34 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 商品与服务区域关联 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_service_area_relevance") +@KeySequence("tz_prod_service_area_relevance_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdServiceAreaRelevanceDO extends BaseDO { + + /** + * 关联的商品ID + */ + @TableId + private Long prodId; + /** + * 关联的服务区域ID + */ + @TableId + private Long areaId; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreasDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreasDO.java new file mode 100644 index 0000000..8cbe2e9 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreasDO.java @@ -0,0 +1,34 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 服务区域 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_service_areas") +@KeySequence("tz_prod_service_areas_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdServiceAreasDO extends BaseDO { + + /** + * 服务区域的唯一标识符 + */ + @TableId + private Long id; + /** + * 服务区域名称(如台江区、鼓楼区) + */ + private String areaName; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java new file mode 100644 index 0000000..287a176 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java @@ -0,0 +1,52 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 超区规则 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_service_over_area_rules") +@KeySequence("tz_prod_service_over_area_rules_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdServiceOverAreaRulesDO extends BaseDO { + + /** + * 超区规则的唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的商品ID + */ + private Long prodId; + /** + * 超区规则类型(0:拒单、2:接单并收取超区费、3:接单并免超区费) + */ + private Boolean ruleType; + /** + * 超区费用(仅在rule_type为accept_with_fee时有效) + */ + private BigDecimal fee; + /** + * 规则创建时间 + */ + private LocalDateTime createdAt; + /** + * 规则最后更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java new file mode 100644 index 0000000..a692b52 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java @@ -0,0 +1,35 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 商品和标签管理 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_tags") +@KeySequence("tz_prod_tags_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdTagsDO extends BaseDO { + + /** + * 商品id + */ + @TableId + private Long productId; + /** + * 标签id + */ + @TableId + private Long tagId; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java new file mode 100644 index 0000000..f0c3440 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java @@ -0,0 +1,56 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 体重区间价格 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_weight_range_prices") +@KeySequence("tz_prod_weight_range_prices_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdWeightRangePricesDO extends BaseDO { + + /** + * 体重区间价格的唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的体重配置ID + */ + private Long prodId; + /** + * 体重区间 + */ + private String weightRange; + /** + * 价格 + */ + private BigDecimal price; + /** + * 是否启用该规则0否1是 + */ + private Boolean isEnabled; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java new file mode 100644 index 0000000..8fa80f8 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java @@ -0,0 +1,51 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 商品接单上限设置 DO + * + * @author 芋道源码 + */ +@TableName("tz_product_order_limit") +@KeySequence("tz_product_order_limit_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProductOrderLimitDO extends BaseDO { + + /** + * 接单上限配置的唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的商品ID + */ + private Long prodId; + /** + * 限制单位'0:按自然天',1:'按自然周',2:'按自然月' + */ + private Boolean limitUnit; + /** + * 上限阈值 + */ + private Integer maxOrders; + /** + * 配置创建时间 + */ + private LocalDateTime createdAt; + /** + * 配置最后更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ShopDetailDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ShopDetailDO.java new file mode 100644 index 0000000..231b3c8 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ShopDetailDO.java @@ -0,0 +1,129 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 店铺信息 DO + * + * @author 芋道源码 + */ +@TableName("tz_shop_detail") +@KeySequence("tz_shop_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ShopDetailDO extends BaseDO { + + /** + * 店铺id + */ + @TableId + private Long shopId; + /** + * 店铺名称(数字、中文,英文(可混合,不可有特殊字符),可修改)、不唯一 + */ + private String shopName; + /** + * 店长用户id + */ + private String userId; + /** + * 店铺类型 + */ + private Integer shopType; + /** + * 店铺简介(可修改) + */ + private String intro; + /** + * 店铺公告(可修改) + */ + private String shopNotice; + /** + * 店铺行业(餐饮、生鲜果蔬、鲜花等) + */ + private Integer shopIndustry; + /** + * 店长 + */ + private String shopOwner; + /** + * 店铺绑定的手机(登录账号:唯一) + */ + private String mobile; + /** + * 店铺联系电话 + */ + private String tel; + /** + * 店铺所在纬度(可修改) + */ + private String shopLat; + /** + * 店铺所在经度(可修改) + */ + private String shopLng; + /** + * 店铺详细地址 + */ + private String shopAddress; + /** + * 店铺所在省份(描述) + */ + private String province; + /** + * 店铺所在城市(描述) + */ + private String city; + /** + * 店铺所在区域(描述) + */ + private String area; + /** + * 店铺省市区代码,用于回显 + */ + private String pcaCode; + /** + * 店铺logo(可修改) + */ + private String shopLogo; + /** + * 店铺相册 + */ + private String shopPhotos; + /** + * 每天营业时间段(可修改) + */ + private String openTime; + /** + * 店铺状态(-1:未开通 0: 停业中 1:营业中),可修改 + */ + private Integer shopStatus; + /** + * 0:商家承担运费; 1:买家承担运费 + */ + private Integer transportType; + /** + * 固定运费 + */ + private BigDecimal fixedFreight; + /** + * 满X包邮 + */ + private BigDecimal fullFreeShipping; + /** + * 分销开关(0:开启 1:关闭) + */ + private Integer isDistribution; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java new file mode 100644 index 0000000..43c25cc --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java @@ -0,0 +1,136 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 单品SKU DO + * + * @author 芋道源码 + */ +@TableName("tz_sku") +@KeySequence("tz_sku_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SkuDO extends BaseDO { + + /** + * 单品ID + */ + @TableId + private Long skuId; + /** + * 商品ID + */ + private Long prodId; + /** + * 销售属性组合字符串 格式是p1:v1;p2:v2 + */ + private String properties; + /** + * 别名 + */ + private String alias; + /** + * 价格 + */ + private BigDecimal price; + /** + * 最低价格 + */ + private BigDecimal minPrice; + /** + * 最高价格 + */ + private BigDecimal maxPrice; + /** + * 成本价 + */ + private BigDecimal originalPrice; + /** + * 市场价 + */ + private BigDecimal marketPrice; + /** + * 单位 + */ + private String unit; + /** + * 0:主服务1:待定 + */ + private Integer type; + /** + * 概述 + */ + private String overview; + /** + * 库存 + */ + private Integer stocks; + /** + * 预警库存 + */ + private Integer warnStocks; + /** + * 库存扣款时机0:付款扣1:下单扣 + */ + private Boolean stocksType; + /** + * sku编码 + */ + private String skuCode; + /** + * 商品条形码 + */ + private String modelId; + /** + * sku图片 + */ + private String pic; + /** + * sku名称 + */ + private String skuName; + /** + * 商品名称 + */ + private String prodName; + /** + * 版本号 + */ + private Integer version; + /** + * 商品重量 + */ + private Double weight; + /** + * 商品体积 + */ + private Double volume; + /** + * 0 禁用 1 启用 + */ + private Integer status; + /** + * 0 正常 1 已被删除 + */ + private Integer isDelete; + /** + * 最小购买数量 + */ + private Integer moq; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java new file mode 100644 index 0000000..297fc2f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 服务交付方式 DO + * + * @author 芋道源码 + */ +@TableName("tz_sku_service_deliver") +@KeySequence("tz_sku_service_deliver_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SkuServiceDeliverDO extends BaseDO { + + /** + * 服务遗体运输唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的扩展服务ID + */ + private Long serviceId; + /** + * 交互方式0:快递物流 1:到店自提 2:商家自送 + */ + private Boolean type; + /** + * 价格 + */ + private BigDecimal price; + /** + * 是否收费0:免费1收费 + */ + private Boolean isCharge; + /** + * 详细地址 + */ + private String address; + /** + * 省 + */ + private String province; + /** + * 市 + */ + private String city; + /** + * 区 + */ + private String area; + /** + * 电话号码 + */ + private String tel; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 最后更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java new file mode 100644 index 0000000..7af1b10 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdPropDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 商品属性 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdPropMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java new file mode 100644 index 0000000..012573f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdPropValueDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 属性规则 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdPropValueMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdReservationConfigMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdReservationConfigMapper.java new file mode 100644 index 0000000..c6c612a --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdReservationConfigMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdReservationConfigDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 商品预约配置 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdReservationConfigMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java new file mode 100644 index 0000000..e82dea0 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java @@ -0,0 +1,19 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 商品与服务区域关联 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdServiceAreaRelevanceMapper extends BaseMapperX { + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreasMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreasMapper.java new file mode 100644 index 0000000..aa4c1a9 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreasMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdServiceAreasDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 服务区域 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdServiceAreasMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceOverAreaRulesMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceOverAreaRulesMapper.java new file mode 100644 index 0000000..a1bb897 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceOverAreaRulesMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 超区规则 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdServiceOverAreaRulesMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdTagsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdTagsMapper.java new file mode 100644 index 0000000..d33c3b7 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdTagsMapper.java @@ -0,0 +1,19 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdTagsDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 商品和标签管理 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdTagsMapper extends BaseMapperX { + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdWeightRangePricesMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdWeightRangePricesMapper.java new file mode 100644 index 0000000..88a48b9 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdWeightRangePricesMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdWeightRangePricesDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 体重区间价格 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdWeightRangePricesMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProductOrderLimitMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProductOrderLimitMapper.java new file mode 100644 index 0000000..6ac35f1 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProductOrderLimitMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProductOrderLimitDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 商品接单上限设置 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProductOrderLimitMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ShopDetailMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ShopDetailMapper.java new file mode 100644 index 0000000..a9cc1f3 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ShopDetailMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ShopDetailDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 店铺信息 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ShopDetailMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java new file mode 100644 index 0000000..f8042e0 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.SkuDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 单品SKU Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface SkuMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java new file mode 100644 index 0000000..59fce24 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.SkuServiceDeliverDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 服务交付方式 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface SkuServiceDeliverMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java new file mode 100644 index 0000000..e9b1b14 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdPropDO; +import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; +import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 商品属性 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdPropService { + + /** + * 创建商品属性 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdProp(@Valid ProdPropSaveReqVO createReqVO); + + /** + * 更新商品属性 + * + * @param updateReqVO 更新信息 + */ + void updateProdProp(@Valid ProdPropSaveReqVO updateReqVO); + + /** + * 删除商品属性 + * + * @param id 编号 + */ + void deleteProdProp(Long id); + + /** + * 获得商品属性 + * + * @param id 编号 + * @return 商品属性 + */ + ProdPropDO getProdProp(Long id); + + /** + * 获得商品属性分页 + * + * @param pageReqVO 分页查询 + * @return 商品属性分页 + */ + PageResult getProdPropPage(ProdPropPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java new file mode 100644 index 0000000..466cf68 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValuePageReqVO; +import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 属性规则 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdPropValueService { + + /** + * 创建属性规则 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdPropValue(@Valid ProdPropValueSaveReqVO createReqVO); + + /** + * 更新属性规则 + * + * @param updateReqVO 更新信息 + */ + void updateProdPropValue(@Valid ProdPropValueSaveReqVO updateReqVO); + + /** + * 删除属性规则 + * + * @param id 编号 + */ + void deleteProdPropValue(Long id); + + /** + * 获得属性规则 + * + * @param id 编号 + * @return 属性规则 + */ + ProdPropValueDO getProdPropValue(Long id); + + /** + * 获得属性规则分页 + * + * @param pageReqVO 分页查询 + * @return 属性规则分页 + */ + PageResult getProdPropValuePage(ProdPropValuePageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdReservationConfigService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdReservationConfigService.java new file mode 100644 index 0000000..2a19183 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdReservationConfigService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdReservationConfigDO; +import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; +import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 商品预约配置 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdReservationConfigService { + + /** + * 创建商品预约配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdReservationConfig(@Valid ProdReservationConfigSaveReqVO createReqVO); + + /** + * 更新商品预约配置 + * + * @param updateReqVO 更新信息 + */ + void updateProdReservationConfig(@Valid ProdReservationConfigSaveReqVO updateReqVO); + + /** + * 删除商品预约配置 + * + * @param id 编号 + */ + void deleteProdReservationConfig(Long id); + + /** + * 获得商品预约配置 + * + * @param id 编号 + * @return 商品预约配置 + */ + ProdReservationConfigDO getProdReservationConfig(Long id); + + /** + * 获得商品预约配置分页 + * + * @param pageReqVO 分页查询 + * @return 商品预约配置分页 + */ + PageResult getProdReservationConfigPage(ProdReservationConfigPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreaRelevanceService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreaRelevanceService.java new file mode 100644 index 0000000..761f3bf --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreaRelevanceService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; +import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; +import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 商品与服务区域关联 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdServiceAreaRelevanceService { + + /** + * 创建商品与服务区域关联 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdServiceAreaRelevance(@Valid ProdServiceAreaRelevanceSaveReqVO createReqVO); + + /** + * 更新商品与服务区域关联 + * + * @param updateReqVO 更新信息 + */ + void updateProdServiceAreaRelevance(@Valid ProdServiceAreaRelevanceSaveReqVO updateReqVO); + + /** + * 删除商品与服务区域关联 + * + * @param id 编号 + */ + void deleteProdServiceAreaRelevance(Long id); + + /** + * 获得商品与服务区域关联 + * + * @param id 编号 + * @return 商品与服务区域关联 + */ + ProdServiceAreaRelevanceDO getProdServiceAreaRelevance(Long id); + + /** + * 获得商品与服务区域关联分页 + * + * @param pageReqVO 分页查询 + * @return 商品与服务区域关联分页 + */ + PageResult getProdServiceAreaRelevancePage(ProdServiceAreaRelevancePageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java new file mode 100644 index 0000000..9fb87db --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdServiceAreasDO; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 服务区域 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdServiceAreasService { + + /** + * 创建服务区域 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdServiceAreas(@Valid ProdServiceAreasSaveReqVO createReqVO); + + /** + * 更新服务区域 + * + * @param updateReqVO 更新信息 + */ + void updateProdServiceAreas(@Valid ProdServiceAreasSaveReqVO updateReqVO); + + /** + * 删除服务区域 + * + * @param id 编号 + */ + void deleteProdServiceAreas(Long id); + + /** + * 获得服务区域 + * + * @param id 编号 + * @return 服务区域 + */ + ProdServiceAreasDO getProdServiceAreas(Long id); + + /** + * 获得服务区域分页 + * + * @param pageReqVO 分页查询 + * @return 服务区域分页 + */ + PageResult getProdServiceAreasPage(ProdServiceAreasPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceOverAreaRulesService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceOverAreaRulesService.java new file mode 100644 index 0000000..7702d3c --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceOverAreaRulesService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; +import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; +import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 超区规则 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdServiceOverAreaRulesService { + + /** + * 创建超区规则 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdServiceOverAreaRules(@Valid ProdServiceOverAreaRulesSaveReqVO createReqVO); + + /** + * 更新超区规则 + * + * @param updateReqVO 更新信息 + */ + void updateProdServiceOverAreaRules(@Valid ProdServiceOverAreaRulesSaveReqVO updateReqVO); + + /** + * 删除超区规则 + * + * @param id 编号 + */ + void deleteProdServiceOverAreaRules(Long id); + + /** + * 获得超区规则 + * + * @param id 编号 + * @return 超区规则 + */ + ProdServiceOverAreaRulesDO getProdServiceOverAreaRules(Long id); + + /** + * 获得超区规则分页 + * + * @param pageReqVO 分页查询 + * @return 超区规则分页 + */ + PageResult getProdServiceOverAreaRulesPage(ProdServiceOverAreaRulesPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdTagsService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdTagsService.java new file mode 100644 index 0000000..805c72f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdTagsService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdTagsDO; +import com.tashow.cloud.product.vo.prodtags.ProdTagsPageReqVO; +import com.tashow.cloud.product.vo.prodtags.ProdTagsSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 商品和标签管理 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdTagsService { + + /** + * 创建商品和标签管理 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdTags(@Valid ProdTagsSaveReqVO createReqVO); + + /** + * 更新商品和标签管理 + * + * @param updateReqVO 更新信息 + */ + void updateProdTags(@Valid ProdTagsSaveReqVO updateReqVO); + + /** + * 删除商品和标签管理 + * + * @param id 编号 + */ + void deleteProdTags(Long id); + + /** + * 获得商品和标签管理 + * + * @param id 编号 + * @return 商品和标签管理 + */ + ProdTagsDO getProdTags(Long id); + + /** + * 获得商品和标签管理分页 + * + * @param pageReqVO 分页查询 + * @return 商品和标签管理分页 + */ + PageResult getProdTagsPage(ProdTagsPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdWeightRangePricesService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdWeightRangePricesService.java new file mode 100644 index 0000000..b85d681 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdWeightRangePricesService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProdWeightRangePricesDO; +import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; +import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 体重区间价格 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdWeightRangePricesService { + + /** + * 创建体重区间价格 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProdWeightRangePrices(@Valid ProdWeightRangePricesSaveReqVO createReqVO); + + /** + * 更新体重区间价格 + * + * @param updateReqVO 更新信息 + */ + void updateProdWeightRangePrices(@Valid ProdWeightRangePricesSaveReqVO updateReqVO); + + /** + * 删除体重区间价格 + * + * @param id 编号 + */ + void deleteProdWeightRangePrices(Long id); + + /** + * 获得体重区间价格 + * + * @param id 编号 + * @return 体重区间价格 + */ + ProdWeightRangePricesDO getProdWeightRangePrices(Long id); + + /** + * 获得体重区间价格分页 + * + * @param pageReqVO 分页查询 + * @return 体重区间价格分页 + */ + PageResult getProdWeightRangePricesPage(ProdWeightRangePricesPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProductOrderLimitService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProductOrderLimitService.java new file mode 100644 index 0000000..566ed04 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProductOrderLimitService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ProductOrderLimitDO; +import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitPageReqVO; +import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 商品接单上限设置 Service 接口 + * + * @author 芋道源码 + */ +public interface ProductOrderLimitService { + + /** + * 创建商品接单上限设置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createProductOrderLimit(@Valid ProductOrderLimitSaveReqVO createReqVO); + + /** + * 更新商品接单上限设置 + * + * @param updateReqVO 更新信息 + */ + void updateProductOrderLimit(@Valid ProductOrderLimitSaveReqVO updateReqVO); + + /** + * 删除商品接单上限设置 + * + * @param id 编号 + */ + void deleteProductOrderLimit(Long id); + + /** + * 获得商品接单上限设置 + * + * @param id 编号 + * @return 商品接单上限设置 + */ + ProductOrderLimitDO getProductOrderLimit(Long id); + + /** + * 获得商品接单上限设置分页 + * + * @param pageReqVO 分页查询 + * @return 商品接单上限设置分页 + */ + PageResult getProductOrderLimitPage(ProductOrderLimitPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ShopDetailService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ShopDetailService.java new file mode 100644 index 0000000..917a9d7 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ShopDetailService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.ShopDetailDO; +import com.tashow.cloud.product.vo.shopdetail.ShopDetailPageReqVO; +import com.tashow.cloud.product.vo.shopdetail.ShopDetailSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 店铺信息 Service 接口 + * + * @author 芋道源码 + */ +public interface ShopDetailService { + + /** + * 创建店铺信息 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createShopDetail(@Valid ShopDetailSaveReqVO createReqVO); + + /** + * 更新店铺信息 + * + * @param updateReqVO 更新信息 + */ + void updateShopDetail(@Valid ShopDetailSaveReqVO updateReqVO); + + /** + * 删除店铺信息 + * + * @param id 编号 + */ + void deleteShopDetail(Long id); + + /** + * 获得店铺信息 + * + * @param id 编号 + * @return 店铺信息 + */ + ShopDetailDO getShopDetail(Long id); + + /** + * 获得店铺信息分页 + * + * @param pageReqVO 分页查询 + * @return 店铺信息分页 + */ + PageResult getShopDetailPage(ShopDetailPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java new file mode 100644 index 0000000..053105c --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.vo.sku.SkuPageReqVO; +import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 单品SKU Service 接口 + * + * @author 芋道源码 + */ +public interface SkuService { + + /** + * 创建单品SKU + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSku(@Valid SkuSaveReqVO createReqVO); + + /** + * 更新单品SKU + * + * @param updateReqVO 更新信息 + */ + void updateSku(@Valid SkuSaveReqVO updateReqVO); + + /** + * 删除单品SKU + * + * @param id 编号 + */ + void deleteSku(Long id); + + /** + * 获得单品SKU + * + * @param id 编号 + * @return 单品SKU + */ + SkuDO getSku(Long id); + + /** + * 获得单品SKU分页 + * + * @param pageReqVO 分页查询 + * @return 单品SKU分页 + */ + PageResult getSkuPage(SkuPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDeliverService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDeliverService.java new file mode 100644 index 0000000..f9678d8 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDeliverService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; +import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 服务交付方式 Service 接口 + * + * @author 芋道源码 + */ +public interface SkuServiceDeliverService { + + /** + * 创建服务交付方式 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSkuServiceDeliver(@Valid SkuServiceDeliverSaveReqVO createReqVO); + + /** + * 更新服务交付方式 + * + * @param updateReqVO 更新信息 + */ + void updateSkuServiceDeliver(@Valid SkuServiceDeliverSaveReqVO updateReqVO); + + /** + * 删除服务交付方式 + * + * @param id 编号 + */ + void deleteSkuServiceDeliver(Long id); + + /** + * 获得服务交付方式 + * + * @param id 编号 + * @return 服务交付方式 + */ + SkuServiceDeliverDO getSkuServiceDeliver(Long id); + + /** + * 获得服务交付方式分页 + * + * @param pageReqVO 分页查询 + * @return 服务交付方式分页 + */ + PageResult getSkuServiceDeliverPage(SkuServiceDeliverPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java new file mode 100644 index 0000000..c5cdf55 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdPropDO; +import com.tashow.cloud.product.mapper.ProdPropMapper; +import com.tashow.cloud.product.service.ProdPropService; +import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; +import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 商品属性 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdPropServiceImpl implements ProdPropService { + + @Resource + private ProdPropMapper prodPropMapper; + + @Override + public Long createProdProp(ProdPropSaveReqVO createReqVO) { + // 插入 + ProdPropDO prodProp = BeanUtils.toBean(createReqVO, ProdPropDO.class); + prodPropMapper.insert(prodProp); + // 返回 + return prodProp.getPropId(); + } + + @Override + public void updateProdProp(ProdPropSaveReqVO updateReqVO) { + // 校验存在 + validateProdPropExists(updateReqVO.getPropId()); + // 更新 + ProdPropDO updateObj = BeanUtils.toBean(updateReqVO, ProdPropDO.class); + prodPropMapper.updateById(updateObj); + } + + @Override + public void deleteProdProp(Long id) { + // 校验存在 + validateProdPropExists(id); + // 删除 + prodPropMapper.deleteById(id); + } + + private void validateProdPropExists(Long id) { + if (prodPropMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_PROP_NOT_EXISTS); + } + } + + @Override + public ProdPropDO getProdProp(Long id) { + return prodPropMapper.selectById(id); + } + + @Override + public PageResult getProdPropPage(ProdPropPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java new file mode 100644 index 0000000..cc531d8 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java @@ -0,0 +1,73 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.product.mapper.ProdPropValueMapper; +import com.tashow.cloud.product.service.ProdPropValueService; +import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValuePageReqVO; +import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 属性规则 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdPropValueServiceImpl implements ProdPropValueService { + + @Resource + private ProdPropValueMapper prodPropValueMapper; + + @Override + public Long createProdPropValue(ProdPropValueSaveReqVO createReqVO) { + // 插入 + ProdPropValueDO prodPropValue = BeanUtils.toBean(createReqVO, ProdPropValueDO.class); + prodPropValueMapper.insert(prodPropValue); + // 返回 + return prodPropValue.getPropId(); + } + + @Override + public void updateProdPropValue(ProdPropValueSaveReqVO updateReqVO) { + // 校验存在 + validateProdPropValueExists(updateReqVO.getPropId()); + // 更新 + ProdPropValueDO updateObj = BeanUtils.toBean(updateReqVO, ProdPropValueDO.class); + prodPropValueMapper.updateById(updateObj); + } + + @Override + public void deleteProdPropValue(Long id) { + // 校验存在 + validateProdPropValueExists(id); + // 删除 + prodPropValueMapper.deleteById(id); + } + + private void validateProdPropValueExists(Long id) { + if (prodPropValueMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_PROP_VALUE_NOT_EXISTS); + } + } + + @Override + public ProdPropValueDO getProdPropValue(Long id) { + return prodPropValueMapper.selectById(id); + } + + @Override + public PageResult getProdPropValuePage(ProdPropValuePageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdReservationConfigServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdReservationConfigServiceImpl.java new file mode 100644 index 0000000..b580c8f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdReservationConfigServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdReservationConfigDO; +import com.tashow.cloud.product.mapper.ProdReservationConfigMapper; +import com.tashow.cloud.product.service.ProdReservationConfigService; +import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; +import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 商品预约配置 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdReservationConfigServiceImpl implements ProdReservationConfigService { + + @Resource + private ProdReservationConfigMapper prodReservationConfigMapper; + + @Override + public Long createProdReservationConfig(ProdReservationConfigSaveReqVO createReqVO) { + // 插入 + ProdReservationConfigDO prodReservationConfig = BeanUtils.toBean(createReqVO, ProdReservationConfigDO.class); + prodReservationConfigMapper.insert(prodReservationConfig); + // 返回 + return prodReservationConfig.getId(); + } + + @Override + public void updateProdReservationConfig(ProdReservationConfigSaveReqVO updateReqVO) { + // 校验存在 + validateProdReservationConfigExists(updateReqVO.getId()); + // 更新 + ProdReservationConfigDO updateObj = BeanUtils.toBean(updateReqVO, ProdReservationConfigDO.class); + prodReservationConfigMapper.updateById(updateObj); + } + + @Override + public void deleteProdReservationConfig(Long id) { + // 校验存在 + validateProdReservationConfigExists(id); + // 删除 + prodReservationConfigMapper.deleteById(id); + } + + private void validateProdReservationConfigExists(Long id) { + if (prodReservationConfigMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_RESERVATION_CONFIG_NOT_EXISTS); + } + } + + @Override + public ProdReservationConfigDO getProdReservationConfig(Long id) { + return prodReservationConfigMapper.selectById(id); + } + + @Override + public PageResult getProdReservationConfigPage(ProdReservationConfigPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreaRelevanceServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreaRelevanceServiceImpl.java new file mode 100644 index 0000000..d3ffd2b --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreaRelevanceServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; +import com.tashow.cloud.product.mapper.ProdServiceAreaRelevanceMapper; +import com.tashow.cloud.product.service.ProdServiceAreaRelevanceService; +import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; +import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 商品与服务区域关联 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdServiceAreaRelevanceServiceImpl implements ProdServiceAreaRelevanceService { + + @Resource + private ProdServiceAreaRelevanceMapper prodServiceAreaRelevanceMapper; + + @Override + public Long createProdServiceAreaRelevance(ProdServiceAreaRelevanceSaveReqVO createReqVO) { + // 插入 + ProdServiceAreaRelevanceDO prodServiceAreaRelevance = BeanUtils.toBean(createReqVO, ProdServiceAreaRelevanceDO.class); + prodServiceAreaRelevanceMapper.insert(prodServiceAreaRelevance); + // 返回 + return prodServiceAreaRelevance.getProdId(); + } + + @Override + public void updateProdServiceAreaRelevance(ProdServiceAreaRelevanceSaveReqVO updateReqVO) { + // 校验存在 + validateProdServiceAreaRelevanceExists(updateReqVO.getProdId()); + // 更新 + ProdServiceAreaRelevanceDO updateObj = BeanUtils.toBean(updateReqVO, ProdServiceAreaRelevanceDO.class); + prodServiceAreaRelevanceMapper.updateById(updateObj); + } + + @Override + public void deleteProdServiceAreaRelevance(Long id) { + // 校验存在 + validateProdServiceAreaRelevanceExists(id); + // 删除 + prodServiceAreaRelevanceMapper.deleteById(id); + } + + private void validateProdServiceAreaRelevanceExists(Long id) { + if (prodServiceAreaRelevanceMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_SERVICE_AREA_RELEVANCE_NOT_EXISTS); + } + } + + @Override + public ProdServiceAreaRelevanceDO getProdServiceAreaRelevance(Long id) { + return prodServiceAreaRelevanceMapper.selectById(id); + } + + @Override + public PageResult getProdServiceAreaRelevancePage(ProdServiceAreaRelevancePageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java new file mode 100644 index 0000000..107329f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdServiceAreasDO; +import com.tashow.cloud.product.mapper.ProdServiceAreasMapper; +import com.tashow.cloud.product.service.ProdServiceAreasService; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 服务区域 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdServiceAreasServiceImpl implements ProdServiceAreasService { + + @Resource + private ProdServiceAreasMapper prodServiceAreasMapper; + + @Override + public Long createProdServiceAreas(ProdServiceAreasSaveReqVO createReqVO) { + // 插入 + ProdServiceAreasDO prodServiceAreas = BeanUtils.toBean(createReqVO, ProdServiceAreasDO.class); + prodServiceAreasMapper.insert(prodServiceAreas); + // 返回 + return prodServiceAreas.getId(); + } + + @Override + public void updateProdServiceAreas(ProdServiceAreasSaveReqVO updateReqVO) { + // 校验存在 + validateProdServiceAreasExists(updateReqVO.getId()); + // 更新 + ProdServiceAreasDO updateObj = BeanUtils.toBean(updateReqVO, ProdServiceAreasDO.class); + prodServiceAreasMapper.updateById(updateObj); + } + + @Override + public void deleteProdServiceAreas(Long id) { + // 校验存在 + validateProdServiceAreasExists(id); + // 删除 + prodServiceAreasMapper.deleteById(id); + } + + private void validateProdServiceAreasExists(Long id) { + if (prodServiceAreasMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_SERVICE_AREAS_NOT_EXISTS); + } + } + + @Override + public ProdServiceAreasDO getProdServiceAreas(Long id) { + return prodServiceAreasMapper.selectById(id); + } + + @Override + public PageResult getProdServiceAreasPage(ProdServiceAreasPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceOverAreaRulesServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceOverAreaRulesServiceImpl.java new file mode 100644 index 0000000..fe89c2e --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceOverAreaRulesServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; +import com.tashow.cloud.product.mapper.ProdServiceOverAreaRulesMapper; +import com.tashow.cloud.product.service.ProdServiceOverAreaRulesService; +import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; +import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 超区规则 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdServiceOverAreaRulesServiceImpl implements ProdServiceOverAreaRulesService { + + @Resource + private ProdServiceOverAreaRulesMapper prodServiceOverAreaRulesMapper; + + @Override + public Long createProdServiceOverAreaRules(ProdServiceOverAreaRulesSaveReqVO createReqVO) { + // 插入 + ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(createReqVO, ProdServiceOverAreaRulesDO.class); + prodServiceOverAreaRulesMapper.insert(prodServiceOverAreaRules); + // 返回 + return prodServiceOverAreaRules.getId(); + } + + @Override + public void updateProdServiceOverAreaRules(ProdServiceOverAreaRulesSaveReqVO updateReqVO) { + // 校验存在 + validateProdServiceOverAreaRulesExists(updateReqVO.getId()); + // 更新 + ProdServiceOverAreaRulesDO updateObj = BeanUtils.toBean(updateReqVO, ProdServiceOverAreaRulesDO.class); + prodServiceOverAreaRulesMapper.updateById(updateObj); + } + + @Override + public void deleteProdServiceOverAreaRules(Long id) { + // 校验存在 + validateProdServiceOverAreaRulesExists(id); + // 删除 + prodServiceOverAreaRulesMapper.deleteById(id); + } + + private void validateProdServiceOverAreaRulesExists(Long id) { + if (prodServiceOverAreaRulesMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_SERVICE_OVER_AREA_RULES_NOT_EXISTS); + } + } + + @Override + public ProdServiceOverAreaRulesDO getProdServiceOverAreaRules(Long id) { + return prodServiceOverAreaRulesMapper.selectById(id); + } + + @Override + public PageResult getProdServiceOverAreaRulesPage(ProdServiceOverAreaRulesPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdTagsServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdTagsServiceImpl.java new file mode 100644 index 0000000..c7600c9 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdTagsServiceImpl.java @@ -0,0 +1,73 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdTagsDO; +import com.tashow.cloud.product.mapper.ProdTagsMapper; +import com.tashow.cloud.product.service.ProdTagsService; +import com.tashow.cloud.product.vo.prodtags.ProdTagsPageReqVO; +import com.tashow.cloud.product.vo.prodtags.ProdTagsSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 商品和标签管理 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdTagsServiceImpl implements ProdTagsService { + + @Resource + private ProdTagsMapper prodTagsMapper; + + @Override + public Long createProdTags(ProdTagsSaveReqVO createReqVO) { + // 插入 + ProdTagsDO prodTags = BeanUtils.toBean(createReqVO, ProdTagsDO.class); + prodTagsMapper.insert(prodTags); + // 返回 + return prodTags.getProductId(); + } + + @Override + public void updateProdTags(ProdTagsSaveReqVO updateReqVO) { + // 校验存在 + validateProdTagsExists(updateReqVO.getProductId()); + // 更新 + ProdTagsDO updateObj = BeanUtils.toBean(updateReqVO, ProdTagsDO.class); + prodTagsMapper.updateById(updateObj); + } + + @Override + public void deleteProdTags(Long id) { + // 校验存在 + validateProdTagsExists(id); + // 删除 + prodTagsMapper.deleteById(id); + } + + private void validateProdTagsExists(Long id) { + if (prodTagsMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_TAGS_NOT_EXISTS); + } + } + + @Override + public ProdTagsDO getProdTags(Long id) { + return prodTagsMapper.selectById(id); + } + + @Override + public PageResult getProdTagsPage(ProdTagsPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdWeightRangePricesServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdWeightRangePricesServiceImpl.java new file mode 100644 index 0000000..8f4e423 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdWeightRangePricesServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProdWeightRangePricesDO; +import com.tashow.cloud.product.mapper.ProdWeightRangePricesMapper; +import com.tashow.cloud.product.service.ProdWeightRangePricesService; +import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; +import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 体重区间价格 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdWeightRangePricesServiceImpl implements ProdWeightRangePricesService { + + @Resource + private ProdWeightRangePricesMapper prodWeightRangePricesMapper; + + @Override + public Long createProdWeightRangePrices(ProdWeightRangePricesSaveReqVO createReqVO) { + // 插入 + ProdWeightRangePricesDO prodWeightRangePrices = BeanUtils.toBean(createReqVO, ProdWeightRangePricesDO.class); + prodWeightRangePricesMapper.insert(prodWeightRangePrices); + // 返回 + return prodWeightRangePrices.getId(); + } + + @Override + public void updateProdWeightRangePrices(ProdWeightRangePricesSaveReqVO updateReqVO) { + // 校验存在 + validateProdWeightRangePricesExists(updateReqVO.getId()); + // 更新 + ProdWeightRangePricesDO updateObj = BeanUtils.toBean(updateReqVO, ProdWeightRangePricesDO.class); + prodWeightRangePricesMapper.updateById(updateObj); + } + + @Override + public void deleteProdWeightRangePrices(Long id) { + // 校验存在 + validateProdWeightRangePricesExists(id); + // 删除 + prodWeightRangePricesMapper.deleteById(id); + } + + private void validateProdWeightRangePricesExists(Long id) { + if (prodWeightRangePricesMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PROD_WEIGHT_RANGE_PRICES_NOT_EXISTS); + } + } + + @Override + public ProdWeightRangePricesDO getProdWeightRangePrices(Long id) { + return prodWeightRangePricesMapper.selectById(id); + } + + @Override + public PageResult getProdWeightRangePricesPage(ProdWeightRangePricesPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProductOrderLimitServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProductOrderLimitServiceImpl.java new file mode 100644 index 0000000..9a35f06 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProductOrderLimitServiceImpl.java @@ -0,0 +1,74 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ProductOrderLimitDO; +import com.tashow.cloud.product.mapper.ProductOrderLimitMapper; +import com.tashow.cloud.product.service.ProductOrderLimitService; +import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitPageReqVO; +import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 商品接单上限设置 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProductOrderLimitServiceImpl implements ProductOrderLimitService { + + @Resource + private ProductOrderLimitMapper productOrderLimitMapper; + + @Override + public Long createProductOrderLimit(ProductOrderLimitSaveReqVO createReqVO) { + // 插入 + ProductOrderLimitDO productOrderLimit = BeanUtils.toBean(createReqVO, ProductOrderLimitDO.class); + productOrderLimitMapper.insert(productOrderLimit); + // 返回 + return productOrderLimit.getId(); + } + + @Override + public void updateProductOrderLimit(ProductOrderLimitSaveReqVO updateReqVO) { + // 校验存在 + validateProductOrderLimitExists(updateReqVO.getId()); + // 更新 + ProductOrderLimitDO updateObj = BeanUtils.toBean(updateReqVO, ProductOrderLimitDO.class); + productOrderLimitMapper.updateById(updateObj); + } + + @Override + public void deleteProductOrderLimit(Long id) { + // 校验存在 + validateProductOrderLimitExists(id); + // 删除 + productOrderLimitMapper.deleteById(id); + } + + private void validateProductOrderLimitExists(Long id) { + if (productOrderLimitMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.PRODUCT_ORDER_LIMIT_NOT_EXISTS); + } + } + + @Override + public ProductOrderLimitDO getProductOrderLimit(Long id) { + return productOrderLimitMapper.selectById(id); + } + + @Override + public PageResult getProductOrderLimitPage(ProductOrderLimitPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ShopDetailServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ShopDetailServiceImpl.java new file mode 100644 index 0000000..6c1ee51 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ShopDetailServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.ShopDetailDO; +import com.tashow.cloud.product.mapper.ShopDetailMapper; +import com.tashow.cloud.product.service.ShopDetailService; +import com.tashow.cloud.product.vo.shopdetail.ShopDetailPageReqVO; +import com.tashow.cloud.product.vo.shopdetail.ShopDetailSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 店铺信息 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ShopDetailServiceImpl implements ShopDetailService { + + @Resource + private ShopDetailMapper shopDetailMapper; + + @Override + public Long createShopDetail(ShopDetailSaveReqVO createReqVO) { + // 插入 + ShopDetailDO shopDetail = BeanUtils.toBean(createReqVO, ShopDetailDO.class); + shopDetailMapper.insert(shopDetail); + // 返回 + return shopDetail.getShopId(); + } + + @Override + public void updateShopDetail(ShopDetailSaveReqVO updateReqVO) { + // 校验存在 + validateShopDetailExists(updateReqVO.getShopId()); + // 更新 + ShopDetailDO updateObj = BeanUtils.toBean(updateReqVO, ShopDetailDO.class); + shopDetailMapper.updateById(updateObj); + } + + @Override + public void deleteShopDetail(Long id) { + // 校验存在 + validateShopDetailExists(id); + // 删除 + shopDetailMapper.deleteById(id); + } + + private void validateShopDetailExists(Long id) { + if (shopDetailMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.SHOP_DETAIL_NOT_EXISTS); + } + } + + @Override + public ShopDetailDO getShopDetail(Long id) { + return shopDetailMapper.selectById(id); + } + + @Override + public PageResult getShopDetailPage(ShopDetailPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDeliverServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDeliverServiceImpl.java new file mode 100644 index 0000000..ed8e9e9 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDeliverServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.product.mapper.SkuServiceDeliverMapper; +import com.tashow.cloud.product.service.SkuServiceDeliverService; +import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; +import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 服务交付方式 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class SkuServiceDeliverServiceImpl implements SkuServiceDeliverService { + + @Resource + private SkuServiceDeliverMapper skuServiceDeliverMapper; + + @Override + public Long createSkuServiceDeliver(SkuServiceDeliverSaveReqVO createReqVO) { + // 插入 + SkuServiceDeliverDO skuServiceDeliver = BeanUtils.toBean(createReqVO, SkuServiceDeliverDO.class); + skuServiceDeliverMapper.insert(skuServiceDeliver); + // 返回 + return skuServiceDeliver.getId(); + } + + @Override + public void updateSkuServiceDeliver(SkuServiceDeliverSaveReqVO updateReqVO) { + // 校验存在 + validateSkuServiceDeliverExists(updateReqVO.getId()); + // 更新 + SkuServiceDeliverDO updateObj = BeanUtils.toBean(updateReqVO, SkuServiceDeliverDO.class); + skuServiceDeliverMapper.updateById(updateObj); + } + + @Override + public void deleteSkuServiceDeliver(Long id) { + // 校验存在 + validateSkuServiceDeliverExists(id); + // 删除 + skuServiceDeliverMapper.deleteById(id); + } + + private void validateSkuServiceDeliverExists(Long id) { + if (skuServiceDeliverMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.SKU_SERVICE_DELIVER_NOT_EXISTS); + } + } + + @Override + public SkuServiceDeliverDO getSkuServiceDeliver(Long id) { + return skuServiceDeliverMapper.selectById(id); + } + + @Override + public PageResult getSkuServiceDeliverPage(SkuServiceDeliverPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java new file mode 100644 index 0000000..5fccb11 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.mapper.SkuMapper; +import com.tashow.cloud.product.service.SkuService; +import com.tashow.cloud.product.vo.sku.SkuPageReqVO; +import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 单品SKU Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class SkuServiceImpl implements SkuService { + + @Resource + private SkuMapper skuMapper; + + @Override + public Long createSku(SkuSaveReqVO createReqVO) { + // 插入 + SkuDO sku = BeanUtils.toBean(createReqVO, SkuDO.class); + skuMapper.insert(sku); + // 返回 + return sku.getSkuId(); + } + + @Override + public void updateSku(SkuSaveReqVO updateReqVO) { + // 校验存在 + validateSkuExists(updateReqVO.getSkuId()); + // 更新 + SkuDO updateObj = BeanUtils.toBean(updateReqVO, SkuDO.class); + skuMapper.updateById(updateObj); + } + + @Override + public void deleteSku(Long id) { + // 校验存在 + validateSkuExists(id); + // 删除 + skuMapper.deleteById(id); + } + + private void validateSkuExists(Long id) { + if (skuMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.SKU_NOT_EXISTS); + } + } + + @Override + public SkuDO getSku(Long id) { + return skuMapper.selectById(id); + } + + @Override + public PageResult getSkuPage(SkuPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java new file mode 100644 index 0000000..997846b --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java @@ -0,0 +1,29 @@ +package com.tashow.cloud.product.vo.prodprop; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; + +@Schema(description = "管理后台 - 商品属性分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdPropPageReqVO extends PageParam { + + @Schema(description = "属性名称", example = "李四") + private String propName; + + @Schema(description = "ProdPropRule 1:销售属性(规格); 2:参数属性;") + private Integer rule; + + @Schema(description = "店铺id", example = "2806") + private Long shopId; + + @Schema(description = "商品id", example = "21671") + private Integer prodId; + + @Schema(description = "是否删除0否1是") + private Boolean isDelete; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java new file mode 100644 index 0000000..57f0bde --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java @@ -0,0 +1,37 @@ +package com.tashow.cloud.product.vo.prodprop; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品属性 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdPropRespVO { + + @Schema(description = "属性id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14271") + @ExcelProperty("属性id") + private Long propId; + + @Schema(description = "属性名称", example = "李四") + @ExcelProperty("属性名称") + private String propName; + + @Schema(description = "ProdPropRule 1:销售属性(规格); 2:参数属性;") + @ExcelProperty("ProdPropRule 1:销售属性(规格); 2:参数属性;") + private Integer rule; + + @Schema(description = "店铺id", example = "2806") + @ExcelProperty("店铺id") + private Long shopId; + + @Schema(description = "商品id", example = "21671") + @ExcelProperty("商品id") + private Integer prodId; + + @Schema(description = "是否删除0否1是") + @ExcelProperty("是否删除0否1是") + private Boolean isDelete; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java new file mode 100644 index 0000000..caabecb --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java @@ -0,0 +1,30 @@ +package com.tashow.cloud.product.vo.prodprop; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 商品属性新增/修改 Request VO") +@Data +public class ProdPropSaveReqVO { + + @Schema(description = "属性id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14271") + private Long propId; + + @Schema(description = "属性名称", example = "李四") + private String propName; + + @Schema(description = "ProdPropRule 1:销售属性(规格); 2:参数属性;") + private Integer rule; + + @Schema(description = "店铺id", example = "2806") + private Long shopId; + + @Schema(description = "商品id", example = "21671") + private Integer prodId; + + @Schema(description = "是否删除0否1是") + private Boolean isDelete; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java new file mode 100644 index 0000000..e70a613 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java @@ -0,0 +1,23 @@ +package com.tashow.cloud.product.vo.prodpropvalue; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; + +@Schema(description = "管理后台 - 属性规则分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdPropValuePageReqVO extends PageParam { + + @Schema(description = "属性值名称") + private String propValue; + + @Schema(description = "属性ID", example = "28282") + private Long propId; + + @Schema(description = "是否删除0否1是") + private Boolean isDelete; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java new file mode 100644 index 0000000..3f3cf9e --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java @@ -0,0 +1,29 @@ +package com.tashow.cloud.product.vo.prodpropvalue; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 属性规则 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdPropValueRespVO { + + @Schema(description = "属性值ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13799") + @ExcelProperty("属性值ID") + private Long valueId; + + @Schema(description = "属性值名称") + @ExcelProperty("属性值名称") + private String propValue; + + @Schema(description = "属性ID", example = "28282") + @ExcelProperty("属性ID") + private Long propId; + + @Schema(description = "是否删除0否1是") + @ExcelProperty("是否删除0否1是") + private Boolean isDelete; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java new file mode 100644 index 0000000..b1c93a3 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java @@ -0,0 +1,24 @@ +package com.tashow.cloud.product.vo.prodpropvalue; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 属性规则新增/修改 Request VO") +@Data +public class ProdPropValueSaveReqVO { + + @Schema(description = "属性值ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13799") + private Long valueId; + + @Schema(description = "属性值名称") + private String propValue; + + @Schema(description = "属性ID", example = "28282") + private Long propId; + + @Schema(description = "是否删除0否1是") + private Boolean isDelete; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java new file mode 100644 index 0000000..1539bd0 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.vo.prodreservationconfig; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 商品预约配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdReservationConfigPageReqVO extends PageParam { + + @Schema(description = "关联的商品ID", example = "19369") + private Long prodId; + + @Schema(description = "预约时段设置(JSON格式存储)") + private String reservationTimeSlots; + + @Schema(description = "需提前多少小时预约") + private Integer advanceHours; + + @Schema(description = "预约日期范围 7天 10天 15天 30天") + private Integer reservationDateRange; + + @Schema(description = "是否允许更改预约时间 1可以 0不可以") + private Boolean allowChange; + + @Schema(description = "更改预约时间的时间规则(如服务开始前1小时可更改)") + private Integer changeTimeRule; + + @Schema(description = "允许更改预约时间的最大次数") + private Integer maxChangeTimes; + + @Schema(description = "黑名自定义日期(JSON格式存储)") + private String blacklistedDates; + + @Schema(description = "黑名单指定日期(JSON格式存储)") + private String blackAppointDates; + + @Schema(description = "法定节假日是否开启0:关闭1开启") + private Boolean blackHappy; + + @Schema(description = "固定休息日周末是否开启0关闭1开启") + private Boolean blackWeekend; + + @Schema(description = "配置创建时间") + private LocalDateTime createdAt; + + @Schema(description = "配置最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java new file mode 100644 index 0000000..406dd2d --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java @@ -0,0 +1,71 @@ +package com.tashow.cloud.product.vo.prodreservationconfig; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品预约配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdReservationConfigRespVO { + + @Schema(description = "预约配置的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "20606") + @ExcelProperty("预约配置的唯一标识符") + private Long id; + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19369") + @ExcelProperty("关联的商品ID") + private Long prodId; + + @Schema(description = "预约时段设置(JSON格式存储)", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("预约时段设置(JSON格式存储)") + private String reservationTimeSlots; + + @Schema(description = "需提前多少小时预约", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("需提前多少小时预约") + private Integer advanceHours; + + @Schema(description = "预约日期范围 7天 10天 15天 30天", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("预约日期范围 7天 10天 15天 30天") + private Integer reservationDateRange; + + @Schema(description = "是否允许更改预约时间 1可以 0不可以", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否允许更改预约时间 1可以 0不可以") + private Boolean allowChange; + + @Schema(description = "更改预约时间的时间规则(如服务开始前1小时可更改)") + @ExcelProperty("更改预约时间的时间规则(如服务开始前1小时可更改)") + private Integer changeTimeRule; + + @Schema(description = "允许更改预约时间的最大次数") + @ExcelProperty("允许更改预约时间的最大次数") + private Integer maxChangeTimes; + + @Schema(description = "黑名自定义日期(JSON格式存储)") + @ExcelProperty("黑名自定义日期(JSON格式存储)") + private String blacklistedDates; + + @Schema(description = "黑名单指定日期(JSON格式存储)") + @ExcelProperty("黑名单指定日期(JSON格式存储)") + private String blackAppointDates; + + @Schema(description = "法定节假日是否开启0:关闭1开启") + @ExcelProperty("法定节假日是否开启0:关闭1开启") + private Boolean blackHappy; + + @Schema(description = "固定休息日周末是否开启0关闭1开启") + @ExcelProperty("固定休息日周末是否开启0关闭1开启") + private Boolean blackWeekend; + + @Schema(description = "配置创建时间") + @ExcelProperty("配置创建时间") + private LocalDateTime createdAt; + + @Schema(description = "配置最后更新时间") + @ExcelProperty("配置最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java new file mode 100644 index 0000000..f3e8db7 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java @@ -0,0 +1,61 @@ +package com.tashow.cloud.product.vo.prodreservationconfig; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 商品预约配置新增/修改 Request VO") +@Data +public class ProdReservationConfigSaveReqVO { + + @Schema(description = "预约配置的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "20606") + private Long id; + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19369") + @NotNull(message = "关联的商品ID不能为空") + private Long prodId; + + @Schema(description = "预约时段设置(JSON格式存储)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "预约时段设置(JSON格式存储)不能为空") + private String reservationTimeSlots; + + @Schema(description = "需提前多少小时预约", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "需提前多少小时预约不能为空") + private Integer advanceHours; + + @Schema(description = "预约日期范围 7天 10天 15天 30天", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "预约日期范围 7天 10天 15天 30天不能为空") + private Integer reservationDateRange; + + @Schema(description = "是否允许更改预约时间 1可以 0不可以", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否允许更改预约时间 1可以 0不可以不能为空") + private Boolean allowChange; + + @Schema(description = "更改预约时间的时间规则(如服务开始前1小时可更改)") + private Integer changeTimeRule; + + @Schema(description = "允许更改预约时间的最大次数") + private Integer maxChangeTimes; + + @Schema(description = "黑名自定义日期(JSON格式存储)") + private String blacklistedDates; + + @Schema(description = "黑名单指定日期(JSON格式存储)") + private String blackAppointDates; + + @Schema(description = "法定节假日是否开启0:关闭1开启") + private Boolean blackHappy; + + @Schema(description = "固定休息日周末是否开启0关闭1开启") + private Boolean blackWeekend; + + @Schema(description = "配置创建时间") + private LocalDateTime createdAt; + + @Schema(description = "配置最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java new file mode 100644 index 0000000..5db12e1 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java @@ -0,0 +1,14 @@ +package com.tashow.cloud.product.vo.prodservicearearelevance; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; + +@Schema(description = "管理后台 - 商品与服务区域关联分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdServiceAreaRelevancePageReqVO extends PageParam { + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java new file mode 100644 index 0000000..d32d6a5 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java @@ -0,0 +1,21 @@ +package com.tashow.cloud.product.vo.prodservicearearelevance; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品与服务区域关联 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdServiceAreaRelevanceRespVO { + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23588") + @ExcelProperty("关联的商品ID") + private Long prodId; + + @Schema(description = "关联的服务区域ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28293") + @ExcelProperty("关联的服务区域ID") + private Long areaId; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java new file mode 100644 index 0000000..4952162 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java @@ -0,0 +1,18 @@ +package com.tashow.cloud.product.vo.prodservicearearelevance; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 商品与服务区域关联新增/修改 Request VO") +@Data +public class ProdServiceAreaRelevanceSaveReqVO { + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23588") + private Long prodId; + + @Schema(description = "关联的服务区域ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28293") + private Long areaId; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java new file mode 100644 index 0000000..a8f653e --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java @@ -0,0 +1,25 @@ +package com.tashow.cloud.product.vo.prodserviceareas; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 服务区域分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdServiceAreasPageReqVO extends PageParam { + + @Schema(description = "服务区域名称(如台江区、鼓楼区)", example = "芋艿") + private String areaName; + + @Schema(description = "区域创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasRespVO.java new file mode 100644 index 0000000..90fb4f3 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasRespVO.java @@ -0,0 +1,27 @@ +package com.tashow.cloud.product.vo.prodserviceareas; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 服务区域 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdServiceAreasRespVO { + + @Schema(description = "服务区域的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "26474") + @ExcelProperty("服务区域的唯一标识符") + private Long id; + + @Schema(description = "服务区域名称(如台江区、鼓楼区)", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @ExcelProperty("服务区域名称(如台江区、鼓楼区)") + private String areaName; + + @Schema(description = "区域创建时间") + @ExcelProperty("区域创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java new file mode 100644 index 0000000..c63d605 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java @@ -0,0 +1,19 @@ +package com.tashow.cloud.product.vo.prodserviceareas; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 服务区域新增/修改 Request VO") +@Data +public class ProdServiceAreasSaveReqVO { + + @Schema(description = "服务区域的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "26474") + private Long id; + + @Schema(description = "服务区域名称(如台江区、鼓楼区)", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @NotEmpty(message = "服务区域名称(如台江区、鼓楼区)不能为空") + private String areaName; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java new file mode 100644 index 0000000..c509dfc --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java @@ -0,0 +1,34 @@ +package com.tashow.cloud.product.vo.prodserviceoverarearules; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 超区规则分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdServiceOverAreaRulesPageReqVO extends PageParam { + + @Schema(description = "关联的商品ID", example = "20133") + private Long prodId; + + @Schema(description = "超区规则类型(0:拒单、2:接单并收取超区费、3:接单并免超区费)", example = "1") + private Boolean ruleType; + + @Schema(description = "超区费用(仅在rule_type为accept_with_fee时有效)") + private BigDecimal fee; + + @Schema(description = "规则创建时间") + private LocalDateTime createdAt; + + @Schema(description = "规则最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java new file mode 100644 index 0000000..a4f55b2 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java @@ -0,0 +1,40 @@ +package com.tashow.cloud.product.vo.prodserviceoverarearules; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 超区规则 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdServiceOverAreaRulesRespVO { + + @Schema(description = "超区规则的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "32421") + @ExcelProperty("超区规则的唯一标识符") + private Long id; + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20133") + @ExcelProperty("关联的商品ID") + private Long prodId; + + @Schema(description = "超区规则类型(0:拒单、2:接单并收取超区费、3:接单并免超区费)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("超区规则类型(0:拒单、2:接单并收取超区费、3:接单并免超区费)") + private Boolean ruleType; + + @Schema(description = "超区费用(仅在rule_type为accept_with_fee时有效)") + @ExcelProperty("超区费用(仅在rule_type为accept_with_fee时有效)") + private BigDecimal fee; + + @Schema(description = "规则创建时间") + @ExcelProperty("规则创建时间") + private LocalDateTime createdAt; + + @Schema(description = "规则最后更新时间") + @ExcelProperty("规则最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java new file mode 100644 index 0000000..e62ce66 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java @@ -0,0 +1,35 @@ +package com.tashow.cloud.product.vo.prodserviceoverarearules; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 超区规则新增/修改 Request VO") +@Data +public class ProdServiceOverAreaRulesSaveReqVO { + + @Schema(description = "超区规则的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "32421") + private Long id; + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20133") + @NotNull(message = "关联的商品ID不能为空") + private Long prodId; + + @Schema(description = "超区规则类型(0:拒单、2:接单并收取超区费、3:接单并免超区费)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "超区规则类型(0:拒单、2:接单并收取超区费、3:接单并免超区费)不能为空") + private Boolean ruleType; + + @Schema(description = "超区费用(仅在rule_type为accept_with_fee时有效)") + private BigDecimal fee; + + @Schema(description = "规则创建时间") + private LocalDateTime createdAt; + + @Schema(description = "规则最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsPageReqVO.java new file mode 100644 index 0000000..6bf6034 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsPageReqVO.java @@ -0,0 +1,22 @@ +package com.tashow.cloud.product.vo.prodtags; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 商品和标签管理分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdTagsPageReqVO extends PageParam { + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsRespVO.java new file mode 100644 index 0000000..e4694bc --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsRespVO.java @@ -0,0 +1,27 @@ +package com.tashow.cloud.product.vo.prodtags; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品和标签管理 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdTagsRespVO { + + @Schema(description = "商品id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8574") + @ExcelProperty("商品id") + private Long productId; + + @Schema(description = "标签id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24317") + @ExcelProperty("标签id") + private Long tagId; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsSaveReqVO.java new file mode 100644 index 0000000..a43c371 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsSaveReqVO.java @@ -0,0 +1,18 @@ +package com.tashow.cloud.product.vo.prodtags; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; + +@Schema(description = "管理后台 - 商品和标签管理新增/修改 Request VO") +@Data +public class ProdTagsSaveReqVO { + + @Schema(description = "商品id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8574") + private Long productId; + + @Schema(description = "标签id", requiredMode = Schema.RequiredMode.REQUIRED, example = "24317") + private Long tagId; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java new file mode 100644 index 0000000..99ba638 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java @@ -0,0 +1,33 @@ +package com.tashow.cloud.product.vo.productorderlimit; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 商品接单上限设置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProductOrderLimitPageReqVO extends PageParam { + + @Schema(description = "关联的商品ID", example = "10171") + private Long prodId; + + @Schema(description = "限制单位'0:按自然天',1:'按自然周',2:'按自然月'") + private Boolean limitUnit; + + @Schema(description = "上限阈值") + private Integer maxOrders; + + @Schema(description = "配置创建时间") + private LocalDateTime createdAt; + + @Schema(description = "配置最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitRespVO.java new file mode 100644 index 0000000..fd26956 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitRespVO.java @@ -0,0 +1,39 @@ +package com.tashow.cloud.product.vo.productorderlimit; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品接单上限设置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProductOrderLimitRespVO { + + @Schema(description = "接单上限配置的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "10334") + @ExcelProperty("接单上限配置的唯一标识符") + private Long id; + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10171") + @ExcelProperty("关联的商品ID") + private Long prodId; + + @Schema(description = "限制单位'0:按自然天',1:'按自然周',2:'按自然月'", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("限制单位'0:按自然天',1:'按自然周',2:'按自然月'") + private Boolean limitUnit; + + @Schema(description = "上限阈值", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("上限阈值") + private Integer maxOrders; + + @Schema(description = "配置创建时间") + @ExcelProperty("配置创建时间") + private LocalDateTime createdAt; + + @Schema(description = "配置最后更新时间") + @ExcelProperty("配置最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java new file mode 100644 index 0000000..c7a5ead --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java @@ -0,0 +1,35 @@ +package com.tashow.cloud.product.vo.productorderlimit; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 商品接单上限设置新增/修改 Request VO") +@Data +public class ProductOrderLimitSaveReqVO { + + @Schema(description = "接单上限配置的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "10334") + private Long id; + + @Schema(description = "关联的商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10171") + @NotNull(message = "关联的商品ID不能为空") + private Long prodId; + + @Schema(description = "限制单位'0:按自然天',1:'按自然周',2:'按自然月'", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "限制单位'0:按自然天',1:'按自然周',2:'按自然月'不能为空") + private Boolean limitUnit; + + @Schema(description = "上限阈值", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "上限阈值不能为空") + private Integer maxOrders; + + @Schema(description = "配置创建时间") + private LocalDateTime createdAt; + + @Schema(description = "配置最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java new file mode 100644 index 0000000..d9a215f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java @@ -0,0 +1,37 @@ +package com.tashow.cloud.product.vo.prodweightrangeprices; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 体重区间价格分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdWeightRangePricesPageReqVO extends PageParam { + + @Schema(description = "关联的体重配置ID", example = "6754") + private Long prodId; + + @Schema(description = "体重区间") + private String weightRange; + + @Schema(description = "价格", example = "11575") + private BigDecimal price; + + @Schema(description = "是否启用该规则0否1是") + private Boolean isEnabled; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java new file mode 100644 index 0000000..4f6f46b --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java @@ -0,0 +1,44 @@ +package com.tashow.cloud.product.vo.prodweightrangeprices; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 体重区间价格 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdWeightRangePricesRespVO { + + @Schema(description = "体重区间价格的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "26157") + @ExcelProperty("体重区间价格的唯一标识符") + private Long id; + + @Schema(description = "关联的体重配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6754") + @ExcelProperty("关联的体重配置ID") + private Long prodId; + + @Schema(description = "体重区间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("体重区间") + private String weightRange; + + @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "11575") + @ExcelProperty("价格") + private BigDecimal price; + + @Schema(description = "是否启用该规则0否1是", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用该规则0否1是") + private Boolean isEnabled; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + @ExcelProperty("更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java new file mode 100644 index 0000000..a1c34c9 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java @@ -0,0 +1,40 @@ +package com.tashow.cloud.product.vo.prodweightrangeprices; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 体重区间价格新增/修改 Request VO") +@Data +public class ProdWeightRangePricesSaveReqVO { + + @Schema(description = "体重区间价格的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "26157") + private Long id; + + @Schema(description = "关联的体重配置ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6754") + @NotNull(message = "关联的体重配置ID不能为空") + private Long prodId; + + @Schema(description = "体重区间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "体重区间不能为空") + private String weightRange; + + @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "11575") + @NotNull(message = "价格不能为空") + private BigDecimal price; + + @Schema(description = "是否启用该规则0否1是", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用该规则0否1是不能为空") + private Boolean isEnabled; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailPageReqVO.java new file mode 100644 index 0000000..939d6a7 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailPageReqVO.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.vo.shopdetail; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 店铺信息分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ShopDetailPageReqVO extends PageParam { + + @Schema(description = "店铺名称(数字、中文,英文(可混合,不可有特殊字符),可修改)、不唯一", example = "芋艿") + private String shopName; + + @Schema(description = "店长用户id", example = "15607") + private String userId; + + @Schema(description = "店铺类型", example = "2") + private Integer shopType; + + @Schema(description = "店铺简介(可修改)") + private String intro; + + @Schema(description = "店铺公告(可修改)") + private String shopNotice; + + @Schema(description = "店铺行业(餐饮、生鲜果蔬、鲜花等)") + private Integer shopIndustry; + + @Schema(description = "店长") + private String shopOwner; + + @Schema(description = "店铺绑定的手机(登录账号:唯一)") + private String mobile; + + @Schema(description = "店铺联系电话") + private String tel; + + @Schema(description = "店铺所在纬度(可修改)") + private String shopLat; + + @Schema(description = "店铺所在经度(可修改)") + private String shopLng; + + @Schema(description = "店铺详细地址") + private String shopAddress; + + @Schema(description = "店铺所在省份(描述)") + private String province; + + @Schema(description = "店铺所在城市(描述)") + private String city; + + @Schema(description = "店铺所在区域(描述)") + private String area; + + @Schema(description = "店铺省市区代码,用于回显") + private String pcaCode; + + @Schema(description = "店铺logo(可修改)") + private String shopLogo; + + @Schema(description = "店铺相册") + private String shopPhotos; + + @Schema(description = "每天营业时间段(可修改)") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] openTime; + + @Schema(description = "店铺状态(-1:未开通 0: 停业中 1:营业中),可修改", example = "2") + private Integer shopStatus; + + @Schema(description = "0:商家承担运费; 1:买家承担运费", example = "2") + private Integer transportType; + + @Schema(description = "固定运费") + private BigDecimal fixedFreight; + + @Schema(description = "满X包邮") + private BigDecimal fullFreeShipping; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "分销开关(0:开启 1:关闭)") + private Integer isDistribution; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailRespVO.java new file mode 100644 index 0000000..9278140 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailRespVO.java @@ -0,0 +1,120 @@ +package com.tashow.cloud.product.vo.shopdetail; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 店铺信息 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ShopDetailRespVO { + + @Schema(description = "店铺id", requiredMode = Schema.RequiredMode.REQUIRED, example = "5101") + @ExcelProperty("店铺id") + private Long shopId; + + @Schema(description = "店铺名称(数字、中文,英文(可混合,不可有特殊字符),可修改)、不唯一", example = "芋艿") + @ExcelProperty("店铺名称(数字、中文,英文(可混合,不可有特殊字符),可修改)、不唯一") + private String shopName; + + @Schema(description = "店长用户id", example = "15607") + @ExcelProperty("店长用户id") + private String userId; + + @Schema(description = "店铺类型", example = "2") + @ExcelProperty("店铺类型") + private Integer shopType; + + @Schema(description = "店铺简介(可修改)") + @ExcelProperty("店铺简介(可修改)") + private String intro; + + @Schema(description = "店铺公告(可修改)") + @ExcelProperty("店铺公告(可修改)") + private String shopNotice; + + @Schema(description = "店铺行业(餐饮、生鲜果蔬、鲜花等)") + @ExcelProperty("店铺行业(餐饮、生鲜果蔬、鲜花等)") + private Integer shopIndustry; + + @Schema(description = "店长") + @ExcelProperty("店长") + private String shopOwner; + + @Schema(description = "店铺绑定的手机(登录账号:唯一)") + @ExcelProperty("店铺绑定的手机(登录账号:唯一)") + private String mobile; + + @Schema(description = "店铺联系电话") + @ExcelProperty("店铺联系电话") + private String tel; + + @Schema(description = "店铺所在纬度(可修改)") + @ExcelProperty("店铺所在纬度(可修改)") + private String shopLat; + + @Schema(description = "店铺所在经度(可修改)") + @ExcelProperty("店铺所在经度(可修改)") + private String shopLng; + + @Schema(description = "店铺详细地址") + @ExcelProperty("店铺详细地址") + private String shopAddress; + + @Schema(description = "店铺所在省份(描述)") + @ExcelProperty("店铺所在省份(描述)") + private String province; + + @Schema(description = "店铺所在城市(描述)") + @ExcelProperty("店铺所在城市(描述)") + private String city; + + @Schema(description = "店铺所在区域(描述)") + @ExcelProperty("店铺所在区域(描述)") + private String area; + + @Schema(description = "店铺省市区代码,用于回显") + @ExcelProperty("店铺省市区代码,用于回显") + private String pcaCode; + + @Schema(description = "店铺logo(可修改)") + @ExcelProperty("店铺logo(可修改)") + private String shopLogo; + + @Schema(description = "店铺相册") + @ExcelProperty("店铺相册") + private String shopPhotos; + + @Schema(description = "每天营业时间段(可修改)") + @ExcelProperty("每天营业时间段(可修改)") + private String openTime; + + @Schema(description = "店铺状态(-1:未开通 0: 停业中 1:营业中),可修改", example = "2") + @ExcelProperty("店铺状态(-1:未开通 0: 停业中 1:营业中),可修改") + private Integer shopStatus; + + @Schema(description = "0:商家承担运费; 1:买家承担运费", example = "2") + @ExcelProperty("0:商家承担运费; 1:买家承担运费") + private Integer transportType; + + @Schema(description = "固定运费") + @ExcelProperty("固定运费") + private BigDecimal fixedFreight; + + @Schema(description = "满X包邮") + @ExcelProperty("满X包邮") + private BigDecimal fullFreeShipping; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "分销开关(0:开启 1:关闭)") + @ExcelProperty("分销开关(0:开启 1:关闭)") + private Integer isDistribution; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailSaveReqVO.java new file mode 100644 index 0000000..5d64c4e --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailSaveReqVO.java @@ -0,0 +1,88 @@ +package com.tashow.cloud.product.vo.shopdetail; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 店铺信息新增/修改 Request VO") +@Data +public class ShopDetailSaveReqVO { + + @Schema(description = "店铺id", requiredMode = Schema.RequiredMode.REQUIRED, example = "5101") + private Long shopId; + + @Schema(description = "店铺名称(数字、中文,英文(可混合,不可有特殊字符),可修改)、不唯一", example = "芋艿") + private String shopName; + + @Schema(description = "店长用户id", example = "15607") + private String userId; + + @Schema(description = "店铺类型", example = "2") + private Integer shopType; + + @Schema(description = "店铺简介(可修改)") + private String intro; + + @Schema(description = "店铺公告(可修改)") + private String shopNotice; + + @Schema(description = "店铺行业(餐饮、生鲜果蔬、鲜花等)") + private Integer shopIndustry; + + @Schema(description = "店长") + private String shopOwner; + + @Schema(description = "店铺绑定的手机(登录账号:唯一)") + private String mobile; + + @Schema(description = "店铺联系电话") + private String tel; + + @Schema(description = "店铺所在纬度(可修改)") + private String shopLat; + + @Schema(description = "店铺所在经度(可修改)") + private String shopLng; + + @Schema(description = "店铺详细地址") + private String shopAddress; + + @Schema(description = "店铺所在省份(描述)") + private String province; + + @Schema(description = "店铺所在城市(描述)") + private String city; + + @Schema(description = "店铺所在区域(描述)") + private String area; + + @Schema(description = "店铺省市区代码,用于回显") + private String pcaCode; + + @Schema(description = "店铺logo(可修改)") + private String shopLogo; + + @Schema(description = "店铺相册") + private String shopPhotos; + + @Schema(description = "每天营业时间段(可修改)") + private String openTime; + + @Schema(description = "店铺状态(-1:未开通 0: 停业中 1:营业中),可修改", example = "2") + private Integer shopStatus; + + @Schema(description = "0:商家承担运费; 1:买家承担运费", example = "2") + private Integer transportType; + + @Schema(description = "固定运费") + private BigDecimal fixedFreight; + + @Schema(description = "满X包邮") + private BigDecimal fullFreeShipping; + + @Schema(description = "分销开关(0:开启 1:关闭)") + private Integer isDistribution; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java new file mode 100644 index 0000000..f4009cc --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java @@ -0,0 +1,98 @@ +package com.tashow.cloud.product.vo.sku; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 单品SKU分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SkuPageReqVO extends PageParam { + + @Schema(description = "商品ID", example = "18784") + private Long prodId; + + @Schema(description = "销售属性组合字符串 格式是p1:v1;p2:v2") + private String properties; + + @Schema(description = "别名") + private String alias; + + @Schema(description = "价格", example = "32405") + private BigDecimal price; + + @Schema(description = "最低价格", example = "5040") + private BigDecimal minPrice; + + @Schema(description = "最高价格", example = "11547") + private BigDecimal maxPrice; + + @Schema(description = "成本价", example = "28062") + private BigDecimal originalPrice; + + @Schema(description = "市场价", example = "11547") + private BigDecimal marketPrice; + + @Schema(description = "单位") + private String unit; + + @Schema(description = "0:主服务1:待定", example = "1") + private Integer type; + + @Schema(description = "概述") + private String overview; + + @Schema(description = "库存") + private Integer stocks; + + @Schema(description = "预警库存") + private Integer warnStocks; + + @Schema(description = "库存扣款时机0:付款扣1:下单扣", example = "1") + private Boolean stocksType; + + @Schema(description = "sku编码") + private String skuCode; + + @Schema(description = "商品条形码", example = "14390") + private String modelId; + + @Schema(description = "sku图片") + private String pic; + + @Schema(description = "sku名称", example = "张三") + private String skuName; + + @Schema(description = "商品名称", example = "芋艿") + private String prodName; + + @Schema(description = "版本号") + private Integer version; + + @Schema(description = "商品重量") + private Double weight; + + @Schema(description = "商品体积") + private Double volume; + + @Schema(description = "0 禁用 1 启用", example = "1") + private Integer status; + + @Schema(description = "0 正常 1 已被删除") + private Integer isDelete; + + @Schema(description = "最小购买数量") + private Integer moq; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java new file mode 100644 index 0000000..a1db220 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java @@ -0,0 +1,124 @@ +package com.tashow.cloud.product.vo.sku; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 单品SKU Response VO") +@Data +@ExcelIgnoreUnannotated +public class SkuRespVO { + + @Schema(description = "单品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32230") + @ExcelProperty("单品ID") + private Long skuId; + + @Schema(description = "商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18784") + @ExcelProperty("商品ID") + private Long prodId; + + @Schema(description = "销售属性组合字符串 格式是p1:v1;p2:v2") + @ExcelProperty("销售属性组合字符串 格式是p1:v1;p2:v2") + private String properties; + + @Schema(description = "别名") + @ExcelProperty("别名") + private String alias; + + @Schema(description = "价格", example = "32405") + @ExcelProperty("价格") + private BigDecimal price; + + @Schema(description = "最低价格", example = "5040") + @ExcelProperty("最低价格") + private BigDecimal minPrice; + + @Schema(description = "最高价格", example = "11547") + @ExcelProperty("最高价格") + private BigDecimal maxPrice; + + @Schema(description = "成本价", example = "28062") + @ExcelProperty("成本价") + private BigDecimal originalPrice; + + @Schema(description = "市场价", example = "11547") + @ExcelProperty("市场价") + private BigDecimal marketPrice; + + @Schema(description = "单位") + @ExcelProperty("单位") + private String unit; + + @Schema(description = "0:主服务1:待定", example = "1") + @ExcelProperty("0:主服务1:待定") + private Integer type; + + @Schema(description = "概述") + @ExcelProperty("概述") + private String overview; + + @Schema(description = "库存") + @ExcelProperty("库存") + private Integer stocks; + + @Schema(description = "预警库存") + @ExcelProperty("预警库存") + private Integer warnStocks; + + @Schema(description = "库存扣款时机0:付款扣1:下单扣", example = "1") + @ExcelProperty("库存扣款时机0:付款扣1:下单扣") + private Boolean stocksType; + + @Schema(description = "sku编码") + @ExcelProperty("sku编码") + private String skuCode; + + @Schema(description = "商品条形码", example = "14390") + @ExcelProperty("商品条形码") + private String modelId; + + @Schema(description = "sku图片") + @ExcelProperty("sku图片") + private String pic; + + @Schema(description = "sku名称", example = "张三") + @ExcelProperty("sku名称") + private String skuName; + + @Schema(description = "商品名称", example = "芋艿") + @ExcelProperty("商品名称") + private String prodName; + + @Schema(description = "版本号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("版本号") + private Integer version; + + @Schema(description = "商品重量") + @ExcelProperty("商品重量") + private Double weight; + + @Schema(description = "商品体积") + @ExcelProperty("商品体积") + private Double volume; + + @Schema(description = "0 禁用 1 启用", example = "1") + @ExcelProperty("0 禁用 1 启用") + private Integer status; + + @Schema(description = "0 正常 1 已被删除") + @ExcelProperty("0 正常 1 已被删除") + private Integer isDelete; + + @Schema(description = "最小购买数量") + @ExcelProperty("最小购买数量") + private Integer moq; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java new file mode 100644 index 0000000..387b10d --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java @@ -0,0 +1,93 @@ +package com.tashow.cloud.product.vo.sku; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 单品SKU新增/修改 Request VO") +@Data +public class SkuSaveReqVO { + + @Schema(description = "单品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32230") + private Long skuId; + + @Schema(description = "商品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18784") + @NotNull(message = "商品ID不能为空") + private Long prodId; + + @Schema(description = "销售属性组合字符串 格式是p1:v1;p2:v2") + private String properties; + + @Schema(description = "别名") + private String alias; + + @Schema(description = "价格", example = "32405") + private BigDecimal price; + + @Schema(description = "最低价格", example = "5040") + private BigDecimal minPrice; + + @Schema(description = "最高价格", example = "11547") + private BigDecimal maxPrice; + + @Schema(description = "成本价", example = "28062") + private BigDecimal originalPrice; + + @Schema(description = "市场价", example = "11547") + private BigDecimal marketPrice; + + @Schema(description = "单位") + private String unit; + + @Schema(description = "0:主服务1:待定", example = "1") + private Integer type; + + @Schema(description = "概述") + private String overview; + + @Schema(description = "库存") + private Integer stocks; + + @Schema(description = "预警库存") + private Integer warnStocks; + + @Schema(description = "库存扣款时机0:付款扣1:下单扣", example = "1") + private Boolean stocksType; + + @Schema(description = "sku编码") + private String skuCode; + + @Schema(description = "商品条形码", example = "14390") + private String modelId; + + @Schema(description = "sku图片") + private String pic; + + @Schema(description = "sku名称", example = "张三") + private String skuName; + + @Schema(description = "商品名称", example = "芋艿") + private String prodName; + + @Schema(description = "版本号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "版本号不能为空") + private Integer version; + + @Schema(description = "商品重量") + private Double weight; + + @Schema(description = "商品体积") + private Double volume; + + @Schema(description = "0 禁用 1 启用", example = "1") + private Integer status; + + @Schema(description = "0 正常 1 已被删除") + private Integer isDelete; + + @Schema(description = "最小购买数量") + private Integer moq; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java new file mode 100644 index 0000000..96a8451 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java @@ -0,0 +1,52 @@ +package com.tashow.cloud.product.vo.skuservicedeliver; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 服务交付方式分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SkuServiceDeliverPageReqVO extends PageParam { + + @Schema(description = "关联的扩展服务ID", example = "27072") + private Long serviceId; + + @Schema(description = "交互方式0:快递物流 1:到店自提 2:商家自送", example = "2") + private Boolean type; + + @Schema(description = "价格", example = "23915") + private BigDecimal price; + + @Schema(description = "是否收费0:免费1收费") + private Boolean isCharge; + + @Schema(description = "详细地址") + private String address; + + @Schema(description = "省") + private String province; + + @Schema(description = "市") + private String city; + + @Schema(description = "区") + private String area; + + @Schema(description = "电话号码") + private String tel; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java new file mode 100644 index 0000000..2a16d98 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java @@ -0,0 +1,64 @@ +package com.tashow.cloud.product.vo.skuservicedeliver; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 服务交付方式 Response VO") +@Data +@ExcelIgnoreUnannotated +public class SkuServiceDeliverRespVO { + + @Schema(description = "服务遗体运输唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "12984") + @ExcelProperty("服务遗体运输唯一标识符") + private Long id; + + @Schema(description = "关联的扩展服务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27072") + @ExcelProperty("关联的扩展服务ID") + private Long serviceId; + + @Schema(description = "交互方式0:快递物流 1:到店自提 2:商家自送", example = "2") + @ExcelProperty("交互方式0:快递物流 1:到店自提 2:商家自送") + private Boolean type; + + @Schema(description = "价格", example = "23915") + @ExcelProperty("价格") + private BigDecimal price; + + @Schema(description = "是否收费0:免费1收费") + @ExcelProperty("是否收费0:免费1收费") + private Boolean isCharge; + + @Schema(description = "详细地址", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("详细地址") + private String address; + + @Schema(description = "省") + @ExcelProperty("省") + private String province; + + @Schema(description = "市") + @ExcelProperty("市") + private String city; + + @Schema(description = "区") + @ExcelProperty("区") + private String area; + + @Schema(description = "电话号码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("电话号码") + private String tel; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + @ExcelProperty("最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java new file mode 100644 index 0000000..39f8101 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java @@ -0,0 +1,54 @@ +package com.tashow.cloud.product.vo.skuservicedeliver; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 服务交付方式新增/修改 Request VO") +@Data +public class SkuServiceDeliverSaveReqVO { + + @Schema(description = "服务遗体运输唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "12984") + private Long id; + + @Schema(description = "关联的扩展服务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27072") + @NotNull(message = "关联的扩展服务ID不能为空") + private Long serviceId; + + @Schema(description = "交互方式0:快递物流 1:到店自提 2:商家自送", example = "2") + private Boolean type; + + @Schema(description = "价格", example = "23915") + private BigDecimal price; + + @Schema(description = "是否收费0:免费1收费") + private Boolean isCharge; + + @Schema(description = "详细地址", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "详细地址不能为空") + private String address; + + @Schema(description = "省") + private String province; + + @Schema(description = "市") + private String city; + + @Schema(description = "区") + private String area; + + @Schema(description = "电话号码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "电话号码不能为空") + private String tel; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseIntervalsMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseIntervalsMapper.xml new file mode 100644 index 0000000..48ab32c --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseIntervalsMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml new file mode 100644 index 0000000..0450b57 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml new file mode 100644 index 0000000..2cde235 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdReservationConfigMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdReservationConfigMapper.xml new file mode 100644 index 0000000..e63b0dd --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdReservationConfigMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreaRelevanceMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreaRelevanceMapper.xml new file mode 100644 index 0000000..4462eb4 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreaRelevanceMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreasMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreasMapper.xml new file mode 100644 index 0000000..c9c6983 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreasMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceOverAreaRulesMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceOverAreaRulesMapper.xml new file mode 100644 index 0000000..f9d6186 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceOverAreaRulesMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdTagsMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdTagsMapper.xml new file mode 100644 index 0000000..31b83fe --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdTagsMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdWeightRangePricesMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdWeightRangePricesMapper.xml new file mode 100644 index 0000000..497aa0f --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdWeightRangePricesMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProductOrderLimitMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProductOrderLimitMapper.xml new file mode 100644 index 0000000..080f880 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProductOrderLimitMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ShopDetailMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ShopDetailMapper.xml new file mode 100644 index 0000000..e7edae8 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ShopDetailMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml new file mode 100644 index 0000000..cd6f22a --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDeliverMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDeliverMapper.xml new file mode 100644 index 0000000..55f1873 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDeliverMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file From 4675e148138215e26e5de8f36fe651684e25424a Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Tue, 29 Jul 2025 17:24:00 +0800 Subject: [PATCH 08/22] =?UTF-8?q?=E4=BA=A7=E5=93=81=E6=A8=A1=E5=9D=977?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../productapi/enums/ErrorCodeConstants.java | 5 +- .../SkuServiceMaterialController.java | 97 +++++++++++++++++++ .../SkuServiceTransportController.java | 96 ++++++++++++++++++ .../controller/SkuServicesFormController.java | 96 ++++++++++++++++++ .../product/dto/SkuServiceMaterialDO.java | 51 ++++++++++ .../product/dto/SkuServiceTransportDO.java | 67 +++++++++++++ .../cloud/product/dto/SkuServicesFormDO.java | 55 +++++++++++ .../mapper/SkuServiceMaterialMapper.java | 20 ++++ .../mapper/SkuServiceTransportMapper.java | 20 ++++ .../product/mapper/SkuServicesFormMapper.java | 20 ++++ .../service/SkuServiceMaterialService.java | 57 +++++++++++ .../service/SkuServiceTransportService.java | 57 +++++++++++ .../service/SkuServicesFormService.java | 57 +++++++++++ .../impl/SkuServiceMaterialServiceImpl.java | 76 +++++++++++++++ .../impl/SkuServiceTransportServiceImpl.java | 74 ++++++++++++++ .../impl/SkuServicesFormServiceImpl.java | 73 ++++++++++++++ .../SkuServiceMaterialPageReqVO.java | 33 +++++++ .../SkuServiceMaterialRespVO.java | 39 ++++++++ .../SkuServiceMaterialSaveReqVO.java | 34 +++++++ .../SkuServicesFormPageReqVO.java | 36 +++++++ .../SkuServicesFormRespVO.java | 43 ++++++++ .../SkuServicesFormSaveReqVO.java | 39 ++++++++ .../SkuServiceTransportPageReqVO.java | 45 +++++++++ .../SkuServiceTransportRespVO.java | 55 +++++++++++ .../SkuServiceTransportSaveReqVO.java | 48 +++++++++ .../product/SkuServiceMaterialMapper.xml | 12 +++ .../product/SkuServiceTransportMapper.xml | 12 +++ .../mapper/product/SkuServicesFormMapper.xml | 12 +++ 28 files changed, 1328 insertions(+), 1 deletion(-) create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceMaterialController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceTransportController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServicesFormController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceMaterialService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceTransportService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServicesFormService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceMaterialServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceTransportServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServicesFormServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceMaterialMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceTransportMapper.xml create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java index 2a9cc9b..03389a8 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java @@ -27,5 +27,8 @@ public interface ErrorCodeConstants { ErrorCode PROD_WEIGHT_RANGE_PRICES_NOT_EXISTS = new ErrorCode(10015, "体重区间价格不存在"); ErrorCode SHOP_DETAIL_NOT_EXISTS = new ErrorCode(10016, "店铺信息不存在"); ErrorCode SKU_NOT_EXISTS = new ErrorCode(10017, "单品SKU不存在"); - ErrorCode SKU_SERVICE_DELIVER_NOT_EXISTS = new ErrorCode(10016, "服务交付方式不存在"); + ErrorCode SKU_SERVICE_DELIVER_NOT_EXISTS = new ErrorCode(10018, "服务交付方式不存在"); + ErrorCode SKU_SERVICE_MATERIAL_NOT_EXISTS = new ErrorCode(10019, "服务物料详情不存在"); + ErrorCode SKU_SERVICES_FORM_NOT_EXISTS = new ErrorCode(10021, "商品SKU扩展服务表单不存在"); + ErrorCode SKU_SERVICE_TRANSPORT_NOT_EXISTS = new ErrorCode(10022, "服务遗体运输不存在"); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceMaterialController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceMaterialController.java new file mode 100644 index 0000000..e5ec813 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceMaterialController.java @@ -0,0 +1,97 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.product.service.SkuServiceMaterialService; +import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; +import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialRespVO; +import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + + +@Tag(name = "管理后台 - 服务物料详情") +@RestController +@RequestMapping("/tz/sku-service-material") +@Validated +public class SkuServiceMaterialController { + + @Resource + private SkuServiceMaterialService skuServiceMaterialService; + + @PostMapping("/create") + @Operation(summary = "创建服务物料详情") + @PreAuthorize("@ss.hasPermission('tz:sku-service-material:create')") + public CommonResult createSkuServiceMaterial(@Valid @RequestBody SkuServiceMaterialSaveReqVO createReqVO) { + return success(skuServiceMaterialService.createSkuServiceMaterial(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新服务物料详情") + @PreAuthorize("@ss.hasPermission('tz:sku-service-material:update')") + public CommonResult updateSkuServiceMaterial(@Valid @RequestBody SkuServiceMaterialSaveReqVO updateReqVO) { + skuServiceMaterialService.updateSkuServiceMaterial(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除服务物料详情") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:sku-service-material:delete')") + public CommonResult deleteSkuServiceMaterial(@RequestParam("id") Long id) { + skuServiceMaterialService.deleteSkuServiceMaterial(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得服务物料详情") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:sku-service-material:query')") + public CommonResult getSkuServiceMaterial(@RequestParam("id") Long id) { + SkuServiceMaterialDO skuServiceMaterial = skuServiceMaterialService.getSkuServiceMaterial(id); + return success(BeanUtils.toBean(skuServiceMaterial, SkuServiceMaterialRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得服务物料详情分页") + @PreAuthorize("@ss.hasPermission('tz:sku-service-material:query')") + public CommonResult> getSkuServiceMaterialPage(@Valid SkuServiceMaterialPageReqVO pageReqVO) { + PageResult pageResult = skuServiceMaterialService.getSkuServiceMaterialPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SkuServiceMaterialRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出服务物料详情 Excel") + @PreAuthorize("@ss.hasPermission('tz:sku-service-material:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSkuServiceMaterialExcel(@Valid SkuServiceMaterialPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = skuServiceMaterialService.getSkuServiceMaterialPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "服务物料详情.xls", "数据", SkuServiceMaterialRespVO.class, + BeanUtils.toBean(list, SkuServiceMaterialRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceTransportController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceTransportController.java new file mode 100644 index 0000000..85af9ae --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceTransportController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.SkuServiceTransportDO; +import com.tashow.cloud.product.service.SkuServiceTransportService; +import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; +import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportRespVO; +import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 服务遗体运输") +@RestController +@RequestMapping("/tz/sku-service-transport") +@Validated +public class SkuServiceTransportController { + + @Resource + private SkuServiceTransportService skuServiceTransportService; + + @PostMapping("/create") + @Operation(summary = "创建服务遗体运输") + @PreAuthorize("@ss.hasPermission('tz:sku-service-transport:create')") + public CommonResult createSkuServiceTransport(@Valid @RequestBody SkuServiceTransportSaveReqVO createReqVO) { + return success(skuServiceTransportService.createSkuServiceTransport(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新服务遗体运输") + @PreAuthorize("@ss.hasPermission('tz:sku-service-transport:update')") + public CommonResult updateSkuServiceTransport(@Valid @RequestBody SkuServiceTransportSaveReqVO updateReqVO) { + skuServiceTransportService.updateSkuServiceTransport(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除服务遗体运输") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:sku-service-transport:delete')") + public CommonResult deleteSkuServiceTransport(@RequestParam("id") Long id) { + skuServiceTransportService.deleteSkuServiceTransport(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得服务遗体运输") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:sku-service-transport:query')") + public CommonResult getSkuServiceTransport(@RequestParam("id") Long id) { + SkuServiceTransportDO skuServiceTransport = skuServiceTransportService.getSkuServiceTransport(id); + return success(BeanUtils.toBean(skuServiceTransport, SkuServiceTransportRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得服务遗体运输分页") + @PreAuthorize("@ss.hasPermission('tz:sku-service-transport:query')") + public CommonResult> getSkuServiceTransportPage(@Valid SkuServiceTransportPageReqVO pageReqVO) { + PageResult pageResult = skuServiceTransportService.getSkuServiceTransportPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SkuServiceTransportRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出服务遗体运输 Excel") + @PreAuthorize("@ss.hasPermission('tz:sku-service-transport:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSkuServiceTransportExcel(@Valid SkuServiceTransportPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = skuServiceTransportService.getSkuServiceTransportPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "服务遗体运输.xls", "数据", SkuServiceTransportRespVO.class, + BeanUtils.toBean(list, SkuServiceTransportRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServicesFormController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServicesFormController.java new file mode 100644 index 0000000..c12a803 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServicesFormController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.SkuServicesFormDO; +import com.tashow.cloud.product.service.SkuServicesFormService; +import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormPageReqVO; +import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormRespVO; +import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 商品SKU扩展服务表单") +@RestController +@RequestMapping("/tz/sku-services-form") +@Validated +public class SkuServicesFormController { + + @Resource + private SkuServicesFormService skuServicesFormService; + + @PostMapping("/create") + @Operation(summary = "创建商品SKU扩展服务表单") + @PreAuthorize("@ss.hasPermission('tz:sku-services-form:create')") + public CommonResult createSkuServicesForm(@Valid @RequestBody SkuServicesFormSaveReqVO createReqVO) { + return success(skuServicesFormService.createSkuServicesForm(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品SKU扩展服务表单") + @PreAuthorize("@ss.hasPermission('tz:sku-services-form:update')") + public CommonResult updateSkuServicesForm(@Valid @RequestBody SkuServicesFormSaveReqVO updateReqVO) { + skuServicesFormService.updateSkuServicesForm(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品SKU扩展服务表单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:sku-services-form:delete')") + public CommonResult deleteSkuServicesForm(@RequestParam("id") Long id) { + skuServicesFormService.deleteSkuServicesForm(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品SKU扩展服务表单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:sku-services-form:query')") + public CommonResult getSkuServicesForm(@RequestParam("id") Long id) { + SkuServicesFormDO skuServicesForm = skuServicesFormService.getSkuServicesForm(id); + return success(BeanUtils.toBean(skuServicesForm, SkuServicesFormRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品SKU扩展服务表单分页") + @PreAuthorize("@ss.hasPermission('tz:sku-services-form:query')") + public CommonResult> getSkuServicesFormPage(@Valid SkuServicesFormPageReqVO pageReqVO) { + PageResult pageResult = skuServicesFormService.getSkuServicesFormPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SkuServicesFormRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品SKU扩展服务表单 Excel") + @PreAuthorize("@ss.hasPermission('tz:sku-services-form:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSkuServicesFormExcel(@Valid SkuServicesFormPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = skuServicesFormService.getSkuServicesFormPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品SKU扩展服务表单.xls", "数据", SkuServicesFormRespVO.class, + BeanUtils.toBean(list, SkuServicesFormRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java new file mode 100644 index 0000000..45d94ea --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java @@ -0,0 +1,51 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 服务物料详情 DO + * + * @author 芋道源码 + */ +@TableName("tz_sku_service_material") +@KeySequence("tz_sku_service_material_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SkuServiceMaterialDO extends BaseDO { + + /** + * 服务物料的唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的扩展服务ID + */ + private Long serviceId; + /** + * 名称 + */ + private String name; + /** + * 描述 + */ + private String describe; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 最后更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java new file mode 100644 index 0000000..83dd492 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java @@ -0,0 +1,67 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 服务遗体运输 DO + * + * @author 芋道源码 + */ +@TableName("tz_sku_service_transport") +@KeySequence("tz_sku_service_transport_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SkuServiceTransportDO extends BaseDO { + + /** + * 服务遗体运输唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的扩展服务ID + */ + private Long serviceId; + /** + * 联系人 + */ + private String contacts; + /** + * 详细地址 + */ + private String address; + /** + * 省 + */ + private String province; + /** + * 市 + */ + private String city; + /** + * 区 + */ + private String area; + /** + * 电话号码 + */ + private String tel; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 最后更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java new file mode 100644 index 0000000..df30fcd --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java @@ -0,0 +1,55 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 商品SKU扩展服务表单 DO + * + * @author 芋道源码 + */ +@TableName("tz_sku_services_form") +@KeySequence("tz_sku_services_form_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SkuServicesFormDO extends BaseDO { + + /** + * 扩展服务的唯一标识符 + */ + @TableId + private Long id; + /** + * 表单名称 + */ + private String name; + /** + * 关联的商品SKU ID + */ + private Long skuId; + /** + * 服务名称 + */ + private String serviceName; + /** + * 是否启用该服务 + */ + private Boolean isEnabled; + /** + * 创建时间 + */ + private LocalDateTime createdAt; + /** + * 最后更新时间 + */ + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java new file mode 100644 index 0000000..ecba405 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.SkuServiceMaterialDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 服务物料详情 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface SkuServiceMaterialMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java new file mode 100644 index 0000000..68e2181 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.SkuServiceTransportDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 服务遗体运输 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface SkuServiceTransportMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java new file mode 100644 index 0000000..8ab0e02 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.SkuServicesFormDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 商品SKU扩展服务表单 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface SkuServicesFormMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceMaterialService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceMaterialService.java new file mode 100644 index 0000000..16be043 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceMaterialService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; +import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 服务物料详情 Service 接口 + * + * @author 芋道源码 + */ +public interface SkuServiceMaterialService { + + /** + * 创建服务物料详情 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSkuServiceMaterial(@Valid SkuServiceMaterialSaveReqVO createReqVO); + + /** + * 更新服务物料详情 + * + * @param updateReqVO 更新信息 + */ + void updateSkuServiceMaterial(@Valid SkuServiceMaterialSaveReqVO updateReqVO); + + /** + * 删除服务物料详情 + * + * @param id 编号 + */ + void deleteSkuServiceMaterial(Long id); + + /** + * 获得服务物料详情 + * + * @param id 编号 + * @return 服务物料详情 + */ + SkuServiceMaterialDO getSkuServiceMaterial(Long id); + + /** + * 获得服务物料详情分页 + * + * @param pageReqVO 分页查询 + * @return 服务物料详情分页 + */ + PageResult getSkuServiceMaterialPage(SkuServiceMaterialPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceTransportService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceTransportService.java new file mode 100644 index 0000000..709badd --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceTransportService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.SkuServiceTransportDO; +import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; +import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 服务遗体运输 Service 接口 + * + * @author 芋道源码 + */ +public interface SkuServiceTransportService { + + /** + * 创建服务遗体运输 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSkuServiceTransport(@Valid SkuServiceTransportSaveReqVO createReqVO); + + /** + * 更新服务遗体运输 + * + * @param updateReqVO 更新信息 + */ + void updateSkuServiceTransport(@Valid SkuServiceTransportSaveReqVO updateReqVO); + + /** + * 删除服务遗体运输 + * + * @param id 编号 + */ + void deleteSkuServiceTransport(Long id); + + /** + * 获得服务遗体运输 + * + * @param id 编号 + * @return 服务遗体运输 + */ + SkuServiceTransportDO getSkuServiceTransport(Long id); + + /** + * 获得服务遗体运输分页 + * + * @param pageReqVO 分页查询 + * @return 服务遗体运输分页 + */ + PageResult getSkuServiceTransportPage(SkuServiceTransportPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServicesFormService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServicesFormService.java new file mode 100644 index 0000000..780efd9 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServicesFormService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.SkuServicesFormDO; +import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormPageReqVO; +import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 商品SKU扩展服务表单 Service 接口 + * + * @author 芋道源码 + */ +public interface SkuServicesFormService { + + /** + * 创建商品SKU扩展服务表单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSkuServicesForm(@Valid SkuServicesFormSaveReqVO createReqVO); + + /** + * 更新商品SKU扩展服务表单 + * + * @param updateReqVO 更新信息 + */ + void updateSkuServicesForm(@Valid SkuServicesFormSaveReqVO updateReqVO); + + /** + * 删除商品SKU扩展服务表单 + * + * @param id 编号 + */ + void deleteSkuServicesForm(Long id); + + /** + * 获得商品SKU扩展服务表单 + * + * @param id 编号 + * @return 商品SKU扩展服务表单 + */ + SkuServicesFormDO getSkuServicesForm(Long id); + + /** + * 获得商品SKU扩展服务表单分页 + * + * @param pageReqVO 分页查询 + * @return 商品SKU扩展服务表单分页 + */ + PageResult getSkuServicesFormPage(SkuServicesFormPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceMaterialServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceMaterialServiceImpl.java new file mode 100644 index 0000000..86eea11 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceMaterialServiceImpl.java @@ -0,0 +1,76 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.product.mapper.SkuServiceMaterialMapper; +import com.tashow.cloud.product.service.SkuServiceMaterialService; +import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; +import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; + + +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 服务物料详情 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class SkuServiceMaterialServiceImpl implements SkuServiceMaterialService { + + @Resource + private SkuServiceMaterialMapper skuServiceMaterialMapper; + + @Override + public Long createSkuServiceMaterial(SkuServiceMaterialSaveReqVO createReqVO) { + // 插入 + SkuServiceMaterialDO skuServiceMaterial = BeanUtils.toBean(createReqVO, SkuServiceMaterialDO.class); + skuServiceMaterialMapper.insert(skuServiceMaterial); + // 返回 + return skuServiceMaterial.getId(); + } + + @Override + public void updateSkuServiceMaterial(SkuServiceMaterialSaveReqVO updateReqVO) { + // 校验存在 + validateSkuServiceMaterialExists(updateReqVO.getId()); + // 更新 + SkuServiceMaterialDO updateObj = BeanUtils.toBean(updateReqVO, SkuServiceMaterialDO.class); + skuServiceMaterialMapper.updateById(updateObj); + } + + @Override + public void deleteSkuServiceMaterial(Long id) { + // 校验存在 + validateSkuServiceMaterialExists(id); + // 删除 + skuServiceMaterialMapper.deleteById(id); + } + + private void validateSkuServiceMaterialExists(Long id) { + if (skuServiceMaterialMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.SKU_SERVICE_MATERIAL_NOT_EXISTS); + } + } + + @Override + public SkuServiceMaterialDO getSkuServiceMaterial(Long id) { + return skuServiceMaterialMapper.selectById(id); + } + + @Override + public PageResult getSkuServiceMaterialPage(SkuServiceMaterialPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceTransportServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceTransportServiceImpl.java new file mode 100644 index 0000000..267667d --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceTransportServiceImpl.java @@ -0,0 +1,74 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.SkuServiceTransportDO; +import com.tashow.cloud.product.mapper.SkuServiceTransportMapper; +import com.tashow.cloud.product.service.SkuServiceTransportService; +import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; +import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 服务遗体运输 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class SkuServiceTransportServiceImpl implements SkuServiceTransportService { + + @Resource + private SkuServiceTransportMapper skuServiceTransportMapper; + + @Override + public Long createSkuServiceTransport(SkuServiceTransportSaveReqVO createReqVO) { + // 插入 + SkuServiceTransportDO skuServiceTransport = BeanUtils.toBean(createReqVO, SkuServiceTransportDO.class); + skuServiceTransportMapper.insert(skuServiceTransport); + // 返回 + return skuServiceTransport.getId(); + } + + @Override + public void updateSkuServiceTransport(SkuServiceTransportSaveReqVO updateReqVO) { + // 校验存在 + validateSkuServiceTransportExists(updateReqVO.getId()); + // 更新 + SkuServiceTransportDO updateObj = BeanUtils.toBean(updateReqVO, SkuServiceTransportDO.class); + skuServiceTransportMapper.updateById(updateObj); + } + + @Override + public void deleteSkuServiceTransport(Long id) { + // 校验存在 + validateSkuServiceTransportExists(id); + // 删除 + skuServiceTransportMapper.deleteById(id); + } + + private void validateSkuServiceTransportExists(Long id) { + if (skuServiceTransportMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.SKU_SERVICE_TRANSPORT_NOT_EXISTS); + } + } + + @Override + public SkuServiceTransportDO getSkuServiceTransport(Long id) { + return skuServiceTransportMapper.selectById(id); + } + + @Override + public PageResult getSkuServiceTransportPage(SkuServiceTransportPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServicesFormServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServicesFormServiceImpl.java new file mode 100644 index 0000000..c07951d --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServicesFormServiceImpl.java @@ -0,0 +1,73 @@ + package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.SkuServicesFormDO; +import com.tashow.cloud.product.mapper.SkuServicesFormMapper; +import com.tashow.cloud.product.service.SkuServicesFormService; +import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormPageReqVO; +import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 商品SKU扩展服务表单 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class SkuServicesFormServiceImpl implements SkuServicesFormService { + + @Resource + private SkuServicesFormMapper skuServicesFormMapper; + + @Override + public Long createSkuServicesForm(SkuServicesFormSaveReqVO createReqVO) { + // 插入 + SkuServicesFormDO skuServicesForm = BeanUtils.toBean(createReqVO, SkuServicesFormDO.class); + skuServicesFormMapper.insert(skuServicesForm); + // 返回 + return skuServicesForm.getId(); + } + + @Override + public void updateSkuServicesForm(SkuServicesFormSaveReqVO updateReqVO) { + // 校验存在 + validateSkuServicesFormExists(updateReqVO.getId()); + // 更新 + SkuServicesFormDO updateObj = BeanUtils.toBean(updateReqVO, SkuServicesFormDO.class); + skuServicesFormMapper.updateById(updateObj); + } + + @Override + public void deleteSkuServicesForm(Long id) { + // 校验存在 + validateSkuServicesFormExists(id); + // 删除 + skuServicesFormMapper.deleteById(id); + } + + private void validateSkuServicesFormExists(Long id) { + if (skuServicesFormMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.SKU_SERVICES_FORM_NOT_EXISTS); + } + } + + @Override + public SkuServicesFormDO getSkuServicesForm(Long id) { + return skuServicesFormMapper.selectById(id); + } + + @Override + public PageResult getSkuServicesFormPage(SkuServicesFormPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java new file mode 100644 index 0000000..f9ab5d2 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java @@ -0,0 +1,33 @@ +package com.tashow.cloud.product.vo.skuservicematerial; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 服务物料详情分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SkuServiceMaterialPageReqVO extends PageParam { + + @Schema(description = "关联的扩展服务ID", example = "21102") + private Long serviceId; + + @Schema(description = "名称", example = "王五") + private String name; + + @Schema(description = "描述") + private String describe; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java new file mode 100644 index 0000000..686d682 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java @@ -0,0 +1,39 @@ +package com.tashow.cloud.product.vo.skuservicematerial; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 服务物料详情 Response VO") +@Data +@ExcelIgnoreUnannotated +public class SkuServiceMaterialRespVO { + + @Schema(description = "服务物料的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "21371") + @ExcelProperty("服务物料的唯一标识符") + private Long id; + + @Schema(description = "关联的扩展服务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21102") + @ExcelProperty("关联的扩展服务ID") + private Long serviceId; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @ExcelProperty("名称") + private String name; + + @Schema(description = "描述") + @ExcelProperty("描述") + private String describe; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + @ExcelProperty("最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java new file mode 100644 index 0000000..e359a44 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java @@ -0,0 +1,34 @@ +package com.tashow.cloud.product.vo.skuservicematerial; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 服务物料详情新增/修改 Request VO") +@Data +public class SkuServiceMaterialSaveReqVO { + + @Schema(description = "服务物料的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "21371") + private Long id; + + @Schema(description = "关联的扩展服务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21102") + @NotNull(message = "关联的扩展服务ID不能为空") + private Long serviceId; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") + @NotEmpty(message = "名称不能为空") + private String name; + + @Schema(description = "描述") + private String describe; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java new file mode 100644 index 0000000..5c74dd1 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java @@ -0,0 +1,36 @@ +package com.tashow.cloud.product.vo.skuservicesform; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 商品SKU扩展服务表单分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SkuServicesFormPageReqVO extends PageParam { + + @Schema(description = "表单名称", example = "赵六") + private String name; + + @Schema(description = "关联的商品SKU ID", example = "20020") + private Long skuId; + + @Schema(description = "服务名称", example = "芋艿") + private String serviceName; + + @Schema(description = "是否启用该服务") + private Boolean isEnabled; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java new file mode 100644 index 0000000..4eaf73b --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java @@ -0,0 +1,43 @@ +package com.tashow.cloud.product.vo.skuservicesform; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品SKU扩展服务表单 Response VO") +@Data +@ExcelIgnoreUnannotated +public class SkuServicesFormRespVO { + + @Schema(description = "扩展服务的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "24347") + @ExcelProperty("扩展服务的唯一标识符") + private Long id; + + @Schema(description = "表单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("表单名称") + private String name; + + @Schema(description = "关联的商品SKU ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20020") + @ExcelProperty("关联的商品SKU ID") + private Long skuId; + + @Schema(description = "服务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @ExcelProperty("服务名称") + private String serviceName; + + @Schema(description = "是否启用该服务", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用该服务") + private Boolean isEnabled; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + @ExcelProperty("最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java new file mode 100644 index 0000000..54217f3 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java @@ -0,0 +1,39 @@ +package com.tashow.cloud.product.vo.skuservicesform; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 商品SKU扩展服务表单新增/修改 Request VO") +@Data +public class SkuServicesFormSaveReqVO { + + @Schema(description = "扩展服务的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "24347") + private Long id; + + @Schema(description = "表单名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotEmpty(message = "表单名称不能为空") + private String name; + + @Schema(description = "关联的商品SKU ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20020") + @NotNull(message = "关联的商品SKU ID不能为空") + private Long skuId; + + @Schema(description = "服务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @NotEmpty(message = "服务名称不能为空") + private String serviceName; + + @Schema(description = "是否启用该服务", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否启用该服务不能为空") + private Boolean isEnabled; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java new file mode 100644 index 0000000..bad96b1 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java @@ -0,0 +1,45 @@ +package com.tashow.cloud.product.vo.skuservicetransport; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 服务遗体运输分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SkuServiceTransportPageReqVO extends PageParam { + + @Schema(description = "关联的扩展服务ID", example = "1035") + private Long serviceId; + + @Schema(description = "联系人") + private String contacts; + + @Schema(description = "详细地址") + private String address; + + @Schema(description = "省") + private String province; + + @Schema(description = "市") + private String city; + + @Schema(description = "区") + private String area; + + @Schema(description = "电话号码") + private String tel; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java new file mode 100644 index 0000000..62bd713 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java @@ -0,0 +1,55 @@ +package com.tashow.cloud.product.vo.skuservicetransport; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 服务遗体运输 Response VO") +@Data +@ExcelIgnoreUnannotated +public class SkuServiceTransportRespVO { + + @Schema(description = "服务遗体运输唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "5277") + @ExcelProperty("服务遗体运输唯一标识符") + private Long id; + + @Schema(description = "关联的扩展服务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1035") + @ExcelProperty("关联的扩展服务ID") + private Long serviceId; + + @Schema(description = "联系人", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("联系人") + private String contacts; + + @Schema(description = "详细地址", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("详细地址") + private String address; + + @Schema(description = "省") + @ExcelProperty("省") + private String province; + + @Schema(description = "市") + @ExcelProperty("市") + private String city; + + @Schema(description = "区") + @ExcelProperty("区") + private String area; + + @Schema(description = "电话号码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("电话号码") + private String tel; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + @ExcelProperty("最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java new file mode 100644 index 0000000..31ae035 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java @@ -0,0 +1,48 @@ +package com.tashow.cloud.product.vo.skuservicetransport; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 服务遗体运输新增/修改 Request VO") +@Data +public class SkuServiceTransportSaveReqVO { + + @Schema(description = "服务遗体运输唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "5277") + private Long id; + + @Schema(description = "关联的扩展服务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1035") + @NotNull(message = "关联的扩展服务ID不能为空") + private Long serviceId; + + @Schema(description = "联系人", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "联系人不能为空") + private String contacts; + + @Schema(description = "详细地址", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "详细地址不能为空") + private String address; + + @Schema(description = "省") + private String province; + + @Schema(description = "市") + private String city; + + @Schema(description = "区") + private String area; + + @Schema(description = "电话号码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "电话号码不能为空") + private String tel; + + @Schema(description = "创建时间") + private LocalDateTime createdAt; + + @Schema(description = "最后更新时间") + private LocalDateTime updatedAt; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceMaterialMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceMaterialMapper.xml new file mode 100644 index 0000000..a2f79be --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceMaterialMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceTransportMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceTransportMapper.xml new file mode 100644 index 0000000..bab926a --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceTransportMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml new file mode 100644 index 0000000..0137281 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file From 083b4e0bf17917ae2f88fbefb7bc249540a00443 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Wed, 30 Jul 2025 10:45:19 +0800 Subject: [PATCH 09/22] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=95=86=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/productapi/enums/ProdPropRule.java | 44 +++++++++++++++++ .../product/controller/ProdController.java | 6 +-- .../controller/ProdPropController.java | 48 +++++++++++++++++-- .../com/tashow/cloud/product/dto/ProdDO.java | 8 ---- .../tashow/cloud/product/dto/ProdPropDO.java | 9 ++-- .../cloud/product/dto/ProdPropValueDO.java | 3 +- .../dto/ProdServiceAreaRelevanceDO.java | 2 - .../tashow/cloud/product/dto/ProdTagsDO.java | 2 - .../cloud/product/mapper/ProdPropMapper.java | 10 +++- .../product/mapper/ProdPropValueMapper.java | 7 +++ .../product/service/ProdPropService.java | 4 +- .../product/service/ProdPropValueService.java | 4 +- .../service/impl/ProdPropServiceImpl.java | 26 +++++++++- .../impl/ProdPropValueServiceImpl.java | 5 +- .../product/service/impl/ProdServiceImpl.java | 19 ++++++++ .../cloud/product/vo/prod/ProdSaveReqVO.java | 10 ++++ .../vo/prodprop/ProdPropSaveReqVO.java | 10 +++- .../mapper/product/ProdPropMapper.xml | 4 +- .../mapper/product/ProdPropValueMapper.xml | 7 ++- 19 files changed, 195 insertions(+), 33 deletions(-) create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ProdPropRule.java diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ProdPropRule.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ProdPropRule.java new file mode 100644 index 0000000..b5b1e42 --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ProdPropRule.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved. + * + * https://www.mall4j.com/ + * + * 未经允许,不可做商业用途! + * + * 版权所有,侵权必究! + */ + +package com.tashow.cloud.productapi.enums; + +/** + * 商品规格参数、属性类型 + * @author lgh + */ +public enum ProdPropRule { + + // 规格属性 (用于商品商品发布时,关联sku) + SPEC(1), + + // 规格参数(用于商品搜索时,与分类关联搜索) + ATTRIBUTE(2); + + private Integer num; + + public Integer value() { + return num; + } + + ProdPropRule(Integer num){ + this.num = num; + } + + public static ProdPropRule instance(Integer value) { + ProdPropRule[] enums = values(); + for (ProdPropRule statusEnum : enums) { + if (statusEnum.value().equals(value)) { + return statusEnum; + } + } + return null; + } +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java index 4a2f408..e0ce0d9 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java @@ -35,12 +35,12 @@ public class ProdController { @PostMapping("/create") @Operation(summary = "创建商品") - @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:create')") + @PermitAll public CommonResult createProd(@Valid @RequestBody ProdSaveReqVO createReqVO) { return success(prodService.createProd(createReqVO)); } - @PutMapping("/update") +/* @PutMapping("/update") @Operation(summary = "更新商品") @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:update')") public CommonResult updateProd(@Valid @RequestBody ProdSaveReqVO updateReqVO) { @@ -64,7 +64,7 @@ public class ProdController { public CommonResult getProd(@RequestParam("id") Long id) { ProdDO prod = prodService.getProd(id); return success(BeanUtils.toBean(prod, ProdRespVO.class)); - } + }*/ @PermitAll @GetMapping("/page") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java index 6c8bf74..bbb3f9d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java @@ -1,10 +1,15 @@ package com.tashow.cloud.product.controller; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tashow.cloud.product.dto.ProdPropDO; +import com.tashow.cloud.product.dto.ProdPropValueDO; import com.tashow.cloud.product.service.ProdPropService; +import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO; import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import com.tashow.cloud.productapi.enums.ProdPropRule; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -38,15 +43,48 @@ public class ProdPropController { @Resource private ProdPropService prodPropService; + @Resource + private ProdPropValueService prodPropValueService; - @PostMapping("/create") + /* @PostMapping("/create") @Operation(summary = "创建商品属性") @PreAuthorize("@ss.hasPermission('tz:prod-prop:create')") - public CommonResult createProdProp(@Valid @RequestBody ProdPropSaveReqVO createReqVO) { - return success(prodPropService.createProdProp(createReqVO)); + public CommonResult createProdProp(@Valid @RequestBody ProdPropSaveReqVO createReqVO) { + prodPropService.saveProdPropAndValues(createReqVO); + return success(true); + }*/ + + + @GetMapping("/getProdPropList") + @Operation(summary = "获得商品属性列表") + public CommonResult> getProdPropList(@Valid ProdPropRespVO pageReqVO) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + // 处理规格名称模糊查询 + if (StrUtil.isNotBlank(pageReqVO.getPropName())) { + wrapper.like(ProdPropDO::getPropName, pageReqVO.getPropName()); + } + wrapper.eq(ProdPropDO::getRule, ProdPropRule.SPEC.value()); + //TODO 获取当前登录用户 + wrapper.eq(ProdPropDO::getShopId, 1L); + /*// 获取当前登录用户 + Long userId = SecurityUtils.getUserId(); + SysUser sysUser = sysUserService.selectUserById(userId); + + if (sysUser.getShopId() != 100) { + wrapper.eq(ProdProp::getShopId, sysUser.getShopId()); + }*/ + List list = prodPropService.list(wrapper); + list.forEach(prop -> { + List values = prodPropValueService.list( + new LambdaQueryWrapper() + .eq(ProdPropValueDO::getPropId, prop.getPropId()) + ); + prop.setProdPropValues(values); + }); + return success(list); } - @PutMapping("/update") +/* @PutMapping("/update") @Operation(summary = "更新商品属性") @PreAuthorize("@ss.hasPermission('tz:prod-prop:update')") public CommonResult updateProdProp(@Valid @RequestBody ProdPropSaveReqVO updateReqVO) { @@ -91,6 +129,6 @@ public class ProdPropController { // 导出 Excel ExcelUtils.write(response, "商品属性.xls", "数据", ProdPropRespVO.class, BeanUtils.toBean(list, ProdPropRespVO.class)); - } + }*/ } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java index fe9a9e4..807a552 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java @@ -123,14 +123,6 @@ public class ProdDO extends BaseDO { * 是否开启体重配置0关1开 */ private Boolean weightSwitch; - /** - * 创建人 - */ - private String createBy; - /** - * 修改人 - */ - private String updateBy; /** * 版本 乐观锁 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java index fa66b18..4c3f2d9 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java @@ -13,12 +13,11 @@ import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; @TableName("tz_prod_prop") @KeySequence("tz_prod_prop_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class ProdPropDO extends BaseDO { +public class ProdPropDO{ /** * 属性id @@ -45,5 +44,9 @@ public class ProdPropDO extends BaseDO { * 是否删除0否1是 */ private Boolean isDelete; - + /** + * 属性值 + */ + @TableField(exist=false) + private List prodPropValues; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java index 86e63fb..4dfe445 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java @@ -13,12 +13,11 @@ import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; @TableName("tz_prod_prop_value") @KeySequence("tz_prod_prop_value_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class ProdPropValueDO extends BaseDO { +public class ProdPropValueDO { /** * 属性值ID diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java index dde95df..31acb8c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java @@ -23,12 +23,10 @@ public class ProdServiceAreaRelevanceDO extends BaseDO { /** * 关联的商品ID */ - @TableId private Long prodId; /** * 关联的服务区域ID */ - @TableId private Long areaId; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java index a692b52..0991c95 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java @@ -24,12 +24,10 @@ public class ProdTagsDO extends BaseDO { /** * 商品id */ - @TableId private Long productId; /** * 标签id */ - @TableId private Long tagId; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java index 7af1b10..48c0407 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java @@ -7,6 +7,7 @@ import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; import com.tashow.cloud.product.dto.ProdPropDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 商品属性 Mapper @@ -16,5 +17,12 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ProdPropMapper extends BaseMapperX { - + /** + * 根据店铺id和属性名称获取商品属性 + * @param propName + * @param shopId + * @param rule + * @return + */ + ProdPropDO getProdPropByPropNameAndShopId(@Param("propName") String propName, @Param("shopId") Long shopId, @Param("rule") Integer rule); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java index 012573f..53cf230 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java @@ -7,6 +7,7 @@ import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; import com.tashow.cloud.product.dto.ProdPropValueDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 属性规则 Mapper @@ -16,5 +17,11 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ProdPropValueMapper extends BaseMapperX { + /** + * 插入商品属性数值 + * @param propId + * @param prodPropValues + */ + void insertPropValues(@Param("propId") Long propId, @Param("prodPropValues") List prodPropValues); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java index e9b1b14..884836e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java @@ -2,6 +2,7 @@ package com.tashow.cloud.product.service; import java.util.*; +import com.baomidou.mybatisplus.extension.service.IService; import com.tashow.cloud.product.dto.ProdPropDO; import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; @@ -14,7 +15,7 @@ import com.tashow.cloud.common.pojo.PageParam; * * @author 芋道源码 */ -public interface ProdPropService { +public interface ProdPropService extends IService { /** * 创建商品属性 @@ -24,6 +25,7 @@ public interface ProdPropService { */ Long createProdProp(@Valid ProdPropSaveReqVO createReqVO); + void saveProdPropAndValues(ProdPropSaveReqVO createReqVO); /** * 更新商品属性 * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java index 466cf68..ae01aaf 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java @@ -2,6 +2,8 @@ package com.tashow.cloud.product.service; import java.util.*; +import com.baomidou.mybatisplus.extension.service.IService; +import com.tashow.cloud.product.dto.ProdPropDO; import com.tashow.cloud.product.dto.ProdPropValueDO; import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValuePageReqVO; import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueSaveReqVO; @@ -14,7 +16,7 @@ import com.tashow.cloud.common.pojo.PageParam; * * @author 芋道源码 */ -public interface ProdPropValueService { +public interface ProdPropValueService extends IService { /** * 创建属性规则 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java index c5cdf55..3e8886a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java @@ -1,7 +1,10 @@ package com.tashow.cloud.product.service.impl; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.tashow.cloud.product.dto.ProdPropDO; import com.tashow.cloud.product.mapper.ProdPropMapper; +import com.tashow.cloud.product.mapper.ProdPropValueMapper; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; @@ -26,10 +29,12 @@ import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.except */ @Service @Validated -public class ProdPropServiceImpl implements ProdPropService { +public class ProdPropServiceImpl extends ServiceImpl implements ProdPropService { @Resource private ProdPropMapper prodPropMapper; + @Resource + private ProdPropValueMapper prodPropValueMapper; @Override public Long createProdProp(ProdPropSaveReqVO createReqVO) { @@ -40,6 +45,25 @@ public class ProdPropServiceImpl implements ProdPropService { return prodProp.getPropId(); } + @Override + @Transactional(rollbackFor = Exception.class) + public void saveProdPropAndValues(ProdPropSaveReqVO createReqVO) { + if(createReqVO.getShopId()==null){ + createReqVO.setShopId(1L); + } + ProdPropDO dbProdProp = prodPropMapper.getProdPropByPropNameAndShopId(createReqVO.getPropName(), createReqVO.getShopId(), createReqVO.getRule()); + if (dbProdProp != null) { + throw new RuntimeException("已有相同名称规格"); + } + ProdPropDO prodProp = BeanUtils.toBean(createReqVO, ProdPropDO.class); + prodPropMapper.insert(prodProp); + if (CollUtil.isEmpty(createReqVO.getProdPropValues())) { + return; + } + prodPropValueMapper.insertPropValues(prodProp.getPropId(), createReqVO.getProdPropValues()); + } + + @Override public void updateProdProp(ProdPropSaveReqVO updateReqVO) { // 校验存在 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java index cc531d8..a0d82b4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java @@ -1,6 +1,9 @@ package com.tashow.cloud.product.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tashow.cloud.product.dto.ProdPropDO; import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.product.mapper.ProdPropMapper; import com.tashow.cloud.product.mapper.ProdPropValueMapper; import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValuePageReqVO; @@ -23,7 +26,7 @@ import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.except */ @Service @Validated -public class ProdPropValueServiceImpl implements ProdPropValueService { +public class ProdPropValueServiceImpl extends ServiceImpl implements ProdPropValueService { @Resource private ProdPropValueMapper prodPropValueMapper; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index 0f90d48..2ba4084 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -1,10 +1,14 @@ package com.tashow.cloud.product.service.impl; +import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils; import com.tashow.cloud.product.dto.ProdDO; +import com.tashow.cloud.product.dto.SkuDO; import com.tashow.cloud.product.mapper.ProdMapper; +import com.tashow.cloud.product.mapper.SkuMapper; +import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdService; import com.tashow.cloud.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; @@ -33,12 +37,27 @@ public class ProdServiceImpl implements ProdService { @Resource private ProdMapper prodMapper; + @Resource + private SkuMapper skuMapper; + @Resource + private ProdPropService prodPropService; @Override public Long createProd(ProdSaveReqVO createReqVO) { // 插入 ProdDO prod = BeanUtils.toBean(createReqVO, ProdDO.class); prodMapper.insert(prod); + //保存sku + if (CollectionUtil.isNotEmpty(createReqVO.getSkuList())) { + List skuList = createReqVO.getSkuList(); + for(SkuDO sku : skuList){ + sku.setProdId(prod.getProdId()); + } + skuMapper.insert(skuList); + } + createReqVO.setProdId(prod.getProdId()); + //保存规格 + prodPropService.saveProdPropAndValues(createReqVO.getProdPropSaveReqVO()); // 返回 return prod.getProdId(); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java index 945173a..602dca4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java @@ -1,9 +1,13 @@ package com.tashow.cloud.product.vo.prod; +import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import lombok.Data; +import java.util.List; + @Schema(description = "管理后台 - 商品新增/修改 Request VO") @Data public class ProdSaveReqVO { @@ -96,4 +100,10 @@ public class ProdSaveReqVO { @Schema(description = "展示的权重") private Integer top; + @Schema(description = "sku列表") + private List skuList; + + @Schema(description = "规格") + private ProdPropSaveReqVO prodPropSaveReqVO; + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java index caabecb..de51bb0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java @@ -1,5 +1,7 @@ package com.tashow.cloud.product.vo.prodprop; +import com.baomidou.mybatisplus.annotation.TableField; +import com.tashow.cloud.product.dto.ProdPropValueDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -21,10 +23,16 @@ public class ProdPropSaveReqVO { @Schema(description = "店铺id", example = "2806") private Long shopId; - @Schema(description = "商品id", example = "21671") + @Schema(description = "商品id(添加的时候不传)", example = "21671") private Integer prodId; @Schema(description = "是否删除0否1是") private Boolean isDelete; + /** + * 属性值 + */ + @TableField(exist=false) + @NotEmpty(message="规格属性值不能为空") + private List prodPropValues; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml index 0450b57..5ed26d4 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml @@ -8,5 +8,7 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml index 2cde235..83dde24 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml @@ -8,5 +8,10 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + + insert into tz_prod_prop_value (prop_id,prop_value) values + + (#{propId},#{prodPropValue.propValue}) + + \ No newline at end of file From d80bea35c6da4febf874559ba64ad03301832f0b Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Wed, 30 Jul 2025 18:29:26 +0800 Subject: [PATCH 10/22] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=95=86=E5=93=81?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/productapi/enums/BaseEnum.java | 42 +++++ .../controller/CategoryController.java | 28 ++- .../product/controller/ProdController.java | 19 ++ .../tashow/cloud/product/dto/CategoryDO.java | 4 +- .../com/tashow/cloud/product/dto/ProdDO.java | 16 +- .../product/dto/ProdEmergencyResponseDO.java | 8 - .../dto/ProdEmergencyResponseIntervalsDO.java | 8 - .../product/dto/ProdReservationConfigDO.java | 25 +-- .../dto/ProdServiceAreaRelevanceDO.java | 3 +- .../dto/ProdServiceOverAreaRulesDO.java | 8 - .../product/dto/ProductOrderLimitDO.java | 8 - .../ProdServiceAreaRelevanceMapper.java | 5 + .../product/service/CategoryService.java | 4 +- .../cloud/product/service/ProdService.java | 20 ++ .../service/ProdServiceAreasService.java | 4 +- .../service/impl/CategoryServiceImpl.java | 5 +- .../impl/ProdServiceAreasServiceImpl.java | 5 +- .../product/service/impl/ProdServiceImpl.java | 175 +++++++++++++++++- .../vo/category/CategoryPageReqVO.java | 2 +- .../product/vo/category/CategoryRespVO.java | 2 +- .../vo/category/CategorySaveReqVO.java | 7 +- .../cloud/product/vo/prod/ProdPageReqVO.java | 2 +- .../cloud/product/vo/prod/ProdRespVO.java | 4 +- .../cloud/product/vo/prod/ProdSaveReqVO.java | 2 +- .../cloud/product/vo/prod/ProdServiceVO.java | 68 +++++++ .../ProdEmergencyInfoVO.java | 24 +++ .../ProdReservationConfigPageReqVO.java | 10 + .../ProdReservationConfigRespVO.java | 10 + .../ProdReservationConfigSaveReqVO.java | 10 + .../ProdServiceAreasInfoVO.java | 23 +++ .../ProdServiceAreaRelevanceMapper.xml | 3 + 31 files changed, 475 insertions(+), 79 deletions(-) create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/BaseEnum.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/BaseEnum.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/BaseEnum.java new file mode 100644 index 0000000..fb8a208 --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/BaseEnum.java @@ -0,0 +1,42 @@ +package com.tashow.cloud.productapi.enums; + +import lombok.Getter; + +/** + * @Author LGF + * @create 2020/10/26 16:36 + */ +public enum BaseEnum { + /** + * 基础 枚举 + */ + + YES_ONE(1, "是"), + NO_ZERO(0, "否"), + + ENABLE_ZERO(0, "启用"), + FORBIDDEN_ONE(1, "禁用"), + + YES_BINDING(1, "已绑定"), + NO_BINDING(0, "未绑定"), + + NO(1, "删除"), + YES(0, "正常"), + + HIDE(3, "隐藏"), + + NO_TWO(2, "否"), + ; + + @Getter + Integer key; + @Getter + String value; + ; + + BaseEnum(Integer key, String value) { + this.key = key; + this.value = value; + } + +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java index c415850..5b59fb8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java @@ -1,8 +1,13 @@ package com.tashow.cloud.product.controller; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tashow.cloud.product.dto.CategoryDO; +import com.tashow.cloud.product.dto.ProdPropDO; import com.tashow.cloud.product.service.CategoryService; import com.tashow.cloud.product.vo.category.*; +import com.tashow.cloud.productapi.enums.ProdPropRule; +import jakarta.annotation.security.PermitAll; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -29,28 +34,41 @@ import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; @Tag(name = "管理后台 - 产品类目") @RestController -@RequestMapping("/tz/category") +@RequestMapping("/category") @Validated public class CategoryController { @Resource private CategoryService categoryService; + /** + * 获取菜单页面的表 + * @return + */ + @PermitAll + @GetMapping("/categoryList") + public CommonResult> categoryList() { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + //TODO 获取当前登录用户 + wrapper.eq(CategoryDO::getShopId, 1L); + List categoryMenuList = categoryService.list(wrapper); + return success(categoryMenuList); + } @PostMapping("/create") @Operation(summary = "创建产品类目") - @PreAuthorize("@ss.hasPermission('tz:category:create')") + @PermitAll public CommonResult createCategory(@Valid @RequestBody CategorySaveReqVO createReqVO) { return success(categoryService.createCategory(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新产品类目") - @PreAuthorize("@ss.hasPermission('tz:category:update')") + @PermitAll public CommonResult updateCategory(@Valid @RequestBody CategorySaveReqVO updateReqVO) { categoryService.updateCategory(updateReqVO); return success(true); } - +/* @DeleteMapping("/delete") @Operation(summary = "删除产品类目") @Parameter(name = "id", description = "编号", required = true) @@ -75,7 +93,7 @@ public class CategoryController { public CommonResult> getCategoryPage(@Valid CategoryPageReqVO pageReqVO) { PageResult pageResult = categoryService.getCategoryPage(pageReqVO); return success(BeanUtils.toBean(pageResult, CategoryRespVO.class)); - } + }*/ /* @GetMapping("/export-excel") @Operation(summary = "导出产品类目 Excel") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java index e0ce0d9..04d4e96 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java @@ -40,6 +40,25 @@ public class ProdController { return success(prodService.createProd(createReqVO)); } + + + @PostMapping("/createProdService") + @Operation(summary = "创建商品服务配置") + @PermitAll + public CommonResult createProdService(@Valid @RequestBody ProdServiceVO prodServiceVO) { + prodService.createProdService(prodServiceVO); + return success(true); + } + + @PostMapping("/uptateProdService") + @Operation(summary = "修改商品服务配置") + @PermitAll + public CommonResult uptateProdService(@Valid @RequestBody ProdServiceVO prodServiceVO) { + prodService.uptateProdService(prodServiceVO); + return success(true); + } + + /* @PutMapping("/update") @Operation(summary = "更新商品") @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:update')") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java index d73eeed..4f9fef4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java @@ -50,7 +50,7 @@ public class CategoryDO extends BaseDO { /** * 类目描述 */ - private String describe; + private String description; /** * 标签 */ @@ -64,7 +64,7 @@ public class CategoryDO extends BaseDO { */ private Integer status; /** - * 分类层级 + * 分类层级 1、2、3级 */ private Integer grade; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java index 807a552..fcad59f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java @@ -76,7 +76,7 @@ public class ProdDO extends BaseDO { */ private String imgs; /** - * 默认是1,表示正常状态, -1表示删除, 0下架 + * 默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核 */ private Integer status; /** @@ -98,31 +98,31 @@ public class ProdDO extends BaseDO { /** * 是否开启区域0关1开 */ - private Boolean regionSwitch; + private Integer regionSwitch; /** * 是否特殊时段0关1开 */ - private Boolean additionalSwitch; + private Integer additionalSwitch; /** * 是否特殊日期(节假日周末什么的)0关1开 */ - private Boolean additionalFeeSwitch; + private Integer additionalFeeSwitch; /** * 是否紧急响应服务0关1开 */ - private Boolean emergencySwitch; + private Integer emergencySwitch; /** * 是否预约0关1开 */ - private Boolean reservationSwitch; + private Integer reservationSwitch; /** * 是否接单上线0关1开 */ - private Boolean orderLimitSwitch; + private Integer orderLimitSwitch; /** * 是否开启体重配置0关1开 */ - private Boolean weightSwitch; + private Integer weightSwitch; /** * 版本 乐观锁 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java index 152ed8f..73d0cf7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java @@ -51,13 +51,5 @@ public class ProdEmergencyResponseDO extends BaseDO { * 固定休息日周末是否开启0关闭1开启 */ private Boolean blackWeekend; - /** - * 创建时间 - */ - private LocalDateTime createdAt; - /** - * 更新时间 - */ - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java index 5397b3e..dd615ae 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java @@ -53,13 +53,5 @@ public class ProdEmergencyResponseIntervalsDO extends BaseDO { * 价格或上浮百分比 */ private BigDecimal price; - /** - * 创建时间 - */ - private LocalDateTime createdAt; - /** - * 最后更新时间 - */ - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java index 49c0122..a3aac02 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java @@ -46,7 +46,7 @@ public class ProdReservationConfigDO extends BaseDO { /** * 是否允许更改预约时间 1可以 0不可以 */ - private Boolean allowChange; + private Integer allowChange; /** * 更改预约时间的时间规则(如服务开始前1小时可更改) */ @@ -59,6 +59,17 @@ public class ProdReservationConfigDO extends BaseDO { * 黑名自定义日期(JSON格式存储) */ private String blacklistedDates; + + /** + * '是否开启黑名单自定义0关1开' + */ + private Integer isBlacklisted; + + /** + * '是否开启黑名单指定日期0关1开' + */ + private Integer isBlackAppoint; + /** * 黑名单指定日期(JSON格式存储) */ @@ -66,18 +77,10 @@ public class ProdReservationConfigDO extends BaseDO { /** * 法定节假日是否开启0:关闭1开启 */ - private Boolean blackHappy; + private Integer blackHappy; /** * 固定休息日周末是否开启0关闭1开启 */ - private Boolean blackWeekend; - /** - * 配置创建时间 - */ - private LocalDateTime createdAt; - /** - * 配置最后更新时间 - */ - private LocalDateTime updatedAt; + private Integer blackWeekend; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java index 31acb8c..e8f73c5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java @@ -13,12 +13,11 @@ import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; @TableName("tz_prod_service_area_relevance") @KeySequence("tz_prod_service_area_relevance_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor -public class ProdServiceAreaRelevanceDO extends BaseDO { +public class ProdServiceAreaRelevanceDO{ /** * 关联的商品ID diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java index 287a176..9fdc063 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java @@ -40,13 +40,5 @@ public class ProdServiceOverAreaRulesDO extends BaseDO { * 超区费用(仅在rule_type为accept_with_fee时有效) */ private BigDecimal fee; - /** - * 规则创建时间 - */ - private LocalDateTime createdAt; - /** - * 规则最后更新时间 - */ - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java index 8fa80f8..9f5c60a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java @@ -39,13 +39,5 @@ public class ProductOrderLimitDO extends BaseDO { * 上限阈值 */ private Integer maxOrders; - /** - * 配置创建时间 - */ - private LocalDateTime createdAt; - /** - * 配置最后更新时间 - */ - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java index e82dea0..61a2a7f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java @@ -7,6 +7,7 @@ import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 商品与服务区域关联 Mapper @@ -16,4 +17,8 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ProdServiceAreaRelevanceMapper extends BaseMapperX { + /** + * 删除关联 + */ + public int deleteRelevance(@Param("prodId")Long prodId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java index d0fa5a3..bd6500f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java @@ -2,7 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; +import com.baomidou.mybatisplus.extension.service.IService; import com.tashow.cloud.product.dto.CategoryDO; +import com.tashow.cloud.product.dto.ProdPropValueDO; import com.tashow.cloud.product.vo.category.CategoryPageReqVO; import com.tashow.cloud.product.vo.category.CategorySaveReqVO; import jakarta.validation.*; @@ -14,7 +16,7 @@ import com.tashow.cloud.common.pojo.PageParam; * * @author 芋道源码 */ -public interface CategoryService { +public interface CategoryService extends IService { /** * 创建产品类目 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index 7550b55..2d00acb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -5,6 +5,7 @@ import java.util.*; import com.tashow.cloud.product.dto.ProdDO; import com.tashow.cloud.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; +import com.tashow.cloud.product.vo.prod.ProdServiceVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; @@ -24,6 +25,25 @@ public interface ProdService { */ Long createProd(@Valid ProdSaveReqVO createReqVO); + /** + * 创建商品服务配置 + * + * @param prodServiceVO 创建信息 + * @return 编号 + */ + void createProdService(@Valid ProdServiceVO prodServiceVO); + + + /** + * 修改商品服务配置 + * + * @param prodServiceVO 创建信息 + * @return 编号 + */ + void uptateProdService(@Valid ProdServiceVO prodServiceVO); + + + /** * 更新商品 * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java index 9fb87db..959eb73 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java @@ -2,6 +2,8 @@ package com.tashow.cloud.product.service; import java.util.*; +import com.baomidou.mybatisplus.extension.service.IService; +import com.tashow.cloud.product.dto.ProdPropDO; import com.tashow.cloud.product.dto.ProdServiceAreasDO; import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; @@ -14,7 +16,7 @@ import com.tashow.cloud.common.pojo.PageParam; * * @author 芋道源码 */ -public interface ProdServiceAreasService { +public interface ProdServiceAreasService extends IService { /** * 创建服务区域 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java index 2214cb4..72eab30 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java @@ -1,8 +1,11 @@ package com.tashow.cloud.product.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.tashow.cloud.common.exception.ErrorCode; import com.tashow.cloud.product.dto.CategoryDO; +import com.tashow.cloud.product.dto.ProdPropValueDO; import com.tashow.cloud.product.mapper.CategoryMapper; +import com.tashow.cloud.product.mapper.ProdPropValueMapper; import com.tashow.cloud.product.service.CategoryService; import com.tashow.cloud.product.vo.category.CategoryPageReqVO; import com.tashow.cloud.product.vo.category.CategorySaveReqVO; @@ -28,7 +31,7 @@ import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.except */ @Service @Validated -public class CategoryServiceImpl implements CategoryService { +public class CategoryServiceImpl extends ServiceImpl implements CategoryService { @Resource private CategoryMapper categoryMapper; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java index 107329f..c7a7f65 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java @@ -1,6 +1,9 @@ package com.tashow.cloud.product.service.impl; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tashow.cloud.product.dto.ProdPropDO; import com.tashow.cloud.product.dto.ProdServiceAreasDO; +import com.tashow.cloud.product.mapper.ProdPropMapper; import com.tashow.cloud.product.mapper.ProdServiceAreasMapper; import com.tashow.cloud.product.service.ProdServiceAreasService; import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; @@ -26,7 +29,7 @@ import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.except */ @Service @Validated -public class ProdServiceAreasServiceImpl implements ProdServiceAreasService { +public class ProdServiceAreasServiceImpl extends ServiceImpl implements ProdServiceAreasService { @Resource private ProdServiceAreasMapper prodServiceAreasMapper; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index 2ba4084..637a6ba 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -1,17 +1,18 @@ package com.tashow.cloud.product.service.impl; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils; -import com.tashow.cloud.product.dto.ProdDO; -import com.tashow.cloud.product.dto.SkuDO; -import com.tashow.cloud.product.mapper.ProdMapper; -import com.tashow.cloud.product.mapper.SkuMapper; +import com.tashow.cloud.product.dto.*; +import com.tashow.cloud.product.mapper.*; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdService; import com.tashow.cloud.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; +import com.tashow.cloud.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.enums.BaseEnum; import lombok.val; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; @@ -41,6 +42,26 @@ public class ProdServiceImpl implements ProdService { private SkuMapper skuMapper; @Resource private ProdPropService prodPropService; + @Resource + private ProdServiceAreasMapper prodServiceAreasMapper; + @Resource + private ProdServiceAreaRelevanceMapper prodServiceAreaRelevanceMapper; + @Resource + private ProdServiceOverAreaRulesMapper prodServiceOverAreaRulesMapper; + @Resource + private ProdReservationConfigMapper prodReservationConfigMapper; + @Resource + private ProdEmergencyResponseIntervalsMapper prodEmergencyResponseIntervalsMapper; + @Resource + private ProdEmergencyResponseMapper prodEmergencyResponseMapper; + @Resource + private ProductOrderLimitMapper productOrderLimitMapper; + @Resource + private ProdAdditionalFeeDatesMapper prodAdditionalFeeDatesMapper; + @Resource + private ProdAdditionalFeePeriodsMapper prodAdditionalFeePeriodsMapper; + @Resource + private ProdWeightRangePricesMapper prodWeightRangePricesMapper; @Override public Long createProd(ProdSaveReqVO createReqVO) { @@ -62,6 +83,152 @@ public class ProdServiceImpl implements ProdService { return prod.getProdId(); } + @Override + public void createProdService(ProdServiceVO prodServiceVO) { + ProdDO prodDO = new ProdDO(); + prodDO.setProdId(prodServiceVO.getProdId()); + //服务区域设置 + if(Objects.equals(prodServiceVO.getRegionSwitch(),BaseEnum.YES_ONE.getKey())){ + prodDO.setRegionSwitch(BaseEnum.YES_ONE.getKey()); + //保存区域设置信息 + ProdServiceOverAreaRulesDO prodServiceOverAreaRules =prodServiceVO.getProdServiceAreasInfo().getOverAreaRules(); + prodServiceOverAreaRules.setProdId(prodDO.getProdId()); + prodServiceOverAreaRulesMapper.insert(prodServiceOverAreaRules); + //保存区域 + List areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); + for(String areaName : areaNameList){ + //查询区域信息 + ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdServiceAreasDO::getAreaName, areaName) + ); + if(prodServiceAreas == null){ + //插入关联表 + prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() + .setProdId(prodDO.getProdId()) + .setAreaId(prodServiceAreas.getId()) + ); + } + } + } + //预约设置设置 + if(Objects.equals(prodServiceVO.getReservationSwitch(),BaseEnum.YES_ONE.getKey())){ + prodDO.setReservationSwitch(BaseEnum.YES_ONE.getKey()); + ProdReservationConfigDO prodReservationConfigDO = prodServiceVO.prodReservationConfig; + prodReservationConfigDO.setProdId(prodDO.getProdId()); + prodReservationConfigMapper.insert(prodReservationConfigDO); + } + //紧急响应设置 + if(Objects.equals(prodServiceVO.getEmergencySwitch(),BaseEnum.YES_ONE.getKey())){ + prodDO.setEmergencySwitch(BaseEnum.YES_ONE.getKey()); + ProdEmergencyResponseDO prodEmergencyResponse = prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponse(); + prodEmergencyResponse.setProdId(prodDO.getProdId()); + prodEmergencyResponseMapper.insert(prodEmergencyResponse); + for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ + prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); + prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + } + } + //接单上线设置 + if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){ + prodDO.setOrderLimitSwitch(BaseEnum.YES_ONE.getKey()); + ProductOrderLimitDO productOrderLimit = prodServiceVO.ProductOrderLimitVO; + productOrderLimit.setProdId(prodDO.getProdId()); + productOrderLimitMapper.insert(productOrderLimit); + } + //特殊时段设置 + if(Objects.equals(prodServiceVO.getAdditionalSwitch(),BaseEnum.YES_ONE.getKey())){ + prodDO.setAdditionalSwitch(BaseEnum.YES_ONE.getKey()); + for (ProdAdditionalFeeDatesDO prodAdditionalFeeDates : prodServiceVO.getProdAdditionalFeeDatesList()){ + prodAdditionalFeeDates.setProdId(prodServiceVO.getProdId()); + prodAdditionalFeeDatesMapper.insert(prodAdditionalFeeDates); + } + } + //特殊日期设置 + if(Objects.equals(prodServiceVO.getAdditionalFeeSwitch(),BaseEnum.YES_ONE.getKey())){ + prodDO.setAdditionalFeeSwitch(BaseEnum.YES_ONE.getKey()); + for (ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods : prodServiceVO.getProdAdditionalFeePeriodsList()){ + prodAdditionalFeePeriods.setProdId(prodServiceVO.getProdId()); + prodAdditionalFeePeriodsMapper.insert(prodAdditionalFeePeriods); + } + } + //体重设置 + if(Objects.equals(prodServiceVO.getWeightSwitch(),BaseEnum.YES_ONE.getKey())){ + prodDO.setWeightSwitch(BaseEnum.YES_ONE.getKey()); + ProdWeightRangePricesDO prodWeightRangePrices = prodServiceVO.prodWeightConfig; + prodWeightRangePrices.setProdId(prodDO.getProdId()); + prodWeightRangePricesMapper.insert(prodWeightRangePrices); + } + prodMapper.updateById(prodDO); + } + + @Override + @Transactional + public void uptateProdService(ProdServiceVO prodServiceVO) { + + ProdDO prod = BeanUtils.toBean(prodServiceVO, ProdDO.class); + //服务区域设置 + if(Objects.equals(prodServiceVO.getRegionSwitch(),BaseEnum.YES_ONE.getKey())){ + + //保存区域设置信息 + ProdServiceOverAreaRulesDO prodServiceOverAreaRules =prodServiceVO.getProdServiceAreasInfo().getOverAreaRules(); + prodServiceOverAreaRules.setProdId(prodServiceVO.getProdId()); + prodServiceOverAreaRulesMapper.updateById(prodServiceOverAreaRules); + //先批量删除区域关联表 + prodServiceAreaRelevanceMapper.deleteRelevance(prodServiceVO.getProdId()); + //保存区域 + List areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); + for(String areaName : areaNameList){ + //查询区域信息 + ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdServiceAreasDO::getAreaName, areaName) + ); + if(prodServiceAreas == null){ + //插入关联表 + prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() + .setProdId(prodServiceVO.getProdId()) + .setAreaId(prodServiceAreas.getId()) + ); + } + } + } + //预约设置设置 + if(Objects.equals(prodServiceVO.getReservationSwitch(),BaseEnum.YES_ONE.getKey())){ + prodReservationConfigMapper.updateById(prodServiceVO.prodReservationConfig); + } + //紧急响应设置 + if(Objects.equals(prodServiceVO.getEmergencySwitch(),BaseEnum.YES_ONE.getKey())){ + ProdEmergencyResponseDO prodEmergencyResponse = prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponse(); + prodEmergencyResponseMapper.insert(prodEmergencyResponse); + for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ + prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); + prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + } + } + //接单上线设置 + if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){ + productOrderLimitMapper.insert(prodServiceVO.ProductOrderLimitVO); + } + //特殊时段设置 + if(Objects.equals(prodServiceVO.getAdditionalSwitch(),BaseEnum.YES_ONE.getKey())){ + for (ProdAdditionalFeeDatesDO prodAdditionalFeeDates : prodServiceVO.getProdAdditionalFeeDatesList()){ + prodAdditionalFeeDates.setProdId(prodServiceVO.getProdId()); + prodAdditionalFeeDatesMapper.insert(prodAdditionalFeeDates); + } + } + //特殊日期设置 + if(Objects.equals(prodServiceVO.getAdditionalFeeSwitch(),BaseEnum.YES_ONE.getKey())){ + for (ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods : prodServiceVO.getProdAdditionalFeePeriodsList()){ + prodAdditionalFeePeriods.setProdId(prodServiceVO.getProdId()); + prodAdditionalFeePeriodsMapper.insert(prodAdditionalFeePeriods); + } + } + //体重设置 + if(Objects.equals(prodServiceVO.getWeightSwitch(),BaseEnum.YES_ONE.getKey())){ + prodWeightRangePricesMapper.insert(prodServiceVO.prodWeightConfig); + } + prodMapper.updateById(prod); + } + @Override public void updateProd(ProdSaveReqVO updateReqVO) { // 校验存在 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java index 77fe7d6..72630a4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java @@ -31,7 +31,7 @@ public class CategoryPageReqVO extends PageParam { private String pic; @Schema(description = "类目描述") - private String describe; + private String description; @Schema(description = "标签") private String tag; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java index 57090dd..ac5eba5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java @@ -38,7 +38,7 @@ public class CategoryRespVO { @Schema(description = "类目描述") @ExcelProperty("类目描述") - private String describe; + private String description; @Schema(description = "标签") @ExcelProperty("标签") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java index a368797..d0fd931 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java @@ -13,7 +13,6 @@ public class CategorySaveReqVO { private Long categoryId; @Schema(description = "店铺ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22369") - @NotNull(message = "店铺ID不能为空") private Long shopId; @Schema(description = "父节点", requiredMode = Schema.RequiredMode.REQUIRED, example = "16509") @@ -31,20 +30,18 @@ public class CategorySaveReqVO { private String pic; @Schema(description = "类目描述") - private String describe; + private String description; @Schema(description = "标签") private String tag; @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "排序不能为空") private Integer seq; @Schema(description = "默认是1,表示正常状态,0为下线状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @NotNull(message = "默认是1,表示正常状态,0为下线状态不能为空") private Integer status; - @Schema(description = "分类层级", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "分类层级 1级 2级 3级", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "分类层级不能为空") private Integer grade; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java index 3613231..a2b1347 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java @@ -53,7 +53,7 @@ public class ProdPageReqVO extends PageParam { @Schema(description = "商品轮播图片,以,分割") private String imgs; - @Schema(description = "默认是1,表示正常状态, -1表示删除, 0下架", example = "2") + @Schema(description = "默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核", example = "2") private Integer status; @Schema(description = "商品分类", example = "14895") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java index 50af918..48ca6a6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java @@ -64,8 +64,8 @@ public class ProdRespVO { @ExcelProperty("商品轮播图片,以,分割") private String imgs; - @Schema(description = "默认是1,表示正常状态, -1表示删除, 0下架", example = "2") - @ExcelProperty("默认是1,表示正常状态, -1表示删除, 0下架") + @Schema(description = "默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核", example = "2") + @ExcelProperty("默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核") private Integer status; @Schema(description = "商品分类", example = "14895") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java index 602dca4..ab086bf 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java @@ -52,7 +52,7 @@ public class ProdSaveReqVO { @Schema(description = "商品轮播图片,以,分割") private String imgs; - @Schema(description = "默认是1,表示正常状态, -1表示删除, 0下架", example = "2") + @Schema(description = "默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核", example = "2") private Integer status; @Schema(description = "商品分类", example = "14895") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java new file mode 100644 index 0000000..9301544 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java @@ -0,0 +1,68 @@ +package com.tashow.cloud.product.vo.prod; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.tashow.cloud.product.dto.*; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasInfoVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "商品服务配置 VO") +@Data +@ExcelIgnoreUnannotated +public class ProdServiceVO { + + @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6943") + private Long prodId; + + + @Schema(description = "是否开启服务区域配置0关1开") + @ExcelProperty("是否开启区域0关1开") + private Integer regionSwitch; + @Schema(description = "服务区域配置") + public ProdServiceAreasInfoVO prodServiceAreasInfo; + + + @Schema(description = "是否预约0关1开") + @ExcelProperty("是否预约0关1开") + private Integer reservationSwitch; + @Schema(description = "预约配置") + public ProdReservationConfigDO prodReservationConfig; + + @Schema(description = "是否紧急响应服务0关1开") + @ExcelProperty("是否紧急响应服务0关1开") + private Integer emergencySwitch; + @Schema(description = "急响应服务配置") + public ProdEmergencyInfoVO prodEmergencyInfoVO; + + @Schema(description = "是否接单上线0关1开") + @ExcelProperty("是否接单上线0关1开") + private Integer orderLimitSwitch; + @Schema(description = "接单上线配置") + public ProductOrderLimitDO ProductOrderLimitVO; + + + @Schema(description = "是否特殊时段0关1开") + @ExcelProperty("是否特殊时段0关1开") + private Integer additionalSwitch; + @Schema(description = "特殊时段规则配置") + public List ProdAdditionalFeeDatesList; + + @Schema(description = "是否特殊日期(节假日周末什么的)0关1开") + @ExcelProperty("是否特殊日期(节假日周末什么的)0关1开") + private Integer additionalFeeSwitch; + @Schema(description = "特殊日期规则配置") + public List prodAdditionalFeePeriodsList; + + + @Schema(description = "是否开启体重配置0关1开") + @ExcelProperty("是否开启体重配置0关1开") + private Integer weightSwitch; + @Schema(description = "体重配置") + public ProdWeightRangePricesDO prodWeightConfig; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java new file mode 100644 index 0000000..98e68fb --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java @@ -0,0 +1,24 @@ +package com.tashow.cloud.product.vo.prodemergencyresponse; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; +import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 商品紧急响应服务设置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdEmergencyInfoVO { + + @Schema(description = "紧急响应服务配置") + private ProdEmergencyResponseDO prodEmergencyResponse; + + @Schema(description = "紧急响应时间区间设置") + private List ProdEmergencyResponseIntervalsList; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java index 1539bd0..637f866 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java @@ -39,6 +39,16 @@ public class ProdReservationConfigPageReqVO extends PageParam { @Schema(description = "黑名自定义日期(JSON格式存储)") private String blacklistedDates; + /** + * '是否开启黑名单自定义0关1开' + */ + private Integer isBlacklisted; + + /** + * '是否开启黑名单指定日期0关1开' + */ + private Integer isBlackAppoint; + @Schema(description = "黑名单指定日期(JSON格式存储)") private String blackAppointDates; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java index 406dd2d..8b0ad65 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java @@ -48,6 +48,16 @@ public class ProdReservationConfigRespVO { @ExcelProperty("黑名自定义日期(JSON格式存储)") private String blacklistedDates; + /** + * '是否开启黑名单自定义0关1开' + */ + private Integer isBlacklisted; + + /** + * '是否开启黑名单指定日期0关1开' + */ + private Integer isBlackAppoint; + @Schema(description = "黑名单指定日期(JSON格式存储)") @ExcelProperty("黑名单指定日期(JSON格式存储)") private String blackAppointDates; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java index f3e8db7..e0a4298 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java @@ -43,6 +43,16 @@ public class ProdReservationConfigSaveReqVO { @Schema(description = "黑名自定义日期(JSON格式存储)") private String blacklistedDates; + /** + * '是否开启黑名单自定义0关1开' + */ + private Integer isBlacklisted; + + /** + * '是否开启黑名单指定日期0关1开' + */ + private Integer isBlackAppoint; + @Schema(description = "黑名单指定日期(JSON格式存储)") private String blackAppointDates; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java new file mode 100644 index 0000000..ba0187a --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java @@ -0,0 +1,23 @@ +package com.tashow.cloud.product.vo.prodserviceareas; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; +import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 服务区域 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ProdServiceAreasInfoVO { + + @Schema(description = "服务区域地址名称") + private List areaNameList; + + public ProdServiceOverAreaRulesDO overAreaRules; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreaRelevanceMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreaRelevanceMapper.xml index 4462eb4..80a5ae6 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreaRelevanceMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdServiceAreaRelevanceMapper.xml @@ -9,4 +9,7 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + delete from tz_prod_service_area_relevance where prod_id = #{prodId} + \ No newline at end of file From 2f54798561dae872f39266abc96207dd652da896 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Thu, 31 Jul 2025 11:08:24 +0800 Subject: [PATCH 11/22] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=95=86=E5=93=81?= =?UTF-8?q?=E6=9C=8D=E5=8A=A11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/controller/ProdController.java | 3 ++ .../product/dto/ProdAdditionalFeeDatesDO.java | 16 +++------- .../dto/ProdAdditionalFeePeriodsDO.java | 8 ----- .../com/tashow/cloud/product/dto/ProdDO.java | 18 +++++++++++ .../product/dto/ProdWeightRangePricesDO.java | 10 +------ .../ProdEmergencyResponseIntervalsMapper.java | 6 +++- .../cloud/product/service/ProdService.java | 8 +++++ .../product/service/impl/ProdServiceImpl.java | 30 ++++++++++++------- .../cloud/product/vo/prod/ProdPageReqVO.java | 11 +++++++ .../cloud/product/vo/prod/ProdRespVO.java | 10 +++++++ .../cloud/product/vo/prod/ProdSaveReqVO.java | 12 ++++++++ .../ProdAdditionalFeeDatesPageReqVO.java | 13 +++----- .../ProdAdditionalFeeDatesRespVO.java | 18 ++++------- .../ProdAdditionalFeeDatesSaveReqVO.java | 14 ++++----- .../ProdAdditionalFeePeriodsPageReqVO.java | 5 ---- .../ProdAdditionalFeePeriodsRespVO.java | 7 ----- .../ProdAdditionalFeePeriodsSaveReqVO.java | 6 ---- .../ProdEmergencyInfoVO.java | 2 +- .../ProdWeightRangePricesPageReqVO.java | 8 +---- .../ProdWeightRangePricesRespVO.java | 9 +----- .../ProdWeightRangePricesSaveReqVO.java | 7 +---- .../ProdEmergencyResponseIntervalsMapper.xml | 4 ++- 22 files changed, 112 insertions(+), 113 deletions(-) diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java index 04d4e96..0796545 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java @@ -59,6 +59,9 @@ public class ProdController { } + + + /* @PutMapping("/update") @Operation(summary = "更新商品") @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:update')") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java index 5013996..cba7792 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java @@ -49,24 +49,16 @@ public class ProdAdditionalFeeDatesDO extends BaseDO { */ private String specificDates; /** - * 收费方式 + * 收费方式0:''固定金额'':1:''基准价上浮 */ - private String chargeMode; + private Integer chargeMode; /** * 价格或上浮百分比 */ private BigDecimal price; /** - * 是否启用该规则 + * 是否启用该规则是否启用该规则0关1开 */ - private Boolean isEnabled; - /** - * 创建时间 - */ - private LocalDateTime createdAt; - /** - * 更新时间 - */ - private LocalDateTime updatedAt; + private Integer isEnabled; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java index 664c6e6..023c048 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java @@ -53,13 +53,5 @@ public class ProdAdditionalFeePeriodsDO extends BaseDO { * 浮动百分比 */ private BigDecimal floatingPercentage; - /** - * 创建时间 - */ - private LocalDateTime createdAt; - /** - * 更新时间 - */ - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java index fcad59f..d89bb7a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java @@ -1,5 +1,6 @@ package com.tashow.cloud.product.dto; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -59,6 +60,17 @@ public class ProdDO extends BaseDO { * 品牌 */ private String brand; + + + /** + * 是否置灰0否1是 + */ + private Integer isProhibit; + + /** + * 审核备注 + */ + private String processNotes; /** * 详细描述 */ @@ -75,6 +87,12 @@ public class ProdDO extends BaseDO { * 商品轮播图片,以,分割 */ private String imgs; + + /** + * 标签 + */ + private String tag; + /** * 默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java index f0c3440..83b3fb4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java @@ -43,14 +43,6 @@ public class ProdWeightRangePricesDO extends BaseDO { /** * 是否启用该规则0否1是 */ - private Boolean isEnabled; - /** - * 创建时间 - */ - private LocalDateTime createdAt; - /** - * 更新时间 - */ - private LocalDateTime updatedAt; + private Integer isEnabled; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java index ca38065..6fee361 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java @@ -7,6 +7,7 @@ import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 紧急响应时间区间设置 Mapper @@ -16,5 +17,8 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface ProdEmergencyResponseIntervalsMapper extends BaseMapperX { - + /** + * 删除关联 + */ + public int deleteIntervals(@Param("configId")Long configId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index 2d00acb..b2fb358 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -44,6 +44,14 @@ public interface ProdService { + /** + * 获取商品服务配置 + * + * @param prodId 商品id + * @return 编号 + */ + ProdServiceVO getProdService(@Valid Integer prodId); + /** * 更新商品 * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index 637a6ba..827ab02 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -84,6 +84,7 @@ public class ProdServiceImpl implements ProdService { } @Override + @Transactional public void createProdService(ProdServiceVO prodServiceVO) { ProdDO prodDO = new ProdDO(); prodDO.setProdId(prodServiceVO.getProdId()); @@ -101,7 +102,7 @@ public class ProdServiceImpl implements ProdService { ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() .eq(ProdServiceAreasDO::getAreaName, areaName) ); - if(prodServiceAreas == null){ + if(prodServiceAreas != null){ //插入关联表 prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() .setProdId(prodDO.getProdId()) @@ -198,37 +199,44 @@ public class ProdServiceImpl implements ProdService { //紧急响应设置 if(Objects.equals(prodServiceVO.getEmergencySwitch(),BaseEnum.YES_ONE.getKey())){ ProdEmergencyResponseDO prodEmergencyResponse = prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponse(); - prodEmergencyResponseMapper.insert(prodEmergencyResponse); - for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ - prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); - prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + if(prodEmergencyResponse!=null){ + prodEmergencyResponseMapper.updateById(prodEmergencyResponse); + prodEmergencyResponseIntervalsMapper.deleteIntervals(prodEmergencyResponse.getId()); + for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ + prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); + prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + } } + } //接单上线设置 if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){ - productOrderLimitMapper.insert(prodServiceVO.ProductOrderLimitVO); + productOrderLimitMapper.updateById(prodServiceVO.ProductOrderLimitVO); } //特殊时段设置 if(Objects.equals(prodServiceVO.getAdditionalSwitch(),BaseEnum.YES_ONE.getKey())){ for (ProdAdditionalFeeDatesDO prodAdditionalFeeDates : prodServiceVO.getProdAdditionalFeeDatesList()){ - prodAdditionalFeeDates.setProdId(prodServiceVO.getProdId()); - prodAdditionalFeeDatesMapper.insert(prodAdditionalFeeDates); + prodAdditionalFeeDatesMapper.updateById(prodAdditionalFeeDates); } } //特殊日期设置 if(Objects.equals(prodServiceVO.getAdditionalFeeSwitch(),BaseEnum.YES_ONE.getKey())){ for (ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods : prodServiceVO.getProdAdditionalFeePeriodsList()){ - prodAdditionalFeePeriods.setProdId(prodServiceVO.getProdId()); - prodAdditionalFeePeriodsMapper.insert(prodAdditionalFeePeriods); + prodAdditionalFeePeriodsMapper.updateById(prodAdditionalFeePeriods); } } //体重设置 if(Objects.equals(prodServiceVO.getWeightSwitch(),BaseEnum.YES_ONE.getKey())){ - prodWeightRangePricesMapper.insert(prodServiceVO.prodWeightConfig); + prodWeightRangePricesMapper.updateById(prodServiceVO.prodWeightConfig); } prodMapper.updateById(prod); } + @Override + public ProdServiceVO getProdService(Integer prodId) { + return null; + } + @Override public void updateProd(ProdSaveReqVO updateReqVO) { // 校验存在 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java index a2b1347..b7bbd9b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java @@ -44,6 +44,17 @@ public class ProdPageReqVO extends PageParam { @Schema(description = "详细描述") private String content; + + @Schema(description = "'是否置灰0否1是'") + private Integer isProhibit; + + @Schema(description = "审核备注") + private String processNotes; + /** + * 标签 + */ + private String tag; + @Schema(description = "商品编号") private String prodNumber; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java index 48ca6a6..b0b6bd7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java @@ -80,6 +80,16 @@ public class ProdRespVO { @ExcelProperty("分享图") private String shareImage; + @Schema(description = "'是否置灰0否1是'") + private Integer isProhibit; + + @Schema(description = "审核备注") + private String processNotes; + /** + * 标签 + */ + private String tag; + @Schema(description = "分享话术") @ExcelProperty("分享话术") private String shareContent; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java index ab086bf..74ee58c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java @@ -55,6 +55,13 @@ public class ProdSaveReqVO { @Schema(description = "默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核", example = "2") private Integer status; + @Schema(description = "'是否置灰0否1是'") + private Integer isProhibit; + + @Schema(description = "审核备注") + private String processNotes; + + @Schema(description = "商品分类", example = "14895") private Long categoryId; @@ -64,6 +71,11 @@ public class ProdSaveReqVO { @Schema(description = "分享图") private String shareImage; + /** + * 标签 + */ + private String tag; + @Schema(description = "分享话术") private String shareContent; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java index 1d194da..36347f0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java @@ -31,19 +31,14 @@ public class ProdAdditionalFeeDatesPageReqVO extends PageParam { @Schema(description = "指定日期(JSON格式存储)") private String specificDates; - @Schema(description = "收费方式") - private String chargeMode; + @Schema(description = "收费方式0:''固定金额'':1:''基准价上浮") + private Integer chargeMode; @Schema(description = "价格或上浮百分比", example = "17305") private BigDecimal price; - @Schema(description = "是否启用该规则") - private Boolean isEnabled; + @Schema(description = "是否启用该规则是否启用该规则0关1开") + private Integer isEnabled; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java index 8618abc..9acf589 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java @@ -37,24 +37,16 @@ public class ProdAdditionalFeeDatesRespVO { @ExcelProperty("指定日期(JSON格式存储)") private String specificDates; - @Schema(description = "收费方式", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("收费方式") - private String chargeMode; + @Schema(description = "收费方式0:''固定金额'':1:''基准价上浮") + private Integer chargeMode; @Schema(description = "价格或上浮百分比", example = "17305") @ExcelProperty("价格或上浮百分比") private BigDecimal price; - @Schema(description = "是否启用该规则", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("是否启用该规则") - private Boolean isEnabled; + @Schema(description = "是否启用该规则是否启用该规则0关1开", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("是否启用该规则是否启用该规则0关1开") + private Integer isEnabled; - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createdAt; - - @Schema(description = "更新时间") - @ExcelProperty("更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java index 98e04f6..68c132a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java @@ -33,21 +33,17 @@ public class ProdAdditionalFeeDatesSaveReqVO { @Schema(description = "指定日期(JSON格式存储)") private String specificDates; - @Schema(description = "收费方式", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "收费方式0:''固定金额'':1:''基准价上浮", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "收费方式不能为空") - private String chargeMode; + private Integer chargeMode; + @Schema(description = "价格或上浮百分比", example = "17305") private BigDecimal price; - @Schema(description = "是否启用该规则", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "是否启用该规则是否启用该规则0关1开", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "是否启用该规则不能为空") - private Boolean isEnabled; + private Integer isEnabled; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java index de4f4e4..b560c1e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java @@ -34,10 +34,5 @@ public class ProdAdditionalFeePeriodsPageReqVO extends PageParam { @Schema(description = "浮动百分比") private BigDecimal floatingPercentage; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java index 86db206..9583f4e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java @@ -41,12 +41,5 @@ public class ProdAdditionalFeePeriodsRespVO { @ExcelProperty("浮动百分比") private BigDecimal floatingPercentage; - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createdAt; - - @Schema(description = "更新时间") - @ExcelProperty("更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java index ef9692d..2d0cecb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java @@ -37,10 +37,4 @@ public class ProdAdditionalFeePeriodsSaveReqVO { @Schema(description = "浮动百分比") private BigDecimal floatingPercentage; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "更新时间") - private LocalDateTime updatedAt; - } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java index 98e68fb..3a35799 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java @@ -19,6 +19,6 @@ public class ProdEmergencyInfoVO { private ProdEmergencyResponseDO prodEmergencyResponse; @Schema(description = "紧急响应时间区间设置") - private List ProdEmergencyResponseIntervalsList; + private List prodEmergencyResponseIntervalsList; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java index d9a215f..4b37d8a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java @@ -26,12 +26,6 @@ public class ProdWeightRangePricesPageReqVO extends PageParam { private BigDecimal price; @Schema(description = "是否启用该规则0否1是") - private Boolean isEnabled; - - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "更新时间") - private LocalDateTime updatedAt; + private Integer isEnabled; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java index 4f6f46b..4255795 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java @@ -31,14 +31,7 @@ public class ProdWeightRangePricesRespVO { @Schema(description = "是否启用该规则0否1是", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("是否启用该规则0否1是") - private Boolean isEnabled; + private Integer isEnabled; - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createdAt; - - @Schema(description = "更新时间") - @ExcelProperty("更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java index a1c34c9..afeb57a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java @@ -29,12 +29,7 @@ public class ProdWeightRangePricesSaveReqVO { @Schema(description = "是否启用该规则0否1是", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "是否启用该规则0否1是不能为空") - private Boolean isEnabled; + private Integer isEnabled; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseIntervalsMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseIntervalsMapper.xml index 48ab32c..cae46ea 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseIntervalsMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdEmergencyResponseIntervalsMapper.xml @@ -8,5 +8,7 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + + delete from tz_prod_emergency_response_intervals where config_id = #{configId} + \ No newline at end of file From d92b69e1f1208086f3782d8374ed8d29273d4bab Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Thu, 31 Jul 2025 16:50:43 +0800 Subject: [PATCH 12/22] =?UTF-8?q?=E5=95=86=E5=93=81=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/controller/ProdController.java | 10 +- .../product/dto/ProdAdditionalFeeDatesDO.java | 2 +- .../product/dto/ProdEmergencyResponseDO.java | 4 +- .../dto/ProdEmergencyResponseIntervalsDO.java | 2 +- .../tashow/cloud/product/dto/ProdPropDO.java | 2 +- .../cloud/product/dto/ProdPropValueDO.java | 2 +- .../dto/ProdServiceOverAreaRulesDO.java | 2 +- .../product/dto/ProductOrderLimitDO.java | 2 +- .../com/tashow/cloud/product/dto/SkuDO.java | 2 +- .../product/dto/SkuServiceDeliverDO.java | 4 +- .../cloud/product/dto/SkuServicesFormDO.java | 2 +- .../cloud/product/mapper/ProdMapper.java | 16 +- .../cloud/product/service/ProdService.java | 2 +- .../product/service/impl/ProdServiceImpl.java | 20 +- .../cloud/product/vo/prod/ProdPageReqVO.java | 14 +- .../cloud/product/vo/prod/ProdRespVO.java | 14 +- .../cloud/product/vo/prod/ProdSaveReqVO.java | 14 +- .../cloud/product/vo/prod/ProdServiceVO.java | 12 +- .../ProdAdditionalFeeDatesPageReqVO.java | 2 +- .../ProdAdditionalFeeDatesRespVO.java | 2 +- .../ProdAdditionalFeeDatesSaveReqVO.java | 2 +- .../ProdEmergencyInfoVO.java | 36 ++- .../ProdEmergencyResponsePageReqVO.java | 4 +- .../ProdEmergencyResponseRespVO.java | 4 +- .../ProdEmergencyResponseSaveReqVO.java | 4 +- ...odEmergencyResponseIntervalsPageReqVO.java | 2 +- .../ProdEmergencyResponseIntervalsRespVO.java | 2 +- ...odEmergencyResponseIntervalsSaveReqVO.java | 2 +- .../vo/prodprop/ProdPropPageReqVO.java | 2 +- .../product/vo/prodprop/ProdPropRespVO.java | 2 +- .../vo/prodprop/ProdPropSaveReqVO.java | 2 +- .../prodpropvalue/ProdPropValuePageReqVO.java | 2 +- .../ProdServiceAreasInfoVO.java | 22 +- .../resources/mapper/product/ProdMapper.xml | 253 ++++++++++++++++++ 34 files changed, 393 insertions(+), 76 deletions(-) diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java index 0796545..31f232b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java @@ -58,8 +58,14 @@ public class ProdController { return success(true); } - - + @GetMapping("/get") + @Operation(summary = "获得商品服务信息") + @Parameter(name = "prodId", description = "商品id", required = true, example = "1024") + @PermitAll + public CommonResult getProd(@RequestParam("prodId") Long prodId) { + ProdServiceVO prodServiceVO = prodService.getProdService(prodId); + return success(prodServiceVO); + } /* @PutMapping("/update") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java index cba7792..028dc50 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java @@ -39,7 +39,7 @@ public class ProdAdditionalFeeDatesDO extends BaseDO { /** * 日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日' */ - private Boolean dateType; + private Integer dateType; /** * 自定义日期时间段(JSON格式存储) */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java index 73d0cf7..d93fb7d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java @@ -46,10 +46,10 @@ public class ProdEmergencyResponseDO extends BaseDO { /** * 法定节假日是否开启0:关闭1开启 */ - private Boolean blackHappy; + private Integer blackHappy; /** * 固定休息日周末是否开启0关闭1开启 */ - private Boolean blackWeekend; + private Integer blackWeekend; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java index dd615ae..3c20793 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java @@ -44,7 +44,7 @@ public class ProdEmergencyResponseIntervalsDO extends BaseDO { /** * 收费模式0:固定收费 1:浮动收费 */ - private Boolean chargeMode; + private Integer chargeMode; /** * 浮动百分比 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java index 4c3f2d9..658fe6f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java @@ -43,7 +43,7 @@ public class ProdPropDO{ /** * 是否删除0否1是 */ - private Boolean isDelete; + private Integer isDelete; /** * 属性值 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java index 4dfe445..37e363e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java @@ -35,6 +35,6 @@ public class ProdPropValueDO { /** * 是否删除0否1是 */ - private Boolean isDelete; + private Integer isDelete; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java index 9fdc063..f1c782a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java @@ -35,7 +35,7 @@ public class ProdServiceOverAreaRulesDO extends BaseDO { /** * 超区规则类型(0:拒单、2:接单并收取超区费、3:接单并免超区费) */ - private Boolean ruleType; + private Integer ruleType; /** * 超区费用(仅在rule_type为accept_with_fee时有效) */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java index 9f5c60a..0aef51c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java @@ -34,7 +34,7 @@ public class ProductOrderLimitDO extends BaseDO { /** * 限制单位'0:按自然天',1:'按自然周',2:'按自然月' */ - private Boolean limitUnit; + private Integer limitUnit; /** * 上限阈值 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java index 43c25cc..ede98ea 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java @@ -87,7 +87,7 @@ public class SkuDO extends BaseDO { /** * 库存扣款时机0:付款扣1:下单扣 */ - private Boolean stocksType; + private Integer stocksType; /** * sku编码 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java index 297fc2f..11152c2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java @@ -35,7 +35,7 @@ public class SkuServiceDeliverDO extends BaseDO { /** * 交互方式0:快递物流 1:到店自提 2:商家自送 */ - private Boolean type; + private Integer type; /** * 价格 */ @@ -43,7 +43,7 @@ public class SkuServiceDeliverDO extends BaseDO { /** * 是否收费0:免费1收费 */ - private Boolean isCharge; + private Integer isCharge; /** * 详细地址 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java index df30fcd..17457eb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java @@ -42,7 +42,7 @@ public class SkuServicesFormDO extends BaseDO { /** * 是否启用该服务 */ - private Boolean isEnabled; + private Integer isEnabled; /** * 创建时间 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java index b428c5d..4748f03 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java @@ -7,9 +7,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdDO; +import com.tashow.cloud.product.dto.*; import com.tashow.cloud.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasInfoVO; +import io.swagger.v3.oas.annotations.media.Schema; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 商品 Mapper @@ -21,4 +26,13 @@ public interface ProdMapper extends BaseMapperX { IPage getProdPageList(Page page, ProdPageReqVO reqVO); + ProdServiceVO selectProdService(@Param("prodId") Long prodId + ,@Param("regionSwitch") Integer regionSwitch + ,@Param("reservationSwitch") Integer reservationSwitch + ,@Param("emergencySwitch") Integer emergencySwitch + ,@Param("orderLimitSwitch") Integer orderLimitSwitch + ,@Param("additionalSwitch") Integer additionalSwitch + ,@Param("additionalFeeSwitch") Integer additionalFeeSwitch + ,@Param("weightSwitch") Integer weightSwitch + ); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index b2fb358..28f9aed 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -50,7 +50,7 @@ public interface ProdService { * @param prodId 商品id * @return 编号 */ - ProdServiceVO getProdService(@Valid Integer prodId); + ProdServiceVO getProdService(@Valid Long prodId); /** * 更新商品 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index 827ab02..4a9ba7f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -92,7 +92,7 @@ public class ProdServiceImpl implements ProdService { if(Objects.equals(prodServiceVO.getRegionSwitch(),BaseEnum.YES_ONE.getKey())){ prodDO.setRegionSwitch(BaseEnum.YES_ONE.getKey()); //保存区域设置信息 - ProdServiceOverAreaRulesDO prodServiceOverAreaRules =prodServiceVO.getProdServiceAreasInfo().getOverAreaRules(); + ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(prodServiceVO.getProdServiceAreasInfo(), ProdServiceOverAreaRulesDO.class); prodServiceOverAreaRules.setProdId(prodDO.getProdId()); prodServiceOverAreaRulesMapper.insert(prodServiceOverAreaRules); //保存区域 @@ -121,7 +121,8 @@ public class ProdServiceImpl implements ProdService { //紧急响应设置 if(Objects.equals(prodServiceVO.getEmergencySwitch(),BaseEnum.YES_ONE.getKey())){ prodDO.setEmergencySwitch(BaseEnum.YES_ONE.getKey()); - ProdEmergencyResponseDO prodEmergencyResponse = prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponse(); + // 插入 + ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); prodEmergencyResponse.setProdId(prodDO.getProdId()); prodEmergencyResponseMapper.insert(prodEmergencyResponse); for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ @@ -132,7 +133,7 @@ public class ProdServiceImpl implements ProdService { //接单上线设置 if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){ prodDO.setOrderLimitSwitch(BaseEnum.YES_ONE.getKey()); - ProductOrderLimitDO productOrderLimit = prodServiceVO.ProductOrderLimitVO; + ProductOrderLimitDO productOrderLimit = prodServiceVO.productOrderLimitVO; productOrderLimit.setProdId(prodDO.getProdId()); productOrderLimitMapper.insert(productOrderLimit); } @@ -171,7 +172,7 @@ public class ProdServiceImpl implements ProdService { if(Objects.equals(prodServiceVO.getRegionSwitch(),BaseEnum.YES_ONE.getKey())){ //保存区域设置信息 - ProdServiceOverAreaRulesDO prodServiceOverAreaRules =prodServiceVO.getProdServiceAreasInfo().getOverAreaRules(); + ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(prodServiceVO.getProdServiceAreasInfo(), ProdServiceOverAreaRulesDO.class); prodServiceOverAreaRules.setProdId(prodServiceVO.getProdId()); prodServiceOverAreaRulesMapper.updateById(prodServiceOverAreaRules); //先批量删除区域关联表 @@ -198,7 +199,7 @@ public class ProdServiceImpl implements ProdService { } //紧急响应设置 if(Objects.equals(prodServiceVO.getEmergencySwitch(),BaseEnum.YES_ONE.getKey())){ - ProdEmergencyResponseDO prodEmergencyResponse = prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponse(); + ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); if(prodEmergencyResponse!=null){ prodEmergencyResponseMapper.updateById(prodEmergencyResponse); prodEmergencyResponseIntervalsMapper.deleteIntervals(prodEmergencyResponse.getId()); @@ -211,7 +212,7 @@ public class ProdServiceImpl implements ProdService { } //接单上线设置 if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){ - productOrderLimitMapper.updateById(prodServiceVO.ProductOrderLimitVO); + productOrderLimitMapper.updateById(prodServiceVO.productOrderLimitVO); } //特殊时段设置 if(Objects.equals(prodServiceVO.getAdditionalSwitch(),BaseEnum.YES_ONE.getKey())){ @@ -233,8 +234,11 @@ public class ProdServiceImpl implements ProdService { } @Override - public ProdServiceVO getProdService(Integer prodId) { - return null; + public ProdServiceVO getProdService(Long prodId) { + ProdDO prodDO = prodMapper.selectById(prodId); + return prodMapper.selectProdService(prodDO.getProdId(),prodDO.getRegionSwitch(), + prodDO.getReservationSwitch(),prodDO.getEmergencySwitch(),prodDO.getOrderLimitSwitch(), + prodDO.getAdditionalSwitch(),prodDO.getAdditionalFeeSwitch(),prodDO.getWeightSwitch()); } @Override diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java index b7bbd9b..1576ccd 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java @@ -80,25 +80,25 @@ public class ProdPageReqVO extends PageParam { private String shareContent; @Schema(description = "是否开启区域0关1开") - private Boolean regionSwitch; + private Integer regionSwitch; @Schema(description = "是否特殊时段0关1开") - private Boolean additionalSwitch; + private Integer additionalSwitch; @Schema(description = "是否特殊日期(节假日周末什么的)0关1开") - private Boolean additionalFeeSwitch; + private Integer additionalFeeSwitch; @Schema(description = "是否紧急响应服务0关1开") - private Boolean emergencySwitch; + private Integer emergencySwitch; @Schema(description = "是否预约0关1开") - private Boolean reservationSwitch; + private Integer reservationSwitch; @Schema(description = "是否接单上线0关1开") - private Boolean orderLimitSwitch; + private Integer orderLimitSwitch; @Schema(description = "是否开启体重配置0关1开") - private Boolean weightSwitch; + private Integer weightSwitch; @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java index b0b6bd7..c319247 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java @@ -96,31 +96,31 @@ public class ProdRespVO { @Schema(description = "是否开启区域0关1开") @ExcelProperty("是否开启区域0关1开") - private Boolean regionSwitch; + private Integer regionSwitch; @Schema(description = "是否特殊时段0关1开") @ExcelProperty("是否特殊时段0关1开") - private Boolean additionalSwitch; + private Integer additionalSwitch; @Schema(description = "是否特殊日期(节假日周末什么的)0关1开") @ExcelProperty("是否特殊日期(节假日周末什么的)0关1开") - private Boolean additionalFeeSwitch; + private Integer additionalFeeSwitch; @Schema(description = "是否紧急响应服务0关1开") @ExcelProperty("是否紧急响应服务0关1开") - private Boolean emergencySwitch; + private Integer emergencySwitch; @Schema(description = "是否预约0关1开") @ExcelProperty("是否预约0关1开") - private Boolean reservationSwitch; + private Integer reservationSwitch; @Schema(description = "是否接单上线0关1开") @ExcelProperty("是否接单上线0关1开") - private Boolean orderLimitSwitch; + private Integer orderLimitSwitch; @Schema(description = "是否开启体重配置0关1开") @ExcelProperty("是否开启体重配置0关1开") - private Boolean weightSwitch; + private Integer weightSwitch; @Schema(description = "创建时间") @ExcelProperty("创建时间") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java index 74ee58c..6a4458c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java @@ -80,25 +80,25 @@ public class ProdSaveReqVO { private String shareContent; @Schema(description = "是否开启区域0关1开") - private Boolean regionSwitch; + private Integer regionSwitch; @Schema(description = "是否特殊时段0关1开") - private Boolean additionalSwitch; + private Integer additionalSwitch; @Schema(description = "是否特殊日期(节假日周末什么的)0关1开") - private Boolean additionalFeeSwitch; + private Integer additionalFeeSwitch; @Schema(description = "是否紧急响应服务0关1开") - private Boolean emergencySwitch; + private Integer emergencySwitch; @Schema(description = "是否预约0关1开") - private Boolean reservationSwitch; + private Integer reservationSwitch; @Schema(description = "是否接单上线0关1开") - private Boolean orderLimitSwitch; + private Integer orderLimitSwitch; @Schema(description = "是否开启体重配置0关1开") - private Boolean weightSwitch; + private Integer weightSwitch; @Schema(description = "创建人") private String createBy; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java index 9301544..25db6a4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java @@ -13,7 +13,6 @@ import java.util.List; @Schema(description = "商品服务配置 VO") @Data -@ExcelIgnoreUnannotated public class ProdServiceVO { @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6943") @@ -21,46 +20,39 @@ public class ProdServiceVO { @Schema(description = "是否开启服务区域配置0关1开") - @ExcelProperty("是否开启区域0关1开") private Integer regionSwitch; @Schema(description = "服务区域配置") public ProdServiceAreasInfoVO prodServiceAreasInfo; @Schema(description = "是否预约0关1开") - @ExcelProperty("是否预约0关1开") private Integer reservationSwitch; @Schema(description = "预约配置") public ProdReservationConfigDO prodReservationConfig; @Schema(description = "是否紧急响应服务0关1开") - @ExcelProperty("是否紧急响应服务0关1开") private Integer emergencySwitch; @Schema(description = "急响应服务配置") public ProdEmergencyInfoVO prodEmergencyInfoVO; @Schema(description = "是否接单上线0关1开") - @ExcelProperty("是否接单上线0关1开") private Integer orderLimitSwitch; @Schema(description = "接单上线配置") - public ProductOrderLimitDO ProductOrderLimitVO; + public ProductOrderLimitDO productOrderLimitVO; @Schema(description = "是否特殊时段0关1开") - @ExcelProperty("是否特殊时段0关1开") private Integer additionalSwitch; @Schema(description = "特殊时段规则配置") - public List ProdAdditionalFeeDatesList; + public List prodAdditionalFeeDatesList; @Schema(description = "是否特殊日期(节假日周末什么的)0关1开") - @ExcelProperty("是否特殊日期(节假日周末什么的)0关1开") private Integer additionalFeeSwitch; @Schema(description = "特殊日期规则配置") public List prodAdditionalFeePeriodsList; @Schema(description = "是否开启体重配置0关1开") - @ExcelProperty("是否开启体重配置0关1开") private Integer weightSwitch; @Schema(description = "体重配置") public ProdWeightRangePricesDO prodWeightConfig; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java index 36347f0..1d183f1 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java @@ -23,7 +23,7 @@ public class ProdAdditionalFeeDatesPageReqVO extends PageParam { private String name; @Schema(description = "日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'", example = "2") - private Boolean dateType; + private Integer dateType; @Schema(description = "自定义日期时间段(JSON格式存储)") private String customTimeSlots; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java index 9acf589..9317208 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java @@ -27,7 +27,7 @@ public class ProdAdditionalFeeDatesRespVO { @Schema(description = "日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @ExcelProperty("日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'") - private Boolean dateType; + private Integer dateType; @Schema(description = "自定义日期时间段(JSON格式存储)") @ExcelProperty("自定义日期时间段(JSON格式存储)") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java index 68c132a..1032ad2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java @@ -25,7 +25,7 @@ public class ProdAdditionalFeeDatesSaveReqVO { @Schema(description = "日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @NotNull(message = "日期类型0:'自定义日期范围':1:'指定日期':2:'法定节假日',3:'固定休息日'不能为空") - private Boolean dateType; + private Integer dateType; @Schema(description = "自定义日期时间段(JSON格式存储)") private String customTimeSlots; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java index 3a35799..e31cbe1 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java @@ -2,6 +2,7 @@ package com.tashow.cloud.product.vo.prodemergencyresponse; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableId; import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; import io.swagger.v3.oas.annotations.media.Schema; @@ -15,10 +16,39 @@ import java.util.List; @ExcelIgnoreUnannotated public class ProdEmergencyInfoVO { - @Schema(description = "紧急响应服务配置") - private ProdEmergencyResponseDO prodEmergencyResponse; + + /** + * 紧急响应服务配置的唯一标识符 + */ + private Long id; + /** + * 关联的商品ID + */ + private Long prodId; + /** + * 可响应时间段(JSON格式存储) + */ + private String responseTimeSlots; + /** + * 黑名自定义日期(JSON格式存储) + */ + private String blacklistedDates; + /** + * 黑名单指定日期(JSON格式存储) + */ + private String blackAppointDates; + /** + * 法定节假日是否开启0:关闭1开启 + */ + private Integer blackHappy; + /** + * 固定休息日周末是否开启0关闭1开启 + */ + private Integer blackWeekend; + + @Schema(description = "紧急响应时间区间设置") - private List prodEmergencyResponseIntervalsList; + public List prodEmergencyResponseIntervalsList; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java index 7b9f759..1f8c1c1 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java @@ -28,10 +28,10 @@ public class ProdEmergencyResponsePageReqVO extends PageParam { private String blackAppointDates; @Schema(description = "法定节假日是否开启0:关闭1开启") - private Boolean blackHappy; + private Integer blackHappy; @Schema(description = "固定休息日周末是否开启0关闭1开启") - private Boolean blackWeekend; + private Integer blackWeekend; @Schema(description = "创建时间") private LocalDateTime createdAt; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java index 1c1c3c3..dbeb629 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java @@ -34,11 +34,11 @@ public class ProdEmergencyResponseRespVO { @Schema(description = "法定节假日是否开启0:关闭1开启") @ExcelProperty("法定节假日是否开启0:关闭1开启") - private Boolean blackHappy; + private Integer blackHappy; @Schema(description = "固定休息日周末是否开启0关闭1开启") @ExcelProperty("固定休息日周末是否开启0关闭1开启") - private Boolean blackWeekend; + private Integer blackWeekend; @Schema(description = "创建时间") @ExcelProperty("创建时间") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java index fbca04f..998c9ed 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java @@ -28,10 +28,10 @@ public class ProdEmergencyResponseSaveReqVO { private String blackAppointDates; @Schema(description = "法定节假日是否开启0:关闭1开启") - private Boolean blackHappy; + private Integer blackHappy; @Schema(description = "固定休息日周末是否开启0关闭1开启") - private Boolean blackWeekend; + private Integer blackWeekend; @Schema(description = "创建时间") private LocalDateTime createdAt; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java index 0fe313c..9136648 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java @@ -26,7 +26,7 @@ public class ProdEmergencyResponseIntervalsPageReqVO extends PageParam { private Integer responseHours; @Schema(description = "收费模式0:固定收费 1:浮动收费") - private Boolean chargeMode; + private Integer chargeMode; @Schema(description = "浮动百分比") private BigDecimal floatingPercentage; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java index 6d9975a..dd9492e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java @@ -31,7 +31,7 @@ public class ProdEmergencyResponseIntervalsRespVO { @Schema(description = "收费模式0:固定收费 1:浮动收费", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("收费模式0:固定收费 1:浮动收费") - private Boolean chargeMode; + private Integer chargeMode; @Schema(description = "浮动百分比") @ExcelProperty("浮动百分比") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java index a77d042..daabe0f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java @@ -29,7 +29,7 @@ public class ProdEmergencyResponseIntervalsSaveReqVO { @Schema(description = "收费模式0:固定收费 1:浮动收费", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "收费模式0:固定收费 1:浮动收费不能为空") - private Boolean chargeMode; + private Integer chargeMode; @Schema(description = "浮动百分比") private BigDecimal floatingPercentage; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java index 997846b..080d40f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java @@ -24,6 +24,6 @@ public class ProdPropPageReqVO extends PageParam { private Integer prodId; @Schema(description = "是否删除0否1是") - private Boolean isDelete; + private Integer isDelete; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java index 57f0bde..d6004a7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java @@ -32,6 +32,6 @@ public class ProdPropRespVO { @Schema(description = "是否删除0否1是") @ExcelProperty("是否删除0否1是") - private Boolean isDelete; + private Integer isDelete; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java index de51bb0..cc5173e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java @@ -27,7 +27,7 @@ public class ProdPropSaveReqVO { private Integer prodId; @Schema(description = "是否删除0否1是") - private Boolean isDelete; + private Integer isDelete; /** * 属性值 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java index e70a613..31d84bc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java @@ -18,6 +18,6 @@ public class ProdPropValuePageReqVO extends PageParam { private Long propId; @Schema(description = "是否删除0否1是") - private Boolean isDelete; + private Integer isDelete; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java index ba0187a..3ec8a86 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java @@ -2,11 +2,13 @@ package com.tashow.cloud.product.vo.prodserviceareas; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableId; import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesRespVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -15,9 +17,25 @@ import java.util.List; @ExcelIgnoreUnannotated public class ProdServiceAreasInfoVO { + /** + * 超区规则的唯一标识符 + */ + private Long id; + /** + * 关联的商品ID + */ + private Long prodId; + /** + * 超区规则类型(0:拒单、2:接单并收取超区费、3:接单并免超区费) + */ + private Integer ruleType; + /** + * 超区费用(仅在rule_type为accept_with_fee时有效) + */ + private BigDecimal fee; + + @Schema(description = "服务区域地址名称") private List areaNameList; - public ProdServiceOverAreaRulesDO overAreaRules; - } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml index e6e0eb6..f2c8975 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml @@ -8,7 +8,260 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From fb863ef9d1d41f89f91c48937804ac4916fb66bd Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Fri, 1 Aug 2025 18:02:59 +0800 Subject: [PATCH 13/22] =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tashow-feign/tashow-product-api/pom.xml | 5 + .../productapi/enums/ErrorCodeConstants.java | 1 + .../general/StringListTypeHandler.java | 54 ++++++ .../mybatis/core/dataobject/BaseDO.java | 2 +- tashow-module/tashow-module-product/pom.xml | 1 - .../controller/CategoryController.java | 13 +- .../product/controller/SkuController.java | 11 ++ .../SkuServiceDetailsController.java | 96 ++++++++++ .../com/tashow/cloud/product/dto/ProdDO.java | 16 +- .../com/tashow/cloud/product/dto/SkuDO.java | 16 +- .../product/dto/SkuServiceDetailsDO.java | 81 ++++++++ .../cloud/product/dto/SkuServicesFormDO.java | 6 + .../mapper/SkuServiceDetailsMapper.java | 20 ++ .../cloud/product/service/SkuService.java | 8 + .../service/SkuServiceDetailsService.java | 57 ++++++ .../product/service/impl/ProdServiceImpl.java | 1 + .../impl/SkuServiceDetailsServiceImpl.java | 74 ++++++++ .../product/service/impl/SkuServiceImpl.java | 174 +++++++++++++++++- .../cloud/product/vo/prod/ProdPageReqVO.java | 15 +- .../cloud/product/vo/prod/ProdRespVO.java | 16 +- .../cloud/product/vo/prod/ProdSaveReqVO.java | 17 +- .../cloud/product/vo/sku/SkuExtendVO.java | 62 +++++++ .../cloud/product/vo/sku/SkuPageReqVO.java | 8 + .../cloud/product/vo/sku/SkuRespVO.java | 8 + .../SkuServiceDetailsPageReqVO.java | 57 ++++++ .../SkuServiceDetailsRespVO.java | 67 +++++++ .../SkuServiceDetailsSaveReqVO.java | 58 ++++++ .../product/SkuServiceDetailsMapper.xml | 12 ++ 28 files changed, 937 insertions(+), 19 deletions(-) create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/general/StringListTypeHandler.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDetailsController.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDetailsService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDetailsServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDetailsMapper.xml diff --git a/tashow-feign/tashow-product-api/pom.xml b/tashow-feign/tashow-product-api/pom.xml index 782cc10..69de939 100644 --- a/tashow-feign/tashow-product-api/pom.xml +++ b/tashow-feign/tashow-product-api/pom.xml @@ -35,6 +35,11 @@ spring-cloud-starter-openfeign true + + org.mybatis + mybatis + 3.5.13 + diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java index 03389a8..7f26c2e 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ErrorCodeConstants.java @@ -31,4 +31,5 @@ public interface ErrorCodeConstants { ErrorCode SKU_SERVICE_MATERIAL_NOT_EXISTS = new ErrorCode(10019, "服务物料详情不存在"); ErrorCode SKU_SERVICES_FORM_NOT_EXISTS = new ErrorCode(10021, "商品SKU扩展服务表单不存在"); ErrorCode SKU_SERVICE_TRANSPORT_NOT_EXISTS = new ErrorCode(10022, "服务遗体运输不存在"); + ErrorCode SKU_SERVICE_DETAILS_NOT_EXISTS = new ErrorCode(10023, "服务详情不存在"); } diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/general/StringListTypeHandler.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/general/StringListTypeHandler.java new file mode 100644 index 0000000..40472f1 --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/general/StringListTypeHandler.java @@ -0,0 +1,54 @@ +package com.tashow.cloud.productapi.general; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * 处理 List 与数据库逗号分隔字符串之间的转换 + */ +public class StringListTypeHandler extends BaseTypeHandler> { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, List parameter, JdbcType jdbcType) throws SQLException { + // 将 List 转为逗号分隔的字符串 + StringBuilder sb = new StringBuilder(); + for (int j = 0; j < parameter.size(); j++) { + if (j > 0) sb.append(","); + sb.append(parameter.get(j)); + } + ps.setString(i, sb.toString()); + } + + @Override + public List getNullableResult(ResultSet rs, String columnName) throws SQLException { + String str = rs.getString(columnName); + return parseStringToList(str); + } + + @Override + public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + String str = rs.getString(columnIndex); + return parseStringToList(str); + } + + @Override + public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + String str = cs.getString(columnIndex); + return parseStringToList(str); + } + + private List parseStringToList(String str) { + if (str == null || str.trim().length() == 0) { + return Collections.emptyList(); + } + return Arrays.asList(str.split(",")); + } +} diff --git a/tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/core/dataobject/BaseDO.java b/tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/core/dataobject/BaseDO.java index 5f1ec6d..92fa0e9 100644 --- a/tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/core/dataobject/BaseDO.java +++ b/tashow-framework/tashow-data-mybatis/src/main/java/com/tashow/cloud/mybatis/mybatis/core/dataobject/BaseDO.java @@ -51,6 +51,6 @@ public abstract class BaseDO implements Serializable, TransPojo { * 是否删除 */ @TableLogic - private Boolean deleted; + private Integer deleted; } diff --git a/tashow-module/tashow-module-product/pom.xml b/tashow-module/tashow-module-product/pom.xml index d8255bc..e7f9af1 100644 --- a/tashow-module/tashow-module-product/pom.xml +++ b/tashow-module/tashow-module-product/pom.xml @@ -48,7 +48,6 @@ tashow-framework-monitor - com.alibaba diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java index 5b59fb8..932b9bd 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java @@ -47,10 +47,21 @@ public class CategoryController { */ @PermitAll @GetMapping("/categoryList") - public CommonResult> categoryList() { + public CommonResult> categoryList( @RequestParam(value = "grade", required = false) Integer grade, + @RequestParam(value = "categoryId", required = false) Long categoryId, + @RequestParam(value = "status", required = false) Integer status) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); //TODO 获取当前登录用户 wrapper.eq(CategoryDO::getShopId, 1L); + if(grade != null) { + wrapper.eq(CategoryDO::getGrade, grade); + } + if(categoryId != null) { + wrapper.eq(CategoryDO::getCategoryId, categoryId); + } + if (status != null){ + wrapper.eq(CategoryDO::getStatus, status); + } List categoryMenuList = categoryService.list(wrapper); return success(categoryMenuList); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java index ba92b74..b6a9bff 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java @@ -2,9 +2,12 @@ package com.tashow.cloud.product.controller; import com.tashow.cloud.product.dto.SkuDO; import com.tashow.cloud.product.service.SkuService; +import com.tashow.cloud.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.product.vo.sku.SkuExtendVO; import com.tashow.cloud.product.vo.sku.SkuPageReqVO; import com.tashow.cloud.product.vo.sku.SkuRespVO; import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; +import jakarta.annotation.security.PermitAll; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -46,6 +49,14 @@ public class SkuController { return success(skuService.createSku(createReqVO)); } + @PostMapping("/createSkuExtend") + @Operation(summary = "创建sku扩展服务配置") + @PermitAll + public CommonResult createSkuExtend(@Valid @RequestBody SkuExtendVO skuExtendVO) { + skuService.createSkuExtend(skuExtendVO); + return success(true); + } + @PutMapping("/update") @Operation(summary = "更新单品SKU") @PreAuthorize("@ss.hasPermission('tz:sku:update')") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDetailsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDetailsController.java new file mode 100644 index 0000000..f5c8020 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDetailsController.java @@ -0,0 +1,96 @@ +package com.tashow.cloud.product.controller; + +import com.tashow.cloud.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.product.service.SkuServiceDetailsService; +import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; +import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsRespVO; +import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; +import org.springframework.web.bind.annotation.*; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +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 com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.pojo.CommonResult.success; + +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; + +import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; + +@Tag(name = "管理后台 - 服务详情") +@RestController +@RequestMapping("/tz/sku-service-details") +@Validated +public class SkuServiceDetailsController { + + @Resource + private SkuServiceDetailsService skuServiceDetailsService; + + @PostMapping("/create") + @Operation(summary = "创建服务详情") + @PreAuthorize("@ss.hasPermission('tz:sku-service-details:create')") + public CommonResult createSkuServiceDetails(@Valid @RequestBody SkuServiceDetailsSaveReqVO createReqVO) { + return success(skuServiceDetailsService.createSkuServiceDetails(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新服务详情") + @PreAuthorize("@ss.hasPermission('tz:sku-service-details:update')") + public CommonResult updateSkuServiceDetails(@Valid @RequestBody SkuServiceDetailsSaveReqVO updateReqVO) { + skuServiceDetailsService.updateSkuServiceDetails(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除服务详情") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('tz:sku-service-details:delete')") + public CommonResult deleteSkuServiceDetails(@RequestParam("id") Long id) { + skuServiceDetailsService.deleteSkuServiceDetails(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得服务详情") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('tz:sku-service-details:query')") + public CommonResult getSkuServiceDetails(@RequestParam("id") Long id) { + SkuServiceDetailsDO skuServiceDetails = skuServiceDetailsService.getSkuServiceDetails(id); + return success(BeanUtils.toBean(skuServiceDetails, SkuServiceDetailsRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得服务详情分页") + @PreAuthorize("@ss.hasPermission('tz:sku-service-details:query')") + public CommonResult> getSkuServiceDetailsPage(@Valid SkuServiceDetailsPageReqVO pageReqVO) { + PageResult pageResult = skuServiceDetailsService.getSkuServiceDetailsPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, SkuServiceDetailsRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出服务详情 Excel") + @PreAuthorize("@ss.hasPermission('tz:sku-service-details:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportSkuServiceDetailsExcel(@Valid SkuServiceDetailsPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = skuServiceDetailsService.getSkuServiceDetailsPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "服务详情.xls", "数据", SkuServiceDetailsRespVO.class, + BeanUtils.toBean(list, SkuServiceDetailsRespVO.class)); + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java index d89bb7a..f40f8e8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java @@ -1,5 +1,6 @@ package com.tashow.cloud.product.dto; +import com.tashow.cloud.productapi.general.StringListTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -39,7 +40,7 @@ public class ProdDO extends BaseDO { /** * seo标题 */ - private String seoName; + private String seoShortName; /** * seo搜索 */ @@ -88,10 +89,21 @@ public class ProdDO extends BaseDO { */ private String imgs; + /** + * 视频 + */ + private String video; + + /** + * 商品轮播图片,以,分割 + */ + private String whiteImg; + /** * 标签 */ - private String tag; + @TableField(typeHandler = StringListTypeHandler.class) + private List tag; /** * 默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java index ede98ea..5d0f360 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java @@ -77,7 +77,7 @@ public class SkuDO extends BaseDO { */ private String overview; /** - * 库存 + * 库存(-1代表无限库存) */ private Integer stocks; /** @@ -124,13 +124,19 @@ public class SkuDO extends BaseDO { * 0 禁用 1 启用 */ private Integer status; - /** - * 0 正常 1 已被删除 - */ - private Integer isDelete; /** * 最小购买数量 */ private Integer moq; + /** + * 是否上下架0下架1上架 + */ + private Integer isShelf; + + /** + * 是否默认规则0否1是 + */ + private Integer isSpecs; + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java new file mode 100644 index 0000000..6146268 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java @@ -0,0 +1,81 @@ +package com.tashow.cloud.product.dto; + +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; + +/** + * 服务详情 DO + * + * @author 芋道源码 + */ +@TableName("tz_sku_service_details") +@KeySequence("tz_sku_service_details_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SkuServiceDetailsDO extends BaseDO { + + /** + * 服务详情的唯一标识符 + */ + @TableId + private Long id; + /** + * 关联的扩展服务ID + */ + private Long serviceId; + /** + * 图片 + */ + private String pic; + /** + * 名称 + */ + private String name; + /** + * 价格 + */ + private BigDecimal price; + /** + * 是否收费0:免费1收费 + */ + private Integer isCharge; + /** + * 是否默认值0否1是 + */ + private Integer isDefault; + /** + * 类型:0:配置信息1:交付方式 + */ + private Integer type; + + /** + * 地点 + */ + private String adress; + + /** + * 触发节点名称 + */ + private String trigger; + + /** + * 触发节点id + */ + private Long triggerId; + + /** + * 描述 + */ + private String describe; + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java index 17457eb..9f56d6d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java @@ -43,6 +43,12 @@ public class SkuServicesFormDO extends BaseDO { * 是否启用该服务 */ private Integer isEnabled; + + /** + * 类型 + */ + private Integer type; + /** * 创建时间 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java new file mode 100644 index 0000000..a8c5345 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java @@ -0,0 +1,20 @@ +package com.tashow.cloud.product.mapper; + +import java.util.*; + +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.SkuServiceDetailsDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 服务详情 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface SkuServiceDetailsMapper extends BaseMapperX { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index 053105c..c2c8b86 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -3,6 +3,7 @@ package com.tashow.cloud.product.service; import java.util.*; import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.vo.sku.SkuExtendVO; import com.tashow.cloud.product.vo.sku.SkuPageReqVO; import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; import jakarta.validation.*; @@ -24,6 +25,13 @@ public interface SkuService { */ Long createSku(@Valid SkuSaveReqVO createReqVO); + /** + * 创建sku扩展服务配置 + * + * @param skuExtendVO 更新信息 + */ + void createSkuExtend(@Valid SkuExtendVO skuExtendVO); + /** * 更新单品SKU * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDetailsService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDetailsService.java new file mode 100644 index 0000000..2da66d1 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDetailsService.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.service; + +import java.util.*; + +import com.tashow.cloud.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; +import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; +import jakarta.validation.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; + +/** + * 服务详情 Service 接口 + * + * @author 芋道源码 + */ +public interface SkuServiceDetailsService { + + /** + * 创建服务详情 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createSkuServiceDetails(@Valid SkuServiceDetailsSaveReqVO createReqVO); + + /** + * 更新服务详情 + * + * @param updateReqVO 更新信息 + */ + void updateSkuServiceDetails(@Valid SkuServiceDetailsSaveReqVO updateReqVO); + + /** + * 删除服务详情 + * + * @param id 编号 + */ + void deleteSkuServiceDetails(Long id); + + /** + * 获得服务详情 + * + * @param id 编号 + * @return 服务详情 + */ + SkuServiceDetailsDO getSkuServiceDetails(Long id); + + /** + * 获得服务详情分页 + * + * @param pageReqVO 分页查询 + * @return 服务详情分页 + */ + PageResult getSkuServiceDetailsPage(SkuServiceDetailsPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index 4a9ba7f..2a3afd5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -64,6 +64,7 @@ public class ProdServiceImpl implements ProdService { private ProdWeightRangePricesMapper prodWeightRangePricesMapper; @Override + @Transactional public Long createProd(ProdSaveReqVO createReqVO) { // 插入 ProdDO prod = BeanUtils.toBean(createReqVO, ProdDO.class); diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDetailsServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDetailsServiceImpl.java new file mode 100644 index 0000000..f89e4e3 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDetailsServiceImpl.java @@ -0,0 +1,74 @@ +package com.tashow.cloud.product.service.impl; + +import com.tashow.cloud.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.product.mapper.SkuServiceDetailsMapper; +import com.tashow.cloud.product.service.SkuServiceDetailsService; +import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; +import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; +import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.util.object.BeanUtils; +import static com.tashow.cloud.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 服务详情 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class SkuServiceDetailsServiceImpl implements SkuServiceDetailsService { + + @Resource + private SkuServiceDetailsMapper skuServiceDetailsMapper; + + @Override + public Long createSkuServiceDetails(SkuServiceDetailsSaveReqVO createReqVO) { + // 插入 + SkuServiceDetailsDO skuServiceDetails = BeanUtils.toBean(createReqVO, SkuServiceDetailsDO.class); + skuServiceDetailsMapper.insert(skuServiceDetails); + // 返回 + return skuServiceDetails.getId(); + } + + @Override + public void updateSkuServiceDetails(SkuServiceDetailsSaveReqVO updateReqVO) { + // 校验存在 + validateSkuServiceDetailsExists(updateReqVO.getId()); + // 更新 + SkuServiceDetailsDO updateObj = BeanUtils.toBean(updateReqVO, SkuServiceDetailsDO.class); + skuServiceDetailsMapper.updateById(updateObj); + } + + @Override + public void deleteSkuServiceDetails(Long id) { + // 校验存在 + validateSkuServiceDetailsExists(id); + // 删除 + skuServiceDetailsMapper.deleteById(id); + } + + private void validateSkuServiceDetailsExists(Long id) { + if (skuServiceDetailsMapper.selectById(id) == null) { + throw exception(ErrorCodeConstants.SKU_SERVICE_DETAILS_NOT_EXISTS); + } + } + + @Override + public SkuServiceDetailsDO getSkuServiceDetails(Long id) { + return skuServiceDetailsMapper.selectById(id); + } + + @Override + public PageResult getSkuServiceDetailsPage(SkuServiceDetailsPageReqVO pageReqVO) { + return null; + } + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index 5fccb11..c093bef 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -1,10 +1,12 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.SkuDO; -import com.tashow.cloud.product.mapper.SkuMapper; +import com.tashow.cloud.product.dto.*; +import com.tashow.cloud.product.mapper.*; import com.tashow.cloud.product.service.SkuService; +import com.tashow.cloud.product.vo.sku.SkuExtendVO; import com.tashow.cloud.product.vo.sku.SkuPageReqVO; import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; +import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; @@ -30,6 +32,16 @@ public class SkuServiceImpl implements SkuService { @Resource private SkuMapper skuMapper; + @Resource + private SkuServiceDetailsMapper skuServiceDetailsMapper; + @Resource + private SkuServicesFormMapper skuServicesFormMapper; + @Resource + private SkuServiceMaterialMapper skuServiceMaterialMapper; + @Resource + private SkuServiceTransportMapper skuServiceTransportMapper; + @Resource + private SkuServiceDeliverMapper skuServiceDeliverMapper; @Override public Long createSku(SkuSaveReqVO createReqVO) { @@ -40,6 +52,164 @@ public class SkuServiceImpl implements SkuService { return sku.getSkuId(); } + @Override + @Transactional + public void createSkuExtend(SkuExtendVO skuExtendVO) { + //接运车辆配置 + if(Objects.equals(skuExtendVO.getTransportCarSwitch(),BaseEnum.YES_ONE.getKey())){ + SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); + skuServicesFormDO.setServiceName("接运车辆配置"); + skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setType(1); + skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesFormDO); + for(SkuServiceDetailsDO skuServiceDetailsDO:skuExtendVO.getTransportCarList()){ + skuServiceDetailsDO.setServiceId(skuServicesFormDO.getId()); + skuServiceDetailsMapper.insert(skuServiceDetailsDO); + } + SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); + skuServicesForm.setServiceName("接运车辆服务物料"); + skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setType(2); + skuServicesForm.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesForm); + for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getTransportCarMaterialList()){ + skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); + skuServiceMaterialMapper.insert(skuServiceMaterialDO); + } + } + //遗体运输目的地配置 + if(Objects.equals(skuExtendVO.getTrafficSwitch(),BaseEnum.YES_ONE.getKey())){ + SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); + skuServicesFormDO.setServiceName("遗体运输目的地配置"); + skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setType(3); + skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesFormDO); + for(SkuServiceTransportDO skuServiceTransportDO:skuExtendVO.getTrafficList()){ + skuServiceTransportDO.setServiceId(skuServicesFormDO.getId()); + skuServiceTransportMapper.insert(skuServiceTransportDO); + } + SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); + skuServicesForm.setServiceName("遗体运输目的地物料"); + skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setType(4); + skuServicesForm.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesForm); + for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getTrafficMaterialList()){ + skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); + skuServiceMaterialMapper.insert(skuServiceMaterialDO); + } + } + //遗体清洁配置 + if(Objects.equals(skuExtendVO.getCleanSwitch(),BaseEnum.YES_ONE.getKey())){ + SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); + skuServicesFormDO.setServiceName("遗体清洁配置"); + skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setType(5); + skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesFormDO); + for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getCleanList()){ + skuServiceDetails.setServiceId(skuServicesFormDO.getId()); + skuServiceDetailsMapper.insert(skuServiceDetails); + } + SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); + skuServicesForm.setServiceName("遗体清洁物料"); + skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setType(6); + skuServicesForm.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesForm); + for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getCleanMaterialList()){ + skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); + skuServiceMaterialMapper.insert(skuServiceMaterialDO); + } + } + //追思告别配置 + if(Objects.equals(skuExtendVO.getReflectionSwitch(),BaseEnum.YES_ONE.getKey())){ + SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); + skuServicesFormDO.setServiceName("追思告别配置"); + skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setType(7); + skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesFormDO); + for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getReflectionList()){ + skuServiceDetails.setServiceId(skuServicesFormDO.getId()); + skuServiceDetailsMapper.insert(skuServiceDetails); + } + SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); + skuServicesForm.setServiceName("追思告别物料"); + skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setType(8); + skuServicesForm.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesForm); + for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getReflectionMaterialList()){ + skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); + skuServiceMaterialMapper.insert(skuServiceMaterialDO); + } + } + + //遗体火化配置 + if(Objects.equals(skuExtendVO.getCremationSwitch(),BaseEnum.YES_ONE.getKey())){ + SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); + skuServicesFormDO.setServiceName("遗体火化配置"); + skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setType(9); + skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesFormDO); + for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getCremationList()){ + skuServiceDetails.setServiceId(skuServicesFormDO.getId()); + skuServiceDetailsMapper.insert(skuServiceDetails); + } + SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); + skuServicesForm.setServiceName("遗体火化物料"); + skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setType(10); + skuServicesForm.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesForm); + for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getCremationMaterialList()){ + skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); + skuServiceMaterialMapper.insert(skuServiceMaterialDO); + } + } + + //骨灰处理配置 + if(Objects.equals(skuExtendVO.getAshProcessingSwitch(),BaseEnum.YES_ONE.getKey())){ + SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); + skuServicesFormDO.setServiceName("骨灰处理配置"); + skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setType(9); + skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesFormDO); + for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getAshProcessingList()){ + skuServiceDetails.setServiceId(skuServicesFormDO.getId()); + skuServiceDetailsMapper.insert(skuServiceDetails); + } + SkuServicesFormDO skuForm = new SkuServicesFormDO(); + skuForm.setServiceName("骨灰处理配送方式"); + skuForm.setIsEnabled(BaseEnum.YES.getKey()); + skuForm.setType(10); + skuForm.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuForm); + for(SkuServiceDeliverDO skuServiceDeliverDO:skuExtendVO.getAshProcessingDeliverList()){ + skuServiceDeliverDO.setServiceId(skuForm.getId()); + skuServiceDeliverMapper.insert(skuServiceDeliverDO); + } + SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); + skuServicesForm.setServiceName("骨灰处理物料"); + skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setType(10); + skuServicesForm.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesForm); + for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getAshProcessingMaterialList()){ + skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); + skuServiceMaterialMapper.insert(skuServiceMaterialDO); + } + } + + + + } + @Override public void updateSku(SkuSaveReqVO updateReqVO) { // 校验存在 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java index 1576ccd..485806d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java @@ -8,6 +8,7 @@ import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; +import java.util.List; import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -24,7 +25,7 @@ public class ProdPageReqVO extends PageParam { private String abbreviation; @Schema(description = "seo标题", example = "李四") - private String seoName; + private String seoShortName; @Schema(description = "seo搜索") private String seoSearch; @@ -53,7 +54,7 @@ public class ProdPageReqVO extends PageParam { /** * 标签 */ - private String tag; + public List tag; @Schema(description = "商品编号") private String prodNumber; @@ -64,6 +65,16 @@ public class ProdPageReqVO extends PageParam { @Schema(description = "商品轮播图片,以,分割") private String imgs; + /** + * 视频 + */ + private String video; + + /** + * 商品轮播图片,以,分割 + */ + private String whiteImg; + @Schema(description = "默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核", example = "2") private Integer status; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java index c319247..655c9c7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 商品 Response VO") @Data @@ -26,7 +27,8 @@ public class ProdRespVO { @Schema(description = "seo标题", example = "李四") @ExcelProperty("seo标题") - private String seoName; + private String seoShortName; + @Schema(description = "seo搜索") @ExcelProperty("seo搜索") @@ -64,6 +66,16 @@ public class ProdRespVO { @ExcelProperty("商品轮播图片,以,分割") private String imgs; + /** + * 视频 + */ + private String video; + + /** + * 商品轮播图片,以,分割 + */ + private String whiteImg; + @Schema(description = "默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核", example = "2") @ExcelProperty("默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核") private Integer status; @@ -88,7 +100,7 @@ public class ProdRespVO { /** * 标签 */ - private String tag; + public List tag; @Schema(description = "分享话术") @ExcelProperty("分享话术") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java index 6a4458c..f5ae6cf 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java @@ -1,11 +1,13 @@ package com.tashow.cloud.product.vo.prod; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.tashow.cloud.product.dto.SkuDO; import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +//import com.tashow.cloud.productapi.general.StringListTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import lombok.Data; - +import org.apache.ibatis.type.TypeHandler; import java.util.List; @Schema(description = "管理后台 - 商品新增/修改 Request VO") @@ -23,7 +25,7 @@ public class ProdSaveReqVO { private String abbreviation; @Schema(description = "seo标题", example = "李四") - private String seoName; + private String seoShortName; @Schema(description = "seo搜索") private String seoSearch; @@ -42,6 +44,15 @@ public class ProdSaveReqVO { @Schema(description = "详细描述") private String content; + /** + * 视频 + */ + private String video; + + /** + * 白底图 + */ + private String whiteImg; @Schema(description = "商品编号") private String prodNumber; @@ -74,7 +85,7 @@ public class ProdSaveReqVO { /** * 标签 */ - private String tag; + public List tag; @Schema(description = "分享话术") private String shareContent; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java new file mode 100644 index 0000000..250a798 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java @@ -0,0 +1,62 @@ +package com.tashow.cloud.product.vo.sku; + +import com.tashow.cloud.product.dto.*; +import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; +import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasInfoVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "sku扩展服务配置 VO") +@Data +public class SkuExtendVO { + + @Schema(description = "表单名称") + private String skuFormName; + + @Schema(description = "遗体接运车辆配置0关1开") + private Integer transportCarSwitch; + @Schema(description = "遗体接运扩展服务配置") + public List transportCarList; + @Schema(description = "遗体接运服务物料") + public List transportCarMaterialList; + + @Schema(description = "遗体运输目的地配置0关1开") + private Integer trafficSwitch; + @Schema(description = "遗体运输目的地配置") + public List trafficList; + @Schema(description = "遗体运输目的地物料") + public List trafficMaterialList; + + @Schema(description = "遗体清洁配置0关1开") + private Integer cleanSwitch; + @Schema(description = "遗体清洁配置") + public List cleanList; + @Schema(description = "遗体清洁物料") + public List cleanMaterialList; + + @Schema(description = "追思告别配置0关1开") + private Integer reflectionSwitch; + @Schema(description = "追思告别配置") + public List reflectionList; + @Schema(description = "追思告别物料") + public List reflectionMaterialList; + + @Schema(description = "遗体火化配置0关1开") + private Integer cremationSwitch; + @Schema(description = "遗体火化配置") + public List cremationList; + @Schema(description = "遗体火化物料") + public List cremationMaterialList; + + @Schema(description = "骨灰处理配置0关1开") + private Integer ashProcessingSwitch; + @Schema(description = "骨灰处理配置") + public List ashProcessingList; + @Schema(description = "骨灰处理配送方式配置") + public List ashProcessingDeliverList; + @Schema(description = "骨灰处理物料") + public List ashProcessingMaterialList; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java index f4009cc..a50fdfa 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java @@ -94,5 +94,13 @@ public class SkuPageReqVO extends PageParam { @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; + /** + * 是否上下架0下架1上架 + */ + private Integer isShelf; + /** + * 是否默认规则0否1是 + */ + private Integer isSpecs; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java index a1db220..3917425 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java @@ -120,5 +120,13 @@ public class SkuRespVO { @Schema(description = "创建时间") @ExcelProperty("创建时间") private LocalDateTime createTime; + /** + * 是否上下架0下架1上架 + */ + private Integer isShelf; + /** + * 是否默认规则0否1是 + */ + private Integer isSpecs; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java new file mode 100644 index 0000000..2cfe580 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java @@ -0,0 +1,57 @@ +package com.tashow.cloud.product.vo.skuservicedetails; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 服务详情分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class SkuServiceDetailsPageReqVO extends PageParam { + + @Schema(description = "关联的扩展服务ID", example = "21602") + private Long serviceId; + + @Schema(description = "图片") + private String pic; + + @Schema(description = "名称", example = "张三") + private String name; + + @Schema(description = "价格", example = "16929") + private BigDecimal price; + + @Schema(description = "是否收费0:免费1收费") + private Boolean isCharge; + + @Schema(description = "是否默认值0否1是") + private Boolean isDefault; + + @Schema(description = "类型:0:配置信息1:交付方式", example = "2") + private Boolean type; + + @Schema(description = "描述") + private String describe; + + /** + * 地点 + */ + private String adress; + + /** + * 触发节点名称 + */ + private String trigger; + + /** + * 触发节点id + */ + private Long triggerId; +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java new file mode 100644 index 0000000..091e71a --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java @@ -0,0 +1,67 @@ +package com.tashow.cloud.product.vo.skuservicedetails; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 服务详情 Response VO") +@Data +@ExcelIgnoreUnannotated +public class SkuServiceDetailsRespVO { + + @Schema(description = "服务详情的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "17139") + @ExcelProperty("服务详情的唯一标识符") + private Long id; + + @Schema(description = "关联的扩展服务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21602") + @ExcelProperty("关联的扩展服务ID") + private Long serviceId; + + @Schema(description = "图片") + @ExcelProperty("图片") + private String pic; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @ExcelProperty("名称") + private String name; + + @Schema(description = "价格", example = "16929") + @ExcelProperty("价格") + private BigDecimal price; + + @Schema(description = "是否收费0:免费1收费") + @ExcelProperty("是否收费0:免费1收费") + private Boolean isCharge; + + @Schema(description = "是否默认值0否1是") + @ExcelProperty("是否默认值0否1是") + private Boolean isDefault; + + @Schema(description = "类型:0:配置信息1:交付方式", example = "2") + @ExcelProperty("类型:0:配置信息1:交付方式") + private Boolean type; + + @Schema(description = "描述") + @ExcelProperty("描述") + private String describe; + + /** + * 地点 + */ + private String adress; + + /** + * 触发节点名称 + */ + private String trigger; + + /** + * 触发节点id + */ + private Long triggerId; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java new file mode 100644 index 0000000..c73b048 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java @@ -0,0 +1,58 @@ +package com.tashow.cloud.product.vo.skuservicedetails; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 服务详情新增/修改 Request VO") +@Data +public class SkuServiceDetailsSaveReqVO { + + @Schema(description = "服务详情的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED, example = "17139") + private Long id; + + @Schema(description = "关联的扩展服务ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21602") + @NotNull(message = "关联的扩展服务ID不能为空") + private Long serviceId; + + @Schema(description = "图片") + private String pic; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotEmpty(message = "名称不能为空") + private String name; + + @Schema(description = "价格", example = "16929") + private BigDecimal price; + + @Schema(description = "是否收费0:免费1收费") + private Boolean isCharge; + + @Schema(description = "是否默认值0否1是") + private Boolean isDefault; + + @Schema(description = "类型:0:配置信息1:交付方式", example = "2") + private Boolean type; + + @Schema(description = "描述") + private String describe; + /** + * 地点 + */ + private String adress; + + /** + * 触发节点名称 + */ + private String trigger; + + /** + * 触发节点id + */ + private Long triggerId; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDetailsMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDetailsMapper.xml new file mode 100644 index 0000000..56dfd4a --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDetailsMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file From bd9c07313f22d71620054ad14b95d905e64e2554 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Sat, 2 Aug 2025 10:43:25 +0800 Subject: [PATCH 14/22] =?UTF-8?q?=E5=88=9B=E5=BB=BAsku=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../productapi/enums/ServiceTypeEnum.java | 45 ++++++++++ .../product/controller/SkuController.java | 16 ++-- .../com/tashow/cloud/product/dto/SkuDO.java | 4 + .../product/dto/SkuServiceDeliverDO.java | 9 -- .../product/dto/SkuServiceDetailsDO.java | 13 ++- .../product/dto/SkuServiceMaterialDO.java | 10 +-- .../product/dto/SkuServiceTransportDO.java | 8 -- .../cloud/product/dto/SkuServicesFormDO.java | 14 +-- .../product/service/impl/SkuServiceImpl.java | 90 +++++++++++++------ .../cloud/product/vo/sku/SkuExtendVO.java | 11 +++ .../cloud/product/vo/sku/SkuSaveReqVO.java | 5 +- .../SkuServiceDeliverPageReqVO.java | 6 -- .../SkuServiceDeliverRespVO.java | 8 -- .../SkuServiceDeliverSaveReqVO.java | 6 -- .../SkuServiceDetailsPageReqVO.java | 13 ++- .../SkuServiceDetailsRespVO.java | 12 ++- .../SkuServiceDetailsSaveReqVO.java | 13 ++- .../SkuServiceMaterialPageReqVO.java | 7 +- .../SkuServiceMaterialRespVO.java | 9 +- .../SkuServiceMaterialSaveReqVO.java | 8 +- .../SkuServicesFormPageReqVO.java | 9 -- .../SkuServicesFormRespVO.java | 11 --- .../SkuServicesFormSaveReqVO.java | 9 -- .../SkuServiceTransportPageReqVO.java | 5 -- .../SkuServiceTransportRespVO.java | 7 -- .../SkuServiceTransportSaveReqVO.java | 5 -- 26 files changed, 176 insertions(+), 177 deletions(-) create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ServiceTypeEnum.java diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ServiceTypeEnum.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ServiceTypeEnum.java new file mode 100644 index 0000000..bb33549 --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/enums/ServiceTypeEnum.java @@ -0,0 +1,45 @@ +package com.tashow.cloud.productapi.enums; + +public enum ServiceTypeEnum { + TRANSPORT_CAR_CONFIG(1, "接运车辆配置"), + TRANSPORT_CAR_MATERIAL(2, "接运车辆服务物料"), + BODY_TRANSPORT_CONFIG(3, "遗体运输目的地配置"), + BODY_TRANSPORT_MATERIAL(4, "遗体运输目的地物料"), + BODY_CLEAN_CONFIG(5, "遗体清洁配置"), + BODY_CLEAN_MATERIAL(6, "遗体清洁物料"), + MEMORIAL_CONFIG(7, "追思告别配置"), + MEMORIAL_MATERIAL(8, "追思告别物料"), + CREMATION_CONFIG(9, "遗体火化配置"), + CREMATION_MATERIAL(10, "遗体火化物料"), + ASH_PROCESSING_CONFIG(11, "骨灰处理配置"), + ASH_PROCESSING_DELIVERY(12, "骨灰处理配送方式"), + ASH_PROCESSING_MATERIAL(13, "骨灰处理物料"), + BONE_ASH_CONFIG(14, "骨灰装殓配置"), + SOUVENIR_CONFIG(15, "纪念品配置"), + SOUVENIR_DELIVERY(16, "纪念品配送方式"); + + private final int code; + private final String description; + + ServiceTypeEnum(int code, String description) { + this.code = code; + this.description = description; + } + + public int getCode() { + return code; + } + + public String getDescription() { + return description; + } + + public static ServiceTypeEnum getByCode(int code) { + for (ServiceTypeEnum type : ServiceTypeEnum.values()) { + if (type.getCode() == code) { + return type; + } + } + return null; + } +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java index b6a9bff..acfc332 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java @@ -42,12 +42,12 @@ public class SkuController { @Resource private SkuService skuService; - @PostMapping("/create") +/* @PostMapping("/create") @Operation(summary = "创建单品SKU") @PreAuthorize("@ss.hasPermission('tz:sku:create')") public CommonResult createSku(@Valid @RequestBody SkuSaveReqVO createReqVO) { return success(skuService.createSku(createReqVO)); - } + }*/ @PostMapping("/createSkuExtend") @Operation(summary = "创建sku扩展服务配置") @@ -59,7 +59,6 @@ public class SkuController { @PutMapping("/update") @Operation(summary = "更新单品SKU") - @PreAuthorize("@ss.hasPermission('tz:sku:update')") public CommonResult updateSku(@Valid @RequestBody SkuSaveReqVO updateReqVO) { skuService.updateSku(updateReqVO); return success(true); @@ -68,7 +67,6 @@ public class SkuController { @DeleteMapping("/delete") @Operation(summary = "删除单品SKU") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('tz:sku:delete')") public CommonResult deleteSku(@RequestParam("id") Long id) { skuService.deleteSku(id); return success(true); @@ -77,20 +75,18 @@ public class SkuController { @GetMapping("/get") @Operation(summary = "获得单品SKU") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('tz:sku:query')") public CommonResult getSku(@RequestParam("id") Long id) { SkuDO sku = skuService.getSku(id); return success(BeanUtils.toBean(sku, SkuRespVO.class)); } - @GetMapping("/page") + /* @GetMapping("/page") @Operation(summary = "获得单品SKU分页") - @PreAuthorize("@ss.hasPermission('tz:sku:query')") public CommonResult> getSkuPage(@Valid SkuPageReqVO pageReqVO) { PageResult pageResult = skuService.getSkuPage(pageReqVO); return success(BeanUtils.toBean(pageResult, SkuRespVO.class)); - } - + }*/ +/* @GetMapping("/export-excel") @Operation(summary = "导出单品SKU Excel") @PreAuthorize("@ss.hasPermission('tz:sku:export')") @@ -102,6 +98,6 @@ public class SkuController { // 导出 Excel ExcelUtils.write(response, "单品SKU.xls", "数据", SkuRespVO.class, BeanUtils.toBean(list, SkuRespVO.class)); - } + }*/ } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java index 5d0f360..2a35b0f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java @@ -138,5 +138,9 @@ public class SkuDO extends BaseDO { */ private Integer isSpecs; + /** + * 扩展服务表单id + */ + private Long formId; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java index 11152c2..9fc4253 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java @@ -64,13 +64,4 @@ public class SkuServiceDeliverDO extends BaseDO { * 电话号码 */ private String tel; - /** - * 创建时间 - */ - private LocalDateTime createdAt; - /** - * 最后更新时间 - */ - private LocalDateTime updatedAt; - } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java index 6146268..4a67cc4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java @@ -65,17 +65,22 @@ public class SkuServiceDetailsDO extends BaseDO { /** * 触发节点名称 */ - private String trigger; + private String triggerName; /** - * 触发节点id + * 触发节点id(或关联节点) */ private Long triggerId; + + /** + * 是否并行0串行1并行 + */ + private Integer isParallel; + /** * 描述 */ - private String describe; - + private String describeContent; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java index 45d94ea..d41d9a3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java @@ -38,14 +38,6 @@ public class SkuServiceMaterialDO extends BaseDO { /** * 描述 */ - private String describe; - /** - * 创建时间 - */ - private LocalDateTime createdAt; - /** - * 最后更新时间 - */ - private LocalDateTime updatedAt; + private String describeContent; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java index 83dd492..c894f64 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java @@ -55,13 +55,5 @@ public class SkuServiceTransportDO extends BaseDO { * 电话号码 */ private String tel; - /** - * 创建时间 - */ - private LocalDateTime createdAt; - /** - * 最后更新时间 - */ - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java index 9f56d6d..68e4154 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java @@ -31,10 +31,7 @@ public class SkuServicesFormDO extends BaseDO { * 表单名称 */ private String name; - /** - * 关联的商品SKU ID - */ - private Long skuId; + /** * 服务名称 */ @@ -49,13 +46,4 @@ public class SkuServicesFormDO extends BaseDO { */ private Integer type; - /** - * 创建时间 - */ - private LocalDateTime createdAt; - /** - * 最后更新时间 - */ - private LocalDateTime updatedAt; - } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index c093bef..9772121 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -8,6 +8,7 @@ import com.tashow.cloud.product.vo.sku.SkuPageReqVO; import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; +import com.tashow.cloud.productapi.enums.ServiceTypeEnum; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -58,9 +59,9 @@ public class SkuServiceImpl implements SkuService { //接运车辆配置 if(Objects.equals(skuExtendVO.getTransportCarSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); - skuServicesFormDO.setServiceName("接运车辆配置"); + skuServicesFormDO.setServiceName(ServiceTypeEnum.TRANSPORT_CAR_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesFormDO.setType(1); + skuServicesFormDO.setType(ServiceTypeEnum.TRANSPORT_CAR_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); for(SkuServiceDetailsDO skuServiceDetailsDO:skuExtendVO.getTransportCarList()){ @@ -68,9 +69,9 @@ public class SkuServiceImpl implements SkuService { skuServiceDetailsMapper.insert(skuServiceDetailsDO); } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); - skuServicesForm.setServiceName("接运车辆服务物料"); + skuServicesForm.setServiceName(ServiceTypeEnum.TRANSPORT_CAR_MATERIAL.getDescription()); skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesForm.setType(2); + skuServicesForm.setType(ServiceTypeEnum.TRANSPORT_CAR_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getTransportCarMaterialList()){ @@ -81,9 +82,9 @@ public class SkuServiceImpl implements SkuService { //遗体运输目的地配置 if(Objects.equals(skuExtendVO.getTrafficSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); - skuServicesFormDO.setServiceName("遗体运输目的地配置"); + skuServicesFormDO.setServiceName(ServiceTypeEnum.BODY_TRANSPORT_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesFormDO.setType(3); + skuServicesFormDO.setType(ServiceTypeEnum.BODY_TRANSPORT_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); for(SkuServiceTransportDO skuServiceTransportDO:skuExtendVO.getTrafficList()){ @@ -91,9 +92,9 @@ public class SkuServiceImpl implements SkuService { skuServiceTransportMapper.insert(skuServiceTransportDO); } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); - skuServicesForm.setServiceName("遗体运输目的地物料"); + skuServicesForm.setServiceName(ServiceTypeEnum.BODY_TRANSPORT_MATERIAL.getDescription()); skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesForm.setType(4); + skuServicesForm.setType(ServiceTypeEnum.BODY_TRANSPORT_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getTrafficMaterialList()){ @@ -104,9 +105,9 @@ public class SkuServiceImpl implements SkuService { //遗体清洁配置 if(Objects.equals(skuExtendVO.getCleanSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); - skuServicesFormDO.setServiceName("遗体清洁配置"); + skuServicesFormDO.setServiceName(ServiceTypeEnum.BODY_CLEAN_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesFormDO.setType(5); + skuServicesFormDO.setType(ServiceTypeEnum.BODY_CLEAN_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getCleanList()){ @@ -114,9 +115,9 @@ public class SkuServiceImpl implements SkuService { skuServiceDetailsMapper.insert(skuServiceDetails); } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); - skuServicesForm.setServiceName("遗体清洁物料"); + skuServicesForm.setServiceName(ServiceTypeEnum.BODY_CLEAN_MATERIAL.getDescription()); skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesForm.setType(6); + skuServicesForm.setType(ServiceTypeEnum.BODY_CLEAN_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getCleanMaterialList()){ @@ -127,9 +128,9 @@ public class SkuServiceImpl implements SkuService { //追思告别配置 if(Objects.equals(skuExtendVO.getReflectionSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); - skuServicesFormDO.setServiceName("追思告别配置"); + skuServicesFormDO.setServiceName(ServiceTypeEnum.MEMORIAL_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesFormDO.setType(7); + skuServicesFormDO.setType(ServiceTypeEnum.MEMORIAL_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getReflectionList()){ @@ -137,9 +138,9 @@ public class SkuServiceImpl implements SkuService { skuServiceDetailsMapper.insert(skuServiceDetails); } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); - skuServicesForm.setServiceName("追思告别物料"); + skuServicesForm.setServiceName(ServiceTypeEnum.MEMORIAL_MATERIAL.getDescription()); skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesForm.setType(8); + skuServicesForm.setType(ServiceTypeEnum.MEMORIAL_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getReflectionMaterialList()){ @@ -151,9 +152,9 @@ public class SkuServiceImpl implements SkuService { //遗体火化配置 if(Objects.equals(skuExtendVO.getCremationSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); - skuServicesFormDO.setServiceName("遗体火化配置"); + skuServicesFormDO.setServiceName(ServiceTypeEnum.CREMATION_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesFormDO.setType(9); + skuServicesFormDO.setType(ServiceTypeEnum.CREMATION_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getCremationList()){ @@ -161,9 +162,9 @@ public class SkuServiceImpl implements SkuService { skuServiceDetailsMapper.insert(skuServiceDetails); } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); - skuServicesForm.setServiceName("遗体火化物料"); + skuServicesForm.setServiceName(ServiceTypeEnum.CREMATION_MATERIAL.getDescription()); skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesForm.setType(10); + skuServicesForm.setType(ServiceTypeEnum.CREMATION_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getCremationMaterialList()){ @@ -175,9 +176,9 @@ public class SkuServiceImpl implements SkuService { //骨灰处理配置 if(Objects.equals(skuExtendVO.getAshProcessingSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); - skuServicesFormDO.setServiceName("骨灰处理配置"); + skuServicesFormDO.setServiceName(ServiceTypeEnum.ASH_PROCESSING_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesFormDO.setType(9); + skuServicesFormDO.setType(ServiceTypeEnum.ASH_PROCESSING_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getAshProcessingList()){ @@ -185,9 +186,9 @@ public class SkuServiceImpl implements SkuService { skuServiceDetailsMapper.insert(skuServiceDetails); } SkuServicesFormDO skuForm = new SkuServicesFormDO(); - skuForm.setServiceName("骨灰处理配送方式"); + skuForm.setServiceName(ServiceTypeEnum.ASH_PROCESSING_DELIVERY.getDescription()); skuForm.setIsEnabled(BaseEnum.YES.getKey()); - skuForm.setType(10); + skuForm.setType(ServiceTypeEnum.ASH_PROCESSING_DELIVERY.getCode()); skuForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuForm); for(SkuServiceDeliverDO skuServiceDeliverDO:skuExtendVO.getAshProcessingDeliverList()){ @@ -195,9 +196,9 @@ public class SkuServiceImpl implements SkuService { skuServiceDeliverMapper.insert(skuServiceDeliverDO); } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); - skuServicesForm.setServiceName("骨灰处理物料"); + skuServicesForm.setServiceName(ServiceTypeEnum.ASH_PROCESSING_MATERIAL.getDescription()); skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); - skuServicesForm.setType(10); + skuServicesForm.setType(ServiceTypeEnum.ASH_PROCESSING_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getAshProcessingMaterialList()){ @@ -206,8 +207,43 @@ public class SkuServiceImpl implements SkuService { } } + //骨灰装殓配置 + if(Objects.equals(skuExtendVO.getBoneashSwitch(),BaseEnum.YES_ONE.getKey())){ + SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); + skuServicesFormDO.setServiceName(ServiceTypeEnum.BONE_ASH_CONFIG.getDescription()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setType(ServiceTypeEnum.BONE_ASH_CONFIG.getCode()); + skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesFormDO); + for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getBoneashList()){ + skuServiceDetails.setServiceId(skuServicesFormDO.getId()); + skuServiceDetailsMapper.insert(skuServiceDetails); + } + } - + //纪念品配置 + if(Objects.equals(skuExtendVO.getSouvenirSwitch(),BaseEnum.YES_ONE.getKey())){ + SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); + skuServicesFormDO.setServiceName(ServiceTypeEnum.SOUVENIR_CONFIG.getDescription()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setType(ServiceTypeEnum.SOUVENIR_CONFIG.getCode()); + skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuServicesFormDO); + for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getSouvenirList()){ + skuServiceDetails.setServiceId(skuServicesFormDO.getId()); + skuServiceDetailsMapper.insert(skuServiceDetails); + } + SkuServicesFormDO skuForm = new SkuServicesFormDO(); + skuForm.setServiceName(ServiceTypeEnum.SOUVENIR_DELIVERY.getDescription()); + skuForm.setIsEnabled(BaseEnum.YES.getKey()); + skuForm.setType(ServiceTypeEnum.SOUVENIR_DELIVERY.getCode()); + skuForm.setName(skuExtendVO.getSkuFormName()); + skuServicesFormMapper.insert(skuForm); + for(SkuServiceDeliverDO skuServiceDeliverDO:skuExtendVO.getSouvenirDeliverList()){ + skuServiceDeliverDO.setServiceId(skuForm.getId()); + skuServiceDeliverMapper.insert(skuServiceDeliverDO); + } + } } @Override diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java index 250a798..3d54616 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java @@ -59,4 +59,15 @@ public class SkuExtendVO { @Schema(description = "骨灰处理物料") public List ashProcessingMaterialList; + @Schema(description = "骨灰装殓配置0关1开") + private Integer boneashSwitch; + @Schema(description = "骨灰装殓配置") + public List boneashList; + + @Schema(description = "纪念品配置0关1开") + private Integer souvenirSwitch; + @Schema(description = "纪念品配置") + public List souvenirList; + @Schema(description = "纪念品配送方式配置") + public List souvenirDeliverList; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java index 387b10d..61f3186 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java @@ -89,5 +89,8 @@ public class SkuSaveReqVO { @Schema(description = "最小购买数量") private Integer moq; - + /** + * 扩展服务表单id + */ + private Long formId; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java index 96a8451..0468fb4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java @@ -43,10 +43,4 @@ public class SkuServiceDeliverPageReqVO extends PageParam { @Schema(description = "电话号码") private String tel; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - private LocalDateTime updatedAt; - } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java index 2a16d98..1b47003 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java @@ -53,12 +53,4 @@ public class SkuServiceDeliverRespVO { @ExcelProperty("电话号码") private String tel; - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - @ExcelProperty("最后更新时间") - private LocalDateTime updatedAt; - } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java index 39f8101..51439f5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java @@ -45,10 +45,4 @@ public class SkuServiceDeliverSaveReqVO { @NotEmpty(message = "电话号码不能为空") private String tel; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - private LocalDateTime updatedAt; - } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java index 2cfe580..6a43e34 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java @@ -38,7 +38,7 @@ public class SkuServiceDetailsPageReqVO extends PageParam { private Boolean type; @Schema(description = "描述") - private String describe; + private String describeContent; /** * 地点 @@ -48,10 +48,17 @@ public class SkuServiceDetailsPageReqVO extends PageParam { /** * 触发节点名称 */ - private String trigger; + private String triggerName; + /** - * 触发节点id + * 触发节点id(或关联节点) */ private Long triggerId; + + + /** + * 是否并行0串行1并行 + */ + private Integer isParallel; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java index 091e71a..788df13 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java @@ -47,7 +47,7 @@ public class SkuServiceDetailsRespVO { @Schema(description = "描述") @ExcelProperty("描述") - private String describe; + private String describeContent; /** * 地点 @@ -57,11 +57,17 @@ public class SkuServiceDetailsRespVO { /** * 触发节点名称 */ - private String trigger; + private String triggerName; + /** - * 触发节点id + * 触发节点id(或关联节点) */ private Long triggerId; + + /** + * 是否并行0串行1并行 + */ + private Integer isParallel; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java index c73b048..d0d39d0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java @@ -39,7 +39,7 @@ public class SkuServiceDetailsSaveReqVO { private Boolean type; @Schema(description = "描述") - private String describe; + private String describeContent; /** * 地点 */ @@ -48,11 +48,18 @@ public class SkuServiceDetailsSaveReqVO { /** * 触发节点名称 */ - private String trigger; + private String triggerName; + /** - * 触发节点id + * 触发节点id(或关联节点) */ private Long triggerId; + + /** + * 是否并行0串行1并行 + */ + private Integer isParallel; + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java index f9ab5d2..28fda2a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java @@ -22,12 +22,7 @@ public class SkuServiceMaterialPageReqVO extends PageParam { private String name; @Schema(description = "描述") - private String describe; + private String describeContent; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java index 686d682..d0d521e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java @@ -26,14 +26,7 @@ public class SkuServiceMaterialRespVO { @Schema(description = "描述") @ExcelProperty("描述") - private String describe; + private String describeContent; - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - @ExcelProperty("最后更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java index e359a44..48baae7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java @@ -23,12 +23,6 @@ public class SkuServiceMaterialSaveReqVO { private String name; @Schema(description = "描述") - private String describe; - - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - private LocalDateTime updatedAt; + private String describeContent; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java index 5c74dd1..37cc8e7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java @@ -18,19 +18,10 @@ public class SkuServicesFormPageReqVO extends PageParam { @Schema(description = "表单名称", example = "赵六") private String name; - @Schema(description = "关联的商品SKU ID", example = "20020") - private Long skuId; - @Schema(description = "服务名称", example = "芋艿") private String serviceName; @Schema(description = "是否启用该服务") private Boolean isEnabled; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - private LocalDateTime updatedAt; - } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java index 4eaf73b..72e2d88 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java @@ -20,10 +20,6 @@ public class SkuServicesFormRespVO { @ExcelProperty("表单名称") private String name; - @Schema(description = "关联的商品SKU ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20020") - @ExcelProperty("关联的商品SKU ID") - private Long skuId; - @Schema(description = "服务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") @ExcelProperty("服务名称") private String serviceName; @@ -32,12 +28,5 @@ public class SkuServicesFormRespVO { @ExcelProperty("是否启用该服务") private Boolean isEnabled; - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - @ExcelProperty("最后更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java index 54217f3..0a4aacc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java @@ -18,9 +18,6 @@ public class SkuServicesFormSaveReqVO { @NotEmpty(message = "表单名称不能为空") private String name; - @Schema(description = "关联的商品SKU ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20020") - @NotNull(message = "关联的商品SKU ID不能为空") - private Long skuId; @Schema(description = "服务名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") @NotEmpty(message = "服务名称不能为空") @@ -30,10 +27,4 @@ public class SkuServicesFormSaveReqVO { @NotNull(message = "是否启用该服务不能为空") private Boolean isEnabled; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - private LocalDateTime updatedAt; - } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java index bad96b1..e8aefab 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java @@ -36,10 +36,5 @@ public class SkuServiceTransportPageReqVO extends PageParam { @Schema(description = "电话号码") private String tel; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java index 62bd713..2cf0458 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java @@ -44,12 +44,5 @@ public class SkuServiceTransportRespVO { @ExcelProperty("电话号码") private String tel; - @Schema(description = "创建时间") - @ExcelProperty("创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - @ExcelProperty("最后更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java index 31ae035..bdce9d8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java @@ -39,10 +39,5 @@ public class SkuServiceTransportSaveReqVO { @NotEmpty(message = "电话号码不能为空") private String tel; - @Schema(description = "创建时间") - private LocalDateTime createdAt; - - @Schema(description = "最后更新时间") - private LocalDateTime updatedAt; } \ No newline at end of file From 038a09f286692ffa9a61e85e9306a1f2fcbb7298 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Sat, 2 Aug 2025 17:00:48 +0800 Subject: [PATCH 15/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96sku=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/controller/SkuController.java | 38 ++++-- .../cloud/product/dto/SkuServicesFormDO.java | 5 + .../product/mapper/SkuServicesFormMapper.java | 4 +- .../cloud/product/service/SkuService.java | 8 ++ .../product/service/impl/SkuServiceImpl.java | 111 ++++++++++++++++++ .../product/vo/sku/SkuServiceExtendVO.java | 41 +++++++ .../mapper/product/SkuServicesFormMapper.xml | 68 +++++++++++ 7 files changed, 266 insertions(+), 9 deletions(-) create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuServiceExtendVO.java diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java index acfc332..f444df8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java @@ -1,6 +1,7 @@ package com.tashow.cloud.product.controller; import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.dto.SkuServiceDetailsDO; import com.tashow.cloud.product.service.SkuService; import com.tashow.cloud.product.vo.prod.ProdServiceVO; import com.tashow.cloud.product.vo.sku.SkuExtendVO; @@ -49,14 +50,6 @@ public class SkuController { return success(skuService.createSku(createReqVO)); }*/ - @PostMapping("/createSkuExtend") - @Operation(summary = "创建sku扩展服务配置") - @PermitAll - public CommonResult createSkuExtend(@Valid @RequestBody SkuExtendVO skuExtendVO) { - skuService.createSkuExtend(skuExtendVO); - return success(true); - } - @PutMapping("/update") @Operation(summary = "更新单品SKU") public CommonResult updateSku(@Valid @RequestBody SkuSaveReqVO updateReqVO) { @@ -80,6 +73,35 @@ public class SkuController { return success(BeanUtils.toBean(sku, SkuRespVO.class)); } + + + @PostMapping("/createSkuExtend") + @Operation(summary = "创建sku扩展服务配置") + @PermitAll + public CommonResult createSkuExtend(@Valid @RequestBody SkuExtendVO skuExtendVO) { + skuService.createSkuExtend(skuExtendVO); + return success(true); + } + + + @PostMapping("/getSkuExtend") + @Operation(summary = "获取sku扩展服务配置信息") + @Parameter(name = "formId", description = "表单id", required = true, example = "1") + @PermitAll + public CommonResult getSkuExtend(@RequestParam("formId") Integer formId) { + SkuExtendVO skuExtendVO =skuService.getSkuExtend(formId); + return success(skuExtendVO); + } + + /* @PostMapping("/updateTransportCar") + @Operation(summary = "修改遗体接运车辆配置") + @PermitAll + public CommonResult createSkuExtend(@RequestBody List transportCarList) { + skuService.createSkuExtend(skuExtendVO); + return success(true); + } +*/ + /* @GetMapping("/page") @Operation(summary = "获得单品SKU分页") public CommonResult> getSkuPage(@Valid SkuPageReqVO pageReqVO) { diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java index 68e4154..adcb89e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java @@ -32,6 +32,11 @@ public class SkuServicesFormDO extends BaseDO { */ private String name; + /** + * 表单ID + */ + private Integer formId; + /** * 服务名称 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java index 8ab0e02..6213bd0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java @@ -5,7 +5,9 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.SkuDO; import com.tashow.cloud.product.dto.SkuServicesFormDO; +import com.tashow.cloud.product.vo.sku.SkuServiceExtendVO; import org.apache.ibatis.annotations.Mapper; /** @@ -16,5 +18,5 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SkuServicesFormMapper extends BaseMapperX { - + List selectSkuServiceExtendWithDetails(Integer formId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index c2c8b86..28770ee 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -32,6 +32,14 @@ public interface SkuService { */ void createSkuExtend(@Valid SkuExtendVO skuExtendVO); + /** + * 创建sku扩展服务配置 + * + * @param formId 更新信息 + */ + SkuExtendVO getSkuExtend(Integer formId); + + /** * 更新单品SKU * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index 9772121..a2ef06b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -6,9 +6,11 @@ import com.tashow.cloud.product.service.SkuService; import com.tashow.cloud.product.vo.sku.SkuExtendVO; import com.tashow.cloud.product.vo.sku.SkuPageReqVO; import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; +import com.tashow.cloud.product.vo.sku.SkuServiceExtendVO; import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import com.tashow.cloud.productapi.enums.ServiceTypeEnum; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -246,6 +248,115 @@ public class SkuServiceImpl implements SkuService { } } + @Override + public SkuExtendVO getSkuExtend(Integer formId) { + // 1. 查询所有与 formId 相关的扩展服务配置(已包含详情、物料等关联数据) + List skuServiceExtendVOList = skuServicesFormMapper.selectSkuServiceExtendWithDetails(formId); + + // 2. 创建返回对象 + SkuExtendVO skuExtendVO = new SkuExtendVO(); + // 可以设置 skuFormName,如果 formId 能关联到表单名称的话 + // skuExtendVO.setSkuFormName(...); + + // 3. 遍历查询结果,按类型分类赋值 + for (SkuServiceExtendVO skuServiceExtendVO : skuServiceExtendVOList) { + // 注意:数据库中 type 是 tinyint,但 VO 中定义为 String,需要转换或比较字符串 + // 枚举中 code 是 int,所以最好将 VO 的 type 转为 Integer 进行比较 + Integer typeCode; + try { + typeCode = Integer.valueOf(skuServiceExtendVO.getType()); + } catch (NumberFormatException e) { + // 如果 type 无法转为数字,跳过这条记录或记录日志 + continue; + } + + // 使用 switch 或 if-else 根据 typeCode 赋值 + if (ServiceTypeEnum.TRANSPORT_CAR_CONFIG.getCode() == typeCode) { + // 接运车辆配置 + skuExtendVO.setTransportCarSwitch(skuServiceExtendVO.getIsEnabled()); + skuExtendVO.setTransportCarList(skuServiceExtendVO.getSkuServiceDetailsDOList()); + + } else if (ServiceTypeEnum.TRANSPORT_CAR_MATERIAL.getCode() == typeCode) { + if (ObjectUtils.isEmpty(skuExtendVO.getTransportCarMaterialList())) { + skuExtendVO.setTransportCarMaterialList(skuServiceExtendVO.getSkuServiceMaterialDOList()); + } + } else if (ServiceTypeEnum.BODY_TRANSPORT_CONFIG.getCode() == typeCode) { + // 遗体运输目的地配置 + skuExtendVO.setTrafficSwitch(skuServiceExtendVO.getIsEnabled()); + skuExtendVO.setTrafficList(skuServiceExtendVO.getSkuServiceTransportDOList()); // 注意:这里用 TransportDO + + } else if (ServiceTypeEnum.BODY_TRANSPORT_MATERIAL.getCode() == typeCode) { + // 遗体运输目的地物料 + if (ObjectUtils.isEmpty(skuExtendVO.getTrafficMaterialList())) { + skuExtendVO.setTrafficMaterialList(skuServiceExtendVO.getSkuServiceMaterialDOList()); + } + + } else if (ServiceTypeEnum.BODY_CLEAN_CONFIG.getCode() == typeCode) { + // 遗体清洁配置 + skuExtendVO.setCleanSwitch(skuServiceExtendVO.getIsEnabled()); + skuExtendVO.setCleanList(skuServiceExtendVO.getSkuServiceDetailsDOList()); + + } else if (ServiceTypeEnum.BODY_CLEAN_MATERIAL.getCode() == typeCode) { + // 遗体清洁物料 + if (ObjectUtils.isEmpty(skuExtendVO.getCleanMaterialList())) { + skuExtendVO.setCleanMaterialList(skuServiceExtendVO.getSkuServiceMaterialDOList()); + } + } else if (ServiceTypeEnum.MEMORIAL_CONFIG.getCode() == typeCode) { + // 追思告别配置 + skuExtendVO.setReflectionSwitch(skuServiceExtendVO.getIsEnabled()); + skuExtendVO.setReflectionList(skuServiceExtendVO.getSkuServiceDetailsDOList()); + } else if (ServiceTypeEnum.MEMORIAL_MATERIAL.getCode() == typeCode) { + // 追思告别物料 + if (ObjectUtils.isEmpty(skuExtendVO.getReflectionMaterialList())) { + skuExtendVO.setReflectionMaterialList(skuServiceExtendVO.getSkuServiceMaterialDOList()); + } + } else if (ServiceTypeEnum.CREMATION_CONFIG.getCode() == typeCode) { + // 遗体火化配置 + skuExtendVO.setCremationSwitch(skuServiceExtendVO.getIsEnabled()); + skuExtendVO.setCremationList(skuServiceExtendVO.getSkuServiceDetailsDOList()); + } else if (ServiceTypeEnum.CREMATION_MATERIAL.getCode() == typeCode) { + // 遗体火化物料 + if (ObjectUtils.isEmpty(skuExtendVO.getCremationMaterialList())) { + skuExtendVO.setCremationMaterialList(skuServiceExtendVO.getSkuServiceMaterialDOList()); + } + + } else if (ServiceTypeEnum.ASH_PROCESSING_CONFIG.getCode() == typeCode) { + // 骨灰处理配置 + skuExtendVO.setAshProcessingSwitch(skuServiceExtendVO.getIsEnabled()); + skuExtendVO.setAshProcessingList(skuServiceExtendVO.getSkuServiceDetailsDOList()); + + } else if (ServiceTypeEnum.ASH_PROCESSING_DELIVERY.getCode() == typeCode) { + // 骨灰处理配送方式 (补充) + if (ObjectUtils.isEmpty(skuExtendVO.getAshProcessingDeliverList())) { + skuExtendVO.setAshProcessingDeliverList(skuServiceExtendVO.getSkuServiceDeliverDOList()); + } + } else if (ServiceTypeEnum.ASH_PROCESSING_MATERIAL.getCode() == typeCode) { + // 骨灰处理物料 + if (ObjectUtils.isEmpty(skuExtendVO.getAshProcessingMaterialList())) { + skuExtendVO.setAshProcessingMaterialList(skuServiceExtendVO.getSkuServiceMaterialDOList()); + } + } else if (ServiceTypeEnum.BONE_ASH_CONFIG.getCode() == typeCode) { + // 骨灰装殓配置 + skuExtendVO.setBoneashSwitch(skuServiceExtendVO.getIsEnabled()); + skuExtendVO.setBoneashList(skuServiceExtendVO.getSkuServiceDetailsDOList()); + // 注意:骨灰装殓是否有物料?根据你的 DO 列表,没有 material 字段 + + } else if (ServiceTypeEnum.SOUVENIR_CONFIG.getCode() == typeCode) { + // 纪念品配置 + skuExtendVO.setSouvenirSwitch(skuServiceExtendVO.getIsEnabled()); + skuExtendVO.setSouvenirList(skuServiceExtendVO.getSkuServiceDetailsDOList()); + } else if (ServiceTypeEnum.SOUVENIR_DELIVERY.getCode() == typeCode) { + // 纪念品配送方式 (补充) + if (ObjectUtils.isEmpty(skuExtendVO.getSouvenirDeliverList())) { + skuExtendVO.setSouvenirDeliverList(skuServiceExtendVO.getSkuServiceDeliverDOList()); + } + } + // 可以添加 default 处理未知类型 + } + + // 4. 返回组装好的对象 + return skuExtendVO; + } @Override public void updateSku(SkuSaveReqVO updateReqVO) { // 校验存在 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuServiceExtendVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuServiceExtendVO.java new file mode 100644 index 0000000..3ad2a8c --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuServiceExtendVO.java @@ -0,0 +1,41 @@ +package com.tashow.cloud.product.vo.sku; + +import com.tashow.cloud.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.product.dto.SkuServiceTransportDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "sku扩展服务表单 VO") +@Data +public class SkuServiceExtendVO { + + @Schema(description = "id") + private Long id; + + @Schema(description = "表单名称") + private String name; + + @Schema(description = "服务名称") + private String serviceName; + + @Schema(description = "类型0:遗体运输1:遗体运输物料") + private String type; + + @Schema(description = "服务名称") + private Integer isEnabled; + + @Schema(description = "服务详情") + public List skuServiceDetailsDOList; + @Schema(description = "服务物料") + public List skuServiceMaterialDOList; + + @Schema(description = "服务遗体运输") + public List skuServiceTransportDOList; + + @Schema(description = "服务交付方式") + public List skuServiceDeliverDOList; +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml index 0137281..a2ba040 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml @@ -9,4 +9,72 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 360c497c49b904a167b63b054f487e600be771fc Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Tue, 5 Aug 2025 15:38:12 +0800 Subject: [PATCH 16/22] =?UTF-8?q?=E8=A7=84=E5=88=99=E4=BF=AE=E6=94=B9=202?= =?UTF-8?q?=EF=BC=9Asku=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tashow-module/tashow-module-product/pom.xml | 2 - .../product/controller/SkuController.java | 124 +++++++++++++-- .../cloud/product/dto/ProdExtendDO.java | 42 +++++ .../tashow/cloud/product/dto/ProdPropDO.java | 25 ++- .../cloud/product/dto/ProdPropValueDO.java | 26 ++- .../com/tashow/cloud/product/dto/SkuDO.java | 23 ++- .../product/mapper/ProdExtendMapper.java | 22 +++ .../cloud/product/mapper/ProdPropMapper.java | 4 +- .../mapper/SkuServiceDeliverMapper.java | 2 +- .../mapper/SkuServiceDetailsMapper.java | 1 + .../mapper/SkuServiceMaterialMapper.java | 1 + .../mapper/SkuServiceTransportMapper.java | 1 + .../product/mapper/SkuServicesFormMapper.java | 1 + .../product/service/ProdExtendService.java | 22 +++ .../product/service/ProdPropService.java | 8 +- .../cloud/product/service/SkuService.java | 51 +++++- .../service/impl/ProdExtendServiceImpl.java | 23 +++ .../service/impl/ProdPropServiceImpl.java | 60 +++++-- .../product/service/impl/ProdServiceImpl.java | 11 +- .../product/service/impl/SkuServiceImpl.java | 148 +++++++++++++++--- .../cloud/product/vo/prod/ProdSaveReqVO.java | 2 +- .../vo/prodprop/ProdPropPageReqVO.java | 2 +- .../product/vo/prodprop/ProdPropRespVO.java | 2 +- .../vo/prodprop/ProdPropSaveReqVO.java | 7 +- .../prodpropvalue/ProdPropValuePageReqVO.java | 2 +- .../vo/prodpropvalue/ProdPropValueRespVO.java | 2 +- .../prodpropvalue/ProdPropValueSaveReqVO.java | 2 +- .../cloud/product/vo/sku/SkuPageReqVO.java | 17 +- .../cloud/product/vo/sku/SkuPropInfoVO.java | 28 ++++ .../cloud/product/vo/sku/SkuPropVO.java | 31 ++++ .../cloud/product/vo/sku/SkuRespVO.java | 16 +- .../cloud/product/vo/sku/SkuSaveReqVO.java | 16 +- .../src/main/resources/logback-spring.xml | 7 + .../mapper/product/ProdExtendMapper.xml | 18 +++ .../mapper/product/ProdPropMapper.xml | 2 +- .../product/SkuServiceDeliverMapper.xml | 4 +- .../product/SkuServiceDetailsMapper.xml | 4 +- .../product/SkuServiceMaterialMapper.xml | 4 +- .../product/SkuServiceTransportMapper.xml | 4 +- 39 files changed, 692 insertions(+), 75 deletions(-) create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdExtendDO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdExtendMapper.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdExtendService.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdExtendServiceImpl.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropInfoVO.java create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropVO.java create mode 100644 tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdExtendMapper.xml diff --git a/tashow-module/tashow-module-product/pom.xml b/tashow-module/tashow-module-product/pom.xml index e7f9af1..e825af5 100644 --- a/tashow-module/tashow-module-product/pom.xml +++ b/tashow-module/tashow-module-product/pom.xml @@ -41,8 +41,6 @@ swagger-models 2.2.20 - - com.tashow.cloud tashow-framework-monitor diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java index f444df8..6bce828 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java @@ -1,13 +1,19 @@ package com.tashow.cloud.product.controller; -import com.tashow.cloud.product.dto.SkuDO; -import com.tashow.cloud.product.dto.SkuServiceDetailsDO; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.tashow.cloud.product.dto.*; +import com.tashow.cloud.product.mapper.ProdExtendMapper; +import com.tashow.cloud.product.mapper.SkuMapper; +import com.tashow.cloud.product.service.ProdExtendService; +import com.tashow.cloud.product.service.ProdPropService; +import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.SkuService; import com.tashow.cloud.product.vo.prod.ProdServiceVO; -import com.tashow.cloud.product.vo.sku.SkuExtendVO; -import com.tashow.cloud.product.vo.sku.SkuPageReqVO; -import com.tashow.cloud.product.vo.sku.SkuRespVO; -import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; +import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO; +import com.tashow.cloud.product.vo.sku.*; +import com.tashow.cloud.productapi.enums.BaseEnum; +import com.tashow.cloud.productapi.enums.ProdPropRule; import jakarta.annotation.security.PermitAll; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; @@ -43,6 +49,17 @@ public class SkuController { @Resource private SkuService skuService; + @Resource + private ProdPropService prodPropService; + @Resource + private ProdPropValueService prodPropValueService; + + @Resource + private ProdExtendService prodExtendService; + + @Resource + private SkuMapper skuMapper; + /* @PostMapping("/create") @Operation(summary = "创建单品SKU") @PreAuthorize("@ss.hasPermission('tz:sku:create')") @@ -52,22 +69,82 @@ public class SkuController { @PutMapping("/update") @Operation(summary = "更新单品SKU") + @PermitAll public CommonResult updateSku(@Valid @RequestBody SkuSaveReqVO updateReqVO) { skuService.updateSku(updateReqVO); return success(true); } + + @PutMapping("/updateProp") + @Operation(summary = "更新sku规格") + @PermitAll + public CommonResult updateProp(@Valid @RequestBody SkuPropVO skuPropVO) { + skuService.updateProp(skuPropVO); + return success(true); + } + + @GetMapping("/getSKuPropList") + @Operation(summary = "获取sku规格") + @PermitAll + @Parameter(name = "prodId", description = "商品id", required = true) + public CommonResult getSKuPropList(@RequestParam("prodId") Long prodId) { + return success(skuService.getSKuPropList(prodId)); + } + + @DeleteMapping("/delete") @Operation(summary = "删除单品SKU") @Parameter(name = "id", description = "编号", required = true) + @PermitAll public CommonResult deleteSku(@RequestParam("id") Long id) { skuService.deleteSku(id); return success(true); } + @DeleteMapping("/deleteSkuList") + @Operation(summary = "批量删除SKU") + @Parameter(name = "ids", description = "编号", required = true) + @PermitAll + public CommonResult deleteSkuList(@RequestParam("id") List ids) { + skuMapper.deleteByIds(ids); + return success(true); + } + + + @DeleteMapping("/updateSkuShelf") + @Operation(summary = "修改单品上下架") + @Parameter(name = "ids", description = "编号", required = true) + @Parameter(name = "isShelf", description = "是否上下架(0下架 1上架)", required = true) + @PermitAll + public CommonResult updateSkuShelf(@RequestParam("id") Long id,@RequestParam("isShelf") Integer isShelf) { + SkuDO sku = new SkuDO(); + sku.setSkuId(id); + sku.setIsShelf(isShelf); + skuMapper.updateBatch(sku); + return success(true); + } + + @DeleteMapping("/updateSkuShelfList") + @Operation(summary = "批量上下架") + @Parameter(name = "ids", description = "编号", required = true) + @Parameter(name = "isShelf", description = "是否上下架(0下架 1上架)", required = true) + @PermitAll + public CommonResult updateSkuShelfList(@RequestParam("id") List ids,@RequestParam("isShelf") Integer isShelf) { + for(Long id:ids){ + SkuDO sku = new SkuDO(); + sku.setSkuId(id); + sku.setIsShelf(isShelf); + skuMapper.updateBatch(sku); + } + return success(true); + } + + @GetMapping("/get") @Operation(summary = "获得单品SKU") @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PermitAll public CommonResult getSku(@RequestParam("id") Long id) { SkuDO sku = skuService.getSku(id); return success(BeanUtils.toBean(sku, SkuRespVO.class)); @@ -93,14 +170,39 @@ public class SkuController { return success(skuExtendVO); } - /* @PostMapping("/updateTransportCar") - @Operation(summary = "修改遗体接运车辆配置") + + @PostMapping("/updateServiceDetails") + @Operation(summary = "修改扩展服务信息配置(遗体接运扩展服务,遗体清洁配置,追思告别配置,骨灰处理配置......)") @PermitAll - public CommonResult createSkuExtend(@RequestBody List transportCarList) { - skuService.createSkuExtend(skuExtendVO); + public CommonResult updateServiceDetails(@RequestBody List skuServiceDetailsList) { + skuService.updateServiceDetails(skuServiceDetailsList); return success(true); } -*/ + + @PostMapping("/updateMaterial") + @Operation(summary = "修物料配置") + @PermitAll + public CommonResult updateMaterial(@RequestBody List skuServiceMaterialList) { + skuService.updateMaterial(skuServiceMaterialList); + return success(true); + } + + @PostMapping("/updateTransportAdress") + @Operation(summary = "修改接运地址配置") + @PermitAll + public CommonResult updateTransportAdress(@RequestBody List skuServiceTransportDOList) { + skuService.updateTransportAdress(skuServiceTransportDOList); + return success(true); + } + + @PostMapping("/updateDeliver") + @Operation(summary = "修改配送方式") + @PermitAll + public CommonResult updateDeliver(@RequestBody List skuServiceDeliverList) { + skuService.updateDeliver(skuServiceDeliverList); + return success(true); + } + /* @GetMapping("/page") @Operation(summary = "获得单品SKU分页") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdExtendDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdExtendDO.java new file mode 100644 index 0000000..fe68815 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdExtendDO.java @@ -0,0 +1,42 @@ +package com.tashow.cloud.product.dto; + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * 属性规则 DO + * + * @author 芋道源码 + */ +@TableName("tz_prod_extend") +@KeySequence("tz_prod_extend_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ProdExtendDO { + + /** + * 属性值ID + */ + @TableId + private Long id; + /** + * 商品id + */ + private Long prodId; + /** + * 是否显示失效规格值 0否1是 + */ + private Integer isExpire; + + /** + * 是否显示禁用规格值 0否1是 + */ + private Integer isDisable; + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java index 658fe6f..856c7fa 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java @@ -19,10 +19,13 @@ import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; @AllArgsConstructor public class ProdPropDO{ + /** * 属性id */ @TableId + private Long id; + private Long propId; /** * 属性名称 @@ -39,11 +42,29 @@ public class ProdPropDO{ /** * 商品id */ - private Integer prodId; + private Long prodId; + + /** + * 排序 + */ + private Integer sort; + /** * 是否删除0否1是 */ - private Integer isDelete; + private Integer deleted; + /** + * isExist 是否新增 0否1是 + */ + @TableField(exist=false) + private Integer isExist; + + + /** + * 状态0禁用1启用 + */ + private Integer state; + /** * 属性值 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java index 37e363e..080c6f7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java @@ -20,9 +20,11 @@ import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; public class ProdPropValueDO { /** - * 属性值ID + * id */ @TableId + private Long id; + private Long valueId; /** * 属性值名称 @@ -35,6 +37,26 @@ public class ProdPropValueDO { /** * 是否删除0否1是 */ - private Integer isDelete; + private Integer deleted; + + /** + * 状态0禁用1启用 + */ + private Integer state; + + /** + * 是否失效0否1是 + */ + private Integer isExpire; + + /** + * 排序 + */ + private Integer sort; + /** + * isExist 是否新增 0否1是 + */ + @TableField(exist=false) + private Integer isExist; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java index 2a35b0f..a4dfb15 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java @@ -45,9 +45,13 @@ public class SkuDO extends BaseDO { */ private String alias; /** - * 价格 + * 当前价格 */ private BigDecimal price; + /** + * 基准价 + */ + private BigDecimal basePrice; /** * 最低价格 */ @@ -64,6 +68,15 @@ public class SkuDO extends BaseDO { * 市场价 */ private BigDecimal marketPrice; + + /** + * 服务内容 + */ + private String serviceContent; + /** + * 规格id 多个用逗号分隔(1,2,3) + */ + private String propIds; /** * 单位 */ @@ -143,4 +156,12 @@ public class SkuDO extends BaseDO { */ private Long formId; + + /** + * isExist 是否新增 0否1是 + */ + @TableField(exist=false) + private Integer isExist; + + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdExtendMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdExtendMapper.java new file mode 100644 index 0000000..90fe399 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdExtendMapper.java @@ -0,0 +1,22 @@ +package com.tashow.cloud.product.mapper; + +import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdExtendDO; +import com.tashow.cloud.product.dto.ProdPropValueDO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 属性规则 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface ProdExtendMapper extends BaseMapperX { + // 自定义更新方法(可选) + int updateByProdId(@Param("prodId") Long prodId, + @Param("isDisable") Integer isDisable, + @Param("isExpire") Integer isExpire); +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java index 48c0407..e066671 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java @@ -20,9 +20,9 @@ public interface ProdPropMapper extends BaseMapperX { /** * 根据店铺id和属性名称获取商品属性 * @param propName - * @param shopId + * @param prodId * @param rule * @return */ - ProdPropDO getProdPropByPropNameAndShopId(@Param("propName") String propName, @Param("shopId") Long shopId, @Param("rule") Integer rule); + ProdPropDO getProdPropByPropNameAndShopId(@Param("propName") String propName, @Param("prodId") Integer prodId, @Param("rule") Integer rule); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java index 59fce24..38a1ff1 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java @@ -16,5 +16,5 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SkuServiceDeliverMapper extends BaseMapperX { - + void deleteDelivers(Long serviceId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java index a8c5345..31e2c00 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java @@ -16,5 +16,6 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SkuServiceDetailsMapper extends BaseMapperX { + void deleteDetails(Long serviceId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java index ecba405..be96935 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java @@ -17,4 +17,5 @@ import org.apache.ibatis.annotations.Mapper; public interface SkuServiceMaterialMapper extends BaseMapperX { + void deleteMaterials(Long serviceId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java index 68e2181..4432bb7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java @@ -17,4 +17,5 @@ import org.apache.ibatis.annotations.Mapper; public interface SkuServiceTransportMapper extends BaseMapperX { + void deleteTransports(Long serviceId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java index 6213bd0..a12f272 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java @@ -19,4 +19,5 @@ import org.apache.ibatis.annotations.Mapper; public interface SkuServicesFormMapper extends BaseMapperX { List selectSkuServiceExtendWithDetails(Integer formId); + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdExtendService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdExtendService.java new file mode 100644 index 0000000..b10e7a8 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdExtendService.java @@ -0,0 +1,22 @@ +package com.tashow.cloud.product.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.product.dto.ProdExtendDO; +import com.tashow.cloud.product.dto.ProdPropDO; +import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; +import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import com.tashow.cloud.product.vo.sku.SkuPropVO; +import jakarta.validation.Valid; + +import java.util.List; + +/** + * 商品属性 Service 接口 + * + * @author 芋道源码 + */ +public interface ProdExtendService extends IService { + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java index 884836e..4078f7e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java @@ -4,8 +4,10 @@ import java.util.*; import com.baomidou.mybatisplus.extension.service.IService; import com.tashow.cloud.product.dto.ProdPropDO; +import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import com.tashow.cloud.product.vo.sku.SkuPropVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; @@ -25,7 +27,11 @@ public interface ProdPropService extends IService { */ Long createProdProp(@Valid ProdPropSaveReqVO createReqVO); - void saveProdPropAndValues(ProdPropSaveReqVO createReqVO); + void saveProdPropAndValues(ProdSaveReqVO createReqVO); + + + + void updateProdPropAndValues(SkuPropVO skuPropVO); /** * 更新商品属性 * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index 28770ee..7a28a9f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -2,13 +2,12 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.SkuDO; -import com.tashow.cloud.product.vo.sku.SkuExtendVO; -import com.tashow.cloud.product.vo.sku.SkuPageReqVO; -import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; +import com.tashow.cloud.product.dto.*; +import com.tashow.cloud.product.vo.sku.*; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.web.bind.annotation.RequestParam; /** * 单品SKU Service 接口 @@ -32,6 +31,9 @@ public interface SkuService { */ void createSkuExtend(@Valid SkuExtendVO skuExtendVO); + + + /** * 创建sku扩展服务配置 * @@ -47,6 +49,16 @@ public interface SkuService { */ void updateSku(@Valid SkuSaveReqVO updateReqVO); + /** + * 更新sku规格 + * + * @param skuPropVO 更新信息 + */ + void updateProp(SkuPropVO skuPropVO); + + + SkuPropInfoVO getSKuPropList(Long prodId); + /** * 删除单品SKU * @@ -70,4 +82,35 @@ public interface SkuService { */ PageResult getSkuPage(SkuPageReqVO pageReqVO); + + /** + * 创建sku扩展服务配置 + * + * @param skuServiceDetailsList 更新信息 + */ + void updateServiceDetails(List skuServiceDetailsList); + + + /** + * 修物料配置 + * + * @param skuServiceMaterialList 更新信息 + */ + void updateMaterial(List skuServiceMaterialList); + + + /** + * 修改接运地址配置 + * + * @param skuServiceTransportDOList 更新信息 + */ + void updateTransportAdress( List skuServiceTransportDOList); + + /** + * 修改配送方式 + * + * @param skuServiceDeliverList 更新信息 + */ + void updateDeliver(List skuServiceDeliverList); + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdExtendServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdExtendServiceImpl.java new file mode 100644 index 0000000..a780a46 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdExtendServiceImpl.java @@ -0,0 +1,23 @@ +package com.tashow.cloud.product.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tashow.cloud.product.dto.ProdExtendDO; +import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.product.mapper.ProdExtendMapper; +import com.tashow.cloud.product.mapper.ProdPropValueMapper; +import com.tashow.cloud.product.service.ProdExtendService; +import com.tashow.cloud.product.service.ProdPropValueService; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + + +/** + * 超区规则 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class ProdExtendServiceImpl extends ServiceImpl implements ProdExtendService { + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java index 3e8886a..5ca497c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java @@ -3,11 +3,15 @@ package com.tashow.cloud.product.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.tashow.cloud.product.dto.ProdPropDO; +import com.tashow.cloud.product.dto.ProdPropValueDO; import com.tashow.cloud.product.mapper.ProdPropMapper; import com.tashow.cloud.product.mapper.ProdPropValueMapper; import com.tashow.cloud.product.service.ProdPropService; +import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import com.tashow.cloud.product.vo.sku.SkuPropVO; +import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; @@ -47,20 +51,52 @@ public class ProdPropServiceImpl extends ServiceImpl @Override @Transactional(rollbackFor = Exception.class) - public void saveProdPropAndValues(ProdPropSaveReqVO createReqVO) { - if(createReqVO.getShopId()==null){ - createReqVO.setShopId(1L); + public void saveProdPropAndValues(ProdSaveReqVO createReqVOInfo) { + + for (ProdPropSaveReqVO createReqVO : createReqVOInfo.getProdPropSaveReqVO()){ + ProdPropDO dbProdProp = prodPropMapper.getProdPropByPropNameAndShopId(createReqVO.getPropName(), createReqVO.getProdId(), createReqVO.getRule()); + if (dbProdProp != null) { + throw new RuntimeException("已有相同名称规格"); + } + ProdPropDO prodProp = BeanUtils.toBean(createReqVO, ProdPropDO.class); + prodProp.setProdId(createReqVOInfo.getProdId()); + prodPropMapper.insert(prodProp); + if (CollUtil.isEmpty(createReqVO.getProdPropValues())) { + return; + } + for (ProdPropValueDO prodPropValueDO : createReqVO.getProdPropValues()){ + prodPropValueDO.setPropId(prodProp.getPropId()); + prodPropValueMapper.insert(prodPropValueDO); + } } - ProdPropDO dbProdProp = prodPropMapper.getProdPropByPropNameAndShopId(createReqVO.getPropName(), createReqVO.getShopId(), createReqVO.getRule()); - if (dbProdProp != null) { - throw new RuntimeException("已有相同名称规格"); + } + + @Override + @Transactional + public void updateProdPropAndValues(SkuPropVO skuPropVO) { + for (ProdPropSaveReqVO createReqVO : skuPropVO.getProdPropSaveReqVO()){ + ProdPropDO dbProdProp = prodPropMapper.getProdPropByPropNameAndShopId(createReqVO.getPropName(), createReqVO.getProdId(), createReqVO.getRule()); + if (dbProdProp != null) { + throw new RuntimeException("已有相同名称规格"); + } + ProdPropDO prodProp = BeanUtils.toBean(createReqVO, ProdPropDO.class); + if(Objects.equals(BaseEnum.YES_ONE.getKey(),createReqVO.getIsExist())){ + prodPropMapper.insert(prodProp); + }else { + prodPropMapper.updateById(prodProp); + } + if (CollUtil.isEmpty(createReqVO.getProdPropValues())) { + return; + } + for (ProdPropValueDO prodPropValueDO : createReqVO.getProdPropValues()){ + if(Objects.equals(BaseEnum.YES_ONE.getKey(),prodPropValueDO.getIsExist())){ + prodPropValueDO.setPropId(prodProp.getPropId()); + prodPropValueMapper.insert(prodPropValueDO); + }else { + prodPropValueMapper.updateById(prodPropValueDO); + } + } } - ProdPropDO prodProp = BeanUtils.toBean(createReqVO, ProdPropDO.class); - prodPropMapper.insert(prodProp); - if (CollUtil.isEmpty(createReqVO.getProdPropValues())) { - return; - } - prodPropValueMapper.insertPropValues(prodProp.getPropId(), createReqVO.getProdPropValues()); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index 2a3afd5..6bef46c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -62,6 +62,8 @@ public class ProdServiceImpl implements ProdService { private ProdAdditionalFeePeriodsMapper prodAdditionalFeePeriodsMapper; @Resource private ProdWeightRangePricesMapper prodWeightRangePricesMapper; + @Resource + private ProdExtendMapper prodExtendMapper; @Override @Transactional @@ -75,11 +77,16 @@ public class ProdServiceImpl implements ProdService { for(SkuDO sku : skuList){ sku.setProdId(prod.getProdId()); } - skuMapper.insert(skuList); + skuMapper.insertBatch(skuList); } createReqVO.setProdId(prod.getProdId()); //保存规格 - prodPropService.saveProdPropAndValues(createReqVO.getProdPropSaveReqVO()); + prodPropService.saveProdPropAndValues(createReqVO); + ProdExtendDO prodExtendDO = new ProdExtendDO(); + prodExtendDO.setIsExpire(BaseEnum.YES_ONE.getKey()); + prodExtendDO.setIsExpire(BaseEnum.YES_ONE.getKey()); + prodExtendDO.setProdId(prod.getProdId()); + prodExtendMapper.insert(prodExtendDO); // 返回 return prod.getProdId(); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index a2ef06b..878dd72 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -1,12 +1,15 @@ package com.tashow.cloud.product.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tashow.cloud.product.dto.*; import com.tashow.cloud.product.mapper.*; +import com.tashow.cloud.product.service.ProdExtendService; +import com.tashow.cloud.product.service.ProdPropService; +import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.SkuService; -import com.tashow.cloud.product.vo.sku.SkuExtendVO; -import com.tashow.cloud.product.vo.sku.SkuPageReqVO; -import com.tashow.cloud.product.vo.sku.SkuSaveReqVO; -import com.tashow.cloud.product.vo.sku.SkuServiceExtendVO; +import com.tashow.cloud.product.vo.sku.*; import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import com.tashow.cloud.productapi.enums.ServiceTypeEnum; @@ -45,6 +48,14 @@ public class SkuServiceImpl implements SkuService { private SkuServiceTransportMapper skuServiceTransportMapper; @Resource private SkuServiceDeliverMapper skuServiceDeliverMapper; + @Resource + private ProdPropService prodPropService; + @Resource + private ProdExtendMapper prodExtendMapper; + @Resource + private ProdPropValueService prodPropValueService; + @Resource + private ProdExtendService prodExtendService; @Override public Long createSku(SkuSaveReqVO createReqVO) { @@ -62,7 +73,7 @@ public class SkuServiceImpl implements SkuService { if(Objects.equals(skuExtendVO.getTransportCarSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.TRANSPORT_CAR_CONFIG.getDescription()); - skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.TRANSPORT_CAR_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); @@ -72,7 +83,7 @@ public class SkuServiceImpl implements SkuService { } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); skuServicesForm.setServiceName(ServiceTypeEnum.TRANSPORT_CAR_MATERIAL.getDescription()); - skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesForm.setType(ServiceTypeEnum.TRANSPORT_CAR_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); @@ -85,7 +96,7 @@ public class SkuServiceImpl implements SkuService { if(Objects.equals(skuExtendVO.getTrafficSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.BODY_TRANSPORT_CONFIG.getDescription()); - skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.BODY_TRANSPORT_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); @@ -95,7 +106,7 @@ public class SkuServiceImpl implements SkuService { } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); skuServicesForm.setServiceName(ServiceTypeEnum.BODY_TRANSPORT_MATERIAL.getDescription()); - skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesForm.setType(ServiceTypeEnum.BODY_TRANSPORT_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); @@ -108,7 +119,7 @@ public class SkuServiceImpl implements SkuService { if(Objects.equals(skuExtendVO.getCleanSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.BODY_CLEAN_CONFIG.getDescription()); - skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.BODY_CLEAN_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); @@ -118,7 +129,7 @@ public class SkuServiceImpl implements SkuService { } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); skuServicesForm.setServiceName(ServiceTypeEnum.BODY_CLEAN_MATERIAL.getDescription()); - skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesForm.setType(ServiceTypeEnum.BODY_CLEAN_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); @@ -131,7 +142,7 @@ public class SkuServiceImpl implements SkuService { if(Objects.equals(skuExtendVO.getReflectionSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.MEMORIAL_CONFIG.getDescription()); - skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.MEMORIAL_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); @@ -141,7 +152,7 @@ public class SkuServiceImpl implements SkuService { } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); skuServicesForm.setServiceName(ServiceTypeEnum.MEMORIAL_MATERIAL.getDescription()); - skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesForm.setType(ServiceTypeEnum.MEMORIAL_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); @@ -155,7 +166,7 @@ public class SkuServiceImpl implements SkuService { if(Objects.equals(skuExtendVO.getCremationSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.CREMATION_CONFIG.getDescription()); - skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.CREMATION_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); @@ -165,7 +176,7 @@ public class SkuServiceImpl implements SkuService { } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); skuServicesForm.setServiceName(ServiceTypeEnum.CREMATION_MATERIAL.getDescription()); - skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesForm.setType(ServiceTypeEnum.CREMATION_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); @@ -179,7 +190,7 @@ public class SkuServiceImpl implements SkuService { if(Objects.equals(skuExtendVO.getAshProcessingSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.ASH_PROCESSING_CONFIG.getDescription()); - skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.ASH_PROCESSING_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); @@ -189,7 +200,7 @@ public class SkuServiceImpl implements SkuService { } SkuServicesFormDO skuForm = new SkuServicesFormDO(); skuForm.setServiceName(ServiceTypeEnum.ASH_PROCESSING_DELIVERY.getDescription()); - skuForm.setIsEnabled(BaseEnum.YES.getKey()); + skuForm.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuForm.setType(ServiceTypeEnum.ASH_PROCESSING_DELIVERY.getCode()); skuForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuForm); @@ -199,7 +210,7 @@ public class SkuServiceImpl implements SkuService { } SkuServicesFormDO skuServicesForm = new SkuServicesFormDO(); skuServicesForm.setServiceName(ServiceTypeEnum.ASH_PROCESSING_MATERIAL.getDescription()); - skuServicesForm.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesForm.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesForm.setType(ServiceTypeEnum.ASH_PROCESSING_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); @@ -213,7 +224,7 @@ public class SkuServiceImpl implements SkuService { if(Objects.equals(skuExtendVO.getBoneashSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.BONE_ASH_CONFIG.getDescription()); - skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.BONE_ASH_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); @@ -227,7 +238,7 @@ public class SkuServiceImpl implements SkuService { if(Objects.equals(skuExtendVO.getSouvenirSwitch(),BaseEnum.YES_ONE.getKey())){ SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.SOUVENIR_CONFIG.getDescription()); - skuServicesFormDO.setIsEnabled(BaseEnum.YES.getKey()); + skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.SOUVENIR_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); @@ -237,7 +248,7 @@ public class SkuServiceImpl implements SkuService { } SkuServicesFormDO skuForm = new SkuServicesFormDO(); skuForm.setServiceName(ServiceTypeEnum.SOUVENIR_DELIVERY.getDescription()); - skuForm.setIsEnabled(BaseEnum.YES.getKey()); + skuForm.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuForm.setType(ServiceTypeEnum.SOUVENIR_DELIVERY.getCode()); skuForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuForm); @@ -366,6 +377,67 @@ public class SkuServiceImpl implements SkuService { skuMapper.updateById(updateObj); } + @Override + @Transactional + public void updateProp(SkuPropVO skuPropVO) { + //保存sku + if (CollectionUtil.isNotEmpty(skuPropVO.getSkuList())) { + List skuList = skuPropVO.getSkuList(); + List skuListNew = new ArrayList<>(); + List skuListUpdate = new ArrayList<>(); + for(SkuDO sku : skuList){ + if(Objects.equals(BaseEnum.YES_ONE.getKey(), sku.getIsExist())){ + sku.setProdId(skuPropVO.getProdId()); + skuListNew.add(sku); + }else { + skuListUpdate.add(sku); + } + } + if(CollUtil.isNotEmpty(skuListNew)){ + skuMapper.insertBatch(skuListNew); + } + if(CollUtil.isNotEmpty(skuListUpdate)){ + skuMapper.updateBatch(skuListUpdate); + } + } + /* prodExtendMapper.updateByProdId(skuPropVO.getProdId(),skuPropVO.getIsDisable(),skuPropVO.getIsExpire()); + //保存规格 + prodPropService.updateProdPropAndValues(skuPropVO);*/ + } + + @Override + public SkuPropInfoVO getSKuPropList(Long prodId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProdPropDO::getProdId,prodId); + wrapper.eq(ProdPropDO::getState, BaseEnum.YES_ONE.getKey()) + .orderByDesc(ProdPropDO::getSort); + + List list = prodPropService.list(wrapper); + list.forEach(prop -> { + List values = prodPropValueService.list( + new LambdaQueryWrapper() + .eq(ProdPropValueDO::getPropId, prop.getId()) + .orderByDesc(ProdPropValueDO::getSort) + ); + /* LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(ProdPropValueDO::getPropId,prop.getPropId()); + wrapper1.eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); + if (merchantComm.getScore() != null) { + wrapper.eq("score", merchantComm.getScore()); + } + wrapper1.orderByDesc(ProdPropValueDO::getSort);*/ + + prop.setProdPropValues(values); + }); + SkuPropInfoVO skuPropInfoVO = new SkuPropInfoVO(); + skuPropInfoVO.setProdId(prodId); + skuPropInfoVO.setProdPropSaveReqVO(list); + ProdExtendDO prodExtendDO = prodExtendService.getOne(new LambdaQueryWrapper().eq(ProdExtendDO::getProdId, prodId)); + skuPropInfoVO.setIsDisable(prodExtendDO.getIsDisable()); + skuPropInfoVO.setIsExpire(prodExtendDO.getIsExpire()); + return skuPropInfoVO; + } + @Override public void deleteSku(Long id) { // 校验存在 @@ -390,4 +462,40 @@ public class SkuServiceImpl implements SkuService { return null; } + @Override + @Transactional + public void updateServiceDetails(List skuServiceDetailsList) { + if (ObjectUtils.isNotEmpty(skuServiceDetailsList)) { + skuServiceDetailsMapper.delete(SkuServiceDetailsDO::getServiceId, skuServiceDetailsList.get(0).getServiceId()); + skuServiceDetailsMapper.insertBatch(skuServiceDetailsList); + } + } + + @Override + @Transactional + public void updateMaterial(List skuServiceMaterialList) { + if (ObjectUtils.isNotEmpty(skuServiceMaterialList)) { + skuServiceMaterialMapper.delete(SkuServiceMaterialDO::getServiceId, skuServiceMaterialList.get(0).getServiceId()); + skuServiceMaterialMapper.insertBatch(skuServiceMaterialList); + } + } + + @Override + @Transactional + public void updateTransportAdress(List skuServiceTransportDOList) { + if (ObjectUtils.isNotEmpty(skuServiceTransportDOList)) { + skuServiceTransportMapper.delete(SkuServiceTransportDO::getServiceId, skuServiceTransportDOList.get(0).getServiceId()); + skuServiceTransportMapper.insertBatch(skuServiceTransportDOList); + } + } + + @Override + public void updateDeliver(List skuServiceDeliverList) { + if (ObjectUtils.isNotEmpty(skuServiceDeliverList)) { + skuServiceDeliverMapper.delete(SkuServiceDeliverDO::getServiceId, skuServiceDeliverList.get(0).getServiceId()); + skuServiceDeliverMapper.insertBatch(skuServiceDeliverList); + } + } + + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java index f5ae6cf..5d1a827 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java @@ -127,6 +127,6 @@ public class ProdSaveReqVO { private List skuList; @Schema(description = "规格") - private ProdPropSaveReqVO prodPropSaveReqVO; + private List prodPropSaveReqVO; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java index 080d40f..93ae248 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java @@ -24,6 +24,6 @@ public class ProdPropPageReqVO extends PageParam { private Integer prodId; @Schema(description = "是否删除0否1是") - private Integer isDelete; + private Integer deleted; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java index d6004a7..0958d60 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java @@ -32,6 +32,6 @@ public class ProdPropRespVO { @Schema(description = "是否删除0否1是") @ExcelProperty("是否删除0否1是") - private Integer isDelete; + private Integer deleted; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java index cc5173e..ad5b971 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java @@ -27,8 +27,13 @@ public class ProdPropSaveReqVO { private Integer prodId; @Schema(description = "是否删除0否1是") - private Integer isDelete; + private Integer deleted; + /** + * isExist 是否新增 0否1是 + */ + @TableField(exist=false) + private Integer isExist; /** * 属性值 */ diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java index 31d84bc..9449bbd 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java @@ -18,6 +18,6 @@ public class ProdPropValuePageReqVO extends PageParam { private Long propId; @Schema(description = "是否删除0否1是") - private Integer isDelete; + private Integer deleted; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java index 3f3cf9e..e8e2758 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java @@ -24,6 +24,6 @@ public class ProdPropValueRespVO { @Schema(description = "是否删除0否1是") @ExcelProperty("是否删除0否1是") - private Boolean isDelete; + private Boolean deleted; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java index b1c93a3..908b528 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java @@ -19,6 +19,6 @@ public class ProdPropValueSaveReqVO { private Long propId; @Schema(description = "是否删除0否1是") - private Boolean isDelete; + private Boolean deleted; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java index a50fdfa..deedda8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java @@ -25,9 +25,14 @@ public class SkuPageReqVO extends PageParam { @Schema(description = "别名") private String alias; - @Schema(description = "价格", example = "32405") + @Schema(description = "当前价格", example = "32405") private BigDecimal price; + /** + * 基准价 + */ + private BigDecimal basePrice; + @Schema(description = "最低价格", example = "5040") private BigDecimal minPrice; @@ -103,4 +108,14 @@ public class SkuPageReqVO extends PageParam { * 是否默认规则0否1是 */ private Integer isSpecs; + + + /** + * 服务内容 + */ + private String serviceContent; + /** + * 规格id 多个用逗号分隔(1,2,3) + */ + private String propIds; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropInfoVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropInfoVO.java new file mode 100644 index 0000000..0d301eb --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropInfoVO.java @@ -0,0 +1,28 @@ +package com.tashow.cloud.product.vo.sku; + +import com.tashow.cloud.product.dto.ProdPropDO; +import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +public class SkuPropInfoVO { + @Schema(description = "产品id") + private Long prodId; + + /** + * 是否显示失效规格值 0否1是 + */ + private Integer isExpire; + + /** + * 是否显示禁用规格值 0否1是 + */ + private Integer isDisable; + + @Schema(description = "规格") + public List prodPropSaveReqVO; +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropVO.java new file mode 100644 index 0000000..04a4983 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropVO.java @@ -0,0 +1,31 @@ +package com.tashow.cloud.product.vo.sku; + +import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +public class SkuPropVO { + @Schema(description = "产品id") + private Long prodId; + + /** + * 是否显示失效规格值 0否1是 + */ + private Integer isExpire = 1; + + /** + * 是否显示禁用规格值 0否1是 + */ + private Integer isDisable =1; + + + @Schema(description = "sku列表") + public List skuList; + + @Schema(description = "规格") + public List prodPropSaveReqVO; +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java index 3917425..7f4f9e5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java @@ -29,10 +29,15 @@ public class SkuRespVO { @ExcelProperty("别名") private String alias; - @Schema(description = "价格", example = "32405") + @Schema(description = "当前价格", example = "32405") @ExcelProperty("价格") private BigDecimal price; + /** + * 基准价 + */ + private BigDecimal basePrice; + @Schema(description = "最低价格", example = "5040") @ExcelProperty("最低价格") private BigDecimal minPrice; @@ -129,4 +134,13 @@ public class SkuRespVO { * 是否默认规则0否1是 */ private Integer isSpecs; + + /** + * 服务内容 + */ + private String serviceContent; + /** + * 规格id 多个用逗号分隔(1,2,3) + */ + private String propIds; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java index 61f3186..fef9f51 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java @@ -23,9 +23,14 @@ public class SkuSaveReqVO { @Schema(description = "别名") private String alias; - @Schema(description = "价格", example = "32405") + @Schema(description = "当前价格", example = "32405") private BigDecimal price; + /** + * 基准价 + */ + private BigDecimal basePrice; + @Schema(description = "最低价格", example = "5040") private BigDecimal minPrice; @@ -93,4 +98,13 @@ public class SkuSaveReqVO { * 扩展服务表单id */ private Long formId; + + /** + * 服务内容 + */ + private String serviceContent; + /** + * 规格id 多个用逗号分隔(1,2,3) + */ + private String propIds; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/logback-spring.xml b/tashow-module/tashow-module-product/src/main/resources/logback-spring.xml index 16f0c0f..8bef45c 100644 --- a/tashow-module/tashow-module-product/src/main/resources/logback-spring.xml +++ b/tashow-module/tashow-module-product/src/main/resources/logback-spring.xml @@ -73,4 +73,11 @@ + + + + + + + diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdExtendMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdExtendMapper.xml new file mode 100644 index 0000000..50520d3 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdExtendMapper.xml @@ -0,0 +1,18 @@ + + + + + + + UPDATE tz_prod_extend + SET + is_disable = #{isDisable}, + is_expire = #{isExpire} + WHERE prod_id = #{prodId} + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml index 5ed26d4..94f4c50 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml @@ -9,6 +9,6 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDeliverMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDeliverMapper.xml index 55f1873..2cbaf7c 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDeliverMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDeliverMapper.xml @@ -8,5 +8,7 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + + delete from tz_sku_service_deliver where service_id = #{serviceId} + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDetailsMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDetailsMapper.xml index 56dfd4a..a74ad84 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDetailsMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceDetailsMapper.xml @@ -8,5 +8,7 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + + delete from tz_sku_service_details where service_id = #{serviceId} + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceMaterialMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceMaterialMapper.xml index a2f79be..ad0ec3c 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceMaterialMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceMaterialMapper.xml @@ -8,5 +8,7 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + + delete from tz_sku_service_material where service_id = #{serviceId} + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceTransportMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceTransportMapper.xml index bab926a..a7aa6ec 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceTransportMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServiceTransportMapper.xml @@ -8,5 +8,7 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + + delete from tz_sku_service_transport where service_id = #{serviceId} + \ No newline at end of file From cde19e180a382da1c23394cd35d10d4956749715 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Tue, 5 Aug 2025 17:20:56 +0800 Subject: [PATCH 17/22] =?UTF-8?q?=E8=8E=B7=E5=BE=97SKU=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=E7=AB=99=E5=88=86=E9=A1=B5=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/common/util/date/DateUtils.java | 36 +++++++ .../product/controller/SkuController.java | 8 ++ .../com/tashow/cloud/product/dto/SkuDO.java | 5 +- .../cloud/product/mapper/SkuMapper.java | 9 +- .../cloud/product/service/SkuService.java | 4 + .../product/service/impl/SkuServiceImpl.java | 14 +++ .../cloud/product/vo/sku/SkuPageReqVO.java | 98 +------------------ .../cloud/product/vo/sku/SkuRecycleBinVO.java | 31 ++++++ .../resources/mapper/product/SkuMapper.xml | 6 ++ 9 files changed, 112 insertions(+), 99 deletions(-) create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java diff --git a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/date/DateUtils.java b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/date/DateUtils.java index ffe5af9..154dad4 100644 --- a/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/date/DateUtils.java +++ b/tashow-framework/tashow-common/src/main/java/com/tashow/cloud/common/util/date/DateUtils.java @@ -3,6 +3,7 @@ package com.tashow.cloud.common.util.date; import cn.hutool.core.date.LocalDateTimeUtil; import java.time.*; +import java.time.temporal.ChronoUnit; import java.util.Calendar; import java.util.Date; @@ -27,6 +28,9 @@ public class DateUtils { public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; + + // 默认数据保留天数 + private static final long RETENTION_DAYS = 90; /** * 将 LocalDateTime 转换成 Date * @@ -146,4 +150,36 @@ public class DateUtils { return LocalDateTimeUtil.isSameDay(date, LocalDateTime.now().minusDays(1)); } + + /** + * 根据删除时间,计算还剩多少天被彻底删除(默认保留 90 天) + * + * @param deleteTime 删除时间 + * @return 剩余天数(>=0),0 表示已过期 + */ + public static long getRemainingDays(Date deleteTime) { + if (deleteTime == null) { + throw new IllegalArgumentException("删除时间不能为 null"); + } + + // 将 Date 转换为 LocalDateTime + LocalDateTime deleteDateTime = deleteTime.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + + // 当前时间 + LocalDateTime now = LocalDateTime.now(); + + // 到期时间 = 删除时间 + 保留天数 + LocalDateTime expireTime = deleteDateTime.plusDays(RETENTION_DAYS); + + // 如果当前时间已经超过到期时间,剩余天数为 0 + if (now.isAfter(expireTime)) { + return 0; + } + + // 计算剩余天数(向下取整,不进位) + return ChronoUnit.DAYS.between(now, expireTime); + } + } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java index 6bce828..32ee534 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java @@ -9,6 +9,7 @@ import com.tashow.cloud.product.service.ProdExtendService; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.SkuService; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.product.vo.prod.ProdServiceVO; import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO; import com.tashow.cloud.product.vo.sku.*; @@ -150,6 +151,13 @@ public class SkuController { return success(BeanUtils.toBean(sku, SkuRespVO.class)); } + @PermitAll + @GetMapping("/getSkuRecycleBinPageList") + @Operation(summary = "获得SKU回收站分页列表") + public CommonResult> getSkuRecycleBinPageList(@Valid SkuPageReqVO pageReqVO) { + PageResult pageResult = skuService.getSkuRecycleBinPageList(pageReqVO); + return success(pageResult); + } @PostMapping("/createSkuExtend") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java index a4dfb15..b879676 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java @@ -163,5 +163,8 @@ public class SkuDO extends BaseDO { @TableField(exist=false) private Integer isExist; - + /** + * 删除时间 + */ + private LocalDateTime delete_time; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java index f8042e0..43b2f10 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java @@ -2,11 +2,18 @@ package com.tashow.cloud.product.mapper; import java.util.*; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; +import com.tashow.cloud.product.dto.ProdDO; import com.tashow.cloud.product.dto.SkuDO; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.product.vo.sku.SkuRecycleBinVO; +import io.swagger.v3.oas.annotations.media.Schema; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 单品SKU Mapper @@ -16,5 +23,5 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface SkuMapper extends BaseMapperX { - + IPage getSkuRecycleBinPageList(Page page, @Param("prodId") Long prodId, @Param("properties")String properties); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index 7a28a9f..b2e49f0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -74,6 +74,10 @@ public interface SkuService { */ SkuDO getSku(Long id); + + + PageResult getSkuRecycleBinPageList(SkuPageReqVO pageReqVO); + /** * 获得单品SKU分页 * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index 878dd72..85e988d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -3,12 +3,16 @@ package com.tashow.cloud.product.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.tashow.cloud.common.util.date.DateUtils; +import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils; import com.tashow.cloud.product.dto.*; import com.tashow.cloud.product.mapper.*; import com.tashow.cloud.product.service.ProdExtendService; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.SkuService; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.product.vo.sku.*; import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; @@ -457,6 +461,16 @@ public class SkuServiceImpl implements SkuService { return skuMapper.selectById(id); } + @Override + public PageResult getSkuRecycleBinPageList(SkuPageReqVO pageReqVO){ + IPage prodPageList = skuMapper.getSkuRecycleBinPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getProperties()); + for(SkuRecycleBinVO prodPage : prodPageList.getRecords()){ + prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); + } + return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + } + + @Override public PageResult getSkuPage(SkuPageReqVO pageReqVO) { return null; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java index deedda8..ad97d4b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java @@ -19,103 +19,7 @@ public class SkuPageReqVO extends PageParam { @Schema(description = "商品ID", example = "18784") private Long prodId; - @Schema(description = "销售属性组合字符串 格式是p1:v1;p2:v2") + @Schema(description = "销售属性组合字符串") private String properties; - @Schema(description = "别名") - private String alias; - - @Schema(description = "当前价格", example = "32405") - private BigDecimal price; - - /** - * 基准价 - */ - private BigDecimal basePrice; - - @Schema(description = "最低价格", example = "5040") - private BigDecimal minPrice; - - @Schema(description = "最高价格", example = "11547") - private BigDecimal maxPrice; - - @Schema(description = "成本价", example = "28062") - private BigDecimal originalPrice; - - @Schema(description = "市场价", example = "11547") - private BigDecimal marketPrice; - - @Schema(description = "单位") - private String unit; - - @Schema(description = "0:主服务1:待定", example = "1") - private Integer type; - - @Schema(description = "概述") - private String overview; - - @Schema(description = "库存") - private Integer stocks; - - @Schema(description = "预警库存") - private Integer warnStocks; - - @Schema(description = "库存扣款时机0:付款扣1:下单扣", example = "1") - private Boolean stocksType; - - @Schema(description = "sku编码") - private String skuCode; - - @Schema(description = "商品条形码", example = "14390") - private String modelId; - - @Schema(description = "sku图片") - private String pic; - - @Schema(description = "sku名称", example = "张三") - private String skuName; - - @Schema(description = "商品名称", example = "芋艿") - private String prodName; - - @Schema(description = "版本号") - private Integer version; - - @Schema(description = "商品重量") - private Double weight; - - @Schema(description = "商品体积") - private Double volume; - - @Schema(description = "0 禁用 1 启用", example = "1") - private Integer status; - - @Schema(description = "0 正常 1 已被删除") - private Integer isDelete; - - @Schema(description = "最小购买数量") - private Integer moq; - - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - /** - * 是否上下架0下架1上架 - */ - private Integer isShelf; - - /** - * 是否默认规则0否1是 - */ - private Integer isSpecs; - - - /** - * 服务内容 - */ - private String serviceContent; - /** - * 规格id 多个用逗号分隔(1,2,3) - */ - private String propIds; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java new file mode 100644 index 0000000..9b0008b --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java @@ -0,0 +1,31 @@ +package com.tashow.cloud.product.vo.sku; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.tashow.cloud.product.dto.ProdPropDO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +@Data +public class SkuRecycleBinVO { + @Schema(description = "单品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32230") + private Long skuId; + + /** + * 是否显示失效规格值 0否1是 + */ + private String properties; + + /** + * 还剩多少天 + */ + private Long remainingDays; + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date deleteTime; +} diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml index cd6f22a..4d3670f 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml @@ -9,4 +9,10 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + \ No newline at end of file From 525cf9712138eda8f2f1995ebae1d83d6ff37c41 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Thu, 7 Aug 2025 10:36:38 +0800 Subject: [PATCH 18/22] =?UTF-8?q?=E8=8E=B7=E5=BE=97SKU=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=E7=AB=99=E5=88=86=E9=A1=B5=E5=88=97=E8=A1=A81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{ => admin}/CategoryController.java | 43 ++++-------- .../ProdAdditionalFeeDatesController.java | 45 ++++++------- .../ProdAdditionalFeePeriodsController.java | 45 ++++++------- .../{ => admin}/ProdController.java | 38 +++++------ .../ProdEmergencyResponseController.java | 45 ++++++------- ...dEmergencyResponseIntervalsController.java | 45 ++++++------- .../{ => admin}/ProdPropController.java | 33 +++------- .../{ => admin}/ProdPropValueController.java | 45 ++++++------- .../ProdReservationConfigController.java | 45 ++++++------- .../ProdServiceAreaRelevanceController.java | 45 ++++++------- .../ProdServiceAreasController.java | 45 ++++++------- .../ProdServiceOverAreaRulesController.java | 45 ++++++------- .../{ => admin}/ProdTagsController.java | 45 ++++++------- .../ProdWeightRangePricesController.java | 45 ++++++------- .../ProductOrderLimitController.java | 45 ++++++------- .../{ => admin}/ShopDetailController.java | 45 ++++++------- .../controller/{ => admin}/SkuController.java | 66 ++++++++++--------- .../SkuServiceDeliverController.java | 45 ++++++------- .../SkuServiceDetailsController.java | 45 ++++++------- .../SkuServiceMaterialController.java | 45 ++++++------- .../SkuServiceTransportController.java | 45 ++++++------- .../SkuServicesFormController.java | 45 ++++++------- .../tashow/cloud/product/dto/CategoryDO.java | 10 ++- .../com/tashow/cloud/product/dto/SkuDO.java | 2 +- .../cloud/product/mapper/SkuMapper.java | 3 + .../cloud/product/service/SkuService.java | 8 +++ .../product/service/impl/SkuServiceImpl.java | 21 +++++- .../vo/category/CategoryPageReqVO.java | 2 +- .../product/vo/category/CategoryRespVO.java | 2 +- .../vo/category/CategorySaveReqVO.java | 7 +- .../resources/mapper/product/SkuMapper.xml | 9 +++ 31 files changed, 509 insertions(+), 545 deletions(-) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/CategoryController.java (84%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdAdditionalFeeDatesController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdAdditionalFeePeriodsController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdController.java (86%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdEmergencyResponseController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdEmergencyResponseIntervalsController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdPropController.java (85%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdPropValueController.java (95%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdReservationConfigController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdServiceAreaRelevanceController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdServiceAreasController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdServiceOverAreaRulesController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdTagsController.java (95%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProdWeightRangePricesController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ProductOrderLimitController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/ShopDetailController.java (95%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/SkuController.java (89%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/SkuServiceDeliverController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/SkuServiceDetailsController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/SkuServiceMaterialController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/SkuServiceTransportController.java (96%) rename tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/{ => admin}/SkuServicesFormController.java (96%) diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/CategoryController.java similarity index 84% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/CategoryController.java index 932b9bd..691d628 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/CategoryController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/CategoryController.java @@ -1,37 +1,22 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.tashow.cloud.product.dto.CategoryDO; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.service.CategoryService; -import com.tashow.cloud.product.vo.category.*; -import com.tashow.cloud.productapi.enums.ProdPropRule; -import jakarta.annotation.security.PermitAll; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.product.dto.CategoryDO; +import com.tashow.cloud.product.service.CategoryService; +import com.tashow.cloud.product.vo.category.CategorySaveReqVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.validation.Valid; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; - @Tag(name = "管理后台 - 产品类目") @RestController @RequestMapping("/category") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeeDatesController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeeDatesController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeeDatesController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeeDatesController.java index 4776e21..9e859a6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeeDatesController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeeDatesController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdAdditionalFeeDatesDO; import com.tashow.cloud.product.service.ProdAdditionalFeeDatesService; import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesRespVO; import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 特殊日期附加费用规则") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeePeriodsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeePeriodsController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeePeriodsController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeePeriodsController.java index d36789f..d2dc03e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdAdditionalFeePeriodsController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeePeriodsController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdAdditionalFeePeriodsDO; import com.tashow.cloud.product.service.ProdAdditionalFeePeriodsService; import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsRespVO; import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 特殊时段附加费用规则") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java similarity index 86% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java index 31f232b..3b3afe5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java @@ -1,28 +1,22 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; -import com.tashow.cloud.product.dto.ProdDO; -import com.tashow.cloud.product.vo.prod.*; -import jakarta.annotation.security.PermitAll; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; -import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.product.dto.ProdDO; import com.tashow.cloud.product.service.ProdService; +import com.tashow.cloud.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; +import com.tashow.cloud.product.vo.prod.ProdServiceVO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.validation.Valid; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import static com.tashow.cloud.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 商品") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseController.java index 0909dc0..3c1e133 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; import com.tashow.cloud.product.service.ProdEmergencyResponseService; import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseRespVO; import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 商品紧急响应服务设置") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseIntervalsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseIntervalsController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseIntervalsController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseIntervalsController.java index 8bfe543..38391ab 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdEmergencyResponseIntervalsController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseIntervalsController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; import com.tashow.cloud.product.service.ProdEmergencyResponseIntervalsService; import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsRespVO; import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 紧急响应时间区间设置") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropController.java similarity index 85% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropController.java index bbb3f9d..78b147a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropController.java @@ -1,40 +1,27 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.tashow.cloud.common.pojo.CommonResult; import com.tashow.cloud.product.dto.ProdPropDO; import com.tashow.cloud.product.dto.ProdPropValueDO; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropValueService; -import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO; -import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; import com.tashow.cloud.productapi.enums.ProdPropRule; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; -import jakarta.validation.constraints.*; -import jakarta.validation.*; -import jakarta.servlet.http.*; -import java.util.*; -import java.io.IOException; +import java.util.List; -import com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; import static com.tashow.cloud.common.pojo.CommonResult.success; -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - -import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; - @Tag(name = "管理后台 - 商品属性") @RestController @RequestMapping("/tz/prod-prop") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropValueController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropValueController.java similarity index 95% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropValueController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropValueController.java index e1be643..19866f3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdPropValueController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropValueController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdPropValueDO; import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValuePageReqVO; import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueRespVO; import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 属性规则") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdReservationConfigController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdReservationConfigController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdReservationConfigController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdReservationConfigController.java index 6bd64cf..3baac44 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdReservationConfigController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdReservationConfigController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdReservationConfigDO; import com.tashow.cloud.product.service.ProdReservationConfigService; import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigRespVO; import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 商品预约配置") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreaRelevanceController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreaRelevanceController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreaRelevanceController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreaRelevanceController.java index 61ba834..5f66389 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreaRelevanceController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreaRelevanceController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; import com.tashow.cloud.product.service.ProdServiceAreaRelevanceService; import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceRespVO; import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 商品与服务区域关联") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreasController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreasController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreasController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreasController.java index 081c859..5af8b51 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceAreasController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreasController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdServiceAreasDO; import com.tashow.cloud.product.service.ProdServiceAreasService; import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasRespVO; import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 服务区域") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceOverAreaRulesController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceOverAreaRulesController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceOverAreaRulesController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceOverAreaRulesController.java index 1c65770..ef961d1 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdServiceOverAreaRulesController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceOverAreaRulesController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; import com.tashow.cloud.product.service.ProdServiceOverAreaRulesService; import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesRespVO; import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 超区规则") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdTagsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdTagsController.java similarity index 95% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdTagsController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdTagsController.java index 2eece01..0d2aaea 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdTagsController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdTagsController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdTagsDO; import com.tashow.cloud.product.service.ProdTagsService; import com.tashow.cloud.product.vo.prodtags.ProdTagsPageReqVO; import com.tashow.cloud.product.vo.prodtags.ProdTagsRespVO; import com.tashow.cloud.product.vo.prodtags.ProdTagsSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 商品和标签管理") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdWeightRangePricesController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdWeightRangePricesController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdWeightRangePricesController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdWeightRangePricesController.java index a3cd582..274dcd9 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProdWeightRangePricesController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdWeightRangePricesController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProdWeightRangePricesDO; import com.tashow.cloud.product.service.ProdWeightRangePricesService; import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesRespVO; import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 体重区间价格") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProductOrderLimitController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProductOrderLimitController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProductOrderLimitController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProductOrderLimitController.java index 7b57e4c..ea67554 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ProductOrderLimitController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProductOrderLimitController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ProductOrderLimitDO; import com.tashow.cloud.product.service.ProductOrderLimitService; import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitPageReqVO; import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitRespVO; import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 商品接单上限设置") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ShopDetailController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ShopDetailController.java similarity index 95% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ShopDetailController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ShopDetailController.java index a28007e..5f97c1a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/ShopDetailController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ShopDetailController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.ShopDetailDO; import com.tashow.cloud.product.service.ShopDetailService; import com.tashow.cloud.product.vo.shopdetail.ShopDetailPageReqVO; import com.tashow.cloud.product.vo.shopdetail.ShopDetailRespVO; import com.tashow.cloud.product.vo.shopdetail.ShopDetailSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 店铺信息") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java similarity index 89% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java index 32ee534..fb293f3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java @@ -1,46 +1,29 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.product.dto.*; -import com.tashow.cloud.product.mapper.ProdExtendMapper; import com.tashow.cloud.product.mapper.SkuMapper; import com.tashow.cloud.product.service.ProdExtendService; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.SkuService; -import com.tashow.cloud.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.product.vo.prod.ProdServiceVO; -import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO; import com.tashow.cloud.product.vo.sku.*; -import com.tashow.cloud.productapi.enums.BaseEnum; -import com.tashow.cloud.productapi.enums.ProdPropRule; -import jakarta.annotation.security.PermitAll; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import jakarta.validation.Valid; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; -import jakarta.validation.constraints.*; -import jakarta.validation.*; -import jakarta.servlet.http.*; -import java.util.*; -import java.io.IOException; +import java.util.Date; +import java.util.List; -import com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; import static com.tashow.cloud.common.pojo.CommonResult.success; -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - -import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; - @Tag(name = "管理后台 - 单品SKU") @RestController @RequestMapping("/tz/sku") @@ -93,6 +76,13 @@ public class SkuController { return success(skuService.getSKuPropList(prodId)); } + @PutMapping("/deleteProp") + @Operation(summary = "删除规格值") + @PermitAll + public CommonResult deleteProp(@RequestParam("id") Long id) { + skuService.deleteProp(id); + return success(true); + } @DeleteMapping("/delete") @Operation(summary = "删除单品SKU") @@ -108,7 +98,13 @@ public class SkuController { @Parameter(name = "ids", description = "编号", required = true) @PermitAll public CommonResult deleteSkuList(@RequestParam("id") List ids) { - skuMapper.deleteByIds(ids); + for(Long id:ids){ + SkuDO sku = new SkuDO(); + sku.setSkuId(id); + sku.setDeleteTime(new Date()); + // 删除 + skuMapper.deleteById(sku); + } return success(true); } @@ -159,6 +155,14 @@ public class SkuController { return success(pageResult); } +/* @PermitAll + @GetMapping("/getSkuRecycleBinPageList") + @Operation(summary = "获得SKU回收站分页列表") + public CommonResult> getSkuRecycleBinPageList(@Valid SkuPageReqVO pageReqVO) { + PageResult pageResult = skuService.getSkuRecycleBinPageList(pageReqVO); + return success(pageResult); + }*/ + @PostMapping("/createSkuExtend") @Operation(summary = "创建sku扩展服务配置") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDeliverController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDeliverController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDeliverController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDeliverController.java index 87d4f84..70366c8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDeliverController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDeliverController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.SkuServiceDeliverDO; import com.tashow.cloud.product.service.SkuServiceDeliverService; import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverRespVO; import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 服务交付方式") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDetailsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDetailsController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDetailsController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDetailsController.java index f5c8020..58a876d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceDetailsController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDetailsController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.SkuServiceDetailsDO; import com.tashow.cloud.product.service.SkuServiceDetailsService; import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsRespVO; import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 服务详情") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceMaterialController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceMaterialController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceMaterialController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceMaterialController.java index e5ec813..fc4d8d8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceMaterialController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceMaterialController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.SkuServiceMaterialDO; import com.tashow.cloud.product.service.SkuServiceMaterialService; import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialRespVO; import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 服务物料详情") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceTransportController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceTransportController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceTransportController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceTransportController.java index 85af9ae..d9dd273 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServiceTransportController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceTransportController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.SkuServiceTransportDO; import com.tashow.cloud.product.service.SkuServiceTransportService; import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportRespVO; import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 服务遗体运输") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServicesFormController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServicesFormController.java similarity index 96% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServicesFormController.java rename to tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServicesFormController.java index c12a803..14c7ba5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/SkuServicesFormController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServicesFormController.java @@ -1,34 +1,31 @@ -package com.tashow.cloud.product.controller; +package com.tashow.cloud.product.controller.admin; +import com.tashow.cloud.common.pojo.CommonResult; +import com.tashow.cloud.common.pojo.PageParam; +import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.common.util.object.BeanUtils; +import com.tashow.cloud.excel.excel.core.util.ExcelUtils; import com.tashow.cloud.product.dto.SkuServicesFormDO; import com.tashow.cloud.product.service.SkuServicesFormService; import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormPageReqVO; import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormRespVO; import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormSaveReqVO; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -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 com.tashow.cloud.common.pojo.PageParam; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.common.util.object.BeanUtils; -import static com.tashow.cloud.common.pojo.CommonResult.success; - -import com.tashow.cloud.excel.excel.core.util.ExcelUtils; - import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; -import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; +import static com.tashow.cloud.web.apilog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 商品SKU扩展服务表单") @RestController diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java index 4f9fef4..2fed06c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java @@ -35,6 +35,12 @@ public class CategoryDO extends BaseDO { * 父节点 */ private Long parentId; + + /** + * 父节名称 + */ + private String parentName; + /** * 产品类目名称 */ @@ -58,7 +64,7 @@ public class CategoryDO extends BaseDO { /** * 排序 */ - private Integer seq; + private Integer sort; /** * 默认是1,表示正常状态,0为下线状态 */ @@ -68,4 +74,6 @@ public class CategoryDO extends BaseDO { */ private Integer grade; + + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java index b879676..f388d73 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java @@ -166,5 +166,5 @@ public class SkuDO extends BaseDO { /** * 删除时间 */ - private LocalDateTime delete_time; + private Date deleteTime; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java index 43b2f10..691a05c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java @@ -24,4 +24,7 @@ import org.apache.ibatis.annotations.Param; public interface SkuMapper extends BaseMapperX { IPage getSkuRecycleBinPageList(Page page, @Param("prodId") Long prodId, @Param("properties")String properties); + + List getSkuListByName( @Param("propertiesName")String propertiesName); + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index b2e49f0..3cf540b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -56,6 +56,14 @@ public interface SkuService { */ void updateProp(SkuPropVO skuPropVO); + /** + * 删除规格值 + * + * @param id 删除规格值 + */ + void deleteProp(Long id); + + SkuPropInfoVO getSKuPropList(Long prodId); diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index 85e988d..9b3231e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -404,9 +404,21 @@ public class SkuServiceImpl implements SkuService { skuMapper.updateBatch(skuListUpdate); } } - /* prodExtendMapper.updateByProdId(skuPropVO.getProdId(),skuPropVO.getIsDisable(),skuPropVO.getIsExpire()); + prodExtendMapper.updateByProdId(skuPropVO.getProdId(),skuPropVO.getIsDisable(),skuPropVO.getIsExpire()); //保存规格 - prodPropService.updateProdPropAndValues(skuPropVO);*/ + prodPropService.updateProdPropAndValues(skuPropVO); + } + + @Override + public void deleteProp(Long id) { + ProdPropValueDO prodPropValueDO =prodPropValueService.getById(id); + prodPropValueService.deleteProdPropValue(id); + List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); + for(SkuDO skuDO : skuDOList){ + if(skuDO.getProperties()!=null){ + String[] split = skuDO.getProperties().split(","); + } + } } @Override @@ -446,8 +458,11 @@ public class SkuServiceImpl implements SkuService { public void deleteSku(Long id) { // 校验存在 validateSkuExists(id); + SkuDO sku = new SkuDO(); + sku.setSkuId(id); + sku.setDeleteTime(new Date()); // 删除 - skuMapper.deleteById(id); + skuMapper.deleteById(sku); } private void validateSkuExists(Long id) { diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java index 72630a4..5603b2f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java @@ -37,7 +37,7 @@ public class CategoryPageReqVO extends PageParam { private String tag; @Schema(description = "排序") - private Integer seq; + private Integer sort; @Schema(description = "默认是1,表示正常状态,0为下线状态", example = "1") private Integer status; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java index ac5eba5..b0c1d4d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java @@ -46,7 +46,7 @@ public class CategoryRespVO { @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("排序") - private Integer seq; + private Integer sort; @Schema(description = "默认是1,表示正常状态,0为下线状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @ExcelProperty("默认是1,表示正常状态,0为下线状态") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java index d0fd931..84ef5c0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java @@ -19,6 +19,11 @@ public class CategorySaveReqVO { @NotNull(message = "父节点不能为空") private Long parentId; + /** + * 父节名称 + */ + private String parentName; + @Schema(description = "产品类目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") @NotEmpty(message = "产品类目名称不能为空") private String categoryName; @@ -36,7 +41,7 @@ public class CategorySaveReqVO { private String tag; @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) - private Integer seq; + private Integer sort; @Schema(description = "默认是1,表示正常状态,0为下线状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") private Integer status; diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml index 4d3670f..6dd292a 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml @@ -15,4 +15,13 @@ and properties like concat('%', #{properties}, '%') + + + + \ No newline at end of file From 5987f02e4e59defedbb06083869e6ed30547d1f4 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Thu, 7 Aug 2025 18:34:03 +0800 Subject: [PATCH 19/22] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tashow-feign/tashow-product-api/pom.xml | 40 +++ .../productapi/api/product/CategoryApi.java | 24 ++ .../api}/product/dto/CategoryDO.java | 18 +- .../api/product/dto/CategoryDto.java | 72 +++++ .../product/dto/ProdAdditionalFeeDatesDO.java | 15 +- .../dto/ProdAdditionalFeePeriodsDO.java | 15 +- .../productapi/api}/product/dto/ProdDO.java | 17 +- .../product/dto/ProdEmergencyResponseDO.java | 13 +- .../dto/ProdEmergencyResponseIntervalsDO.java | 15 +- .../api}/product/dto/ProdExtendDO.java | 8 +- .../api}/product/dto/ProdPropDO.java | 13 +- .../api}/product/dto/ProdPropValueDO.java | 10 +- .../product/dto/ProdReservationConfigDO.java | 13 +- .../dto/ProdServiceAreaRelevanceDO.java | 10 +- .../api}/product/dto/ProdServiceAreasDO.java | 12 +- .../dto/ProdServiceOverAreaRulesDO.java | 14 +- .../api}/product/dto/ProdTagsDO.java | 12 +- .../product/dto/ProdWeightRangePricesDO.java | 14 +- .../api}/product/dto/ProductOrderLimitDO.java | 13 +- .../api}/product/dto/ShopDetailDO.java | 15 +- .../productapi/api}/product/dto/SkuDO.java | 19 +- .../api}/product/dto/SkuServiceDeliverDO.java | 14 +- .../api}/product/dto/SkuServiceDetailsDO.java | 14 +- .../product/dto/SkuServiceMaterialDO.java | 13 +- .../product/dto/SkuServiceTransportDO.java | 13 +- .../api}/product/dto/SkuServicesFormDO.java | 13 +- .../api/product/vo}/CategoryPageReqVO.java | 13 +- .../api/product/vo}/CategoryRespVO.java | 13 +- .../api/product/vo}/CategorySaveReqVO.java | 18 +- .../api}/product/vo/prod/ProdPageReqVO.java | 2 +- .../api}/product/vo/prod/ProdRespVO.java | 2 +- .../api}/product/vo/prod/ProdSaveReqVO.java | 10 +- .../api}/product/vo/prod/ProdServiceVO.java | 11 +- .../ProdAdditionalFeeDatesPageReqVO.java | 14 +- .../ProdAdditionalFeeDatesRespVO.java | 11 +- .../ProdAdditionalFeeDatesSaveReqVO.java | 11 +- .../ProdAdditionalFeePeriodsPageReqVO.java | 14 +- .../ProdAdditionalFeePeriodsRespVO.java | 11 +- .../ProdAdditionalFeePeriodsSaveReqVO.java | 11 +- .../ProdEmergencyInfoVO.java | 8 +- .../ProdEmergencyResponsePageReqVO.java | 13 +- .../ProdEmergencyResponseRespVO.java | 10 +- .../ProdEmergencyResponseSaveReqVO.java | 9 +- ...odEmergencyResponseIntervalsPageReqVO.java | 15 +- .../ProdEmergencyResponseIntervalsRespVO.java | 10 +- ...odEmergencyResponseIntervalsSaveReqVO.java | 10 +- .../vo/prodprop/ProdPropPageReqVO.java | 9 +- .../product/vo/prodprop/ProdPropRespVO.java | 8 +- .../vo/prodprop/ProdPropSaveReqVO.java | 11 +- .../prodpropvalue/ProdPropValuePageReqVO.java | 9 +- .../vo/prodpropvalue/ProdPropValueRespVO.java | 8 +- .../prodpropvalue/ProdPropValueSaveReqVO.java | 6 +- .../ProdReservationConfigPageReqVO.java | 13 +- .../ProdReservationConfigRespVO.java | 10 +- .../ProdReservationConfigSaveReqVO.java | 10 +- .../ProdServiceAreaRelevancePageReqVO.java | 9 +- .../ProdServiceAreaRelevanceRespVO.java | 8 +- .../ProdServiceAreaRelevanceSaveReqVO.java | 6 +- .../ProdServiceAreasInfoVO.java | 7 +- .../ProdServiceAreasPageReqVO.java | 10 +- .../ProdServiceAreasRespVO.java | 10 +- .../ProdServiceAreasSaveReqVO.java | 7 +- .../ProdServiceOverAreaRulesPageReqVO.java | 15 +- .../ProdServiceOverAreaRulesRespVO.java | 10 +- .../ProdServiceOverAreaRulesSaveReqVO.java | 9 +- .../vo/prodtags/ProdTagsPageReqVO.java | 10 +- .../product/vo/prodtags/ProdTagsRespVO.java | 10 +- .../vo/prodtags/ProdTagsSaveReqVO.java | 6 +- .../ProductOrderLimitPageReqVO.java | 13 +- .../ProductOrderLimitRespVO.java | 10 +- .../ProductOrderLimitSaveReqVO.java | 9 +- .../ProdWeightRangePricesPageReqVO.java | 14 +- .../ProdWeightRangePricesRespVO.java | 11 +- .../ProdWeightRangePricesSaveReqVO.java | 11 +- .../vo/shopdetail/ShopDetailPageReqVO.java | 12 +- .../vo/shopdetail/ShopDetailRespVO.java | 10 +- .../vo/shopdetail/ShopDetailSaveReqVO.java | 7 +- .../api}/product/vo/sku/SkuExtendVO.java | 9 +- .../api}/product/vo/sku/SkuPageReqVO.java | 14 +- .../api}/product/vo/sku/SkuPropInfoVO.java | 6 +- .../api}/product/vo/sku/SkuPropVO.java | 6 +- .../api}/product/vo/sku/SkuRecycleBinVO.java | 5 +- .../api}/product/vo/sku/SkuRespVO.java | 10 +- .../api}/product/vo/sku/SkuSaveReqVO.java | 8 +- .../product/vo/sku/SkuServiceExtendVO.java | 10 +- .../SkuServiceDeliverPageReqVO.java | 14 +- .../SkuServiceDeliverRespVO.java | 11 +- .../SkuServiceDeliverSaveReqVO.java | 11 +- .../SkuServiceDetailsPageReqVO.java | 14 +- .../SkuServiceDetailsRespVO.java | 11 +- .../SkuServiceDetailsSaveReqVO.java | 11 +- .../SkuServiceMaterialPageReqVO.java | 13 +- .../SkuServiceMaterialRespVO.java | 10 +- .../SkuServiceMaterialSaveReqVO.java | 10 +- .../SkuServicesFormPageReqVO.java | 13 +- .../SkuServicesFormRespVO.java | 10 +- .../SkuServicesFormSaveReqVO.java | 10 +- .../SkuServiceTransportPageReqVO.java | 13 +- .../SkuServiceTransportRespVO.java | 10 +- .../SkuServiceTransportSaveReqVO.java | 10 +- .../general/StringListTypeHandler.java | 4 + .../cloud/product/api/CategoryApiImpl.java | 23 ++ .../controller/admin/CategoryController.java | 27 +- .../ProdAdditionalFeeDatesController.java | 8 +- .../ProdAdditionalFeePeriodsController.java | 8 +- .../controller/admin/ProdController.java | 12 +- .../ProdEmergencyResponseController.java | 8 +- ...dEmergencyResponseIntervalsController.java | 8 +- .../controller/admin/ProdPropController.java | 6 +- .../admin/ProdPropValueController.java | 8 +- .../ProdReservationConfigController.java | 8 +- .../ProdServiceAreaRelevanceController.java | 8 +- .../admin/ProdServiceAreasController.java | 8 +- .../ProdServiceOverAreaRulesController.java | 8 +- .../controller/admin/ProdTagsController.java | 8 +- .../ProdWeightRangePricesController.java | 8 +- .../admin/ProductOrderLimitController.java | 8 +- .../admin/ShopDetailController.java | 11 +- .../controller/admin/SkuController.java | 4 +- .../admin/SkuServiceDeliverController.java | 8 +- .../admin/SkuServiceDetailsController.java | 8 +- .../admin/SkuServiceMaterialController.java | 8 +- .../admin/SkuServiceTransportController.java | 8 +- .../admin/SkuServicesFormController.java | 8 +- .../cloud/product/mapper/CategoryMapper.java | 14 +- .../mapper/ProdAdditionalFeeDatesMapper.java | 2 +- .../ProdAdditionalFeePeriodsMapper.java | 2 +- .../ProdEmergencyResponseIntervalsMapper.java | 2 +- .../mapper/ProdEmergencyResponseMapper.java | 2 +- .../product/mapper/ProdExtendMapper.java | 4 +- .../cloud/product/mapper/ProdMapper.java | 32 ++- .../cloud/product/mapper/ProdPropMapper.java | 2 +- .../product/mapper/ProdPropValueMapper.java | 2 +- .../mapper/ProdReservationConfigMapper.java | 2 +- .../ProdServiceAreaRelevanceMapper.java | 2 +- .../mapper/ProdServiceAreasMapper.java | 2 +- .../ProdServiceOverAreaRulesMapper.java | 2 +- .../cloud/product/mapper/ProdTagsMapper.java | 2 +- .../mapper/ProdWeightRangePricesMapper.java | 2 +- .../mapper/ProductOrderLimitMapper.java | 2 +- .../product/mapper/ShopDetailMapper.java | 2 +- .../cloud/product/mapper/SkuMapper.java | 9 +- .../mapper/SkuServiceDeliverMapper.java | 2 +- .../mapper/SkuServiceDetailsMapper.java | 2 +- .../mapper/SkuServiceMaterialMapper.java | 2 +- .../mapper/SkuServiceTransportMapper.java | 2 +- .../product/mapper/SkuServicesFormMapper.java | 6 +- .../product/service/CategoryService.java | 14 +- .../ProdAdditionalFeeDatesService.java | 6 +- .../ProdAdditionalFeePeriodsService.java | 6 +- ...ProdEmergencyResponseIntervalsService.java | 6 +- .../service/ProdEmergencyResponseService.java | 6 +- .../product/service/ProdExtendService.java | 9 +- .../product/service/ProdPropService.java | 10 +- .../product/service/ProdPropValueService.java | 8 +- .../service/ProdReservationConfigService.java | 6 +- .../cloud/product/service/ProdService.java | 8 +- .../ProdServiceAreaRelevanceService.java | 6 +- .../service/ProdServiceAreasService.java | 8 +- .../ProdServiceOverAreaRulesService.java | 6 +- .../product/service/ProdTagsService.java | 6 +- .../service/ProdWeightRangePricesService.java | 6 +- .../service/ProductOrderLimitService.java | 6 +- .../product/service/ShopDetailService.java | 8 +- .../cloud/product/service/SkuService.java | 4 +- .../service/SkuServiceDeliverService.java | 6 +- .../service/SkuServiceDetailsService.java | 6 +- .../service/SkuServiceMaterialService.java | 6 +- .../service/SkuServiceTransportService.java | 6 +- .../service/SkuServicesFormService.java | 6 +- .../service/impl/CategoryServiceImpl.java | 18 +- .../ProdAdditionalFeeDatesServiceImpl.java | 6 +- .../ProdAdditionalFeePeriodsServiceImpl.java | 6 +- ...EmergencyResponseIntervalsServiceImpl.java | 6 +- .../ProdEmergencyResponseServiceImpl.java | 6 +- .../service/impl/ProdExtendServiceImpl.java | 4 +- .../service/impl/ProdPropServiceImpl.java | 12 +- .../impl/ProdPropValueServiceImpl.java | 8 +- .../ProdReservationConfigServiceImpl.java | 6 +- .../ProdServiceAreaRelevanceServiceImpl.java | 6 +- .../impl/ProdServiceAreasServiceImpl.java | 8 +- .../product/service/impl/ProdServiceImpl.java | 23 +- .../ProdServiceOverAreaRulesServiceImpl.java | 6 +- .../service/impl/ProdTagsServiceImpl.java | 6 +- .../ProdWeightRangePricesServiceImpl.java | 6 +- .../impl/ProductOrderLimitServiceImpl.java | 6 +- .../service/impl/ShopDetailServiceImpl.java | 8 +- .../impl/SkuServiceDeliverServiceImpl.java | 6 +- .../impl/SkuServiceDetailsServiceImpl.java | 6 +- .../product/service/impl/SkuServiceImpl.java | 5 +- .../impl/SkuServiceMaterialServiceImpl.java | 6 +- .../impl/SkuServiceTransportServiceImpl.java | 6 +- .../impl/SkuServicesFormServiceImpl.java | 6 +- .../mapper/product/CategoryMapper.xml | 19 ++ .../resources/mapper/product/ProdMapper.xml | 262 +++++++++++++++++- .../mapper/product/ProdPropMapper.xml | 2 +- .../resources/mapper/product/SkuMapper.xml | 4 +- .../mapper/product/SkuServicesFormMapper.xml | 18 +- tashow-module/tashow-module-system/pom.xml | 5 + .../cloud/system/SystemServerApplication.java | 2 + .../admin/prod/CategoryController.java | 41 +++ 201 files changed, 1321 insertions(+), 893 deletions(-) create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/CategoryApi.java rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/CategoryDO.java (74%) create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/CategoryDto.java rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdAdditionalFeeDatesDO.java (81%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdAdditionalFeePeriodsDO.java (81%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdDO.java (90%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdEmergencyResponseDO.java (81%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdEmergencyResponseIntervalsDO.java (81%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdExtendDO.java (80%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdPropDO.java (71%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdPropValueDO.java (78%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdReservationConfigDO.java (87%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdServiceAreaRelevanceDO.java (67%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdServiceAreasDO.java (72%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdServiceOverAreaRulesDO.java (78%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdTagsDO.java (69%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProdWeightRangePricesDO.java (77%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ProductOrderLimitDO.java (76%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/ShopDetailDO.java (90%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/SkuDO.java (90%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/SkuServiceDeliverDO.java (82%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/SkuServiceDetailsDO.java (84%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/SkuServiceMaterialDO.java (74%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/SkuServiceTransportDO.java (79%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/dto/SkuServicesFormDO.java (77%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo}/CategoryPageReqVO.java (88%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo}/CategoryRespVO.java (89%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo}/CategorySaveReqVO.java (78%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prod/ProdPageReqVO.java (98%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prod/ProdRespVO.java (98%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prod/ProdSaveReqVO.java (91%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prod/ProdServiceVO.java (82%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java (81%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java (89%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java (88%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java (76%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java (86%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java (85%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java (77%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java (81%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java (89%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java (86%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java (81%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java (89%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java (88%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodprop/ProdPropPageReqVO.java (84%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodprop/ProdPropRespVO.java (83%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodprop/ProdPropSaveReqVO.java (83%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodpropvalue/ProdPropValuePageReqVO.java (79%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodpropvalue/ProdPropValueRespVO.java (78%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java (80%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java (88%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java (93%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java (92%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java (67%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java (73%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java (77%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java (70%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java (84%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodserviceareas/ProdServiceAreasRespVO.java (79%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java (81%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java (78%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java (87%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java (85%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodtags/ProdTagsPageReqVO.java (82%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodtags/ProdTagsRespVO.java (77%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodtags/ProdTagsSaveReqVO.java (77%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java (76%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/productorderlimit/ProductOrderLimitRespVO.java (86%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java (85%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java (70%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java (83%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java (83%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/shopdetail/ShopDetailPageReqVO.java (95%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/shopdetail/ShopDetailRespVO.java (95%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/shopdetail/ShopDetailSaveReqVO.java (95%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/sku/SkuExtendVO.java (88%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/sku/SkuPageReqVO.java (60%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/sku/SkuPropInfoVO.java (70%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/sku/SkuPropVO.java (74%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/sku/SkuRecycleBinVO.java (80%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/sku/SkuRespVO.java (95%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/sku/SkuSaveReqVO.java (95%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/sku/SkuServiceExtendVO.java (74%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java (78%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java (88%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java (86%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java (82%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java (89%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java (87%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java (66%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java (78%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java (77%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicesform/SkuServicesFormPageReqVO.java (67%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicesform/SkuServicesFormRespVO.java (80%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java (80%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java (73%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicetransport/SkuServiceTransportRespVO.java (85%) rename {tashow-module/tashow-module-product/src/main/java/com/tashow/cloud => tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api}/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java (84%) create mode 100644 tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/api/CategoryApiImpl.java create mode 100644 tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/controller/admin/prod/CategoryController.java diff --git a/tashow-feign/tashow-product-api/pom.xml b/tashow-feign/tashow-product-api/pom.xml index 69de939..8c5746d 100644 --- a/tashow-feign/tashow-product-api/pom.xml +++ b/tashow-feign/tashow-product-api/pom.xml @@ -40,6 +40,46 @@ mybatis 3.5.13 + + + io.swagger + swagger-models + 1.6.2 + + + + io.swagger.core.v3 + swagger-core + 2.2.20 + + + + + io.swagger.core.v3 + swagger-models + 2.2.20 + + + + com.alibaba + easyexcel + 4.0.3 + + + org.mybatis + mybatis + 3.5.9 + + + com.baomidou + mybatis-plus-annotation + 3.5.9 + compile + + + com.tashow.cloud + tashow-data-mybatis + diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/CategoryApi.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/CategoryApi.java new file mode 100644 index 0000000..5a8f109 --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/CategoryApi.java @@ -0,0 +1,24 @@ +package com.tashow.cloud.productapi.api.product; + +import com.tashow.cloud.productapi.api.product.dto.CategoryDO; +import com.tashow.cloud.productapi.api.product.dto.CategoryDto; +import com.tashow.cloud.productapi.enums.ApiConstants; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory = +/** RPC 服务 - 参数配置 */ +public interface CategoryApi { + + String PREFIX = ApiConstants.PREFIX + "/category"; + + /** 根据参数键查询参数值 */ + @GetMapping(PREFIX + "/categoryList") + List categoryList(@RequestParam(value = "grade", required = false) Integer grade, + @RequestParam(value = "categoryId", required = false) Long categoryId, + @RequestParam(value = "categoryName", required = false) String categoryName, + @RequestParam(value = "status", required = false) Integer status); +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/CategoryDO.java similarity index 74% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/CategoryDO.java index 2fed06c..346dbe9 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/CategoryDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/CategoryDO.java @@ -1,11 +1,14 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import com.tashow.cloud.productapi.general.StringListTypeHandler; +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.util.List; /** * 产品类目 DO @@ -60,7 +63,8 @@ public class CategoryDO extends BaseDO { /** * 标签 */ - private String tag; + @TableField(typeHandler = StringListTypeHandler.class) + private List tag; /** * 排序 */ diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/CategoryDto.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/CategoryDto.java new file mode 100644 index 0000000..baac0ce --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/CategoryDto.java @@ -0,0 +1,72 @@ +package com.tashow.cloud.productapi.api.product.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.tashow.cloud.productapi.general.StringListTypeHandler; +import lombok.*; + +import java.util.List; + +/** + * 产品类目 DO + * + * @author 芋道源码 + */ +@Data + +public class CategoryDto { + + /** + * 类目ID + */ + private Long categoryId; + /** + * 店铺ID + */ + private Long shopId; + /** + * 父节点 + */ + private Long parentId; + + /** + * 父节名称 + */ + private String parentName; + + /** + * 产品类目名称 + */ + private String categoryName; + /** + * 类目图标 + */ + private String icon; + /** + * 类目的显示图片 + */ + private String pic; + /** + * 类目描述 + */ + private String description; + /** + * 标签 + */ + @TableField(typeHandler = StringListTypeHandler.class) + private List tag; + /** + * 排序 + */ + private Integer sort; + /** + * 默认是1,表示正常状态,0为下线状态 + */ + private Integer status; + /** + * 分类层级 1、2、3级 + */ + private Integer grade; + + + +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeeDatesDO.java similarity index 81% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeeDatesDO.java index 028dc50..a5722c6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeeDatesDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeeDatesDO.java @@ -1,12 +1,13 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.KeySequence; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.math.BigDecimal; /** * 特殊日期附加费用规则 DO diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeePeriodsDO.java similarity index 81% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeePeriodsDO.java index 023c048..2f3ec84 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdAdditionalFeePeriodsDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeePeriodsDO.java @@ -1,14 +1,13 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 特殊时段附加费用规则 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdDO.java similarity index 90% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdDO.java index f40f8e8..ac92c84 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdDO.java @@ -1,13 +1,14 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import com.tashow.cloud.productapi.general.StringListTypeHandler; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import com.tashow.cloud.productapi.general.StringListTypeHandler; +import lombok.*; + +import java.util.List; /** * 商品 DO diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseDO.java similarity index 81% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseDO.java index d93fb7d..2c03732 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseDO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 商品紧急响应服务设置 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseIntervalsDO.java similarity index 81% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseIntervalsDO.java index 3c20793..bdecbdb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdEmergencyResponseIntervalsDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseIntervalsDO.java @@ -1,14 +1,13 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 紧急响应时间区间设置 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdExtendDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdExtendDO.java similarity index 80% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdExtendDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdExtendDO.java index fe68815..d41b785 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdExtendDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdExtendDO.java @@ -1,11 +1,13 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.*; - /** * 属性规则 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropDO.java similarity index 71% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropDO.java index 856c7fa..660a13a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropDO.java @@ -1,10 +1,15 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableName; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import lombok.*; -import java.util.*; -import com.baomidou.mybatisplus.annotation.*; -import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import java.util.List; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 商品属性 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropValueDO.java similarity index 78% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropValueDO.java index 080c6f7..3b8c1bb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdPropValueDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropValueDO.java @@ -1,10 +1,10 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; import lombok.*; -import java.util.*; -import com.baomidou.mybatisplus.annotation.*; -import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 属性规则 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdReservationConfigDO.java similarity index 87% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdReservationConfigDO.java index a3aac02..abb344c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdReservationConfigDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdReservationConfigDO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 商品预约配置 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdServiceAreaRelevanceDO.java similarity index 67% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdServiceAreaRelevanceDO.java index e8f73c5..c9594bd 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreaRelevanceDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdServiceAreaRelevanceDO.java @@ -1,10 +1,10 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; import lombok.*; -import java.util.*; -import com.baomidou.mybatisplus.annotation.*; -import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 商品与服务区域关联 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreasDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdServiceAreasDO.java similarity index 72% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreasDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdServiceAreasDO.java index 8cbe2e9..2427959 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceAreasDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdServiceAreasDO.java @@ -1,11 +1,11 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 服务区域 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdServiceOverAreaRulesDO.java similarity index 78% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdServiceOverAreaRulesDO.java index f1c782a..774a691 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdServiceOverAreaRulesDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdServiceOverAreaRulesDO.java @@ -1,13 +1,13 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 超区规则 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdTagsDO.java similarity index 69% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdTagsDO.java index 0991c95..c29c5b8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdTagsDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdTagsDO.java @@ -1,11 +1,11 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 商品和标签管理 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdWeightRangePricesDO.java similarity index 77% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdWeightRangePricesDO.java index 83b3fb4..074e3c2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProdWeightRangePricesDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdWeightRangePricesDO.java @@ -1,13 +1,13 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 体重区间价格 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProductOrderLimitDO.java similarity index 76% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProductOrderLimitDO.java index 0aef51c..1fb7010 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ProductOrderLimitDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProductOrderLimitDO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 商品接单上限设置 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ShopDetailDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ShopDetailDO.java similarity index 90% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ShopDetailDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ShopDetailDO.java index 231b3c8..595af98 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/ShopDetailDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ShopDetailDO.java @@ -1,14 +1,13 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 店铺信息 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuDO.java similarity index 90% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuDO.java index f388d73..fa430d0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuDO.java @@ -1,17 +1,14 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; +import java.math.BigDecimal; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 单品SKU DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceDeliverDO.java similarity index 82% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceDeliverDO.java index 9fc4253..57ad3bc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDeliverDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceDeliverDO.java @@ -1,13 +1,13 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 服务交付方式 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceDetailsDO.java similarity index 84% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceDetailsDO.java index 4a67cc4..d08f625 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceDetailsDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceDetailsDO.java @@ -1,13 +1,13 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import lombok.*; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 服务详情 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceMaterialDO.java similarity index 74% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceMaterialDO.java index d41d9a3..70de6cc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceMaterialDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceMaterialDO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 服务物料详情 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceTransportDO.java similarity index 79% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceTransportDO.java index c894f64..584219b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServiceTransportDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServiceTransportDO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 服务遗体运输 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServicesFormDO.java similarity index 77% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServicesFormDO.java index adcb89e..35cb66f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/dto/SkuServicesFormDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuServicesFormDO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.dto; +package com.tashow.cloud.productapi.api.product.dto; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import com.baomidou.mybatisplus.annotation.*; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; - +import lombok.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; /** * 商品SKU扩展服务表单 DO * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/CategoryPageReqVO.java similarity index 88% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/CategoryPageReqVO.java index 5603b2f..551f9b8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/CategoryPageReqVO.java @@ -1,11 +1,14 @@ -package com.tashow.cloud.product.vo.category; +package com.tashow.cloud.productapi.api.product.vo; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; +import java.util.List; import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -34,7 +37,7 @@ public class CategoryPageReqVO extends PageParam { private String description; @Schema(description = "标签") - private String tag; + private List tag; @Schema(description = "排序") private Integer sort; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/CategoryRespVO.java similarity index 89% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/CategoryRespVO.java index b0c1d4d..83b2dae 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategoryRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/CategoryRespVO.java @@ -1,11 +1,12 @@ -package com.tashow.cloud.product.vo.category; +package com.tashow.cloud.productapi.api.product.vo; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; +import java.util.List; @Schema(description = "管理后台 - 产品类目 Response VO") @Data @@ -42,7 +43,7 @@ public class CategoryRespVO { @Schema(description = "标签") @ExcelProperty("标签") - private String tag; + private List tag; @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("排序") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/CategorySaveReqVO.java similarity index 78% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/CategorySaveReqVO.java index 84ef5c0..366df2d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/category/CategorySaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/CategorySaveReqVO.java @@ -1,9 +1,11 @@ -package com.tashow.cloud.product.vo.category; +package com.tashow.cloud.productapi.api.product.vo; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; @Schema(description = "管理后台 - 产品类目新增/修改 Request VO") @Data @@ -16,7 +18,7 @@ public class CategorySaveReqVO { private Long shopId; @Schema(description = "父节点", requiredMode = Schema.RequiredMode.REQUIRED, example = "16509") - @NotNull(message = "父节点不能为空") + //@NotNull(message = "父节点不能为空") private Long parentId; /** @@ -25,7 +27,7 @@ public class CategorySaveReqVO { private String parentName; @Schema(description = "产品类目名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五") - @NotEmpty(message = "产品类目名称不能为空") + //@NotEmpty(message = "产品类目名称不能为空") private String categoryName; @Schema(description = "类目图标") @@ -38,7 +40,7 @@ public class CategorySaveReqVO { private String description; @Schema(description = "标签") - private String tag; + private List tag; @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) private Integer sort; @@ -47,7 +49,7 @@ public class CategorySaveReqVO { private Integer status; @Schema(description = "分类层级 1级 2级 3级", requiredMode = Schema.RequiredMode.REQUIRED) - @NotNull(message = "分类层级不能为空") + //@NotNull(message = "分类层级不能为空") private Integer grade; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdPageReqVO.java similarity index 98% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdPageReqVO.java index 485806d..faa0880 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdPageReqVO.java @@ -1,4 +1,4 @@ -package com.tashow.cloud.product.vo.prod; +package com.tashow.cloud.productapi.api.product.vo.prod; import com.tashow.cloud.common.pojo.PageParam; import io.swagger.v3.oas.annotations.media.Schema; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRespVO.java similarity index 98% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRespVO.java index 655c9c7..a2d6298 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRespVO.java @@ -1,4 +1,4 @@ -package com.tashow.cloud.product.vo.prod; +package com.tashow.cloud.productapi.api.product.vo.prod; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdSaveReqVO.java similarity index 91% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdSaveReqVO.java index 5d1a827..9331648 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdSaveReqVO.java @@ -1,13 +1,11 @@ -package com.tashow.cloud.product.vo.prod; +package com.tashow.cloud.productapi.api.product.vo.prod; -import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; -import com.tashow.cloud.product.dto.SkuDO; -import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; -//import com.tashow.cloud.productapi.general.StringListTypeHandler; +import com.tashow.cloud.productapi.api.product.dto.SkuDO; +import com.tashow.cloud.productapi.api.product.vo.prodprop.ProdPropSaveReqVO; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import lombok.Data; -import org.apache.ibatis.type.TypeHandler; + import java.util.List; @Schema(description = "管理后台 - 商品新增/修改 Request VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java similarity index 82% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java index 25db6a4..d7292b2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prod/ProdServiceVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java @@ -1,14 +1,11 @@ -package com.tashow.cloud.product.vo.prod; +package com.tashow.cloud.productapi.api.product.vo.prod; -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import com.tashow.cloud.product.dto.*; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasInfoVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasInfoVO; +import com.tashow.cloud.productapi.api.product.dto.*; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.time.LocalDateTime; import java.util.List; @Schema(description = "商品服务配置 VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java similarity index 81% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java index 1d183f1..d5f251c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesPageReqVO.java @@ -1,14 +1,12 @@ -package com.tashow.cloud.product.vo.prodadditionalfeedates; +package com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.math.BigDecimal; @Schema(description = "管理后台 - 特殊日期附加费用规则分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java similarity index 89% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java index 9317208..80da4d7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesRespVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.prodadditionalfeedates; +package com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 特殊日期附加费用规则 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java similarity index 88% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java index 1032ad2..7503ace 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeedates/ProdAdditionalFeeDatesSaveReqVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.prodadditionalfeedates; +package com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; @Schema(description = "管理后台 - 特殊日期附加费用规则新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java similarity index 76% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java index b560c1e..f941465 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsPageReqVO.java @@ -1,14 +1,12 @@ -package com.tashow.cloud.product.vo.prodadditionalfeeperiods; +package com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.math.BigDecimal; @Schema(description = "管理后台 - 特殊时段附加费用规则分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java similarity index 86% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java index 9583f4e..e3e5e67 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.prodadditionalfeeperiods; +package com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 特殊时段附加费用规则 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java similarity index 85% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java index 2d0cecb..83d2b34 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.prodadditionalfeeperiods; +package com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; @Schema(description = "管理后台 - 特殊时段附加费用规则新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java similarity index 77% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java index e31cbe1..1673a4e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java @@ -1,14 +1,10 @@ -package com.tashow.cloud.product.vo.prodemergencyresponse; +package com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.TableId; -import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; -import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdEmergencyResponseIntervalsDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.time.LocalDateTime; import java.util.List; @Schema(description = "管理后台 - 商品紧急响应服务设置 Response VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java similarity index 81% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java index 1f8c1c1..f60e14a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java @@ -1,13 +1,12 @@ -package com.tashow.cloud.product.vo.prodemergencyresponse; +package com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.time.LocalDateTime; @Schema(description = "管理后台 - 商品紧急响应服务设置分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java similarity index 89% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java index dbeb629..8bfbab4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseRespVO.java @@ -1,11 +1,11 @@ -package com.tashow.cloud.product.vo.prodemergencyresponse; +package com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 商品紧急响应服务设置 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java similarity index 86% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java index 998c9ed..4098cbc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java @@ -1,10 +1,9 @@ -package com.tashow.cloud.product.vo.prodemergencyresponse; +package com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.time.LocalDateTime; @Schema(description = "管理后台 - 商品紧急响应服务设置新增/修改 Request VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java similarity index 81% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java index 9136648..63d8793 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java @@ -1,14 +1,13 @@ -package com.tashow.cloud.product.vo.prodemergencyresponseintervals; +package com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.math.BigDecimal; +import java.time.LocalDateTime; @Schema(description = "管理后台 - 紧急响应时间区间设置分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java similarity index 89% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java index dd9492e..efc64d4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java @@ -1,12 +1,12 @@ -package com.tashow.cloud.product.vo.prodemergencyresponseintervals; +package com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 紧急响应时间区间设置 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java similarity index 88% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java index daabe0f..2beaae8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java @@ -1,11 +1,11 @@ -package com.tashow.cloud.product.vo.prodemergencyresponseintervals; +package com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @Schema(description = "管理后台 - 紧急响应时间区间设置新增/修改 Request VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropPageReqVO.java similarity index 84% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropPageReqVO.java index 93ae248..1bb805d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropPageReqVO.java @@ -1,9 +1,10 @@ -package com.tashow.cloud.product.vo.prodprop; +package com.tashow.cloud.productapi.api.product.vo.prodprop; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; @Schema(description = "管理后台 - 商品属性分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropRespVO.java similarity index 83% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropRespVO.java index 0958d60..0917922 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropRespVO.java @@ -1,9 +1,9 @@ -package com.tashow.cloud.product.vo.prodprop; +package com.tashow.cloud.productapi.api.product.vo.prodprop; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import com.alibaba.excel.annotation.*; +import lombok.Data; @Schema(description = "管理后台 - 商品属性 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropSaveReqVO.java similarity index 83% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropSaveReqVO.java index ad5b971..aa2122d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodprop/ProdPropSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropSaveReqVO.java @@ -1,11 +1,12 @@ -package com.tashow.cloud.product.vo.prodprop; +package com.tashow.cloud.productapi.api.product.vo.prodprop; import com.baomidou.mybatisplus.annotation.TableField; -import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; @Schema(description = "管理后台 - 商品属性新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodpropvalue/ProdPropValuePageReqVO.java similarity index 79% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodpropvalue/ProdPropValuePageReqVO.java index 9449bbd..f0a69b3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValuePageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodpropvalue/ProdPropValuePageReqVO.java @@ -1,9 +1,10 @@ -package com.tashow.cloud.product.vo.prodpropvalue; +package com.tashow.cloud.productapi.api.product.vo.prodpropvalue; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; @Schema(description = "管理后台 - 属性规则分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodpropvalue/ProdPropValueRespVO.java similarity index 78% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodpropvalue/ProdPropValueRespVO.java index e8e2758..eba9eb2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodpropvalue/ProdPropValueRespVO.java @@ -1,9 +1,9 @@ -package com.tashow.cloud.product.vo.prodpropvalue; +package com.tashow.cloud.productapi.api.product.vo.prodpropvalue; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import com.alibaba.excel.annotation.*; +import lombok.Data; @Schema(description = "管理后台 - 属性规则 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java similarity index 80% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java index 908b528..6cefb94 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodpropvalue/ProdPropValueSaveReqVO.java @@ -1,9 +1,7 @@ -package com.tashow.cloud.product.vo.prodpropvalue; +package com.tashow.cloud.productapi.api.product.vo.prodpropvalue; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import lombok.Data; @Schema(description = "管理后台 - 属性规则新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java similarity index 88% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java index 637f866..6ae58b1 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java @@ -1,13 +1,12 @@ -package com.tashow.cloud.product.vo.prodreservationconfig; +package com.tashow.cloud.productapi.api.product.vo.prodreservationconfig; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.time.LocalDateTime; @Schema(description = "管理后台 - 商品预约配置分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java similarity index 93% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java index 8b0ad65..2eaff01 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java @@ -1,11 +1,11 @@ -package com.tashow.cloud.product.vo.prodreservationconfig; +package com.tashow.cloud.productapi.api.product.vo.prodreservationconfig; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 商品预约配置 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java similarity index 92% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java index e0a4298..61a0daf 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java @@ -1,10 +1,10 @@ -package com.tashow.cloud.product.vo.prodreservationconfig; +package com.tashow.cloud.productapi.api.product.vo.prodreservationconfig; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.time.LocalDateTime; @Schema(description = "管理后台 - 商品预约配置新增/修改 Request VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java similarity index 67% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java index 5db12e1..7eb3f03 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodservicearearelevance/ProdServiceAreaRelevancePageReqVO.java @@ -1,9 +1,10 @@ -package com.tashow.cloud.product.vo.prodservicearearelevance; +package com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; @Schema(description = "管理后台 - 商品与服务区域关联分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java similarity index 73% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java index d32d6a5..001a867 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceRespVO.java @@ -1,9 +1,9 @@ -package com.tashow.cloud.product.vo.prodservicearearelevance; +package com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import com.alibaba.excel.annotation.*; +import lombok.Data; @Schema(description = "管理后台 - 商品与服务区域关联 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java similarity index 77% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java index 4952162..d3d8da6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodservicearearelevance/ProdServiceAreaRelevanceSaveReqVO.java @@ -1,9 +1,7 @@ -package com.tashow.cloud.product.vo.prodservicearearelevance; +package com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import lombok.Data; @Schema(description = "管理后台 - 商品与服务区域关联新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java similarity index 70% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java index 3ec8a86..b2089ae 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasInfoVO.java @@ -1,15 +1,10 @@ -package com.tashow.cloud.product.vo.prodserviceareas; +package com.tashow.cloud.productapi.api.product.vo.prodserviceareas; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.TableId; -import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; -import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesRespVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; -import java.time.LocalDateTime; import java.util.List; @Schema(description = "管理后台 - 服务区域 Response VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java similarity index 84% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java index a8f653e..691a166 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasPageReqVO.java @@ -1,10 +1,12 @@ -package com.tashow.cloud.product.vo.prodserviceareas; +package com.tashow.cloud.productapi.api.product.vo.prodserviceareas; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasRespVO.java similarity index 79% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasRespVO.java index 90fb4f3..3cbbd92 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasRespVO.java @@ -1,11 +1,11 @@ -package com.tashow.cloud.product.vo.prodserviceareas; +package com.tashow.cloud.productapi.api.product.vo.prodserviceareas; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 服务区域 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java similarity index 81% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java index c63d605..a78387b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceareas/ProdServiceAreasSaveReqVO.java @@ -1,9 +1,8 @@ -package com.tashow.cloud.product.vo.prodserviceareas; +package com.tashow.cloud.productapi.api.product.vo.prodserviceareas; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; @Schema(description = "管理后台 - 服务区域新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java similarity index 78% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java index c509dfc..df89b7d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesPageReqVO.java @@ -1,14 +1,13 @@ -package com.tashow.cloud.product.vo.prodserviceoverarearules; +package com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.math.BigDecimal; +import java.time.LocalDateTime; @Schema(description = "管理后台 - 超区规则分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java similarity index 87% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java index a4f55b2..051e8bc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesRespVO.java @@ -1,12 +1,12 @@ -package com.tashow.cloud.product.vo.prodserviceoverarearules; +package com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 超区规则 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java similarity index 85% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java index e62ce66..2a27e6f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodserviceoverarearules/ProdServiceOverAreaRulesSaveReqVO.java @@ -1,11 +1,10 @@ -package com.tashow.cloud.product.vo.prodserviceoverarearules; +package com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @Schema(description = "管理后台 - 超区规则新增/修改 Request VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodtags/ProdTagsPageReqVO.java similarity index 82% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodtags/ProdTagsPageReqVO.java index 6bf6034..7481290 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodtags/ProdTagsPageReqVO.java @@ -1,10 +1,12 @@ -package com.tashow.cloud.product.vo.prodtags; +package com.tashow.cloud.productapi.api.product.vo.prodtags; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; + import java.time.LocalDateTime; import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodtags/ProdTagsRespVO.java similarity index 77% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodtags/ProdTagsRespVO.java index e4694bc..4bf33d3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodtags/ProdTagsRespVO.java @@ -1,11 +1,11 @@ -package com.tashow.cloud.product.vo.prodtags; +package com.tashow.cloud.productapi.api.product.vo.prodtags; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 商品和标签管理 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodtags/ProdTagsSaveReqVO.java similarity index 77% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodtags/ProdTagsSaveReqVO.java index a43c371..235fcb5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodtags/ProdTagsSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodtags/ProdTagsSaveReqVO.java @@ -1,9 +1,7 @@ -package com.tashow.cloud.product.vo.prodtags; +package com.tashow.cloud.productapi.api.product.vo.prodtags; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import lombok.Data; @Schema(description = "管理后台 - 商品和标签管理新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java similarity index 76% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java index 99ba638..e9133f0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/productorderlimit/ProductOrderLimitPageReqVO.java @@ -1,13 +1,12 @@ -package com.tashow.cloud.product.vo.productorderlimit; +package com.tashow.cloud.productapi.api.product.vo.productorderlimit; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.time.LocalDateTime; @Schema(description = "管理后台 - 商品接单上限设置分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/productorderlimit/ProductOrderLimitRespVO.java similarity index 86% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/productorderlimit/ProductOrderLimitRespVO.java index fd26956..4cada44 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/productorderlimit/ProductOrderLimitRespVO.java @@ -1,11 +1,11 @@ -package com.tashow.cloud.product.vo.productorderlimit; +package com.tashow.cloud.productapi.api.product.vo.productorderlimit; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; +import lombok.Data; + import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 商品接单上限设置 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java similarity index 85% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java index c7a5ead..1518f1b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/productorderlimit/ProductOrderLimitSaveReqVO.java @@ -1,10 +1,9 @@ -package com.tashow.cloud.product.vo.productorderlimit; +package com.tashow.cloud.productapi.api.product.vo.productorderlimit; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.time.LocalDateTime; @Schema(description = "管理后台 - 商品接单上限设置新增/修改 Request VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java similarity index 70% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java index 4b37d8a..3fb0f4e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodweightrangeprices/ProdWeightRangePricesPageReqVO.java @@ -1,14 +1,12 @@ -package com.tashow.cloud.product.vo.prodweightrangeprices; +package com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.math.BigDecimal; @Schema(description = "管理后台 - 体重区间价格分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java similarity index 83% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java index 4255795..9661f5b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodweightrangeprices/ProdWeightRangePricesRespVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.prodweightrangeprices; +package com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 体重区间价格 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java similarity index 83% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java index afeb57a..52e8bd6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodweightrangeprices/ProdWeightRangePricesSaveReqVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.prodweightrangeprices; +package com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; @Schema(description = "管理后台 - 体重区间价格新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/shopdetail/ShopDetailPageReqVO.java similarity index 95% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/shopdetail/ShopDetailPageReqVO.java index 939d6a7..4f7d3ec 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/shopdetail/ShopDetailPageReqVO.java @@ -1,11 +1,13 @@ -package com.tashow.cloud.product.vo.shopdetail; +package com.tashow.cloud.productapi.api.product.vo.shopdetail; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import java.math.BigDecimal; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; import java.time.LocalDateTime; import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/shopdetail/ShopDetailRespVO.java similarity index 95% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/shopdetail/ShopDetailRespVO.java index 9278140..e2f0804 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/shopdetail/ShopDetailRespVO.java @@ -1,12 +1,12 @@ -package com.tashow.cloud.product.vo.shopdetail; +package com.tashow.cloud.productapi.api.product.vo.shopdetail; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 店铺信息 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/shopdetail/ShopDetailSaveReqVO.java similarity index 95% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/shopdetail/ShopDetailSaveReqVO.java index 5d64c4e..d353971 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/shopdetail/ShopDetailSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/shopdetail/ShopDetailSaveReqVO.java @@ -1,9 +1,8 @@ -package com.tashow.cloud.product.vo.shopdetail; +package com.tashow.cloud.productapi.api.product.vo.shopdetail; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import lombok.Data; + import java.math.BigDecimal; @Schema(description = "管理后台 - 店铺信息新增/修改 Request VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuExtendVO.java similarity index 88% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuExtendVO.java index 3d54616..cea9a38 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuExtendVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuExtendVO.java @@ -1,8 +1,9 @@ -package com.tashow.cloud.product.vo.sku; +package com.tashow.cloud.productapi.api.product.vo.sku; -import com.tashow.cloud.product.dto.*; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasInfoVO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceTransportDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPageReqVO.java similarity index 60% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPageReqVO.java index ad97d4b..22bdfbb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPageReqVO.java @@ -1,14 +1,10 @@ -package com.tashow.cloud.product.vo.sku; +package com.tashow.cloud.productapi.api.product.vo.sku; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; @Schema(description = "管理后台 - 单品SKU分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropInfoVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPropInfoVO.java similarity index 70% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropInfoVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPropInfoVO.java index 0d301eb..2b03b8f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropInfoVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPropInfoVO.java @@ -1,8 +1,6 @@ -package com.tashow.cloud.product.vo.sku; +package com.tashow.cloud.productapi.api.product.vo.sku; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.dto.SkuDO; -import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPropVO.java similarity index 74% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPropVO.java index 04a4983..c91cd39 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuPropVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPropVO.java @@ -1,7 +1,7 @@ -package com.tashow.cloud.product.vo.sku; +package com.tashow.cloud.productapi.api.product.vo.sku; -import com.tashow.cloud.product.dto.SkuDO; -import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.SkuDO; +import com.tashow.cloud.productapi.api.product.vo.prodprop.ProdPropSaveReqVO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRecycleBinVO.java similarity index 80% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRecycleBinVO.java index 9b0008b..f1c14fb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRecycleBinVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRecycleBinVO.java @@ -1,13 +1,10 @@ -package com.tashow.cloud.product.vo.sku; +package com.tashow.cloud.productapi.api.product.vo.sku; import com.fasterxml.jackson.annotation.JsonFormat; -import com.tashow.cloud.product.dto.ProdPropDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import java.time.LocalDateTime; import java.util.Date; -import java.util.List; @Data public class SkuRecycleBinVO { diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRespVO.java similarity index 95% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRespVO.java index 7f4f9e5..ecebf18 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRespVO.java @@ -1,12 +1,12 @@ -package com.tashow.cloud.product.vo.sku; +package com.tashow.cloud.productapi.api.product.vo.sku; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 单品SKU Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java similarity index 95% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java index fef9f51..2c31958 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java @@ -1,9 +1,9 @@ -package com.tashow.cloud.product.vo.sku; +package com.tashow.cloud.productapi.api.product.vo.sku; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.math.BigDecimal; @Schema(description = "管理后台 - 单品SKU新增/修改 Request VO") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuServiceExtendVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuServiceExtendVO.java similarity index 74% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuServiceExtendVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuServiceExtendVO.java index 3ad2a8c..c273839 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/sku/SkuServiceExtendVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuServiceExtendVO.java @@ -1,9 +1,9 @@ -package com.tashow.cloud.product.vo.sku; +package com.tashow.cloud.productapi.api.product.vo.sku; -import com.tashow.cloud.product.dto.SkuServiceDeliverDO; -import com.tashow.cloud.product.dto.SkuServiceDetailsDO; -import com.tashow.cloud.product.dto.SkuServiceMaterialDO; -import com.tashow.cloud.product.dto.SkuServiceTransportDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceTransportDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java similarity index 78% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java index 0468fb4..435b059 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedeliver/SkuServiceDeliverPageReqVO.java @@ -1,14 +1,12 @@ -package com.tashow.cloud.product.vo.skuservicedeliver; +package com.tashow.cloud.productapi.api.product.vo.skuservicedeliver; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.math.BigDecimal; @Schema(description = "管理后台 - 服务交付方式分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java similarity index 88% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java index 1b47003..09d3353 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedeliver/SkuServiceDeliverRespVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.skuservicedeliver; +package com.tashow.cloud.productapi.api.product.vo.skuservicedeliver; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 服务交付方式 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java similarity index 86% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java index 51439f5..e431f23 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedeliver/SkuServiceDeliverSaveReqVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.skuservicedeliver; +package com.tashow.cloud.productapi.api.product.vo.skuservicedeliver; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; @Schema(description = "管理后台 - 服务交付方式新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java similarity index 82% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java index 6a43e34..b0fc298 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedetails/SkuServiceDetailsPageReqVO.java @@ -1,14 +1,12 @@ -package com.tashow.cloud.product.vo.skuservicedetails; +package com.tashow.cloud.productapi.api.product.vo.skuservicedetails; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import java.math.BigDecimal; @Schema(description = "管理后台 - 服务详情分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java similarity index 89% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java index 788df13..e7209f7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedetails/SkuServiceDetailsRespVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.skuservicedetails; +package com.tashow.cloud.productapi.api.product.vo.skuservicedetails; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 服务详情 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java similarity index 87% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java index d0d39d0..72e359c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicedetails/SkuServiceDetailsSaveReqVO.java @@ -1,12 +1,11 @@ -package com.tashow.cloud.product.vo.skuservicedetails; +package com.tashow.cloud.productapi.api.product.vo.skuservicedetails; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + import java.math.BigDecimal; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; @Schema(description = "管理后台 - 服务详情新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java similarity index 66% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java index 28fda2a..fb32419 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicematerial/SkuServiceMaterialPageReqVO.java @@ -1,13 +1,10 @@ -package com.tashow.cloud.product.vo.skuservicematerial; +package com.tashow.cloud.productapi.api.product.vo.skuservicematerial; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; @Schema(description = "管理后台 - 服务物料详情分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java similarity index 78% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java index d0d521e..8535534 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicematerial/SkuServiceMaterialRespVO.java @@ -1,11 +1,9 @@ -package com.tashow.cloud.product.vo.skuservicematerial; +package com.tashow.cloud.productapi.api.product.vo.skuservicematerial; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; +import lombok.Data; @Schema(description = "管理后台 - 服务物料详情 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java similarity index 77% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java index 48baae7..142a28f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicematerial/SkuServiceMaterialSaveReqVO.java @@ -1,11 +1,9 @@ -package com.tashow.cloud.product.vo.skuservicematerial; +package com.tashow.cloud.productapi.api.product.vo.skuservicematerial; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; @Schema(description = "管理后台 - 服务物料详情新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicesform/SkuServicesFormPageReqVO.java similarity index 67% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicesform/SkuServicesFormPageReqVO.java index 37cc8e7..fe86b67 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicesform/SkuServicesFormPageReqVO.java @@ -1,13 +1,10 @@ -package com.tashow.cloud.product.vo.skuservicesform; +package com.tashow.cloud.productapi.api.product.vo.skuservicesform; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; @Schema(description = "管理后台 - 商品SKU扩展服务表单分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicesform/SkuServicesFormRespVO.java similarity index 80% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicesform/SkuServicesFormRespVO.java index 72e2d88..6bcd051 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicesform/SkuServicesFormRespVO.java @@ -1,11 +1,9 @@ -package com.tashow.cloud.product.vo.skuservicesform; +package com.tashow.cloud.productapi.api.product.vo.skuservicesform; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; +import lombok.Data; @Schema(description = "管理后台 - 商品SKU扩展服务表单 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java similarity index 80% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java index 0a4aacc..766e334 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicesform/SkuServicesFormSaveReqVO.java @@ -1,11 +1,9 @@ -package com.tashow.cloud.product.vo.skuservicesform; +package com.tashow.cloud.productapi.api.product.vo.skuservicesform; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; @Schema(description = "管理后台 - 商品SKU扩展服务表单新增/修改 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java similarity index 73% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java index e8aefab..f9870f2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicetransport/SkuServiceTransportPageReqVO.java @@ -1,13 +1,10 @@ -package com.tashow.cloud.product.vo.skuservicetransport; +package com.tashow.cloud.productapi.api.product.vo.skuservicetransport; -import lombok.*; -import java.util.*; -import io.swagger.v3.oas.annotations.media.Schema; import com.tashow.cloud.common.pojo.PageParam; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; - -import static com.tashow.cloud.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; @Schema(description = "管理后台 - 服务遗体运输分页 Request VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicetransport/SkuServiceTransportRespVO.java similarity index 85% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicetransport/SkuServiceTransportRespVO.java index 2cf0458..3098371 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicetransport/SkuServiceTransportRespVO.java @@ -1,11 +1,9 @@ -package com.tashow.cloud.product.vo.skuservicetransport; +package com.tashow.cloud.productapi.api.product.vo.skuservicetransport; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; -import com.alibaba.excel.annotation.*; +import lombok.Data; @Schema(description = "管理后台 - 服务遗体运输 Response VO") @Data diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java similarity index 84% rename from tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java rename to tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java index bdce9d8..18e9dba 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/skuservicetransport/SkuServiceTransportSaveReqVO.java @@ -1,11 +1,9 @@ -package com.tashow.cloud.product.vo.skuservicetransport; +package com.tashow.cloud.productapi.api.product.vo.skuservicetransport; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.*; -import java.util.*; -import jakarta.validation.constraints.*; -import org.springframework.format.annotation.DateTimeFormat; -import java.time.LocalDateTime; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; @Schema(description = "管理后台 - 服务遗体运输新增/修改 Request VO") @Data diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/general/StringListTypeHandler.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/general/StringListTypeHandler.java index 40472f1..8a5a612 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/general/StringListTypeHandler.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/general/StringListTypeHandler.java @@ -2,6 +2,8 @@ package com.tashow.cloud.productapi.general; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; +import org.apache.ibatis.type.MappedJdbcTypes; +import org.apache.ibatis.type.MappedTypes; import java.sql.CallableStatement; import java.sql.PreparedStatement; @@ -14,6 +16,8 @@ import java.util.List; /** * 处理 List 与数据库逗号分隔字符串之间的转换 */ +@MappedTypes(List.class) +@MappedJdbcTypes(JdbcType.VARCHAR) public class StringListTypeHandler extends BaseTypeHandler> { @Override diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/api/CategoryApiImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/api/CategoryApiImpl.java new file mode 100644 index 0000000..399ae38 --- /dev/null +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/api/CategoryApiImpl.java @@ -0,0 +1,23 @@ +package com.tashow.cloud.product.api; + +import com.tashow.cloud.productapi.api.product.dto.CategoryDO; +import com.tashow.cloud.product.service.CategoryService; +import com.tashow.cloud.productapi.api.product.CategoryApi; +import com.tashow.cloud.productapi.api.product.dto.CategoryDto; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; +import java.util.List; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class CategoryApiImpl implements CategoryApi { + + @Resource + private CategoryService categoryService; + + @Override + public List categoryList(Integer grade, Long categoryId,String categoryName, Integer status) { + return categoryService.categoryList(grade, categoryId,categoryName, status); + } +} diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/CategoryController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/CategoryController.java index 691d628..b06eee1 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/CategoryController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/CategoryController.java @@ -2,9 +2,10 @@ package com.tashow.cloud.product.controller.admin; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.product.dto.CategoryDO; +import com.tashow.cloud.productapi.api.product.dto.CategoryDO; import com.tashow.cloud.product.service.CategoryService; -import com.tashow.cloud.product.vo.category.CategorySaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.CategoryDto; +import com.tashow.cloud.productapi.api.product.vo.CategorySaveReqVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; @@ -19,7 +20,7 @@ import static com.tashow.cloud.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 产品类目") @RestController -@RequestMapping("/category") +@RequestMapping("/product/category") @Validated public class CategoryController { @@ -32,23 +33,11 @@ public class CategoryController { */ @PermitAll @GetMapping("/categoryList") - public CommonResult> categoryList( @RequestParam(value = "grade", required = false) Integer grade, + public CommonResult> categoryList(@RequestParam(value = "grade", required = false) Integer grade, @RequestParam(value = "categoryId", required = false) Long categoryId, + @RequestParam(value = "categoryName", required = false) String categoryName, @RequestParam(value = "status", required = false) Integer status) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - //TODO 获取当前登录用户 - wrapper.eq(CategoryDO::getShopId, 1L); - if(grade != null) { - wrapper.eq(CategoryDO::getGrade, grade); - } - if(categoryId != null) { - wrapper.eq(CategoryDO::getCategoryId, categoryId); - } - if (status != null){ - wrapper.eq(CategoryDO::getStatus, status); - } - List categoryMenuList = categoryService.list(wrapper); - return success(categoryMenuList); + return success(categoryService.categoryList(grade, categoryId,categoryName, status)); } @PostMapping("/create") @Operation(summary = "创建产品类目") @@ -60,7 +49,7 @@ public class CategoryController { @PutMapping("/update") @Operation(summary = "更新产品类目") @PermitAll - public CommonResult updateCategory(@Valid @RequestBody CategorySaveReqVO updateReqVO) { + public CommonResult updateCategory(@RequestBody CategorySaveReqVO updateReqVO) { categoryService.updateCategory(updateReqVO); return success(true); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeeDatesController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeeDatesController.java index 9e859a6..cac5ac5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeeDatesController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeeDatesController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdAdditionalFeeDatesDO; +import com.tashow.cloud.productapi.api.product.dto.ProdAdditionalFeeDatesDO; import com.tashow.cloud.product.service.ProdAdditionalFeeDatesService; -import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; -import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesRespVO; -import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeePeriodsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeePeriodsController.java index d2dc03e..ad729e6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeePeriodsController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdAdditionalFeePeriodsController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdAdditionalFeePeriodsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdAdditionalFeePeriodsDO; import com.tashow.cloud.product.service.ProdAdditionalFeePeriodsService; -import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; -import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsRespVO; -import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java index 3b3afe5..4349071 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java @@ -2,11 +2,11 @@ package com.tashow.cloud.product.controller.admin; import com.tashow.cloud.common.pojo.CommonResult; import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.product.dto.ProdDO; +import com.tashow.cloud.productapi.api.product.dto.ProdDO; import com.tashow.cloud.product.service.ProdService; -import com.tashow.cloud.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; -import com.tashow.cloud.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -20,7 +20,7 @@ import static com.tashow.cloud.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 商品") @RestController -@RequestMapping("/prod") +@RequestMapping("/product/prod") @Validated public class ProdController { @@ -52,7 +52,7 @@ public class ProdController { return success(true); } - @GetMapping("/get") + @GetMapping("/getProdService") @Operation(summary = "获得商品服务信息") @Parameter(name = "prodId", description = "商品id", required = true, example = "1024") @PermitAll diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseController.java index 3c1e133..c84de7f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; +import com.tashow.cloud.productapi.api.product.dto.ProdEmergencyResponseDO; import com.tashow.cloud.product.service.ProdEmergencyResponseService; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseRespVO; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyResponseRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseIntervalsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseIntervalsController.java index 38391ab..da364ac 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseIntervalsController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdEmergencyResponseIntervalsController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdEmergencyResponseIntervalsDO; import com.tashow.cloud.product.service.ProdEmergencyResponseIntervalsService; -import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; -import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsRespVO; -import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropController.java index 78b147a..f9a4924 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropController.java @@ -3,11 +3,11 @@ package com.tashow.cloud.product.controller.admin; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.tashow.cloud.common.pojo.CommonResult; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropValueService; -import com.tashow.cloud.product.vo.prodprop.ProdPropRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodprop.ProdPropRespVO; import com.tashow.cloud.productapi.enums.ProdPropRule; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropValueController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropValueController.java index 19866f3..cd2e549 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropValueController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdPropValueController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import com.tashow.cloud.product.service.ProdPropValueService; -import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValuePageReqVO; -import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueRespVO; -import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProdPropValuePageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProdPropValueRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProdPropValueSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdReservationConfigController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdReservationConfigController.java index 3baac44..99091c6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdReservationConfigController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdReservationConfigController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdReservationConfigDO; +import com.tashow.cloud.productapi.api.product.dto.ProdReservationConfigDO; import com.tashow.cloud.product.service.ProdReservationConfigService; -import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; -import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigRespVO; -import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationConfigRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreaRelevanceController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreaRelevanceController.java index 5f66389..880eb54 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreaRelevanceController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreaRelevanceController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceAreaRelevanceDO; import com.tashow.cloud.product.service.ProdServiceAreaRelevanceService; -import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; -import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceRespVO; -import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreasController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreasController.java index 5af8b51..ba61dd9 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreasController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceAreasController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdServiceAreasDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceAreasDO; import com.tashow.cloud.product.service.ProdServiceAreasService; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasRespVO; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceOverAreaRulesController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceOverAreaRulesController.java index ef961d1..11ff7de 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceOverAreaRulesController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdServiceOverAreaRulesController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceOverAreaRulesDO; import com.tashow.cloud.product.service.ProdServiceOverAreaRulesService; -import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; -import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesRespVO; -import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdTagsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdTagsController.java index 0d2aaea..e0e1d06 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdTagsController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdTagsController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdTagsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdTagsDO; import com.tashow.cloud.product.service.ProdTagsService; -import com.tashow.cloud.product.vo.prodtags.ProdTagsPageReqVO; -import com.tashow.cloud.product.vo.prodtags.ProdTagsRespVO; -import com.tashow.cloud.product.vo.prodtags.ProdTagsSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodtags.ProdTagsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodtags.ProdTagsRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodtags.ProdTagsSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdWeightRangePricesController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdWeightRangePricesController.java index 274dcd9..a3e91f5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdWeightRangePricesController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdWeightRangePricesController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProdWeightRangePricesDO; +import com.tashow.cloud.productapi.api.product.dto.ProdWeightRangePricesDO; import com.tashow.cloud.product.service.ProdWeightRangePricesService; -import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; -import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesRespVO; -import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices.ProdWeightRangePricesRespVO; +import com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProductOrderLimitController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProductOrderLimitController.java index ea67554..00d8b9e 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProductOrderLimitController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProductOrderLimitController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ProductOrderLimitDO; +import com.tashow.cloud.productapi.api.product.dto.ProductOrderLimitDO; import com.tashow.cloud.product.service.ProductOrderLimitService; -import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitPageReqVO; -import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitRespVO; -import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.productorderlimit.ProductOrderLimitPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.productorderlimit.ProductOrderLimitRespVO; +import com.tashow.cloud.productapi.api.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ShopDetailController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ShopDetailController.java index 5f97c1a..4f9c6ad 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ShopDetailController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ShopDetailController.java @@ -5,11 +5,14 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.ShopDetailDO; +import com.tashow.cloud.productapi.api.product.dto.ShopDetailDO; import com.tashow.cloud.product.service.ShopDetailService; -import com.tashow.cloud.product.vo.shopdetail.ShopDetailPageReqVO; -import com.tashow.cloud.product.vo.shopdetail.ShopDetailRespVO; -import com.tashow.cloud.product.vo.shopdetail.ShopDetailSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.shopdetail +.ShopDetailPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.shopdetail +.ShopDetailRespVO; +import com.tashow.cloud.productapi.api.product.vo.shopdetail +.ShopDetailSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java index fb293f3..e0c3ba5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java @@ -3,13 +3,13 @@ package com.tashow.cloud.product.controller.admin; import com.tashow.cloud.common.pojo.CommonResult; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; -import com.tashow.cloud.product.dto.*; +import com.tashow.cloud.productapi.api.product.dto.*; import com.tashow.cloud.product.mapper.SkuMapper; import com.tashow.cloud.product.service.ProdExtendService; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.SkuService; -import com.tashow.cloud.product.vo.sku.*; +import com.tashow.cloud.productapi.api.product.vo.sku.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDeliverController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDeliverController.java index 70366c8..43480a7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDeliverController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDeliverController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDeliverDO; import com.tashow.cloud.product.service.SkuServiceDeliverService; -import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; -import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverRespVO; -import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedeliver.SkuServiceDeliverRespVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDetailsController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDetailsController.java index 58a876d..9de48e6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDetailsController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceDetailsController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDetailsDO; import com.tashow.cloud.product.service.SkuServiceDetailsService; -import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; -import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsRespVO; -import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedetails.SkuServiceDetailsRespVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceMaterialController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceMaterialController.java index fc4d8d8..055e2c8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceMaterialController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceMaterialController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceMaterialDO; import com.tashow.cloud.product.service.SkuServiceMaterialService; -import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; -import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialRespVO; -import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicematerial.SkuServiceMaterialRespVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceTransportController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceTransportController.java index d9dd273..5c818b5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceTransportController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServiceTransportController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.SkuServiceTransportDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceTransportDO; import com.tashow.cloud.product.service.SkuServiceTransportService; -import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; -import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportRespVO; -import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicetransport.SkuServiceTransportRespVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServicesFormController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServicesFormController.java index 14c7ba5..0459b16 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServicesFormController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuServicesFormController.java @@ -5,11 +5,11 @@ import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.util.object.BeanUtils; import com.tashow.cloud.excel.excel.core.util.ExcelUtils; -import com.tashow.cloud.product.dto.SkuServicesFormDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServicesFormDO; import com.tashow.cloud.product.service.SkuServicesFormService; -import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormPageReqVO; -import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormRespVO; -import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicesform.SkuServicesFormPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicesform.SkuServicesFormRespVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicesform.SkuServicesFormSaveReqVO; import com.tashow.cloud.web.apilog.core.annotation.ApiAccessLog; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java index 290dda0..ccaff7d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/CategoryMapper.java @@ -5,9 +5,10 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.CategoryDO; +import com.tashow.cloud.productapi.api.product.dto.CategoryDO; +import com.tashow.cloud.productapi.api.product.dto.CategoryDto; import org.apache.ibatis.annotations.Mapper; - +import org.apache.ibatis.annotations.Param; /** * 产品类目 Mapper * @@ -16,6 +17,13 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface CategoryMapper extends BaseMapperX { - + /** + * 根据条件查询类目列表 + */ + List selectCategoryList(@Param("grade") Integer grade, + @Param("categoryId") Long categoryId, + @Param("categoryName") String categoryName, + @Param("status") Integer status, + @Param("shopId") Long shopId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeeDatesMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeeDatesMapper.java index 515e425..64af0b7 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeeDatesMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeeDatesMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdAdditionalFeeDatesDO; +import com.tashow.cloud.productapi.api.product.dto.ProdAdditionalFeeDatesDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeePeriodsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeePeriodsMapper.java index 2a2859c..3a97ed5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeePeriodsMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdAdditionalFeePeriodsMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdAdditionalFeePeriodsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdAdditionalFeePeriodsDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java index 6fee361..a433d92 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseIntervalsMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdEmergencyResponseIntervalsDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseMapper.java index 3d0bbbd..d4a1045 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdEmergencyResponseMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; +import com.tashow.cloud.productapi.api.product.dto.ProdEmergencyResponseDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdExtendMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdExtendMapper.java index 90fe399..6c8d0df 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdExtendMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdExtendMapper.java @@ -1,8 +1,8 @@ package com.tashow.cloud.product.mapper; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdExtendDO; -import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.ProdExtendDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java index 4748f03..12f8186 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java @@ -7,12 +7,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.*; -import com.tashow.cloud.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.product.vo.prod.ProdServiceVO; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasInfoVO; -import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.productapi.api.product.dto.*; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -27,12 +24,21 @@ public interface ProdMapper extends BaseMapperX { IPage getProdPageList(Page page, ProdPageReqVO reqVO); ProdServiceVO selectProdService(@Param("prodId") Long prodId - ,@Param("regionSwitch") Integer regionSwitch - ,@Param("reservationSwitch") Integer reservationSwitch - ,@Param("emergencySwitch") Integer emergencySwitch - ,@Param("orderLimitSwitch") Integer orderLimitSwitch - ,@Param("additionalSwitch") Integer additionalSwitch - ,@Param("additionalFeeSwitch") Integer additionalFeeSwitch - ,@Param("weightSwitch") Integer weightSwitch + , @Param("regionSwitch") Integer regionSwitch + , @Param("reservationSwitch") Integer reservationSwitch + , @Param("emergencySwitch") Integer emergencySwitch + , @Param("orderLimitSwitch") Integer orderLimitSwitch + , @Param("additionalSwitch") Integer additionalSwitch + , @Param("additionalFeeSwitch") Integer additionalFeeSwitch + , @Param("weightSwitch") Integer weightSwitch ); + + ProdServiceVO selectProdServiceInfo(@Param("prodId") Long prodId + , @Param("reservationSwitch") Integer reservationSwitch + , @Param("emergencySwitch") Integer emergencySwitch + , @Param("orderLimitSwitch") Integer orderLimitSwitch + , @Param("additionalSwitch") Integer additionalSwitch + , @Param("additionalFeeSwitch") Integer additionalFeeSwitch + , @Param("weightSwitch") Integer weightSwitch + ); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java index e066671..262a721 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdPropDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java index 53cf230..20a24b5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdReservationConfigMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdReservationConfigMapper.java index c6c612a..a7bbe67 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdReservationConfigMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdReservationConfigMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdReservationConfigDO; +import com.tashow.cloud.productapi.api.product.dto.ProdReservationConfigDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java index 61a2a7f..c69fe33 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreaRelevanceMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceAreaRelevanceDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreasMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreasMapper.java index aa4c1a9..d94d885 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreasMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceAreasMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdServiceAreasDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceAreasDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceOverAreaRulesMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceOverAreaRulesMapper.java index a1bb897..a930140 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceOverAreaRulesMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdServiceOverAreaRulesMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceOverAreaRulesDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdTagsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdTagsMapper.java index d33c3b7..2368366 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdTagsMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdTagsMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdTagsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdTagsDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdWeightRangePricesMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdWeightRangePricesMapper.java index 88a48b9..a941bf3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdWeightRangePricesMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdWeightRangePricesMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdWeightRangePricesDO; +import com.tashow.cloud.productapi.api.product.dto.ProdWeightRangePricesDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProductOrderLimitMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProductOrderLimitMapper.java index 6ac35f1..766d8e4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProductOrderLimitMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProductOrderLimitMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProductOrderLimitDO; +import com.tashow.cloud.productapi.api.product.dto.ProductOrderLimitDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ShopDetailMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ShopDetailMapper.java index a9cc1f3..498f24b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ShopDetailMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ShopDetailMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ShopDetailDO; +import com.tashow.cloud.productapi.api.product.dto.ShopDetailDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java index 691a05c..c51590b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java @@ -4,14 +4,9 @@ import java.util.*; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.ProdDO; -import com.tashow.cloud.product.dto.SkuDO; -import com.tashow.cloud.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.product.vo.sku.SkuRecycleBinVO; -import io.swagger.v3.oas.annotations.media.Schema; +import com.tashow.cloud.productapi.api.product.dto.SkuDO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java index 38a1ff1..95a23b6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDeliverMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDeliverDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java index 31e2c00..34ca4e3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceDetailsMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDetailsDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java index be96935..9d4052b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceMaterialMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceMaterialDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java index 4432bb7..2c55645 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServiceTransportMapper.java @@ -5,7 +5,7 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.SkuServiceTransportDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceTransportDO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java index a12f272..cf5e6a6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuServicesFormMapper.java @@ -5,9 +5,9 @@ import java.util.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; -import com.tashow.cloud.product.dto.SkuDO; -import com.tashow.cloud.product.dto.SkuServicesFormDO; -import com.tashow.cloud.product.vo.sku.SkuServiceExtendVO; +import com.tashow.cloud.productapi.api.product.dto.SkuDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServicesFormDO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuServiceExtendVO; import org.apache.ibatis.annotations.Mapper; /** diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java index bd6500f..b9092f2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/CategoryService.java @@ -3,13 +3,15 @@ package com.tashow.cloud.product.service; import java.util.*; import com.baomidou.mybatisplus.extension.service.IService; -import com.tashow.cloud.product.dto.CategoryDO; -import com.tashow.cloud.product.dto.ProdPropValueDO; -import com.tashow.cloud.product.vo.category.CategoryPageReqVO; -import com.tashow.cloud.product.vo.category.CategorySaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.CategoryDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.CategoryDto; +import com.tashow.cloud.productapi.api.product.vo.CategoryPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.CategorySaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; +import org.springframework.web.bind.annotation.RequestParam; /** * 产品类目 Service 接口 @@ -18,6 +20,10 @@ import com.tashow.cloud.common.pojo.PageParam; */ public interface CategoryService extends IService { + + List categoryList(Integer grade, Long categoryId,String categoryName, Integer status); + + /** * 创建产品类目 * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeeDatesService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeeDatesService.java index b4f15ce..0c7749b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeeDatesService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeeDatesService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdAdditionalFeeDatesDO; -import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; -import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdAdditionalFeeDatesDO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeePeriodsService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeePeriodsService.java index cad4817..9ee9afe 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeePeriodsService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdAdditionalFeePeriodsService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdAdditionalFeePeriodsDO; -import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; -import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdAdditionalFeePeriodsDO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseIntervalsService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseIntervalsService.java index 3a1fc1d..840182c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseIntervalsService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseIntervalsService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; -import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; -import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdEmergencyResponseIntervalsDO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseService.java index d53c836..3da93b2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdEmergencyResponseService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdEmergencyResponseDO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdExtendService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdExtendService.java index b10e7a8..08e856a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdExtendService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdExtendService.java @@ -1,15 +1,8 @@ package com.tashow.cloud.product.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.tashow.cloud.common.pojo.PageResult; -import com.tashow.cloud.product.dto.ProdExtendDO; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; -import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; -import com.tashow.cloud.product.vo.sku.SkuPropVO; -import jakarta.validation.Valid; +import com.tashow.cloud.productapi.api.product.dto.ProdExtendDO; -import java.util.List; /** * 商品属性 Service 接口 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java index 4078f7e..513a4a6 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropService.java @@ -3,11 +3,11 @@ package com.tashow.cloud.product.service; import java.util.*; import com.baomidou.mybatisplus.extension.service.IService; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; -import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; -import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; -import com.tashow.cloud.product.vo.sku.SkuPropVO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropDO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodprop.ProdPropPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodprop.ProdPropSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuPropVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java index ae01aaf..ba25b6b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdPropValueService.java @@ -3,10 +3,10 @@ package com.tashow.cloud.product.service; import java.util.*; import com.baomidou.mybatisplus.extension.service.IService; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.dto.ProdPropValueDO; -import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValuePageReqVO; -import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProdPropValuePageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProdPropValueSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdReservationConfigService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdReservationConfigService.java index 2a19183..a9cc2ab 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdReservationConfigService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdReservationConfigService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdReservationConfigDO; -import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; -import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdReservationConfigDO; +import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index 28f9aed..e9ed3fa 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -2,10 +2,10 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdDO; -import com.tashow.cloud.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; -import com.tashow.cloud.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.dto.ProdDO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreaRelevanceService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreaRelevanceService.java index 761f3bf..bb5412f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreaRelevanceService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreaRelevanceService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; -import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; -import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceAreaRelevanceDO; +import com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java index 959eb73..d43455d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceAreasService.java @@ -3,10 +3,10 @@ package com.tashow.cloud.product.service; import java.util.*; import com.baomidou.mybatisplus.extension.service.IService; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.dto.ProdServiceAreasDO; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceAreasDO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceOverAreaRulesService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceOverAreaRulesService.java index 7702d3c..1f8f2b1 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceOverAreaRulesService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdServiceOverAreaRulesService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; -import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; -import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceOverAreaRulesDO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdTagsService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdTagsService.java index 805c72f..ade48cb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdTagsService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdTagsService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdTagsDO; -import com.tashow.cloud.product.vo.prodtags.ProdTagsPageReqVO; -import com.tashow.cloud.product.vo.prodtags.ProdTagsSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdTagsDO; +import com.tashow.cloud.productapi.api.product.vo.prodtags.ProdTagsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodtags.ProdTagsSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdWeightRangePricesService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdWeightRangePricesService.java index b85d681..8188680 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdWeightRangePricesService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdWeightRangePricesService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProdWeightRangePricesDO; -import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; -import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProdWeightRangePricesDO; +import com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProductOrderLimitService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProductOrderLimitService.java index 566ed04..719042b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProductOrderLimitService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProductOrderLimitService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ProductOrderLimitDO; -import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitPageReqVO; -import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ProductOrderLimitDO; +import com.tashow.cloud.productapi.api.product.vo.productorderlimit.ProductOrderLimitPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ShopDetailService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ShopDetailService.java index 917a9d7..4c358aa 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ShopDetailService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ShopDetailService.java @@ -2,9 +2,11 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.ShopDetailDO; -import com.tashow.cloud.product.vo.shopdetail.ShopDetailPageReqVO; -import com.tashow.cloud.product.vo.shopdetail.ShopDetailSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.ShopDetailDO; +import com.tashow.cloud.productapi.api.product.vo.shopdetail +.ShopDetailPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.shopdetail +.ShopDetailSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index 3cf540b..a9b39e5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -2,8 +2,8 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.*; -import com.tashow.cloud.product.vo.sku.*; +import com.tashow.cloud.productapi.api.product.dto.*; +import com.tashow.cloud.productapi.api.product.vo.sku.*; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDeliverService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDeliverService.java index f9678d8..eda1e66 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDeliverService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDeliverService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.SkuServiceDeliverDO; -import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; -import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDetailsService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDetailsService.java index 2da66d1..c6024ee 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDetailsService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceDetailsService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.SkuServiceDetailsDO; -import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; -import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceMaterialService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceMaterialService.java index 16be043..2fa6d13 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceMaterialService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceMaterialService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.SkuServiceMaterialDO; -import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; -import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.productapi.api.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceTransportService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceTransportService.java index 709badd..1469304 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceTransportService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServiceTransportService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.SkuServiceTransportDO; -import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; -import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceTransportDO; +import com.tashow.cloud.productapi.api.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServicesFormService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServicesFormService.java index 780efd9..598a094 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServicesFormService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuServicesFormService.java @@ -2,9 +2,9 @@ package com.tashow.cloud.product.service; import java.util.*; -import com.tashow.cloud.product.dto.SkuServicesFormDO; -import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormPageReqVO; -import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormSaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.SkuServicesFormDO; +import com.tashow.cloud.productapi.api.product.vo.skuservicesform.SkuServicesFormPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicesform.SkuServicesFormSaveReqVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java index 72eab30..beb94c8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/CategoryServiceImpl.java @@ -1,14 +1,16 @@ package com.tashow.cloud.product.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.tashow.cloud.common.exception.ErrorCode; -import com.tashow.cloud.product.dto.CategoryDO; -import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.CategoryDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import com.tashow.cloud.product.mapper.CategoryMapper; import com.tashow.cloud.product.mapper.ProdPropValueMapper; import com.tashow.cloud.product.service.CategoryService; -import com.tashow.cloud.product.vo.category.CategoryPageReqVO; -import com.tashow.cloud.product.vo.category.CategorySaveReqVO; +import com.tashow.cloud.productapi.api.product.dto.CategoryDto; +import com.tashow.cloud.productapi.api.product.vo.CategoryPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.CategorySaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; @@ -36,10 +38,17 @@ public class CategoryServiceImpl extends ServiceImpl @Resource private CategoryMapper categoryMapper; + @Override + public List categoryList(Integer grade, Long categoryId,String categoryName, Integer status) { + List categoryMenuList =categoryMapper.selectCategoryList(grade, categoryId,categoryName, status,1L); + return categoryMenuList; + } + @Override public Long createCategory(CategorySaveReqVO createReqVO) { // 插入 CategoryDO category = BeanUtils.toBean(createReqVO, CategoryDO.class); + category.setShopId(1L); categoryMapper.insert(category); // 返回 return category.getCategoryId(); @@ -78,4 +87,5 @@ public class CategoryServiceImpl extends ServiceImpl return null; } + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeeDatesServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeeDatesServiceImpl.java index 48675c4..15856ed 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeeDatesServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeeDatesServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProdAdditionalFeeDatesDO; +import com.tashow.cloud.productapi.api.product.dto.ProdAdditionalFeeDatesDO; import com.tashow.cloud.product.mapper.ProdAdditionalFeeDatesMapper; import com.tashow.cloud.product.service.ProdAdditionalFeeDatesService; -import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; -import com.tashow.cloud.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeedates.ProdAdditionalFeeDatesSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeePeriodsServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeePeriodsServiceImpl.java index 2ffc3b7..8bae84c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeePeriodsServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdAdditionalFeePeriodsServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProdAdditionalFeePeriodsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdAdditionalFeePeriodsDO; import com.tashow.cloud.product.mapper.ProdAdditionalFeePeriodsMapper; import com.tashow.cloud.product.service.ProdAdditionalFeePeriodsService; -import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; -import com.tashow.cloud.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodadditionalfeeperiods.ProdAdditionalFeePeriodsSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseIntervalsServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseIntervalsServiceImpl.java index b1f045c..00d580a 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseIntervalsServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseIntervalsServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProdEmergencyResponseIntervalsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdEmergencyResponseIntervalsDO; import com.tashow.cloud.product.mapper.ProdEmergencyResponseIntervalsMapper; import com.tashow.cloud.product.service.ProdEmergencyResponseIntervalsService; -import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; -import com.tashow.cloud.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponseintervals.ProdEmergencyResponseIntervalsSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseServiceImpl.java index cf119a2..c00baf5 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdEmergencyResponseServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProdEmergencyResponseDO; +import com.tashow.cloud.productapi.api.product.dto.ProdEmergencyResponseDO; import com.tashow.cloud.product.mapper.ProdEmergencyResponseMapper; import com.tashow.cloud.product.service.ProdEmergencyResponseService; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; -import com.tashow.cloud.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyResponsePageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyResponseSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdExtendServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdExtendServiceImpl.java index a780a46..171d92f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdExtendServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdExtendServiceImpl.java @@ -1,8 +1,8 @@ package com.tashow.cloud.product.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.tashow.cloud.product.dto.ProdExtendDO; -import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.ProdExtendDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import com.tashow.cloud.product.mapper.ProdExtendMapper; import com.tashow.cloud.product.mapper.ProdPropValueMapper; import com.tashow.cloud.product.service.ProdExtendService; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java index 5ca497c..492f8e8 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java @@ -2,15 +2,15 @@ package com.tashow.cloud.product.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import com.tashow.cloud.product.mapper.ProdPropMapper; import com.tashow.cloud.product.mapper.ProdPropValueMapper; import com.tashow.cloud.product.service.ProdPropService; -import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; -import com.tashow.cloud.product.vo.prodprop.ProdPropPageReqVO; -import com.tashow.cloud.product.vo.prodprop.ProdPropSaveReqVO; -import com.tashow.cloud.product.vo.sku.SkuPropVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodprop.ProdPropPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodprop.ProdPropSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuPropVO; import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java index a0d82b4..44d62e2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java @@ -1,13 +1,13 @@ package com.tashow.cloud.product.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.dto.ProdPropValueDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropValueDO; import com.tashow.cloud.product.mapper.ProdPropMapper; import com.tashow.cloud.product.mapper.ProdPropValueMapper; import com.tashow.cloud.product.service.ProdPropValueService; -import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValuePageReqVO; -import com.tashow.cloud.product.vo.prodpropvalue.ProdPropValueSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProdPropValuePageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodpropvalue.ProdPropValueSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdReservationConfigServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdReservationConfigServiceImpl.java index b580c8f..dc977b3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdReservationConfigServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdReservationConfigServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProdReservationConfigDO; +import com.tashow.cloud.productapi.api.product.dto.ProdReservationConfigDO; import com.tashow.cloud.product.mapper.ProdReservationConfigMapper; import com.tashow.cloud.product.service.ProdReservationConfigService; -import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; -import com.tashow.cloud.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationConfigPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.ProdReservationConfigSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreaRelevanceServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreaRelevanceServiceImpl.java index d3ffd2b..516cf31 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreaRelevanceServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreaRelevanceServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProdServiceAreaRelevanceDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceAreaRelevanceDO; import com.tashow.cloud.product.mapper.ProdServiceAreaRelevanceMapper; import com.tashow.cloud.product.service.ProdServiceAreaRelevanceService; -import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; -import com.tashow.cloud.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance.ProdServiceAreaRelevancePageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodservicearearelevance.ProdServiceAreaRelevanceSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java index c7a7f65..fe7ccfb 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceAreasServiceImpl.java @@ -1,13 +1,13 @@ package com.tashow.cloud.product.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.tashow.cloud.product.dto.ProdPropDO; -import com.tashow.cloud.product.dto.ProdServiceAreasDO; +import com.tashow.cloud.productapi.api.product.dto.ProdPropDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceAreasDO; import com.tashow.cloud.product.mapper.ProdPropMapper; import com.tashow.cloud.product.mapper.ProdServiceAreasMapper; import com.tashow.cloud.product.service.ProdServiceAreasService; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; -import com.tashow.cloud.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index 6bef46c..e55ebc0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -5,13 +5,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils; -import com.tashow.cloud.product.dto.*; +import com.tashow.cloud.productapi.api.product.dto.*; import com.tashow.cloud.product.mapper.*; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdService; -import com.tashow.cloud.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.product.vo.prod.ProdSaveReqVO; -import com.tashow.cloud.product.vo.prod.ProdServiceVO; + +import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; import com.tashow.cloud.productapi.enums.BaseEnum; import lombok.val; import org.springframework.stereotype.Service; @@ -244,9 +245,17 @@ public class ProdServiceImpl implements ProdService { @Override public ProdServiceVO getProdService(Long prodId) { ProdDO prodDO = prodMapper.selectById(prodId); - return prodMapper.selectProdService(prodDO.getProdId(),prodDO.getRegionSwitch(), - prodDO.getReservationSwitch(),prodDO.getEmergencySwitch(),prodDO.getOrderLimitSwitch(), - prodDO.getAdditionalSwitch(),prodDO.getAdditionalFeeSwitch(),prodDO.getWeightSwitch()); + if(prodDO!= null&&prodDO.getRegionSwitch()==BaseEnum.YES_ONE.getKey()){ + return prodMapper.selectProdService(prodDO.getProdId(),prodDO.getRegionSwitch(), + prodDO.getReservationSwitch(),prodDO.getEmergencySwitch(),prodDO.getOrderLimitSwitch(), + prodDO.getAdditionalSwitch(),prodDO.getAdditionalFeeSwitch(),prodDO.getWeightSwitch()); + }else { + return prodMapper.selectProdServiceInfo(prodDO.getProdId(), + prodDO.getReservationSwitch(),prodDO.getEmergencySwitch(),prodDO.getOrderLimitSwitch(), + prodDO.getAdditionalSwitch(),prodDO.getAdditionalFeeSwitch(),prodDO.getWeightSwitch()); + } + + } @Override diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceOverAreaRulesServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceOverAreaRulesServiceImpl.java index fe89c2e..6f5e253 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceOverAreaRulesServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceOverAreaRulesServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProdServiceOverAreaRulesDO; +import com.tashow.cloud.productapi.api.product.dto.ProdServiceOverAreaRulesDO; import com.tashow.cloud.product.mapper.ProdServiceOverAreaRulesMapper; import com.tashow.cloud.product.service.ProdServiceOverAreaRulesService; -import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; -import com.tashow.cloud.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceoverarearules.ProdServiceOverAreaRulesSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdTagsServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdTagsServiceImpl.java index c7600c9..ba4003b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdTagsServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdTagsServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProdTagsDO; +import com.tashow.cloud.productapi.api.product.dto.ProdTagsDO; import com.tashow.cloud.product.mapper.ProdTagsMapper; import com.tashow.cloud.product.service.ProdTagsService; -import com.tashow.cloud.product.vo.prodtags.ProdTagsPageReqVO; -import com.tashow.cloud.product.vo.prodtags.ProdTagsSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodtags.ProdTagsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodtags.ProdTagsSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdWeightRangePricesServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdWeightRangePricesServiceImpl.java index 8f4e423..b28f9a0 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdWeightRangePricesServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdWeightRangePricesServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProdWeightRangePricesDO; +import com.tashow.cloud.productapi.api.product.dto.ProdWeightRangePricesDO; import com.tashow.cloud.product.mapper.ProdWeightRangePricesMapper; import com.tashow.cloud.product.service.ProdWeightRangePricesService; -import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; -import com.tashow.cloud.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices.ProdWeightRangePricesPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prodweightrangeprices.ProdWeightRangePricesSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProductOrderLimitServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProductOrderLimitServiceImpl.java index 9a35f06..abae5d3 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProductOrderLimitServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProductOrderLimitServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ProductOrderLimitDO; +import com.tashow.cloud.productapi.api.product.dto.ProductOrderLimitDO; import com.tashow.cloud.product.mapper.ProductOrderLimitMapper; import com.tashow.cloud.product.service.ProductOrderLimitService; -import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitPageReqVO; -import com.tashow.cloud.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.productorderlimit.ProductOrderLimitPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.productorderlimit.ProductOrderLimitSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ShopDetailServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ShopDetailServiceImpl.java index 6c1ee51..b7bdb09 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ShopDetailServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ShopDetailServiceImpl.java @@ -1,10 +1,12 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.ShopDetailDO; +import com.tashow.cloud.productapi.api.product.dto.ShopDetailDO; import com.tashow.cloud.product.mapper.ShopDetailMapper; import com.tashow.cloud.product.service.ShopDetailService; -import com.tashow.cloud.product.vo.shopdetail.ShopDetailPageReqVO; -import com.tashow.cloud.product.vo.shopdetail.ShopDetailSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.shopdetail +.ShopDetailPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.shopdetail +.ShopDetailSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDeliverServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDeliverServiceImpl.java index ed8e9e9..374965b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDeliverServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDeliverServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.SkuServiceDeliverDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDeliverDO; import com.tashow.cloud.product.mapper.SkuServiceDeliverMapper; import com.tashow.cloud.product.service.SkuServiceDeliverService; -import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; -import com.tashow.cloud.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedeliver.SkuServiceDeliverPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedeliver.SkuServiceDeliverSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDetailsServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDetailsServiceImpl.java index f89e4e3..bc7d53d 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDetailsServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceDetailsServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.SkuServiceDetailsDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceDetailsDO; import com.tashow.cloud.product.mapper.SkuServiceDetailsMapper; import com.tashow.cloud.product.service.SkuServiceDetailsService; -import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; -import com.tashow.cloud.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedetails.SkuServiceDetailsPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicedetails.SkuServiceDetailsSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index 9b3231e..d52879c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -6,14 +6,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.tashow.cloud.common.util.date.DateUtils; import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils; -import com.tashow.cloud.product.dto.*; +import com.tashow.cloud.productapi.api.product.dto.*; import com.tashow.cloud.product.mapper.*; import com.tashow.cloud.product.service.ProdExtendService; import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdPropValueService; import com.tashow.cloud.product.service.SkuService; -import com.tashow.cloud.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.product.vo.sku.*; +import com.tashow.cloud.productapi.api.product.vo.sku.*; import com.tashow.cloud.productapi.enums.BaseEnum; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import com.tashow.cloud.productapi.enums.ServiceTypeEnum; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceMaterialServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceMaterialServiceImpl.java index 86eea11..9131578 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceMaterialServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceMaterialServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.SkuServiceMaterialDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceMaterialDO; import com.tashow.cloud.product.mapper.SkuServiceMaterialMapper; import com.tashow.cloud.product.service.SkuServiceMaterialService; -import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; -import com.tashow.cloud.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicematerial.SkuServiceMaterialPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicematerial.SkuServiceMaterialSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceTransportServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceTransportServiceImpl.java index 267667d..41627e4 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceTransportServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceTransportServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.SkuServiceTransportDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServiceTransportDO; import com.tashow.cloud.product.mapper.SkuServiceTransportMapper; import com.tashow.cloud.product.service.SkuServiceTransportService; -import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; -import com.tashow.cloud.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicetransport.SkuServiceTransportPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicetransport.SkuServiceTransportSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServicesFormServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServicesFormServiceImpl.java index c07951d..5f226d1 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServicesFormServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServicesFormServiceImpl.java @@ -1,10 +1,10 @@ package com.tashow.cloud.product.service.impl; -import com.tashow.cloud.product.dto.SkuServicesFormDO; +import com.tashow.cloud.productapi.api.product.dto.SkuServicesFormDO; import com.tashow.cloud.product.mapper.SkuServicesFormMapper; import com.tashow.cloud.product.service.SkuServicesFormService; -import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormPageReqVO; -import com.tashow.cloud.product.vo.skuservicesform.SkuServicesFormSaveReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicesform.SkuServicesFormPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.skuservicesform.SkuServicesFormSaveReqVO; import com.tashow.cloud.productapi.enums.ErrorCodeConstants; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml index 8be73bc..a8dc9eb 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/CategoryMapper.xml @@ -8,5 +8,24 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml index f2c8975..322fa66 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml @@ -10,7 +10,7 @@ --> - + @@ -22,7 +22,7 @@ - + @@ -31,7 +31,7 @@ - + @@ -42,7 +42,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -69,15 +69,20 @@ - + + + + + + - + @@ -90,7 +95,7 @@ - + @@ -101,7 +106,7 @@ - + @@ -114,15 +119,121 @@ - + + + + - select * from tz_prod @@ -264,4 +375,131 @@ ORDER BY p.prod_id + + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml index 94f4c50..76f5c0d 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropMapper.xml @@ -8,7 +8,7 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - select * from tz_prod_prop where prop_name = #{propName} and prod_id = #{prodId} and rule = #{rule} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml index 6dd292a..746575d 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml @@ -9,7 +9,7 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - select sku_id, properties, delete_time from tz_sku where prod_id = #{prodId} and deleted = 1 and properties like concat('%', #{properties}, '%') @@ -17,7 +17,7 @@ - select sku_id, properties, delete_time,deleted from tz_sku and properties like concat('%', #{propertiesName}, '%') diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml index a2ba040..cc2896a 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuServicesFormMapper.xml @@ -10,7 +10,7 @@ --> - + @@ -18,19 +18,19 @@ - - - - @@ -46,7 +46,7 @@ - SELECT id, service_id, pic, name, price, is_charge, is_default, type, adress, trigger_name, trigger_id, is_parallel, describe_content, create_time, update_time, creator, updater, deleted @@ -55,7 +55,7 @@ - SELECT id, service_id, name, describe_content, create_time, update_time, creator, updater, deleted FROM tz_sku_service_material @@ -63,7 +63,7 @@ - SELECT id, service_id, contacts, address, province, city, area, tel, create_time, update_time, creator, updater, deleted FROM tz_sku_service_transport @@ -71,7 +71,7 @@ - SELECT id, service_id, type, price, is_charge, address, province, city, area, tel, create_time, update_time, creator, updater, deleted FROM tz_sku_service_deliver diff --git a/tashow-module/tashow-module-system/pom.xml b/tashow-module/tashow-module-system/pom.xml index 65c03b2..4326422 100644 --- a/tashow-module/tashow-module-system/pom.xml +++ b/tashow-module/tashow-module-system/pom.xml @@ -155,6 +155,11 @@ org.springframework.boot spring-boot-test + diff --git a/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/SystemServerApplication.java b/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/SystemServerApplication.java index 04a5497..a36593e 100644 --- a/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/SystemServerApplication.java +++ b/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/SystemServerApplication.java @@ -2,6 +2,7 @@ package com.tashow.cloud.system; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.scheduling.annotation.EnableAsync; /** @@ -10,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableAsync; */ @SpringBootApplication @EnableAsync // 开启异步 +//@EnableFeignClients(basePackages = "com.tashow.cloud.productapi.api") public class SystemServerApplication { public static void main(String[] args) { diff --git a/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/controller/admin/prod/CategoryController.java b/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/controller/admin/prod/CategoryController.java new file mode 100644 index 0000000..6d3b203 --- /dev/null +++ b/tashow-module/tashow-module-system/src/main/java/com/tashow/cloud/system/controller/admin/prod/CategoryController.java @@ -0,0 +1,41 @@ +/* +package com.tashow.cloud.system.controller.admin.prod; + +import com.tashow.cloud.common.pojo.CommonResult; + +import com.tashow.cloud.productapi.api.product.CategoryApi; +import com.tashow.cloud.productapi.api.product.dto.CategoryDto; +import jakarta.annotation.Resource; +import jakarta.annotation.security.PermitAll; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +import static com.tashow.cloud.common.pojo.CommonResult.success; + +@RestController +@RequestMapping("/category") +@Validated +public class CategoryController { + + @Resource + private CategoryApi categoryService; + + */ +/** + * 获取菜单页面的表 + * @return + *//* + + + @GetMapping("/categoryList") + @PermitAll + public CommonResult> categoryList(@RequestParam(value = "grade", required = false) Integer grade, + @RequestParam(value = "categoryId", required = false) Long categoryId, + @RequestParam(value = "status", required = false) Integer status) { + return success(categoryService.categoryList(grade, categoryId, status)); + } + + +}*/ From 257dc16c94afb4a488cb639bd53f5a8aab40e7e1 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Wed, 13 Aug 2025 09:18:21 +0800 Subject: [PATCH 20/22] =?UTF-8?q?=E4=BC=98=E5=8C=96BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../productapi/api/product/dto/ProdDO.java | 14 +- .../api/product/dto/ProdPropValueDO.java | 7 + .../productapi/api/product/dto/SkuDO.java | 14 +- .../api/product/vo/prod/ProdListVO.java | 74 ++++++ .../api/product/vo/prod/ProdPageReqVO.java | 100 +------- .../api/product/vo/prod/ProdRecycleBinVO.java | 22 ++ .../api/product/vo/prod/ProdRespVO.java | 5 + .../api/product/vo/prod/ProdSaveReqVO.java | 9 +- .../vo/prodprop/ProdPropSaveReqVO.java | 1 + .../api/product/vo/sku/SkuPageReqVO.java | 3 + .../api/product/vo/sku/SkuRespVO.java | 13 + .../api/product/vo/sku/SkuSaveReqVO.java | 9 + .../controller/admin/ProdController.java | 66 ++++- .../controller/admin/SkuController.java | 32 ++- .../cloud/product/mapper/ProdMapper.java | 11 +- .../product/mapper/ProdPropValueMapper.java | 5 + .../cloud/product/mapper/SkuMapper.java | 7 +- .../cloud/product/service/ProdService.java | 3 + .../cloud/product/service/SkuService.java | 32 +++ .../service/impl/ProdPropServiceImpl.java | 4 +- .../product/service/impl/ProdServiceImpl.java | 22 +- .../product/service/impl/SkuServiceImpl.java | 230 +++++++++++++++++- .../resources/mapper/product/ProdMapper.xml | 32 ++- .../mapper/product/ProdPropValueMapper.xml | 43 ++++ .../resources/mapper/product/SkuMapper.xml | 32 +++ 25 files changed, 669 insertions(+), 121 deletions(-) create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRecycleBinVO.java diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdDO.java index ac92c84..3cfe1e0 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdDO.java @@ -8,6 +8,7 @@ import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; import com.tashow.cloud.productapi.general.StringListTypeHandler; import lombok.*; +import java.util.Date; import java.util.List; /** @@ -111,9 +112,15 @@ public class ProdDO extends BaseDO { */ private Integer status; /** - * 商品分类 + * 商品分类id */ private Long categoryId; + + /** + * 商品分类名称 + */ + private String categoryName; + /** * 销量 */ @@ -163,4 +170,9 @@ public class ProdDO extends BaseDO { */ private Integer top; + /** + * 删除时间 + */ + private Date deleteTime; + } \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropValueDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropValueDO.java index 3b8c1bb..c8cccd5 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropValueDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdPropValueDO.java @@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + +import java.util.Date; + /** * 属性规则 DO * @@ -59,4 +62,8 @@ public class ProdPropValueDO { @TableField(exist=false) private Integer isExist; + /** + * 删除时间 + */ + private Date deleteTime; } \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuDO.java index fa430d0..cb11aaa 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/SkuDO.java @@ -87,9 +87,21 @@ public class SkuDO extends BaseDO { */ private String overview; /** - * 库存(-1代表无限库存) + * 库存 */ private Integer stocks; + + + /** + * 总库存是0 无线库存是1 + */ + private Integer stocksFlg; + + /** + * 锁定库存数 + */ + @TableField(exist=false) + private Integer stocksLockNum; /** * 预警库存 */ diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java new file mode 100644 index 0000000..e636c7a --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java @@ -0,0 +1,74 @@ +package com.tashow.cloud.productapi.api.product.vo.prod; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.tashow.cloud.productapi.api.product.dto.*; +import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; +import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasInfoVO; +import com.tashow.cloud.productapi.general.StringListTypeHandler; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "商品服务配置 VO") +@Data +public class ProdListVO { + + /** + * 产品ID + */ + @TableId + private Long prodId; + /** + * 商品名称 + */ + private String prodName; + /** + * 商品简称 + */ + private String abbreviation; + + /** + * 店铺id + */ + private Long shopId; + + + /** + * 是否置灰0否1是 + */ + private Integer isProhibit; + + /** + * 审核备注 + */ + private String processNotes; + /** + * 详细描述 + */ + private String content; + /** + * 商品编号 + */ + private String prodNumber; + /** + * 商品主图 + */ + private String pic; + /** + * 商品轮播图片,以,分割 + */ + private String imgs; + /** + * 商品轮播图片,以,分割 + */ + private String whiteImg; + + /** + * 默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核 + */ + private Integer status; + + +} \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdPageReqVO.java index faa0880..33e3e6f 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdPageReqVO.java @@ -21,110 +21,22 @@ public class ProdPageReqVO extends PageParam { @Schema(description = "商品名称", example = "赵六") private String prodName; - @Schema(description = "商品简称") - private String abbreviation; - - @Schema(description = "seo标题", example = "李四") - private String seoShortName; - - @Schema(description = "seo搜索") - private String seoSearch; - - @Schema(description = "关键词") - private String keyword; - @Schema(description = "店铺id", example = "10843") private Long shopId; - @Schema(description = "简要描述,卖点等") - private String brief; - - @Schema(description = "品牌") - private String brand; - - @Schema(description = "详细描述") - private String content; - - - @Schema(description = "'是否置灰0否1是'") - private Integer isProhibit; - - @Schema(description = "审核备注") - private String processNotes; - /** - * 标签 - */ - public List tag; - - @Schema(description = "商品编号") - private String prodNumber; - - @Schema(description = "商品主图") - private String pic; - - @Schema(description = "商品轮播图片,以,分割") - private String imgs; - - /** - * 视频 - */ - private String video; - - /** - * 商品轮播图片,以,分割 - */ - private String whiteImg; - @Schema(description = "默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核", example = "2") private Integer status; @Schema(description = "商品分类", example = "14895") private Long categoryId; - @Schema(description = "销量") - private Integer soldNum; - - @Schema(description = "分享图") - private String shareImage; - - @Schema(description = "分享话术") - private String shareContent; - - @Schema(description = "是否开启区域0关1开") - private Integer regionSwitch; - - @Schema(description = "是否特殊时段0关1开") - private Integer additionalSwitch; - - @Schema(description = "是否特殊日期(节假日周末什么的)0关1开") - private Integer additionalFeeSwitch; - - @Schema(description = "是否紧急响应服务0关1开") - private Integer emergencySwitch; - - @Schema(description = "是否预约0关1开") - private Integer reservationSwitch; - - @Schema(description = "是否接单上线0关1开") - private Integer orderLimitSwitch; - - @Schema(description = "是否开启体重配置0关1开") - private Integer weightSwitch; + /** + * 商品分类名称 + */ + private String categoryName; @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; - - @Schema(description = "创建人") - private String createBy; - - @Schema(description = "修改人") - private String updateBy; - - @Schema(description = "版本 乐观锁") - private Integer version; - - @Schema(description = "展示的权重") - private Integer top; + //@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] createTime; } \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRecycleBinVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRecycleBinVO.java new file mode 100644 index 0000000..4fcbc6b --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRecycleBinVO.java @@ -0,0 +1,22 @@ +package com.tashow.cloud.productapi.api.product.vo.prod; + +import com.tashow.cloud.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "商品回收站分页查询") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ProdRecycleBinVO extends PageParam { + + @Schema(description = "商品名称", example = "18784") + private String prodName; + + @Schema(description = "删除时间") + //@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private String[] deleteTime; + +} \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRespVO.java index a2d6298..dd4be2d 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRespVO.java @@ -84,6 +84,11 @@ public class ProdRespVO { @ExcelProperty("商品分类") private Long categoryId; + /** + * 商品分类名称 + */ + private String categoryName; + @Schema(description = "销量") @ExcelProperty("销量") private Integer soldNum; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdSaveReqVO.java index 9331648..2d271ad 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdSaveReqVO.java @@ -15,8 +15,8 @@ public class ProdSaveReqVO { @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6943") private Long prodId; - @Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") - @NotEmpty(message = "商品名称不能为空") + //@Schema(description = "商品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + //@NotEmpty(message = "商品名称不能为空") private String prodName; @Schema(description = "商品简称") @@ -31,6 +31,11 @@ public class ProdSaveReqVO { @Schema(description = "关键词") private String keyword; + /** + * 商品分类名称 + */ + private String categoryName; + @Schema(description = "店铺id", example = "10843") private Long shopId; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropSaveReqVO.java index aa2122d..43cc4e5 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodprop/ProdPropSaveReqVO.java @@ -11,6 +11,7 @@ import java.util.List; @Schema(description = "管理后台 - 商品属性新增/修改 Request VO") @Data public class ProdPropSaveReqVO { + private Long id; @Schema(description = "属性id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14271") private Long propId; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPageReqVO.java index 22bdfbb..662c667 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuPageReqVO.java @@ -18,4 +18,7 @@ public class SkuPageReqVO extends PageParam { @Schema(description = "销售属性组合字符串") private String properties; + @Schema(description = "skuID", example = "18784") + private Long skuId; + } \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRespVO.java index ecebf18..762ed29 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuRespVO.java @@ -2,6 +2,7 @@ package com.tashow.cloud.productapi.api.product.vo.sku; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -70,6 +71,18 @@ public class SkuRespVO { @ExcelProperty("库存") private Integer stocks; + + @Schema(description = "总库存是0 无线库存是1") + @ExcelProperty("总库存是0 无线库存是1") + private Integer stocksFlg; + + /** + * 锁定库存数 + */ + @Schema(description = "锁定库存数") + @ExcelProperty("锁定库存数") + private Integer stocksLockNum; + @Schema(description = "预警库存") @ExcelProperty("预警库存") private Integer warnStocks; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java index 2c31958..4f2b605 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/sku/SkuSaveReqVO.java @@ -1,5 +1,6 @@ package com.tashow.cloud.productapi.api.product.vo.sku; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -55,6 +56,14 @@ public class SkuSaveReqVO { @Schema(description = "库存") private Integer stocks; + @Schema(description = "总库存是0 无线库存是1") + private Integer stocksFlg; + /** + * 锁定库存数 + */ + @Schema(description = "锁定库存数") + private Integer stocksLockNum; + @Schema(description = "预警库存") private Integer warnStocks; diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java index 4349071..ab29443 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java @@ -2,11 +2,17 @@ package com.tashow.cloud.product.controller.admin; import com.tashow.cloud.common.pojo.CommonResult; import com.tashow.cloud.common.pojo.PageResult; +import com.tashow.cloud.product.mapper.ProdMapper; import com.tashow.cloud.productapi.api.product.dto.ProdDO; import com.tashow.cloud.product.service.ProdService; +import com.tashow.cloud.productapi.api.product.dto.SkuDO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdRecycleBinVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; +import com.tashow.cloud.productapi.enums.BaseEnum; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -16,6 +22,9 @@ import jakarta.validation.Valid; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.Date; +import java.util.List; + import static com.tashow.cloud.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 商品") @@ -26,7 +35,8 @@ public class ProdController { @Resource private ProdService prodService; - + @Resource + private ProdMapper prodMapper; @PostMapping("/create") @Operation(summary = "创建商品") @PermitAll @@ -62,23 +72,59 @@ public class ProdController { } -/* @PutMapping("/update") + @PutMapping("/update") @Operation(summary = "更新商品") - @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:update')") - public CommonResult updateProd(@Valid @RequestBody ProdSaveReqVO updateReqVO) { + @PermitAll + public CommonResult updateProd(@RequestBody ProdSaveReqVO updateReqVO) { prodService.updateProd(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除商品") + @PermitAll @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('tashow-module-product:prod:delete')") public CommonResult deleteProd(@RequestParam("id") Long id) { prodService.deleteProd(id); return success(true); } + + + + @DeleteMapping("/deleteSkuList") + @Operation(summary = "批量删除商品") + @Parameter(name = "ids", description = "商品id", required = true) + @PermitAll + public CommonResult deleteSkuList(@RequestParam("ids") List ids) { + for(Long id:ids){ + ProdDO prod = new ProdDO(); + prod.setProdId(id); + prod.setDeleted(BaseEnum.YES_ONE.getKey()); + prod.setDeleteTime(new Date()); + // 删除 + prodMapper.deleteById(prod); + } + return success(true); + } + + @DeleteMapping("/updateSkuShelfList") + @Operation(summary = "批量上下架") + @Parameter(name = "status", description = "默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核", required = true) + @PermitAll + public CommonResult updateSkuShelfList(@RequestParam("ids") List ids,@RequestParam("status") Integer status) { + for(Long id:ids){ + ProdDO prod = new ProdDO(); + prod.setProdId(id); + prod.setStatus(status); + prodMapper.updateBatch(prod); + } + return success(true); + } + + + +/* @GetMapping("/get") @Operation(summary = "获得商品") @Parameter(name = "id", description = "编号", required = true, example = "1024") @@ -91,8 +137,16 @@ public class ProdController { @PermitAll @GetMapping("/page") @Operation(summary = "获得商品分页") - public CommonResult> getProdPage(@Valid ProdPageReqVO pageReqVO) { + public CommonResult> getProdPage(ProdPageReqVO pageReqVO) { PageResult pageResult = prodService.getProdPage(pageReqVO); return success(pageResult); } + + @PermitAll + @GetMapping("/getProdRecycleBinPageList") + @Operation(summary = "获得商品回收站分页列表") + public CommonResult> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) { + PageResult pageResult = prodService.getProdRecycleBinPageList(prodRecycleBinVO); + return success(pageResult); + } } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java index e0c3ba5..f71b525 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java @@ -26,7 +26,7 @@ import static com.tashow.cloud.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 单品SKU") @RestController -@RequestMapping("/tz/sku") +@RequestMapping("/product/sku") @Validated public class SkuController { @@ -84,6 +84,16 @@ public class SkuController { return success(true); } + + @PutMapping("/disableProp") + @Operation(summary = "禁用规格值") + @PermitAll + public CommonResult disableProp(@RequestParam("id") Long id) { + skuService.disableProp(id); + return success(true); + } + + @DeleteMapping("/delete") @Operation(summary = "删除单品SKU") @Parameter(name = "id", description = "编号", required = true) @@ -98,13 +108,14 @@ public class SkuController { @Parameter(name = "ids", description = "编号", required = true) @PermitAll public CommonResult deleteSkuList(@RequestParam("id") List ids) { - for(Long id:ids){ + /*for(Long id:ids){ SkuDO sku = new SkuDO(); sku.setSkuId(id); sku.setDeleteTime(new Date()); // 删除 skuMapper.deleteById(sku); - } + }*/ + skuService.deleteSkus(ids); return success(true); } @@ -115,10 +126,7 @@ public class SkuController { @Parameter(name = "isShelf", description = "是否上下架(0下架 1上架)", required = true) @PermitAll public CommonResult updateSkuShelf(@RequestParam("id") Long id,@RequestParam("isShelf") Integer isShelf) { - SkuDO sku = new SkuDO(); - sku.setSkuId(id); - sku.setIsShelf(isShelf); - skuMapper.updateBatch(sku); + skuService.updatSkuIsShelf(id,isShelf); return success(true); } @@ -134,6 +142,7 @@ public class SkuController { sku.setIsShelf(isShelf); skuMapper.updateBatch(sku); } + skuService.updatSkuIsShelfs(ids,isShelf); return success(true); } @@ -155,6 +164,15 @@ public class SkuController { return success(pageResult); } + @PermitAll + @GetMapping("/getSkuPageList") + @Operation(summary = "获得SKU分页列表") + public CommonResult> getSkuPageList(@Valid SkuPageReqVO pageReqVO) { + PageResult pageResult = skuService.getSkuPageList(pageReqVO); + return success(pageResult); + } + + /* @PermitAll @GetMapping("/getSkuRecycleBinPageList") @Operation(summary = "获得SKU回收站分页列表") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java index 12f8186..9ec8cf9 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java @@ -10,6 +10,7 @@ import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; import com.tashow.cloud.productapi.api.product.dto.*; import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -21,7 +22,11 @@ import org.apache.ibatis.annotations.Param; @Mapper public interface ProdMapper extends BaseMapperX { - IPage getProdPageList(Page page, ProdPageReqVO reqVO); + IPage getProdPageList(Page page,@Param("createTime") String[] createTime + , @Param("prodName") String prodName + , @Param("shopId") Long shopId + , @Param("status") Integer status + , @Param("categoryId") Long categoryId); ProdServiceVO selectProdService(@Param("prodId") Long prodId , @Param("regionSwitch") Integer regionSwitch @@ -41,4 +46,8 @@ public interface ProdMapper extends BaseMapperX { , @Param("additionalFeeSwitch") Integer additionalFeeSwitch , @Param("weightSwitch") Integer weightSwitch ); + + IPage getProdRecycleBinPageList(Page page,@Param("createTime") String[] createTime + , @Param("prodName") String prodName); + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java index 20a24b5..9695049 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java @@ -24,4 +24,9 @@ public interface ProdPropValueMapper extends BaseMapperX { */ void insertPropValues(@Param("propId") Long propId, @Param("prodPropValues") List prodPropValues); + List selectSalesValuesByProdId(@Param("prodId") Long prodId); + + List selectSalesValuesByState(@Param("prodId") Long prodId); + + void batchMarkDeleted(@Param("ids") List ids); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java index c51590b..f30230b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java @@ -20,6 +20,11 @@ public interface SkuMapper extends BaseMapperX { IPage getSkuRecycleBinPageList(Page page, @Param("prodId") Long prodId, @Param("properties")String properties); - List getSkuListByName( @Param("propertiesName")String propertiesName); + IPage getSkuPageList(Page page, @Param("prodId") Long prodId,@Param("skuId") Long skuId, @Param("properties")String properties); + + List getSkuListByName( @Param("propertiesName")String propertiesName); + List selectPropertiesByProdIdAndNotDeleted( @Param("prodId")Long prodId); + + List selectPropertiesByProdIdShelf( @Param("prodId")Long prodId); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index e9ed3fa..d5c6470 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -4,8 +4,10 @@ import java.util.*; import com.tashow.cloud.productapi.api.product.dto.ProdDO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdRecycleBinVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; @@ -82,4 +84,5 @@ public interface ProdService { */ PageResult getProdPage(ProdPageReqVO pageReqVO); + PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index a9b39e5..bb11c78 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -63,6 +63,13 @@ public interface SkuService { */ void deleteProp(Long id); + /** + * 禁用规格值 + * + * @param id 删除规格值 + */ + void disableProp(Long id); + SkuPropInfoVO getSKuPropList(Long prodId); @@ -74,6 +81,29 @@ public interface SkuService { */ void deleteSku(Long id); + /** + * 批量删除删SKU + * + * @param ids + */ + void deleteSkus(List ids); + + + /** + * 删除单品SKU + * + * @param id 编号 + */ + void updatSkuIsShelf(Long id,Integer isShelf); + + /** + * 批量删除删SKU + * + * @param ids + */ + void updatSkuIsShelfs(List ids,Integer isShelf); + + /** * 获得单品SKU * @@ -86,6 +116,8 @@ public interface SkuService { PageResult getSkuRecycleBinPageList(SkuPageReqVO pageReqVO); + + PageResult getSkuPageList(SkuPageReqVO pageReqVO); /** * 获得单品SKU分页 * diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java index 492f8e8..0b5a7c2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropServiceImpl.java @@ -65,7 +65,7 @@ public class ProdPropServiceImpl extends ServiceImpl return; } for (ProdPropValueDO prodPropValueDO : createReqVO.getProdPropValues()){ - prodPropValueDO.setPropId(prodProp.getPropId()); + prodPropValueDO.setPropId(prodProp.getId()); prodPropValueMapper.insert(prodPropValueDO); } } @@ -90,7 +90,7 @@ public class ProdPropServiceImpl extends ServiceImpl } for (ProdPropValueDO prodPropValueDO : createReqVO.getProdPropValues()){ if(Objects.equals(BaseEnum.YES_ONE.getKey(),prodPropValueDO.getIsExist())){ - prodPropValueDO.setPropId(prodProp.getPropId()); + prodPropValueDO.setPropId(prodProp.getId()); prodPropValueMapper.insert(prodPropValueDO); }else { prodPropValueMapper.updateById(prodPropValueDO); diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index e55ebc0..241312c 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.tashow.cloud.common.util.date.DateUtils; import com.tashow.cloud.mybatis.mybatis.core.util.MyBatisUtils; import com.tashow.cloud.productapi.api.product.dto.*; import com.tashow.cloud.product.mapper.*; @@ -11,8 +12,11 @@ import com.tashow.cloud.product.service.ProdPropService; import com.tashow.cloud.product.service.ProdService; import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdRecycleBinVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import com.tashow.cloud.productapi.enums.BaseEnum; import lombok.val; import org.springframework.stereotype.Service; @@ -271,8 +275,12 @@ public class ProdServiceImpl implements ProdService { public void deleteProd(Long id) { // 校验存在 validateProdExists(id); + ProdDO prod = new ProdDO(); + prod.setProdId(id); + prod.setDeleted(BaseEnum.YES_ONE.getKey()); + prod.setDeleteTime(new Date()); // 删除 - prodMapper.deleteById(id); + prodMapper.deleteById(prod); } private void validateProdExists(Long id) { @@ -288,7 +296,17 @@ public class ProdServiceImpl implements ProdService { @Override public PageResult getProdPage(ProdPageReqVO pageReqVO) { - IPage prodPageList = prodMapper.getProdPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO); + IPage prodPageList = prodMapper.getProdPageList(MyBatisUtils.buildPage(pageReqVO), + pageReqVO.getCreateTime(), pageReqVO.getProdName(), pageReqVO.getShopId(), pageReqVO.getStatus(), pageReqVO.getCategoryId()); + return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + } + + @Override + public PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO){ + IPage prodPageList = prodMapper.getProdRecycleBinPageList(MyBatisUtils.buildPage(prodRecycleBinVO), prodRecycleBinVO.getDeleteTime(), prodRecycleBinVO.getProdName()); + for(SkuRecycleBinVO prodPage : prodPageList.getRecords()){ + prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); + } return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index d52879c..90f954b 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -59,6 +59,9 @@ public class SkuServiceImpl implements SkuService { private ProdPropValueService prodPropValueService; @Resource private ProdExtendService prodExtendService; + @Resource + private ProdPropValueMapper prodPropValueMapper; + @Override public Long createSku(SkuSaveReqVO createReqVO) { @@ -413,11 +416,39 @@ public class SkuServiceImpl implements SkuService { ProdPropValueDO prodPropValueDO =prodPropValueService.getById(id); prodPropValueService.deleteProdPropValue(id); List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); + List skuDOList1 = new ArrayList<>(); for(SkuDO skuDO : skuDOList){ if(skuDO.getProperties()!=null){ String[] split = skuDO.getProperties().split(","); + for (String s : split){ + if(s.equals(prodPropValueDO.getPropValue())){ + skuDOList1.add(skuDO); + } + } } } + skuMapper.deleteByIds(skuDOList1); + } + + @Override + public void disableProp(Long id) { + ProdPropValueDO prodPropValueDO =prodPropValueService.getById(id); + prodPropValueDO.setState(BaseEnum.YES_ONE.getKey()); + prodPropValueService.updateById(prodPropValueDO); + List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); + List skuDOList1 = new ArrayList<>(); + for(SkuDO skuDO : skuDOList){ + if(skuDO.getProperties()!=null){ + String[] split = skuDO.getProperties().split(","); + for (String s : split){ + if(s.equals(prodPropValueDO.getPropValue())){ + skuDO.setIsShelf(BaseEnum.NO_ZERO.getKey()); + skuDOList1.add(skuDO); + } + } + } + } + skuMapper.updateBatch(skuDOList1); } @Override @@ -425,14 +456,14 @@ public class SkuServiceImpl implements SkuService { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProdPropDO::getProdId,prodId); wrapper.eq(ProdPropDO::getState, BaseEnum.YES_ONE.getKey()) - .orderByDesc(ProdPropDO::getSort); + .orderByAsc(ProdPropDO::getSort); List list = prodPropService.list(wrapper); list.forEach(prop -> { List values = prodPropValueService.list( new LambdaQueryWrapper() .eq(ProdPropValueDO::getPropId, prop.getId()) - .orderByDesc(ProdPropValueDO::getSort) + .orderByAsc(ProdPropValueDO::getSort) ); /* LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); wrapper1.eq(ProdPropValueDO::getPropId,prop.getPropId()); @@ -454,16 +485,203 @@ public class SkuServiceImpl implements SkuService { } @Override + @Transactional(rollbackFor = Exception.class) public void deleteSku(Long id) { // 校验存在 validateSkuExists(id); SkuDO sku = new SkuDO(); sku.setSkuId(id); sku.setDeleteTime(new Date()); + + SkuDO prodSku = skuMapper.selectById( id); + // Step 1: 获取该商品下所有未删除的 SKU 的 properties + List activeProperties = skuMapper.selectPropertiesByProdIdAndNotDeleted(prodSku.getProdId()); + + // Step 2: 提取所有正在被使用的属性值(去重) + Set currentlyUsedValues = new HashSet<>(); + for (String props : activeProperties) { + if (props != null && !props.trim().isEmpty()) { + String[] values = props.split(","); + for (String v : values) { + currentlyUsedValues.add(v.trim()); + } + } + } // 删除 skuMapper.deleteById(sku); + // Step 3: 查询该商品下所有 rule=1 的属性值(销售属性) + List allPropValues = prodPropValueMapper.selectSalesValuesByProdId(prodSku.getProdId()); + // Step 4: 遍历每个属性值,检查是否还在被使用 + for (ProdPropValueDO pv : allPropValues) { + String value = pv.getPropValue().trim(); + // 如果当前属性值不在“活跃使用”列表中,说明没有未删除的 SKU 使用它 + if (!currentlyUsedValues.contains(value)) { + // 可以安全删除该属性值 + // 可以安全禁用该属性值 + ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); + prodPropValueDO.setId(pv.getId()); + prodPropValueDO.setIsExpire(BaseEnum.YES_ONE.getKey()); + prodPropValueDO.setDeleteTime(new Date()); + prodPropValueMapper.updateById(prodPropValueDO); + } + } } + + @Transactional(rollbackFor = Exception.class) + public void deleteSkus(List ids) { + if (ids == null || ids.isEmpty()) { + return; + } + + // Step 1: 查询这些 SKU 的基本信息(主要是 prod_id) + List skuList = skuMapper.selectByIds(ids); + if (skuList.isEmpty()) { + return; + } + + Long prodId = skuList.get(0).getProdId(); + // 校验是否属于同一个商品(可选) + boolean allSameProd = skuList.stream().allMatch(s -> s.getProdId().equals(prodId)); + if (!allSameProd) { + throw new IllegalArgumentException("批量删除的 SKU 必须属于同一个商品"); + } + + + // Step 3: 获取该商品下【当前仍然未删除】的 SKU 的 properties + List activeProperties = skuMapper.selectPropertiesByProdIdAndNotDeleted(prodId); + + for(Long id:ids){ + SkuDO sku = new SkuDO(); + sku.setSkuId(id); + sku.setDeleteTime(new Date()); + // 删除 + skuMapper.deleteById(sku); + } + // Step 4: 提取所有仍在使用的属性值(去重 + trim) + Set currentlyUsedValues = new HashSet<>(); + for (String props : activeProperties) { + if (props != null && !props.trim().isEmpty()) { + String[] values = props.split(","); + for (String v : values) { + currentlyUsedValues.add(v.trim()); + } + } + } + + // Step 5: 查询该商品下所有 rule=1 的销售属性值(未删除的) + List allPropValues = prodPropValueMapper.selectSalesValuesByProdId(prodId); + + // Step 6: 收集需要删除的属性值 ID + List valueIdsToDelete = new ArrayList<>(); + for (ProdPropValueDO pv : allPropValues) { + String value = pv.getPropValue().trim(); + if (!currentlyUsedValues.contains(value)) { + valueIdsToDelete.add(pv.getId()); + } + } + // Step 7: 批量删除无用的属性值 + if (!valueIdsToDelete.isEmpty()) { + prodPropValueMapper.batchMarkDeleted(valueIdsToDelete); + } + } + + @Override + public void updatSkuIsShelf(Long id, Integer isShelf) { + // 校验存在 + validateSkuExists(id); + + SkuDO prodSku = skuMapper.selectById( id); + // Step 1: 获取该商品下所有未禁用的 SKU 的 properties + List activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodSku.getProdId()); + SkuDO sku = new SkuDO(); + sku.setSkuId(id); + sku.setIsShelf(isShelf); + skuMapper.updateById(sku); + // Step 2: 提取所有正在被使用的属性值(去重) + Set currentlyUsedValues = new HashSet<>(); + for (String props : activeProperties) { + if (props != null && !props.trim().isEmpty()) { + String[] values = props.split(","); + for (String v : values) { + currentlyUsedValues.add(v.trim()); + } + } + } + // Step 3: 查询该商品下所有 rule=1 的属性值(销售属性) + List allPropValues = prodPropValueMapper.selectSalesValuesByState(prodSku.getProdId()); + // Step 4: 遍历每个属性值,检查是否还在被使用 + for (ProdPropValueDO pv : allPropValues) { + String value = pv.getPropValue().trim(); + // 如果当前属性值不在“活跃使用”列表中,说明没有未删除的 SKU 使用它 + if (!currentlyUsedValues.contains(value)) { + // 可以安全禁用该属性值 + ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); + prodPropValueDO.setId(pv.getId()); + prodPropValueDO.setState(BaseEnum.NO_ZERO.getKey()); + prodPropValueMapper.updateById(prodPropValueDO); + } + } + } + + @Override + public void updatSkuIsShelfs(List ids, Integer isShelf) { + if (ids == null || ids.isEmpty()) { + return; + } + + // Step 1: 查询这些 SKU 的基本信息(主要是 prod_id) + List skuList = skuMapper.selectByIds(ids); + if (skuList.isEmpty()) { + return; + } + + Long prodId = skuList.get(0).getProdId(); + // 校验是否属于同一个商品(可选) + boolean allSameProd = skuList.stream().allMatch(s -> s.getProdId().equals(prodId)); + if (!allSameProd) { + throw new IllegalArgumentException("批量删除的 SKU 必须属于同一个商品"); + } + + + // Step 3: 获取该商品下【当前仍然未禁用】的 SKU 的 properties + List activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodId); + + for(Long id:ids){ + SkuDO sku = new SkuDO(); + sku.setSkuId(id); + sku.setIsShelf(isShelf); + skuMapper.updateBatch(sku); + } + // Step 4: 提取所有仍在使用的属性值(去重 + trim) + Set currentlyUsedValues = new HashSet<>(); + for (String props : activeProperties) { + if (props != null && !props.trim().isEmpty()) { + String[] values = props.split(","); + for (String v : values) { + currentlyUsedValues.add(v.trim()); + } + } + } + + // Step 5: 查询该商品下所有 rule=1 的销售属性值(未删除的) + List allPropValues = prodPropValueMapper.selectSalesValuesByState(prodId); + + // Step 6: 收集需要删除的属性值 ID + List valueIdsToDelete = new ArrayList<>(); + for (ProdPropValueDO pv : allPropValues) { + String value = pv.getPropValue().trim(); + if (!currentlyUsedValues.contains(value)) { + valueIdsToDelete.add(pv.getId()); + } + } + // Step 7: 批量删除无用的属性值 + if (!valueIdsToDelete.isEmpty()) { + prodPropValueMapper.batchMarkDeleted(valueIdsToDelete); + } + } + + private void validateSkuExists(Long id) { if (skuMapper.selectById(id) == null) { throw exception(ErrorCodeConstants.SKU_NOT_EXISTS); @@ -484,6 +702,14 @@ public class SkuServiceImpl implements SkuService { return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); } + @Override + public PageResult getSkuPageList(SkuPageReqVO pageReqVO){ + IPage prodPageList = skuMapper.getSkuPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getSkuId(),pageReqVO.getProperties()); + + return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + } + + @Override public PageResult getSkuPage(SkuPageReqVO pageReqVO) { diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml index 322fa66..1f8290c 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml @@ -233,8 +233,25 @@ - + SELECT * FROM tz_prod + where deleted = 0 + + AND create_time BETWEEN #{createTime[0]} AND #{createTime[1]} + + + AND prod_name = #{prodName} + + + AND shop_id = #{shopId} + + + AND status = #{status} + + + AND category_id = #{categoryId} + + ORDER by create_time DESC @@ -502,4 +519,15 @@ ORDER BY p.prod_id + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml index 83dde24..269d0aa 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml @@ -14,4 +14,47 @@ (#{propId},#{prodPropValue.propValue}) + + + + + + + + + + + + + UPDATE tz_prod_prop_value + SET is_expire = 1, delete_time = NOW() + WHERE id IN + + #{ids} + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml index 746575d..35b464d 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml @@ -17,6 +17,20 @@ + + + + + + + + + + \ No newline at end of file From 7afa85b94142ba330c5b71e126e4d24c84f93c6c Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Thu, 14 Aug 2025 14:13:29 +0800 Subject: [PATCH 21/22] =?UTF-8?q?sku=E8=A7=84=E5=88=99=E6=81=A2=E5=A4=8D?= =?UTF-8?q?=E5=92=8C=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/product/vo/prod/ProdListVO.java | 58 ++-- .../controller/admin/ProdController.java | 21 +- .../controller/admin/SkuController.java | 23 +- .../cloud/product/mapper/ProdMapper.java | 5 +- .../product/mapper/ProdPropValueMapper.java | 5 + .../cloud/product/mapper/SkuMapper.java | 4 + .../cloud/product/service/ProdService.java | 14 +- .../cloud/product/service/SkuService.java | 7 + .../impl/ProdPropValueServiceImpl.java | 2 +- .../product/service/impl/ProdServiceImpl.java | 147 ++++++-- .../product/service/impl/SkuServiceImpl.java | 326 +++++++++++++----- .../resources/mapper/product/ProdMapper.xml | 59 +++- .../mapper/product/ProdPropValueMapper.xml | 29 +- .../resources/mapper/product/SkuMapper.xml | 23 +- 14 files changed, 539 insertions(+), 184 deletions(-) diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java index e636c7a..8076553 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java @@ -2,6 +2,7 @@ package com.tashow.cloud.productapi.api.product.vo.prod; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; import com.tashow.cloud.productapi.api.product.dto.*; import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasInfoVO; @@ -9,6 +10,7 @@ import com.tashow.cloud.productapi.general.StringListTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.Date; import java.util.List; @Schema(description = "商品服务配置 VO") @@ -25,50 +27,36 @@ public class ProdListVO { */ private String prodName; /** - * 商品简称 + * 分类名称 */ - private String abbreviation; + private String categoryName; /** * 店铺id */ private Long shopId; - /** - * 是否置灰0否1是 + * 店铺id */ - private Integer isProhibit; - - /** - * 审核备注 - */ - private String processNotes; - /** - * 详细描述 - */ - private String content; - /** - * 商品编号 - */ - private String prodNumber; - /** - * 商品主图 - */ - private String pic; - /** - * 商品轮播图片,以,分割 - */ - private String imgs; - /** - * 商品轮播图片,以,分割 - */ - private String whiteImg; - - /** - * 默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核 - */ - private Integer status; + private String shopName; + @Schema(description = "") + /** + * 服务区域地址名称集合 + */ + private List areaNameList; + + + /** + * 还剩多少天 + */ + private Long remainingDays; + + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date deleteTime; } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java index ab29443..7c108cc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java @@ -6,10 +6,7 @@ import com.tashow.cloud.product.mapper.ProdMapper; import com.tashow.cloud.productapi.api.product.dto.ProdDO; import com.tashow.cloud.product.service.ProdService; import com.tashow.cloud.productapi.api.product.dto.SkuDO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdRecycleBinVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.vo.prod.*; import com.tashow.cloud.productapi.api.product.vo.sku.SkuPageReqVO; import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import com.tashow.cloud.productapi.enums.BaseEnum; @@ -145,8 +142,20 @@ public class ProdController { @PermitAll @GetMapping("/getProdRecycleBinPageList") @Operation(summary = "获得商品回收站分页列表") - public CommonResult> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) { - PageResult pageResult = prodService.getProdRecycleBinPageList(prodRecycleBinVO); + public CommonResult> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) { + PageResult pageResult = prodService.getProdRecycleBinPageList(prodRecycleBinVO); return success(pageResult); } + + + @PostMapping("/restoreProdList") + @Operation(summary = "恢复商品") + @Parameter(name = "ids", description = "商品id集合", required = true) + @PermitAll + public CommonResult restoreProdList(@RequestParam("ids") List ids) { + prodService.restoreProdList(ids); + return success(true); + } + + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java index f71b525..101f470 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/SkuController.java @@ -107,7 +107,7 @@ public class SkuController { @Operation(summary = "批量删除SKU") @Parameter(name = "ids", description = "编号", required = true) @PermitAll - public CommonResult deleteSkuList(@RequestParam("id") List ids) { + public CommonResult deleteSkuList(@RequestParam("ids") List ids) { /*for(Long id:ids){ SkuDO sku = new SkuDO(); sku.setSkuId(id); @@ -120,9 +120,9 @@ public class SkuController { } - @DeleteMapping("/updateSkuShelf") + @PostMapping("/updateSkuShelf") @Operation(summary = "修改单品上下架") - @Parameter(name = "ids", description = "编号", required = true) + @Parameter(name = "id", description = "编号", required = true) @Parameter(name = "isShelf", description = "是否上下架(0下架 1上架)", required = true) @PermitAll public CommonResult updateSkuShelf(@RequestParam("id") Long id,@RequestParam("isShelf") Integer isShelf) { @@ -130,12 +130,12 @@ public class SkuController { return success(true); } - @DeleteMapping("/updateSkuShelfList") + @PostMapping("/updateSkuShelfList") @Operation(summary = "批量上下架") @Parameter(name = "ids", description = "编号", required = true) @Parameter(name = "isShelf", description = "是否上下架(0下架 1上架)", required = true) @PermitAll - public CommonResult updateSkuShelfList(@RequestParam("id") List ids,@RequestParam("isShelf") Integer isShelf) { + public CommonResult updateSkuShelfList(@RequestParam("ids") List ids,@RequestParam("isShelf") Integer isShelf) { for(Long id:ids){ SkuDO sku = new SkuDO(); sku.setSkuId(id); @@ -164,6 +164,18 @@ public class SkuController { return success(pageResult); } + + @PostMapping("/restoreSkuList") + @Operation(summary = "恢复SKU") + @Parameter(name = "ids", description = "skuids", required = true) + @PermitAll + public CommonResult restoreSkuList(@RequestParam("ids") List ids) { + skuService.restoreSkuList(ids); + return success(true); + } + + + @PermitAll @GetMapping("/getSkuPageList") @Operation(summary = "获得SKU分页列表") @@ -173,6 +185,7 @@ public class SkuController { } + /* @PermitAll @GetMapping("/getSkuRecycleBinPageList") @Operation(summary = "获得SKU回收站分页列表") diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java index 9ec8cf9..87dc157 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java @@ -8,6 +8,7 @@ import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.mybatis.mybatis.core.query.LambdaQueryWrapperX; import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; import com.tashow.cloud.productapi.api.product.dto.*; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdListVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; @@ -47,7 +48,9 @@ public interface ProdMapper extends BaseMapperX { , @Param("weightSwitch") Integer weightSwitch ); - IPage getProdRecycleBinPageList(Page page,@Param("createTime") String[] createTime + IPage getProdRecycleBinPageList(Page page, @Param("createTime") String[] createTime , @Param("prodName") String prodName); + + void batchRestoreProd(@Param("ids") List ids); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java index 9695049..3c06500 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdPropValueMapper.java @@ -29,4 +29,9 @@ public interface ProdPropValueMapper extends BaseMapperX { List selectSalesValuesByState(@Param("prodId") Long prodId); void batchMarkDeleted(@Param("ids") List ids); + + int deleteProdPropValueById( @Param("id")Long id); + + List selectRestoreProp(@Param("prodId") Long prodId); + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java index f30230b..f999bfd 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/SkuMapper.java @@ -27,4 +27,8 @@ public interface SkuMapper extends BaseMapperX { List selectPropertiesByProdIdAndNotDeleted( @Param("prodId")Long prodId); List selectPropertiesByProdIdShelf( @Param("prodId")Long prodId); + + int deleteBySkuId( @Param("skuId")Long skuId); + + void batchSkuDeleted(@Param("ids") List ids); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index d5c6470..fe13e70 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -3,10 +3,7 @@ package com.tashow.cloud.product.service; import java.util.*; import com.tashow.cloud.productapi.api.product.dto.ProdDO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdRecycleBinVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdSaveReqVO; -import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; +import com.tashow.cloud.productapi.api.product.vo.prod.*; import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import jakarta.validation.*; import com.tashow.cloud.common.pojo.PageResult; @@ -84,5 +81,12 @@ public interface ProdService { */ PageResult getProdPage(ProdPageReqVO pageReqVO); - PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO); + PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO); + + /** + * 恢复商品 + * + * @param ids + */ + void restoreProdList(List ids); } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java index bb11c78..05ff1bc 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/SkuService.java @@ -88,6 +88,13 @@ public interface SkuService { */ void deleteSkus(List ids); + /** + * 恢复SKU + * + * @param ids + */ + void restoreSkuList(List ids); + /** * 删除单品SKU diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java index 44d62e2..a724c9f 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdPropValueServiceImpl.java @@ -54,7 +54,7 @@ public class ProdPropValueServiceImpl extends ServiceImpl areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); - for(String areaName : areaNameList){ - //查询区域信息 - ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() - .eq(ProdServiceAreasDO::getAreaName, areaName) - ); - if(prodServiceAreas == null){ - //插入关联表 - prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() - .setProdId(prodServiceVO.getProdId()) - .setAreaId(prodServiceAreas.getId()) + ProdServiceOverAreaRulesDO overAreaRules= prodServiceOverAreaRulesMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdServiceOverAreaRulesDO::getProdId, prodServiceVO.getProdId())); + if(overAreaRules==null){ + prod.setRegionSwitch(BaseEnum.YES_ONE.getKey()); + //保存区域设置信息 + ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(prodServiceVO.getProdServiceAreasInfo(), ProdServiceOverAreaRulesDO.class); + prodServiceOverAreaRules.setProdId(prod.getProdId()); + prodServiceOverAreaRulesMapper.insert(prodServiceOverAreaRules); + //保存区域 + List areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); + for(String areaName : areaNameList){ + //查询区域信息 + ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdServiceAreasDO::getAreaName, areaName) ); + if(prodServiceAreas != null){ + //插入关联表 + prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() + .setProdId(prod.getProdId()) + .setAreaId(prodServiceAreas.getId()) + ); + } + } + }else { + //保存区域设置信息 + ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(prodServiceVO.getProdServiceAreasInfo(), ProdServiceOverAreaRulesDO.class); + prodServiceOverAreaRules.setProdId(prodServiceVO.getProdId()); + prodServiceOverAreaRulesMapper.updateById(prodServiceOverAreaRules); + //先批量删除区域关联表 + prodServiceAreaRelevanceMapper.deleteRelevance(prodServiceVO.getProdId()); + //保存区域 + List areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); + for(String areaName : areaNameList){ + //查询区域信息 + ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdServiceAreasDO::getAreaName, areaName) + ); + if(prodServiceAreas == null){ + //插入关联表 + prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() + .setProdId(prodServiceVO.getProdId()) + .setAreaId(prodServiceAreas.getId()) + ); + } } } + } //预约设置设置 if(Objects.equals(prodServiceVO.getReservationSwitch(),BaseEnum.YES_ONE.getKey())){ - prodReservationConfigMapper.updateById(prodServiceVO.prodReservationConfig); + ProdReservationConfigDO reservationConfig= prodReservationConfigMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdReservationConfigDO::getProdId, prodServiceVO.getProdId())); + if(reservationConfig==null){ + prod.setReservationSwitch(BaseEnum.YES_ONE.getKey()); + ProdReservationConfigDO prodReservationConfigDO = prodServiceVO.getProdReservationConfig(); + prodReservationConfigDO.setProdId(prod.getProdId()); + prodReservationConfigMapper.insert(prodReservationConfigDO); + }else { + prodReservationConfigMapper.updateById(prodServiceVO.getProdReservationConfig()); + } } //紧急响应设置 if(Objects.equals(prodServiceVO.getEmergencySwitch(),BaseEnum.YES_ONE.getKey())){ - ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); - if(prodEmergencyResponse!=null){ - prodEmergencyResponseMapper.updateById(prodEmergencyResponse); - prodEmergencyResponseIntervalsMapper.deleteIntervals(prodEmergencyResponse.getId()); + ProdEmergencyResponseDO rmergencyResponse= prodEmergencyResponseMapper.selectOne(new LambdaQueryWrapper() + .eq(ProdEmergencyResponseDO::getProdId, prodServiceVO.getProdId())); + if(rmergencyResponse==null){ + prod.setEmergencySwitch(BaseEnum.YES_ONE.getKey()); + // 插入 + ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); + prodEmergencyResponse.setProdId(prod.getProdId()); + prodEmergencyResponseMapper.insert(prodEmergencyResponse); for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); } + }else { + ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); + if(prodEmergencyResponse!=null){ + prodEmergencyResponseMapper.updateById(prodEmergencyResponse); + prodEmergencyResponseIntervalsMapper.deleteIntervals(prodEmergencyResponse.getId()); + for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ + prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); + prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + } + } } - } //接单上线设置 if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){ - productOrderLimitMapper.updateById(prodServiceVO.productOrderLimitVO); + ProductOrderLimitDO orderLimit= productOrderLimitMapper.selectOne(new LambdaQueryWrapper() + .eq(ProductOrderLimitDO::getProdId, prodServiceVO.getProdId())); + if(orderLimit==null){ + prod.setOrderLimitSwitch(BaseEnum.YES_ONE.getKey()); + ProductOrderLimitDO productOrderLimit = prodServiceVO.getProductOrderLimitVO(); + productOrderLimit.setProdId(prod.getProdId()); + productOrderLimitMapper.insert(productOrderLimit); + }else { + productOrderLimitMapper.updateById(prodServiceVO.getProductOrderLimitVO()); + } } //特殊时段设置 if(Objects.equals(prodServiceVO.getAdditionalSwitch(),BaseEnum.YES_ONE.getKey())){ for (ProdAdditionalFeeDatesDO prodAdditionalFeeDates : prodServiceVO.getProdAdditionalFeeDatesList()){ - prodAdditionalFeeDatesMapper.updateById(prodAdditionalFeeDates); + if(prodAdditionalFeeDates.getId()==null){ + prodAdditionalFeeDates.setProdId(prodServiceVO.getProdId()); + prodAdditionalFeeDatesMapper.insert(prodAdditionalFeeDates); + }else { + prodAdditionalFeeDatesMapper.updateById(prodAdditionalFeeDates); + } } } //特殊日期设置 if(Objects.equals(prodServiceVO.getAdditionalFeeSwitch(),BaseEnum.YES_ONE.getKey())){ for (ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods : prodServiceVO.getProdAdditionalFeePeriodsList()){ - prodAdditionalFeePeriodsMapper.updateById(prodAdditionalFeePeriods); + if(prodAdditionalFeePeriods.getId()==null){ + prodAdditionalFeePeriods.setProdId(prodServiceVO.getProdId()); + prodAdditionalFeePeriodsMapper.insert(prodAdditionalFeePeriods); + }else { + prodAdditionalFeePeriodsMapper.updateById(prodAdditionalFeePeriods); + } } } //体重设置 if(Objects.equals(prodServiceVO.getWeightSwitch(),BaseEnum.YES_ONE.getKey())){ - prodWeightRangePricesMapper.updateById(prodServiceVO.prodWeightConfig); + if(prodServiceVO.getProdWeightConfig().getId()==null){ + prod.setWeightSwitch(BaseEnum.YES_ONE.getKey()); + ProdWeightRangePricesDO prodWeightRangePrices = prodServiceVO.getProdWeightConfig(); + prodWeightRangePrices.setProdId(prod.getProdId()); + prodWeightRangePricesMapper.insert(prodWeightRangePrices); + }else { + prodWeightRangePricesMapper.updateById(prodServiceVO.getProdWeightConfig()); + } } prodMapper.updateById(prod); } @@ -302,12 +372,17 @@ public class ProdServiceImpl implements ProdService { } @Override - public PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO){ - IPage prodPageList = prodMapper.getProdRecycleBinPageList(MyBatisUtils.buildPage(prodRecycleBinVO), prodRecycleBinVO.getDeleteTime(), prodRecycleBinVO.getProdName()); - for(SkuRecycleBinVO prodPage : prodPageList.getRecords()){ + public PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO){ + IPage prodPageList = prodMapper.getProdRecycleBinPageList(MyBatisUtils.buildPage(prodRecycleBinVO), prodRecycleBinVO.getDeleteTime(), prodRecycleBinVO.getProdName()); + for(ProdListVO prodPage : prodPageList.getRecords()){ prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); } return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); } + @Override + public void restoreProdList(List ids) { + prodMapper.batchRestoreProd(ids); + } + } \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java index 90f954b..03af5c2 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/SkuServiceImpl.java @@ -23,6 +23,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; + import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.util.object.BeanUtils; @@ -76,14 +78,14 @@ public class SkuServiceImpl implements SkuService { @Transactional public void createSkuExtend(SkuExtendVO skuExtendVO) { //接运车辆配置 - if(Objects.equals(skuExtendVO.getTransportCarSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getTransportCarSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.TRANSPORT_CAR_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.TRANSPORT_CAR_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetailsDO:skuExtendVO.getTransportCarList()){ + for (SkuServiceDetailsDO skuServiceDetailsDO : skuExtendVO.getTransportCarList()) { skuServiceDetailsDO.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetailsDO); } @@ -93,20 +95,20 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.TRANSPORT_CAR_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getTransportCarMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getTransportCarMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //遗体运输目的地配置 - if(Objects.equals(skuExtendVO.getTrafficSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getTrafficSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.BODY_TRANSPORT_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.BODY_TRANSPORT_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceTransportDO skuServiceTransportDO:skuExtendVO.getTrafficList()){ + for (SkuServiceTransportDO skuServiceTransportDO : skuExtendVO.getTrafficList()) { skuServiceTransportDO.setServiceId(skuServicesFormDO.getId()); skuServiceTransportMapper.insert(skuServiceTransportDO); } @@ -116,20 +118,20 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.BODY_TRANSPORT_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getTrafficMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getTrafficMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //遗体清洁配置 - if(Objects.equals(skuExtendVO.getCleanSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getCleanSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.BODY_CLEAN_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.BODY_CLEAN_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getCleanList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getCleanList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -139,20 +141,20 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.BODY_CLEAN_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getCleanMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getCleanMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //追思告别配置 - if(Objects.equals(skuExtendVO.getReflectionSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getReflectionSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.MEMORIAL_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.MEMORIAL_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getReflectionList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getReflectionList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -162,21 +164,21 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.MEMORIAL_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getReflectionMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getReflectionMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //遗体火化配置 - if(Objects.equals(skuExtendVO.getCremationSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getCremationSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.CREMATION_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.CREMATION_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getCremationList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getCremationList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -186,21 +188,21 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.CREMATION_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getCremationMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getCremationMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //骨灰处理配置 - if(Objects.equals(skuExtendVO.getAshProcessingSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getAshProcessingSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.ASH_PROCESSING_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.ASH_PROCESSING_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getAshProcessingList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getAshProcessingList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -210,7 +212,7 @@ public class SkuServiceImpl implements SkuService { skuForm.setType(ServiceTypeEnum.ASH_PROCESSING_DELIVERY.getCode()); skuForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuForm); - for(SkuServiceDeliverDO skuServiceDeliverDO:skuExtendVO.getAshProcessingDeliverList()){ + for (SkuServiceDeliverDO skuServiceDeliverDO : skuExtendVO.getAshProcessingDeliverList()) { skuServiceDeliverDO.setServiceId(skuForm.getId()); skuServiceDeliverMapper.insert(skuServiceDeliverDO); } @@ -220,35 +222,35 @@ public class SkuServiceImpl implements SkuService { skuServicesForm.setType(ServiceTypeEnum.ASH_PROCESSING_MATERIAL.getCode()); skuServicesForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesForm); - for(SkuServiceMaterialDO skuServiceMaterialDO:skuExtendVO.getAshProcessingMaterialList()){ + for (SkuServiceMaterialDO skuServiceMaterialDO : skuExtendVO.getAshProcessingMaterialList()) { skuServiceMaterialDO.setServiceId(skuServicesForm.getId()); skuServiceMaterialMapper.insert(skuServiceMaterialDO); } } //骨灰装殓配置 - if(Objects.equals(skuExtendVO.getBoneashSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getBoneashSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.BONE_ASH_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.BONE_ASH_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getBoneashList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getBoneashList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } } //纪念品配置 - if(Objects.equals(skuExtendVO.getSouvenirSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(skuExtendVO.getSouvenirSwitch(), BaseEnum.YES_ONE.getKey())) { SkuServicesFormDO skuServicesFormDO = new SkuServicesFormDO(); skuServicesFormDO.setServiceName(ServiceTypeEnum.SOUVENIR_CONFIG.getDescription()); skuServicesFormDO.setIsEnabled(BaseEnum.YES_ONE.getKey()); skuServicesFormDO.setType(ServiceTypeEnum.SOUVENIR_CONFIG.getCode()); skuServicesFormDO.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuServicesFormDO); - for(SkuServiceDetailsDO skuServiceDetails:skuExtendVO.getSouvenirList()){ + for (SkuServiceDetailsDO skuServiceDetails : skuExtendVO.getSouvenirList()) { skuServiceDetails.setServiceId(skuServicesFormDO.getId()); skuServiceDetailsMapper.insert(skuServiceDetails); } @@ -258,7 +260,7 @@ public class SkuServiceImpl implements SkuService { skuForm.setType(ServiceTypeEnum.SOUVENIR_DELIVERY.getCode()); skuForm.setName(skuExtendVO.getSkuFormName()); skuServicesFormMapper.insert(skuForm); - for(SkuServiceDeliverDO skuServiceDeliverDO:skuExtendVO.getSouvenirDeliverList()){ + for (SkuServiceDeliverDO skuServiceDeliverDO : skuExtendVO.getSouvenirDeliverList()) { skuServiceDeliverDO.setServiceId(skuForm.getId()); skuServiceDeliverMapper.insert(skuServiceDeliverDO); } @@ -374,6 +376,7 @@ public class SkuServiceImpl implements SkuService { // 4. 返回组装好的对象 return skuExtendVO; } + @Override public void updateSku(SkuSaveReqVO updateReqVO) { // 校验存在 @@ -391,73 +394,77 @@ public class SkuServiceImpl implements SkuService { List skuList = skuPropVO.getSkuList(); List skuListNew = new ArrayList<>(); List skuListUpdate = new ArrayList<>(); - for(SkuDO sku : skuList){ - if(Objects.equals(BaseEnum.YES_ONE.getKey(), sku.getIsExist())){ + for (SkuDO sku : skuList) { + if (Objects.equals(BaseEnum.YES_ONE.getKey(), sku.getIsExist())) { sku.setProdId(skuPropVO.getProdId()); skuListNew.add(sku); - }else { + } else { skuListUpdate.add(sku); } } - if(CollUtil.isNotEmpty(skuListNew)){ + if (CollUtil.isNotEmpty(skuListNew)) { skuMapper.insertBatch(skuListNew); } - if(CollUtil.isNotEmpty(skuListUpdate)){ + if (CollUtil.isNotEmpty(skuListUpdate)) { skuMapper.updateBatch(skuListUpdate); } } - prodExtendMapper.updateByProdId(skuPropVO.getProdId(),skuPropVO.getIsDisable(),skuPropVO.getIsExpire()); + prodExtendMapper.updateByProdId(skuPropVO.getProdId(), skuPropVO.getIsDisable(), skuPropVO.getIsExpire()); //保存规格 prodPropService.updateProdPropAndValues(skuPropVO); } @Override public void deleteProp(Long id) { - ProdPropValueDO prodPropValueDO =prodPropValueService.getById(id); + ProdPropValueDO prodPropValueDO = prodPropValueService.getById(id); prodPropValueService.deleteProdPropValue(id); - List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); - List skuDOList1 = new ArrayList<>(); - for(SkuDO skuDO : skuDOList){ - if(skuDO.getProperties()!=null){ + List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); + List skuids = new ArrayList<>(); + for (SkuDO skuDO : skuDOList) { + if (skuDO.getProperties() != null) { String[] split = skuDO.getProperties().split(","); - for (String s : split){ - if(s.equals(prodPropValueDO.getPropValue())){ - skuDOList1.add(skuDO); + for (String s : split) { + if (s.equals(prodPropValueDO.getPropValue())) { + skuids.add(skuDO.getSkuId()); } } } } - skuMapper.deleteByIds(skuDOList1); + if (CollUtil.isNotEmpty(skuids)) { + skuMapper.batchSkuDeleted(skuids); + } } @Override public void disableProp(Long id) { - ProdPropValueDO prodPropValueDO =prodPropValueService.getById(id); + ProdPropValueDO prodPropValueDO = prodPropValueService.getById(id); prodPropValueDO.setState(BaseEnum.YES_ONE.getKey()); prodPropValueService.updateById(prodPropValueDO); - List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); + List skuDOList = skuMapper.getSkuListByName(prodPropValueDO.getPropValue()); List skuDOList1 = new ArrayList<>(); - for(SkuDO skuDO : skuDOList){ - if(skuDO.getProperties()!=null){ + for (SkuDO skuDO : skuDOList) { + if (skuDO.getProperties() != null) { String[] split = skuDO.getProperties().split(","); - for (String s : split){ - if(s.equals(prodPropValueDO.getPropValue())){ + for (String s : split) { + if (s.equals(prodPropValueDO.getPropValue())) { skuDO.setIsShelf(BaseEnum.NO_ZERO.getKey()); skuDOList1.add(skuDO); } } } } - skuMapper.updateBatch(skuDOList1); + if (CollUtil.isNotEmpty(skuDOList1)) { + skuMapper.updateBatch(skuDOList1); + } } + @Override public SkuPropInfoVO getSKuPropList(Long prodId) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(ProdPropDO::getProdId,prodId); + wrapper.eq(ProdPropDO::getProdId, prodId); wrapper.eq(ProdPropDO::getState, BaseEnum.YES_ONE.getKey()) .orderByAsc(ProdPropDO::getSort); - List list = prodPropService.list(wrapper); list.forEach(prop -> { List values = prodPropValueService.list( @@ -465,14 +472,6 @@ public class SkuServiceImpl implements SkuService { .eq(ProdPropValueDO::getPropId, prop.getId()) .orderByAsc(ProdPropValueDO::getSort) ); - /* LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); - wrapper1.eq(ProdPropValueDO::getPropId,prop.getPropId()); - wrapper1.eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); - if (merchantComm.getScore() != null) { - wrapper.eq("score", merchantComm.getScore()); - } - wrapper1.orderByDesc(ProdPropValueDO::getSort);*/ - prop.setProdPropValues(values); }); SkuPropInfoVO skuPropInfoVO = new SkuPropInfoVO(); @@ -484,16 +483,146 @@ public class SkuServiceImpl implements SkuService { return skuPropInfoVO; } +/* @Override + public SkuPropInfoVO getSKuPropList(Long prodId, Integer isExpire, Integer state) { + if (prodId == null) { + throw new IllegalArgumentException("prodId 不能为空"); + } + + // 1. 查询商品扩展信息(用于默认值) + ProdExtendDO extendDO = prodExtendService.getOne( + new LambdaQueryWrapper().eq(ProdExtendDO::getProdId, prodId) + ); + if (extendDO == null) { + // 如果没有扩展信息,可返回空 VO 或抛异常,根据业务决定 + return buildEmptySkuPropInfoVO(prodId); + } + + // 2. 设置默认值:isExpire 和 state + Integer finalIsExpire = isExpire != null ? isExpire : extendDO.getIsExpire(); + Integer finalState = state != null ? state : extendDO.getIsDisable(); // 注意:这里你用的是 isDisable 当 state?需确认业务逻辑 + + // 3. 查询有效属性列表 + LambdaQueryWrapper propWrapper = new LambdaQueryWrapper<>(); + propWrapper.eq(ProdPropDO::getProdId, prodId) + .eq(ProdPropDO::getState, BaseEnum.YES_ONE.getKey()) // 只查启用的属性 + .orderByAsc(ProdPropDO::getSort); + + List propList = prodPropService.list(propWrapper); + if (propList.isEmpty()) { + return buildSkuPropInfoVO(prodId, propList, extendDO); + } + + // 4. 提取所有属性 ID,用于批量查询属性值 + List propIds = propList.stream() + .map(ProdPropDO::getId) + .collect(Collectors.toList()); + + // 5. 构建属性值查询条件(批量查询) + LambdaQueryWrapper valueWrapper = new LambdaQueryWrapper<>(); + valueWrapper.in(ProdPropValueDO::getPropId, propIds) + .eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); // 启用状态 + + // 根据 isExpire 过滤(注意字段是 getIsExpire) + if (BaseEnum.NO_ZERO.getKey().equals(finalIsExpire)) { + valueWrapper.eq(ProdPropValueDO::getIsExpire, BaseEnum.NO_ZERO.getKey()); + } else { + valueWrapper.eq(ProdPropValueDO::getIsExpire, BaseEnum.YES_ONE.getKey()); + } + + // 根据 state 过滤(注意:这里你用的是 getState 字段) + if (BaseEnum.NO_ZERO.getKey().equals(finalState)) { + valueWrapper.eq(ProdPropValueDO::getState, BaseEnum.NO_ZERO.getKey()); + } else { + valueWrapper.eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); + } + + valueWrapper.orderByDesc(ProdPropValueDO::getSort); + + List valueList = prodPropValueService.list(valueWrapper); + + // 6. 按 propId 分组,便于后续关联 + Map> valueMap = valueList.stream() + .collect(Collectors.groupingBy(ProdPropValueDO::getPropId)); + + // 7. 关联属性与属性值 + propList.forEach(prop -> + prop.setProdPropValues(valueMap.getOrDefault(prop.getId(), Collections.emptyList())) + ); + + // 8. 构建并返回 VO + return buildSkuPropInfoVO(prodId, propList, extendDO); + }*/ + + /* @Override + public SkuPropInfoVO getSKuPropList(Long prodId,Integer isExpire,Integer state) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProdPropDO::getProdId,prodId); + wrapper.eq(ProdPropDO::getState, BaseEnum.YES_ONE.getKey()) + .orderByAsc(ProdPropDO::getSort); + ProdExtendDO prodExtendDO = prodExtendService.getOne(new LambdaQueryWrapper().eq(ProdExtendDO::getProdId, prodId)); + if(isExpire==null){ + isExpire = prodExtendDO.getIsExpire(); + } + if(state==null){ + state = prodExtendDO.getIsDisable(); + } + List list = prodPropService.list(wrapper); + list.forEach(prop -> { + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper<>(); + wrapper1.eq(ProdPropValueDO::getPropId,prop.getId()); + wrapper1.eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); + if (isExpire!= null&& Objects.equals(BaseEnum.NO_ZERO.getKey(),isExpire) ) { + wrapper1.eq(ProdPropValueDO::getIsExpire, BaseEnum.NO_ZERO.getKey()); + }else { + wrapper1.eq(ProdPropValueDO::getIsExpire, BaseEnum.YES_ONE.getKey()); + } + if (state!= null&& Objects.equals(BaseEnum.NO_ZERO.getKey(),state) ) { + wrapper1.eq(ProdPropValueDO::getState, BaseEnum.NO_ZERO.getKey()); + }else { + wrapper1.eq(ProdPropValueDO::getState, BaseEnum.YES_ONE.getKey()); + } + wrapper1.orderByDesc(ProdPropValueDO::getSort); + List lists = prodPropValueService.list(wrapper1); + prop.setProdPropValues(lists); + }); + SkuPropInfoVO skuPropInfoVO = new SkuPropInfoVO(); + skuPropInfoVO.setProdId(prodId); + skuPropInfoVO.setProdPropSaveReqVO(list); + + skuPropInfoVO.setIsDisable(prodExtendDO.getIsDisable()); + skuPropInfoVO.setIsExpire(prodExtendDO.getIsExpire()); + return skuPropInfoVO; + }*/ + + + // 封装构建 VO 的逻辑,避免重复代码 + private SkuPropInfoVO buildSkuPropInfoVO(Long prodId, List propList, ProdExtendDO extendDO) { + SkuPropInfoVO vo = new SkuPropInfoVO(); + vo.setProdId(prodId); + vo.setProdPropSaveReqVO(propList); + vo.setIsDisable(extendDO.getIsDisable()); + vo.setIsExpire(extendDO.getIsExpire()); + return vo; + } + + // 空情况处理 + private SkuPropInfoVO buildEmptySkuPropInfoVO(Long prodId) { + SkuPropInfoVO vo = new SkuPropInfoVO(); + vo.setProdId(prodId); + vo.setProdPropSaveReqVO(Collections.emptyList()); + vo.setIsDisable(BaseEnum.NO_ZERO.getKey()); // 默认值 + vo.setIsExpire(BaseEnum.NO_ZERO.getKey()); + return vo; + } + + @Override @Transactional(rollbackFor = Exception.class) public void deleteSku(Long id) { // 校验存在 validateSkuExists(id); - SkuDO sku = new SkuDO(); - sku.setSkuId(id); - sku.setDeleteTime(new Date()); - - SkuDO prodSku = skuMapper.selectById( id); + SkuDO prodSku = skuMapper.selectById(id); // Step 1: 获取该商品下所有未删除的 SKU 的 properties List activeProperties = skuMapper.selectPropertiesByProdIdAndNotDeleted(prodSku.getProdId()); @@ -508,7 +637,7 @@ public class SkuServiceImpl implements SkuService { } } // 删除 - skuMapper.deleteById(sku); + skuMapper.deleteBySkuId(id); // Step 3: 查询该商品下所有 rule=1 的属性值(销售属性) List allPropValues = prodPropValueMapper.selectSalesValuesByProdId(prodSku.getProdId()); // Step 4: 遍历每个属性值,检查是否还在被使用 @@ -518,7 +647,7 @@ public class SkuServiceImpl implements SkuService { if (!currentlyUsedValues.contains(value)) { // 可以安全删除该属性值 // 可以安全禁用该属性值 - ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); + ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); prodPropValueDO.setId(pv.getId()); prodPropValueDO.setIsExpire(BaseEnum.YES_ONE.getKey()); prodPropValueDO.setDeleteTime(new Date()); @@ -533,30 +662,22 @@ public class SkuServiceImpl implements SkuService { if (ids == null || ids.isEmpty()) { return; } - // Step 1: 查询这些 SKU 的基本信息(主要是 prod_id) List skuList = skuMapper.selectByIds(ids); if (skuList.isEmpty()) { return; } - Long prodId = skuList.get(0).getProdId(); // 校验是否属于同一个商品(可选) boolean allSameProd = skuList.stream().allMatch(s -> s.getProdId().equals(prodId)); if (!allSameProd) { throw new IllegalArgumentException("批量删除的 SKU 必须属于同一个商品"); } - - // Step 3: 获取该商品下【当前仍然未删除】的 SKU 的 properties List activeProperties = skuMapper.selectPropertiesByProdIdAndNotDeleted(prodId); - - for(Long id:ids){ - SkuDO sku = new SkuDO(); - sku.setSkuId(id); - sku.setDeleteTime(new Date()); + for (Long id : ids) { // 删除 - skuMapper.deleteById(sku); + skuMapper.deleteBySkuId(id); } // Step 4: 提取所有仍在使用的属性值(去重 + trim) Set currentlyUsedValues = new HashSet<>(); @@ -568,7 +689,6 @@ public class SkuServiceImpl implements SkuService { } } } - // Step 5: 查询该商品下所有 rule=1 的销售属性值(未删除的) List allPropValues = prodPropValueMapper.selectSalesValuesByProdId(prodId); @@ -586,12 +706,47 @@ public class SkuServiceImpl implements SkuService { } } + //恢复SKU + @Override + @Transactional(rollbackFor = Exception.class) + public void restoreSkuList(List ids) { + List skuList = skuMapper.selectByIds(ids); + if (skuList.isEmpty()) { + return; + } + Set currentlyUsedValues = new HashSet<>(); + for (SkuDO sku : skuList) { + sku.setDeleted(BaseEnum.NO_ZERO.getKey()); + skuMapper.updateById(sku); + if (sku.getProperties() != null && !sku.getProperties().trim().isEmpty()) { + String[] values = sku.getProperties().split(","); + for (String v : values) { + currentlyUsedValues.add(v.trim()); + } + } + } + //恢复被删除的属性值 + if(!currentlyUsedValues.isEmpty()){ + Long prodId = skuList.get(0).getProdId(); + List allPropValues =prodPropValueMapper.selectRestoreProp(prodId); + if(!allPropValues.isEmpty()){ + for (ProdPropValueDO pv : allPropValues){ + if (currentlyUsedValues.contains(pv.getPropValue())) { + pv.setIsExpire(BaseEnum.NO_ZERO.getKey()); + prodPropValueMapper.updateById(pv); + } + } + } + } + } + + @Override public void updatSkuIsShelf(Long id, Integer isShelf) { // 校验存在 validateSkuExists(id); - SkuDO prodSku = skuMapper.selectById( id); + SkuDO prodSku = skuMapper.selectById(id); // Step 1: 获取该商品下所有未禁用的 SKU 的 properties List activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodSku.getProdId()); SkuDO sku = new SkuDO(); @@ -616,7 +771,7 @@ public class SkuServiceImpl implements SkuService { // 如果当前属性值不在“活跃使用”列表中,说明没有未删除的 SKU 使用它 if (!currentlyUsedValues.contains(value)) { // 可以安全禁用该属性值 - ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); + ProdPropValueDO prodPropValueDO = new ProdPropValueDO(); prodPropValueDO.setId(pv.getId()); prodPropValueDO.setState(BaseEnum.NO_ZERO.getKey()); prodPropValueMapper.updateById(prodPropValueDO); @@ -647,7 +802,7 @@ public class SkuServiceImpl implements SkuService { // Step 3: 获取该商品下【当前仍然未禁用】的 SKU 的 properties List activeProperties = skuMapper.selectPropertiesByProdIdShelf(prodId); - for(Long id:ids){ + for (Long id : ids) { SkuDO sku = new SkuDO(); sku.setSkuId(id); sku.setIsShelf(isShelf); @@ -694,23 +849,24 @@ public class SkuServiceImpl implements SkuService { } @Override - public PageResult getSkuRecycleBinPageList(SkuPageReqVO pageReqVO){ + public PageResult getSkuRecycleBinPageList(SkuPageReqVO pageReqVO) { IPage prodPageList = skuMapper.getSkuRecycleBinPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getProperties()); - for(SkuRecycleBinVO prodPage : prodPageList.getRecords()){ - prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); + for (SkuRecycleBinVO prodPage : prodPageList.getRecords()) { + if (prodPage.getDeleteTime() != null) { + prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); + } } - return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + return new PageResult<>(prodPageList.getRecords(), prodPageList.getTotal()); } @Override - public PageResult getSkuPageList(SkuPageReqVO pageReqVO){ - IPage prodPageList = skuMapper.getSkuPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getSkuId(),pageReqVO.getProperties()); + public PageResult getSkuPageList(SkuPageReqVO pageReqVO) { + IPage prodPageList = skuMapper.getSkuPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getProdId(), pageReqVO.getSkuId(), pageReqVO.getProperties()); - return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + return new PageResult<>(prodPageList.getRecords(), prodPageList.getTotal()); } - @Override public PageResult getSkuPage(SkuPageReqVO pageReqVO) { return null; diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml index 1f8290c..1c7c164 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml @@ -520,14 +520,65 @@ - + select tp.prod_id,tp.prod_name,tp.category_name,tp.shop_id,tsd.shop_name,tpsa.area_name + from tz_prod tp + left join tz_shop_detail tsd on tp.shop_id = tsd.shop_id + left join tz_prod_service_area_relevance tpsar on tp.prod_id = tpsar.prod_id + left join tz_prod_service_areas tpsa on tpsar.area_id = tpsa.id + where deleted = 1 - and properties like concat('%', #{prodName}, '%') + and tp.properties like concat('%', #{prodName}, '%') - AND delete_time BETWEEN #{deleteTime[0]} AND #{deleteTime[1]} + AND tp.delete_time BETWEEN #{deleteTime[0]} AND #{deleteTime[1]} + + + UPDATE tz_prod + SET deleted = 0 + WHERE prod_id IN + + #{id} + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml index 269d0aa..0587e77 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdPropValueMapper.xml @@ -22,7 +22,7 @@ SELECT pp.id AS propId, pp.prop_name, - ppv.id AS valueId, + ppv.id AS id, ppv.prop_value FROM tz_prod_prop pp JOIN tz_prod_prop_value ppv ON pp.id = ppv.prop_id @@ -35,7 +35,7 @@ SELECT pp.id AS propId, pp.prop_name, - ppv.id AS valueId, + ppv.id AS id, ppv.prop_value FROM tz_prod_prop pp JOIN tz_prod_prop_value ppv ON pp.id = ppv.prop_id @@ -54,7 +54,30 @@ SET is_expire = 1, delete_time = NOW() WHERE id IN - #{ids} + #{id} + + + + UPDATE tz_prod_prop_value + SET + is_expire = 1, delete_time = NOW() + WHERE id = #{id} + + + + + + \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml index 35b464d..4d34704 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/SkuMapper.xml @@ -26,14 +26,14 @@ and sku_id = #{skuId} - and properties like concat('%', #{propertiesName}, '%') + and properties like concat('%', #{properties}, '%') @@ -55,5 +55,22 @@ and is_shelf =0 + + UPDATE tz_sku + SET + deleted = 1, + delete_time = now() + WHERE sku_id = #{skuId} + + + + UPDATE tz_sku + SET deleted = 1, + delete_time = now() + WHERE sku_id IN + + #{id} + + \ No newline at end of file From ce643990d8a41454ff0992ba8dbc21480ef633f0 Mon Sep 17 00:00:00 2001 From: xuelijun <977662702@qq.com> Date: Fri, 15 Aug 2025 18:27:57 +0800 Subject: [PATCH 22/22] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../product/dto/ProdAdditionalFeeDatesDO.java | 12 +- .../dto/ProdAdditionalFeePeriodsDO.java | 8 +- .../product/dto/ProdEmergencyResponseDO.java | 19 +- .../dto/ProdEmergencyResponseIntervalsDO.java | 7 +- .../product/dto/ProdReservationConfigDO.java | 45 ++++- .../product/dto/ProdWeightRangePricesDO.java | 2 +- .../api/product/vo/prod/ProdListVO.java | 34 +++- .../product/vo/prod/ProdRestoreListVO.java | 71 ++++++++ .../api/product/vo/prod/ProdServiceVO.java | 18 ++ .../ProdAdditionalFeePeriodsRespVO.java | 3 +- .../ProdAdditionalFeePeriodsSaveReqVO.java | 3 +- .../ProdEmergencyInfoVO.java | 12 +- .../ProdEmergencyResponsePageReqVO.java | 13 +- .../ProdEmergencyResponseSaveReqVO.java | 15 +- ...odEmergencyResponseIntervalsPageReqVO.java | 2 +- .../ProdEmergencyResponseIntervalsRespVO.java | 2 +- ...odEmergencyResponseIntervalsSaveReqVO.java | 2 +- .../ProdReservationConfigPageReqVO.java | 13 +- .../ProdReservationConfigRespVO.java | 19 +- .../ProdReservationConfigSaveReqVO.java | 15 +- .../vo/prodreservationconfig/TimeBookVO.java | 23 +++ .../controller/admin/ProdController.java | 8 +- .../cloud/product/mapper/ProdMapper.java | 5 +- .../cloud/product/service/ProdService.java | 4 +- .../product/service/impl/ProdServiceImpl.java | 171 ++++++++++-------- .../resources/mapper/product/ProdMapper.xml | 132 +++++++++----- 26 files changed, 462 insertions(+), 196 deletions(-) create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRestoreListVO.java create mode 100644 tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/TimeBookVO.java diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeeDatesDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeeDatesDO.java index a5722c6..ae0b33a 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeeDatesDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeeDatesDO.java @@ -2,12 +2,14 @@ package com.tashow.cloud.productapi.api.product.dto; import com.baomidou.mybatisplus.annotation.KeySequence; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import com.tashow.cloud.productapi.general.StringListTypeHandler; import lombok.*; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.math.BigDecimal; +import java.util.List; /** * 特殊日期附加费用规则 DO @@ -42,13 +44,15 @@ public class ProdAdditionalFeeDatesDO extends BaseDO { */ private Integer dateType; /** - * 自定义日期时间段(JSON格式存储) + * 自定义日期时间段 */ - private String customTimeSlots; + @TableField(typeHandler = StringListTypeHandler.class) + private List customTimeSlots; /** - * 指定日期(JSON格式存储) + * 指定日期 */ - private String specificDates; + @TableField(typeHandler = StringListTypeHandler.class) + private List specificDates; /** * 收费方式0:''固定金额'':1:''基准价上浮 */ diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeePeriodsDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeePeriodsDO.java index 2f3ec84..a657bd5 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeePeriodsDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdAdditionalFeePeriodsDO.java @@ -1,9 +1,12 @@ package com.tashow.cloud.productapi.api.product.dto; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import com.tashow.cloud.productapi.general.StringListTypeHandler; import lombok.*; import java.math.BigDecimal; +import java.util.List; + import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -37,9 +40,10 @@ public class ProdAdditionalFeePeriodsDO extends BaseDO { */ private String name; /** - * 特殊时段设置(JSON格式存储) + * 特殊时段设置 */ - private String specialTimeSlots; + @TableField(typeHandler = StringListTypeHandler.class) + private List specialTimeSlots; /** * 收费方式0:'固定金额',1:'基准价上浮' */ diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseDO.java index 2c03732..3259231 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseDO.java @@ -1,11 +1,15 @@ package com.tashow.cloud.productapi.api.product.dto; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import com.tashow.cloud.productapi.general.StringListTypeHandler; import lombok.*; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + +import java.util.List; + /** * 商品紧急响应服务设置 DO * @@ -31,17 +35,20 @@ public class ProdEmergencyResponseDO extends BaseDO { */ private Long prodId; /** - * 可响应时间段(JSON格式存储) + * 可响应时间段 */ - private String responseTimeSlots; + @TableField(typeHandler = StringListTypeHandler.class) + private List responseTimeSlots; /** - * 黑名自定义日期(JSON格式存储) + * 黑名自定义日期 */ - private String blacklistedDates; + @TableField(typeHandler = StringListTypeHandler.class) + private List blacklistedDates; /** - * 黑名单指定日期(JSON格式存储) + * 黑名单指定日期 */ - private String blackAppointDates; + @TableField(typeHandler = StringListTypeHandler.class) + private List blackAppointDates; /** * 法定节假日是否开启0:关闭1开启 */ diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseIntervalsDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseIntervalsDO.java index bdecbdb..af57496 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseIntervalsDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdEmergencyResponseIntervalsDO.java @@ -32,6 +32,11 @@ public class ProdEmergencyResponseIntervalsDO extends BaseDO { * 关联的紧急响应服务配置ID */ private Long configId; + /** + * 商品ID + */ + private Long prodId; + /** * 响应模式名称 */ @@ -39,7 +44,7 @@ public class ProdEmergencyResponseIntervalsDO extends BaseDO { /** * 响应时间(小时) */ - private Integer responseHours; + private BigDecimal responseHours; /** * 收费模式0:固定收费 1:浮动收费 */ diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdReservationConfigDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdReservationConfigDO.java index abb344c..43236ab 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdReservationConfigDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdReservationConfigDO.java @@ -1,11 +1,16 @@ package com.tashow.cloud.productapi.api.product.dto; import com.tashow.cloud.mybatis.mybatis.core.dataobject.BaseDO; +import com.tashow.cloud.productapi.api.product.vo.prodreservationconfig.TimeBookVO; +import com.tashow.cloud.productapi.general.StringListTypeHandler; import lombok.*; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; + +import java.util.List; + /** * 商品预约配置 DO * @@ -31,9 +36,10 @@ public class ProdReservationConfigDO extends BaseDO { */ private Long prodId; /** - * 预约时段设置(JSON格式存储) + * 预约时段设置 */ - private String reservationTimeSlots; + @TableField(typeHandler = StringListTypeHandler.class) + private List reservationTimeSlots; /** * 需提前多少小时预约 */ @@ -46,6 +52,12 @@ public class ProdReservationConfigDO extends BaseDO { * 是否允许更改预约时间 1可以 0不可以 */ private Integer allowChange; + + /** + * 时间段 + */ + private Integer timeSlot; + /** * 更改预约时间的时间规则(如服务开始前1小时可更改) */ @@ -55,9 +67,10 @@ public class ProdReservationConfigDO extends BaseDO { */ private Integer maxChangeTimes; /** - * 黑名自定义日期(JSON格式存储) + * 黑名自定义日期 */ - private String blacklistedDates; + @TableField(typeHandler = StringListTypeHandler.class) + private List blacklistedDates; /** * '是否开启黑名单自定义0关1开' @@ -70,9 +83,11 @@ public class ProdReservationConfigDO extends BaseDO { private Integer isBlackAppoint; /** - * 黑名单指定日期(JSON格式存储) + * 黑名单指定日期 */ - private String blackAppointDates; + //private String blackAppointDates; + @TableField(typeHandler = StringListTypeHandler.class) + private List blackAppointDates; /** * 法定节假日是否开启0:关闭1开启 */ @@ -82,4 +97,22 @@ public class ProdReservationConfigDO extends BaseDO { */ private Integer blackWeekend; + /** + * 预约时间区间设置 + */ + @TableField(exist=false) + private TimeBookVO timeBook; + + public TimeBookVO getTimeBook() { + if (this.timeBook == null) { + this.timeBook = new TimeBookVO(); + this.timeBook.setTimeSlot(this.timeSlot); + this.timeBook.setReservationTimeSlots(this.reservationTimeSlots); + } + return this.timeBook; + } + + public void setTimeBook(TimeBookVO timeBook) { + this.timeBook = timeBook; + } } \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdWeightRangePricesDO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdWeightRangePricesDO.java index 074e3c2..87c40a9 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdWeightRangePricesDO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/dto/ProdWeightRangePricesDO.java @@ -41,7 +41,7 @@ public class ProdWeightRangePricesDO extends BaseDO { */ private BigDecimal price; /** - * 是否启用该规则0否1是 + * 是否收费0否1是 */ private Integer isEnabled; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java index 8076553..50dced3 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdListVO.java @@ -10,6 +10,7 @@ import com.tashow.cloud.productapi.general.StringListTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -41,22 +42,53 @@ public class ProdListVO { */ private String shopName; + /** + * 默认是1,正常状态(出售中), 0:下架(仓库中) 2:待审核 + */ + private Integer status; - @Schema(description = "") + /** + * 是否置灰0否1是 + */ + private Integer isProhibit; /** * 服务区域地址名称集合 */ private List areaNameList; + /** + * 紧急服务最快响应时间(小时) + */ + private BigDecimal responseHours; + /** + * 服务时段 + */ + private BigDecimal reservationTimeSlots; /** * 还剩多少天 */ private Long remainingDays; + /** + * 审核备注 + */ + private String processNotes; /** * 删除时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date deleteTime; + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + /** + * 更新时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + } \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRestoreListVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRestoreListVO.java new file mode 100644 index 0000000..d39739a --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdRestoreListVO.java @@ -0,0 +1,71 @@ +package com.tashow.cloud.productapi.api.product.vo.prod; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Schema(description = "商品服务配置 VO") +@Data +public class ProdRestoreListVO { + + /** + * 产品ID + */ + @TableId + private Long prodId; + /** + * 商品名称 + */ + private String prodName; + /** + * 分类名称 + */ + private String categoryName; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 店铺id + */ + private String shopName; + + /** + * 服务区域地址名称集合 + */ + private List areaNameList; + + /** + * 紧急服务最快响应时间(小时) + */ + private BigDecimal responseHours; + /** + * 服务时段 + */ + private BigDecimal reservationTimeSlots; + + /** + * 还剩多少天 + */ + private Long remainingDays; + + /** + * 删除时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date deleteTime; + /** + * 创建时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + +} \ No newline at end of file diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java index d7292b2..06a1454 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prod/ProdServiceVO.java @@ -1,11 +1,13 @@ package com.tashow.cloud.productapi.api.product.vo.prod; +import com.fasterxml.jackson.annotation.JsonFormat; import com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse.ProdEmergencyInfoVO; import com.tashow.cloud.productapi.api.product.vo.prodserviceareas.ProdServiceAreasInfoVO; import com.tashow.cloud.productapi.api.product.dto.*; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.util.Date; import java.util.List; @Schema(description = "商品服务配置 VO") @@ -15,6 +17,22 @@ public class ProdServiceVO { @Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6943") private Long prodId; + @Schema(description = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + @Schema(description = "修改时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; + + @Schema(description = "新建人") + private String creator; + + @Schema(description = "修改人") + private String updater; + + @Schema(description = "分类名称") + private String categoryName; @Schema(description = "是否开启服务区域配置0关1开") private Integer regionSwitch; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java index e3e5e67..b479cce 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsRespVO.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; +import java.util.List; @Schema(description = "管理后台 - 特殊时段附加费用规则 Response VO") @Data @@ -26,7 +27,7 @@ public class ProdAdditionalFeePeriodsRespVO { @Schema(description = "特殊时段设置(JSON格式存储)", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("特殊时段设置(JSON格式存储)") - private String specialTimeSlots; + private List specialTimeSlots; @Schema(description = "收费方式0:'固定金额',1:'基准价上浮'", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("收费方式0:'固定金额',1:'基准价上浮'") diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java index 83d2b34..a304f90 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodadditionalfeeperiods/ProdAdditionalFeePeriodsSaveReqVO.java @@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotNull; import lombok.Data; import java.math.BigDecimal; +import java.util.List; @Schema(description = "管理后台 - 特殊时段附加费用规则新增/修改 Request VO") @Data @@ -24,7 +25,7 @@ public class ProdAdditionalFeePeriodsSaveReqVO { @Schema(description = "特殊时段设置(JSON格式存储)", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "特殊时段设置(JSON格式存储)不能为空") - private String specialTimeSlots; + private List specialTimeSlots; @Schema(description = "收费方式0:'固定金额',1:'基准价上浮'", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "收费方式0:'固定金额',1:'基准价上浮'不能为空") diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java index 1673a4e..91f0c0c 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyInfoVO.java @@ -22,17 +22,17 @@ public class ProdEmergencyInfoVO { */ private Long prodId; /** - * 可响应时间段(JSON格式存储) + * 可响应时间段 */ - private String responseTimeSlots; + private List responseTimeSlots; /** - * 黑名自定义日期(JSON格式存储) + * 黑名自定义日期 */ - private String blacklistedDates; + private List blacklistedDates; /** - * 黑名单指定日期(JSON格式存储) + * 黑名单指定日期 */ - private String blackAppointDates; + private List blackAppointDates; /** * 法定节假日是否开启0:关闭1开启 */ diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java index f60e14a..fa65441 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponsePageReqVO.java @@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 商品紧急响应服务设置分页 Request VO") @Data @@ -17,14 +18,14 @@ public class ProdEmergencyResponsePageReqVO extends PageParam { @Schema(description = "关联的商品ID", example = "29152") private Long prodId; - @Schema(description = "可响应时间段(JSON格式存储)") - private String responseTimeSlots; + @Schema(description = "可响应时间段") + private List responseTimeSlots; - @Schema(description = "黑名自定义日期(JSON格式存储)") - private String blacklistedDates; + @Schema(description = "黑名自定义日期") + private List blacklistedDates; - @Schema(description = "黑名单指定日期(JSON格式存储)") - private String blackAppointDates; + @Schema(description = "黑名单指定日期") + private List blackAppointDates; @Schema(description = "法定节假日是否开启0:关闭1开启") private Integer blackHappy; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java index 4098cbc..8223536 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponse/ProdEmergencyResponseSaveReqVO.java @@ -1,10 +1,13 @@ package com.tashow.cloud.productapi.api.product.vo.prodemergencyresponse; +import com.baomidou.mybatisplus.annotation.TableField; +import com.tashow.cloud.productapi.general.StringListTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 商品紧急响应服务设置新增/修改 Request VO") @Data @@ -17,14 +20,14 @@ public class ProdEmergencyResponseSaveReqVO { @NotNull(message = "关联的商品ID不能为空") private Long prodId; - @Schema(description = "可响应时间段(JSON格式存储)") - private String responseTimeSlots; + @Schema(description = "可响应时间段") + private List responseTimeSlots; - @Schema(description = "黑名自定义日期(JSON格式存储)") - private String blacklistedDates; + @Schema(description = "黑名自定义日期") + private ListblacklistedDates; - @Schema(description = "黑名单指定日期(JSON格式存储)") - private String blackAppointDates; + @Schema(description = "黑名单指定日期") + private List blackAppointDates; @Schema(description = "法定节假日是否开启0:关闭1开启") private Integer blackHappy; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java index 63d8793..946a61a 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsPageReqVO.java @@ -22,7 +22,7 @@ public class ProdEmergencyResponseIntervalsPageReqVO extends PageParam { private String modeName; @Schema(description = "响应时间(小时)") - private Integer responseHours; + private BigDecimal responseHours; @Schema(description = "收费模式0:固定收费 1:浮动收费") private Integer chargeMode; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java index efc64d4..378a209 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsRespVO.java @@ -27,7 +27,7 @@ public class ProdEmergencyResponseIntervalsRespVO { @Schema(description = "响应时间(小时)", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("响应时间(小时)") - private Integer responseHours; + private BigDecimal responseHours; @Schema(description = "收费模式0:固定收费 1:浮动收费", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("收费模式0:固定收费 1:浮动收费") diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java index 2beaae8..aff94bb 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodemergencyresponseintervals/ProdEmergencyResponseIntervalsSaveReqVO.java @@ -25,7 +25,7 @@ public class ProdEmergencyResponseIntervalsSaveReqVO { @Schema(description = "响应时间(小时)", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "响应时间(小时)不能为空") - private Integer responseHours; + private BigDecimal responseHours; @Schema(description = "收费模式0:固定收费 1:浮动收费", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "收费模式0:固定收费 1:浮动收费不能为空") diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java index 6ae58b1..3344637 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigPageReqVO.java @@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 商品预约配置分页 Request VO") @Data @@ -17,8 +18,8 @@ public class ProdReservationConfigPageReqVO extends PageParam { @Schema(description = "关联的商品ID", example = "19369") private Long prodId; - @Schema(description = "预约时段设置(JSON格式存储)") - private String reservationTimeSlots; + @Schema(description = "预约时段设置") + private List reservationTimeSlots; @Schema(description = "需提前多少小时预约") private Integer advanceHours; @@ -35,8 +36,8 @@ public class ProdReservationConfigPageReqVO extends PageParam { @Schema(description = "允许更改预约时间的最大次数") private Integer maxChangeTimes; - @Schema(description = "黑名自定义日期(JSON格式存储)") - private String blacklistedDates; + @Schema(description = "黑名自定义日期") + private List blacklistedDates; /** * '是否开启黑名单自定义0关1开' @@ -48,8 +49,8 @@ public class ProdReservationConfigPageReqVO extends PageParam { */ private Integer isBlackAppoint; - @Schema(description = "黑名单指定日期(JSON格式存储)") - private String blackAppointDates; + @Schema(description = "黑名单指定日期") + private List blackAppointDates; @Schema(description = "法定节假日是否开启0:关闭1开启") private Boolean blackHappy; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java index 2eaff01..affc982 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigRespVO.java @@ -6,6 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 商品预约配置 Response VO") @Data @@ -20,9 +21,9 @@ public class ProdReservationConfigRespVO { @ExcelProperty("关联的商品ID") private Long prodId; - @Schema(description = "预约时段设置(JSON格式存储)", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("预约时段设置(JSON格式存储)") - private String reservationTimeSlots; + @Schema(description = "预约时段设置", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("预约时段设置") + private List reservationTimeSlots; @Schema(description = "需提前多少小时预约", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("需提前多少小时预约") @@ -44,9 +45,9 @@ public class ProdReservationConfigRespVO { @ExcelProperty("允许更改预约时间的最大次数") private Integer maxChangeTimes; - @Schema(description = "黑名自定义日期(JSON格式存储)") - @ExcelProperty("黑名自定义日期(JSON格式存储)") - private String blacklistedDates; + @Schema(description = "黑名自定义日期") + @ExcelProperty("黑名自定义日期") + private List blacklistedDates; /** * '是否开启黑名单自定义0关1开' @@ -58,9 +59,9 @@ public class ProdReservationConfigRespVO { */ private Integer isBlackAppoint; - @Schema(description = "黑名单指定日期(JSON格式存储)") - @ExcelProperty("黑名单指定日期(JSON格式存储)") - private String blackAppointDates; + @Schema(description = "黑名单指定日期") + @ExcelProperty("黑名单指定日期") + private List blackAppointDates; @Schema(description = "法定节假日是否开启0:关闭1开启") @ExcelProperty("法定节假日是否开启0:关闭1开启") diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java index 61a0daf..6b4af4a 100644 --- a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/ProdReservationConfigSaveReqVO.java @@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotNull; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Schema(description = "管理后台 - 商品预约配置新增/修改 Request VO") @Data @@ -18,9 +19,9 @@ public class ProdReservationConfigSaveReqVO { @NotNull(message = "关联的商品ID不能为空") private Long prodId; - @Schema(description = "预约时段设置(JSON格式存储)", requiredMode = Schema.RequiredMode.REQUIRED) - @NotEmpty(message = "预约时段设置(JSON格式存储)不能为空") - private String reservationTimeSlots; + @Schema(description = "预约时段设置", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "预约时段设置不能为空") + private List reservationTimeSlots; @Schema(description = "需提前多少小时预约", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "需提前多少小时预约不能为空") @@ -40,8 +41,8 @@ public class ProdReservationConfigSaveReqVO { @Schema(description = "允许更改预约时间的最大次数") private Integer maxChangeTimes; - @Schema(description = "黑名自定义日期(JSON格式存储)") - private String blacklistedDates; + @Schema(description = "黑名自定义日期") + private List blacklistedDates; /** * '是否开启黑名单自定义0关1开' @@ -53,8 +54,8 @@ public class ProdReservationConfigSaveReqVO { */ private Integer isBlackAppoint; - @Schema(description = "黑名单指定日期(JSON格式存储)") - private String blackAppointDates; + @Schema(description = "黑名单指定日期") + private List blackAppointDates; @Schema(description = "法定节假日是否开启0:关闭1开启") private Boolean blackHappy; diff --git a/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/TimeBookVO.java b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/TimeBookVO.java new file mode 100644 index 0000000..a33c770 --- /dev/null +++ b/tashow-feign/tashow-product-api/src/main/java/com/tashow/cloud/productapi/api/product/vo/prodreservationconfig/TimeBookVO.java @@ -0,0 +1,23 @@ +package com.tashow.cloud.productapi.api.product.vo.prodreservationconfig; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 商品预约配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class TimeBookVO { + + /** + * 预约时段设置 + */ + private List reservationTimeSlots; + /** + * 时间段 + */ + private Integer timeSlot; +} \ No newline at end of file diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java index 7c108cc..0dc1f66 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/controller/admin/ProdController.java @@ -134,16 +134,16 @@ public class ProdController { @PermitAll @GetMapping("/page") @Operation(summary = "获得商品分页") - public CommonResult> getProdPage(ProdPageReqVO pageReqVO) { - PageResult pageResult = prodService.getProdPage(pageReqVO); + public CommonResult> getProdPage(ProdPageReqVO pageReqVO) { + PageResult pageResult = prodService.getProdPage(pageReqVO); return success(pageResult); } @PermitAll @GetMapping("/getProdRecycleBinPageList") @Operation(summary = "获得商品回收站分页列表") - public CommonResult> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) { - PageResult pageResult = prodService.getProdRecycleBinPageList(prodRecycleBinVO); + public CommonResult> getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) { + PageResult pageResult = prodService.getProdRecycleBinPageList(prodRecycleBinVO); return success(pageResult); } diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java index 87dc157..47ddd20 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/mapper/ProdMapper.java @@ -10,6 +10,7 @@ import com.tashow.cloud.mybatis.mybatis.core.mapper.BaseMapperX; import com.tashow.cloud.productapi.api.product.dto.*; import com.tashow.cloud.productapi.api.product.vo.prod.ProdListVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdPageReqVO; +import com.tashow.cloud.productapi.api.product.vo.prod.ProdRestoreListVO; import com.tashow.cloud.productapi.api.product.vo.prod.ProdServiceVO; import com.tashow.cloud.productapi.api.product.vo.sku.SkuRecycleBinVO; import org.apache.ibatis.annotations.Mapper; @@ -23,7 +24,7 @@ import org.apache.ibatis.annotations.Param; @Mapper public interface ProdMapper extends BaseMapperX { - IPage getProdPageList(Page page,@Param("createTime") String[] createTime + IPage getProdPageList(Page page,@Param("createTime") String[] createTime , @Param("prodName") String prodName , @Param("shopId") Long shopId , @Param("status") Integer status @@ -48,7 +49,7 @@ public interface ProdMapper extends BaseMapperX { , @Param("weightSwitch") Integer weightSwitch ); - IPage getProdRecycleBinPageList(Page page, @Param("createTime") String[] createTime + IPage getProdRecycleBinPageList(Page page, @Param("deleteTime") String[] deleteTime , @Param("prodName") String prodName); diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java index fe13e70..13f3d45 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/ProdService.java @@ -79,9 +79,9 @@ public interface ProdService { * @param pageReqVO 分页查询 * @return 商品分页 */ - PageResult getProdPage(ProdPageReqVO pageReqVO); + PageResult getProdPage(ProdPageReqVO pageReqVO); - PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO); + PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO); /** * 恢复商品 diff --git a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java index ff7f4b8..c064ebf 100644 --- a/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java +++ b/tashow-module/tashow-module-product/src/main/java/com/tashow/cloud/product/service/impl/ProdServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; + import com.tashow.cloud.common.pojo.PageResult; import com.tashow.cloud.common.pojo.PageParam; import com.tashow.cloud.common.util.object.BeanUtils; @@ -76,7 +77,7 @@ public class ProdServiceImpl implements ProdService { //保存sku if (CollectionUtil.isNotEmpty(createReqVO.getSkuList())) { List skuList = createReqVO.getSkuList(); - for(SkuDO sku : skuList){ + for (SkuDO sku : skuList) { sku.setProdId(prod.getProdId()); } skuMapper.insertBatch(skuList); @@ -96,23 +97,23 @@ public class ProdServiceImpl implements ProdService { @Override @Transactional public void createProdService(ProdServiceVO prodServiceVO) { - ProdDO prodDO = new ProdDO(); + ProdDO prodDO = new ProdDO(); prodDO.setProdId(prodServiceVO.getProdId()); //服务区域设置 - if(Objects.equals(prodServiceVO.getRegionSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(prodServiceVO.getRegionSwitch(), BaseEnum.YES_ONE.getKey())) { prodDO.setRegionSwitch(BaseEnum.YES_ONE.getKey()); //保存区域设置信息 ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(prodServiceVO.getProdServiceAreasInfo(), ProdServiceOverAreaRulesDO.class); prodServiceOverAreaRules.setProdId(prodDO.getProdId()); prodServiceOverAreaRulesMapper.insert(prodServiceOverAreaRules); //保存区域 - List areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); - for(String areaName : areaNameList){ + List areaNameList = prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); + for (String areaName : areaNameList) { //查询区域信息 ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() .eq(ProdServiceAreasDO::getAreaName, areaName) ); - if(prodServiceAreas != null){ + if (prodServiceAreas != null) { //插入关联表 prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() .setProdId(prodDO.getProdId()) @@ -122,49 +123,49 @@ public class ProdServiceImpl implements ProdService { } } //预约设置设置 - if(Objects.equals(prodServiceVO.getReservationSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(prodServiceVO.getReservationSwitch(), BaseEnum.YES_ONE.getKey())) { prodDO.setReservationSwitch(BaseEnum.YES_ONE.getKey()); - ProdReservationConfigDO prodReservationConfigDO = prodServiceVO.prodReservationConfig; + ProdReservationConfigDO prodReservationConfigDO = prodServiceVO.prodReservationConfig; prodReservationConfigDO.setProdId(prodDO.getProdId()); prodReservationConfigMapper.insert(prodReservationConfigDO); } //紧急响应设置 - if(Objects.equals(prodServiceVO.getEmergencySwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(prodServiceVO.getEmergencySwitch(), BaseEnum.YES_ONE.getKey())) { prodDO.setEmergencySwitch(BaseEnum.YES_ONE.getKey()); // 插入 ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); prodEmergencyResponse.setProdId(prodDO.getProdId()); prodEmergencyResponseMapper.insert(prodEmergencyResponse); - for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ + for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()) { prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); } } //接单上线设置 - if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(prodServiceVO.getOrderLimitSwitch(), BaseEnum.YES_ONE.getKey())) { prodDO.setOrderLimitSwitch(BaseEnum.YES_ONE.getKey()); ProductOrderLimitDO productOrderLimit = prodServiceVO.productOrderLimitVO; productOrderLimit.setProdId(prodDO.getProdId()); productOrderLimitMapper.insert(productOrderLimit); } //特殊时段设置 - if(Objects.equals(prodServiceVO.getAdditionalSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(prodServiceVO.getAdditionalSwitch(), BaseEnum.YES_ONE.getKey())) { prodDO.setAdditionalSwitch(BaseEnum.YES_ONE.getKey()); - for (ProdAdditionalFeeDatesDO prodAdditionalFeeDates : prodServiceVO.getProdAdditionalFeeDatesList()){ + for (ProdAdditionalFeeDatesDO prodAdditionalFeeDates : prodServiceVO.getProdAdditionalFeeDatesList()) { prodAdditionalFeeDates.setProdId(prodServiceVO.getProdId()); prodAdditionalFeeDatesMapper.insert(prodAdditionalFeeDates); } } //特殊日期设置 - if(Objects.equals(prodServiceVO.getAdditionalFeeSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(prodServiceVO.getAdditionalFeeSwitch(), BaseEnum.YES_ONE.getKey())) { prodDO.setAdditionalFeeSwitch(BaseEnum.YES_ONE.getKey()); - for (ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods : prodServiceVO.getProdAdditionalFeePeriodsList()){ + for (ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods : prodServiceVO.getProdAdditionalFeePeriodsList()) { prodAdditionalFeePeriods.setProdId(prodServiceVO.getProdId()); prodAdditionalFeePeriodsMapper.insert(prodAdditionalFeePeriods); } } //体重设置 - if(Objects.equals(prodServiceVO.getWeightSwitch(),BaseEnum.YES_ONE.getKey())){ + if (Objects.equals(prodServiceVO.getWeightSwitch(), BaseEnum.YES_ONE.getKey())) { prodDO.setWeightSwitch(BaseEnum.YES_ONE.getKey()); ProdWeightRangePricesDO prodWeightRangePrices = prodServiceVO.prodWeightConfig; prodWeightRangePrices.setProdId(prodDO.getProdId()); @@ -179,23 +180,23 @@ public class ProdServiceImpl implements ProdService { ProdDO prod = BeanUtils.toBean(prodServiceVO, ProdDO.class); //服务区域设置 - if(Objects.equals(prodServiceVO.getRegionSwitch(),BaseEnum.YES_ONE.getKey())){ - ProdServiceOverAreaRulesDO overAreaRules= prodServiceOverAreaRulesMapper.selectOne(new LambdaQueryWrapper() + if (Objects.equals(prodServiceVO.getRegionSwitch(), BaseEnum.YES_ONE.getKey())) { + ProdServiceOverAreaRulesDO overAreaRules = prodServiceOverAreaRulesMapper.selectOne(new LambdaQueryWrapper() .eq(ProdServiceOverAreaRulesDO::getProdId, prodServiceVO.getProdId())); - if(overAreaRules==null){ + if (overAreaRules == null) { prod.setRegionSwitch(BaseEnum.YES_ONE.getKey()); //保存区域设置信息 ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(prodServiceVO.getProdServiceAreasInfo(), ProdServiceOverAreaRulesDO.class); prodServiceOverAreaRules.setProdId(prod.getProdId()); prodServiceOverAreaRulesMapper.insert(prodServiceOverAreaRules); //保存区域 - List areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); - for(String areaName : areaNameList){ + List areaNameList = prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); + for (String areaName : areaNameList) { //查询区域信息 ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() .eq(ProdServiceAreasDO::getAreaName, areaName) ); - if(prodServiceAreas != null){ + if (prodServiceAreas != null) { //插入关联表 prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() .setProdId(prod.getProdId()) @@ -203,7 +204,7 @@ public class ProdServiceImpl implements ProdService { ); } } - }else { + } else { //保存区域设置信息 ProdServiceOverAreaRulesDO prodServiceOverAreaRules = BeanUtils.toBean(prodServiceVO.getProdServiceAreasInfo(), ProdServiceOverAreaRulesDO.class); prodServiceOverAreaRules.setProdId(prodServiceVO.getProdId()); @@ -211,13 +212,13 @@ public class ProdServiceImpl implements ProdService { //先批量删除区域关联表 prodServiceAreaRelevanceMapper.deleteRelevance(prodServiceVO.getProdId()); //保存区域 - List areaNameList =prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); - for(String areaName : areaNameList){ + List areaNameList = prodServiceVO.getProdServiceAreasInfo().getAreaNameList(); + for (String areaName : areaNameList) { //查询区域信息 ProdServiceAreasDO prodServiceAreas = prodServiceAreasMapper.selectOne(new LambdaQueryWrapper() .eq(ProdServiceAreasDO::getAreaName, areaName) ); - if(prodServiceAreas == null){ + if (prodServiceAreas != null) { //插入关联表 prodServiceAreaRelevanceMapper.insert(new ProdServiceAreaRelevanceDO() .setProdId(prodServiceVO.getProdId()) @@ -229,87 +230,99 @@ public class ProdServiceImpl implements ProdService { } //预约设置设置 - if(Objects.equals(prodServiceVO.getReservationSwitch(),BaseEnum.YES_ONE.getKey())){ - ProdReservationConfigDO reservationConfig= prodReservationConfigMapper.selectOne(new LambdaQueryWrapper() + if (Objects.equals(prodServiceVO.getReservationSwitch(), BaseEnum.YES_ONE.getKey())) { + ProdReservationConfigDO reservationConfig = prodReservationConfigMapper.selectOne(new LambdaQueryWrapper() .eq(ProdReservationConfigDO::getProdId, prodServiceVO.getProdId())); - if(reservationConfig==null){ + if (reservationConfig == null) { prod.setReservationSwitch(BaseEnum.YES_ONE.getKey()); - ProdReservationConfigDO prodReservationConfigDO = prodServiceVO.getProdReservationConfig(); + ProdReservationConfigDO prodReservationConfigDO = prodServiceVO.getProdReservationConfig(); prodReservationConfigDO.setProdId(prod.getProdId()); + prodReservationConfigDO.setTimeBook(prodServiceVO.getProdReservationConfig().getTimeBook()); + prodReservationConfigDO.setReservationTimeSlots(prodServiceVO.getProdReservationConfig().getReservationTimeSlots()); prodReservationConfigMapper.insert(prodReservationConfigDO); - }else { + } else { + prodServiceVO.getProdReservationConfig().setTimeBook(prodServiceVO.getProdReservationConfig().getTimeBook()); + prodServiceVO.getProdReservationConfig().setReservationTimeSlots(prodServiceVO.getProdReservationConfig().getReservationTimeSlots()); prodReservationConfigMapper.updateById(prodServiceVO.getProdReservationConfig()); } } //紧急响应设置 - if(Objects.equals(prodServiceVO.getEmergencySwitch(),BaseEnum.YES_ONE.getKey())){ - ProdEmergencyResponseDO rmergencyResponse= prodEmergencyResponseMapper.selectOne(new LambdaQueryWrapper() + if (Objects.equals(prodServiceVO.getEmergencySwitch(), BaseEnum.YES_ONE.getKey())) { + ProdEmergencyResponseDO rmergencyResponse = prodEmergencyResponseMapper.selectOne(new LambdaQueryWrapper() .eq(ProdEmergencyResponseDO::getProdId, prodServiceVO.getProdId())); - if(rmergencyResponse==null){ + if (rmergencyResponse == null) { prod.setEmergencySwitch(BaseEnum.YES_ONE.getKey()); // 插入 - ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); + ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.getProdEmergencyInfoVO(), ProdEmergencyResponseDO.class); prodEmergencyResponse.setProdId(prod.getProdId()); prodEmergencyResponseMapper.insert(prodEmergencyResponse); - for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ - prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); - prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + if(prodServiceVO.getProdEmergencyInfoVO().getProdEmergencyResponseIntervalsList()!=null){ + for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.getProdEmergencyInfoVO().getProdEmergencyResponseIntervalsList()) { + prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); + prodEmergencyResponseIntervals.setProdId(prod.getProdId()); + prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + } } - }else { - ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.prodEmergencyInfoVO, ProdEmergencyResponseDO.class); - if(prodEmergencyResponse!=null){ + + } else { + ProdEmergencyResponseDO prodEmergencyResponse = BeanUtils.toBean(prodServiceVO.getProdEmergencyInfoVO(), ProdEmergencyResponseDO.class); + if (prodEmergencyResponse != null) { prodEmergencyResponseMapper.updateById(prodEmergencyResponse); prodEmergencyResponseIntervalsMapper.deleteIntervals(prodEmergencyResponse.getId()); - for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.prodEmergencyInfoVO.getProdEmergencyResponseIntervalsList()){ - prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); - prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + if(prodServiceVO.getProdEmergencyInfoVO().getProdEmergencyResponseIntervalsList()!=null) { + for (ProdEmergencyResponseIntervalsDO prodEmergencyResponseIntervals : prodServiceVO.getProdEmergencyInfoVO().getProdEmergencyResponseIntervalsList()) { + prodEmergencyResponseIntervals.setConfigId(prodEmergencyResponse.getId()); + prodEmergencyResponseIntervals.setProdId(prod.getProdId()); + prodEmergencyResponseIntervalsMapper.insert(prodEmergencyResponseIntervals); + } } } } } //接单上线设置 - if(Objects.equals(prodServiceVO.getOrderLimitSwitch(),BaseEnum.YES_ONE.getKey())){ - ProductOrderLimitDO orderLimit= productOrderLimitMapper.selectOne(new LambdaQueryWrapper() + if (Objects.equals(prodServiceVO.getOrderLimitSwitch(), BaseEnum.YES_ONE.getKey())) { + ProductOrderLimitDO orderLimit = productOrderLimitMapper.selectOne(new LambdaQueryWrapper() .eq(ProductOrderLimitDO::getProdId, prodServiceVO.getProdId())); - if(orderLimit==null){ + if (orderLimit == null) { prod.setOrderLimitSwitch(BaseEnum.YES_ONE.getKey()); ProductOrderLimitDO productOrderLimit = prodServiceVO.getProductOrderLimitVO(); productOrderLimit.setProdId(prod.getProdId()); productOrderLimitMapper.insert(productOrderLimit); - }else { + } else { productOrderLimitMapper.updateById(prodServiceVO.getProductOrderLimitVO()); } } //特殊时段设置 - if(Objects.equals(prodServiceVO.getAdditionalSwitch(),BaseEnum.YES_ONE.getKey())){ - for (ProdAdditionalFeeDatesDO prodAdditionalFeeDates : prodServiceVO.getProdAdditionalFeeDatesList()){ - if(prodAdditionalFeeDates.getId()==null){ - prodAdditionalFeeDates.setProdId(prodServiceVO.getProdId()); - prodAdditionalFeeDatesMapper.insert(prodAdditionalFeeDates); - }else { - prodAdditionalFeeDatesMapper.updateById(prodAdditionalFeeDates); + if (Objects.equals(prodServiceVO.getAdditionalSwitch(), BaseEnum.YES_ONE.getKey())) { + if (prodServiceVO.getProdAdditionalFeeDatesList() != null) + for (ProdAdditionalFeeDatesDO prodAdditionalFeeDates : prodServiceVO.getProdAdditionalFeeDatesList()) { + if (prodAdditionalFeeDates.getId() == null) { + prodAdditionalFeeDates.setProdId(prodServiceVO.getProdId()); + prodAdditionalFeeDatesMapper.insert(prodAdditionalFeeDates); + } else { + prodAdditionalFeeDatesMapper.updateById(prodAdditionalFeeDates); + } } - } } //特殊日期设置 - if(Objects.equals(prodServiceVO.getAdditionalFeeSwitch(),BaseEnum.YES_ONE.getKey())){ - for (ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods : prodServiceVO.getProdAdditionalFeePeriodsList()){ - if(prodAdditionalFeePeriods.getId()==null){ + if (Objects.equals(prodServiceVO.getAdditionalFeeSwitch(), BaseEnum.YES_ONE.getKey())) { + for (ProdAdditionalFeePeriodsDO prodAdditionalFeePeriods : prodServiceVO.getProdAdditionalFeePeriodsList()) { + if (prodAdditionalFeePeriods.getId() == null) { prodAdditionalFeePeriods.setProdId(prodServiceVO.getProdId()); prodAdditionalFeePeriodsMapper.insert(prodAdditionalFeePeriods); - }else { + } else { prodAdditionalFeePeriodsMapper.updateById(prodAdditionalFeePeriods); } } } //体重设置 - if(Objects.equals(prodServiceVO.getWeightSwitch(),BaseEnum.YES_ONE.getKey())){ - if(prodServiceVO.getProdWeightConfig().getId()==null){ + if (Objects.equals(prodServiceVO.getWeightSwitch(), BaseEnum.YES_ONE.getKey())) { + if (prodServiceVO.getProdWeightConfig().getId() == null) { prod.setWeightSwitch(BaseEnum.YES_ONE.getKey()); ProdWeightRangePricesDO prodWeightRangePrices = prodServiceVO.getProdWeightConfig(); prodWeightRangePrices.setProdId(prod.getProdId()); prodWeightRangePricesMapper.insert(prodWeightRangePrices); - }else { + } else { prodWeightRangePricesMapper.updateById(prodServiceVO.getProdWeightConfig()); } } @@ -319,14 +332,14 @@ public class ProdServiceImpl implements ProdService { @Override public ProdServiceVO getProdService(Long prodId) { ProdDO prodDO = prodMapper.selectById(prodId); - if(prodDO!= null&&prodDO.getRegionSwitch()==BaseEnum.YES_ONE.getKey()){ - return prodMapper.selectProdService(prodDO.getProdId(),prodDO.getRegionSwitch(), - prodDO.getReservationSwitch(),prodDO.getEmergencySwitch(),prodDO.getOrderLimitSwitch(), - prodDO.getAdditionalSwitch(),prodDO.getAdditionalFeeSwitch(),prodDO.getWeightSwitch()); - }else { + if (prodDO != null && prodDO.getRegionSwitch() == BaseEnum.YES_ONE.getKey()) { + return prodMapper.selectProdService(prodDO.getProdId(), prodDO.getRegionSwitch(), + prodDO.getReservationSwitch(), prodDO.getEmergencySwitch(), prodDO.getOrderLimitSwitch(), + prodDO.getAdditionalSwitch(), prodDO.getAdditionalFeeSwitch(), prodDO.getWeightSwitch()); + } else { return prodMapper.selectProdServiceInfo(prodDO.getProdId(), - prodDO.getReservationSwitch(),prodDO.getEmergencySwitch(),prodDO.getOrderLimitSwitch(), - prodDO.getAdditionalSwitch(),prodDO.getAdditionalFeeSwitch(),prodDO.getWeightSwitch()); + prodDO.getReservationSwitch(), prodDO.getEmergencySwitch(), prodDO.getOrderLimitSwitch(), + prodDO.getAdditionalSwitch(), prodDO.getAdditionalFeeSwitch(), prodDO.getWeightSwitch()); } @@ -365,19 +378,21 @@ public class ProdServiceImpl implements ProdService { } @Override - public PageResult getProdPage(ProdPageReqVO pageReqVO) { - IPage prodPageList = prodMapper.getProdPageList(MyBatisUtils.buildPage(pageReqVO), + public PageResult getProdPage(ProdPageReqVO pageReqVO) { + IPage prodPageList = prodMapper.getProdPageList(MyBatisUtils.buildPage(pageReqVO), pageReqVO.getCreateTime(), pageReqVO.getProdName(), pageReqVO.getShopId(), pageReqVO.getStatus(), pageReqVO.getCategoryId()); - return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + return new PageResult<>(prodPageList.getRecords(), prodPageList.getTotal()); } @Override - public PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO){ - IPage prodPageList = prodMapper.getProdRecycleBinPageList(MyBatisUtils.buildPage(prodRecycleBinVO), prodRecycleBinVO.getDeleteTime(), prodRecycleBinVO.getProdName()); - for(ProdListVO prodPage : prodPageList.getRecords()){ - prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); + public PageResult getProdRecycleBinPageList(ProdRecycleBinVO prodRecycleBinVO) { + IPage prodPageList = prodMapper.getProdRecycleBinPageList(MyBatisUtils.buildPage(prodRecycleBinVO), prodRecycleBinVO.getDeleteTime(), prodRecycleBinVO.getProdName()); + for (ProdRestoreListVO prodPage : prodPageList.getRecords()) { + if (prodPage.getDeleteTime() != null) { + prodPage.setRemainingDays(DateUtils.getRemainingDays(prodPage.getDeleteTime())); + } } - return new PageResult<>(prodPageList.getRecords(),prodPageList.getTotal()); + return new PageResult<>(prodPageList.getRecords(), prodPageList.getTotal()); } @Override diff --git a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml index 1c7c164..3134a78 100644 --- a/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml +++ b/tashow-module/tashow-module-product/src/main/resources/mapper/product/ProdMapper.xml @@ -50,6 +50,7 @@ + @@ -173,6 +174,7 @@ + @@ -233,26 +235,7 @@ - + @@ -265,6 +248,12 @@ p.reservation_switch, p.order_limit_switch, p.weight_switch, + p.region_switch, + p.create_time, + p.update_time, + p.creator, + p.updater, + p.category_name, erc.id AS erc_record_id, @@ -328,6 +317,7 @@ rc.reservation_date_range AS rc_reservation_date_range, rc.allow_change AS rc_allow_change, rc.change_time_rule AS rc_change_time_rule, + rc.time_slot AS rc_time_slot, rc.max_change_times AS rc_max_change_times, rc.blacklisted_dates AS rc_blacklisted_dates, rc.is_blacklisted AS rc_is_blacklisted, @@ -405,6 +395,7 @@ p.reservation_switch, p.order_limit_switch, p.weight_switch, + p.region_switch, erc.id AS erc_record_id, @@ -468,6 +459,7 @@ rc.reservation_date_range AS rc_reservation_date_range, rc.allow_change AS rc_allow_change, rc.change_time_rule AS rc_change_time_rule, + rc.time_slot AS rc_time_slot, rc.max_change_times AS rc_max_change_times, rc.blacklisted_dates AS rc_blacklisted_dates, rc.is_blacklisted AS rc_is_blacklisted, @@ -523,48 +515,64 @@ - + + + + + - + - - - + + + + + + + + + + + + + + + + + + + + + + UPDATE tz_prod SET deleted = 0