Browse Source

其他预约以及充电桩配置代码提交

fanzherong 1 day ago
parent
commit
4967b68faf
21 changed files with 921 additions and 23 deletions
  1. 28 0
      snowy-admin-web/src/api/biz/bizChargeStationApi.js
  2. 76 0
      snowy-admin-web/src/views/biz/bizchargestation/form.vue
  3. 123 0
      snowy-admin-web/src/views/biz/bizchargestation/index.vue
  4. 2 0
      snowy-admin-web/src/views/biz/bizotherappoint/detail.vue
  5. 18 7
      snowy-admin-web/src/views/biz/bizotherappoint/index.vue
  6. 4 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/entity/BizAppointmentRecord.java
  7. 1 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/mapper/mapping/BizAppointmentRecordMapper.xml
  8. 3 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/param/BizAppointmentRecordPageParam.java
  9. 7 2
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/param/BizOtherAppointmentExportResult.java
  10. 40 14
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/service/impl/BizAppointmentRecordServiceImpl.java
  11. 123 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/controller/BizChargeStationController.java
  12. 71 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/entity/BizChargeStation.java
  13. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/enums/BizChargeStationEnum.java
  14. 25 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/mapper/BizChargeStationMapper.java
  15. 5 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/mapper/mapping/BizChargeStationMapper.xml
  16. 42 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/param/BizChargeStationAddParam.java
  17. 47 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/param/BizChargeStationEditParam.java
  18. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/param/BizChargeStationIdParam.java
  19. 51 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/param/BizChargeStationPageParam.java
  20. 80 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/service/BizChargeStationService.java
  21. 106 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/service/impl/BizChargeStationServiceImpl.java

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

