Merge pull request '预约模块修改' (#69) from sjy-two into master
All checks were successful
continuous-integration/drone/push Build is passing

Reviewed-on: #69
This commit is contained in:
root 2024-10-24 09:49:48 +08:00
commit f67342d318
60 changed files with 2320 additions and 556 deletions

View File

@ -0,0 +1,56 @@
import request from '@/config/axios'
// 预约配置 VO
export interface ConfigurationVO {
id: number // id
projectdayId: number
serviceTime: string
technicianId: number // 套餐id
technicianName: string
timeQuantum: string // 时间段
availableNumber: number // 可预约数
residueNumber: number // 剩余预约数
status: number // 状态
}
// 预约配置 API
export const ConfigurationApi = {
// 查询预约配置分页
getConfigurationPage: async (params: any) => {
return await request.get({ url: `/subscribe/configuration/page`, params })
},
// 查询预约配置详情
getConfiguration: async (id: number) => {
return await request.get({ url: `/subscribe/configuration/get?id=` + id })
},
// 新增预约配置
createConfiguration: async (data: ConfigurationVO) => {
return await request.post({ url: `/subscribe/configuration/create`, data })
},
// 修改预约配置
updateConfiguration: async (data: ConfigurationVO) => {
return await request.put({ url: `/subscribe/configuration/update`, data })
},
// 删除预约配置
deleteConfiguration: async (id: number) => {
return await request.delete({ url: `/subscribe/configuration/delete?id=` + id })
},
// 导出预约配置 Excel
exportConfiguration: async (params) => {
return await request.download({ url: `/subscribe/configuration/export-excel`, params })
},
// addUpdConfiguration: async (projectdayId: number,technicianId: number,serviceTimes: string) => {
// return await request.post({ url: `/subscribe/configuration/addUpdConfiguration?projectdayId=`+projectdayId+`&technicianId=`+technicianId+`&serviceTimes=`+serviceTimes })
// },
addUpdConfiguration: async (data: ConfigurationVO) => {
return await request.post({ url: `/subscribe/configuration/addUpdConfiguration`, data })
},
}

View File

@ -4,6 +4,7 @@ import request from '@/config/axios'
export interface ProjectVO {
id: number // ID
brandId: number // 所属门店
yuyueNum: number //可预约数量
name: string // 项目名称
pictrue: string // 项目图片
content: string // 项目简介
@ -48,4 +49,15 @@ export const ProjectApi = {
return await request.get({ url: `/subscribe/project/getProjectName` })
},
getProjectDay: async (id: number) => {
return await request.get({ url: `/subscribe/project/getProjectDay?id=` + id })
},
getConfiguration: async (id: number) => {
return await request.get({ url: `/subscribe/configuration/getConfiguration?id=` + id })
},
}

View File

@ -5,13 +5,21 @@ export interface LitemallReservationVO {
id: number // id
userId: number // 用户id
nickname: string
type: number // 预约类型
// type: number // 预约类型
brandId: string // 门店id
brandName: string
technicianId: string // 人员id
name: string
phone: string
brandName: string
porjectName: string
technicianName: string
reAddTime: Date // 预约时间
hsstr: string // 预约时间段
days: string
timeQuantum: string
// reAddTime: Date // 预约时间
// hsstr: string // 预约时间段
reStatus: number // 预约状态
status: number // 审核状态
remark: string // 备注

View File

@ -2,7 +2,8 @@ import request from '@/config/axios'
// 人员管理 VO
export interface LitemallTechnicianVO {
id: number // id
id: number // idd
name: string
projectId: number // 项目id
brandName: string //项目名称
photo: string // 照片

View File

@ -126,6 +126,9 @@ export enum DICT_TYPE {
//预约:项目
SUBSCRIBE_PROJECT_STATUS = 'subscribe_project_status',
//预约:配置
SUBSCRIBE_CONFIGURATION_STATUS = 'subscribe_configuration_status',
//预约:人员管理
STALL_SEX = 'stall_sex',

View File

@ -1,292 +1,209 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<!-- <el-form-item label="门店管理员id" prop="userId">-->
<!-- <el-input-->
<!-- v-model="queryParams.userId"-->
<!-- placeholder="请输入门店管理员id"-->
<!-- clearable-->
<!-- @keyup.enter="handleQuery"-->
<!-- class="!w-240px"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="联系电话" prop="phone">
<el-input
v-model="queryParams.phone"
placeholder="请输入联系电话"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="门店名称" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入门店名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="门店邮箱" prop="mail">
<el-input
v-model="queryParams.mail"
placeholder="请输入门店邮箱"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="门店地址" prop="address">
<el-input
v-model="queryParams.address"
placeholder="请输入门店地址"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="门店状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择门店状态"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.BRAND_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<!-- <el-form-item label="权重" prop="weight">-->
<!-- <el-input-->
<!-- v-model="queryParams.weight"-->
<!-- placeholder="请输入权重"-->
<!-- clearable-->
<!-- @keyup.enter="handleQuery"-->
<!-- class="!w-240px"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['subscribe:litemall-brand:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['subscribe:litemall-brand:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<!-- <el-table-column label="门店管理员" align="center" prop="userId" />-->
<el-table-column label="联系电话" align="center" prop="phone" />
<el-table-column label="门店名称" align="center" prop="name" />
<el-table-column label="门店邮箱" align="center" prop="mail" />
<el-table-column label="门店图片" align="center" prop="picUrl" >
<template #default="{ row }">
<div class="flex">
<el-image
fit="cover"
:src="row.picUrl"
class="flex-none w-50px h-50px"
@click="imagePreview(row.picUrl)"
/>
</div>
</template>
</el-table-column>
<el-table-column label="门店地址" align="center" prop="address" />
<el-table-column label="门店简介" align="center" prop="depict" >
<template #default="scope">
<div v-html="scope.row.depict"></div>
</template>
</el-table-column>
<el-table-column label="门店状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.BRAND_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<!-- <el-table-column label="权重" align="center" prop="weight" />-->
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" fixed="right" width="110">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['subscribe:litemall-brand:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['subscribe:litemall-brand:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<el-form-item label="联系电话" prop="phone">
<el-input v-model="queryParams.phone" placeholder="请输入联系电话" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="门店名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入门店名称" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="门店邮箱" prop="mail">
<el-input v-model="queryParams.mail" placeholder="请输入门店邮箱" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="门店地址" prop="address">
<el-input v-model="queryParams.address" placeholder="请输入门店地址" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="门店状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择门店状态" clearable class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.BRAND_STATUS)" :key="dict.value"
:label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
start-placeholder="开始日期" end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
<el-button type="primary" plain @click="openForm('create')"
v-hasPermi="['subscribe:litemall-brand:create']">
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button type="success" plain @click="handleExport" :loading="exportLoading"
v-hasPermi="['subscribe:litemall-brand:export']">
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<LitemallBrandForm ref="formRef" @success="getList" />
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<!-- <el-table-column label="门店管理员" align="center" prop="userId" />-->
<el-table-column label="门店图片" align="center" prop="picUrl">
<template #default="{ row }">
<div class="flex">
<el-image fit="cover" :src="row.picUrl" class="flex-none w-50px h-50px"
@click="imagePreview(row.picUrl)" />
</div>
</template>
</el-table-column>
<el-table-column label="门店名称" align="center" prop="name" />
<el-table-column label="联系电话" align="center" prop="phone" />
<el-table-column label="门店邮箱" align="center" prop="mail" />
<el-table-column label="门店地址" align="center" prop="address" />
<el-table-column label="门店简介" align="center" prop="depict">
<template #default="scope">
<div v-html="scope.row.depict"></div>
</template>
</el-table-column>
<el-table-column label="门店状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.BRAND_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<!-- <el-table-column label="权重" align="center" prop="weight" />-->
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="操作" align="center" fixed="right" width="110">
<template #default="scope">
<el-button link type="primary" @click="openForm('update', scope.row.id)"
v-hasPermi="['subscribe:litemall-brand:update']">
编辑
</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)"
v-hasPermi="['subscribe:litemall-brand:delete']">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize"
@pagination="getList" />
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<LitemallBrandForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { LitemallBrandApi, LitemallBrandVO } from '@/api/subscribe/brand'
import LitemallBrandForm from './LitemallBrandForm.vue'
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { LitemallBrandApi, LitemallBrandVO } from '@/api/subscribe/brand'
import LitemallBrandForm from './LitemallBrandForm.vue'
/** 门店管理 列表 */
defineOptions({ name: 'LitemallBrand' })
/** 门店管理 列表 */
defineOptions({ name: 'LitemallBrand' })
const message = useMessage() //
const { t } = useI18n() //
import {createImageViewer} from "@/components/ImageViewer";
const message = useMessage() //
const { t } = useI18n() //
// import {createImageViewer} from "@/components/ImageViewer";
const loading = ref(true) //
const list = ref<LitemallBrandVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
userId: undefined,
phone: undefined,
name: undefined,
mail: undefined,
picUrl: undefined,
address: undefined,
depict: undefined,
status: undefined,
weight: undefined,
remark: undefined,
createTime: []
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
const loading = ref(true) //
const list = ref<LitemallBrandVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
userId: undefined,
phone: undefined,
name: undefined,
mail: undefined,
picUrl: undefined,
address: undefined,
depict: undefined,
status: undefined,
weight: undefined,
remark: undefined,
createTime: []
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await LitemallBrandApi.getLitemallBrandPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await LitemallBrandApi.getLitemallBrandPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
const imagePreview = (imgUrl: string) => {
createImageViewer({
urlList: [imgUrl]
})
}
const imagePreview = (imgUrl : string) => {
createImageViewer({
urlList: [imgUrl]
})
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type : string, id ?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await LitemallBrandApi.deleteLitemallBrand(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 删除按钮操作 */
const handleDelete = async (id : number) => {
try {
//
await message.delConfirm()
//
await LitemallBrandApi.deleteLitemallBrand(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch { }
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await LitemallBrandApi.exportLitemallBrand(queryParams)
download.excel(data, '门店管理.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await LitemallBrandApi.exportLitemallBrand(queryParams)
download.excel(data, '门店管理.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

View File

@ -0,0 +1,121 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="套餐id" prop="technicianId">
<el-input v-model="formData.technicianId" placeholder="请输入套餐id" />
</el-form-item>
<el-form-item label="时间段" prop="timeQuantum">
<el-input v-model="formData.timeQuantum" placeholder="请输入时间段" />
</el-form-item>
<el-form-item label="可预约数" prop="availableNumber">
<el-input v-model="formData.availableNumber" placeholder="请输入可预约数" />
</el-form-item>
<el-form-item label="剩余预约数" prop="residueNumber">
<el-input v-model="formData.residueNumber" placeholder="请输入剩余预约数" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="formData.status" placeholder="请选择状态">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.SUBSCRIBE_CONFIGURATION_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { ConfigurationApi, ConfigurationVO } from '@/api/subscribe/configuration'
/** 预约配置 表单 */
defineOptions({ name: 'ConfigurationForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
technicianId: undefined,
timeQuantum: undefined,
availableNumber: undefined,
residueNumber: undefined,
status: undefined,
})
const formRules = reactive({
technicianId: [{ required: true, message: '套餐id不能为空', trigger: 'blur' }],
timeQuantum: [{ required: true, message: '时间段不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await ConfigurationApi.getConfiguration(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
await formRef.value.validate()
//
formLoading.value = true
try {
const data = formData.value as unknown as ConfigurationVO
if (formType.value === 'create') {
await ConfigurationApi.createConfiguration(data)
message.success(t('common.createSuccess'))
} else {
await ConfigurationApi.updateConfiguration(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
technicianId: undefined,
timeQuantum: undefined,
availableNumber: undefined,
residueNumber: undefined,
status: undefined,
}
formRef.value?.resetFields()
}
</script>

View File

@ -0,0 +1,242 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="套餐id" prop="technicianId">
<el-input
v-model="queryParams.technicianId"
placeholder="请输入套餐id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="时间段" prop="timeQuantum">
<el-input
v-model="queryParams.timeQuantum"
placeholder="请输入时间段"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="可预约数" prop="availableNumber">
<el-input
v-model="queryParams.availableNumber"
placeholder="请输入可预约数"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="剩余预约数" prop="residueNumber">
<el-input
v-model="queryParams.residueNumber"
placeholder="请输入剩余预约数"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择状态"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.SUBSCRIBE_CONFIGURATION_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['subscribe:configuration:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['subscribe:configuration:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="id" align="center" prop="id" />
<el-table-column label="套餐名称" align="center" prop="technicianName" />
<el-table-column label="时间段" align="center" prop="timeQuantum" />
<el-table-column label="可预约数" align="center" prop="availableNumber" />
<el-table-column label="剩余预约数" align="center" prop="residueNumber" />
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.SUBSCRIBE_CONFIGURATION_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['subscribe:configuration:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['subscribe:configuration:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<ConfigurationForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { ConfigurationApi, ConfigurationVO } from '@/api/subscribe/configuration'
import ConfigurationForm from './ConfigurationForm.vue'
/** 预约配置 列表 */
defineOptions({ name: 'Configuration' })
const message = useMessage() //
const { t } = useI18n() //
const loading = ref(true) //
const list = ref<ConfigurationVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
technicianId: undefined,
timeQuantum: undefined,
availableNumber: undefined,
residueNumber: undefined,
status: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
const data = await ConfigurationApi.getConfigurationPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
/** 添加/修改操作 */
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await ConfigurationApi.deleteConfiguration(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await ConfigurationApi.exportConfiguration(queryParams)
download.excel(data, '预约配置.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

View File

@ -34,7 +34,6 @@
</el-select>
</el-form-item>
<el-form-item label="可预约日期" prop="timeInterval">
<!-- <el-input v-model="formData.timeInterval" placeholder="请输入可预约日期" /> -->
<el-date-picker
v-model="formData.timeInterval"
type="daterange"
@ -96,7 +95,7 @@ const open = async (type: string, id?: number) => {
try {
formData.value = await ProjectApi.getProject(id)
formData.value.timeInterval = JSON.parse(formData.value.timeInterval)
console.log('11111111111',formData.value)
} finally {
formLoading.value = false
}
@ -107,6 +106,7 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
console.log('11111111111',formData.value.timeInterval)
formData.value.timeInterval = JSON.stringify(formData.value.timeInterval);
//
await formRef.value.validate()

View File

@ -49,10 +49,10 @@
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="所属门店" align="center" prop="brandName" />
<el-table-column label="项目名称" align="center" prop="name" />
<!-- <el-table-column label="项目图片" align="center" prop="pictrue" /> -->
<el-table-column label="片" align="center" prop="pictrue">
<el-table-column label="项目图片" align="center" prop="pictrue">
<template #default="{ row }">
<div class="flex" style="display: flex; align-items: center;">
<el-image fit="cover" :src="row.pictrue" class="flex-none w-50px h-50px"
@ -72,6 +72,7 @@
</template>
</el-table-column>
<el-table-column label="可预约日期" align="center" prop="timeInterval" />
<el-table-column label="所属门店" align="center" prop="brandName" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="操作" align="center">
<template #default="scope">

View File

@ -8,16 +8,7 @@
:inline="true"
label-width="68px"
>
<!-- <el-form-item label="用户id" prop="userId">-->
<!-- <el-input-->
<!-- v-model="queryParams.userId"-->
<!-- placeholder="请输入用户id"-->
<!-- clearable-->
<!-- @keyup.enter="handleQuery"-->
<!-- class="!w-240px"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="预约类型" prop="type">
<!-- <el-form-item label="预约类型" prop="type">
<el-select
v-model="queryParams.type"
placeholder="请选择预约类型"
@ -31,7 +22,7 @@
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form-item> -->
<!-- <el-form-item label="门店id" prop="brandId">-->
<!-- <el-input-->
<!-- v-model="queryParams.brandId"-->
@ -85,7 +76,7 @@
/>
</el-select>
</el-form-item>
<el-form-item label="审核状态" prop="status">
<!-- <el-form-item label="审核状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择审核状态"
@ -99,7 +90,7 @@
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
@ -114,14 +105,14 @@
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button
<!-- <el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['subscribe:litemall-reservation:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
</el-button> -->
<el-button
type="success"
plain
@ -139,32 +130,34 @@
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<el-table-column label="用户" align="center" prop="nickname" />
<el-table-column label="预约类型" align="center" prop="type">
<template #default="scope">
<dict-tag :type="DICT_TYPE.TYPE" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="门店" align="center" prop="brandName" />
<el-table-column label="预约人员" align="center" prop="technicianName" />
<el-table-column
<!-- <el-table-column label="用户" align="center" prop="nickname" /> -->
<el-table-column label="姓名" align="center" prop="name" />
<el-table-column label="手机号码" align="center" prop="phone" />
<el-table-column label="门店" align="center" prop="brandName" />
<el-table-column label="项目" align="center" prop="projectName" />
<el-table-column label="套餐" align="center" prop="technicianName" />
<el-table-column label="日期" align="center" prop="days" />
<el-table-column label="时间段" align="center" prop="timeQuantum" />
<!-- <el-table-column label="预约人员" align="center" prop="technicianName" /> -->
<!-- <el-table-column
label="预约时间"
align="center"
prop="reAddTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="预约时间段" align="center" prop="hsstr" />
/> -->
<!-- <el-table-column label="预约时间段" align="center" prop="hsstr" /> -->
<el-table-column label="预约状态" align="center" prop="reStatus">
<template #default="scope">
<dict-tag :type="DICT_TYPE.RE_STATUS" :value="scope.row.reStatus" />
</template>
</el-table-column>
<el-table-column label="审核状态" align="center" prop="status">
<!-- <el-table-column label="审核状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.STATUS" :value="scope.row.status" />
</template>
</el-table-column>
</el-table-column> -->
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column
label="创建时间"
@ -175,14 +168,14 @@
/>
<el-table-column label="操作" align="center" fixed="right" width="110">
<template #default="scope">
<el-button
<!-- <el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['subscribe:litemall-reservation:update']"
>
编辑
</el-button>
</el-button> -->
<el-button
link
type="danger"
@ -227,13 +220,19 @@ const queryParams = reactive({
pageNo: 1,
pageSize: 10,
userId: undefined,
type: undefined,
brandId: undefined,
projectId: undefined,
projectdayId: undefined,
configurationId: undefined,
name: undefined,
phone: undefined,
brandName: undefined,
porjectName: undefined,
days: undefined,
timeQuantum: undefined,
technicianName: undefined,
technicianId: undefined,
reAddTime: [],
hsstr: undefined,
reStatus: undefined,
status: undefined,
remark: undefined,
createTime: []
})

View File

@ -1,37 +1,22 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="800px">
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1000px">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入套餐名称" />
</el-form-item>
<el-form-item label="项目" prop="projectId">
<el-select v-model="formData.projectId" placeholder="请选择项目" clearable class="!w-240px">
<el-select v-model="formData.projectId" placeholder="请选择项目" clearable class="!w-240px" >
<el-option v-for="organizationNameOptions in option" :key="organizationNameOptions.id"
:label="organizationNameOptions.name" :value="organizationNameOptions.id" />
</el-select>
</el-form-item>
<el-form-item label="照片" prop="photo">
<UploadImg v-model="formData.photo" />
</el-form-item>
<el-form-item label="服务时间段" prop="serviceTime">
<div v-for="(item, index) in timeRanges" :key="index" class="time-range">
<div class="left">
<el-time-select v-model="item.start" :max-time="item.end" class="mr-4" placeholder="开始时间"
start="07:00" step="00:05" end="23:30" />
</div>
<div class="center">
-
</div>
<div class="right">
<el-time-select v-model="item.end" :min-time="item.start" placeholder="结束时间" start="07:00"
step="00:05" end="23:30" />
</div>
<el-button @click="removeTime(index)" type="danger" size="mini">移除</el-button>
</div>
<el-button @click="addTime" type="primary" size="small">添加时间段</el-button>
</el-form-item>
<el-form-item label="服务范围" prop="serviceScope">
<el-input v-model="formData.serviceScope" placeholder="请输入服务范围" />
</el-form-item>
@ -59,6 +44,7 @@
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { LitemallTechnicianApi, LitemallTechnicianVO } from '@/api/subscribe/technician'
import { ProjectApi, ProjectVO } from '@/api/subscribe/project'
/** 人员管理 表单 */
defineOptions({ name: 'LitemallTechnicianForm' })
@ -71,6 +57,7 @@
const formType = ref('') // create - update -
const formData = ref({
id: undefined,
name: undefined,
projectId: undefined,
photo: undefined,
serviceTime: '',
@ -82,52 +69,42 @@
})
const formRules = reactive({
// techSn: [{ required: true, message: '', trigger: 'blur' }],
type: [{ required: true, message: '人员类型不能为空', trigger: 'change' }],
technicianName: [{ required: true, message: '人员名称不能为空', trigger: 'blur' }],
projectId: [{ required: true, message: '项目名称不能为空', trigger: 'change' }],
name: [{ required: true, message: '套餐名称不能为空', trigger: 'blur' }],
brandId: [{ required: true, message: '门店不能为空', trigger: 'blur' }],
// status: [{ required: true, message: '', trigger: 'change' }]
status: [{ required: true, message: '状态不能为空', trigger: 'change' }]
})
const formRef = ref() // Ref
const timeRanges = ref([{ start: '', end: '' }]);
//
const getProjectName = async () => {
try {
option.value = await ProjectApi.getProjectName()
} finally {
const addTime = () => {
timeRanges.value.push({ start: '', end: '' });
};
const removeTime = (index : number) => {
if (timeRanges.value.length > 1) {
timeRanges.value.splice(index, 1);
}
};
//
const getProjectName = async () => {
try {
option.value = await ProjectApi.getProjectName()
} finally {
}
}
}
/** 打开弹窗 */
const open = async (type : string, id ?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
timeRanges.value = ([]) //timeRanges
timeRanges.value.push({ start: '', end: '' }); //timeRaanges{ start: '', end: '' }
// timeRanges.value = ([]) //timeRanges
// timeRanges.value.push({ start: '', end: '', subscribeNum: '' }); //timeRaanges{ start: '', end: '' }
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
timeRanges.value = ([]); //
// timeRanges.value = ([]); //
formData.value = await LitemallTechnicianApi.getLitemallTechnician(id)
const timeRange = JSON.parse(formData.value.serviceTime)
for (var i = 0; i < timeRange.length; i++) {
timeRanges.value.push(timeRange[i]); //push
}
// const timeRange = JSON.parse(formData.value.serviceTime)
// for (var i = 0; i < timeRange.length; i++) {
// timeRanges.value.push(timeRange[i]); //push
// }
} finally {
formLoading.value = false
}
@ -145,7 +122,7 @@
//
formLoading.value = true
try {
formData.value.serviceTime = JSON.stringify(timeRanges.value);
// formData.value.serviceTime = JSON.stringify(timeRanges.value);
const data = formData.value as unknown as LitemallTechnicianVO
if (formType.value === 'create') {
await LitemallTechnicianApi.createLitemallTechnician(data)
@ -167,6 +144,7 @@
const resetForm = () => {
formData.value = {
id: undefined,
name: undefined,
projectId: undefined,
photo: undefined,
serviceTime: '',
@ -207,4 +185,4 @@
width: 150px;
margin-right: 20px;
}
</style>
</style>

View File

@ -2,30 +2,12 @@
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<!-- <el-form-item label="人员编号" prop="techSn">
<el-input v-model="queryParams.techSn" placeholder="请输入人员编号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="人员类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择人员类型" clearable class="!w-240px">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TYPES)" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="人员名称" prop="technicianName">
<el-input v-model="queryParams.technicianName" placeholder="请输入人员名称" clearable
@keyup.enter="handleQuery" class="!w-240px" />
</el-form-item> -->
<el-form-item label="所属门店" prop="brandId">
<el-select v-model="queryParams.brandId" placeholder="请选择门店" clearable class="!w-240px">
<el-option v-for="organizationNameOptions in option" :key="organizationNameOptions.id"
:label="organizationNameOptions.name" :value="organizationNameOptions.id" />
</el-select>
</el-form-item>
<!-- <el-form-item label="手机号" prop="phone">
<el-input v-model="queryParams.phone" placeholder="请输入手机号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item> -->
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
@ -62,19 +44,7 @@
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="ID" align="center" prop="id" />
<!-- <el-table-column label="人员编号" align="center" prop="techSn" />
<el-table-column label="人员类型" align="center" prop="type">
<template #default="scope">
<dict-tag :type="DICT_TYPE.TYPES" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="人员名称" align="center" prop="technicianName" /> -->
<el-table-column label="归属项目" align="center" prop="brandName" />
<!-- <el-table-column label="性别" align="center" prop="sex">
<template #default="scope">
<dict-tag :type="DICT_TYPE.SEX" :value="scope.row.sex" />
</template>
</el-table-column> -->
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="图片" align="center" prop="photo">
<template #default="{ row }">
<div class="flex">
@ -83,9 +53,9 @@
</div>
</template>
</el-table-column>
<el-table-column label="服务时间段" align="center" prop="serviceTimeArray" width="200" />
<!-- <el-table-column label="服务时间段" align="center" prop="serviceTimeArray" width="200" /> -->
<el-table-column label="服务范围" align="center" prop="serviceScope" />
<el-table-column label="约满标记" align="center" prop="ym" />
<!-- <el-table-column label="约满标记" align="center" prop="ym" /> -->
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.TECHNICIAN_STATUS" :value="scope.row.status" />
@ -96,10 +66,14 @@
<div v-html="scope.row.content"></div>
</template>
</el-table-column>
<el-table-column label="归属项目" align="center" prop="brandName" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="操作" align="center" fixed="right" width="110">
<el-table-column label="操作" align="center" fixed="right" width="200">
<template #default="scope">
<el-button @click="openday(scope.row.projectId,scope.row.id)">
配置
</el-button>
<el-button link type="primary" @click="openForm('update', scope.row.id)"
v-hasPermi="['subscribe:litemall-technician:update']">
编辑
@ -118,6 +92,42 @@
<!-- 表单弹窗添加/修改 -->
<LitemallTechnicianForm ref="formRef" @success="getList" />
<Dialog :title="dialogTitle" v-model="dialogVisible" width="800px">
<el-form label-width="100px" v-loading="formLoading">
<el-form-item label="可预约日期">
<el-select v-model="formData.projectdayId" placeholder="请选择日期" size="large" clearable class="!w-240px" @change="handleProjectChange(formData.projectdayId)">
<el-option v-for="item in optionDays" :key="item.id" :label="item.days" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="服务时间段" prop="serviceTime">
<div v-for="(item, index) in timeRanges" :key="index" class="time-range">
<div class="left">
<el-time-select v-model="item.start" :max-time="item.end" class="mr-4" placeholder="开始时间"
start="07:00" step="00:05" end="23:30" />
</div>
<div class="center">
-
</div>
<div class="right">
<el-time-select v-model="item.end" :min-time="item.start" placeholder="结束时间" start="07:00"
step="00:05" end="23:30" />
</div>
<span>可预约数 </span>
<input v-model="item.subscribeNum" style="width: 40px;margin-right: 20px;" />
<el-button @click="removeTime(index)" type="danger" size="mini">移除</el-button>
</div>
<el-button @click="addTime" type="primary" size="small">添加时间段</el-button>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
</template>
<script setup lang="ts">
@ -126,11 +136,14 @@
import download from '@/utils/download'
import { LitemallTechnicianApi, LitemallTechnicianVO } from '@/api/subscribe/technician'
import LitemallTechnicianForm from './LitemallTechnicianForm.vue'
import { createImageViewer } from "@/components/ImageViewer";
import { ProjectApi, ProjectVO } from '@/api/subscribe/project'
import { ConfigurationApi, ConfigurationVO } from '@/api/subscribe/configuration'
/** 人员管理 列表 */
defineOptions({ name: 'LitemallTechnician' })
const dialogTitle = ref('') //
const message = useMessage() //
const { t } = useI18n() //
const option = ref<ProjectVO[]>([]);
@ -158,6 +171,88 @@
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
const formData = ref({
id: undefined,
serviceTimes: '',
projectdayId: undefined,
technicianId: undefined,
timeQuantum: undefined,
availableNumber: undefined,
residueNumber: undefined,
status: undefined,
})
const formLoading = ref(false) // 12
const dialogVisible = ref(false) //
const timeRanges = ref([{ id: '', start: '', end: '', subscribeNum: '' }]);
const addTime = () => {
timeRanges.value.push({ id: '', start: '', end: '', subscribeNum: '' });
};
const optionDays = ref()
const technicianDay = ref()
const serviceTimes = ref('') //
const taoCanId = ref() //id
const removeTime = (index : number) => {
if (timeRanges.value.length > 1) {
timeRanges.value.splice(index, 1);
}
};
//
const openday = async (projectId: number,id) => {
formData.value.projectdayId = undefined
timeRanges.value = ([]) //timeRanges
formData.value.technicianId = id
optionDays.value = await ProjectApi.getProjectDay(projectId)
dialogVisible.value = true
}
//
const handleProjectChange = async (id: number) => {
timeRanges.value = ([]) //timeRanges
console.log('选择的预约日期 ID:', id);
technicianDay.value = await ProjectApi.getConfiguration(id)
const timeRange = technicianDay.value
for (var i = 0; i < timeRange.length; i++) {
timeRanges.value.push(timeRange[i]); //push
}
if(timeRange.length <= 0){
timeRanges.value.push({ id: '', start: '', end: '', subscribeNum: '' }); //timeRaanges{ start: '', end: '' }
}
};
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
// await formRef.value.validate()
//
formLoading.value = true
try {
formData.value.serviceTimes = JSON.stringify(timeRanges.value);
console.log('1111111', JSON.stringify(timeRanges.value))
const data = formData.value as unknown as ConfigurationVO
await ConfigurationApi.addUpdConfiguration(data)
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 查询列表 */
const getList = async () => {
@ -203,6 +298,7 @@
const openForm = (type : string, id ?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
const handleDelete = async (id : number) => {
@ -232,6 +328,7 @@
}
}
/** 初始化 **/
onMounted(() => {
getList()

View File

@ -7,6 +7,7 @@ import java.time.LocalDateTime;
@Data
public class AppPointOrderVO {
private Long id;
private String status; //状态
private String label;
private LocalDateTime createTime; //时间

View File

@ -143,6 +143,8 @@ public class AppTradeOrderDetailRespVO {
@Schema(description = "拼团记录编号", example = "100")
private Long combinationRecordId;
private Integer usePoint;
/**
* 订单项数组
*/

View File

@ -176,6 +176,8 @@ public interface TradeOrderConvert {
TradeOrderProperties tradeOrderProperties,
DeliveryExpressDO express) {
AppTradeOrderDetailRespVO orderVO = convert3(order, orderItems);
//添加抵扣积分
order.setUsePoint(order.getUsePoint());
orderVO.setPayExpireTime(addTime(tradeOrderProperties.getPayExpireTime()));
if (StrUtil.isNotEmpty(order.getPayChannelCode())) {
orderVO.setPayChannelName(DictFrameworkUtils.getDictDataLabel(DictTypeConstants.CHANNEL_CODE, order.getPayChannelCode()));

View File

@ -17,4 +17,10 @@ public interface ErrorCodeConstants {
// ========== 预约项目 TODO 补充编号 ==========
ErrorCode PROJECT_NOT_EXISTS = new ErrorCode(11117, "预约项目不存在");
// ========== 预约配置 TODO 补充编号 ==========
ErrorCode CONFIGURATION_NOT_EXISTS = new ErrorCode(11118, "预约配置不存在");
// ========== 预约项目可预约天 TODO 补充编号 ==========
ErrorCode PROJECTDAY_NOT_EXISTS = new ErrorCode(11119, "预约项目可预约天不存在");
}

View File

@ -76,6 +76,10 @@
<version>0.0.20131108.vaadin1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
</dependencies>

View File

@ -0,0 +1,113 @@
package cn.iocoder.yudao.module.srbscribe.controller.admin.configuration;
import cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo.ConfigurationPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo.ConfigurationRespVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo.ConfigurationSaveReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.technician.vo.ServiceTimeVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.configuration.ConfigurationDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.technician.LitemallTechnicianDO;
import cn.iocoder.yudao.module.srbscribe.service.configuration.ConfigurationService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 预约配置")
@RestController
@RequestMapping("/subscribe/configuration")
@Validated
public class ConfigurationController {
@Resource
private ConfigurationService configurationService;
@PostMapping("/create")
@Operation(summary = "创建预约配置")
@PreAuthorize("@ss.hasPermission('subscribe:configuration:create')")
public CommonResult<Long> createConfiguration(@Valid @RequestBody ConfigurationSaveReqVO createReqVO) {
return success(configurationService.createConfiguration(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新预约配置")
@PreAuthorize("@ss.hasPermission('subscribe:configuration:update')")
public CommonResult<Boolean> updateConfiguration(@Valid @RequestBody ConfigurationSaveReqVO updateReqVO) {
configurationService.updateConfiguration(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除预约配置")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('subscribe:configuration:delete')")
public CommonResult<Boolean> deleteConfiguration(@RequestParam("id") Long id) {
configurationService.deleteConfiguration(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得预约配置")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('subscribe:configuration:query')")
public CommonResult<ConfigurationRespVO> getConfiguration(@RequestParam("id") Long id) {
ConfigurationDO configuration = configurationService.getConfiguration(id);
return success(BeanUtils.toBean(configuration, ConfigurationRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得预约配置分页")
@PreAuthorize("@ss.hasPermission('subscribe:configuration:query')")
public CommonResult<PageResult<ConfigurationRespVO>> getConfigurationPage(@Valid ConfigurationPageReqVO pageReqVO) {
PageResult<ConfigurationDO> pageResult = configurationService.getConfigurationPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ConfigurationRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出预约配置 Excel")
@PreAuthorize("@ss.hasPermission('subscribe:configuration:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportConfigurationExcel(@Valid ConfigurationPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ConfigurationDO> list = configurationService.getConfigurationPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "预约配置.xls", "数据", ConfigurationRespVO.class,
BeanUtils.toBean(list, ConfigurationRespVO.class));
}
//根据项目预约天id查找预约套餐时间段
@GetMapping("/getConfiguration")
public CommonResult<List<ServiceTimeVO>> getConfiguration(Integer id) {
List<ServiceTimeVO> serviceTimeVOS = configurationService.getConfiguration(id);
return success(serviceTimeVOS);
}
//添加预约套餐时间段配置
@PostMapping("/addUpdConfiguration")
public CommonResult<Long> addConfiguration(@RequestBody ConfigurationDO pageReqVO) {
Long aLong = configurationService.addUpdConfiguration(pageReqVO);
return success(aLong);
}
}

View File

@ -0,0 +1,41 @@
package cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo;
import lombok.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 预约配置分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ConfigurationPageReqVO extends PageParam {
@Schema(description = "套餐id", example = "32669")
private Long technicianId;
private String serviceTimes;
@Schema(description = "项目预约天id", example = "32669")
private Long projectdayId;
@Schema(description = "时间段")
private String timeQuantum;
@Schema(description = "可预约数")
private Integer availableNumber;
@Schema(description = "剩余预约数")
private Integer residueNumber;
@Schema(description = "状态", example = "1")
private Integer status;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,49 @@
package cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
@Schema(description = "管理后台 - 预约配置 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ConfigurationRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "25212")
@ExcelProperty("id")
private Long id;
@Schema(description = "项目预约天id",requiredMode = Schema.RequiredMode.REQUIRED, example = "32669")
private Long projectdayId;
@Schema(description = "套餐id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32669")
@ExcelProperty("套餐id")
private Long technicianId;
private String technicianName;
@Schema(description = "时间段", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("时间段")
private String timeQuantum;
@Schema(description = "可预约数")
@ExcelProperty("可预约数")
private Integer availableNumber;
@Schema(description = "剩余预约数")
@ExcelProperty("剩余预约数")
private Integer residueNumber;
@Schema(description = "状态", example = "1")
@ExcelProperty(value = "状态", converter = DictConvert.class)
@DictFormat("subscribe_configuration_status") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中
private Integer status;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,36 @@
package cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 预约配置新增/修改 Request VO")
@Data
public class ConfigurationSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "25212")
private Long id;
@Schema(description = "项目预约天id", example = "32669")
@NotNull(message = "项目预约天id不能为空")
private Long projectdayId;
@Schema(description = "套餐id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32669")
@NotNull(message = "套餐id不能为空")
private Long technicianId;
@Schema(description = "时间段", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "时间段不能为空")
private String timeQuantum;
@Schema(description = "可预约数")
private Integer availableNumber;
@Schema(description = "剩余预约数")
private Integer residueNumber;
@Schema(description = "状态", example = "1")
private Integer status;
}

View File

@ -3,7 +3,9 @@ package cn.iocoder.yudao.module.srbscribe.controller.admin.project;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.ProjectPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.ProjectRespVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.ProjectSaveReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.SelectDataVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.project.ProjectDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday.ProjectdayDO;
import cn.iocoder.yudao.module.srbscribe.service.project.ProjectService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -100,5 +102,12 @@ public class ProjectController {
return success(projectName);
}
//根据id获取项目天数集合
@GetMapping("/getProjectDay")
public CommonResult<List<ProjectdayDO>> getProjectList(Integer id){
List<ProjectdayDO> projectDate = projectService.getProjectDay(id);
return success(projectDate);
}
}

View File

@ -0,0 +1,11 @@
package cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo;
import lombok.Data;
/**
* 项目可预约天下拉框数据
*/
@Data
public class SelectDataVO {
private String dateTime;
}

View File

@ -0,0 +1,97 @@
package cn.iocoder.yudao.module.srbscribe.controller.admin.projectday;
import cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo.ProjectdayPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo.ProjectdayRespVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo.ProjectdaySaveReqVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday.ProjectdayDO;
import cn.iocoder.yudao.module.srbscribe.service.projectday.ProjectdayService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
import java.util.*;
import java.io.IOException;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
@Tag(name = "管理后台 - 预约项目可预约天")
@RestController
@RequestMapping("/subscribe/projectday")
@Validated
public class ProjectdayController {
@Resource
private ProjectdayService projectdayService;
@PostMapping("/create")
@Operation(summary = "创建预约项目可预约天")
@PreAuthorize("@ss.hasPermission('subscribe:projectday:create')")
public CommonResult<Long> createProjectday(@Valid @RequestBody ProjectdaySaveReqVO createReqVO) {
return success(projectdayService.createProjectday(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新预约项目可预约天")
@PreAuthorize("@ss.hasPermission('subscribe:projectday:update')")
public CommonResult<Boolean> updateProjectday(@Valid @RequestBody ProjectdaySaveReqVO updateReqVO) {
projectdayService.updateProjectday(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除预约项目可预约天")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('subscribe:projectday:delete')")
public CommonResult<Boolean> deleteProjectday(@RequestParam("id") Long id) {
projectdayService.deleteProjectday(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得预约项目可预约天")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('subscribe:projectday:query')")
public CommonResult<ProjectdayRespVO> getProjectday(@RequestParam("id") Long id) {
ProjectdayDO projectday = projectdayService.getProjectday(id);
return success(BeanUtils.toBean(projectday, ProjectdayRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得预约项目可预约天分页")
@PreAuthorize("@ss.hasPermission('subscribe:projectday:query')")
public CommonResult<PageResult<ProjectdayRespVO>> getProjectdayPage(@Valid ProjectdayPageReqVO pageReqVO) {
PageResult<ProjectdayDO> pageResult = projectdayService.getProjectdayPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProjectdayRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出预约项目可预约天 Excel")
@PreAuthorize("@ss.hasPermission('subscribe:projectday:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportProjectdayExcel(@Valid ProjectdayPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ProjectdayDO> list = projectdayService.getProjectdayPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "预约项目可预约天.xls", "数据", ProjectdayRespVO.class,
BeanUtils.toBean(list, ProjectdayRespVO.class));
}
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 预约项目可预约天分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class ProjectdayPageReqVO extends PageParam {
@Schema(description = "项目id", example = "4549")
private Long projectId;
@Schema(description = "可预约天")
private String days;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 预约项目可预约天 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ProjectdayRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15955")
@ExcelProperty("id")
private Long id;
@Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4549")
@ExcelProperty("项目id")
private Long projectId;
@Schema(description = "可预约天")
@ExcelProperty("可预约天")
private String days;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 预约项目可预约天新增/修改 Request VO")
@Data
public class ProjectdaySaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "15955")
private Long id;
@Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "4549")
@NotNull(message = "项目id不能为空")
private Long projectId;
@Schema(description = "可预约天")
private String days;
}

View File

@ -18,27 +18,22 @@ public class LitemallReservationPageReqVO extends PageParam {
@Schema(description = "用户id", example = "27338")
private Long userId;
@Schema(description = "预约类型", example = "2")
private Integer type;
@Schema(description = "门店id", example = "9453")
private String brandId;
private Long brandId;
@Schema(description = "人员id", example = "2596")
private String technicianId;
@Schema(description = "项目id", example = "9453")
private Long projectId;
@Schema(description = "套餐id", example = "2596")
private Long technicianId;
@Schema(description = "预约时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] reAddTime;
@Schema(description = "预约时间段")
private String hsstr;
@Schema(description = "预约状态", example = "2")
private Integer reStatus;
@Schema(description = "审核状态", example = "2")
private Integer status;
// @Schema(description = "审核状态", example = "2")
// private Integer status;
@Schema(description = "备注", example = "随便")
private String remark;

View File

@ -19,39 +19,32 @@ public class LitemallReservationRespVO {
@ExcelProperty("用户id")
private Long userId;
@Schema(description = "预约类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "预约类型", converter = DictConvert.class)
@DictFormat("type") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中
private Integer type;
@Schema(description = "门店id", requiredMode = Schema.RequiredMode.REQUIRED, example = "9453")
@ExcelProperty("门店id")
private String brandId;
private Long brandId;
@Schema(description = "人员id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2596")
@ExcelProperty("人员id")
private String technicianId;
private Long technicianId;
@Schema(description = "预约时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("预约时间")
private LocalDateTime reAddTime;
@Schema(description = "预约时间段", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("预约时间段")
private String hsstr;
@Schema(description = "预约状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "预约状态", converter = DictConvert.class)
@DictFormat("re_status") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中
private Integer reStatus;
@Schema(description = "审核状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@ExcelProperty(value = "审核状态", converter = DictConvert.class)
@DictFormat("status") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中
private Integer status;
// @Schema(description = "审核状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
// @ExcelProperty(value = "审核状态", converter = DictConvert.class)
// @DictFormat("status") // TODO 代码优化建议设置到对应的 DictTypeConstants 枚举类中
// private Integer status;
private String timeQuantum;
private String days;
private String technicianName;
private String name;
private String phone;
private String projectName;
@Schema(description = "创建时间")
@ExcelProperty("创建时间")
@ -63,12 +56,6 @@ public class LitemallReservationRespVO {
@ExcelProperty("用户名称")
private String nickname;
//电话
private String memberphone;
//门店地址
private String brandaddress;
@Schema(description = "备注", example = "随便")
@ExcelProperty("备注")
private String remark;

View File

@ -17,31 +17,19 @@ public class LitemallReservationSaveReqVO {
@Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27338")
private Long userId;
@Schema(description = "预约类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "预约类型不能为空")
private Integer type;
@Schema(description = "门店id", requiredMode = Schema.RequiredMode.REQUIRED, example = "9453")
@NotEmpty(message = "门店不能为空")
private String brandId;
private Long brandId;
@Schema(description = "人员id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2596")
@NotEmpty(message = "人员不能为空")
private String technicianId;
@Schema(description = "预约时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "预约时间不能为空")
private String reAddTime;
@Schema(description = "预约时间段", requiredMode = Schema.RequiredMode.REQUIRED)
// @NotNull(message = "预约时间段不能为空")
private String hsstr;
private Long technicianId;
@Schema(description = "预约状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private Integer reStatus;
@Schema(description = "审核状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
private Integer status;
// @Schema(description = "审核状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
// private Integer status;
@Schema(description = "备注", example = "随便")
private String remark;

View File

@ -15,6 +15,8 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@ToString(callSuper = true)
public class LitemallTechnicianPageReqVO extends PageParam {
@Schema(description = "名称")
private String name;
@Schema(description = "项目id", example = "28184")
private Long projectId;

View File

@ -19,6 +19,9 @@ public class LitemallTechnicianRespVO {
@ExcelProperty("id")
private Long id;
@Schema(description = "名称")
private String name;
@Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28184")
@ExcelProperty("项目id")
private Long projectId;

View File

@ -12,6 +12,10 @@ public class LitemallTechnicianSaveReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26372")
private Long id;
@Schema(description = "名称")
@NotNull(message = "套餐名称不能为空")
private String name;
@Schema(description = "项目id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28184")
@NotNull(message = "项目不能为空")
private Long projectId;

View File

@ -4,6 +4,8 @@ import lombok.Data;
@Data
public class ServiceTimeVO {
private Long id;
private String start;
private String end;
private String subscribeNum;
}

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.srbscribe.controller.app.brand;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.srbscribe.controller.admin.brand.vo.LitemallBrandPageReqVO;
@ -10,6 +11,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
@ -29,13 +32,19 @@ public class AppBrandController {
return "cscscs";
}
/**
* 查询医馆管理列表
*/
@GetMapping("/list")
public Object list(LitemallBrandPageReqVO litemallBrandPageReqVO) {
PageResult<LitemallBrandDO> pageResult = litemallBrandService.getLitemallBrandPage(litemallBrandPageReqVO);
return success(BeanUtils.toBean(pageResult, LitemallBrandRespVO.class));
// /**
// * 查询医馆管理列表
// */
// @GetMapping("/list")
// public Object list(LitemallBrandPageReqVO litemallBrandPageReqVO) {
// PageResult<LitemallBrandDO> pageResult = litemallBrandService.getLitemallBrandPage(litemallBrandPageReqVO);
// return success(BeanUtils.toBean(pageResult, LitemallBrandRespVO.class));
// }
@GetMapping("/getBrand")
public CommonResult<List<LitemallBrandDO>> getBrandList(){
List<LitemallBrandDO> organization = litemallBrandService.getOrganization();
return success(organization);
}
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.srbscribe.controller.app.configuration;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.configuration.ConfigurationDO;
import cn.iocoder.yudao.module.srbscribe.service.configuration.ConfigurationService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/h5/configuration")
public class AppConfigurationController {
@Resource
private ConfigurationService configurationService;
//查询套餐时间段
@GetMapping("/getConfiguration")
public CommonResult<List<ConfigurationDO>> getConfigurationList(Integer projectdayId, Integer technicianId){
List<ConfigurationDO> configurationList = configurationService.getConfigurationList(projectdayId, technicianId);
return CommonResult.success(configurationList);
}
}

View File

@ -0,0 +1,28 @@
package cn.iocoder.yudao.module.srbscribe.controller.app.project;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.brand.LitemallBrandDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.project.ProjectDO;
import cn.iocoder.yudao.module.srbscribe.service.project.ProjectService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/h5/project")
public class AppProjectController {
@Resource
private ProjectService projectService;
@GetMapping("/getProject")
public CommonResult<List<ProjectDO>> getProjectList(Integer id){
List<ProjectDO> projectById = projectService.getProjectById(id);
return CommonResult.success(projectById);
}
}

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.srbscribe.controller.app.projectday;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.project.ProjectDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday.ProjectdayDO;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.projectday.ProjectdayMapper;
import cn.iocoder.yudao.module.srbscribe.service.projectday.ProjectdayService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/h5/projectday")
public class AppProjectDayController {
@Resource
private ProjectdayService projectdayService;
//获取预约天
@GetMapping("/getProjectday")
public CommonResult<List<ProjectdayDO>> getProjecdaytList(Integer id){
List<ProjectdayDO> projectday = projectdayService.getProjectday(id);
return CommonResult.success(projectday);
}
}

View File

@ -17,6 +17,7 @@ import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
/**
@ -57,18 +58,42 @@ public class AppReservationController {
/**
* 新增预约管理
*/
@PostMapping("/add")
public CommonResult<Long> createLitemallReservation(Integer type,String brandId,String technicianId,String reAddTime,String hsstr,Long userId) {
// @PostMapping("/add")
// public CommonResult<Long> createLitemallReservation(Integer type,String brandId,String technicianId,String reAddTime,String hsstr,Long userId) {
//
// LitemallReservationSaveReqVO litemallReservationSaveReqVO = new LitemallReservationSaveReqVO();
// litemallReservationSaveReqVO.setType(type);
// litemallReservationSaveReqVO.setBrandId(brandId);
// litemallReservationSaveReqVO.setTechnicianId(technicianId);
// litemallReservationSaveReqVO.setReAddTime(reAddTime);
// litemallReservationSaveReqVO.setHsstr(hsstr);
// litemallReservationSaveReqVO.setUserId(userId);
//
// return success(litemallReservationService.createReservation(litemallReservationSaveReqVO));
// }
LitemallReservationSaveReqVO litemallReservationSaveReqVO = new LitemallReservationSaveReqVO();
litemallReservationSaveReqVO.setType(type);
litemallReservationSaveReqVO.setBrandId(brandId);
litemallReservationSaveReqVO.setTechnicianId(technicianId);
litemallReservationSaveReqVO.setReAddTime(reAddTime);
litemallReservationSaveReqVO.setHsstr(hsstr);
litemallReservationSaveReqVO.setUserId(userId);
return success(litemallReservationService.createReservation(litemallReservationSaveReqVO));
@GetMapping("/addReservation")
public CommonResult<Integer> addReservation(Integer brandId,Integer projectId,Integer technicianId,
Integer projectdayId,Integer timeId,String name,String phone){
LitemallReservationDO litemallReservationDO = new LitemallReservationDO();
litemallReservationDO.setUserId(getLoginUserId());
litemallReservationDO.setBrandId((long)brandId);
litemallReservationDO.setProjectId((long)projectId);
litemallReservationDO.setTechnicianId((long)technicianId);
litemallReservationDO.setProjectdayId((long)projectdayId);
litemallReservationDO.setConfigurationId((long)timeId);
litemallReservationDO.setName(name);
litemallReservationDO.setPhone(phone);
return success(litemallReservationService.addReservation(litemallReservationDO));
}
//预约记录
@GetMapping("/reservationInfo")
public CommonResult<List<LitemallReservationDO>> reservationInfo(){
List<LitemallReservationDO> litemallReservationDOList = litemallReservationService.reservationInfo(getLoginUserId());
return success(litemallReservationDOList);
}

View File

@ -23,7 +23,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
* 人员
* 套餐
*/
@RestController
@RequestMapping("/h5/technician")
@ -49,33 +49,39 @@ public class AppTechnicianController {
/**
* 查询技师管理详情
*/
@GetMapping("/h5xq")
public Object h5xq(LitemallTechnicianDO litemallTechnician) throws JSONException {
// @GetMapping("/h5xq")
// public Object h5xq(LitemallTechnicianDO litemallTechnician) throws JSONException {
//
// LitemallTechnicianDO litemallTechnicianDO = new LitemallTechnicianDO();
// litemallTechnicianDO = litemallTechnicianService.getLitemallTechnician(litemallTechnician.getId());
// litemallTechnicianDO.getAddDate();
// String serviceTime = litemallTechnicianDO.getServiceTime();
// JSONArray jsonArray = new JSONArray(serviceTime);
// List<Object> relist = new ArrayList<>();
// for (int i = 0; i < jsonArray.length(); i++) {
// Map maps = (Map) JSON.parse(jsonArray.get(i).toString());
// String serviceTime1 = maps.get("startTime") + "-" + maps.get("endTime");
// LitemallReservationDO litemallReservationDO = new LitemallReservationDO();
// litemallReservationDO.setTechnicianId(litemallTechnician.getId());
// litemallReservationDO.setReAddTime(litemallTechnician.getAddDate());
// litemallReservationDO.setHsstr(serviceTime1);
// List<LitemallReservationDO> list = litemallReservationService.selectLitemallReservationList(litemallReservationDO);
// if (list.size() != 0) {
//// if (list.size()!=0||litemallTechnician2.getYm().equals("1")){
// maps.put("ym", "true");
// } else {
// maps.put("ym", "false");
// }
// relist.add(maps);
// }
// litemallTechnicianDO.setServiceTime(relist.toString());
// return success(litemallTechnicianDO);
// }
LitemallTechnicianDO litemallTechnicianDO = new LitemallTechnicianDO();
litemallTechnicianDO = litemallTechnicianService.getLitemallTechnician(litemallTechnician.getId());
litemallTechnicianDO.getAddDate();
String serviceTime = litemallTechnicianDO.getServiceTime();
JSONArray jsonArray = new JSONArray(serviceTime);
List<Object> relist = new ArrayList<>();
for (int i = 0; i < jsonArray.length(); i++) {
Map maps = (Map) JSON.parse(jsonArray.get(i).toString());
String serviceTime1 = maps.get("startTime") + "-" + maps.get("endTime");
LitemallReservationDO litemallReservationDO = new LitemallReservationDO();
litemallReservationDO.setTechnicianId(String.valueOf(litemallTechnician.getId()));
litemallReservationDO.setReAddTime(litemallTechnician.getAddDate());
litemallReservationDO.setHsstr(serviceTime1);
List<LitemallReservationDO> list = litemallReservationService.selectLitemallReservationList(litemallReservationDO);
if (list.size() != 0) {
// if (list.size()!=0||litemallTechnician2.getYm().equals("1")){
maps.put("ym", "true");
} else {
maps.put("ym", "false");
}
relist.add(maps);
}
litemallTechnicianDO.setServiceTime(relist.toString());
return success(litemallTechnicianDO);
@GetMapping("/getTechnician")
public CommonResult<List<LitemallTechnicianDO>> getTechnician(Integer id){
List<LitemallTechnicianDO> technician = litemallTechnicianService.getTechnician(id);
return success(technician);
}

View File

@ -0,0 +1,58 @@
package cn.iocoder.yudao.module.srbscribe.dal.dataobject.configuration;
import lombok.*;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 预约配置 DO
*
* @author 管理员
*/
@TableName("subscribe_configuration")
@KeySequence("subscribe_configuration_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ConfigurationDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* 套餐id
*/
private Long technicianId;
private Long projectdayId;
@TableField(exist = false)
private String serviceTimes;
@TableField(exist = false)
private String technicianName;
/**
* 时间段
*/
private String timeQuantum;
/**
* 可预约数
*/
private Integer availableNumber;
/**
* 剩余预约数
*/
private Integer residueNumber;
/**
* 状态
*
* 枚举 {@link TODO subscribe_configuration_status 对应的类}
*/
private Integer status;
}

View File

@ -0,0 +1,41 @@
package cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
/**
* 预约项目可预约天 DO
*
* @author 管理员
*/
@TableName("subscribe_projectday")
@KeySequence("subscribe_projectday_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProjectdayDO extends BaseDO {
/**
* id
*/
@TableId
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 可预约天
*/
private String days;
private String week;
}

View File

@ -28,42 +28,53 @@ public class LitemallReservationDO extends BaseDO {
* 用户id
*/
private Long userId;
@TableField(exist = false)
private String memberphone;
@TableField(exist = false)
private String nickname;
/**
* 预约类型
*
* 枚举 {@link TODO type 对应的类}
*/
private Integer type;
@TableField(exist = false)
private String typeName;
private String name;
private String phone;
/**
* 门店id
*/
private String brandId;
private Long brandId;
@TableField(exist = false)
private String brandName;
@TableField(exist = false)
private String brandphone;
@TableField(exist = false)
private String brandaddress;
@TableField(exist = false)
private String timeQuantum;
/**
* 人员id
* 项目id
*/
private String technicianId;
private Long projectId;
@TableField(exist = false)
private String projectName;
/**
* 套餐id
*/
private Long technicianId;
@TableField(exist = false)
private String stat;
@TableField(exist = false)
private String technicianName;
/**
* 预约时间
*/
private String reAddTime;
/**
* 预约时间段
*/
private String hsstr;
private Long projectdayId;
@TableField(exist = false)
private String days;
private Long configurationId;
/**
* 预约状态
*
@ -75,7 +86,7 @@ public class LitemallReservationDO extends BaseDO {
*
* 枚举 {@link TODO status 对应的类}
*/
private Integer status;
// private Integer status;
/**
* 备注
*/

View File

@ -28,6 +28,10 @@ public class LitemallTechnicianDO extends BaseDO {
*/
@TableId
private Long id;
/**
* 套餐名称
*/
private String name;
/**
* 项目id
*/

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.srbscribe.dal.mysql.configuration;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo.ConfigurationPageReqVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.configuration.ConfigurationDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 预约配置 Mapper
*
* @author 管理员
*/
@Mapper
public interface ConfigurationMapper extends BaseMapperX<ConfigurationDO> {
default PageResult<ConfigurationDO> selectPage(ConfigurationPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ConfigurationDO>()
.eqIfPresent(ConfigurationDO::getTechnicianId, reqVO.getTechnicianId())
.eqIfPresent(ConfigurationDO::getTimeQuantum, reqVO.getTimeQuantum())
.eqIfPresent(ConfigurationDO::getAvailableNumber, reqVO.getAvailableNumber())
.eqIfPresent(ConfigurationDO::getResidueNumber, reqVO.getResidueNumber())
.eqIfPresent(ConfigurationDO::getStatus, reqVO.getStatus())
.betweenIfPresent(ConfigurationDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ConfigurationDO::getId));
}
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.srbscribe.dal.mysql.projectday;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo.ProjectdayPageReqVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday.ProjectdayDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 预约项目可预约天 Mapper
*
* @author 管理员
*/
@Mapper
public interface ProjectdayMapper extends BaseMapperX<ProjectdayDO> {
default PageResult<ProjectdayDO> selectPage(ProjectdayPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<ProjectdayDO>()
.eqIfPresent(ProjectdayDO::getProjectId, reqVO.getProjectId())
.eqIfPresent(ProjectdayDO::getDays, reqVO.getDays())
.betweenIfPresent(ProjectdayDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(ProjectdayDO::getId));
}
}

View File

@ -23,13 +23,9 @@ public interface LitemallReservationMapper extends BaseMapperX<LitemallReservati
default PageResult<LitemallReservationDO> selectPage(LitemallReservationPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<LitemallReservationDO>()
.eqIfPresent(LitemallReservationDO::getUserId, reqVO.getUserId())
.eqIfPresent(LitemallReservationDO::getType, reqVO.getType())
.eqIfPresent(LitemallReservationDO::getBrandId, reqVO.getBrandId())
.eqIfPresent(LitemallReservationDO::getTechnicianId, reqVO.getTechnicianId())
.betweenIfPresent(LitemallReservationDO::getReAddTime, reqVO.getReAddTime())
.eqIfPresent(LitemallReservationDO::getHsstr, reqVO.getHsstr())
.eqIfPresent(LitemallReservationDO::getReStatus, reqVO.getReStatus())
.eqIfPresent(LitemallReservationDO::getStatus, reqVO.getStatus())
.eqIfPresent(LitemallReservationDO::getRemark, reqVO.getRemark())
.betweenIfPresent(LitemallReservationDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(LitemallReservationDO::getId));

View File

@ -60,4 +60,6 @@ public interface LitemallBrandService {
*/
List<LitemallBrandDO> getOrganization();
}

View File

@ -0,0 +1,64 @@
package cn.iocoder.yudao.module.srbscribe.service.configuration;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo.ConfigurationPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo.ConfigurationSaveReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.technician.vo.ServiceTimeVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.configuration.ConfigurationDO;
import javax.validation.*;
import java.util.List;
/**
* 预约配置 Service 接口
*
* @author 管理员
*/
public interface ConfigurationService {
/**
* 创建预约配置
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createConfiguration(@Valid ConfigurationSaveReqVO createReqVO);
/**
* 更新预约配置
*
* @param updateReqVO 更新信息
*/
void updateConfiguration(@Valid ConfigurationSaveReqVO updateReqVO);
/**
* 删除预约配置
*
* @param id 编号
*/
void deleteConfiguration(Long id);
/**
* 获得预约配置
*
* @param id 编号
* @return 预约配置
*/
ConfigurationDO getConfiguration(Long id);
/**
* 获得预约配置分页
*
* @param pageReqVO 分页查询
* @return 预约配置分页
*/
PageResult<ConfigurationDO> getConfigurationPage(ConfigurationPageReqVO pageReqVO);
List<ServiceTimeVO> getConfiguration(Integer id);
Long addUpdConfiguration(ConfigurationDO pageReqVO);
List<ConfigurationDO> getConfigurationList(Integer projectdayId, Integer technicianId);
}

View File

@ -0,0 +1,145 @@
package cn.iocoder.yudao.module.srbscribe.service.configuration;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo.ConfigurationPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.configuration.vo.ConfigurationSaveReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.technician.vo.ServiceTimeVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.configuration.ConfigurationDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.technician.LitemallTechnicianDO;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.configuration.ConfigurationMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.technician.LitemallTechnicianMapper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import java.util.ArrayList;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.subscribe.enums.ErrorCodeConstants.*;
/**
* 预约配置 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class ConfigurationServiceImpl implements ConfigurationService {
@Resource
private ConfigurationMapper configurationMapper;
@Resource
private LitemallTechnicianMapper litemallTechnicianMapper;
@Override
public Long createConfiguration(ConfigurationSaveReqVO createReqVO) {
// 插入
ConfigurationDO configuration = BeanUtils.toBean(createReqVO, ConfigurationDO.class);
configurationMapper.insert(configuration);
// 返回
return configuration.getId();
}
@Override
public void updateConfiguration(ConfigurationSaveReqVO updateReqVO) {
// 校验存在
validateConfigurationExists(updateReqVO.getId());
// 更新
ConfigurationDO updateObj = BeanUtils.toBean(updateReqVO, ConfigurationDO.class);
configurationMapper.updateById(updateObj);
}
@Override
public void deleteConfiguration(Long id) {
// 校验存在
validateConfigurationExists(id);
// 删除
configurationMapper.deleteById(id);
}
private void validateConfigurationExists(Long id) {
if (configurationMapper.selectById(id) == null) {
throw exception(CONFIGURATION_NOT_EXISTS);
}
}
@Override
public ConfigurationDO getConfiguration(Long id) {
return configurationMapper.selectById(id);
}
@Override
public PageResult<ConfigurationDO> getConfigurationPage(ConfigurationPageReqVO pageReqVO) {
PageResult<ConfigurationDO> configurationDOPageResult = configurationMapper.selectPage(pageReqVO);
for (int i = 0; i < configurationDOPageResult.getList().size(); i++) {
ConfigurationDO configurationDO = configurationDOPageResult.getList().get(i);
LitemallTechnicianDO litemallTechnicianDO = litemallTechnicianMapper.selectOne("id", configurationDO.getTechnicianId());
configurationDO.setTechnicianName(litemallTechnicianDO.getName());
}
return configurationDOPageResult;
}
@Override
public List<ServiceTimeVO> getConfiguration(Integer id) {
List<ConfigurationDO> configurationDOS = configurationMapper.selectList("projectday_id", id);
List<ServiceTimeVO> serviceTimeVOList = new ArrayList<>();
for (int i = 0; i < configurationDOS.size(); i++) {
ConfigurationDO configurationDO = configurationDOS.get(i);
ServiceTimeVO serviceTimeVO = new ServiceTimeVO();
String[] split = configurationDO.getTimeQuantum().split(" - ");
serviceTimeVO.setId(configurationDO.getId());
serviceTimeVO.setStart(split[0]);
serviceTimeVO.setEnd(split[1]);
serviceTimeVO.setSubscribeNum(String.valueOf(configurationDO.getAvailableNumber()));
serviceTimeVOList.add(serviceTimeVO);
}
return serviceTimeVOList;
}
@Override
public Long addUpdConfiguration(ConfigurationDO pageReqVO) {
//添加成功后时间段添加到预约时间段配置中
if(pageReqVO.getServiceTimes() != null && pageReqVO.getServiceTimes() != ""){
//把StringJSON格式serviceTime转成对象
List<ServiceTimeVO> serviceTimeVOS = JSON.parseObject(pageReqVO.getServiceTimes(), new TypeReference<List<ServiceTimeVO>>() {});
for (int j = 0; j < serviceTimeVOS.size(); j++) {
ServiceTimeVO serviceTimeVO = serviceTimeVOS.get(j);
String serviceTime = serviceTimeVO.getStart() + " - " + serviceTimeVO.getEnd();
ConfigurationDO configurationDO = new ConfigurationDO();
configurationDO.setTechnicianId(pageReqVO.getTechnicianId());
configurationDO.setProjectdayId(pageReqVO.getProjectdayId());
configurationDO.setTimeQuantum(serviceTime);
configurationDO.setAvailableNumber(Integer.parseInt(serviceTimeVO.getSubscribeNum()));
configurationDO.setResidueNumber(Integer.parseInt(serviceTimeVO.getSubscribeNum()));
configurationDO.setStatus(1);
configurationMapper.insert(configurationDO);
}
}
return null;
}
@Override
public List<ConfigurationDO> getConfigurationList(Integer projectdayId, Integer technicianId) {
QueryWrapper<ConfigurationDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("projectday_id",projectdayId).eq("technician_id",technicianId);
List<ConfigurationDO> configurationDOS = configurationMapper.selectList(queryWrapper);
return configurationDOS;
}
}

View File

@ -3,7 +3,9 @@ package cn.iocoder.yudao.module.srbscribe.service.project;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.ProjectPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.ProjectSaveReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.SelectDataVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.project.ProjectDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday.ProjectdayDO;
import javax.validation.*;
import java.util.List;
@ -56,4 +58,9 @@ public interface ProjectService {
List<ProjectDO> getProjectName();
List<ProjectDO> getProjectById(int id);
//获取项目预约天的下拉框数据
List<ProjectdayDO> getProjectDay(int id);
}

View File

@ -3,16 +3,32 @@ package cn.iocoder.yudao.module.srbscribe.service.project;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.ProjectPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.ProjectSaveReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.project.vo.SelectDataVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.brand.LitemallBrandDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.project.ProjectDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday.ProjectdayDO;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.brand.LitemallBrandMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.project.ProjectMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.projectday.ProjectdayMapper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.subscribe.enums.ErrorCodeConstants.*;
@ -32,11 +48,64 @@ public class ProjectServiceImpl implements ProjectService {
@Resource
private LitemallBrandMapper litemallBrandMapper;
@Resource
private ProjectdayMapper projectdayMapper;
@Override
public Long createProject(ProjectSaveReqVO createReqVO) {
// 插入
ProjectDO project = BeanUtils.toBean(createReqVO, ProjectDO.class);
projectMapper.insert(project);
int insert = projectMapper.insert(project);
if (insert > 0){
// 创建 Gson 对象
Gson gson = new Gson();
// 定义数组的类型
Type arrayType = new TypeToken<String[]>() {}.getType();
// 将字符串转换为数组
String[] timeIntervalArray = gson.fromJson(project.getTimeInterval(), arrayType);
String[] startDate = timeIntervalArray[0].split("T");
String[] endDate = timeIntervalArray[1].split("T");
// 定义日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 定义起始日期和结束日期
LocalDate startDates = LocalDate.parse(startDate[0], formatter);
LocalDate endDates = LocalDate.parse(endDate[0], formatter);
// 获取日期范围内的所有日期
List<LocalDate> dateList = getDatesBetween(startDates, endDates);
// 创建一个 StringBuilder 来存储所有日期的字符串
StringBuilder dateStringBuilder = new StringBuilder();
// 拼接所有日期字符串
for (LocalDate date : dateList) {
dateStringBuilder.append(date.format(formatter)).append(","); // 连接日期和逗号
}
// 删除最后一个逗号和空格
if (dateStringBuilder.length() > 0) {
dateStringBuilder.setLength(dateStringBuilder.length() - 1); // 移除最后的逗号和空格
}
// 输出所有日期作为单个字符串
String finalDateString = dateStringBuilder.toString();
String[] split = finalDateString.split(",");
List<ProjectdayDO> projectdayDOS = new ArrayList<>();
for (int i = 0; i < split.length; i++) {
ProjectdayDO projectdayDO = new ProjectdayDO();
projectdayDO.setProjectId(project.getId());
projectdayDO.setDays(split[i]);
LocalDate localDate = LocalDate.parse(split[i]);
String dayOfWeek = localDate.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINESE);
projectdayDO.setWeek(dayOfWeek);
projectdayDOS.add(projectdayDO);
}
projectdayMapper.insertBatch(projectdayDOS);
}
// 返回
return project.getId();
}
@ -72,11 +141,22 @@ public class ProjectServiceImpl implements ProjectService {
@Override
public PageResult<ProjectDO> getProjectPage(ProjectPageReqVO pageReqVO) {
PageResult<ProjectDO> projectDOPageResult = projectMapper.selectPage(pageReqVO);
// 创建 Gson 对象
Gson gson = new Gson();
// 定义数组的类型
Type arrayType = new TypeToken<String[]>() {
}.getType();
for (int i = 0; i < projectDOPageResult.getList().size(); i++) {
ProjectDO projectDO = projectDOPageResult.getList().get(i);
LitemallBrandDO litemallBrandDO = litemallBrandMapper.selectOne("id", projectDO.getBrandId());
projectDO.setBrandName(litemallBrandDO.getName());
// 将字符串转换为数组
String[] timeIntervalArray = gson.fromJson(projectDO.getTimeInterval(), arrayType);
String[] startDate = timeIntervalArray[0].split("T");
String[] endDate = timeIntervalArray[1].split("T");
projectDO.setTimeInterval(startDate[0] + " - " + endDate[0]);
}
return projectDOPageResult;
}
@ -86,4 +166,44 @@ public class ProjectServiceImpl implements ProjectService {
return projectMapper.selectList();
}
@Override
public List<ProjectDO> getProjectById(int id) {
List<ProjectDO> brand_id = projectMapper.selectList("brand_id", id);
// 创建 Gson 对象
Gson gson = new Gson();
// 定义数组的类型
Type arrayType = new TypeToken<String[]>() {
}.getType();
for (int i = 0; i < brand_id.size(); i++) {
ProjectDO projectDO = brand_id.get(i);
// 将字符串转换为数组
String[] timeIntervalArray = gson.fromJson(projectDO.getTimeInterval(), arrayType);
String[] startDate = timeIntervalArray[0].split("T");
String[] endDate = timeIntervalArray[1].split("T");
projectDO.setTimeInterval(startDate[0] + "-" + endDate[0]);
}
return brand_id;
}
@Override
public List<ProjectdayDO> getProjectDay(int id) {
List<ProjectdayDO> projectdayDOS = projectdayMapper.selectList("project_id", id);
return projectdayDOS;
}
// 方法获取两个日期之间的所有日期
public static List<LocalDate> getDatesBetween(LocalDate startDate, LocalDate endDate) {
List<LocalDate> dates = new ArrayList<>();
LocalDate currentDate = startDate;
while (!currentDate.isAfter(endDate)) {
dates.add(currentDate);
currentDate = currentDate.plusDays(1); // 增加一天
}
return dates;
}
}

View File

@ -0,0 +1,60 @@
package cn.iocoder.yudao.module.srbscribe.service.projectday;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo.ProjectdayPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo.ProjectdaySaveReqVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday.ProjectdayDO;
import javax.validation.*;
import java.util.List;
/**
* 预约项目可预约天 Service 接口
*
* @author 管理员
*/
public interface ProjectdayService {
/**
* 创建预约项目可预约天
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createProjectday(@Valid ProjectdaySaveReqVO createReqVO);
/**
* 更新预约项目可预约天
*
* @param updateReqVO 更新信息
*/
void updateProjectday(@Valid ProjectdaySaveReqVO updateReqVO);
/**
* 删除预约项目可预约天
*
* @param id 编号
*/
void deleteProjectday(Long id);
/**
* 获得预约项目可预约天
*
* @param id 编号
* @return 预约项目可预约天
*/
ProjectdayDO getProjectday(Long id);
/**
* 获得预约项目可预约天分页
*
* @param pageReqVO 分页查询
* @return 预约项目可预约天分页
*/
PageResult<ProjectdayDO> getProjectdayPage(ProjectdayPageReqVO pageReqVO);
List<ProjectdayDO> getProjectday(Integer id);
}

View File

@ -0,0 +1,78 @@
package cn.iocoder.yudao.module.srbscribe.service.projectday;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo.ProjectdayPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.projectday.vo.ProjectdaySaveReqVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday.ProjectdayDO;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.projectday.ProjectdayMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.subscribe.enums.ErrorCodeConstants.*;
/**
* 预约项目可预约天 Service 实现类
*
* @author 管理员
*/
@Service
@Validated
public class ProjectdayServiceImpl implements ProjectdayService {
@Resource
private ProjectdayMapper projectdayMapper;
@Override
public Long createProjectday(ProjectdaySaveReqVO createReqVO) {
// 插入
ProjectdayDO projectday = BeanUtils.toBean(createReqVO, ProjectdayDO.class);
projectdayMapper.insert(projectday);
// 返回
return projectday.getId();
}
@Override
public void updateProjectday(ProjectdaySaveReqVO updateReqVO) {
// 校验存在
validateProjectdayExists(updateReqVO.getId());
// 更新
ProjectdayDO updateObj = BeanUtils.toBean(updateReqVO, ProjectdayDO.class);
projectdayMapper.updateById(updateObj);
}
@Override
public void deleteProjectday(Long id) {
// 校验存在
validateProjectdayExists(id);
// 删除
projectdayMapper.deleteById(id);
}
private void validateProjectdayExists(Long id) {
if (projectdayMapper.selectById(id) == null) {
throw exception(PROJECTDAY_NOT_EXISTS);
}
}
@Override
public ProjectdayDO getProjectday(Long id) {
return projectdayMapper.selectById(id);
}
@Override
public PageResult<ProjectdayDO> getProjectdayPage(ProjectdayPageReqVO pageReqVO) {
return projectdayMapper.selectPage(pageReqVO);
}
@Override
public List<ProjectdayDO> getProjectday(Integer id) {
List<ProjectdayDO> projectdayDOS = projectdayMapper.selectList("project_id", id);
return projectdayDOS;
}
}

View File

@ -65,6 +65,10 @@ public interface LitemallReservationService {
*/
PageResult<LitemallReservationDO> getLitemallReservationPage(LitemallReservationPageReqVO pageReqVO);
List<LitemallReservationDO> getLitemallReservationList(LitemallReservationDO litemallReservationDO);
int addReservation(LitemallReservationDO litemallReservationDO);
List<LitemallReservationDO> reservationInfo(Long userId);
}

View File

@ -6,9 +6,15 @@ import cn.iocoder.yudao.module.srbscribe.controller.admin.reservation.vo.Litemal
import cn.iocoder.yudao.module.srbscribe.controller.admin.reservation.vo.LitemallReservationSaveReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.technician.vo.ServiceTimeVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.brand.LitemallBrandDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.configuration.ConfigurationDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.project.ProjectDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.projectday.ProjectdayDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.reservation.LitemallReservationDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.technician.LitemallTechnicianDO;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.brand.LitemallBrandMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.configuration.ConfigurationMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.project.ProjectMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.projectday.ProjectdayMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.reservation.LitemallReservationMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.technician.LitemallTechnicianMapper;
import com.alibaba.fastjson.JSON;
@ -41,12 +47,24 @@ public class LitemallReservationServiceImpl implements LitemallReservationServic
@Resource
private LitemallBrandMapper litemallBrandMapper;
@Resource
private ProjectMapper projectMapper;
@Resource
private LitemallTechnicianMapper litemallTechnicianMapper;
@Resource
private MemberUserMapper memberUserMapper;
@Resource
private ConfigurationMapper configurationMapper;
@Resource
private ProjectdayMapper projectdayMapper;
/**
* 查询预约管理列表
*
@ -109,27 +127,99 @@ public class LitemallReservationServiceImpl implements LitemallReservationServic
for (int i = 0; i < litemallReservationDOPageResult.getList().size(); i++) {
LitemallReservationDO litemallReservationDO = litemallReservationDOPageResult.getList().get(i);
//门店信息
LitemallBrandDO litemallBrandDO = litemallBrandMapper.selectOne("id", litemallReservationDO.getBrandId());
litemallReservationDO.setBrandName(litemallBrandDO.getName());
litemallReservationDO.setBrandaddress(litemallBrandDO.getAddress());
// LitemallTechnicianDO litemallTechnicianDO = litemallTechnicianMapper.selectOne("id", litemallReservationDO.getTechnicianId());
// litemallReservationDO.setTechnicianName(litemallTechnicianDO.getTechnicianName());
//项目信息
ProjectDO projectDO = projectMapper.selectOne("id", litemallReservationDO.getProjectId());
litemallReservationDO.setProjectName(projectDO.getName());
MemberUserDO memberUserDO = memberUserMapper.selectOne("id", litemallReservationDO.getUserId());
litemallReservationDO.setNickname(memberUserDO.getNickname());
litemallReservationDO.setMemberphone(memberUserDO.getMobile());
//套餐信息
LitemallTechnicianDO litemallTechnicianDO = litemallTechnicianMapper.selectOne("id", litemallReservationDO.getTechnicianId());
litemallReservationDO.setTechnicianName(litemallTechnicianDO.getName());
//预约日期
ProjectdayDO projectdayDO = projectdayMapper.selectOne("id", litemallReservationDO.getProjectdayId());
litemallReservationDO.setDays(projectdayDO.getDays());
//预约时间段
ConfigurationDO configurationDO = configurationMapper.selectOne("id", litemallReservationDO.getConfigurationId());
litemallReservationDO.setTimeQuantum(configurationDO.getTimeQuantum());
// MemberUserDO memberUserDO = memberUserMapper.selectOne("id", litemallReservationDO.getUserId());
// litemallReservationDO.setNickname(memberUserDO.getNickname());
// litemallReservationDO.setMemberphone(memberUserDO.getMobile());
}
return litemallReservationDOPageResult;
}
@Override
public List<LitemallReservationDO> getLitemallReservationList(LitemallReservationDO litemallReservationDO) {
QueryWrapper<LitemallReservationDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("type",litemallReservationDO.getType()).eq("brand_id",litemallReservationDO.getBrandId());
List<LitemallReservationDO> litemallReservationDOS = litemallReservationMapper.selectList(queryWrapper);
return litemallReservationDOS;
public int addReservation(LitemallReservationDO litemallReservationDO) {
ConfigurationDO configurationDO = configurationMapper.selectOne("id", litemallReservationDO.getConfigurationId());
if (configurationDO.getResidueNumber() > 0){ //剩余预约人数大于0可预约
litemallReservationDO.setReStatus(1);
litemallReservationMapper.insert(litemallReservationDO);
int a = configurationDO.getResidueNumber() - 1;
if (a == 0){
configurationDO.setStatus(0);//设置该时间段为不可预约
}
configurationDO.setResidueNumber(a);
configurationMapper.updateById(configurationDO);
return 1;
}
return 0;
}
@Override
public List<LitemallReservationDO> reservationInfo(Long userId) {
List<LitemallReservationDO> litemallReservationDOList = litemallReservationMapper.selectList("user_id", userId);
for (int i = 0; i < litemallReservationDOList.size(); i++) {
LitemallReservationDO litemallReservationDO = litemallReservationDOList.get(i);
if (litemallReservationDO.getReStatus() == 1){
litemallReservationDO.setStat("预约成功");
}
if (litemallReservationDO.getReStatus() == 0){
litemallReservationDO.setStat("预约失败");
}
//门店信息
LitemallBrandDO litemallBrandDO = litemallBrandMapper.selectOne("id", litemallReservationDO.getBrandId());
litemallReservationDO.setBrandName(litemallBrandDO.getName());
litemallReservationDO.setBrandaddress(litemallBrandDO.getAddress());
//项目信息
ProjectDO projectDO = projectMapper.selectOne("id", litemallReservationDO.getProjectId());
litemallReservationDO.setProjectName(projectDO.getName());
//套餐信息
LitemallTechnicianDO litemallTechnicianDO = litemallTechnicianMapper.selectOne("id", litemallReservationDO.getTechnicianId());
litemallReservationDO.setTechnicianName(litemallTechnicianDO.getName());
//预约日期
ProjectdayDO projectdayDO = projectdayMapper.selectOne("id", litemallReservationDO.getProjectdayId());
litemallReservationDO.setDays(projectdayDO.getDays());
//预约时间段
ConfigurationDO configurationDO = configurationMapper.selectOne("id", litemallReservationDO.getConfigurationId());
litemallReservationDO.setTimeQuantum(configurationDO.getTimeQuantum());
// MemberUserDO memberUserDO = memberUserMapper.selectOne("id", litemallReservationDO.getUserId());
// litemallReservationDO.setNickname(memberUserDO.getNickname());
// litemallReservationDO.setMemberphone(memberUserDO.getMobile());
}
return litemallReservationDOList;
}
}

View File

@ -59,4 +59,6 @@ public interface LitemallTechnicianService {
List<LitemallTechnicianDO> getTechnicianName();
List<LitemallTechnicianDO> getTechnician(int id);
}

View File

@ -1,17 +1,16 @@
package cn.iocoder.yudao.module.srbscribe.service.technician;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.srbscribe.controller.admin.brand.vo.LitemallBrandPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.technician.vo.LitemallTechnicianPageReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.technician.vo.LitemallTechnicianSaveReqVO;
import cn.iocoder.yudao.module.srbscribe.controller.admin.technician.vo.ServiceTimeVO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.brand.LitemallBrandDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.configuration.ConfigurationDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.project.ProjectDO;
import cn.iocoder.yudao.module.srbscribe.dal.dataobject.technician.LitemallTechnicianDO;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.brand.LitemallBrandMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.configuration.ConfigurationMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.project.ProjectMapper;
import cn.iocoder.yudao.module.srbscribe.dal.mysql.technician.LitemallTechnicianMapper;
import cn.iocoder.yudao.module.srbscribe.service.brand.LitemallBrandService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import org.springframework.stereotype.Service;
@ -21,6 +20,7 @@ import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import java.util.ArrayList;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -45,6 +45,9 @@ public class LitemallTechnicianServiceImpl implements LitemallTechnicianService
@Resource
private ProjectMapper projectMapper;
@Resource
private ConfigurationMapper configurationMapper;
/**
* 查询技师管理列表
@ -74,7 +77,9 @@ public class LitemallTechnicianServiceImpl implements LitemallTechnicianService
public Long createLitemallTechnician(LitemallTechnicianSaveReqVO createReqVO) {
// 插入
LitemallTechnicianDO litemallTechnician = BeanUtils.toBean(createReqVO, LitemallTechnicianDO.class);
litemallTechnicianMapper.insert(litemallTechnician);
int insert = litemallTechnicianMapper.insert(litemallTechnician);
// 返回
return litemallTechnician.getId();
}
@ -112,23 +117,24 @@ public class LitemallTechnicianServiceImpl implements LitemallTechnicianService
PageResult<LitemallTechnicianDO> litemallTechnicianDOPageResult = litemallTechnicianMapper.selectPage(pageReqVO);
String serviceTime = "";
// String serviceTime = "";
for (int i = 0; i < litemallTechnicianDOPageResult.getList().size(); i++) {
LitemallTechnicianDO litemallTechnicianDO = litemallTechnicianDOPageResult.getList().get(i);
ProjectDO projectDO = projectMapper.selectOne("id", litemallTechnicianDO.getProjectId());
litemallTechnicianDO.setBrandName(projectDO.getName());
if(litemallTechnicianDO.getServiceTime() != null && litemallTechnicianDO.getServiceTime() != ""){
//把StringJSON格式serviceTime转成对象
List<ServiceTimeVO> serviceTimeVOS = JSON.parseObject(litemallTechnicianDO.getServiceTime(), new TypeReference<List<ServiceTimeVO>>() {});
for (int j = 0; j < serviceTimeVOS.size(); j++) {
ServiceTimeVO serviceTimeVO = serviceTimeVOS.get(j);
serviceTime = serviceTime + serviceTimeVO.getStart() + " - " + serviceTimeVO.getEnd() + " , ";
}
String replaceAll = serviceTime.replaceAll(",\\s*$", "");
litemallTechnicianDO.setServiceTimeArray(replaceAll);
serviceTime = "";
}
// if(litemallTechnicianDO.getServiceTime() != null && litemallTechnicianDO.getServiceTime() != ""){
// //把StringJSON格式serviceTime转成对象
// List<ServiceTimeVO> serviceTimeVOS = JSON.parseObject(litemallTechnicianDO.getServiceTime(), new TypeReference<List<ServiceTimeVO>>() {});
// for (int j = 0; j < serviceTimeVOS.size(); j++) {
// ServiceTimeVO serviceTimeVO = serviceTimeVOS.get(j);
// serviceTime = serviceTime + serviceTimeVO.getStart() + " - " + serviceTimeVO.getEnd() + " , ";
// }
// String replaceAll = serviceTime.replaceAll(",\\s*$", "");
// litemallTechnicianDO.setServiceTimeArray(replaceAll);
// serviceTime = "";
// }
}
return litemallTechnicianDOPageResult;
@ -142,4 +148,26 @@ public class LitemallTechnicianServiceImpl implements LitemallTechnicianService
return litemallTechnicianMapper.selectList();
}
@Override
public List<LitemallTechnicianDO> getTechnician(int id) {
List<LitemallTechnicianDO> project_id = litemallTechnicianMapper.selectList("project_id", id);
// String serviceTime = "";
// for (int i = 0; i < project_id.size(); i++) {
// LitemallTechnicianDO litemallTechnicianDO = project_id.get(i);
// if(litemallTechnicianDO.getServiceTime() != null && litemallTechnicianDO.getServiceTime() != ""){
// //把StringJSON格式serviceTime转成对象
// List<ServiceTimeVO> serviceTimeVOS = JSON.parseObject(litemallTechnicianDO.getServiceTime(), new TypeReference<List<ServiceTimeVO>>() {});
// for (int j = 0; j < serviceTimeVOS.size(); j++) {
// ServiceTimeVO serviceTimeVO = serviceTimeVOS.get(j);
// serviceTime = serviceTime + serviceTimeVO.getStart() + " - " + serviceTimeVO.getEnd() + " , ";
// }
// String replaceAll = serviceTime.replaceAll(",\\s*$", "");
// litemallTechnicianDO.setServiceTimeArray(replaceAll);
// serviceTime = "";
// }
// }
return project_id;
}
}