fanzherong_v 1 月之前
父节点
当前提交
cd27f37fb5
共有 18 个文件被更改,包括 1078 次插入5 次删除
  1. 1 1
      snowy-admin-web/.env.development
  2. 3 3
      snowy-admin-web/.env.production
  3. 28 0
      snowy-admin-web/src/api/biz/bizVehicleApi.js
  4. 115 0
      snowy-admin-web/src/views/biz/bizvehicle/form.vue
  5. 188 0
      snowy-admin-web/src/views/biz/bizvehicle/index.vue
  6. 1 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizappointmentrecord/service/impl/BizAppointmentRecordServiceImpl.java
  7. 119 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/controller/BizVehicleController.java
  8. 62 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/entity/BizVehicle.java
  9. 34 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/enums/BizVehicleEnum.java
  10. 29 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/mapper/BizVehicleMapper.java
  11. 18 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/mapper/mapping/BizVehicleMapper.xml
  12. 54 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/param/BizVehicleAddParam.java
  13. 59 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/param/BizVehicleEditParam.java
  14. 35 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/param/BizVehicleIdParam.java
  15. 60 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/param/BizVehiclePageParam.java
  16. 80 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/service/BizVehicleService.java
  17. 191 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/service/impl/BizVehicleServiceImpl.java
  18. 1 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/service/impl/BizRecordServiceImpl.java

+ 1 - 1
snowy-admin-web/.env.development

@@ -14,4 +14,4 @@ NODE_ENV = development
 VITE_VERSION_UPDATE = false
 
 #文件访问地址
-VITE_PREVIEW_PATH = http://db.js-whzl.com:8065/preview/
+VITE_PREVIEW_PATH = https://db.js-whzl.com:8055/preview/

+ 3 - 3
snowy-admin-web/.env.production

@@ -1,5 +1,5 @@
-# 接口地址
-VITE_API_BASEURL = http://127.0.0.1:83
+# 接口地址(测试环境)
+VITE_API_BASEURL = https://wx.js-whzl.com:10008/api
 
 # 本地端口
 VITE_PORT = 81
@@ -11,4 +11,4 @@ VITE_SET_DRAWER = false
 VITE_VERSION_UPDATE = true
 
 #文件访问地址
-VITE_PREVIEW_PATH = http://db.js-whzl.com:8065/preview/
+VITE_PREVIEW_PATH = https://db.js-whzl.com:8055/preview/

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

@@ -0,0 +1,28 @@
+import { baseRequest } from '@/utils/request'
+
+const request = (url, ...arg) => baseRequest(`/biz/bizvehicle/` + url, ...arg)
+
+/**
+ * 车辆信息Api接口管理器
+ *
+ * @author fanzherong
+ * @date  2025/04/08 09:26
+ **/
+export default {
+	// 获取车辆信息分页
+	bizVehiclePage(data) {
+		return request('page', data, 'get')
+	},
+	// 提交车辆信息表单 edit为true时为编辑,默认为新增
+	bizVehicleSubmitForm(data, edit = false) {
+		return request(edit ? 'edit' : 'add', data)
+	},
+	// 删除车辆信息
+	bizVehicleDelete(data) {
+		return request('delete', data)
+	},
+	// 获取车辆信息详情
+	bizVehicleDetail(data) {
+		return request('detail', data, 'get')
+	}
+}

+ 115 - 0
snowy-admin-web/src/views/biz/bizvehicle/form.vue

