1
0

3 Commits fd888eded8 ... 3220ec2c66

Autor SHA1 Nachricht Datum
  xuchao 3220ec2c66 增加旧版会员模块 vor 1 Woche
  xuchao 8697777522 增加旧版会员模块 vor 1 Woche
  xuchao 4901a5b13e 增加旧版会员模块 vor 1 Woche
14 geänderte Dateien mit 936 neuen und 0 gelöschten Zeilen
  1. 28 0
      snowy-admin-web/src/api/biz/bizVipOldApi.js
  2. 88 0
      snowy-admin-web/src/views/biz/vipold/form.vue
  3. 150 0
      snowy-admin-web/src/views/biz/vipold/index.vue
  4. 123 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/controller/BizVipOldController.java
  5. 87 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/entity/BizVipOld.java
  6. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/enums/BizVipOldEnum.java
  7. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/mapper/BizVipOldMapper.java
  8. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/mapper/mapping/BizVipOldMapper.xml
  9. 58 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/param/BizVipOldAddParam.java
  10. 63 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/param/BizVipOldEditParam.java
  11. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/param/BizVipOldIdParam.java
  12. 59 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/param/BizVipOldPageParam.java
  13. 80 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/service/BizVipOldService.java
  14. 101 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/service/impl/BizVipOldServiceImpl.java

+ 28 - 0
snowy-admin-web/src/api/biz/bizVipOldApi.js

