Browse Source

修复下单端系统派单

master
前端-胡立永 2 months ago
parent
commit
48b4dd5c71
31 changed files with 1509 additions and 583 deletions
  1. +2
    -1
      CatmDogd-Mall-Front-test/package.json
  2. +9
    -0
      CatmDogd-Mall-Front-test/src/api/model/AppletOrder.js
  3. +14
    -0
      CatmDogd-Mall-Front-test/src/router/index.js
  4. +523
    -458
      CatmDogd-Mall-Front-test/src/views/model/AppletOrder/index.vue
  5. +26
    -5
      CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/allindex.vue
  6. +52
    -3
      CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/components/ExamInfo.vue
  7. +33
    -5
      CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/index.vue
  8. +6
    -4
      CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/openindex.vue
  9. +1
    -1
      CatmDogd-Mall-Front-test/src/views/model/appletOrderDateFrequency/index.vue
  10. +24
    -4
      CatmDogd-Mall-Front-test/src/views/oms/order/index.vue
  11. +56
    -35
      ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletExaminationController.java
  12. +63
    -21
      ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderController.java
  13. +13
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/AppletAnswerSubmitBo.java
  14. +25
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/filterQualifiedUsersVo.java
  15. +11
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IMallOrderServiceImpl.java
  16. +44
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/job/AppletUserExaminationJob.java
  17. +37
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/job/OrderTimeoutNoticeJob.java
  18. +17
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletOrderController.java
  19. +41
    -14
      ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletOrder.java
  20. +11
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletUsersTeacher.java
  21. +3
    -1
      ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppUsersMapper.java
  22. +8
    -1
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppUsersService.java
  23. +21
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletOrderService.java
  24. +3
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletUsersTeacherService.java
  25. +136
    -1
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppUsersServiceImpl.java
  26. +47
    -16
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletOrderDateFrequencyServiceImpl.java
  27. +229
    -3
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletOrderServiceImpl.java
  28. +11
    -1
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletUsersTeacherServiceImpl.java
  29. +23
    -4
      ruoyi-catdog/src/main/resources/mapper/model/AppletOrderMapper.xml
  30. +13
    -1
      ruoyi-catdog/src/main/resources/mapper/model/AppletUsersTeacherMapper.xml
  31. +7
    -4
      ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java

+ 2
- 1
CatmDogd-Mall-Front-test/package.json View File

@ -41,8 +41,8 @@
"axios": "^0.24.0",
"clipboard": "2.0.8",
"core-js": "3.19.1",
"dayjs": "^1.11.13",
"echarts": "4.9.0",
"v-charts": "^1.19.0",
"element-ui": "2.15.8",
"file-saver": "2.0.5",
"fuse.js": "6.4.3",
@ -56,6 +56,7 @@
"quill": "1.3.7",
"screenfull": "5.0.2",
"sortablejs": "1.10.2",
"v-charts": "^1.19.0",
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",


+ 9
- 0
CatmDogd-Mall-Front-test/src/api/model/AppletOrder.js View File

@ -17,6 +17,15 @@ export function getAppletOrder(id) {
})
}
// 查询订单信息详细-详情
export function getAppletOrderDetail(id) {
return request({
url: '/model/AppletOrder/detail/' + id,
method: 'get'
})
}
// 新增订单信息
export function addAppletOrder(data) {
return request({


+ 14
- 0
CatmDogd-Mall-Front-test/src/router/index.js View File

@ -225,6 +225,20 @@ export const dynamicRoutes = [
}
]
},
{
path: '/model/appletOrder',
component: Layout,
hidden: true,
permissions: ['model:AppletOrder:list'],
children: [
{
path: 'detail',
component: () => import('@/views/model/AppletOrder/detail'),
name: 'appletOrderDetail',
meta: { title: '派单详情' }
}
]
},
]
// 防止连续点击多次路由报错


+ 523
- 458
CatmDogd-Mall-Front-test/src/views/model/AppletOrder/index.vue View File

