Browse Source

Merge branch 'feature/auth' of https://gitee.com/zhijiantianya/ruoyi-vue-pro

 Conflicts:
	README.md
YunaiV 1 year ago
parent
commit
9630f236f8
25 changed files with 176 additions and 157 deletions
  1. 2 2
      README.md
  2. 1 1
      pom.xml
  3. 7 7
      yudao-dependencies/pom.xml
  4. 2 2
      yudao-example/yudao-sso-demo-by-code/pom.xml
  5. 2 2
      yudao-example/yudao-sso-demo-by-password/pom.xml
  6. 36 36
      yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/config/YudaoSocialAutoConfiguration.java
  7. 5 5
      yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben/api/api.ts.vm
  8. 33 15
      yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben/views/data.ts.vm
  9. 6 5
      yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben/views/form.vue.vm
  10. 16 16
      yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben/views/index.vue.vm
  11. 11 11
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/article/vo/article/AppArticleRespVO.java
  12. 5 5
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/article/vo/category/AppArticleCategoryRespVO.java
  13. 14 14
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/activity/AppBargainActivityDetailRespVO.java
  14. 10 10
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/activity/AppBargainActivityRespVO.java
  15. 1 1
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/help/AppBargainHelpCreateReqVO.java
  16. 4 4
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/help/AppBargainHelpRespVO.java
  17. 1 1
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/record/AppBargainRecordCreateReqVO.java
  18. 5 5
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/record/AppBargainRecordSummaryRespVO.java
  19. 3 3
      yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/vo/coupon/AppCouponMatchReqVO.java
  20. 2 2
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/vo/config/AppDeliveryConfigRespVO.java
  21. 2 2
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/vo/express/AppDeliveryExpressRespVO.java
  22. 2 2
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java
  23. 1 1
      yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementRespVO.java
  24. 4 4
      yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderDetailsRespVO.java
  25. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/DictDataDO.java

+ 2 - 2
README.md

@@ -256,9 +256,9 @@ _前端基于 crmeb uniapp 经过授权重构,优化代码实现,接入芋
 
 | 框架                                                                                          | 说明               | 版本          | 学习指南                                                           |
 |---------------------------------------------------------------------------------------------|------------------|-------------|----------------------------------------------------------------|