@@ -0,0 +1,28 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/biz/vipold/` + url, ...arg)
+
+/**
+ * 旧版会员Api接口管理器
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+export default {
+	// 获取旧版会员分页
+	bizVipOldPage(data) {
+		return request('page', data, 'get')
+	},
+	// 提交旧版会员表单 edit为true时为编辑,默认为新增
+	bizVipOldSubmitForm(data, edit = false) {
+		return request(edit ? 'edit' : 'add', data)
+	},
+	// 删除旧版会员
+	bizVipOldDelete(data) {
+		return request('delete', data)
+	},
+	// 获取旧版会员详情
+	bizVipOldDetail(data) {
+		return request('detail', data, 'get')
+	}
+}

+ 88 - 0
snowy-admin-web/src/views/biz/vipold/form.vue

@@ -0,0 +1,88 @@
+<template>
+	<xn-form-container
+		:title="formData.id ? '编辑旧版会员' : '增加旧版会员'"
+		:width="700"
+		v-model:open="open"
+		:destroy-on-close="true"
+		@close="onClose"
+	>
+		<a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
+			<a-form-item label="手机号:" name="phone">
+				<a-input v-model:value="formData.phone" placeholder="请输入手机号" allow-clear />
+			</a-form-item>
+			<a-form-item label="姓名:" name="name">
+				<a-input v-model:value="formData.name" placeholder="请输入姓名" allow-clear />
+			</a-form-item>
+			<a-form-item label="余额:" name="balance">
+				<a-input v-model:value="formData.balance" placeholder="请输入余额" allow-clear />
+			</a-form-item>
+			<a-form-item label="卡类型:" name="cardType">
+				<a-input v-model:value="formData.cardType" placeholder="请输入卡类型" allow-clear />
+			</a-form-item>
+			<a-form-item label="注册时间:" name="cardTime">
+				<a-input v-model:value="formData.cardTime" placeholder="请输入注册时间" allow-clear />
+			</a-form-item>
+			<a-form-item label="说明:" name="memo">
+				<a-input v-model:value="formData.memo" placeholder="请输入说明" allow-clear />
+			</a-form-item>
+		</a-form>
+		<template #footer>
+			<a-button style="margin-right: 8px" @click="onClose">关闭</a-button>
+			<a-button type="primary" @click="onSubmit" :loading="submitLoading">保存</a-button>
+		</template>
+	</xn-form-container>
+</template>
+
+<script setup name="bizVipOldForm">
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import bizVipOldApi from '@/api/biz/bizVipOldApi'
+	// 抽屉状态
+	const open = ref(false)
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+
+	// 打开抽屉
+	const onOpen = (record) => {
+		open.value = true
+		if (record) {
+			let recordData = cloneDeep(record)
+			formData.value = Object.assign({}, recordData)
+		}
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		open.value = false
+	}
+	// 默认要校验的
+	const formRules = {
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				bizVipOldApi
+					.bizVipOldSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>

+ 150 - 0
snowy-admin-web/src/views/biz/vipold/index.vue

@@ -0,0 +1,150 @@
+<template>
+	<a-card :bordered="false">
+		<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
+			<a-row :gutter="24">
+				<a-col :span="6">
+					<a-form-item label="手机号" name="phone">
+						<a-input v-model:value="searchFormState.phone" placeholder="请输入手机号" />
+					</a-form-item>
+				</a-col>
+				<a-col :span="6">
+					<a-form-item label="姓名" name="name">
+						<a-input v-model:value="searchFormState.name" placeholder="请输入姓名" />
+					</a-form-item>
+				</a-col>
+				<a-col :span="6">
+					<a-button type="primary" @click="tableRef.refresh()">查询</a-button>
+					<a-button style="margin: 0 8px" @click="reset">重置</a-button>
+				</a-col>
+			</a-row>
+		</a-form>
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			:alert="options.alert.show"
+			bordered
+			:row-key="(record) => record.id"
+			:tool-config="toolConfig"
+			:row-selection="options.rowSelection"
+		>
+			<template #operator class="table-operator">
+				<a-space>
+					<a-button type="primary" @click="formRef.onOpen()" v-if="hasPerm('bizVipOldAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+					<xn-batch-button
+						v-if="hasPerm('bizVipOldBatchDelete')"
+						buttonName="批量删除"
+                        icon="DeleteOutlined"
+						:selectedRowKeys="selectedRowKeys"
+						@batchCallBack="deleteBatchBizVipOld"
+					/>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+						<a @click="formRef.onOpen(record)" v-if="hasPerm('bizVipOldEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['bizVipOldEdit', 'bizVipOldDelete'], 'and')" />
+						<a-popconfirm title="确定要删除吗?" @confirm="deleteBizVipOld(record)">
+							<a-button type="link" danger size="small" v-if="hasPerm('bizVipOldDelete')">删除</a-button>
+						</a-popconfirm>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Form ref="formRef" @successful="tableRef.refresh()" />
+</template>
+
+<script setup name="vipold">
+	import { cloneDeep } from 'lodash-es'
+	import Form from './form.vue'
+	import bizVipOldApi from '@/api/biz/bizVipOldApi'
+	const searchFormState = ref({})
+	const searchFormRef = ref()
+	const tableRef = ref()
+	const formRef = ref()
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '手机号',
+			dataIndex: 'phone'
+		},
+		{
+			title: '姓名',
+			dataIndex: 'name'
+		},
+		{
+			title: '余额',
+			dataIndex: 'balance'
+		},
+		{
+			title: '卡类型',
+			dataIndex: 'cardType'
+		},
+		{
+			title: '注册时间',
+			dataIndex: 'cardTime'
+		},
+		{
+			title: '说明',
+			dataIndex: 'memo'
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['bizVipOldEdit', 'bizVipOldDelete'])) {
+		columns.push({
+			title: '操作',
+			dataIndex: 'action',
+			align: 'center',
+			width: 150
+		})
+	}
+	const selectedRowKeys = ref([])
+	// 列表选择配置
+	const options = {
+		// columns数字类型字段加入 needTotal: true 可以勾选自动算账
+		alert: {
+			show: true,
+			clear: () => {
+				selectedRowKeys.value = ref([])
+			}
+		},
+		rowSelection: {
+			onChange: (selectedRowKey, selectedRows) => {
+				selectedRowKeys.value = selectedRowKey
+			}
+		}
+	}
+	const loadData = (parameter) => {
+		const searchFormParam = cloneDeep(searchFormState.value)
+		return bizVipOldApi.bizVipOldPage(Object.assign(parameter, searchFormParam)).then((data) => {
+			return data
+		})
+	}
+	// 重置
+	const reset = () => {
+		searchFormRef.value.resetFields()
+		tableRef.value.refresh(true)
+	}
+	// 删除
+	const deleteBizVipOld = (record) => {
+		let params = [
+			{
+				id: record.id
+			}
+		]
+		bizVipOldApi.bizVipOldDelete(params).then(() => {
+			tableRef.value.refresh(true)
+		})
+	}
+	// 批量删除
+	const deleteBatchBizVipOld = (params) => {
+		bizVipOldApi.bizVipOldDelete(params).then(() => {
+			tableRef.value.clearRefreshSelected()
+		})
+	}
+</script>

+ 123 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/controller/BizVipOldController.java

@@ -0,0 +1,123 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.biz.modular.vipold.entity.BizVipOld;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldAddParam;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldEditParam;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldIdParam;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldPageParam;
+import vip.xiaonuo.biz.modular.vipold.service.BizVipOldService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 旧版会员控制器
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ */
+@Tag(name = "旧版会员控制器")
+@RestController
+@Validated
+public class BizVipOldController {
+
+    @Resource
+    private BizVipOldService bizVipOldService;
+
+    /**
+     * 获取旧版会员分页
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    @Operation(summary = "获取旧版会员分页")
+    @SaCheckPermission("/biz/vipold/page")
+    @GetMapping("/biz/vipold/page")
+    public CommonResult<Page<BizVipOld>> page(BizVipOldPageParam bizVipOldPageParam) {
+        return CommonResult.data(bizVipOldService.page(bizVipOldPageParam));
+    }
+
+    /**
+     * 添加旧版会员
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    @Operation(summary = "添加旧版会员")
+    @CommonLog("添加旧版会员")
+    @SaCheckPermission("/biz/vipold/add")
+    @PostMapping("/biz/vipold/add")
+    public CommonResult<String> add(@RequestBody @Valid BizVipOldAddParam bizVipOldAddParam) {
+        bizVipOldService.add(bizVipOldAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑旧版会员
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    @Operation(summary = "编辑旧版会员")
+    @CommonLog("编辑旧版会员")
+    @SaCheckPermission("/biz/vipold/edit")
+    @PostMapping("/biz/vipold/edit")
+    public CommonResult<String> edit(@RequestBody @Valid BizVipOldEditParam bizVipOldEditParam) {
+        bizVipOldService.edit(bizVipOldEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除旧版会员
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    @Operation(summary = "删除旧版会员")
+    @CommonLog("删除旧版会员")
+    @SaCheckPermission("/biz/vipold/delete")
+    @PostMapping("/biz/vipold/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<BizVipOldIdParam> bizVipOldIdParamList) {
+        bizVipOldService.delete(bizVipOldIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取旧版会员详情
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    @Operation(summary = "获取旧版会员详情")
+    @SaCheckPermission("/biz/vipold/detail")
+    @GetMapping("/biz/vipold/detail")
+    public CommonResult<BizVipOld> detail(@Valid BizVipOldIdParam bizVipOldIdParam) {
+        return CommonResult.data(bizVipOldService.detail(bizVipOldIdParam));
+    }
+}

+ 87 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/entity/BizVipOld.java

@@ -0,0 +1,87 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 旧版会员实体
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+@Getter
+@Setter
+@TableName("biz_vip_old")
+public class BizVipOld {
+
+    /** 主键ID */
+    @TableId
+    @Schema(description = "主键ID")
+    private String id;
+
+    /** 手机号 */
+    @Schema(description = "手机号")
+    private String phone;
+
+    /** 姓名 */
+    @Schema(description = "姓名")
+    private String name;
+
+    /** 余额 */
+    @Schema(description = "余额")
+    private Float balance;
+
+    /** 卡类型 */
+    @Schema(description = "卡类型")
+    private String cardType;
+
+    /** 注册时间 */
+    @Schema(description = "注册时间")
+    private String cardTime;
+
+    /** 说明 */
+    @Schema(description = "说明")
+    private String memo;
+
+    /** 删除标志:NOT_DELETE 正常,DELETED 已删除 */
+    @Schema(description = "删除标志:NOT_DELETE 正常,DELETED 已删除")
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建人 */
+    @Schema(description = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 创建时间 */
+    @Schema(description = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 修改时间 */
+    @Schema(description = "修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改人 */
+    @Schema(description = "修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/enums/BizVipOldEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.enums;
+
+import lombok.Getter;
+
+/**
+ * 旧版会员枚举
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+@Getter
+public enum BizVipOldEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    BizVipOldEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/mapper/BizVipOldMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.vipold.entity.BizVipOld;
+
+/**
+ * 旧版会员Mapper接口
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+public interface BizVipOldMapper extends BaseMapper<BizVipOld> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/mapper/mapping/BizVipOldMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.biz.modular.vipold.mapper.BizVipOldMapper">
+
+</mapper>

+ 58 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/param/BizVipOldAddParam.java

@@ -0,0 +1,58 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 旧版会员添加参数
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+@Getter
+@Setter
+public class BizVipOldAddParam {
+
+    /** 手机号 */
+    @Schema(description = "手机号")
+    private String phone;
+
+    /** 姓名 */
+    @Schema(description = "姓名")
+    private String name;
+
+    /** 余额 */
+    @Schema(description = "余额")
+    private Float balance;
+
+    /** 卡类型 */
+    @Schema(description = "卡类型")
+    private String cardType;
+
+    /** 注册时间 */
+    @Schema(description = "注册时间")
+    private String cardTime;
+
+    /** 说明 */
+    @Schema(description = "说明")
+    private String memo;
+
+}

+ 63 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/param/BizVipOldEditParam.java

@@ -0,0 +1,63 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 旧版会员编辑参数
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+@Getter
+@Setter
+public class BizVipOldEditParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 手机号 */
+    @Schema(description = "手机号")
+    private String phone;
+
+    /** 姓名 */
+    @Schema(description = "姓名")
+    private String name;
+
+    /** 余额 */
+    @Schema(description = "余额")
+    private Float balance;
+
+    /** 卡类型 */
+    @Schema(description = "卡类型")
+    private String cardType;
+
+    /** 注册时间 */
+    @Schema(description = "注册时间")
+    private String cardTime;
+
+    /** 说明 */
+    @Schema(description = "说明")
+    private String memo;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/param/BizVipOldIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 旧版会员Id参数
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+@Getter
+@Setter
+public class BizVipOldIdParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 59 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/param/BizVipOldPageParam.java

@@ -0,0 +1,59 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 旧版会员查询参数
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+@Getter
+@Setter
+public class BizVipOldPageParam {
+
+    /** 当前页 */
+    @Schema(description = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @Schema(description = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @Schema(description = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @Schema(description = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @Schema(description = "关键词")
+    private String searchKey;
+
+    /** 手机号 */
+    @Schema(description = "手机号")
+    private String phone;
+
+    /** 姓名 */
+    @Schema(description = "姓名")
+    private String name;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/service/BizVipOldService.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.vipold.entity.BizVipOld;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldAddParam;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldEditParam;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldIdParam;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldPageParam;
+
+import java.util.List;
+
+/**
+ * 旧版会员Service接口
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+public interface BizVipOldService extends IService<BizVipOld> {
+
+    /**
+     * 获取旧版会员分页
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    Page<BizVipOld> page(BizVipOldPageParam bizVipOldPageParam);
+
+    /**
+     * 添加旧版会员
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    void add(BizVipOldAddParam bizVipOldAddParam);
+
+    /**
+     * 编辑旧版会员
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    void edit(BizVipOldEditParam bizVipOldEditParam);
+
+    /**
+     * 删除旧版会员
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    void delete(List<BizVipOldIdParam> bizVipOldIdParamList);
+
+    /**
+     * 获取旧版会员详情
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     */
+    BizVipOld detail(BizVipOldIdParam bizVipOldIdParam);
+
+    /**
+     * 获取旧版会员详情
+     *
+     * @author 徐超
+     * @date  2025/06/26 22:07
+     **/
+    BizVipOld queryEntity(String id);
+}

+ 101 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/vipold/service/impl/BizVipOldServiceImpl.java

@@ -0,0 +1,101 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.biz.modular.vipold.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.biz.modular.vipold.entity.BizVipOld;
+import vip.xiaonuo.biz.modular.vipold.mapper.BizVipOldMapper;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldAddParam;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldEditParam;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldIdParam;
+import vip.xiaonuo.biz.modular.vipold.param.BizVipOldPageParam;
+import vip.xiaonuo.biz.modular.vipold.service.BizVipOldService;
+
+import java.util.List;
+
+/**
+ * 旧版会员Service接口实现类
+ *
+ * @author 徐超
+ * @date  2025/06/26 22:07
+ **/
+@Service
+public class BizVipOldServiceImpl extends ServiceImpl<BizVipOldMapper, BizVipOld> implements BizVipOldService {
+
+    @Override
+    public Page<BizVipOld> page(BizVipOldPageParam bizVipOldPageParam) {
+        QueryWrapper<BizVipOld> queryWrapper = new QueryWrapper<BizVipOld>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(bizVipOldPageParam.getPhone())) {
+            queryWrapper.lambda().like(BizVipOld::getPhone, bizVipOldPageParam.getPhone());
+        }
+        if(ObjectUtil.isNotEmpty(bizVipOldPageParam.getName())) {
+            queryWrapper.lambda().like(BizVipOld::getName, bizVipOldPageParam.getName());
+        }
+        //if(ObjectUtil.isAllNotEmpty(bizVipOldPageParam.getSortField(), bizVipOldPageParam.getSortOrder())) {
+        //    CommonSortOrderEnum.validate(bizVipOldPageParam.getSortOrder());
+        //    queryWrapper.orderBy(true, bizVipOldPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+        //            StrUtil.toUnderlineCase(bizVipOldPageParam.getSortField()));
+        //} else {
+        //    queryWrapper.lambda().orderByAsc(BizVipOld::getId);
+        //}
+        queryWrapper.lambda().orderByDesc(BizVipOld::getCardTime);
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(BizVipOldAddParam bizVipOldAddParam) {
+        BizVipOld bizVipOld = BeanUtil.toBean(bizVipOldAddParam, BizVipOld.class);
+        this.save(bizVipOld);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(BizVipOldEditParam bizVipOldEditParam) {
+        BizVipOld bizVipOld = this.queryEntity(bizVipOldEditParam.getId());
+        BeanUtil.copyProperties(bizVipOldEditParam, bizVipOld);
+        this.updateById(bizVipOld);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<BizVipOldIdParam> bizVipOldIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(bizVipOldIdParamList, BizVipOldIdParam::getId));
+    }
+
+    @Override
+    public BizVipOld detail(BizVipOldIdParam bizVipOldIdParam) {
+        return this.queryEntity(bizVipOldIdParam.getId());
+    }
+
+    @Override
+    public BizVipOld queryEntity(String id) {
+        BizVipOld bizVipOld = this.getById(id);
+        if(ObjectUtil.isEmpty(bizVipOld)) {
+            throw new CommonException("旧版会员不存在,id值为:{}", id);
+        }
+        return bizVipOld;
+    }
+}