@@ -0,0 +1,28 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/biz/bizchargestation/` + url, ...arg)
+
+/**
+ * 充电桩配置表Api接口管理器
+ *
+ * @author 河南优纳特传动科技有限公司
+ * @date  2025/07/04 08:47
+ **/
+export default {
+	// 获取充电桩配置表分页
+	bizChargeStationPage(data) {
+		return request('page', data, 'get')
+	},
+	// 提交充电桩配置表表单 edit为true时为编辑,默认为新增
+	bizChargeStationSubmitForm(data, edit = false) {
+		return request(edit ? 'edit' : 'add', data)
+	},
+	// 删除充电桩配置表
+	bizChargeStationDelete(data) {
+		return request('delete', data)
+	},
+	// 获取充电桩配置表详情
+	bizChargeStationDetail(data) {
+		return request('detail', data, 'get')
+	}
+}

+ 76 - 0
snowy-admin-web/src/views/biz/bizchargestation/form.vue

@@ -0,0 +1,76 @@
+<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"  :wrapper-col="wrapperCol" :label-col="labelCol">
+			<a-form-item label="充电桩总数量:" name="chargeStationTotalNumber">
+				<a-input v-model:value="formData.chargeStationTotalNumber" 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="bizChargeStationForm">
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import bizChargeStationApi from '@/api/biz/bizChargeStationApi'
+	// 抽屉状态
+	const open = ref(false)
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+	//设置表单样式
+	const labelCol = ref({ span: 5})
+	const wrapperCol = ref({ span: 16})
+	// 打开抽屉
+	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)
+				bizChargeStationApi
+					.bizChargeStationSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>

+ 123 - 0
snowy-admin-web/src/views/biz/bizchargestation/index.vue

@@ -0,0 +1,123 @@
+<template>
+	<a-card :bordered="false">
+		<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('bizChargeStationAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+					<xn-batch-button
+						v-if="hasPerm('bizChargeStationBatchDelete')"
+						buttonName="批量删除"
+                        icon="DeleteOutlined"
+						:selectedRowKeys="selectedRowKeys"
+						@batchCallBack="deleteBatchBizChargeStation"
+					/>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'chargeStationRemainNumber'">
+					{{record.chargeStationTotalNumber-record.chargeStationUsedNumber}}
+				</template>
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+						<a @click="formRef.onOpen(record)" v-if="hasPerm('bizChargeStationEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['bizChargeStationEdit', 'bizChargeStationDelete'], 'and')" />
+						<a-popconfirm title="确定要删除吗?" @confirm="deleteBizChargeStation(record)">
+							<a-button type="link" danger size="small" v-if="hasPerm('bizChargeStationDelete')">删除</a-button>
+						</a-popconfirm>
+					</a-space>
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Form ref="formRef" @successful="tableRef.refresh()" />
+</template>
+
+<script setup name="bizchargestation">
+	import { cloneDeep } from 'lodash-es'
+	import Form from './form.vue'
+	import bizChargeStationApi from '@/api/biz/bizChargeStationApi'
+	const tableRef = ref()
+	const formRef = ref()
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+	const columns = [
+		{
+			title: '充电桩总数量',
+			align: 'center',
+			dataIndex: 'chargeStationTotalNumber'
+		},
+		{
+			title: '充电桩已使用数量',
+			align: 'center',
+			dataIndex: 'chargeStationUsedNumber'
+		},
+		{
+			title: '充电桩剩余数量',
+			align: 'center',
+			dataIndex: 'chargeStationRemainNumber'
+		}
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['bizChargeStationEdit', 'bizChargeStationDelete'])) {
+		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) => {
+		return bizChargeStationApi.bizChargeStationPage(parameter).then((data) => {
+			return data
+		})
+	}
+	// 重置
+	const reset = () => {
+		searchFormRef.value.resetFields()
+		tableRef.value.refresh(true)
+	}
+	// 删除
+	const deleteBizChargeStation = (record) => {
+		let params = [
+			{
+				id: record.id
+			}
+		]
+		bizChargeStationApi.bizChargeStationDelete(params).then(() => {
+			tableRef.value.refresh(true)
+		})
+	}
+	// 批量删除
+	const deleteBatchBizChargeStation = (params) => {
+		bizChargeStationApi.bizChargeStationDelete(params).then(() => {
+			tableRef.value.clearRefreshSelected()
+		})
+	}
+</script>

+ 2 - 0
snowy-admin-web/src/views/biz/bizotherappoint/detail.vue

@@ -2,6 +2,8 @@
 	<xn-form-container title="详情" :width="900" :visible="visible" :destroy-on-close="true" @close="onClose">
 	<xn-form-container title="详情" :width="900" :visible="visible" :destroy-on-close="true" @close="onClose">
 		<a-form ref="formRef" :model="formData" :label-col="labelCol4" :wrapper-col="wrapperCol20">
 		<a-form ref="formRef" :model="formData" :label-col="labelCol4" :wrapper-col="wrapperCol20">
 			<a-descriptions :column="4" size="middle" bordered class="mb-2" :label-style="labelStyle" :contentStyle="contentStyle">
 			<a-descriptions :column="4" size="middle" bordered class="mb-2" :label-style="labelStyle" :contentStyle="contentStyle">
+				<a-descriptions-item label="预约单号" :span="4">{{ formData.otherNumber }}</a-descriptions-item>
+
 				<a-descriptions-item label="车牌号" :span="2">{{ formData.licenseNumber }}</a-descriptions-item>
 				<a-descriptions-item label="车牌号" :span="2">{{ formData.licenseNumber }}</a-descriptions-item>
 <!--				<a-descriptions-item label="订单名称" :span="2">{{ formData.orderName }}</a-descriptions-item>-->
 <!--				<a-descriptions-item label="订单名称" :span="2">{{ formData.orderName }}</a-descriptions-item>-->
 				<a-descriptions-item label="是否过磅" :span="2">{{ $TOOL.dictTypeData('is_weigh', formData.isWeigh) }}</a-descriptions-item>
 				<a-descriptions-item label="是否过磅" :span="2">{{ $TOOL.dictTypeData('is_weigh', formData.isWeigh) }}</a-descriptions-item>

+ 18 - 7
snowy-admin-web/src/views/biz/bizotherappoint/index.vue

@@ -2,7 +2,11 @@
 	<a-card :bordered="false" style="margin-bottom: 10px" class="mb-2">
 	<a-card :bordered="false" style="margin-bottom: 10px" class="mb-2">
 		<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
 		<a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
 			<a-row :gutter="24">
 			<a-row :gutter="24">
-
+				<a-col :span="6">
+					<a-form-item label="预约单号" name="otherNumber">
+						<a-input v-model:value="searchFormState.otherNumber" placeholder="预约单号" />
+					</a-form-item>
+				</a-col>
 				<a-col :span="6">
 				<a-col :span="6">
 					<a-form-item label="车牌号" name="licenseNumber">
 					<a-form-item label="车牌号" name="licenseNumber">
 						<a-input v-model:value="searchFormState.licenseNumber" placeholder="车牌号" />
 						<a-input v-model:value="searchFormState.licenseNumber" placeholder="车牌号" />
@@ -13,15 +17,16 @@
 						<a-input v-model:value="searchFormState.driverName" placeholder="司机名称" />
 						<a-input v-model:value="searchFormState.driverName" placeholder="司机名称" />
 					</a-form-item>
 					</a-form-item>
 				</a-col>
 				</a-col>
-				<a-col :span="6">
-					<a-form-item label="司机电话" name="driverMobile">
-						<a-input v-model:value="searchFormState.driverMobile" placeholder="司机电话" />
-					</a-form-item>
-				</a-col>
+
 				<template v-if="advanced">
 				<template v-if="advanced">
+					<a-col :span="6">
+						<a-form-item label="司机电话" name="driverMobile">
+							<a-input v-model:value="searchFormState.driverMobile" placeholder="司机电话" />
+						</a-form-item>
+					</a-col>
 					<a-col :span="6">
 					<a-col :span="6">
 						<a-form-item label="预约状态" name="status">
 						<a-form-item label="预约状态" name="status">
-							<a-select v-model:value="searchFormState.status" placeholder="预约状态查询"
+							<a-select v-model:value="searchFormState.status" placeholder="预约状态"
 									  :options="statusList"
 									  :options="statusList"
 							> </a-select>
 							> </a-select>
 						</a-form-item>
 						</a-form-item>
@@ -210,6 +215,12 @@
 	}
 	}
 
 
 	const columns = [
 	const columns = [
+		{
+			title: '预约单号',
+			dataIndex: 'otherNumber',
+			width:150,
+			align: 'center'
+		},
 		{
 		{
 			title: '车牌号',
 			title: '车牌号',
 			dataIndex: 'licenseNumber',
 			dataIndex: 'licenseNumber',

+ 4 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/entity/BizAppointmentRecord.java

@@ -251,4 +251,8 @@ public class BizAppointmentRecord extends CommonEntity {
     /**出场时间*/
     /**出场时间*/
     private Date leaveTime;
     private Date leaveTime;
 
 
+
+    /**其他预约单号*/
+    private String otherNumber;
+
 }
 }

+ 1 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/mapper/mapping/BizAppointmentRecordMapper.xml

@@ -11,6 +11,7 @@
             bar.exit_operator,
             bar.exit_operator,
             bar.exit_time,
             bar.exit_time,
             bar.authorize_operator,
             bar.authorize_operator,
+            bar.other_number,
             bar.authorize_time,
             bar.authorize_time,
             bar.license_number,
             bar.license_number,
             bo.order_number,
             bo.order_number,

+ 3 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/param/BizAppointmentRecordPageParam.java

@@ -91,4 +91,7 @@ public class BizAppointmentRecordPageParam {
     /**管桩计划单号*/
     /**管桩计划单号*/
     private String planNumber;
     private String planNumber;
 
 
+    /**其他预约单号*/
+    private String otherNumber;
+
 }
 }

+ 7 - 2
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/param/BizOtherAppointmentExportResult.java

@@ -3,13 +3,17 @@ package vip.xiaonuo.biz.modular.bizappointmentrecord.param;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.HeadStyle;
 import com.alibaba.excel.annotation.write.style.HeadStyle;
 import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
 import com.alibaba.excel.enums.poi.FillPatternTypeEnum;
-import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.Data;
 
 
 @Data
 @Data
 public class BizOtherAppointmentExportResult {
 public class BizOtherAppointmentExportResult {
 
 
-
+    /**
+     * 其他预约_预约单号
+     */
+    @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 120)
+    @ExcelProperty({"其他预约报表", "其他预约_预约单号"})
+    private String otherNumber;
     /** 车牌号 */
     /** 车牌号 */
     @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 120)
     @HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 120)
     @ExcelProperty({"其他预约报表", "车牌号"})
     @ExcelProperty({"其他预约报表", "车牌号"})
@@ -67,4 +71,5 @@ public class BizOtherAppointmentExportResult {
     private String authorizeTime;
     private String authorizeTime;
 
 
 
 
+
 }
 }

+ 40 - 14
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/service/impl/BizAppointmentRecordServiceImpl.java

@@ -173,6 +173,9 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
         if (ObjectUtil.isNotEmpty(bizAppointmentRecordPageParam.getOrderName())) {
         if (ObjectUtil.isNotEmpty(bizAppointmentRecordPageParam.getOrderName())) {
             queryWrapper.like("bo.order_name", bizAppointmentRecordPageParam.getOrderName());
             queryWrapper.like("bo.order_name", bizAppointmentRecordPageParam.getOrderName());
         }
         }
+        if (ObjectUtil.isNotEmpty(bizAppointmentRecordPageParam.getOtherNumber())) {
+            queryWrapper.like("bar.other_number", bizAppointmentRecordPageParam.getOtherNumber());
+        }
         if (ObjectUtil.isNotEmpty(bizAppointmentRecordPageParam.getOrderNumber())) {
         if (ObjectUtil.isNotEmpty(bizAppointmentRecordPageParam.getOrderNumber())) {
             queryWrapper.like("bo.order_number", bizAppointmentRecordPageParam.getOrderNumber());
             queryWrapper.like("bo.order_number", bizAppointmentRecordPageParam.getOrderNumber());
         }
         }
@@ -207,8 +210,8 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
             queryWrapper.like("bla.load_number", bizAppointmentRecordPageParam.getLoadNumber());
             queryWrapper.like("bla.load_number", bizAppointmentRecordPageParam.getLoadNumber());
         }
         }
         //管桩计划单号
         //管桩计划单号
-        if (ObjectUtil.isNotEmpty(bizAppointmentRecordPageParam.getPlanNumber())){
-            queryWrapper.like("bpp.plan_number",bizAppointmentRecordPageParam.getPlanNumber());
+        if (ObjectUtil.isNotEmpty(bizAppointmentRecordPageParam.getPlanNumber())) {
+            queryWrapper.like("bpp.plan_number", bizAppointmentRecordPageParam.getPlanNumber());
         }
         }
         queryWrapper.eq("bar.delete_flag", "NOT_DELETE");
         queryWrapper.eq("bar.delete_flag", "NOT_DELETE");
         queryWrapper.orderByDesc("bar.create_time");
         queryWrapper.orderByDesc("bar.create_time");
@@ -1291,7 +1294,6 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
     }
     }
 
 
 
 
-
     public void getLoadTimeCount(BizAppointmentRecordEditParam bizAppointmentRecordEditParam, BizAppointmentRecord bizAppointmentRecord) {
     public void getLoadTimeCount(BizAppointmentRecordEditParam bizAppointmentRecordEditParam, BizAppointmentRecord bizAppointmentRecord) {
         lock.lock();
         lock.lock();
         try {
         try {
@@ -1353,7 +1355,7 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
 
 
         //修改管桩计划状态
         //修改管桩计划状态
         BizPipePlan pipePlan = bizPipePlanService.getById(bizAppointmentRecordAddParam.getOrderId());
         BizPipePlan pipePlan = bizPipePlanService.getById(bizAppointmentRecordAddParam.getOrderId());
-        if(ObjectUtil.isNotNull(pipePlan)){
+        if (ObjectUtil.isNotNull(pipePlan)) {
             pipePlan.setStatus("2");
             pipePlan.setStatus("2");
             pipePlan.setPlanAlreadyCount(pipePlan.getPlanAlreadyCount() + 1);
             pipePlan.setPlanAlreadyCount(pipePlan.getPlanAlreadyCount() + 1);
             bizPipePlanService.updateById(pipePlan);
             bizPipePlanService.updateById(pipePlan);
@@ -1398,8 +1400,8 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
             //判断管桩计划次数是否满足
             //判断管桩计划次数是否满足
             if (ObjectUtil.isNotEmpty(bizAppointmentRecordAddParam.getOrderId())) {
             if (ObjectUtil.isNotEmpty(bizAppointmentRecordAddParam.getOrderId())) {
                 BizPipePlan pipePlan = bizPipePlanService.getById(bizAppointmentRecordAddParam.getOrderId());
                 BizPipePlan pipePlan = bizPipePlanService.getById(bizAppointmentRecordAddParam.getOrderId());
-                if(ObjectUtil.isNotNull(pipePlan)){
-                    if(pipePlan.getPlanCount() - pipePlan.getPlanAlreadyCount() <= 0){
+                if (ObjectUtil.isNotNull(pipePlan)) {
+                    if (pipePlan.getPlanCount() - pipePlan.getPlanAlreadyCount() <= 0) {
                         throw new CommonException("当前管桩计划单预约次数已满");
                         throw new CommonException("当前管桩计划单预约次数已满");
                     }
                     }
                 }
                 }
@@ -1477,15 +1479,15 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
 
 
     }
     }
 
 
-    public void getPipeTimeCount(BizAppointmentRecordEditParam bizAppointmentRecordEditParam,BizAppointmentRecord bizAppointmentRecord) {
+    public void getPipeTimeCount(BizAppointmentRecordEditParam bizAppointmentRecordEditParam, BizAppointmentRecord bizAppointmentRecord) {
         lock.lock();
         lock.lock();
         try {
         try {
             //判断管桩计划次数是否满足
             //判断管桩计划次数是否满足
             if (ObjectUtil.isNotEmpty(bizAppointmentRecordEditParam.getOrderId())) {
             if (ObjectUtil.isNotEmpty(bizAppointmentRecordEditParam.getOrderId())) {
-                if(!StringUtils.equals(bizAppointmentRecordEditParam.getOrderId(),bizAppointmentRecord.getOrderId())){
+                if (!StringUtils.equals(bizAppointmentRecordEditParam.getOrderId(), bizAppointmentRecord.getOrderId())) {
                     BizPipePlan pipePlan = bizPipePlanService.getById(bizAppointmentRecordEditParam.getOrderId());
                     BizPipePlan pipePlan = bizPipePlanService.getById(bizAppointmentRecordEditParam.getOrderId());
-                    if(ObjectUtil.isNotNull(pipePlan)){
-                        if(pipePlan.getPlanCount() - pipePlan.getPlanAlreadyCount() <= 0){
+                    if (ObjectUtil.isNotNull(pipePlan)) {
+                        if (pipePlan.getPlanCount() - pipePlan.getPlanAlreadyCount() <= 0) {
                             throw new CommonException("当前管桩计划单预约次数已满");
                             throw new CommonException("当前管桩计划单预约次数已满");
                         }
                         }
                     }
                     }
@@ -1514,7 +1516,7 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
 
 
         //修改管桩计划单已约数量
         //修改管桩计划单已约数量
         BizPipePlan pipePlan = bizPipePlanService.getById(bizAppointmentRecord.getOrderId());
         BizPipePlan pipePlan = bizPipePlanService.getById(bizAppointmentRecord.getOrderId());
-        if(ObjectUtil.isNotNull(pipePlan)){
+        if (ObjectUtil.isNotNull(pipePlan)) {
             pipePlan.setPlanAlreadyCount(pipePlan.getPlanAlreadyCount() - 1);
             pipePlan.setPlanAlreadyCount(pipePlan.getPlanAlreadyCount() - 1);
             bizPipePlanService.updateById(pipePlan);
             bizPipePlanService.updateById(pipePlan);
         }
         }
@@ -1532,6 +1534,7 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
             bizAppointmentRecord.setDriverName(bizUser.getName());
             bizAppointmentRecord.setDriverName(bizUser.getName());
             bizAppointmentRecord.setDriverMobile(bizUser.getPhone());
             bizAppointmentRecord.setDriverMobile(bizUser.getPhone());
         }
         }
+        bizAppointmentRecord.setOtherNumber(getNumber("QT", "6"));
         //默认赋值待入场状态
         //默认赋值待入场状态
         bizAppointmentRecord.setStatus("4");
         bizAppointmentRecord.setStatus("4");
         bizAppointmentRecord.setAppointmentType("6");
         bizAppointmentRecord.setAppointmentType("6");
@@ -1590,7 +1593,7 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
     @Override
     @Override
     public void bizOtherAppointmentExit(BizAppointmentRecordIdParam bizAppointmentRecordIdParam) {
     public void bizOtherAppointmentExit(BizAppointmentRecordIdParam bizAppointmentRecordIdParam) {
         BizAppointmentRecord bizAppointmentRecord = this.queryEntity(bizAppointmentRecordIdParam.getId());
         BizAppointmentRecord bizAppointmentRecord = this.queryEntity(bizAppointmentRecordIdParam.getId());
-        if("10".equals(bizAppointmentRecord.getStatus())){
+        if ("10".equals(bizAppointmentRecord.getStatus())) {
             throw new CommonException("当前流程已经强制结束,不可重复操作!");
             throw new CommonException("当前流程已经强制结束,不可重复操作!");
         }
         }
         //强制结束,将状态改成已出场,同时记录操作人以及操作时间
         //强制结束,将状态改成已出场,同时记录操作人以及操作时间
@@ -1601,10 +1604,11 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
         bizAppointmentRecord.setStatus("10");
         bizAppointmentRecord.setStatus("10");
         this.updateById(bizAppointmentRecord);
         this.updateById(bizAppointmentRecord);
     }
     }
+
     @Override
     @Override
     public void bizOtherAppointmentAuthorize(BizAppointmentRecordIdParam bizAppointmentRecordIdParam) {
     public void bizOtherAppointmentAuthorize(BizAppointmentRecordIdParam bizAppointmentRecordIdParam) {
         BizAppointmentRecord bizAppointmentRecord = this.queryEntity(bizAppointmentRecordIdParam.getId());
         BizAppointmentRecord bizAppointmentRecord = this.queryEntity(bizAppointmentRecordIdParam.getId());
-        if("9".equals(bizAppointmentRecord.getStatus())){
+        if ("9".equals(bizAppointmentRecord.getStatus())) {
             throw new CommonException("当前流程已经授权离场,不可重复操作!");
             throw new CommonException("当前流程已经授权离场,不可重复操作!");
         }
         }
         //强制结束,将状态改成已出场,同时记录操作人以及操作时间
         //强制结束,将状态改成已出场,同时记录操作人以及操作时间
@@ -1617,7 +1621,6 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
     }
     }
 
 
 
 
-
     @Override
     @Override
     public void bizOtherAppointmentExport(BizAppointmentRecordPageParam bizAppointmentRecordPageParam, HttpServletResponse response) throws IOException {
     public void bizOtherAppointmentExport(BizAppointmentRecordPageParam bizAppointmentRecordPageParam, HttpServletResponse response) throws IOException {
         QueryWrapper<BizAppointmentRecord> queryWrapper = getQueryWrapper(bizAppointmentRecordPageParam);
         QueryWrapper<BizAppointmentRecord> queryWrapper = getQueryWrapper(bizAppointmentRecordPageParam);
@@ -1635,4 +1638,27 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
         CommonExportUtil.export(fileName, BizOtherAppointmentExportResult.class, list, response, "其他预约报表");
         CommonExportUtil.export(fileName, BizOtherAppointmentExportResult.class, list, response, "其他预约报表");
     }
     }
 
 
+
+    public String getNumber(String startPrefix, String appointmentType) {
+        lock.lock();
+        try {
+            String format = new SimpleDateFormat("yyyyMMdd").format(new Date());
+            String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
+            long count = this.count(new QueryWrapper<BizAppointmentRecord>().lambda()
+                    .eq(BizAppointmentRecord::getAppointmentType, appointmentType)
+                    .between(BizAppointmentRecord::getCreateTime,
+                            time + " 00:00:00", time + " 23:59:59"));
+            String settleNo = startPrefix + format + generateCode((int) count);
+            return settleNo;
+        } finally {
+            lock.unlock(); // 释放锁
+        }
+
+    }
+
+    public static String generateCode(Integer counter) {
+        counter++;
+        return String.format("%03d", counter);
+    }
+
 }
 }

+ 123 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/controller/BizChargeStationController.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.bizchargestation.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.bizchargestation.entity.BizChargeStation;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationAddParam;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationEditParam;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationIdParam;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationPageParam;
+import vip.xiaonuo.biz.modular.bizchargestation.service.BizChargeStationService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 充电桩配置表控制器
+ *
+ * @author 河南优纳特传动科技有限公司
+ * @date  2025/07/04 08:47
+ */
+@Tag(name = "充电桩配置表控制器")
+@RestController
+@Validated
+public class BizChargeStationController {
+
+    @Resource
+    private BizChargeStationService bizChargeStationService;
+
+    /**
+     * 获取充电桩配置表分页
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    @Operation(summary = "获取充电桩配置表分页")
+    @SaCheckPermission("/biz/bizchargestation/page")
+    @GetMapping("/biz/bizchargestation/page")
+    public CommonResult<Page<BizChargeStation>> page(BizChargeStationPageParam bizChargeStationPageParam) {
+        return CommonResult.data(bizChargeStationService.page(bizChargeStationPageParam));
+    }
+
+    /**
+     * 添加充电桩配置表
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    @Operation(summary = "添加充电桩配置表")
+    @CommonLog("添加充电桩配置表")
+    @SaCheckPermission("/biz/bizchargestation/add")
+    @PostMapping("/biz/bizchargestation/add")
+    public CommonResult<String> add(@RequestBody @Valid BizChargeStationAddParam bizChargeStationAddParam) {
+        bizChargeStationService.add(bizChargeStationAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑充电桩配置表
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    @Operation(summary = "编辑充电桩配置表")
+    @CommonLog("编辑充电桩配置表")
+    @SaCheckPermission("/biz/bizchargestation/edit")
+    @PostMapping("/biz/bizchargestation/edit")
+    public CommonResult<String> edit(@RequestBody @Valid BizChargeStationEditParam bizChargeStationEditParam) {
+        bizChargeStationService.edit(bizChargeStationEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除充电桩配置表
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    @Operation(summary = "删除充电桩配置表")
+    @CommonLog("删除充电桩配置表")
+    @SaCheckPermission("/biz/bizchargestation/delete")
+    @PostMapping("/biz/bizchargestation/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<BizChargeStationIdParam> bizChargeStationIdParamList) {
+        bizChargeStationService.delete(bizChargeStationIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取充电桩配置表详情
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    @Operation(summary = "获取充电桩配置表详情")
+    @SaCheckPermission("/biz/bizchargestation/detail")
+    @GetMapping("/biz/bizchargestation/detail")
+    public CommonResult<BizChargeStation> detail(@Valid BizChargeStationIdParam bizChargeStationIdParam) {
+        return CommonResult.data(bizChargeStationService.detail(bizChargeStationIdParam));
+    }
+}

+ 71 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/entity/BizChargeStation.java

@@ -0,0 +1,71 @@
+/*
+ * 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.bizchargestation.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/07/04 08:47
+ **/
+@Getter
+@Setter
+@TableName("biz_charge_station")
+public class BizChargeStation {
+
+    /** 主键ID */
+    @TableId
+    @Schema(description = "主键ID")
+    private String id;
+
+    /** 充电桩总数量 */
+    @Schema(description = "充电桩总数量")
+    private Integer chargeStationTotalNumber;
+
+    /** 充电桩已使用数量 */
+    @Schema(description = "充电桩已使用数量")
+    private Integer chargeStationUsedNumber;
+
+    /** DELETE_FLAG */
+    @Schema(description = "DELETE_FLAG")
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** CREATE_USER */
+    @Schema(description = "CREATE_USER")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** CREATE_TIME */
+    @Schema(description = "CREATE_TIME")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** UPDATE_USER */
+    @Schema(description = "UPDATE_USER")
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    /** UPDATE_TIME */
+    @Schema(description = "UPDATE_TIME")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/enums/BizChargeStationEnum.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.bizchargestation.enums;
+
+import lombok.Getter;
+
+/**
+ * 充电桩配置表枚举
+ *
+ * @author 河南优纳特传动科技有限公司
+ * @date  2025/07/04 08:47
+ **/
+@Getter
+public enum BizChargeStationEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    BizChargeStationEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/mapper/BizChargeStationMapper.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.bizchargestation.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.biz.modular.bizchargestation.entity.BizChargeStation;
+
+/**
+ * 充电桩配置表Mapper接口
+ *
+ * @author 河南优纳特传动科技有限公司
+ * @date  2025/07/04 08:47
+ **/
+public interface BizChargeStationMapper extends BaseMapper<BizChargeStation> {
+}

+ 5 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/mapper/mapping/BizChargeStationMapper.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.bizchargestation.mapper.BizChargeStationMapper">
+
+</mapper>

+ 42 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/param/BizChargeStationAddParam.java

@@ -0,0 +1,42 @@
+/*
+ * 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.bizchargestation.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/07/04 08:47
+ **/
+@Getter
+@Setter
+public class BizChargeStationAddParam {
+
+    /** 充电桩总数量 */
+    @Schema(description = "充电桩总数量")
+    private Integer chargeStationTotalNumber;
+
+    /** 充电桩已使用数量 */
+    @Schema(description = "充电桩已使用数量")
+    private Integer chargeStationUsedNumber;
+
+}

+ 47 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/param/BizChargeStationEditParam.java

@@ -0,0 +1,47 @@
+/*
+ * 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.bizchargestation.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/07/04 08:47
+ **/
+@Getter
+@Setter
+public class BizChargeStationEditParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 充电桩总数量 */
+    @Schema(description = "充电桩总数量")
+    private Integer chargeStationTotalNumber;
+
+    /** 充电桩已使用数量 */
+    @Schema(description = "充电桩已使用数量")
+    private Integer chargeStationUsedNumber;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/param/BizChargeStationIdParam.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.bizchargestation.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 充电桩配置表Id参数
+ *
+ * @author 河南优纳特传动科技有限公司
+ * @date  2025/07/04 08:47
+ **/
+@Getter
+@Setter
+public class BizChargeStationIdParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 51 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/param/BizChargeStationPageParam.java

@@ -0,0 +1,51 @@
+/*
+ * 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.bizchargestation.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/07/04 08:47
+ **/
+@Getter
+@Setter
+public class BizChargeStationPageParam {
+
+    /** 当前页 */
+    @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;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/service/BizChargeStationService.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.bizchargestation.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.bizchargestation.entity.BizChargeStation;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationAddParam;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationEditParam;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationIdParam;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationPageParam;
+
+import java.util.List;
+
+/**
+ * 充电桩配置表Service接口
+ *
+ * @author 河南优纳特传动科技有限公司
+ * @date  2025/07/04 08:47
+ **/
+public interface BizChargeStationService extends IService<BizChargeStation> {
+
+    /**
+     * 获取充电桩配置表分页
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    Page<BizChargeStation> page(BizChargeStationPageParam bizChargeStationPageParam);
+
+    /**
+     * 添加充电桩配置表
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    void add(BizChargeStationAddParam bizChargeStationAddParam);
+
+    /**
+     * 编辑充电桩配置表
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    void edit(BizChargeStationEditParam bizChargeStationEditParam);
+
+    /**
+     * 删除充电桩配置表
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    void delete(List<BizChargeStationIdParam> bizChargeStationIdParamList);
+
+    /**
+     * 获取充电桩配置表详情
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     */
+    BizChargeStation detail(BizChargeStationIdParam bizChargeStationIdParam);
+
+    /**
+     * 获取充电桩配置表详情
+     *
+     * @author 河南优纳特传动科技有限公司
+     * @date  2025/07/04 08:47
+     **/
+    BizChargeStation queryEntity(String id);
+}

+ 106 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizchargestation/service/impl/BizChargeStationServiceImpl.java

@@ -0,0 +1,106 @@
+/*
+ * 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.bizchargestation.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.bizchargestation.entity.BizChargeStation;
+import vip.xiaonuo.biz.modular.bizchargestation.mapper.BizChargeStationMapper;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationAddParam;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationEditParam;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationIdParam;
+import vip.xiaonuo.biz.modular.bizchargestation.param.BizChargeStationPageParam;
+import vip.xiaonuo.biz.modular.bizchargestation.service.BizChargeStationService;
+
+import java.util.List;
+
+/**
+ * 充电桩配置表Service接口实现类
+ *
+ * @author 河南优纳特传动科技有限公司
+ * @date 2025/07/04 08:47
+ **/
+@Service
+public class BizChargeStationServiceImpl extends ServiceImpl<BizChargeStationMapper, BizChargeStation> implements BizChargeStationService {
+
+    @Override
+    public Page<BizChargeStation> page(BizChargeStationPageParam bizChargeStationPageParam) {
+        QueryWrapper<BizChargeStation> queryWrapper = new QueryWrapper<BizChargeStation>().checkSqlInjection();
+        if (ObjectUtil.isAllNotEmpty(bizChargeStationPageParam.getSortField(), bizChargeStationPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(bizChargeStationPageParam.getSortOrder());
+            queryWrapper.orderBy(true, bizChargeStationPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(bizChargeStationPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(BizChargeStation::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(BizChargeStationAddParam bizChargeStationAddParam) {
+        QueryWrapper<BizChargeStation> queryWrapper = new QueryWrapper<BizChargeStation>();
+        queryWrapper.lambda().eq(BizChargeStation::getDeleteFlag, 0).last("limit 1");
+        BizChargeStation one = this.getOne(queryWrapper);
+        if (one != null) {
+            throw new CommonException("充电桩配置信息已存在");
+        }
+        BizChargeStation bizChargeStation = BeanUtil.toBean(bizChargeStationAddParam, BizChargeStation.class);
+        bizChargeStation.setChargeStationUsedNumber(0);
+        this.save(bizChargeStation);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(BizChargeStationEditParam bizChargeStationEditParam) {
+        BizChargeStation bizChargeStation = this.queryEntity(bizChargeStationEditParam.getId());
+        //判断一下修改后的总数量是否小于已使用数量
+        if(bizChargeStationEditParam.getChargeStationTotalNumber() <= bizChargeStation.getChargeStationUsedNumber()){
+            //抛出异常提示
+            throw new CommonException("充电桩总数量不能小于已使用数量");
+        }
+        BeanUtil.copyProperties(bizChargeStationEditParam, bizChargeStation);
+        this.updateById(bizChargeStation);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<BizChargeStationIdParam> bizChargeStationIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(bizChargeStationIdParamList, BizChargeStationIdParam::getId));
+    }
+
+    @Override
+    public BizChargeStation detail(BizChargeStationIdParam bizChargeStationIdParam) {
+        return this.queryEntity(bizChargeStationIdParam.getId());
+    }
+
+    @Override
+    public BizChargeStation queryEntity(String id) {
+        BizChargeStation bizChargeStation = this.getById(id);
+        if (ObjectUtil.isEmpty(bizChargeStation)) {
+            throw new CommonException("充电桩配置表不存在,id值为:{}", id);
+        }
+        return bizChargeStation;
+    }
+}