@@ -0,0 +1,115 @@
+<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="licensePlate">
+				<a-input v-model:value="formData.licensePlate" placeholder="请输入车牌号" allow-clear />
+			</a-form-item>
+			<a-form-item label="车辆轴数:" name="vehicleAxles">
+				<a-select v-model:value="formData.vehicleAxles" placeholder="请选择车辆轴数"
+						  :options="overIdList"
+				> </a-select>
+			</a-form-item>
+			<a-form-item label="司机姓名:" name="driverName">
+				<a-input v-model:value="formData.driverName" placeholder="请输入司机姓名" allow-clear />
+			</a-form-item>
+			<a-form-item label="司机电话:" name="driverMobile">
+				<a-input v-model:value="formData.driverMobile" placeholder="请输入司机电话" allow-clear />
+			</a-form-item>
+			<a-form-item label="是否启用:" name="status" v-if="formData.id!=null && formData.id!=''">
+				<a-radio-group button-style="solid" v-model:value="formData.status">
+					<a-radio-button value="1">
+						启用
+					</a-radio-button>
+					<a-radio-button value="2">
+						关闭
+					</a-radio-button>
+				</a-radio-group>
+			</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="bizVehicleForm">
+	import { cloneDeep } from 'lodash-es'
+	import { required } from '@/utils/formRules'
+	import bizVehicleApi from '@/api/biz/bizVehicleApi'
+	import bizExcessConfigApi from "@/api/biz/bizExcessConfigApi";
+	// 抽屉状态
+	const open = ref(false)
+	const emit = defineEmits({ successful: null })
+	const formRef = ref()
+	// 表单数据
+	const formData = ref({})
+	const submitLoading = ref(false)
+	const overIdList = ref()
+
+	//设置表单样式
+	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)
+		}else{
+			formData.value.status = '1'
+		}
+		//查询车辆轴数
+		bizExcessConfigApi.getList().then((res)=>{
+			overIdList.value = res.map((item)=>{
+				return{
+					value:item.id,
+					label:item.vehicleAxleNumber+'轴'
+				}
+			})
+		})
+	}
+	// 关闭抽屉
+	const onClose = () => {
+		formRef.value.resetFields()
+		formData.value = {}
+		open.value = false
+	}
+	// 默认要校验的
+	const formRules = {
+		licensePlate: [required('请输入车牌号')],
+		vehicleAxles: [required('请选择车辆轴数')],
+		//driverName: [required('请输入司机姓名')],
+		//driverMobile: [required('请输入司机电话')],
+	}
+	// 验证并提交数据
+	const onSubmit = () => {
+		formRef.value
+			.validate()
+			.then(() => {
+				submitLoading.value = true
+				const formDataParam = cloneDeep(formData.value)
+				bizVehicleApi
+					.bizVehicleSubmitForm(formDataParam, formDataParam.id)
+					.then(() => {
+						onClose()
+						emit('successful')
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			})
+			.catch(() => {})
+	}
+	// 抛出函数
+	defineExpose({
+		onOpen
+	})
+</script>

+ 188 - 0
snowy-admin-web/src/views/biz/bizvehicle/index.vue

@@ -0,0 +1,188 @@
+<template>
+	<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-row :gutter="24">
+				<a-col :span="6">
+					<a-form-item label="车牌号" name="licensePlate">
+						<a-input v-model:value="searchFormState.licensePlate" placeholder="请输入车牌号" />
+					</a-form-item>
+				</a-col>
+				<a-col :span="6">
+					<a-form-item label="司机姓名" name="driverName">
+						<a-input v-model:value="searchFormState.driverName" placeholder="请输入司机姓名" />
+					</a-form-item>
+				</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>
+				<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>
+	</a-card>
+	<a-card :bordered="false">
+		<s-table
+			ref="tableRef"
+			:columns="columns"
+			:data="loadData"
+			bordered
+			:row-key="(record) => record.id"
+		>
+			<template #operator class="table-operator">
+				<a-space>
+					<a-button type="primary" @click="formRef.onOpen()" v-if="hasPerm('bizVehicleAdd')">
+						<template #icon><plus-outlined /></template>
+						新增
+					</a-button>
+				</a-space>
+			</template>
+			<template #bodyCell="{ column, record }">
+				<template v-if="column.dataIndex === 'action'">
+					<a-space>
+						<a @click="formRef.onOpen(record)" v-if="hasPerm('bizVehicleEdit')">编辑</a>
+						<a-divider type="vertical" v-if="hasPerm(['bizVehicleEdit', 'bizVehicleDelete'], 'and')" />
+						<a-button type="link" danger size="small" v-if="hasPerm('bizVehicleDelete')" @click="deleteConfig(record)">删除</a-button>
+					</a-space>
+				</template>
+				<template v-if="column.dataIndex === 'status'">
+					<span v-if="record.status=='1'">启用</span>
+					<span v-else>关闭</span>
+				</template>
+				<template v-if="column.dataIndex === 'vehicleAxleNumber'">
+					{{record.vehicleAxleNumber + '轴'}}
+				</template>
+			</template>
+		</s-table>
+	</a-card>
+	<Form ref="formRef" @successful="tableRef.refresh()" />
+</template>
+
+<script setup name="bizvehicle">
+	import { cloneDeep } from 'lodash-es'
+	import Form from './form.vue'
+	import bizVehicleApi from '@/api/biz/bizVehicleApi'
+	import {ExclamationCircleOutlined} from '@ant-design/icons-vue';
+	import {Modal} from 'ant-design-vue';
+	import {createVNode} from 'vue';
+
+	const submitLoading = ref(false)
+	const tableRef = ref()
+	const formRef = ref()
+	const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
+
+	//查询数据
+	const searchFormState = ref({})
+	const searchFormRef = ref()
+
+	const columns = [
+		{
+			title: '车牌号',
+			dataIndex: 'licensePlate',
+			align:'center'
+		},
+		{
+			title: '车辆轴数',
+			dataIndex: 'vehicleAxleNumber',
+			align:'center'
+		},
+		{
+			title: '司机姓名',
+			dataIndex: 'driverName',
+			align:'center'
+		},
+		{
+			title: '司机电话',
+			dataIndex: 'driverMobile',
+			align:'center'
+		},
+		{
+			title: '状态',
+			dataIndex: 'status',
+			align:'center'
+		},
+	]
+	// 操作栏通过权限判断是否显示
+	if (hasPerm(['bizVehicleEdit', 'bizVehicleDelete'])) {
+		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 bizVehicleApi.bizVehiclePage(Object.assign(parameter, searchFormParam)).then((data) => {
+			return data
+		})
+	}
+	// 重置
+	const reset = () => {
+		searchFormRef.value.resetFields()
+		tableRef.value.refresh(true)
+	}
+	// 删除
+	const deleteBizVehicle = (record) => {
+		let params = [
+			{
+				id: record.id
+			}
+		]
+		bizVehicleApi.bizVehicleDelete(params).then(() => {
+			tableRef.value.refresh(true)
+		})
+	}
+	// 删除
+	const deleteConfig = (record) => {
+
+		Modal.confirm({
+			title: '确定删除该数据吗?',
+			icon: createVNode(ExclamationCircleOutlined),
+			content: '',
+			onOk() {
+				submitLoading.value = true
+				let params = [
+					{
+						id: record.id
+					}
+				]
+
+				bizVehicleApi
+					.bizVehicleDelete(params)
+					.then(() => {
+						tableRef.value.refresh(true)
+					})
+					.finally(() => {
+						submitLoading.value = false
+					})
+			},
+			onCancel() {}
+		})
+	}
+	// 批量删除
+	const deleteBatchBizVehicle = (params) => {
+		bizVehicleApi.bizVehicleDelete(params).then(() => {
+			tableRef.value.clearRefreshSelected()
+		})
+	}
+</script>

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

@@ -225,7 +225,7 @@ public class BizAppointmentRecordServiceImpl extends ServiceImpl<BizAppointmentR
     public void checkParam(BizAppointmentRecordEditParam bizAppointmentRecordEditParam,BizAppointmentRecord bizAppointmentRecord){
         //校验车牌号
         if(ObjectUtil.isNotEmpty(bizAppointmentRecordEditParam.getLicenseNumber())){
-            if(!StringUtils.equals(bizAppointmentRecord.getLicenseNumber(),bizAppointmentRecordEditParam.getLicenseNumber())){
+            if(!StringUtils.equals(bizAppointmentRecord.getLicenseNumber(),bizAppointmentRecordEditParam.getLicenseNumber().toUpperCase().trim())){
                 //车牌号修改过
                 if(!isCarNumber(bizAppointmentRecordEditParam.getLicenseNumber().toUpperCase().trim())){
                     throw new CommonException("车牌号:{}格式错误",bizAppointmentRecordEditParam.getLicenseNumber().toUpperCase().trim());

+ 119 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/controller/BizVehicleController.java

@@ -0,0 +1,119 @@
+/*
+ * 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.bizvehicle.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.bizvehicle.entity.BizVehicle;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehicleAddParam;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehicleEditParam;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehicleIdParam;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehiclePageParam;
+import vip.xiaonuo.biz.modular.bizvehicle.service.BizVehicleService;
+
+import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 车辆信息控制器
+ *
+ * @author fanzherong
+ * @date  2025/04/08 09:26
+ */
+@Tag(name = "车辆信息控制器")
+@RestController
+@Validated
+public class BizVehicleController {
+
+    @Resource
+    private BizVehicleService bizVehicleService;
+
+    /**
+     * 获取车辆信息分页
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    @Operation(summary = "获取车辆信息分页")
+    @SaCheckPermission("/biz/bizvehicle/page")
+    @GetMapping("/biz/bizvehicle/page")
+    public CommonResult<Page<BizVehicle>> page(BizVehiclePageParam bizVehiclePageParam) {
+        return CommonResult.data(bizVehicleService.page(bizVehiclePageParam));
+    }
+
+    /**
+     * 添加车辆信息
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    @Operation(summary = "添加车辆信息")
+    @CommonLog("添加车辆信息")
+    @PostMapping("/biz/bizvehicle/add")
+    public CommonResult<String> add(@RequestBody @Valid BizVehicleAddParam bizVehicleAddParam) {
+        bizVehicleService.add(bizVehicleAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑车辆信息
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    @Operation(summary = "编辑车辆信息")
+    @CommonLog("编辑车辆信息")
+    @PostMapping("/biz/bizvehicle/edit")
+    public CommonResult<String> edit(@RequestBody @Valid BizVehicleEditParam bizVehicleEditParam) {
+        bizVehicleService.edit(bizVehicleEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除车辆信息
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    @Operation(summary = "删除车辆信息")
+    @CommonLog("删除车辆信息")
+    @PostMapping("/biz/bizvehicle/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   List<BizVehicleIdParam> bizVehicleIdParamList) {
+        bizVehicleService.delete(bizVehicleIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取车辆信息详情
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    @Operation(summary = "获取车辆信息详情")
+    @GetMapping("/biz/bizvehicle/detail")
+    public CommonResult<BizVehicle> detail(@Valid BizVehicleIdParam bizVehicleIdParam) {
+        return CommonResult.data(bizVehicleService.detail(bizVehicleIdParam));
+    }
+}

+ 62 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/entity/BizVehicle.java

@@ -0,0 +1,62 @@
+/*
+ * 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.bizvehicle.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import vip.xiaonuo.common.pojo.CommonEntity;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 车辆信息实体
+ *
+ * @author fanzherong
+ * @date  2025/04/08 09:26
+ **/
+@Getter
+@Setter
+@TableName("biz_vehicle")
+public class BizVehicle extends CommonEntity {
+
+    /** 主键ID */
+    @TableId
+    @Schema(description = "主键ID")
+    private String id;
+
+    /** 车牌号 */
+    @Schema(description = "车牌号")
+    private String licensePlate;
+
+    /** 车辆轴数 */
+    @Schema(description = "车辆轴数")
+    private String vehicleAxles;
+
+    /** 司机姓名 */
+    @Schema(description = "司机姓名")
+    private String driverName;
+
+    /** 司机电话 */
+    @Schema(description = "司机电话")
+    private String driverMobile;
+
+    /** 状态 (1:启用   2:停用) */
+    @Schema(description = "状态 (1:启用   2:停用)")
+    private String status;
+
+    @TableField(exist = false)
+    private String vehicleAxleNumber;
+}

+ 34 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/enums/BizVehicleEnum.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.bizvehicle.enums;
+
+import lombok.Getter;
+
+/**
+ * 车辆信息枚举
+ *
+ * @author fanzherong
+ * @date  2025/04/08 09:26
+ **/
+@Getter
+public enum BizVehicleEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    BizVehicleEnum(String value) {
+        this.value = value;
+    }
+}

+ 29 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/mapper/BizVehicleMapper.java

@@ -0,0 +1,29 @@
+/*
+ * 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.bizvehicle.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import vip.xiaonuo.biz.modular.bizvehicle.entity.BizVehicle;
+
+/**
+ * 车辆信息Mapper接口
+ *
+ * @author fanzherong
+ * @date  2025/04/08 09:26
+ **/
+public interface BizVehicleMapper extends BaseMapper<BizVehicle> {
+    Page<BizVehicle> getPage(@Param("page") Page page, @Param("ew") QueryWrapper<BizVehicle> ew);
+}

+ 18 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/mapper/mapping/BizVehicleMapper.xml

@@ -0,0 +1,18 @@
+<?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.bizvehicle.mapper.BizVehicleMapper">
+
+    <select id="getPage" resultType="vip.xiaonuo.biz.modular.bizvehicle.entity.BizVehicle">
+        select
+            bc.id,
+            bc.license_plate,
+            bc.vehicle_axles,
+            bec.vehicle_axle_number,
+            bc.driver_name,
+            bc.driver_mobile,
+            bc.status
+        from biz_vehicle bc
+        left join biz_excess_config bec on bec.id = bc.vehicle_axles
+        ${ew.customSqlSegment}
+    </select>
+</mapper>

+ 54 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/param/BizVehicleAddParam.java

@@ -0,0 +1,54 @@
+/*
+ * 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.bizvehicle.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 fanzherong
+ * @date  2025/04/08 09:26
+ **/
+@Getter
+@Setter
+public class BizVehicleAddParam {
+
+    /** 车牌号 */
+    @Schema(description = "车牌号")
+    private String licensePlate;
+
+    /** 车辆轴数 */
+    @Schema(description = "车辆轴数")
+    private String vehicleAxles;
+
+    /** 司机姓名 */
+    @Schema(description = "司机姓名")
+    private String driverName;
+
+    /** 司机电话 */
+    @Schema(description = "司机电话")
+    private String driverMobile;
+
+    /** 状态 (1:启用   2:停用) */
+    @Schema(description = "状态 (1:启用   2:停用)")
+    private String status;
+
+}

+ 59 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/param/BizVehicleEditParam.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.bizvehicle.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 fanzherong
+ * @date  2025/04/08 09:26
+ **/
+@Getter
+@Setter
+public class BizVehicleEditParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 车牌号 */
+    @Schema(description = "车牌号")
+    private String licensePlate;
+
+    /** 车辆轴数 */
+    @Schema(description = "车辆轴数")
+    private String vehicleAxles;
+
+    /** 司机姓名 */
+    @Schema(description = "司机姓名")
+    private String driverName;
+
+    /** 司机电话 */
+    @Schema(description = "司机电话")
+    private String driverMobile;
+
+    /** 状态 (1:启用   2:停用) */
+    @Schema(description = "状态 (1:启用   2:停用)")
+    private String status;
+
+}

+ 35 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/param/BizVehicleIdParam.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.bizvehicle.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * 车辆信息Id参数
+ *
+ * @author fanzherong
+ * @date  2025/04/08 09:26
+ **/
+@Getter
+@Setter
+public class BizVehicleIdParam {
+
+    /** 主键ID */
+    @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 60 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/param/BizVehiclePageParam.java

@@ -0,0 +1,60 @@
+/*
+ * 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.bizvehicle.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 车辆信息查询参数
+ *
+ * @author fanzherong
+ * @date  2025/04/08 09:26
+ **/
+@Getter
+@Setter
+public class BizVehiclePageParam {
+
+    /** 当前页 */
+    @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;
+
+    /**车牌号*/
+    private String licensePlate;
+
+    /**司机姓名**/
+    private String driverName;
+
+    /**司机电话*/
+    private String driverMobile;
+
+}

+ 80 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/service/BizVehicleService.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.bizvehicle.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.biz.modular.bizvehicle.entity.BizVehicle;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehicleAddParam;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehicleEditParam;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehicleIdParam;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehiclePageParam;
+
+import java.util.List;
+
+/**
+ * 车辆信息Service接口
+ *
+ * @author fanzherong
+ * @date  2025/04/08 09:26
+ **/
+public interface BizVehicleService extends IService<BizVehicle> {
+
+    /**
+     * 获取车辆信息分页
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    Page<BizVehicle> page(BizVehiclePageParam bizVehiclePageParam);
+
+    /**
+     * 添加车辆信息
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    void add(BizVehicleAddParam bizVehicleAddParam);
+
+    /**
+     * 编辑车辆信息
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    void edit(BizVehicleEditParam bizVehicleEditParam);
+
+    /**
+     * 删除车辆信息
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    void delete(List<BizVehicleIdParam> bizVehicleIdParamList);
+
+    /**
+     * 获取车辆信息详情
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     */
+    BizVehicle detail(BizVehicleIdParam bizVehicleIdParam);
+
+    /**
+     * 获取车辆信息详情
+     *
+     * @author fanzherong
+     * @date  2025/04/08 09:26
+     **/
+    BizVehicle queryEntity(String id);
+}

+ 191 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/bizvehicle/service/impl/BizVehicleServiceImpl.java

@@ -0,0 +1,191 @@
+/*
+ * 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.bizvehicle.service.impl;
+
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.PhoneUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+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.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.biz.modular.bizvehicle.entity.BizVehicle;
+import vip.xiaonuo.biz.modular.bizvehicle.mapper.BizVehicleMapper;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehicleAddParam;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehicleEditParam;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehicleIdParam;
+import vip.xiaonuo.biz.modular.bizvehicle.param.BizVehiclePageParam;
+import vip.xiaonuo.biz.modular.bizvehicle.service.BizVehicleService;
+import vip.xiaonuo.common.util.CommonCryptogramUtil;
+
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * 车辆信息Service接口实现类
+ *
+ * @author fanzherong
+ * @date  2025/04/08 09:26
+ **/
+@Service
+public class BizVehicleServiceImpl extends ServiceImpl<BizVehicleMapper, BizVehicle> implements BizVehicleService {
+
+    @Override
+    public Page<BizVehicle> page(BizVehiclePageParam bizVehiclePageParam) {
+        QueryWrapper<BizVehicle> queryWrapper = new QueryWrapper<BizVehicle>().checkSqlInjection();
+        if(ObjectUtil.isNotEmpty(bizVehiclePageParam.getLicensePlate())){
+            queryWrapper.like("bc.license_plate",bizVehiclePageParam.getLicensePlate());
+        }
+        if(ObjectUtil.isNotEmpty(bizVehiclePageParam.getDriverName())){
+            queryWrapper.like("bc.driver_name",bizVehiclePageParam.getDriverName());
+        }
+        if(ObjectUtil.isNotEmpty(bizVehiclePageParam.getDriverMobile())){
+            queryWrapper.like("bc.driver_mobile",bizVehiclePageParam.getDriverMobile());
+        }
+        // 校验数据范围
+        List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
+        if(ObjectUtil.isEmpty(loginUserDataScope)) {
+            queryWrapper.eq("bc.create_user", StpUtil.getLoginIdAsString());
+        }
+        queryWrapper.eq("bc.delete_flag","NOT_DELETE");
+        queryWrapper.orderByDesc("bc.create_time");
+        return this.getBaseMapper().getPage(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(BizVehicleAddParam bizVehicleAddParam) {
+        checkParam(bizVehicleAddParam);
+        BizVehicle bizVehicle = BeanUtil.toBean(bizVehicleAddParam, BizVehicle.class);
+        if(ObjectUtil.isEmpty(bizVehicleAddParam.getDriverName())){
+            bizVehicle.setDriverName(StpLoginUserUtil.getLoginUser().getName());
+        }
+        if(ObjectUtil.isEmpty(bizVehicleAddParam.getDriverMobile())){
+            bizVehicle.setDriverMobile(CommonCryptogramUtil.doSm4CbcDecrypt(StpLoginUserUtil.getLoginUser().getPhone()));
+        }
+        this.save(bizVehicle);
+    }
+
+    public void checkParam(BizVehicleAddParam bizVehicleAddParam){
+        if(ObjectUtil.isNotEmpty(bizVehicleAddParam.getLicensePlate())){
+            bizVehicleAddParam.setLicensePlate(bizVehicleAddParam.getLicensePlate().toUpperCase().trim());
+            //校验车牌号
+            if(!isCarNumber(bizVehicleAddParam.getLicensePlate())){
+                throw new CommonException("车牌号:{}格式错误",bizVehicleAddParam.getLicensePlate());
+            }
+            //判断车牌号是否添加过
+            long count = this.count(new QueryWrapper<BizVehicle>().lambda().
+                    eq(BizVehicle::getLicensePlate, bizVehicleAddParam.getLicensePlate()).
+                    eq(BizVehicle::getStatus, "1"));
+            if(count>0){
+                throw new CommonException("车牌号:{}已经添加过!",bizVehicleAddParam.getLicensePlate());
+            }
+        }
+        //校验司机电话
+        if(ObjectUtil.isNotEmpty(bizVehicleAddParam.getDriverMobile())){
+            if(!PhoneUtil.isMobile(bizVehicleAddParam.getDriverMobile())) {
+                throw new CommonException("手机号码:{}格式错误", bizVehicleAddParam.getDriverMobile());
+            }
+        }
+    }
+
+    public void checkParam(BizVehicleEditParam bizVehicleEditParam,BizVehicle bizVehicle){
+        if(ObjectUtil.isNotEmpty(bizVehicleEditParam.getLicensePlate())){
+            bizVehicleEditParam.setLicensePlate(bizVehicleEditParam.getLicensePlate().toUpperCase().trim());
+            //判断车牌号是否添加过
+            if(!StringUtils.equals(bizVehicle.getLicensePlate(),bizVehicleEditParam.getLicensePlate())){
+                //校验车牌号
+                if(!isCarNumber(bizVehicleEditParam.getLicensePlate())){
+                    throw new CommonException("车牌号:{}格式错误",bizVehicleEditParam.getLicensePlate());
+                }
+                long count = this.count(new QueryWrapper<BizVehicle>().lambda().
+                        eq(BizVehicle::getLicensePlate, bizVehicleEditParam.getLicensePlate()).
+                        eq(BizVehicle::getStatus, "1"));
+                if(count>0){
+                    throw new CommonException("车牌号:{}已经添加过!",bizVehicleEditParam.getLicensePlate());
+                }
+            }
+        }
+        //校验司机电话
+        if(ObjectUtil.isNotEmpty(bizVehicleEditParam.getDriverMobile())){
+            if(!PhoneUtil.isMobile(bizVehicleEditParam.getDriverMobile())) {
+                throw new CommonException("手机号码:{}格式错误", bizVehicleEditParam.getDriverMobile());
+            }
+        }
+        //启用时校验修改状态
+        if(StringUtils.equals(bizVehicleEditParam.getStatus(),"1")){
+            long count = this.count(new QueryWrapper<BizVehicle>().lambda().
+                    eq(BizVehicle::getLicensePlate, bizVehicleEditParam.getLicensePlate()).
+                    eq(BizVehicle::getStatus, "1"));
+            if(count>0){
+                throw new CommonException("车牌号:{}已经添加过!",bizVehicleEditParam.getLicensePlate());
+            }
+        }
+
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(BizVehicleEditParam bizVehicleEditParam) {
+        BizVehicle bizVehicle = this.queryEntity(bizVehicleEditParam.getId());
+        checkParam(bizVehicleEditParam,bizVehicle);
+        BeanUtil.copyProperties(bizVehicleEditParam, bizVehicle);
+        if(ObjectUtil.isEmpty(bizVehicleEditParam.getDriverName())){
+            bizVehicle.setDriverName(StpLoginUserUtil.getLoginUser().getName());
+        }
+        if(ObjectUtil.isEmpty(bizVehicleEditParam.getDriverMobile())){
+            bizVehicle.setDriverMobile(CommonCryptogramUtil.doSm4CbcDecrypt(StpLoginUserUtil.getLoginUser().getPhone()));
+        }
+        this.updateById(bizVehicle);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<BizVehicleIdParam> bizVehicleIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(bizVehicleIdParamList, BizVehicleIdParam::getId));
+    }
+
+    @Override
+    public BizVehicle detail(BizVehicleIdParam bizVehicleIdParam) {
+        return this.queryEntity(bizVehicleIdParam.getId());
+    }
+
+    @Override
+    public BizVehicle queryEntity(String id) {
+        BizVehicle bizVehicle = this.getById(id);
+        if(ObjectUtil.isEmpty(bizVehicle)) {
+            throw new CommonException("车辆信息不存在,id值为:{}", id);
+        }
+        return bizVehicle;
+    }
+
+    /**
+     * 车牌号校验
+     * @param carNumber
+     * @return
+     */
+    public boolean isCarNumber(String carNumber){
+        String carNumberPattern = "([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼]{1}(([A-HJ-Z]{1}[A-HJ-NP-Z0-9]{5})|([A-HJ-Z]{1}(([DF]{1}[A-HJ-NP-Z0-9]{1}[0-9]{4})|([0-9]{5}[DF]{1})))|([A-HJ-Z]{1}[A-D0-9]{1}[0-9]{3}警)))|([0-9]{6}使)|((([沪粤川云桂鄂陕蒙藏黑辽渝]{1}A)|鲁B|闽D|蒙E|蒙H)[0-9]{4}领)|(WJ[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼·•]{1}[0-9]{4}[TDSHBXJ0-9]{1})|([VKHBSLJNGCE]{1}[A-DJ-PR-TVY]{1}[0-9]{5})";
+        return Pattern.matches(carNumberPattern, carNumber);
+    }
+}

+ 1 - 0
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/record/service/impl/BizRecordServiceImpl.java

@@ -555,6 +555,7 @@ public class BizRecordServiceImpl extends ServiceImpl<BizRecordMapper, BizRecord
         if(ObjectUtil.isNotNull(appointmentRecord)){
             appointmentRecord.setStatus("7");
             bizAppointmentRecordService.updateById(appointmentRecord);
+
         }
     }