@ -1,473 +1,538 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px" size="medium" class="ry_form">
<!-- <el-form-item label="支付时间" prop="payTime">-->
<!-- <el-date-picker-->
<!-- clearable-->
<!-- size="small"-->
<!-- v-model="queryParams.payTime"-->
<!-- type="datetime"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
<!-- placeholder="选择支付时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="本单酬劳" prop="price">-->
<!-- <el-input-->
<!-- v-model="queryParams.price"-->
<!-- placeholder="请输入本单酬劳"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="地址" prop="address">-->
<!-- <el-input-->
<!-- v-model="queryParams.address"-->
<!-- placeholder="请输入地址"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="派单类型" prop="type">
<!-- <el-select v-model="queryParams.type" placeholder="请选择派单类型" clearable size="small">-->
<!-- </el-select>-->
<el-select v-model="queryParams.type" placeholder="请选择派单类型" clearable size="small">
<el-option
v-for="dict in dict.type.applet_order_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="接单状态" prop="type">
<!-- <el-select v-model="queryParams.status" placeholder="请选择订单状态" clearable size="small">-->
<!-- </el-select>-->
<el-select v-model="queryParams.status" placeholder="请选择接单状态" clearable size="small">
<el-option
v-for="dict in dict.type.applet_order_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="请输入订单编号" label-width="300" prop="orderSn">
<el-input
v-model="queryParams.orderSn"
placeholder="请输入订单编号"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="关联宠物ID" prop="petId">-->
<!-- <el-input-->
<!-- v-model="queryParams.petId"-->
<!-- placeholder="请输入关联宠物ID"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['model:AppletOrder:add']"
>新增派单信息</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['model:AppletOrder:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['model:AppletOrder:remove']"
>删除</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- :loading="exportLoading"-->
<!-- @click="handleExport"-->
<!-- v-hasPermi="['model:AppletOrder:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="AppletOrderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="客户支付时间" align="center" prop="payTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.payTime, '')}}</span>
</template>
</el-table-column>
<el-table-column label="开始派单时间" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '')}}</span>
</template>
</el-table-column>
<el-table-column label="最新派单时间" align="center" prop="updateTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime, '')}}</span>
</template>
</el-table-column>
<el-table-column label="订单重派时间(min)" align="center" prop="orderTime" />
<el-table-column label="派单类型" align="center" prop="type">
<template slot-scope="scope">
<dict-tag :options="dict.type.applet_order_type" :value="scope.row.type"/>
</template>
</el-table-column>
<el-table-column label="派单伴宠师" align="center" prop="userIdJson" />
<el-table-column label="派单次数" align="center" prop="num" />
<el-table-column label="接单状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.applet_order_status" :value="scope.row.status"/>
</template>
</el-table-column>
<!-- <el-table-column label="唯一标识" align="center" prop="id" />-->
<el-table-column label="接单伴宠师" align="center" prop="userId">
<template slot-scope="scope">
<span style="color: #409eff;" v-if="scope.row.userId">已接单 {{ scope.row.userId }}</span>
<span style="color: #909399;font-style: italic;" v-else>派单中无人接单</span>
</template>
</el-table-column>
<el-table-column label="订单支付金额" align="center" prop="price" />
<el-table-column label="接单详细地址" align="center" prop="address" />
<el-table-column label="订单编号" align="center" prop="orderSn" />
<!-- <el-table-column label="订单类型" align="center" prop="type" v-if="columns[3].visible"/>-->
<!-- <el-table-column label="无法接单原因" align="center" prop="reason"/>-->
<!-- <el-table-column label="关联宠物ID" align="center" prop="petId" v-if="columns[6].visible"/>-->
<!-- <el-table-column label="订单说明" align="center" prop="describeNo" v-if="columns[9].visible"/>-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- v-hasPermi="['model:AppletOrder:edit']"-->
<!-- >修改</el-button>-->
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['model:AppletOrder:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改订单信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px" >
<!-- <el-form-item label="支付时间" prop="payTime">-->
<!-- <el-date-picker clearable size="small"-->
<!-- v-model="form.payTime"-->
<!-- type="datetime"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
<!-- placeholder="选择支付时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<el-form-item label="派单类型" prop="type">
<el-select v-model="form.type" placeholder="请选择派单类型">
<el-option
v-for="dict in dict.type.applet_order_type"
:key="dict.value"
:label="dict.label"
:value="dict.value" ></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="本单酬劳" prop="price">-->
<!-- <el-input v-model="form.price" placeholder="请输入本单酬劳" />-->
<!-- </el-form-item>-->
<el-form-item label="订单标识" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单标识" />
</el-form-item>
<el-form-item label="指定伴宠师" prop="userIdJson">
<el-input v-model="form.userIdJson" placeholder="请输入指定伴宠师标识:如果是指定伴宠师必填,如果是系统派单,则不填" />
</el-form-item>
<!-- <el-form-item label="无法接单原因" prop="reason">-->
<!-- <el-input v-model="form.reason" type="textarea" placeholder="请输入内容" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="订单标识" prop="userId">-->
<!-- <el-input v-model="form.userId" placeholder="请输入订单标识" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="关联宠物ID" prop="petId">-->
<!-- <el-input v-model="form.petId" placeholder="请输入关联宠物ID" />-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px"
size="medium" class="ry_form">
<!-- <el-form-item label="支付时间" prop="payTime">-->
<!-- <el-date-picker-->
<!-- clearable-->
<!-- size="small"-->
<!-- v-model="queryParams.payTime"-->
<!-- type="datetime"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
<!-- placeholder="选择支付时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="本单酬劳" prop="price">-->
<!-- <el-input-->
<!-- v-model="queryParams.price"-->
<!-- placeholder="请输入本单酬劳"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="地址" prop="address">-->
<!-- <el-input-->
<!-- v-model="queryParams.address"-->
<!-- placeholder="请输入地址"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="派单类型" prop="type">
<!-- <el-select v-model="queryParams.type" placeholder="请选择派单类型" clearable size="small">-->
<!-- </el-select>-->
<el-select v-model="queryParams.type" placeholder="请选择派单类型" clearable size="small">
<el-option v-for="dict in dict.type.applet_order_type" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="接单状态" prop="type">
<!-- <el-select v-model="queryParams.status" placeholder="请选择订单状态" clearable size="small">-->
<!-- </el-select>-->
<el-select v-model="queryParams.status" placeholder="请选择接单状态" clearable size="small">
<el-option v-for="dict in dict.type.applet_order_status" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="请输入订单编号" label-width="300" prop="orderSn">
<el-input v-model="queryParams.orderSn" placeholder="请输入订单编号" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<!-- <el-form-item label="关联宠物ID" prop="petId">-->
<!-- <el-input-->
<!-- v-model="queryParams.petId"-->
<!-- placeholder="请输入关联宠物ID"-->
<!-- clearable-->
<!-- size="small"-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item class="flex_one tr">
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['model:AppletOrder:add']">新增派单信息</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="success"-->
<!-- plain-->
<!-- icon="el-icon-edit"-->
<!-- size="mini"-->
<!-- :disabled="single"-->
<!-- @click="handleUpdate"-->
<!-- v-hasPermi="['model:AppletOrder:edit']"-->
<!-- >修改</el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
@click="handleDelete" v-hasPermi="['model:AppletOrder:remove']">删除</el-button>
</el-col>
<!-- <el-col :span="1.5">-->
<!-- <el-button-->
<!-- type="warning"-->
<!-- plain-->
<!-- icon="el-icon-download"-->
<!-- size="mini"-->
<!-- :loading="exportLoading"-->
<!-- @click="handleExport"-->
<!-- v-hasPermi="['model:AppletOrder:export']"-->
<!-- >导出</el-button>-->
<!-- </el-col>-->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="AppletOrderList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="订单编号" align="center" prop="orderSn" />
<el-table-column label="客户支付时间" align="center" prop="payTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.payTime, '') }}</span>
</template>
</el-table-column>
<el-table-column label="开始派单时间" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '') }}</span>
</template>
</el-table-column>
<!-- 需要的字段 createType -->
<el-table-column label="开始派单类型" align="center" prop="createType">
<template slot-scope="scope">
<dict-tag :options="dict.type.applet_order_type" :value="scope.row.createType" />
</template>
</el-table-column>
<!-- 需要的字段 newOrderTime -->
<el-table-column label="最新派单时间" align="center" prop="newOrderTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.newOrderTime, '') }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="订单重派时间(min)" align="center" prop="orderTime" /> -->
<el-table-column label="最新派单类型" align="center" prop="type">
<template slot-scope="scope">
<dict-tag :options="dict.type.applet_order_type" :value="scope.row.type" />
</template>
</el-table-column>
<!-- 需要的字段 acceptTime -->
<el-table-column label="订单接单时间" align="center" prop="acceptTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.acceptTime, '') }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="派单伴宠师" align="center" prop="userIdJson" /> -->
<!-- <el-table-column label="派单次数" align="center" prop="num" /> -->
<el-table-column label="接单状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.applet_order_status" :value="scope.row.status" />
</template>
</el-table-column>
<!-- <el-table-column label="唯一标识" align="center" prop="id" />-->
<el-table-column label="最终接单伴宠师" align="center" prop="userId">
<template slot-scope="scope">
<span style="color: #409eff;" v-if="scope.row.userId && getAppUsersPhone(scope.row.userId)">{{ getAppUsersPhone(scope.row.userId) }}</span>
<span style="color: #f00;" v-else-if="scope.row.userId">伴宠师已离职/已不是伴宠师</span>
<span style="color: #909399;font-style: italic;" v-else>无人接单</span>
</template>
</el-table-column>
<!-- 需要的字段 whenTakOrders -->
<el-table-column label="接单用时(h)" align="center" prop="whenTakOrders">
<template slot-scope="scope">
<span v-if="scope.row.whenTakOrders">{{ (scope.row.whenTakOrders / 3600).toFixed(2) }}h</span>
</template>
</el-table-column>
<el-table-column label="订单支付金额" align="center" prop="price" />
<el-table-column label="接单详细地址" align="center" prop="address" />
<!-- <el-table-column label="订单类型" align="center" prop="type" v-if="columns[3].visible"/>-->
<!-- <el-table-column label="无法接单原因" align="center" prop="reason"/>-->
<!-- <el-table-column label="关联宠物ID" align="center" prop="petId" v-if="columns[6].visible"/>-->
<!-- <el-table-column label="订单说明" align="center" prop="describeNo" v-if="columns[9].visible"/>-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="text"-->
<!-- icon="el-icon-edit"-->
<!-- @click="handleUpdate(scope.row)"-->
<!-- v-hasPermi="['model:AppletOrder:edit']"-->
<!-- >修改</el-button>-->
<el-button size="mini" type="text" icon="el-icon-delete" @click="toOrderInfo(scope.row)"
v-hasPermi="['model:AppletOrder:remove']">查看订单信息</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="toOrderDetail(scope.row)"
v-hasPermi="['model:AppletOrder:remove']">查看派单详情</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['model:AppletOrder:remove']">删除派单记录</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleUpdate(scope.row)"
v-hasPermi="['model:AppletOrder:remove']">修改派单记录</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 添加或修改订单信息对话框 -->
<el-dialog :title="title" :visible.sync="open" width="50%" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="108px">
<!-- <el-form-item label="支付时间" prop="payTime">-->
<!-- <el-date-picker clearable size="small"-->
<!-- v-model="form.payTime"-->
<!-- type="datetime"-->
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
<!-- placeholder="选择支付时间">-->
<!-- </el-date-picker>-->
<!-- </el-form-item>-->
<el-form-item label="派单类型" prop="type">
<el-select v-model="form.type" placeholder="请选择派单类型">
<el-option v-for="dict in dict.type.applet_order_type" :key="dict.value" :label="dict.label"
:value="dict.value"></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="本单酬劳" prop="price">-->
<!-- <el-input v-model="form.price" placeholder="请输入本单酬劳" />-->
<!-- </el-form-item>-->
<el-form-item label="订单标识" prop="orderId">
<el-input v-model="form.orderId" placeholder="请输入订单标识" />
</el-form-item>
<el-form-item label="指定伴宠师" prop="userIdJson" v-if="form.type == 1">
<el-select v-model="form.userIdJson" placeholder="请选择指定伴宠师" multiple>
<el-option v-for="item in getAppUsersUserBcs" :key="item.userId"
:label="item.userName + '(' + item.userTelephone + ')'" :value="item.userId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="伴宠师等级" prop="companionLevel" v-if="form.type == 0">
<el-select v-model="form.companionLevel" placeholder="请选择伴宠师等级">
<el-option label="无" :value="0" />
<el-option label="初级伴宠师" :value="1" />
<el-option label="高级伴宠师" :value="2" />
</el-select>
</el-form-item>
<!-- <el-form-item label="无法接单原因" prop="reason">-->
<!-- <el-input v-model="form.reason" type="textarea" placeholder="请输入内容" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="订单标识" prop="userId">-->
<!-- <el-input v-model="form.userId" placeholder="请输入订单标识" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="关联宠物ID" prop="petId">-->
<!-- <el-input v-model="form.petId" placeholder="请输入关联宠物ID" />-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listAppletOrder, getAppletOrder, delAppletOrder, addAppletOrder, updateAppletOrder, exportAppletOrder } from "@/api/model/AppletOrder";
import { listAppUsers } from "@/api/model/AppUsers";
export default {
name: "AppletOrder",
dicts: ['applet_order_status','applet_order_type'],
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
AppletOrderList: [],
//
title: "新增派单信息",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
payTime: null,
price: null,
status: null,
address: null,
type: null,
reason: null,
userId: null,
petId: null,
num:null,
userIdJson: null,
orderSn:null,
orderId: null,
orderTime:null
},
//
form: {},
//
rules: {
createBy: [
{ required: true, message: "创建者不能为空", trigger: "blur" }
],
price: [
{ required: true, message: "本单酬劳不能为空", trigger: "blur" }
],
orderId: [
{ required: true, message: "客户下单订单标识不能为空", trigger: "blur" }
],
type: [
{ required: true, message: "派单类型不能为空", trigger: "change" }
],
userId: [
{ required: true, message: "关联服务者ID不能为空", trigger: "blur" }
],
petId: [
{ required: true, message: "关联宠物ID不能为空", trigger: "blur" }
],
},
columns: [
{ key: 5, label: "支付时间", visible: true },
{ key: 6, label: "本单酬劳", visible: true },
{ key: 7, label: "地址", visible: true },
{ key: 8, label: "订单类型", visible: true },
{ key: 9, label: "无法接单原因", visible: true },
{ key: 10, label: "关联服务者ID", visible: false },
{ key: 11, label: "关联宠物ID", visible: false },
],
};
},
created() {
this.getList();
},
methods: {
/** 查询订单信息列表 */
getList() {
this.loading = true;
listAppletOrder(this.queryParams).then(response => {
this.AppletOrderList = response.rows;
this.total = response.total;
this.loading = false;
});
name: "AppletOrder",
dicts: ['applet_order_status', 'applet_order_type'],
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
AppletOrderList: [],
//
appUsersList: [],
//
title: "新增派单信息",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
payTime: null,
price: null,
status: null,
address: null,
type: null,
reason: null,
userId: null,
petId: null,
num: null,
userIdJson: null,
orderSn: null,
orderId: null,
orderTime: null
},
//
form: {},
//
rules: {
createBy: [
{ required: true, message: "创建者不能为空", trigger: "blur" }
],
price: [
{ required: true, message: "本单酬劳不能为空", trigger: "blur" }
],
orderId: [
{ required: true, message: "客户下单订单标识不能为空", trigger: "blur" }
],
type: [
{ required: true, message: "派单类型不能为空", trigger: "change" }
],
userId: [
{ required: true, message: "关联服务者ID不能为空", trigger: "blur" }
],
petId: [
{ required: true, message: "关联宠物ID不能为空", trigger: "blur" }
],
companionLevel: [
{ required: true, message: "伴宠师等级不能为空", trigger: "blur" },
{ min: 1, max: 2, message: "伴宠师等级只能为初级或高级", trigger: "blur" }
],
userIdJson: [
{ required: true, message: "指定伴宠师不能为空", trigger: "blur" }
],
},
columns: [
{ key: 5, label: "支付时间", visible: true },
{ key: 6, label: "本单酬劳", visible: true },
{ key: 7, label: "地址", visible: true },
{ key: 8, label: "订单类型", visible: true },
{ key: 9, label: "无法接单原因", visible: true },
{ key: 10, label: "关联服务者ID", visible: false },
{ key: 11, label: "关联宠物ID", visible: false },
],
};
},
//
cancel() {
this.open = false;
this.reset();
computed: {
getAppUsersUserBcs() {
return this.appUsersList.filter(item => item.userBcs == 1)
},
},
//
reset() {
this.form = {
id: null,
createTime: null,
createBy: null,
updateTime: null,
updateBy: null,
payTime: null,
status: null,
price: null,
address: null,
type: null,
reason: null,
userId: null,
petId: null,
num:null,
userIdJson: null,
orderSn:null,
orderId: null,
orderTime:null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getAppletOrder(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改订单信息";
});
created() {
this.getList();
this.listAppUsers();
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateAppletOrder(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
methods: {
//userId
getAppUsersPhone(userId) {
let data = this.appUsersList.find(item => item.userId == userId);
if (data) {
return data.userTelephone;
} else {
return '';
}
},
listAppUsers() {
listAppUsers({
pageNum: 1,
pageSize: 99999999,
userBcs: 1,
}).then(response => {
this.appUsersList = response.rows;
});
} else {
addAppletOrder(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
},
/** 查询订单信息列表 */
getList() {
this.loading = true;
listAppletOrder(this.queryParams).then(response => {
this.AppletOrderList = response.rows;
this.total = response.total;
this.loading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单信息编号为"' + ids + '"的数据项?').then(function() {
return delAppletOrder(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有订单信息数据项?').then(() => {
this.exportLoading = true;
return exportAppletOrder(queryParams);
}).then(response => {
this.download(response.msg);
this.exportLoading = false;
}).catch(() => {});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
createTime: null,
createBy: null,
updateTime: null,
updateBy: null,
payTime: null,
status: null,
price: null,
address: null,
type: null,
reason: null,
userId: null,
petId: null,
num: null,
userIdJson: null,
orderSn: null,
orderId: null,
orderTime: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加订单信息";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getAppletOrder(id).then(response => {
this.form = response.data;
this.form.userIdJson = this.form.userIdJson ? this.form.userIdJson.split(',').map(item => Number(item)) : [];
this.open = true;
this.title = "修改订单信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.form.userIdJson = this.form.userIdJson ? this.form.userIdJson.join(',') : '';
if (this.form.id != null) {
updateAppletOrder(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addAppletOrder(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除订单信息编号为"' + ids + '"的数据项?').then(function () {
return delAppletOrder(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => { });
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有订单信息数据项?').then(() => {
this.exportLoading = true;
return exportAppletOrder(queryParams);
}).then(response => {
this.download(response.msg);
this.exportLoading = false;
}).catch(() => { });
},
//
toOrderInfo(row) {
this.$router.push({
path: '/order/order',
query: { orderSn: row.orderSn }
});
},
toOrderDetail(row) {
this.$router.push({
path: '/model/appletOrder/detail',
query: { id: row.id }
});
},
}
}
};
</script>

+ 26
- 5
CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/allindex.vue View File

@ -154,8 +154,24 @@
</el-table-column>
<el-table-column label="手机号" align="center" prop="phone" />
<el-table-column label="养宠经验" align="center" prop="experience" />
<el-table-column label="是否有专业执照" align="center" prop="isHave"/>
<el-table-column label="个人宠物类型" align="center" prop="petType" />
<el-table-column label="是否有专业执照" align="center" prop="isHave">
<template slot-scope="scope">
<el-tag v-if="scope.row.isHave" type="success"></el-tag>
<el-tag v-else type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column label="个人宠物类型" align="center" prop="petType" >
<template slot-scope="scope">
<el-tag v-for="item in scope.row.petType
&&
scope.row.petType.split(',')"
:key="item" type="success">{{ {
'3': '猫',
'4': '狗',
'5': '异宠'
}[item] }}</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="审核状态" align="center" prop="status" />-->
<el-table-column label="审核图片" align="center" prop="审核图片">
@ -236,11 +252,16 @@
<el-input v-model="form.experience" placeholder="请输入养宠经验" disabled />
</el-form-item>
<el-form-item label="是否有专业执照" prop="isHave">
<el-input v-model="form.isHave" placeholder="请输入是否有专业执照" disabled/>
<el-select v-model="form.isHave" placeholder="请选择是否有专业执照">
<el-option label="是" :value="1" />
<el-option label="否" :value="0" />
</el-select>
</el-form-item>
<el-form-item label="个人宠物类型" prop="petType">
<el-select v-model="form.petType" placeholder="请选择个人宠物类型" disabled>
<el-option label="请选择字典生成" value="" />
<el-select v-model="form.petType" placeholder="请选择个人宠物类型" multiple>
<el-option label="猫" value="3" />
<el-option label="狗" value="4" />
<el-option label="异宠" value="5" />
</el-select>
</el-form-item>


+ 52
- 3
CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/components/ExamInfo.vue View File

@ -11,8 +11,57 @@
</el-descriptions>
</el-tab-pane> -->
<el-tab-pane label="答题详情" name="answers">
<div v-for="(question, index) in examInfo.answerList" :key="index" class="question-item">
<el-tab-pane label="基本考核" name="base">
<div v-for="(question, index) in examInfo.answerList.filter(n => n.type != '培训')" :key="index" class="question-item">
<div class="question-title">
<span class="question-index">{{ index + 1 }}.</span>
<span class="question-type">[{{ question.type === '培训' ? '填空题' : '选择题' }}]</span>
<span v-if="!isQuestionAnswered(question)" class="unanswered-tag">未答题</span>
<span class="question-content">{{ question.title }}</span>
</div>
<!-- 填空题答案 -->
<template v-if="question.type === '培训'">
<div class="answer-content">
<div class="answer-label">答案</div>
<div class="answer-text" :class="{ 'no-answer': !isQuestionAnswered(question) }">
{{ question.userAppletAnswerTrain && question.userAppletAnswerTrain.answer || '暂无答案' }}
</div>
<div class="answer-requirement">最少字数要求{{ question.numberWords }}</div>
</div>
</template>
<!-- 选择题答案 -->
<template v-else>
<div v-if="!isQuestionAnswered(question)" class="no-answer-tip">
<i class="el-icon-warning"></i>
该题目尚未作答
</div>
<div v-else class="options-list">
<div v-for="option in question.answerList" :key="option.orderNo"
:class="['option-item', {
'correct': option.isTrue,
'selected': isOptionSelected(question, option.id),
'wrong-selected': isOptionSelected(question, option.id) && !option.isTrue
}]">
<span class="option-label">{{ String.fromCharCode(64 + option.orderNo) }}.</span>
<span class="option-content">{{ option.title }}</span>
<span v-if="option.isTrue" class="correct-tag">正确答案</span>
<span v-if="isOptionSelected(question, option.id)"
:class="['selected-tag', { 'wrong-tag': !option.isTrue }]">
{{ option.isTrue ? '已选择' : '错误选择' }}
</span>
</div>
</div>
<div class="answer-result" :class="{ 'correct': isAnswerCorrect(question), 'wrong': !isAnswerCorrect(question) }">
<i :class="['el-icon-' + (isAnswerCorrect(question) ? 'success' : 'error')]"></i>
{{ isAnswerCorrect(question) ? '回答正确' : '回答错误' }}
</div>
</template>
</div>
</el-tab-pane>
<el-tab-pane label="培训考核" name="answers">
<div v-for="(question, index) in examInfo.answerList.filter(n => n.type == '培训')" :key="index" class="question-item">
<div class="question-title">
<span class="question-index">{{ index + 1 }}.</span>
<span class="question-type">[{{ question.type === '培训' ? '填空题' : '选择题' }}]</span>
@ -86,7 +135,7 @@ export default {
data() {
return {
loading: false,
activeTab: 'answers',
activeTab: 'base',
// examInfo: {
// name: '',
// phone: '',


+ 33
- 5
CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/index.vue View File

@ -154,8 +154,24 @@
</el-table-column>
<el-table-column label="手机号" align="center" prop="phone" />
<el-table-column label="养宠经验" align="center" prop="experience" />
<el-table-column label="是否有专业执照" align="center" prop="isHave"/>
<el-table-column label="个人宠物类型" align="center" prop="petType" />
<el-table-column label="是否有专业执照" align="center" prop="isHave">
<template slot-scope="scope">
<el-tag v-if="scope.row.isHave" type="success"></el-tag>
<el-tag v-else type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column label="个人宠物类型" align="center" prop="petType" >
<template slot-scope="scope">
<el-tag v-for="item in scope.row.petType
&&
scope.row.petType.split(',')"
:key="item" type="success">{{ {
'3': '猫',
'4': '狗',
'5': '异宠'
}[item] }}</el-tag>
</template>
</el-table-column>
<!-- <el-table-column label="审核状态" align="center" prop="status" />-->
<el-table-column label="审核图片" align="center" prop="审核图片">
@ -227,12 +243,20 @@
<el-form-item label="养宠经验" prop="experience">
<el-input v-model="form.experience" placeholder="请输入养宠经验" />
</el-form-item>
<el-form-item label="已答题次数" prop="examNumber">
<el-input v-model="form.examNumber" placeholder="请输入已答题次数" />
</el-form-item>
<el-form-item label="是否有专业执照" prop="isHave">
<el-input v-model="form.isHave" placeholder="请输入是否有专业执照" />
<el-select v-model="form.isHave" placeholder="请选择是否有专业执照">
<el-option label="是" :value="1" />
<el-option label="否" :value="0" />
</el-select>
</el-form-item>
<el-form-item label="个人宠物类型" prop="petType">
<el-select v-model="form.petType" placeholder="请选择个人宠物类型">
<el-option label="请选择字典生成" value="" />
<el-select v-model="form.petType" placeholder="请选择个人宠物类型" multiple>
<el-option label="猫" value="3" />
<el-option label="狗" value="4" />
<el-option label="异宠" value="5" />
</el-select>
</el-form-item>
<el-form-item label="审核状态" prop="status">
@ -433,6 +457,9 @@ export default {
const id = row.id || this.ids
getAppletUsersTeacher(id).then(response => {
this.form = response.data;
this.form.petType = this.form.petType ? this.form.petType.split(',') : [];
this.open = true;
this.title = "修改伴宠师认证";
});
@ -441,6 +468,7 @@ export default {
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.form.petType = this.form.petType.join(',');
if (this.form.id != null) {
updateAppletUsersTeacher(this.form).then(response => {
this.$modal.msgSuccess("修改成功");


+ 6
- 4
CatmDogd-Mall-Front-test/src/views/model/AppletUsersTeacher/openindex.vue View File

@ -205,7 +205,10 @@
:value="parseInt(dict.value)"></el-option>
</el-select>
</el-form-item>
<el-form-item label="关联用户" prop="userId">
<el-form-item label="驳回原因" prop="reason" v-if="form.status == 2">
<el-input v-model="form.reason" placeholder="请输入驳回原因" type="textarea" :rows="3" />
</el-form-item>
<!-- <el-form-item label="关联用户" prop="userId">
<el-input v-model="form.userId" placeholder="请输入关联用户" disabled />
</el-form-item>
<el-form-item label="姓名" prop="name">
@ -242,7 +245,6 @@
</el-form-item>
<el-form-item label="审核图片">
<!-- <imageUpload v-model="form.images"/>-->
<oss-image-upload v-model="form.images" :limit="1"></oss-image-upload>
</el-form-item>
<el-form-item label="所在地区" prop="area">
@ -250,7 +252,7 @@
</el-form-item>
<el-form-item label="详细地址" prop="address">
<el-input v-model="form.address" placeholder="请输入详细地址" disabled />
</el-form-item>
</el-form-item> -->
<!-- <el-form-item label="经度" prop="longitude">-->
<!-- <el-input v-model="form.longitude" placeholder="请输入经度" />-->
<!-- </el-form-item>-->
@ -432,7 +434,7 @@ export default {
getAppletUsersTeacher(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改伴宠师认证";
this.title = "审核伴宠师认证";
});
},
/** 提交按钮 */


+ 1
- 1
CatmDogd-Mall-Front-test/src/views/model/appletOrderDateFrequency/index.vue View File

@ -158,7 +158,7 @@
</div>
</template>
</el-table-column>
<el-table-column label="宠物" align="center" prop="status" v-if="columns[7].visible">
<el-table-column label="宠物" align="center" prop="status" v-if="columns[7].visible" width="300px">
<template slot-scope="scope">
<div style="display: flex; align-items: center; justify-content: center;"
v-for="(pet, index) in scope.row.pets"


+ 24
- 4
CatmDogd-Mall-Front-test/src/views/oms/order/index.vue View File

@ -431,13 +431,16 @@ export default {
const res = await isStarRepo('zccbbg', 'RuoYi-Mall', this.userId, 'https://mall.ichengle.top/order/order', 'ruoyi-mall-商城', 'https://gitee.com/zccbbg/RuoYi-Mall')
this.show = res;
if (res) {
const {phone, status, today} = this.$route.query
const {phone, status, today, orderSn} = this.$route.query
if (phone) {
this.queryParams.userPhone = phone
}
if (status) {
this.queryParams.status = status
}
if (orderSn) {
this.queryParams.orderSn = orderSn
}
if (today) {
this.setToday()
}
@ -616,6 +619,7 @@ export default {
case 2:
return 'primary';
case 3:
case 11:
return 'success';
case 4:
return 'warning';
@ -624,19 +628,35 @@ export default {
}
},
getOrderStatusText(status) {
// switch (status) {
// case 0:
// return '';
// case 1:
// return '';
// case 2:
// return '';
// case 3:
// return '';
// case 4:
// return '';
// case 5:
// return '';
// }
switch (status) {
case 0:
return '待付款';
case 1:
return '待派单';
return '待单';
case 2:
return '已派单';
return '已单';
case 3:
return '已完成';
case 4:
return '已关闭';
case 5:
return '无效订单';
case 11:
return '服务中';
}
},
getLogEvent(status) {
@ -649,7 +669,7 @@ export default {
return '平台管理员派单';
case 3:
return '平台管理员完成订单';
case 4:
case 4:
return '取消订单';
case 5:
return '无效订单';


+ 56
- 35
ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletExaminationController.java View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.applet.pojo.dto.AppletAnswerSubmitBo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.JsonUtils;
import com.ruoyi.model.domain.*;
@ -13,8 +14,11 @@ import com.ruoyi.model.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@Api(description = "伴宠师-伴宠师考核")
@ -220,38 +224,51 @@ public class ApiAppletExaminationController {
}
// @ApiOperation("伴宠师工作台-添加用户基本考核答案")
// @PostMapping("/addBaseAnswer")
// public AjaxResult addBaseAnswer(@RequestBody String list){
//
// if (StringUtils.isBlank(list)){
// return AjaxResult.error("list不能为空");
// }
//
// List<AppletAnswerBase> answerBase = JsonUtils.parseArray(list, AppletAnswerBase.class);
//
// Long userId = null;
//
// for (AppletAnswerBase appletAnswerBase : answerBase) {
// if(appletAnswerBase.getUserId() == null){
// return AjaxResult.error("userId用户信息标识不能为空");
// }
// if(appletAnswerBase.getQuestionId() == null){
// return AjaxResult.error("questionId标识不能为空");
// }
// userId = appletAnswerBase.getUserId();
// }
//
//
//// //选删除之前的答案再去添加新的
// LambdaQueryWrapper<AppletAnswerBase> qw = Wrappers.<AppletAnswerBase>lambdaQuery()
// .eq(AppletAnswerBase::getUserId, userId);
//
// appletAnswerBaseService.remove(qw);
//
// return toAjax(appletAnswerBaseService.saveBatch(answerBase));
// }
@ApiOperation("伴宠师工作台-添加用户基本考核答案V2")
@PostMapping("/addBaseAnswerV2")
@Transactional
public AjaxResult addBaseAnswerV2(@RequestBody AppletAnswerSubmitBo answerSubmitBo){
Long userId = null;
for (AppletAnswerBase appletAnswerBase : answerSubmitBo.getAnswerBase()) {
if(appletAnswerBase.getUserId() == null){
return AjaxResult.error("userId用户信息标识不能为空");
}
if(appletAnswerBase.getQuestionId() == null){
return AjaxResult.error("questionId标识不能为空");
}
userId = appletAnswerBase.getUserId();
}
// //选删除之前的答案再去添加新的
LambdaQueryWrapper<AppletAnswerBase> qw = Wrappers.<AppletAnswerBase>lambdaQuery()
.eq(AppletAnswerBase::getUserId, userId);
appletAnswerBaseService.remove(qw);
AppletUsersTeacher byId = appletUsersTeacherService.lambdaQuery()
.eq(AppletUsersTeacher::getUserId, userId).one();
//累计考试次数
if (ObjectUtils.isNotEmpty(byId)){
Integer examNumber = byId.getExamNumber() == null ? 0 : byId.getExamNumber();
byId.setExamNumber(examNumber + 1);
byId.setExamTime(LocalDateTime.now());
appletUsersTeacherService.updateById(byId);
}
return toAjax(appletAnswerBaseService.saveBatch(answerSubmitBo.getAnswerBase()));
}
@ApiOperation("伴宠师工作台-查询考试结果对象")
@GetMapping("/getAnswerBuildData")
public AjaxResult getAnswerBuildData(Long userId){
AppletUsersTeacher teacher = appletUsersTeacherService.selectAppletUsersTeacherByUserId(userId);
appletUsersTeacherService.buildData(teacher);
return AjaxResult.success(teacher);
}
@ApiOperation("伴宠师工作台-查询用户培训考核答案列表")
@ -324,12 +341,15 @@ public class ApiAppletExaminationController {
@ApiOperation("伴宠师工作台-重新考试")
@GetMapping("/retakeExam")
public AjaxResult retakeExam(Long userId){
public AjaxResult retakeExam(Long userId, Integer type){
LambdaQueryWrapper<AppletAnswerBase> qw1 = Wrappers.<AppletAnswerBase>lambdaQuery()
.eq(AppletAnswerBase::getUserId, userId);
if (type == 0){//清除基本考核
LambdaQueryWrapper<AppletAnswerBase> qw1 = Wrappers.<AppletAnswerBase>lambdaQuery()
.eq(AppletAnswerBase::getUserId, userId);
appletAnswerBaseMapper.delete(qw1);
appletAnswerBaseMapper.delete(qw1);
}
LambdaQueryWrapper<AppletAnswerTrain> qw2 = Wrappers.<AppletAnswerTrain>lambdaQuery()
.eq(AppletAnswerTrain::getUserId, userId);
@ -342,6 +362,7 @@ public class ApiAppletExaminationController {
if (ObjectUtils.isNotEmpty(one)){
one.setStatus(0L);
one.setReason("");
appletUsersTeacherService.updateById(one);
}


+ 63
- 21
ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiAppletOrderController.java View File

@ -8,10 +8,13 @@ import com.cyl.h5.service.H5OrderService;
import com.cyl.h5.service.H5PetCareService;
import com.cyl.h5.service.H5PetService;
import com.cyl.manager.oms.domain.OmsOrderService;
import com.cyl.manager.oms.domain.Order;
import com.cyl.manager.oms.domain.OrderItem;
import com.cyl.manager.oms.domain.OrderOperateHistory;
import com.cyl.manager.oms.mapper.OmsOrderServiceMapper;
import com.cyl.manager.oms.mapper.OrderItemMapper;
import com.cyl.manager.oms.mapper.OrderMapper;
import com.cyl.manager.oms.mapper.OrderOperateHistoryMapper;
import com.cyl.manager.oms.service.OrderService;
import com.cyl.manager.ums.domain.Pet;
import com.cyl.manager.ums.domain.PetCare;
@ -21,9 +24,11 @@ import com.ruoyi.applet.pojo.dto.AppletOrderDateVo;
import com.ruoyi.applet.pojo.vo.AppletOrderDateAddressReturn;
import com.ruoyi.applet.pojo.vo.AppletOrderDateVoReturn;
import com.ruoyi.applet.service.IMallOrderService;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.model.domain.*;
@ -40,6 +45,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
@ -95,6 +101,10 @@ public class ApiAppletOrderController extends BaseController {
@Autowired
private IAppletOrderDateFrequencyService appletOrderDateFrequencyService;
@Autowired
private OrderOperateHistoryMapper orderOperateHistoryMapper;
@ApiOperation("接单大厅列表-带分页")
@GetMapping("/list")
@ -520,7 +530,7 @@ public class ApiAppletOrderController extends BaseController {
@ApiOperation("接单大厅 - 立即接单")
@PostMapping("/startByOrderId")
@Synchronized
@Transactional
@Transactional(timeout = 30)
public AjaxResult startByOrderId(@RequestBody AppletOrder appletOrder){
if(appletOrder.getId() == null){
return AjaxResult.error("订单标识不能为空");
@ -530,6 +540,9 @@ public class ApiAppletOrderController extends BaseController {
}
AppletOrder order = appletOrderService.selectAppletOrderById(appletOrder.getId());
if (order == null){
return AjaxResult.error("无效订单");
}
if(order.getStatus() == 1){
return AjaxResult.error("该订单已被接单");
}
@ -573,27 +586,38 @@ public class ApiAppletOrderController extends BaseController {
appletOrderItemService.insertAppletOrderItem(appletOrderItem);
appletOrder.setStatus(1);
appletOrderService.updateAppletOrder(appletOrder);
order.setStatus(1);//修改状态成已接单
order.setUserId(appletOrder.getUserId());//
order.setAcceptTime(LocalDateTime.now());//接单时间
order.setWhenTakOrders(ChronoUnit.SECONDS.between(order.getPayTime(), order.getAcceptTime()));//接单用时
// 只更新必要的字段
appletOrderService.lambdaUpdate()
.eq(AppletOrder::getId, order.getId())
.set(AppletOrder::getStatus, order.getStatus())
.set(AppletOrder::getUserId, order.getUserId())
.set(AppletOrder::getAcceptTime, order.getAcceptTime())
.set(AppletOrder::getWhenTakOrders, order.getWhenTakOrders())
.update();
H5OrderVO h5OrderVO = h5OrderService.orderDetail(order.getOrderId());
//根据服务频率 服务日期 生成日订单
for (OmsOrderService service : h5OrderVO.getOrderServiceList()) {
AppletOrderItemDate appletOrderItemDate = new AppletOrderItemDate();
appletOrderItemDate.setUserId(appletOrder.getUserId());
appletOrderItemDate.setOrderId(id);
appletOrderItemDate.setStatus(0);
appletOrderItemDate.setOrderServiceId(service.getId());
appletOrderItemDate.setServiceDate(service.getServiceDate());
appletOrderItemDate.setCityAddress(h5OrderVO.getReceiverProvince() + h5OrderVO.getReceiverCity() + h5OrderVO.getReceiverDistrict());
appletOrderItemDate.setAddress(h5OrderVO.getReceiverDetailAddress());
appletOrderItemDateService.insertAppletOrderItemDate(appletOrderItemDate);
}
H5OrderVO h5OrderVO = h5OrderService.orderDetail(order.getOrderId());
//根据服务频率 服务日期 生成日订单 废弃
// for (OmsOrderService service : h5OrderVO.getOrderServiceList()) {
// AppletOrderItemDate appletOrderItemDate = new AppletOrderItemDate();
//
// appletOrderItemDate.setUserId(appletOrder.getUserId());
// appletOrderItemDate.setOrderId(id);
// appletOrderItemDate.setStatus(0);
// appletOrderItemDate.setOrderServiceId(service.getId());
// appletOrderItemDate.setServiceDate(service.getServiceDate());
// appletOrderItemDate.setCityAddress(h5OrderVO.getReceiverProvince() + h5OrderVO.getReceiverCity() + h5OrderVO.getReceiverDistrict());
// appletOrderItemDate.setAddress(h5OrderVO.getReceiverDetailAddress());
// appletOrderItemDateService.insertAppletOrderItemDate(appletOrderItemDate);
// }
//TODO 这里需要优化流失订单的逻辑
//生成其他人的流失订单
String[] split = order.getUserIdJson().split(",");
@ -641,14 +665,32 @@ public class ApiAppletOrderController extends BaseController {
}
//生成下单小程序的订单记录
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getOrderId());
optHistory.setOrderSn(order.getOrderSn());
optHistory.setOperateMan("接单伴宠师-" + order.getUserId());
optHistory.setOrderStatus(Constants.H5OrderStatus.DELIVERED);
optHistory.setCreateTime(LocalDateTime.now());
optHistory.setCreateBy(order.getUserId());
optHistory.setUpdateBy(order.getUserId());
optHistory.setUpdateTime(LocalDateTime.now());
orderOperateHistoryMapper.insert(optHistory);
//修改下单小程序的订单状态
Order omsOrder = orderMapper.selectById(order.getOrderId());
if (omsOrder != null && omsOrder.getStatus() == Constants.H5OrderStatus.NOT_DELIVERED){
omsOrder.setStatus(Constants.H5OrderStatus.DELIVERED);
orderMapper.updateById(omsOrder);
}else {
throw new ServiceException("订单已被接单");
}
// 生成日订单数据
appletOrderDateFrequencyService.aceptOrdersGenerateDayOrdersByOrderVO(h5OrderVO, appletOrder.getUserId());
return AjaxResult.success("接单成功",appletOrder);
}


+ 13
- 0
ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/AppletAnswerSubmitBo.java View File

@ -0,0 +1,13 @@
package com.ruoyi.applet.pojo.dto;
import com.ruoyi.model.domain.AppletAnswerBase;
import lombok.Data;
import java.util.List;
@Data
public class AppletAnswerSubmitBo {
private List<AppletAnswerBase> answerBase;
}

+ 25
- 0
ruoyi-catdog/src/main/java/com/ruoyi/applet/pojo/dto/filterQualifiedUsersVo.java View File

@ -0,0 +1,25 @@
package com.ruoyi.applet.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class filterQualifiedUsersVo {
/** 指定的伴宠师等级 */
private Integer companionLevel;
/** 经度 */
private Double longitude;
/** 纬度 */
private Double latitude;
private Long orderId;
}

+ 11
- 0
ruoyi-catdog/src/main/java/com/ruoyi/applet/service/impl/IMallOrderServiceImpl.java View File

@ -106,6 +106,10 @@ public class IMallOrderServiceImpl implements IMallOrderService {
appletOrder.setCompanionLevel(h5OrderVO.getCompanionLevel());
appletOrder.setLongitude(Double.valueOf(h5OrderVO.getLongitude()));
appletOrder.setLatitude(Double.valueOf(h5OrderVO.getLatitude()));
appletOrder.setCreateType(appletOrder.getType());//开始接单类型
appletOrder.setNewOrderTime(LocalDateTime.now());//最新派单时间
appletOrderService.insertAppletOrder(appletOrder);
@ -173,6 +177,10 @@ public class IMallOrderServiceImpl implements IMallOrderService {
appletOrder.setCompanionLevel(h5OrderVO.getCompanionLevel());
appletOrder.setLongitude(Double.valueOf(h5OrderVO.getLongitude()));
appletOrder.setLatitude(Double.valueOf(h5OrderVO.getLatitude()));
appletOrder.setCreateType(appletOrder.getType());//开始接单类型
appletOrder.setNewOrderTime(LocalDateTime.now());//最新派单时间
appletOrderService.insertAppletOrder(appletOrder);
@ -210,6 +218,9 @@ public class IMallOrderServiceImpl implements IMallOrderService {
//获取经纬度
H5OrderVO h5OrderVO = orderMapper.selectOrderDetail(orderId);
log.info("订单数据:{}",h5OrderVO);
//TODO 系统派单逻辑 acceptDispatch
// 获取经度
String longitudeStr = h5OrderVO.getLongitude();
longitudeStr = "112.89175415039062";


+ 44
- 0
ruoyi-catdog/src/main/java/com/ruoyi/job/AppletUserExaminationJob.java View File

@ -0,0 +1,44 @@
package com.ruoyi.job;
import com.ruoyi.model.domain.AppletUsersTeacher;
import com.ruoyi.model.service.IAppletOrderService;
import com.ruoyi.model.service.IAppletUsersTeacherService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Date;
@Component
@Slf4j
public class AppletUserExaminationJob {
@Autowired
private IAppletUsersTeacherService appletUsersTeacherService;
/**
* 检查伴宠师是否可以重新考试
*/
@Async
@Scheduled(cron = "0 0 3 * * ?")
public void check(){
LocalDateTime localDateTime = LocalDateTime.now().minusYears(1);
boolean update = appletUsersTeacherService
.lambdaUpdate()
.le(AppletUsersTeacher::getExamTime, localDateTime)
.gt(AppletUsersTeacher::getExamNumber, 0)
.set(AppletUsersTeacher::getExamNumber, 0)
.update();
log.info("定时任务[检查伴宠师是否可以重新考试], 重新考试人数 {}", update);
}
}

+ 37
- 0
ruoyi-catdog/src/main/java/com/ruoyi/job/OrderTimeoutNoticeJob.java View File

@ -0,0 +1,37 @@
package com.ruoyi.job;
import com.ruoyi.model.service.IAppletOrderService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class OrderTimeoutNoticeJob {
private static final Logger log = LoggerFactory.getLogger(OrderTimeoutNoticeJob.class);
@Autowired
private IAppletOrderService appletOrderService;
/**
* 每5分钟检查订单是否未接单超时
*/
@Async
@Scheduled(cron = "0 */5 * * * ?")
// @Scheduled(cron = "0 * * * * ?")
public void check(){
log.info("定时任务[订单未接单超时检查]开始执行");
//系统订单超过3小时未接单通知管理员
appletOrderService.systemOrderTimeoutNotice();
//个人订单超过3小时未接单转成系统派单
appletOrderService.personalSystemTransferOrder();
log.info("定时任务[订单未接单超时检查]执行结束");
}
}

+ 17
- 0
ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletOrderController.java View File

@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletResponse;
import com.cyl.h5.pojo.vo.H5OrderVO;
import com.cyl.h5.service.H5OrderService;
import com.cyl.manager.oms.service.OrderService;
import com.ruoyi.applet.service.IApiMallOrderService;
import com.ruoyi.applet.service.IMallOrderService;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.model.service.IAppletUsersService;
@ -51,6 +52,10 @@ public class AppletOrderController extends BaseController
@Autowired
private IAppletUsersService appletUsersService;
@Autowired
private IApiMallOrderService apiMallOrderService;
/**
* 查询订单信息列表
*/
@ -85,6 +90,18 @@ public class AppletOrderController extends BaseController
return success(appletOrderService.selectAppletOrderById(id));
}
/**
* 获取订单信息详细信息
*/
@PreAuthorize("@ss.hasPermi('model:AppletOrder:query')")
@GetMapping(value = "/detail/{orderId}")
public AjaxResult getInfoDetail(@PathVariable("orderId") Long orderId)
{
return success(apiMallOrderService.orderDetail(orderId));
}
/**
* 新增订单信息
*/


+ 41
- 14
ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletOrder.java View File

@ -2,6 +2,7 @@ package com.ruoyi.model.domain;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import com.baomidou.mybatisplus.annotation.TableField;
@ -61,20 +62,30 @@ public class AppletOrder {
@Excel(name = "地址")
private String address;
/** 订单类型 0系统派单 1指定伴宠师 */
@Excel(name = "订单类型")
//开始派单类型
@Excel(name = "开始派单类型")
private String createType;
/** 最新派单-订单类型 0系统派单 1指定伴宠师 */
@Excel(name = "最新派单类型")
private String type;
//最新派单时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "最新派单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime newOrderTime;
/** 无法接单原因 */
@Excel(name = "无法接单原因")
private String reason;
/** 关联服务者ID */
@Excel(name = "关联服务者ID")
/** 接单伴宠师ID */
@Excel(name = "接单伴宠师ID")
private Long userId;
/** 派单给的用户集合 */
/** 派单给的用户集合 多个用,隔开 */
@Excel(name = "派单给的用户集合")
private String userIdJson;
@ -82,11 +93,36 @@ public class AppletOrder {
@Excel(name = "关联宠物ID")
private Integer petId;
/** 超时未接单,通知次数 -1通知了管理员 其他通知次数 */
@Excel(name = "超时未接单,通知次数")
private Integer noticeSystemFlag;
//订单接单时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "订单接单时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime acceptTime;
//接单用时()
@Excel(name = "接单用时(秒)", width = 30)
private Long whenTakOrders;
private Long orderId;
private String orderSn;
private Integer orderTime;
//指定的伴宠师等级
private Integer companionLevel;
/** 经度 */
private Double longitude;
/** 纬度 */
private Double latitude;
@TableField(exist = false)
private H5OrderVO h5OrderVO;
@ -105,13 +141,4 @@ public class AppletOrder {
@TableField(exist = false)
private String userName;
//指定的伴宠师等级
private Integer companionLevel;
/** 经度 */
private Double longitude;
/** 纬度 */
private Double latitude;
}

+ 11
- 0
ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletUsersTeacher.java View File

@ -8,6 +8,7 @@ import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
@Data
@ -92,7 +93,17 @@ public class AppletUsersTeacher {
@Excel(name = "专业执照选项")
private String license;
/** 基本已考试次数 */
@Excel(name = "基本已考试次数")
private Integer examNumber;
/** 基本考试日期 */
@Excel(name = "基本考试日期")
private LocalDateTime examTime;
/** 驳回原因 */
@Excel(name = "驳回原因")
private String reason;
/** 个人简介绍 */
@Excel(name = "个人简介绍")


+ 3
- 1
ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppUsersMapper.java View File

@ -1,6 +1,8 @@
package com.ruoyi.model.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.model.domain.AppUsers;
/**
@ -9,7 +11,7 @@ import com.ruoyi.model.domain.AppUsers;
* @author ruoyi
* @date 2025-03-27
*/
public interface AppUsersMapper
public interface AppUsersMapper extends BaseMapper<AppUsers>
{
/**
* 查询用户


+ 8
- 1
ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppUsersService.java View File

@ -1,7 +1,11 @@
package com.ruoyi.model.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.applet.pojo.dto.filterQualifiedUsersVo;
import com.ruoyi.model.domain.AppUsers;
import com.ruoyi.model.domain.AppletOrder;
/**
* 用户Service接口
@ -9,7 +13,7 @@ import com.ruoyi.model.domain.AppUsers;
* @author ruoyi
* @date 2025-03-27
*/
public interface IAppUsersService
public interface IAppUsersService extends IService<AppUsers>
{
/**
* 查询用户
@ -60,4 +64,7 @@ public interface IAppUsersService
public int deleteAppUsersByUserId(Long userId);
AppUsers selectAppUsersByOpenId(String wxOpenid);
public List<AppUsers> filterQualifiedUsers(filterQualifiedUsersVo filterVo);
}

+ 21
- 0
ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletOrderService.java View File

@ -62,4 +62,25 @@ public interface IAppletOrderService extends IService<AppletOrder>
* @return 结果
*/
public int deleteAppletOrderById(Long id);
/**
* 个人订单超过未接单通知或者转成系统派单逻辑
* @return 结果
*/
public int personalSystemTransferOrder();
/**
* 系统订单超过未接单通知逻辑
* @return 结果
*/
public int systemOrderTimeoutNotice();
/**
* 短信通知符合条件的伴宠师有新订单
*/
public void noticePersonalByOrderIds(List<Long> ids);
}

+ 3
- 0
ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletUsersTeacherService.java View File

@ -21,6 +21,9 @@ public interface IAppletUsersTeacherService extends IService<AppletUsersTeacher>
public AppletUsersTeacher selectAppletUsersTeacherById(Long id);
public AppletUsersTeacher selectAppletUsersTeacherByUserId(Long userId);
public void buildData(AppletUsersTeacher appletUsersTeacher);
/**
* 查询伴宠师认证列表
*


+ 136
- 1
ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppUsersServiceImpl.java View File

@ -1,7 +1,27 @@
package com.ruoyi.model.service.impl;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cyl.manager.oms.domain.OmsOrderService;
import com.cyl.manager.oms.mapper.OmsOrderServiceMapper;
import com.ruoyi.applet.pojo.dto.filterQualifiedUsersVo;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.model.domain.AppletAddress;
import com.ruoyi.model.domain.AppletOrder;
import com.ruoyi.model.domain.AppletOutDate;
import com.ruoyi.model.service.IAppletAddressService;
import com.ruoyi.model.service.IAppletOutDateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.model.mapper.AppUsersMapper;
@ -15,11 +35,20 @@ import com.ruoyi.model.service.IAppUsersService;
* @date 2025-03-27
*/
@Service
public class AppUsersServiceImpl implements IAppUsersService
public class AppUsersServiceImpl extends ServiceImpl<AppUsersMapper, AppUsers> implements IAppUsersService
{
@Autowired
private AppUsersMapper appUsersMapper;
@Autowired
private IAppletOutDateService appletOutDateService;
@Autowired
private OmsOrderServiceMapper omsOrderServiceMapper;
@Autowired
private IAppletAddressService appletAddressService;
/**
* 查询用户
*
@ -98,4 +127,110 @@ public class AppUsersServiceImpl implements IAppUsersService
public AppUsers selectAppUsersByOpenId(String openid) {
return appUsersMapper.selectAppUsersByOpenId(openid);
}
// 根据订单筛选符合条件的技师
@Override
public List<AppUsers> filterQualifiedUsers(filterQualifiedUsersVo filterVo) {
List<AppUsers> qualifiedTechnicians = new ArrayList<>();
ArrayList<Long> notAddressIds = new ArrayList<>();
LambdaQueryChainWrapper<AppletAddress> addressQW = appletAddressService.lambdaQuery();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//根据不接单日期排除地址
if (ObjectUtils.isNotEmpty(filterVo.getOrderId())){
List<Date> dates = omsOrderServiceMapper.selectList(Wrappers.<OmsOrderService>
lambdaQuery()
.select(OmsOrderService::getServiceDate)
.eq(OmsOrderService::getOrderId, filterVo.getOrderId()))
.stream().map(n -> {
try {
return sdf.parse(n.getServiceDate());
} catch (ParseException e) {
return null;
}
})
.filter(n -> ObjectUtils.isNotEmpty(n))
.collect(Collectors.toList());
appletOutDateService.lambdaQuery().in(AppletOutDate::getDate, dates)
.select(AppletOutDate::getAddressId)
.groupBy(AppletOutDate::getAddressId)
.list().stream().forEach(n ->
notAddressIds.add(n.getAddressId())
);
}
// 2. 根据订单经纬度查询范围内的地址
if (ObjectUtils.isNotEmpty(filterVo.getLatitude()) &&
ObjectUtils.isNotEmpty(filterVo.getLongitude())) {
BigDecimal orderLat = new BigDecimal(filterVo.getLatitude());
BigDecimal orderLng = new BigDecimal(filterVo.getLongitude());
// 将15公里转换为经纬度范围
// 1度纬度约等于111公里
// 1度经度约等于111*cos(纬度)公里
BigDecimal range = new BigDecimal("15"); // 15公里范围
BigDecimal latRange = range.divide(new BigDecimal("111"), 6, BigDecimal.ROUND_HALF_UP);
BigDecimal lngRange = range.divide(new BigDecimal("111").multiply(new BigDecimal(Math.cos(orderLat.doubleValue() * Math.PI / 180))), 6, BigDecimal.ROUND_HALF_UP);
// 计算经纬度范围
BigDecimal latMin = orderLat.subtract(latRange);
BigDecimal latMax = orderLat.add(latRange);
BigDecimal lngMin = orderLng.subtract(lngRange);
BigDecimal lngMax = orderLng.add(lngRange);
// 查询所有有效的地址并且在15公里范围内
List<AppletAddress> addressList = appletAddressService.lambdaQuery()
.eq(AppletAddress::getStatus, "true")
.notIn(!notAddressIds.isEmpty(), AppletAddress::getId, notAddressIds)
.ge(AppletAddress::getLatitude, latMin.toString())
.le(AppletAddress::getLatitude, latMax.toString())
.ge(AppletAddress::getLongitude, lngMin.toString())
.le(AppletAddress::getLongitude, lngMax.toString())
.list();
// 3. 筛选在范围内的地址
List<Long> qualifiedUserId = new ArrayList<>();
for (AppletAddress address : addressList) {
if (StringUtils.isNotEmpty(address.getLatitude()) &&
StringUtils.isNotEmpty(address.getLongitude()) &&
StringUtils.isNotEmpty(address.getRangeNo())) {
BigDecimal addressLat = new BigDecimal(address.getLatitude());
BigDecimal addressLng = new BigDecimal(address.getLongitude());
BigDecimal rangeKm = new BigDecimal(address.getRangeNo()); // 公里数
// 将公里数转换为经纬度范围
// 1度纬度约等于111公里
// 1度经度约等于111*cos(纬度)公里
latRange = rangeKm.divide(new BigDecimal("111"), 6, BigDecimal.ROUND_HALF_UP);
lngRange = rangeKm.divide(new BigDecimal("111").multiply(new BigDecimal(Math.cos(addressLat.doubleValue() * Math.PI / 180))), 6, BigDecimal.ROUND_HALF_UP);
// 计算距离经纬度差值
BigDecimal latDiff = orderLat.subtract(addressLat).abs();
BigDecimal lngDiff = orderLng.subtract(addressLng).abs();
// 如果在范围内添加到合格地址列表
if (latDiff.compareTo(latRange) <= 0 && lngDiff.compareTo(lngRange) <= 0) {
qualifiedUserId.add(address.getUserId());
}
}
}
// 4. 根据地址ID和技师等级查询符合条件的技师
qualifiedTechnicians = appUsersMapper.selectList(
Wrappers.<AppUsers>lambdaQuery()
.eq(ObjectUtils.isNotEmpty(filterVo.getCompanionLevel()),
AppUsers::getUserBcsRole, filterVo.getCompanionLevel())
.in(qualifiedUserId.size() > 0, AppUsers::getUserId, qualifiedUserId)
);
}
return qualifiedTechnicians;
}
}

+ 47
- 16
ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletOrderDateFrequencyServiceImpl.java View File

@ -13,14 +13,18 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cyl.h5.pojo.vo.H5OrderVO;
import com.cyl.h5.service.H5MemberService;
import com.cyl.manager.oms.domain.OmsOrderService;
import com.cyl.manager.oms.domain.Order;
import com.cyl.manager.oms.domain.OrderItem;
import com.cyl.manager.oms.mapper.OmsOrderServiceMapper;
import com.cyl.manager.oms.mapper.OrderItemMapper;
import com.cyl.manager.oms.mapper.OrderMapper;
import com.cyl.manager.oms.service.OmsOrderServiceService;
import com.cyl.manager.ums.domain.Pet;
import com.cyl.manager.ums.mapper.PetMapper;
import com.cyl.manager.ums.service.MemberService;
import com.cyl.manager.ums.service.PetService;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.model.domain.*;
import com.ruoyi.model.mapper.AppletOrderItemMapper;
import com.ruoyi.model.service.*;
@ -66,6 +70,9 @@ public class AppletOrderDateFrequencyServiceImpl extends ServiceImpl<AppletOrder
@Autowired
private IAppletAmountLogService appletAmountLogService;
@Autowired
private OrderMapper orderMapper;
/**
* 查询日订单
*
@ -231,21 +238,26 @@ public class AppletOrderDateFrequencyServiceImpl extends ServiceImpl<AppletOrder
//取出当前日期所对应的项目
List<OrderItem> orderItemList = h5OrderVO.getOrderItemList().stream().
filter(n -> {
for (OmsOrderService omsOrderService : serviceList) {
if(n.getOrderServiceId().equals(omsOrderService.getId())){
omsOrderService.getOrderItems().add(n);
return true;
}
}
return false;
}).collect(Collectors.toList());
// 找出最大次数生成对应个数的日订单
for (OrderItem orderItem : orderItemList) {
maxIndex = Math.max(maxIndex, orderItem.getQuantity());
}
// List<OrderItem> orderItemList = h5OrderVO.getOrderItemList().stream().
// filter(n -> {
// for (OmsOrderService omsOrderService : serviceList) {
// if(n.getOrderServiceId().equals(omsOrderService.getId())){
// omsOrderService.getOrderItems().add(n);
// return true;
// }
// }
// return false;
// }).collect(Collectors.toList());
//给服务日期配上对应的项目
h5OrderVO.getOrderItemList().forEach(n -> {
for (OmsOrderService omsOrderService : serviceList) {
if(n.getOrderServiceId().equals(omsOrderService.getId())){
omsOrderService.getOrderItems().add(n);
}
}
});
// 根据次数生成
while (index < maxIndex){
@ -309,6 +321,10 @@ public class AppletOrderDateFrequencyServiceImpl extends ServiceImpl<AppletOrder
}
if (frequencies.size() == 0){
throw new ServiceException("生成日订单失败");
}
saveBatch(frequencies);
}
@ -344,11 +360,23 @@ public class AppletOrderDateFrequencyServiceImpl extends ServiceImpl<AppletOrder
.in(AppletOrderDateFrequency::getStatus, Arrays.asList("0,1".split(",")))
.count();
//总订单
//总订单 的复制体 个人订单的信息
AppletOrderItem appletOrderItem = appletOrderItemMapper
.selectAppletOrderItemByOrderIdUserId(byId.getOrderId(), byId.getMasterId());
//下单端小程序的订单
Order omsOrder = orderMapper.selectById(byId.getOrderId());
if(omsOrder != null){
//下单端订单
omsOrder.setStatus(
count == 0 ?
Constants.H5OrderStatus.COMPLETED
: Constants.H5OrderStatus.SERVICE);
orderMapper.updateById(omsOrder);
}
//订单完成
if(count == 0){
appletOrderItem.setOrderStatus(2);
@ -371,9 +399,12 @@ public class AppletOrderDateFrequencyServiceImpl extends ServiceImpl<AppletOrder
user.setPrice(user.getPrice().add(appletOrderItem.getOrderGivePrice()));
appUsersService.updateAppUsers(user);
}else if (appletOrderItem.getOrderStatus() == 0){//修改成订单进行中
appletOrderItem.setOrderStatus(1);
appletOrderItemMapper.updateAppletOrderItem(appletOrderItem);
}


+ 229
- 3
ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletOrderServiceImpl.java View File

@ -1,15 +1,30 @@
package com.ruoyi.model.service.impl;
import java.util.Date;
import java.util.List;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.applet.pojo.dto.filterQualifiedUsersVo;
import com.ruoyi.common.core.sms.AliyunSmsUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.model.domain.AppUsers;
import com.ruoyi.model.domain.AppletAddress;
import com.ruoyi.model.domain.AppletOutDate;
import com.ruoyi.model.mapper.AppUsersMapper;
import com.ruoyi.model.service.IAppUsersService;
import com.ruoyi.model.service.IAppletOutDateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.model.mapper.AppletOrderMapper;
import com.ruoyi.model.domain.AppletOrder;
import com.ruoyi.model.service.IAppletOrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 订单信息Service业务层处理
@ -19,9 +34,15 @@ import com.ruoyi.model.service.IAppletOrderService;
*/
@Service
public class AppletOrderServiceImpl extends ServiceImpl<AppletOrderMapper, AppletOrder> implements IAppletOrderService {
@Autowired
private AppletOrderMapper appletOrderMapper;
@Autowired
private IAppUsersService appUsersService;
private static final Logger log = LoggerFactory.getLogger(AppletOrderServiceImpl.class);
/**
* 查询订单信息
*
@ -67,7 +88,10 @@ public class AppletOrderServiceImpl extends ServiceImpl<AppletOrderMapper, Apple
public int insertAppletOrder(AppletOrder appletOrder)
{
// appletOrder.setCreateTime(new Date());
return appletOrderMapper.insertAppletOrder(appletOrder);
appletOrder.setNoticeSystemFlag(0);
int i = appletOrderMapper.insert(appletOrder);
noticePersonalByOrderIds(Collections.singletonList(appletOrder.getId()));
return i;
}
/**
@ -80,6 +104,12 @@ public class AppletOrderServiceImpl extends ServiceImpl<AppletOrderMapper, Apple
public int updateAppletOrder(AppletOrder appletOrder)
{
// appletOrder.setUpdateTime(DateUtils.getNowDate());
appletOrder.setNewOrderTime(LocalDateTime.now());
appletOrder.setNoticeSystemFlag(0);
noticePersonalByOrderIds(Collections.singletonList(appletOrder.getId()));
return appletOrderMapper.updateAppletOrder(appletOrder);
}
@ -106,4 +136,200 @@ public class AppletOrderServiceImpl extends ServiceImpl<AppletOrderMapper, Apple
{
return appletOrderMapper.deleteAppletOrderById(id);
}
/**
* 个人订单超过未接单通知或者转成系统派单逻辑
* @return 结果
*/
@Override
public int personalSystemTransferOrder() {
//30分钟未接单提示用户
LocalDateTime time = LocalDateTime.now().minusMinutes(30);
List<AppletOrder> orders = lambdaQuery()
.eq(AppletOrder::getStatus, 0)
.eq(AppletOrder::getType, 1)
.le(AppletOrder::getNewOrderTime, time)
.eq(AppletOrder::getNoticeSystemFlag, 0)
.list();
List<Long> ids = orders.stream().map(n -> n.getId()).collect(Collectors.toList());
if (ids.size() > 0) {
//修改订单状态
lambdaUpdate()
.in(AppletOrder::getId, ids)
.set(AppletOrder::getUpdateTime, LocalDateTime.now())
.set(AppletOrder::getNoticeSystemFlag, 1)
.update();
}
log.info("[personalSystemTransferOrder] 开始检查个人订单超时转系统派单");
LocalDateTime threeHoursAgo = LocalDateTime.now().minusHours(3);
List<AppletOrder> timeoutOrders = lambdaQuery()
.eq(AppletOrder::getStatus, 0)
.eq(AppletOrder::getType, 1)
.le(AppletOrder::getNewOrderTime, threeHoursAgo)
.eq(AppletOrder::getNoticeSystemFlag, 1)
.list();
List<Long> ids2 = timeoutOrders.stream().map(n -> {
orders.add(n);
return n.getId();
}).collect(Collectors.toList());
if (ids2.size() > 0) {
//修改
lambdaUpdate()
.in(AppletOrder::getId, ids2)
.set(AppletOrder::getType, 0)
.set(AppletOrder::getUpdateTime, LocalDateTime.now())
.set(AppletOrder::getNoticeSystemFlag, 0)
.set(AppletOrder::getNewOrderTime, LocalDateTime.now())
.update();
}
log.info("[personalSystemTransferOrder] 处理完成,转为系统派单订单数:{}", orders.size());
//通知用户
noticePersonalByOrderList(orders);
return orders.size();
}
/**
* 系统订单超过未接单通知逻辑
* @return 结果
*/
@Override
public int systemOrderTimeoutNotice() {
ArrayList<AppletOrder> list = new ArrayList<>();
//60分钟未接单
LocalDateTime oneHoursAgo = LocalDateTime.now().minusMinutes(60);
List<AppletOrder> oneTimeoutOrders = lambdaQuery()
.eq(AppletOrder::getStatus, 0)
.eq(AppletOrder::getType, 0)
.le(AppletOrder::getNewOrderTime, oneHoursAgo)
.eq(AppletOrder::getNoticeSystemFlag, 0)
.list();
if (oneTimeoutOrders.size() > 0){
//60分钟未接单修改订单状态
lambdaUpdate()
.in(AppletOrder::getId, oneTimeoutOrders.stream().map(n -> n.getId()).collect(Collectors.toList()))
.set(AppletOrder::getUpdateTime, LocalDateTime.now())
.set(AppletOrder::getNoticeSystemFlag, 1)
.update();
}
//120分钟未接单
LocalDateTime twoHoursAgo = LocalDateTime.now().minusHours(2);
List<AppletOrder> twoTimeoutOrders = lambdaQuery()
.eq(AppletOrder::getStatus, 0)
.eq(AppletOrder::getType, 0)
.le(AppletOrder::getNewOrderTime, twoHoursAgo)
.eq(AppletOrder::getNoticeSystemFlag, 1)
.list();
if (twoTimeoutOrders.size() > 0) {
//120分钟未接单修改订单状态
lambdaUpdate()
.in(AppletOrder::getId, twoTimeoutOrders.stream().map(n -> n.getId()).collect(Collectors.toList()))
.set(AppletOrder::getUpdateTime, LocalDateTime.now())
.set(AppletOrder::getNoticeSystemFlag, 2)
.update();
}
log.info("[systemOrderTimeoutNotice] 开始检查系统订单超时未接单");
LocalDateTime threeHoursAgo = LocalDateTime.now().minusHours(3);
List<AppletOrder> timeoutOrders = lambdaQuery()
.eq(AppletOrder::getStatus, 0)
.eq(AppletOrder::getType, 0)
.le(AppletOrder::getNewOrderTime, threeHoursAgo)
.eq(AppletOrder::getNoticeSystemFlag, 2)
.list();
if(timeoutOrders.size() > 0){
//180分钟未接单修改订单状态
lambdaUpdate()
.in(AppletOrder::getId, timeoutOrders.stream().map(n -> n.getId()).collect(Collectors.toList()))
.set(AppletOrder::getUpdateTime, LocalDateTime.now())
.set(AppletOrder::getNoticeSystemFlag, -1)//通知过管理员了
.update();
}
log.info("[systemOrderTimeoutNotice] 检查完成,超时1小时订单数:{},超时2小时订单数:{}超时3小时订单数:{}",
oneTimeoutOrders.size(),
twoTimeoutOrders.size(),
timeoutOrders.size()
);
oneTimeoutOrders.forEach(list::add);
twoTimeoutOrders.forEach(list::add);
noticePersonalByOrderList(list);
return timeoutOrders.size() + oneTimeoutOrders.size() + twoTimeoutOrders.size();
}
/**
* 短信通知符合条件的伴宠师有新订单
*/
@Override
public void noticePersonalByOrderIds(List<Long> ids) {
List<AppletOrder> list = lambdaQuery()
.in(AppletOrder::getId, ids)
.list();
noticePersonalByOrderList(list);
}
public void noticePersonalByOrderList(List<AppletOrder> list) {
// 需要通知的用户id
ArrayList<Long> userIds = new ArrayList<>();
// 需要通知的用户
HashMap<Long, AppUsers> userMap = new HashMap<>();
// 提取需要通知的用户
for (AppletOrder appletOrder : list) {
List<AppUsers> qualifiedTechnicians;
if ("0".equals(appletOrder.getType())) { // 系统派单
// 使用新的筛选逻辑
qualifiedTechnicians = appUsersService
.filterQualifiedUsers(filterQualifiedUsersVo.builder()
.orderId(appletOrder.getOrderId())
.companionLevel(appletOrder.getCompanionLevel())
.latitude(appletOrder.getLatitude())
.longitude(appletOrder.getLongitude())
.build());
} else if (StringUtils.isNotEmpty(appletOrder.getUserIdJson())) { // 个人订单
List<Long> userIdList = Arrays.stream(appletOrder.getUserIdJson()
.split(",")).map(n -> Long.parseLong(n))
.filter(id -> !userIds.contains(id))
.collect(Collectors.toList());
qualifiedTechnicians = appUsersService.lambdaQuery()
.in(AppUsers::getUserId, userIdList).list();
} else {
qualifiedTechnicians = new ArrayList<>();
}
for (AppUsers technician : qualifiedTechnicians) {
userIds.add(technician.getUserId());
userMap.put(technician.getUserId(), technician);
}
}
// 发起通知
userMap.forEach((id, user) -> {
AliyunSmsUtils.sendBcshHasOrderSMS(user.getUserTelephone());
});
}
}

+ 11
- 1
ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletUsersTeacherServiceImpl.java View File

@ -39,6 +39,12 @@ public class AppletUsersTeacherServiceImpl extends ServiceImpl<AppletUsersTeache
public AppletUsersTeacher selectAppletUsersTeacherById(Long id)
{
AppletUsersTeacher appletUsersTeacher = appletUsersTeacherMapper.selectAppletUsersTeacherById(id);
buildData(appletUsersTeacher);
return appletUsersTeacher;
}
@Override
public void buildData(AppletUsersTeacher appletUsersTeacher){
if(appletUsersTeacher != null){
List<AppletQuestion> appletQuestions = appletQuestionMapper.selectAppletQuestionList(null);
//循环设置答案列表
@ -67,7 +73,6 @@ public class AppletUsersTeacherServiceImpl extends ServiceImpl<AppletUsersTeache
appletUsersTeacher.setAnswerList(appletQuestions);
}
return appletUsersTeacher;
}
@Override
@ -98,6 +103,11 @@ public class AppletUsersTeacherServiceImpl extends ServiceImpl<AppletUsersTeache
public int insertAppletUsersTeacher(AppletUsersTeacher appletUsersTeacher)
{
appletUsersTeacher.setCreateTime(DateUtils.getNowDate());
if(appletUsersTeacher.getExamNumber() == null){
appletUsersTeacher.setExamNumber(0);
}
return appletUsersTeacherMapper.insertAppletUsersTeacher(appletUsersTeacher);
}


+ 23
- 4
ruoyi-catdog/src/main/resources/mapper/model/AppletOrderMapper.xml View File

@ -23,12 +23,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="orderSn" column="order_sn"/>
<result property="orderId" column="order_id"/>
<result property="orderTime" column="order_time"/>
<result property="createType" column="create_type"/>
<result property="newOrderTime" column="new_order_time"/>
<result property="acceptTime" column="accept_time"/>
<result property="whenTakOrders" column="when_tak_orders"/>
<result property="noticeSystemFlag" column="notice_system_flag"/>
</resultMap>
<sql id="selectAppletOrderVo">
select id, create_time, create_by, update_time, update_by, pay_time, status, price, address, type, reason, user_id,
pet_id,num,user_id_json,order_id,order_sn,order_time,companion_level,
longitude, latitude
longitude, latitude, create_type, new_order_time, accept_time, when_tak_orders,
notice_system_flag
from applet_order
</sql>
@ -44,7 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="userId != null "> and user_id = #{userId}</if>
<if test="petId != null "> and pet_id = #{petId}</if>
<if test="num != null "> and num = #{num}</if>
<if test="userIdJson != null "> and user_id_json = #{userIdJson}</if>
<if test="userIdJson != null "> and user_id_json like concat('%', #{userIdJson}, '%')</if>
<if test="orderSn != null "> and order_sn = #{orderSn}</if>
<if test="orderId != null "> and order_id = #{orderId}</if>
<if test="orderTime != null "> and order_time = #{orderTime}</if>
@ -117,7 +123,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="companionLevel != null">companion_level,</if>
<if test="longitude != null">longitude,</if>
<if test="latitude != null">latitude,</if>
<if test="createType != null">create_type,</if>
<if test="newOrderTime != null">new_order_time,</if>
<if test="acceptTime != null">accept_time,</if>
<if test="whenTakOrders != null">when_tak_orders,</if>
<if test="whenTakOrders != null">notice_system_flag,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
@ -142,7 +152,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="companionLevel != null">#{companionLevel},</if>
<if test="longitude != null">#{longitude},</if>
<if test="latitude != null">#{latitude},</if>
<if test="createType != null">#{createType},</if>
<if test="newOrderTime != null">#{newOrderTime},</if>
<if test="acceptTime != null">#{acceptTime},</if>
<if test="whenTakOrders != null">#{whenTakOrders},</if>
<if test="whenTakOrders != null">#{noticeSystemFlag},</if>
</trim>
@ -172,6 +186,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="latitude != null"> latitude = #{latitude},</if>
<if test="createType != null"> create_type = #{createType},</if>
<if test="newOrderTime != null"> new_order_time = #{newOrderTime},</if>
<if test="acceptTime != null"> accept_time = #{acceptTime},</if>
<if test="whenTakOrders != null"> when_tak_orders = #{whenTakOrders},</if>
<if test="noticeSystemFlag != null"> notice_system_flag = #{noticeSystemFlag},</if>
</trim>
where id = #{id}
</update>


+ 13
- 1
ruoyi-catdog/src/main/resources/mapper/model/AppletUsersTeacherMapper.xml View File

@ -29,10 +29,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="userBrief" column="user_brief"/>
<result property="thumbsUp" column="thumbs_up"/>
<result property="examNumber" column="exam_number"/>
<result property="examTime" column="exam_time"/>
<result property="reason" column="reason"/>
</resultMap>
<sql id="selectAppletUsersTeacherVo">
select id, user_id, name, id_card, sex, phone, experience, is_have, pet_type, status, images, create_time, area, update_time, address, longitude, latitude, create_by, update_by, age, license, user_brief, thumbs_up from applet_users_teacher
select id, user_id, name, id_card, sex, phone, experience, is_have, pet_type, status, images, create_time, area, update_time, address, longitude, latitude, create_by, update_by, age, license, user_brief, thumbs_up, exam_number, exam_time, reason from applet_users_teacher
</sql>
<select id="selectAppletUsersTeacherList" parameterType="AppletUsersTeacher" resultMap="AppletUsersTeacherResult">
@ -56,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="license != null and license != ''"> and license = #{license}</if>
<if test="userBrief != null and userBrief != ''"> and user_brief = #{userBrief}</if>
<if test="thumbsUp != null "> and thumbs_up = #{thumbsUp}</if>
<if test="reason != null "> and reason = #{reason}</if>
</where>
order by create_time desc
</select>
@ -96,6 +100,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="license != null">license,</if>
<if test="userBrief != null">user_brief,</if>
<if test="thumbsUp != null">thumbs_up,</if>
<if test="reason != null">reason,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
@ -121,6 +126,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="license != null">#{license},</if>
<if test="userBrief != null">user_brief,</if>
<if test="thumbsUp != null">thumbs_up,</if>
<if test="reason != null">reason,</if>
<if test="reason != null">reason,</if>
<if test="examNumber != null">exam_number,</if>
<if test="examTime != null">exam_time,</if>
</trim>
</insert>
@ -149,6 +158,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="license != null">license = #{license},</if>
<if test="userBrief != null">user_brief = #{userBrief},</if>
<if test="thumbsUp != null">thumbs_up = #{thumbsUp},</if>
<if test="reason != null">reason = #{reason},</if>
<if test="examNumber != null">exam_number = #{examNumber},</if>
<if test="examTime != null">exam_time = #{examTime},</if>
</trim>
where id = #{id}
</update>


+ 7
- 4
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java View File

@ -223,18 +223,21 @@ public class Constants
public static final Integer UNVAILD = 5;
}
//-1->全部 0->待付款1->待发货2->待收货3->已完成4->已关闭5->无效订单 -2->售后单
/**
* H5订单查询状态
* -1->全部 0->待付款1->发货2->待收货3->已完成4->已关闭5->无效订单 -2->售后单
* -1->全部 0->待付款1->接单2->已接单3->已完成4->已关闭5->无效订单 -2->售后单 11->服务中
*/
public static class H5OrderStatus{
public static final Integer ALL = -1;
public static final Integer UN_PAY = 0;
public static final Integer NOT_DELIVERED = 1;
public static final Integer DELIVERED = 2;
public static final Integer COMPLETED = 3;
public static final Integer NOT_DELIVERED = 1;//待接单
public static final Integer DELIVERED = 2;//已接单
public static final Integer COMPLETED = 3;//订单完成
public static final Integer CLOSED = 4;
public static final Integer INVALID = 5;
public static final Integer SERVICE = 11;//服务中
public static final Integer REFUND = -2;
}


Loading…
Cancel
Save