-| [Spring Boot](https://spring.io/projects/spring-boot)                                       | 应用开发框架           | 2.7.14      | [文档](https://github.com/YunaiV/SpringBoot-Labs)                |
+| [Spring Boot](https://spring.io/projects/spring-boot)                                       | 应用开发框架           | 2.7.15      | [文档](https://github.com/YunaiV/SpringBoot-Labs)                |
 | [MySQL](https://www.mysql.com/cn/)                                                          | 数据库服务器           | 5.7 / 8.0+  |                                                                |
-| [Druid](https://github.com/alibaba/druid)                                                   | JDBC 连接池、监控组件    | 1.2.18      | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
+| [Druid](https://github.com/alibaba/druid)                                                   | JDBC 连接池、监控组件    | 1.2.19      | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
 | [MyBatis Plus](https://mp.baomidou.com/)                                                    | MyBatis 增强工具包    | 3.5.3.1     | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao)         |
 | [Dynamic Datasource](https://dynamic-datasource.com/)                                       | 动态数据源            | 3.6.1       | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) |
 | [Redis](https://redis.io/)                                                                  | key-value 数据库    | 5.0 / 6.0   |                                                                |

+ 1 - 1
pom.xml

@@ -40,7 +40,7 @@
         <flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
         <!-- 看看咋放到 bom 里 -->
         <lombok.version>1.18.28</lombok.version>
-        <spring.boot.version>2.7.14</spring.boot.version>
+        <spring.boot.version>2.7.15</spring.boot.version>
         <mapstruct.version>1.5.5.Final</mapstruct.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>

+ 7 - 7
yudao-dependencies/pom.xml

@@ -17,13 +17,13 @@
         <revision>1.8.1-snapshot</revision>
         <flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
         <!-- 统一依赖管理 -->
-        <spring.boot.version>2.7.14</spring.boot.version>
+        <spring.boot.version>2.7.15</spring.boot.version>
         <!-- Web 相关 -->
         <springdoc.version>1.7.0</springdoc.version>
         <knife4j.version>4.3.0</knife4j.version>
         <servlet.versoin>2.5</servlet.versoin>
         <!-- DB 相关 -->
-        <druid.version>1.2.18</druid.version>
+        <druid.version>1.2.19</druid.version>
         <mybatis-plus.version>3.5.3.2</mybatis-plus.version>
         <mybatis-plus-generator.version>3.5.3.2</mybatis-plus-generator.version>
         <dynamic-datasource.version>3.6.1</dynamic-datasource.version>
@@ -44,11 +44,11 @@
         <!-- Bpm 工作流相关 -->
         <flowable.version>6.8.0</flowable.version>
         <!-- 工具类相关 -->
-        <captcha-plus.version>1.0.6</captcha-plus.version>
+        <captcha-plus.version>1.0.7</captcha-plus.version>
         <jsoup.version>1.15.4</jsoup.version>
         <lombok.version>1.18.28</lombok.version>
         <mapstruct.version>1.5.5.Final</mapstruct.version>
-        <hutool.version>5.8.20</hutool.version>
+        <hutool.version>5.8.21</hutool.version>
         <easyexcel.verion>3.3.2</easyexcel.verion>
         <velocity.version>2.3</velocity.version>
         <screw.version>1.0.5</screw.version>
@@ -64,12 +64,12 @@
         <okio.version>3.0.0</okio.version>
         <okhttp3.version>4.10.0</okhttp3.version>
         <commons-io.version>2.11.0</commons-io.version>
-        <minio.version>8.5.4</minio.version>
+        <minio.version>8.5.5</minio.version>
         <aliyun-java-sdk-core.version>4.6.3</aliyun-java-sdk-core.version>
         <aliyun-java-sdk-dysmsapi.version>2.2.1</aliyun-java-sdk-dysmsapi.version>
         <tencentcloud-sdk-java.version>3.1.758</tencentcloud-sdk-java.version>
-        <justauth.version>1.0.3</justauth.version>
-        <jimureport.version>1.5.8</jimureport.version>
+        <justauth.version>1.0.4</justauth.version>
+        <jimureport.version>1.6.1</jimureport.version>
         <xercesImpl.version>2.12.2</xercesImpl.version>
         <weixin-java.version>4.5.0</weixin-java.version>
     </properties>

+ 2 - 2
yudao-example/yudao-sso-demo-by-code/pom.xml

@@ -21,7 +21,7 @@
         <maven.compiler.target>8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <!-- 统一依赖管理 -->
-        <spring.boot.version>2.7.14</spring.boot.version>
+        <spring.boot.version>2.7.15</spring.boot.version>
     </properties>
 
     <dependencyManagement>
@@ -52,7 +52,7 @@
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
-            <version>5.8.20</version>
+            <version>5.8.21</version>
         </dependency>
 
         <dependency>

+ 2 - 2
yudao-example/yudao-sso-demo-by-password/pom.xml

@@ -21,7 +21,7 @@
         <maven.compiler.target>8</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <!-- 统一依赖管理 -->
-        <spring.boot.version>2.7.14</spring.boot.version>
+        <spring.boot.version>2.7.15</spring.boot.version>
     </properties>
 
     <dependencyManagement>
@@ -52,7 +52,7 @@
         <dependency>
             <groupId>cn.hutool</groupId>
             <artifactId>hutool-all</artifactId>
-            <version>5.8.20</version>
+            <version>5.8.21</version>
         </dependency>
 
         <dependency>

+ 36 - 36
yudao-framework/yudao-spring-boot-starter-biz-social/src/main/java/cn/iocoder/yudao/framework/social/config/YudaoSocialAutoConfiguration.java

@@ -1,36 +1,36 @@
-package cn.iocoder.yudao.framework.social.config;
-
-import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;
-import com.xingyuv.http.HttpUtil;
-import com.xingyuv.http.support.hutool.HutoolImpl;
-import com.xingyuv.jushauth.cache.AuthStateCache;
-import com.xingyuv.justauth.autoconfigure.JustAuthProperties;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Primary;
-
-/**
- * 社交自动装配类
- *
- * @author timfruit
- * @date 2021-10-30
- */
-@Slf4j
-@AutoConfiguration
-@EnableConfigurationProperties(JustAuthProperties.class)
-public class YudaoSocialAutoConfiguration {
-
-    @Bean
-    @Primary
-    @ConditionalOnProperty(prefix = "justauth", value = "enabled", havingValue = "true", matchIfMissing = true)
-    public YudaoAuthRequestFactory yudaoAuthRequestFactory(JustAuthProperties properties, AuthStateCache authStateCache) {
-        // 需要修改 HttpUtil 使用的实现,避免类报错
-        HttpUtil.setHttp(new HutoolImpl());
-        // 创建 YudaoAuthRequestFactory
-        return new YudaoAuthRequestFactory(properties, authStateCache);
-    }
-
-}
+package cn.iocoder.yudao.framework.social.config;
+
+import cn.iocoder.yudao.framework.social.core.YudaoAuthRequestFactory;
+import com.xingyuv.http.HttpUtil;
+import com.xingyuv.http.support.hutool.HutoolImpl;
+import com.xingyuv.jushauth.cache.AuthStateCache;
+import com.xingyuv.justauth.autoconfigure.JustAuthProperties;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.autoconfigure.AutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Primary;
+
+/**
+ * 社交自动装配类
+ *
+ * @author timfruit
+ * @date 2021-10-30
+ */
+@Slf4j
+@AutoConfiguration
+@EnableConfigurationProperties(JustAuthProperties.class)
+public class YudaoSocialAutoConfiguration {
+
+    @Bean
+    @Primary
+    @ConditionalOnProperty(prefix = "justauth", value = "enabled", havingValue = "true", matchIfMissing = true)
+    public YudaoAuthRequestFactory yudaoAuthRequestFactory(JustAuthProperties properties, AuthStateCache authStateCache) {
+        // 需要修改 HttpUtil 使用的实现,避免类报错
+        HttpUtil.setHttp(new HutoolImpl());
+        // 创建 YudaoAuthRequestFactory
+        return new YudaoAuthRequestFactory(properties, authStateCache);
+    }
+
+}

+ 5 - 5
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben/api/api.ts.vm

@@ -3,27 +3,27 @@ import { defHttp } from '@/utils/http/axios'
 
 // 查询${table.classComment}列表
 export function get${simpleClassName}Page(params) {
-    return defHttp.get({ url: '${baseURL}/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 })
+  return defHttp.get({ url: `${baseURL}/get?id=${id}` })
 }
 
 // 新增${table.classComment}
 export function create${simpleClassName}(data) {
-    return defHttp.post({ url: '${baseURL}/create', data })
+  return defHttp.post({ url: '${baseURL}/create', data })
 }
 
 // 修改${table.classComment}
 export function update${simpleClassName}(data) {
-    return defHttp.put({ url: '${baseURL}/update', data })
+  return defHttp.put({ url: '${baseURL}/update', data })
 }
 
 // 删除${table.classComment}
 export function delete${simpleClassName}(id: number) {
-    return defHttp.delete({ url: '${baseURL}/delete?id=' + id })
+  return defHttp.delete({ url: `${baseURL}/delete?id=${id}` })
 }
 
 // 导出${table.classComment} Excel

+ 33 - 15
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben/views/data.ts.vm

@@ -1,4 +1,5 @@
-import { BasicColumn, FormSchema, useRender } from '@/components/Table'
+import type { BasicColumn, FormSchema } from '@/components/Table'
+import { useRender } from '@/components/Table'
 import { DICT_TYPE, getDictOptions } from '@/utils/dict'
 
 export const columns: BasicColumn[] = [
@@ -92,13 +93,13 @@ export const createFormSchema: FormSchema[] = [
   #elseif($column.htmlType == "imageUpload")## 图片上传
     component: 'FileUpload',
     componentProps: {
-      fileType: 'file',
+      fileType: 'image',
       maxCount: 1,
     },
   #elseif($column.htmlType == "fileUpload")## 文件上传
     component: 'FileUpload',
     componentProps: {
-      fileType: 'image',
+      fileType: 'file',
       maxCount: 1,
     },
   #elseif($column.htmlType == "editor")## 文本编辑器
@@ -132,6 +133,11 @@ export const createFormSchema: FormSchema[] = [
     },
   #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
@@ -154,7 +160,7 @@ export const updateFormSchema: FormSchema[] = [
 #set ($javaField = $column.javaField)
 #set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
 #set ($comment = $column.columnComment)
-#if (!$column.primaryKey)## 忽略主键,不用在表单里
+  #if (!$column.primaryKey)## 忽略主键,不用在表单里
   {
     label: '${comment}',
     field: '${javaField}',
@@ -164,45 +170,57 @@ export const updateFormSchema: FormSchema[] = [
     #if ($column.htmlType == "input")
     component: 'Input',
     #elseif($column.htmlType == "imageUpload")## 图片上传
-    component: 'Upload',
+    component: 'FileUpload',
+    componentProps: {
+      fileType: 'image',
+      maxCount: 1,
+    },
     #elseif($column.htmlType == "fileUpload")## 文件上传
-    component: 'Upload',
-    #elseif($column.htmlType == "editor")## 文本编辑器
-    component: 'Editor',
+    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(), 'number'),
+      options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'),
       #else##没数据字典
-        options:[],
+      options:[],
       #end
     },
     #elseif($column.htmlType == "checkbox")## 多选框
     component: 'Checkbox',
     componentProps: {
       #if ("" != $dictType)## 有数据字典
-        options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'),
+      options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'),
       #else##没数据字典
-        options:[],
+      options:[],
       #end
     },
     #elseif($column.htmlType == "radio")## 单选框
     component: 'RadioButtonGroup',
     componentProps: {
       #if ("" != $dictType)## 有数据字典
-        options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'),
+      options: getDictOptions(DICT_TYPE.$dictType.toUpperCase(), 'number'),
       #else##没数据字典
-        options:[],
+      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
 #end
 ]

+ 6 - 5
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben/views/form.vue.vm

@@ -9,9 +9,10 @@ import { create${simpleClassName}, get${simpleClassName}, update${simpleClassNam
 
 defineOptions({ name: '${table.className}Modal' })
 
+const emit = defineEmits(['success', 'register'])
+
 const { t } = useI18n()
 const { createMessage } = useMessage()
-const emit = defineEmits(['success', 'register'])
 const isUpdate = ref(true)
 
 const [registerForm, { setFieldsValue, resetFields, resetSchema, validate }] = useForm({
@@ -37,11 +38,11 @@ async function handleSubmit() {
   try {
     const values = await validate()
     setModalProps({ confirmLoading: true })
-    if (unref(isUpdate)) {
+    if (unref(isUpdate))
       await update${simpleClassName}(values)
-    } else {
+    else
       await create${simpleClassName}(values)
-    }
+
     closeModal()
     emit('success')
     createMessage.success(t('common.saveSuccessText'))
@@ -51,7 +52,7 @@ async function handleSubmit() {
 }
 </script>
 <template>
-  <BasicModal v-bind="$attrs" @register="registerModal" :title="isUpdate ? t('action.edit') : t('action.create')" @ok="handleSubmit">
+  <BasicModal v-bind="$attrs" :title="isUpdate ? t('action.edit') : t('action.create')" @register="registerModal" @ok="handleSubmit">
     <BasicForm @register="registerForm" />
   </BasicModal>
 </template>

+ 16 - 16
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3_vben/views/index.vue.vm

@@ -1,12 +1,12 @@
 <script lang="ts" setup>
-import ${simpleClassName}Modal from './${simpleClassName}Modal.vue'
+import ${ simpleClassName }Modal from './${simpleClassName}Modal.vue'
 import { columns, searchFormSchema } from './${classNameVar}.data'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useMessage } from '@/hooks/web/useMessage'
 import { useModal } from '@/components/Modal'
 import { IconEnum } from '@/enums/appEnum'
 import { BasicTable, useTable, TableAction } from '@/components/Table'
-import { delete${simpleClassName}, export${simpleClassName}, get${simpleClassName}Page } from '@/api/${table.moduleName}/${classNameVar}'
+import { delete${ simpleClassName }, export${ simpleClassName }, get${ simpleClassName } Page } from '@/api/${table.moduleName}/${classNameVar}'
 
 defineOptions({ name: '${table.className}' })
 
@@ -16,17 +16,17 @@ const [registerModal, { openModal }] = useModal()
 
 const [registerTable, { getForm, reload }] = useTable({
   title: '${table.classComment}列表',
-  api: get${simpleClassName}Page,
-  columns,
-  formConfig: { labelWidth: 120, schemas: searchFormSchema },
-  useSearchForm: true,
-  showTableSetting: true,
-  actionColumn: {
-    width: 140,
-    title: t('common.action'),
-    dataIndex: 'action',
-    fixed: 'right',
-  },
+  api: get${ simpleClassName }Page,
+    columns,
+    formConfig: { labelWidth: 120, schemas: searchFormSchema },
+    useSearchForm: true,
+    showTableSetting: true,
+    actionColumn: {
+      width: 140,
+      title: t('common.action'),
+      dataIndex: 'action',
+      fixed: 'right',
+    },
 })
 
 function handleCreate() {
@@ -43,14 +43,14 @@ async function handleExport() {
     iconType: 'warning',
     content: t('common.exportMessage'),
     async onOk() {
-      await export${simpleClassName}(getForm().getFieldsValue())
+      await export${ simpleClassName } (getForm().getFieldsValue())
       createMessage.success(t('common.exportSuccessText'))
     },
   })
 }
 
 async function handleDelete(record: Recordable) {
-  await delete${simpleClassName}(record.id)
+  await delete${ simpleClassName } (record.id)
   createMessage.success(t('common.delSuccessText'))
   reload()
 }
@@ -89,4 +89,4 @@ async function handleDelete(record: Recordable) {
     </BasicTable>
     <${simpleClassName}Modal @register="registerModal" @success="reload()" />
   </div>
-</template>
+</template>

+ 11 - 11
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/article/vo/article/AppArticleRespVO.java

@@ -9,41 +9,41 @@ import java.time.LocalDateTime;
 @Data
 public class AppArticleRespVO {
 
-    @Schema(description = "文章编号", required = true, example = "1")
+    @Schema(description = "文章编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private Long id;
 
-    @Schema(description = "文章标题", required = true, example = "芋道源码 - 促销模块")
+    @Schema(description = "文章标题", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码 - 促销模块")
     private String title;
 
-    @Schema(description = "文章作者", required = true, example = "芋道源码")
+    @Schema(description = "文章作者", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码")
     private String author;
 
-    @Schema(description = "分类编号", required = true, example = "2048")
+    @Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
     private Long categoryId;
 
-    @Schema(description = "图文封面", required = true, example = "https://www.iocoder.cn/1.png")
+    @Schema(description = "图文封面", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
     private String picUrl;
 
-    @Schema(description = "文章简介", required = true, example = "我是简介")
+    @Schema(description = "文章简介", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是简介")
     private String introduction;
 
-    @Schema(description = "文章内容", required = true, example = "我是详细")
+    @Schema(description = "文章内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "我是详细")
     private String description;
 
-    @Schema(description = "发布时间", required = true)
+    @Schema(description = "发布时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime createTime;
 
-    @Schema(description = "浏览量", required = true, example = "1024")
+    @Schema(description = "浏览量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Integer browseCount;
 
     @Schema(description = "关联的商品 SPU 编号", example = "1024")
     private Long spuId;
 
 // TODO 芋艿:下面 2 个字段,后端要存储,前端不用返回;
-//    @Schema(description = "是否热卖推荐", required = true, example = "true")
+//    @Schema(description = "是否热卖推荐", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
 //    private Boolean recommendHot;
 //
-//    @Schema(description = "是否 Banner 推荐", required = true, example = "true")
+//    @Schema(description = "是否 Banner 推荐", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
 //    private Boolean recommendBanner;
 
 }

+ 5 - 5
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/article/vo/category/AppArticleCategoryRespVO.java

@@ -7,20 +7,20 @@ import lombok.Data;
 @Data
 public class AppArticleCategoryRespVO {
 
-    @Schema(description = "分类编号", required = true, example = "1")
+    @Schema(description = "分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private Long id;
 
-    @Schema(description = "分类名称", required = true, example = "技术")
+    @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "技术")
     private String name;
 
-    @Schema(description = "分类图标", required = true, example = "https://www.iocoder.cn/1.png")
+    @Schema(description = "分类图标", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
     private String picUrl;
 
     // TODO 芋艿:下面 2 个字段,后端要存储,前端不用返回;
-//    @Schema(description = "状态", required = true, example = "1")
+//    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
 //    private Integer status;
 //
-//    @Schema(description = "排序", required = true, example = "1024")
+//    @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
 //    private Integer sort;
 
 }

+ 14 - 14
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/activity/AppBargainActivityDetailRespVO.java

@@ -9,46 +9,46 @@ import java.time.LocalDateTime;
 @Data
 public class AppBargainActivityDetailRespVO {
 
-    @Schema(description = "砍价活动编号", required = true, example = "1024")
+    @Schema(description = "砍价活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Long id;
 
-    @Schema(description = "砍价活动名称", required = true, example = "618 大砍价")
+    @Schema(description = "砍价活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "618 大砍价")
     private String name;
 
-    @Schema(description = "活动开始时间", required = true)
+    @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime startTime;
 
-    @Schema(description = "活动结束时间", required = true)
+    @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime endTime;
 
-    @Schema(description = "商品 SPU 编号", required = true, example = "2048")
+    @Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
     private Long spuId;
 
-    @Schema(description = "商品 SKU 编号", required = true, example = "1024")
+    @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Long skuId;
 
-    @Schema(description = "商品价格,单位:分", required = true, example = "100")
+    @Schema(description = "商品价格,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
     private Integer price;
 
-    @Schema(description = "商品描述", required = true, example = "我要吃西红柿")
+    @Schema(description = "商品描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "我要吃西红柿")
     private String description;
 
-    @Schema(description = "砍价库存", required = true, example = "512")
+    @Schema(description = "砍价库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "512")
     private Integer stock;
 
-    @Schema(description = "商品图片", required = true, example = "4096") // 从 SPU 的 picUrl 读取
+    @Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "4096") // 从 SPU 的 picUrl 读取
     private String picUrl;
 
-    @Schema(description = "商品市场价,单位:分", required = true, example = "50") // 从 SPU 的 marketPrice 读取
+    @Schema(description = "商品市场价,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "50") // 从 SPU 的 marketPrice 读取
     private Integer marketPrice;
 
-    @Schema(description = "商品单位", required = true, example = "个") // 从 SPU 的 unit 读取,然后转换
+    @Schema(description = "商品单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "个") // 从 SPU 的 unit 读取,然后转换
     private String unitName;
 
-    @Schema(description = "砍价最低金额,单位:分", required = true, example = "100") // 从砍价商品里取最低价
+    @Schema(description = "砍价最低金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") // 从砍价商品里取最低价
     private Integer bargainPrice;
 
-    @Schema(description = "砍价成功数量", required = true, example = "100")
+    @Schema(description = "砍价成功数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
     private Integer successCount;
 
 }

+ 10 - 10
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/activity/AppBargainActivityRespVO.java

@@ -9,34 +9,34 @@ import java.time.LocalDateTime;
 @Data
 public class AppBargainActivityRespVO {
 
-    @Schema(description = "砍价活动编号", required = true, example = "1024")
+    @Schema(description = "砍价活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Long id;
 
-    @Schema(description = "砍价活动名称", required = true, example = "618 大砍价")
+    @Schema(description = "砍价活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "618 大砍价")
     private String name;
 
-    @Schema(description = "活动开始时间", required = true)
+    @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime startTime;
 
-    @Schema(description = "活动结束时间", required = true)
+    @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime endTime;
 
-    @Schema(description = "商品 SPU 编号", required = true, example = "2048")
+    @Schema(description = "商品 SPU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048")
     private Long spuId;
 
-    @Schema(description = "商品 SKU 编号", required = true, example = "1024")
+    @Schema(description = "商品 SKU 编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Long skuId;
 
-    @Schema(description = "砍价库存", required = true, example = "512")
+    @Schema(description = "砍价库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "512")
     private Integer stock;
 
-    @Schema(description = "商品图片", required = true, example = "4096") // 从 SPU 的 picUrl 读取
+    @Schema(description = "商品图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "4096") // 从 SPU 的 picUrl 读取
     private String picUrl;
 
-    @Schema(description = "商品市场价,单位:分", required = true, example = "50") // 从 SPU 的 marketPrice 读取
+    @Schema(description = "商品市场价,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "50") // 从 SPU 的 marketPrice 读取
     private Integer marketPrice;
 
-    @Schema(description = "砍价最低金额,单位:分", required = true, example = "100") // 从砍价商品里取最低价
+    @Schema(description = "砍价最低金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "100") // 从砍价商品里取最低价
     private Integer bargainPrice;
 
 }

+ 1 - 1
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/help/AppBargainHelpCreateReqVO.java

@@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull;
 @Data
 public class AppBargainHelpCreateReqVO {
 
-    @Schema(description = "砍价记录编号", required = true, example = "1024")
+    @Schema(description = "砍价记录编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     @NotNull(message = "砍价记录编号不能为空")
     private Long recordId;
 

+ 4 - 4
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/help/AppBargainHelpRespVO.java

@@ -9,16 +9,16 @@ import java.time.LocalDateTime;
 @Data
 public class AppBargainHelpRespVO {
 
-    @Schema(description = "助力用户的昵称", required = true, example = "1024")
+    @Schema(description = "助力用户的昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private String nickname;
 
-    @Schema(description = "助力用户的头像", required = true, example = "1024")
+    @Schema(description = "助力用户的头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private String avatar;
 
-    @Schema(description = "助力用户的砍价金额", required = true, example = "1024")
+    @Schema(description = "助力用户的砍价金额", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Integer reducePrice;
 
-    @Schema(description = "创建时间", required = true, example = "1024")
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private LocalDateTime createTime;
 
 }

+ 1 - 1
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/record/AppBargainRecordCreateReqVO.java

@@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull;
 @Data
 public class AppBargainRecordCreateReqVO {
 
-    @Schema(description = "砍价活动编号", required = true, example = "1024")
+    @Schema(description = "砍价活动编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     @NotNull(message = "砍价活动编号不能为空")
     private Long activityId;
 

+ 5 - 5
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/bargain/vo/record/AppBargainRecordSummaryRespVO.java

@@ -9,23 +9,23 @@ import java.util.List;
 @Data
 public class AppBargainRecordSummaryRespVO {
 
-    @Schema(description = "砍价用户数量", required = true, example = "1024")
+    @Schema(description = "砍价用户数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Integer userCount;
 
-    @Schema(description = "成功砍价的记录", required = true) // 只返回最近的 7 个
+    @Schema(description = "成功砍价的记录", requiredMode = Schema.RequiredMode.REQUIRED) // 只返回最近的 7 个
     private List<Record> successRecords;
 
     @Schema(description = "成功砍价记录")
     @Data
     public static class Record {
 
-        @Schema(description = "用户昵称", required = true, example = "王**")
+        @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王**")
         private String nickname;
 
-        @Schema(description = "用户头像", required = true, example = "https://www.iocoder.cn/xxx.jpg")
+        @Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/xxx.jpg")
         private String avatar;
 
-        @Schema(description = "活动名称", required = true, example = "天蚕土豆")
+        @Schema(description = "活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "天蚕土豆")
         private String activityName;
 
     }

+ 3 - 3
yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/app/coupon/vo/coupon/AppCouponMatchReqVO.java

@@ -15,15 +15,15 @@ public class AppCouponMatchReqVO {
     @NotNull(message = "商品金额不能为空")
     private Integer price;
 
-    @Schema(description = "商品 SPU 编号的数组", required = true, example = "[1, 2]")
+    @Schema(description = "商品 SPU 编号的数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 2]")
     @NotEmpty(message = "商品 SPU 编号不能为空")
     private List<Long> spuIds;
 
-    @Schema(description = "商品 SKU 编号的数组", required = true, example = "[1, 2]")
+    @Schema(description = "商品 SKU 编号的数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1, 2]")
     @NotEmpty(message = "商品 SKU 编号不能为空")
     private List<Long> skuIds;
 
-    @Schema(description = "分类编号的数组", required = true, example = "[10, 20]")
+    @Schema(description = "分类编号的数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[10, 20]")
     @NotEmpty(message = "分类编号不能为空")
     private List<Long> categoryIds;
 

+ 2 - 2
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/vo/config/AppDeliveryConfigRespVO.java

@@ -8,10 +8,10 @@ import lombok.Data;
 @Data
 public class AppDeliveryConfigRespVO {
 
-    @Schema(description = "腾讯地图 KEY", required = true, example = "123456")
+    @Schema(description = "腾讯地图 KEY", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
     private String tencentLbsKey;
 
-    @Schema(description = "是否开启自提", required = true, example = "true")
+    @Schema(description = "是否开启自提", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
     private Boolean pickUpEnable;
 
 }

+ 2 - 2
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/delivery/vo/express/AppDeliveryExpressRespVO.java

@@ -7,10 +7,10 @@ import lombok.Data;
 @Data
 public class AppDeliveryExpressRespVO {
 
-    @Schema(description = "编号", required = true, example = "1")
+    @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private Long id;
 
-    @Schema(description = "门店名称", required = true, example = "顺丰")
+    @Schema(description = "门店名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "顺丰")
     private String name;
 
 }

+ 2 - 2
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementReqVO.java

@@ -25,12 +25,12 @@ public class AppTradeOrderSettlementReqVO {
     @Schema(description = "优惠劵编号", example = "1024")
     private Long couponId;
 
-    @Schema(description = "是否使用积分", required = true, example = "true")
+    @Schema(description = "是否使用积分", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
     @NotNull(message = "是否使用积分不能为空")
     private Boolean pointStatus;
 
     // ========== 配送相关相关字段 ==========
-    @Schema(description = "配送方式", required = true, example = "1")
+    @Schema(description = "配送方式", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     @InEnum(value = DeliveryTypeEnum.class, message = "配送方式不正确")
     private Integer deliveryType;
 

+ 1 - 1
yudao-module-mall/yudao-module-trade-biz/src/main/java/cn/iocoder/yudao/module/trade/controller/app/order/vo/AppTradeOrderSettlementRespVO.java

@@ -13,7 +13,7 @@ import java.util.List;
 @Data
 public class AppTradeOrderSettlementRespVO {
 
-    @Schema(description = "交易类型", required = true, example = "1") // 对应 TradeOrderTypeEnum 枚举
+    @Schema(description = "交易类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") // 对应 TradeOrderTypeEnum 枚举
     private Integer type = 1; // TODO 芋艿:改成计算
 
     @Schema(description = "购物项数组", requiredMode = Schema.RequiredMode.REQUIRED)

+ 4 - 4
yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/controller/admin/order/vo/PayOrderDetailsRespVO.java

@@ -13,16 +13,16 @@ import java.time.LocalDateTime;
 @ToString(callSuper = true)
 public class PayOrderDetailsRespVO extends PayOrderBaseVO {
 
-    @Schema(description = "支付订单编号", required = true, example = "1024")
+    @Schema(description = "支付订单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
     private Long id;
 
     @Schema(description = "应用名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码")
     private String appName;
 
-    @Schema(description = "创建时间", required = true)
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime createTime;
 
-    @Schema(description = "更新时间", required = true)
+    @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
     private LocalDateTime updateTime;
 
     /**
@@ -34,7 +34,7 @@ public class PayOrderDetailsRespVO extends PayOrderBaseVO {
     @Schema(description = "支付订单扩展")
     public static class PayOrderExtension {
 
-        @Schema(description = "支付订单号", required = true, example = "1024")
+        @Schema(description = "支付订单号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
         private String no;
 
         @Schema(description = "支付异步通知的内容")

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dict/DictDataDO.java

@@ -55,7 +55,7 @@ public class DictDataDO extends BaseDO {
     /**
      * css 样式
      */
-    @TableField(updateStrategy = FieldStrategy.IGNORED)
+    @TableField(updateStrategy = FieldStrategy.ALWAYS)
     private String cssClass;
     /**
      * 备注