Browse Source

修复下单端系统派单

master
前端-胡立永 6 months ago
parent
commit
fdfb662afe
26 changed files with 1538 additions and 518 deletions
  1. +53
    -0
      CatmDogd-Mall-Front-test/src/api/model/AppletTaskUser.js
  2. +9
    -0
      CatmDogd-Mall-Front-test/src/api/ums/member.js
  3. +430
    -0
      CatmDogd-Mall-Front-test/src/views/marketing/AppletTask/index.vue
  4. +218
    -195
      CatmDogd-Mall-Front-test/src/views/marketing/AppletTaskUser/index.vue
  5. +32
    -15
      CatmDogd-Mall-Front-test/src/views/marketing/wechatStock/index.vue
  6. +132
    -25
      ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallTaskController.java
  7. +39
    -3
      ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletTaskController.java
  8. +92
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletTaskUserController.java
  9. +28
    -25
      ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletTask.java
  10. +99
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletTaskUser.java
  11. +3
    -56
      ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletTaskMapper.java
  12. +13
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletTaskUserMapper.java
  13. +3
    -1
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletTaskService.java
  14. +62
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletTaskUserService.java
  15. +49
    -7
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletTaskServiceImpl.java
  16. +164
    -0
      ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletTaskUserServiceImpl.java
  17. +0
    -185
      ruoyi-catdog/src/main/resources/mapper/model/AppletTaskMapper.xml
  18. +19
    -0
      ruoyi-mall/src/main/java/com/cyl/h5/controller/H5CouponController.java
  19. +14
    -0
      ruoyi-mall/src/main/java/com/cyl/h5/service/H5CouponService.java
  20. +10
    -2
      ruoyi-mall/src/main/java/com/cyl/manager/marketing/domain/WechatStock.java
  21. +1
    -2
      ruoyi-mall/src/main/java/com/cyl/manager/marketing/mapper/WechatStockMapper.java
  22. +2
    -0
      ruoyi-mall/src/main/java/com/cyl/manager/marketing/service/IWechatStockService.java
  23. +13
    -0
      ruoyi-mall/src/main/java/com/cyl/manager/marketing/service/impl/WechatMemberCouponServiceImpl.java
  24. +17
    -0
      ruoyi-mall/src/main/java/com/cyl/manager/marketing/service/impl/WechatStockServiceImpl.java
  25. +24
    -1
      ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberController.java
  26. +12
    -1
      ruoyi-mall/src/main/resources/mapper/marketing/WechatStockMapper.xml

+ 53
- 0
CatmDogd-Mall-Front-test/src/api/model/AppletTaskUser.js View File

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 查询任务中心列表
export function listAppletTaskUser(query) {
return request({
url: '/model/AppletTaskUser/list',
method: 'get',
params: query
})
}
// 查询任务中心详细
export function getAppletTaskUser(id) {
return request({
url: '/model/AppletTaskUser/' + id,
method: 'get'
})
}
// 新增任务中心
export function addAppletTaskUser(data) {
return request({
url: '/model/AppletTaskUser',
method: 'post',
data: data
})
}
// 修改任务中心
export function updateAppletTaskUser(data) {
return request({
url: '/model/AppletTaskUser',
method: 'put',
data: data
})
}
// 删除任务中心
export function delAppletTaskUser(id) {
return request({
url: '/model/AppletTaskUser/' + id,
method: 'delete'
})
}
// 导出任务中心
export function exportAppletTaskUser(query) {
return request({
url: '/model/AppletTaskUser/export',
method: 'get',
params: query
})
}

+ 9
- 0
CatmDogd-Mall-Front-test/src/api/ums/member.js View File

@ -9,6 +9,15 @@ export function listUmsMember(query, pageReq) {
params: pageReq
})
}
// 查询会员信息列表
export function listUmsMemberName(query, pageReq) {
return request({
url: '/ums/member/listName',
method: 'post',
data: query,
params: pageReq
})
}
// 查询会员信息详细
export function getUmsMember(id) {


+ 430
- 0
CatmDogd-Mall-Front-test/src/views/marketing/AppletTask/index.vue View File

@ -0,0 +1,430 @@
<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="任务ID" prop="id">
<el-input v-model="queryParams.id" placeholder="请输入任务ID" 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" filterable>
<el-option label="优惠券" value="0" />
<el-option label="现金" value="1" />
</el-select>
</el-form-item>
<!-- <el-form-item label="类型名称" prop="taskName">
<el-input v-model="queryParams.taskName" placeholder="请输入类型名称" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item> -->
<el-form-item label="标题" prop="title">
<el-input v-model="queryParams.title" placeholder="请输入标题" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<!-- <template v-if="showMoreCondition"> -->
<el-form-item label="主题" prop="theme">
<el-input v-model="queryParams.theme" placeholder="请输入主题" clearable size="small"
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="结算优惠券" prop="taskCoupon">
<el-select v-model="queryParams.taskCoupon" placeholder="请选择结算优惠券" clearable size="small" filterable>
<el-option
v-for="coupon in couponList"
:key="coupon.id"
:label="coupon.stockName"
:value="coupon.stockName">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<el-date-picker clearable size="small" v-model="queryParams.startTime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="截至时间" prop="endTime">
<el-date-picker clearable size="small" v-model="queryParams.endTime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择截至时间">
</el-date-picker>
</el-form-item>
<!-- </template> -->
<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-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini"
@click="showMoreCondition = !showMoreCondition">{{ showMoreCondition ? '收起条件' : '展开条件' }}</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:appletTask: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:appletTask: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:appletTask: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:appletTask:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="appletTaskList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="任务ID" align="center" prop="id" width="80" />
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="主题" align="center" prop="theme" />
<el-table-column label="类型" align="center" prop="type">
<template slot-scope="scope">
<span>{{ scope.row.type == '0' ? '优惠券' : '现金' }}</span>
</template>
</el-table-column>
<el-table-column label="结算优惠券" align="center" prop="taskCouponTitle" />
<!-- <el-table-column label="类型名称" align="center" prop="taskName" />-->
<!-- <el-table-column label="小图" align="center" prop="taskIcon" v-if="columns[3].visible"/>-->
<el-table-column label="小图" align="center" prop="taskIcon">
<template slot-scope="{ row }">
<el-image v-if="row.taskIcon" :src="row.taskIcon" :preview-src-list="[row.taskIcon]"
class="small-img circle-img" />
</template>
</el-table-column>
<el-table-column label="报酬" align="center" prop="taskMoney" />
<!-- <el-table-column label="图片" align="center" prop="image" v-if="columns[5].visible"/>-->
<el-table-column label="图片" align="center" prop="image">
<template slot-scope="{ row }">
<el-image v-if="row.image" :src="row.image" :preview-src-list="[row.image]"
class="small-img circle-img" />
</template>
</el-table-column>
<el-table-column label="开始时间" align="center" prop="startTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="截至时间" align="center" prop="endTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="最大领取数量" align="center" prop="maxGetNum" />
<el-table-column label="已领取数量" align="center" prop="giveNum" />
<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:appletTask:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['model:appletTask: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="title">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="主题" prop="theme">
<el-input v-model="form.theme" placeholder="请输入主题" />
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="form.type" placeholder="请选择类型" filterable>
<el-option label="优惠券" value="0"></el-option>
<el-option label="现金" value="1"></el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="类型名称" prop="taskName">-->
<!-- <el-input v-model="form.taskName" placeholder="请输入类型名称" />-->
<!-- </el-form-item>-->
<el-form-item label="图标">
<oss-image-upload v-model="form.taskIcon" :limit="1"></oss-image-upload>
</el-form-item>
<el-form-item label="报酬" prop="taskMoney">
<el-input v-model="form.taskMoney" placeholder="请输入报酬" />
</el-form-item>
<el-form-item label="图片">
<oss-image-upload v-model="form.image" :limit="1"></oss-image-upload>
</el-form-item>
<el-form-item label="结算优惠券" prop="taskCoupon">
<el-select v-model="form.taskCoupon" placeholder="请选择结算优惠券" clearable filterable>
<el-option
v-for="coupon in couponList"
:key="coupon.id"
:label="coupon.stockName"
:value="coupon.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<el-date-picker clearable size="small" v-model="form.startTime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="截至时间" prop="endTime">
<el-date-picker clearable size="small" v-model="form.endTime" type="datetime"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择截至时间">
</el-date-picker>
</el-form-item>
<el-form-item label="最大领取数量" prop="maxGetNum">
<el-input v-model="form.maxGetNum" placeholder="请输入最大领取数量" type="number" />
</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 { listAppletTask, getAppletTask, delAppletTask, addAppletTask, updateAppletTask, exportAppletTask } from "@/api/model/AppletTask";
import { listWechatStock } from "@/api/marketing/wechatStock";
export default {
name: "AppletTask",
dicts: [],
data() {
return {
//
loading: true,
//
exportLoading: false,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
appletTaskList: [],
//
couponList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
id: null,
type: null,
taskName: null,
taskIcon: null,
taskMoney: null,
taskCoupon: null,
image: null,
title: null,
theme: null,
startTime: null,
endTime: null,
maxGetNum: null,
giveNum: null,
},
//
form: {},
//
rules: {
type: [
{ required: true, message: "类型不能为空", trigger: "change" }
],
taskName: [
{ required: true, message: "类型名称不能为空", trigger: "blur" }
],
taskIcon: [
{ required: true, message: "小图不能为空", trigger: "blur" }
],
taskMoney: [
// { required: true, message: "", trigger: "blur" }
],
image: [
{ required: true, message: "图片不能为空", trigger: "blur" }
],
title: [
{ required: true, message: "标题不能为空", trigger: "blur" }
],
theme: [
{ required: true, message: "主题不能为空", trigger: "blur" }
],
startTime: [
{ required: true, message: "开始时间不能为空", trigger: "blur" }
],
endTime: [
{ required: true, message: "截至时间不能为空", trigger: "blur" }
],
maxGetNum: [
{ required: true, message: "最大领取数量不能为空", trigger: "blur" }
],
},
columns: [
{ key: 1, label: "类型", visible: true },
{ key: 2, label: "结算优惠券", visible: true },
{ key: 3, label: "类型名称", visible: true },
{ key: 4, label: "小图", visible: false },
{ key: 5, label: "报酬", visible: true },
{ key: 6, label: "图片", visible: false },
{ key: 7, label: "标题", visible: true },
{ key: 8, label: "主题", visible: true },
{ key: 9, label: "开始时间", visible: true },
{ key: 10, label: "截至时间", visible: true },
{ key: 11, label: "最大领取数量", visible: true },
{ key: 12, label: "已领取数量", visible: true },
],
showMoreCondition: false
};
},
created() {
this.getList();
this.getCouponList();
},
methods: {
/** 查询中心列表 */
getList() {
this.loading = true;
listAppletTask(this.queryParams).then(response => {
this.appletTaskList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/** 获取优惠券列表 */
getCouponList() {
listWechatStock({ pageNum: 1, pageSize: 999999999 }).then(response => {
response.rows.forEach(item => {
item.id = item.id + "";
})
this.couponList = response.rows || [];
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
type: null,
taskName: null,
taskIcon: null,
taskMoney: null,
taskCoupon: null,
image: null,
title: null,
theme: null,
startTime: null,
endTime: null,
maxGetNum: null,
giveNum: null,
createTime: null,
createBy: null,
updateTime: null,
updateBy: null,
delFlag: null
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.queryParams.id = null;
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
getAppletTask(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改中心";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateAppletTask(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addAppletTask(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 delAppletTask(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => { });
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有中心数据项?').then(() => {
this.exportLoading = true;
return exportAppletTask(queryParams);
}).then(response => {
this.download(response.msg);
this.exportLoading = false;
}).catch(() => { });
}
}
};
</script>

CatmDogd-Mall-Front-test/src/views/model/AppletTask/index.vue → CatmDogd-Mall-Front-test/src/views/marketing/AppletTaskUser/index.vue View File

@ -1,106 +1,67 @@
<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="当前状态0待接受1以接受" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择当前状态0待接受1以接受" clearable size="small">
<el-form-item label="关联" prop="taskId">
<el-select v-model="queryParams.taskId" placeholder="请选择关联" clearable size="small" filterable>
<el-option
v-for="dict in dict.type.task_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
v-for="task in taskList"
:key="task.id"
:label="task.taskName"
:value="task.id"
/>
</el-select>
</el-form-item>
<el-form-item label="下单用户标识" prop="memberId">
<el-input
v-model="queryParams.memberId"
placeholder="请输入下单用户标识"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
<el-form-item label="会员" prop="memberId">
<el-select v-model="queryParams.memberId" placeholder="请选择会员" clearable size="small" filterable>
<el-option
v-for="member in memberList"
:key="member.id"
:label="member.nickname + '(' + member.phoneHidden + ')'"
:value="member.id"
/>
</el-select>
</el-form-item>
<el-form-item label="任务类型名称" prop="taskName">
<el-input
v-model="queryParams.taskName"
placeholder="请输入任务类型名称"
<el-form-item label="开始时间" prop="startTime">
<el-date-picker
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
v-model="queryParams.startTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="任务报酬" prop="taskMoney">
<el-input
v-model="queryParams.taskMoney"
placeholder="请输入任务报酬"
<el-form-item label="结束时间" prop="endTime">
<el-date-picker
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
v-model="queryParams.endTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="标题" prop="title">
<el-input
v-model="queryParams.title"
placeholder="请输入标题"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
<el-form-item label="结算优惠券" prop="taskCoupon">
<el-select v-model="queryParams.taskCoupon" placeholder="请选择结算优惠券" clearable size="small" filterable>
<el-option
v-for="coupon in couponList"
:key="coupon.id"
:label="coupon.stockName"
:value="coupon.stockName">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="审核状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择审核状态" clearable size="small">
<el-option label="待提交" :value="0" />
<el-option label="待审核" :value="1" />
<el-option label="已通过" :value="2" />
<el-option label="已拒绝" :value="3" />
</el-select>
</el-form-item>
<template v-if="showMoreCondition">
<el-form-item label="主题" prop="theme">
<el-input
v-model="queryParams.theme"
placeholder="请输入主题"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="任务截至时间" prop="taskEndTime">
<el-date-picker
clearable
size="small"
v-model="queryParams.taskEndTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择任务截至时间">
</el-date-picker>
</el-form-item>
<el-form-item label="任务进度" prop="taskState">
<el-select v-model="queryParams.taskState" placeholder="请选择任务进度" clearable size="small">
<el-option
v-for="dict in dict.type.task_state"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="审核状态" prop="examineState">
<el-select v-model="queryParams.examineState" placeholder="请选择审核状态" clearable size="small">
<el-option
v-for="dict in dict.type.task_state"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="审核说明" prop="examineText">
<el-input
v-model="queryParams.examineText"
placeholder="请输入审核说明"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</template>
<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-button :icon="showMoreCondition ? 'el-icon-arrow-up' : 'el-icon-arrow-down'" size="mini" @click="showMoreCondition = !showMoreCondition">{{showMoreCondition ? '收起条件' : '展开条件'}}</el-button>
</el-form-item>
</el-form>
@ -153,55 +114,67 @@
<el-table v-loading="loading" :data="appletTaskList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="标识" align="center" prop="id" />-->
<el-table-column label="当前状态" align="center" prop="status">
<el-table-column label="关联" align="center" prop="taskId" />
<el-table-column label="会员" align="center" prop="memberId">
<template slot-scope="scope">
<dict-tag :options="dict.type.task_status" :value="scope.row.status"/>
<span v-if="getMemberById(scope.row.memberId)">{{ getMemberById(scope.row.memberId).nickname }}({{ getMemberById(scope.row.memberId).phoneHidden }})</span>
<span v-else>{{ scope.row.memberId }}</span>
</template>
</el-table-column>
<el-table-column label="下单用户标识" align="center" prop="memberId" />
<el-table-column label="任务类型名称" align="center" prop="taskName" />
<!-- <el-table-column label="任务小图" align="center" prop="taskIcon" v-if="columns[3].visible"/>-->
<el-table-column label="任务小图" align="center" prop="taskIcon">
<!-- <el-table-column label="类型名称" align="center" prop="taskName" /> -->
<el-table-column label="小图" align="center" prop="taskIcon">
<template slot-scope="{ row }">
<el-image v-if="row.taskIcon" :src="row.taskIcon" :preview-src-list="[row.taskIcon]" class="small-img circle-img"/>
</template>
</el-table-column>
<el-table-column label="任务报酬" align="center" prop="taskMoney" />
<!-- <el-table-column label="图片" align="center" prop="image" v-if="columns[5].visible"/>-->
<el-table-column label="报酬" align="center" prop="taskMoney" />
<el-table-column label="类型" align="center" prop="type">
<template slot-scope="scope">
<span>{{ scope.row.type === '0' ? '优惠券' : '现金' }}</span>
</template>
</el-table-column>
<el-table-column label="结算优惠券" align="center" prop="taskCouponTitle" />
<el-table-column label="图片" align="center" prop="image">
<template slot-scope="{ row }">
<el-image v-if="row.image" :src="row.image" :preview-src-list="[row.image]" class="small-img circle-img"/>
</template>
</el-table-column>
<el-table-column label="标题" align="center" prop="title" />
<el-table-column label="主题" align="center" prop="theme" />
<el-table-column label="任务截至时间" align="center" prop="taskEndTime" width="180" >
<el-table-column label="开始时间" align="center" prop="startTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.taskEndTime, '')}}</span>
<span>{{ parseTime(scope.row.startTime, '')}}</span>
</template>
</el-table-column>
<el-table-column label="任务进度" align="center" prop="taskState" >
<el-table-column label="结束时间" align="center" prop="endTime" width="180">
<template slot-scope="scope">
<dict-tag :options="dict.type.task_state" :value="scope.row.taskState"/>
<span>{{ parseTime(scope.row.endTime, '')}}</span>
</template>
</el-table-column>
<el-table-column label="审核状态" align="center" prop="examineState" v-if="columns[10].visible">
<el-table-column label="证明截图" align="center" prop="proveImage">
<template slot-scope="{ row }">
<el-image v-if="row.proveImage" :src="row.proveImage.split(',')[0]"
:preview-src-list="row.proveImage.split(',')"
class="small-img"/>
</template>
</el-table-column>
<el-table-column label="证明说明" align="center" prop="proveTxt" />
<el-table-column label="驳回说明" align="center" prop="rejectTxt" />
<el-table-column label="审核状态" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.task_state" :value="scope.row.examineState"/>
<el-tag :type="scope.row.status === 2 ? 'success' : scope.row.status === 3 ? 'danger' : 'warning'">
{{ scope.row.status === 0 ? '待提交' : scope.row.status === 1 ? '待审核' : scope.row.status === 2 ? '已通过' : '已拒绝' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="审核说明" align="center" prop="examineText" v-if="columns[11].visible"/>
<!-- <el-table-column label="审核图片" align="center" prop="examineImage" v-if="columns[12].visible"/>-->
<el-table-column label="审核图片" align="center" prop="examineImage">
<template slot-scope="{ row }">
<el-image v-if="row.examineImage" :src="row.examineImage" :preview-src-list="[row.examineImage]" class="small-img circle-img"/>
<el-table-column label="接受时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '')}}</span>
</template>
</el-table-column>
<el-table-column label="提交审核时间" align="center" prop="submitTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.submitTime, '')}}</span>
</template>
</el-table-column>
@ -234,33 +207,55 @@
@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="status">
<el-select v-model="form.status" placeholder="请选择当前状态">
<el-form ref="form" :model="form" :rules="rules" label-width="108px">
<el-form-item label="关联" prop="taskId">
<el-select v-model="form.taskId" placeholder="请选择关联" filterable>
<el-option
v-for="dict in dict.type.task_status"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)" ></el-option>
v-for="task in taskList"
:key="task.id"
:label="task.taskName"
:value="task.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="下单用户标识" prop="memberId">
<el-input v-model="form.memberId" placeholder="请输入下单用户标识" />
<el-form-item label="会员" prop="memberId">
<el-select v-model="form.memberId" placeholder="请选择会员" filterable>
<el-option
v-for="member in memberList"
:key="member.id"
:label="member.nickname + '(' + member.phoneHidden + ')'"
:value="member.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="任务类型名称" prop="taskName">
<el-input v-model="form.taskName" placeholder="请输入任务类型名称" />
<el-form-item label="类型名称" prop="taskName">
<el-input v-model="form.taskName" placeholder="请输入类型名称" />
</el-form-item>
<el-form-item label="任务小图">
<!-- <imageUpload v-model="form.taskIcon"/>-->
<el-form-item label="小图">
<oss-image-upload v-model="form.taskIcon" :limit="1"></oss-image-upload>
</el-form-item>
<el-form-item label="任务报酬" prop="taskMoney">
<el-input v-model="form.taskMoney" placeholder="请输入任务报酬" />
<el-form-item label="报酬" prop="taskMoney">
<el-input v-model="form.taskMoney" placeholder="请输入报酬" />
</el-form-item>
<el-form-item label="结算优惠券" prop="taskCoupon">
<el-select v-model="form.taskCoupon" placeholder="请选择结算优惠券" clearable filterable>
<el-option
v-for="coupon in couponList"
:key="coupon.id"
:label="coupon.stockName"
:value="coupon.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="form.type" placeholder="请选择类型" filterable>
<el-option label="优惠券" value="0" />
<el-option label="现金" value="1" />
</el-select>
</el-form-item>
<el-form-item label="图片">
<!-- <imageUpload v-model="form.image"/>-->
<oss-image-upload v-model="form.image" :limit="1"></oss-image-upload>
</el-form-item>
<el-form-item label="标题" prop="title">
@ -269,42 +264,39 @@
<el-form-item label="主题" prop="theme">
<el-input v-model="form.theme" placeholder="请输入主题" />
</el-form-item>
<el-form-item label="任务截至时间" prop="taskEndTime">
<el-form-item label="开始时间" prop="startTime">
<el-date-picker clearable size="small"
v-model="form.taskEndTime"
v-model="form.startTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择任务截至时间">
placeholder="选择开始时间">
</el-date-picker>
</el-form-item>
<el-form-item label="任务进度" prop="taskState">
<el-select v-model="form.taskState" placeholder="请选择任务进度">
<el-option
v-for="dict in dict.type.task_state"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)" ></el-option>
</el-select>
<el-form-item label="结束时间" prop="endTime">
<el-date-picker clearable size="small"
v-model="form.endTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="审核状态" prop="examineState">
<el-select v-model="form.examineState" placeholder="请选择审核状态">
<el-option
v-for="dict in dict.type.task_state"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)" ></el-option>
</el-select>
<el-form-item label="证明截图">
<oss-image-upload v-model="form.proveImage" :limit="1"></oss-image-upload>
</el-form-item>
<el-form-item label="审核说明" prop="examineText">
<el-input v-model="form.examineText" placeholder="请输入审核说明" />
<el-form-item label="证明说明" prop="proveTxt">
<el-input v-model="form.proveTxt" type="textarea" placeholder="请输入证明说明" />
</el-form-item>
<el-form-item label="审核图片">
<!-- <imageUpload v-model="form.examineImage"/>-->
<oss-image-upload v-model="form.examineImage" :limit="1"></oss-image-upload>
<el-form-item label="驳回说明" prop="rejectTxt">
<el-input v-model="form.rejectTxt" type="textarea" placeholder="请输入驳回说明" />
</el-form-item>
<el-form-item label="审核状态" prop="status">
<el-select v-model="form.status" placeholder="请选择审核状态" filterable>
<el-option label="待提交" :value="0" />
<el-option label="待审核" :value="1" />
<el-option label="已通过" :value="2" />
<el-option label="已拒绝" :value="3" />
</el-select>
</el-form-item>
<!-- <el-form-item label="DEL_FLAG" prop="delFlag">-->
<!-- <el-input v-model="form.delFlag" placeholder="请输入DEL_FLAG" />-->
<!-- </el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
@ -315,11 +307,13 @@
</template>
<script>
import { listAppletTask, getAppletTask, delAppletTask, addAppletTask, updateAppletTask, exportAppletTask } from "@/api/model/AppletTask";
import { listAppletTaskUser, getAppletTaskUser, delAppletTaskUser, addAppletTaskUser, updateAppletTaskUser, exportAppletTaskUser } from "@/api/model/AppletTaskUser";
import { listAppletTask } from "@/api/model/AppletTask";
import { listUmsMemberName } from "@/api/ums/member";
import { listWechatStock } from "@/api/marketing/wechatStock";
export default {
name: "AppletTask",
dicts: ['task_status', 'task_state', 'task_state'],
name: "AppletTaskUser",
data() {
return {
//
@ -336,7 +330,7 @@ export default {
showSearch: true,
//
total: 0,
//
//
appletTaskList: [],
//
title: "",
@ -346,19 +340,12 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
status: null,
taskId: null,
memberId: null,
taskName: null,
taskIcon: null,
taskMoney: null,
image: null,
title: null,
theme: null,
taskEndTime: null,
taskState: null,
examineState: null,
examineText: null,
examineImage: null,
startTime: null,
endTime: null,
taskCoupon: null,
status: null,
},
//
form: {},
@ -367,30 +354,63 @@ export default {
},
columns: [
{ key: 1, label: "当前状态0待接受1以接受", visible: true },
{ key: 2, label: "下单用户标识", visible: true },
{ key: 3, label: "任务类型名称", visible: true },
{ key: 4, label: "任务小图", visible: false },
{ key: 5, label: "任务报酬", visible: true },
{ key: 2, label: "会员", visible: true },
{ key: 3, label: "类型名称", visible: true },
{ key: 4, label: "小图", visible: false },
{ key: 5, label: "报酬", visible: true },
{ key: 6, label: "图片", visible: false },
{ key: 7, label: "标题", visible: true },
{ key: 8, label: "主题", visible: true },
{ key: 9, label: "任务截至时间", visible: true },
{ key: 10, label: "任务进度", visible: false },
{ key: 9, label: "截至时间", visible: true },
{ key: 10, label: "进度", visible: false },
{ key: 11, label: "审核状态", visible: false },
{ key: 12, label: "审核说明", visible: false },
{ key: 13, label: "审核图片", visible: false },
],
showMoreCondition: false
//
taskList: [],
//
memberList: [],
//
couponList: []
};
},
created() {
this.getList();
this.getTaskList();
this.getMemberList();
this.getCouponList();
},
methods: {
/** 查询任务中心列表 */
/** 获取列表 */
getTaskList() {
listAppletTask({}).then(response => {
this.taskList = response.rows || [];
});
},
/** 获取会员列表 */
getMemberList() {
listUmsMemberName().then(response => {
this.memberList = response.data || [];
});
},
/** 根据会员ID获取会员信息 */
getMemberById(memberId) {
return this.memberList.find(member => member.id == memberId);
},
/** 获取优惠券列表 */
getCouponList() {
listWechatStock({ pageNum: 1, pageSize: 999999999 }).then(response => {
response.rows.forEach(item => {
item.id = item.id + "";
})
this.couponList = response.rows || [];
});
},
/** 查询中心列表 */
getList() {
this.loading = true;
listAppletTask(this.queryParams).then(response => {
listAppletTaskUser(this.queryParams).then(response => {
this.appletTaskList = response.rows;
this.total = response.total;
this.loading = false;
@ -405,19 +425,22 @@ export default {
reset() {
this.form = {
id: null,
status: null,
taskId: null,
memberId: null,
taskName: null,
taskIcon: null,
taskMoney: null,
taskCoupon: null,
type: null,
image: null,
title: null,
theme: null,
taskEndTime: null,
taskState: null,
examineState: null,
examineText: null,
examineImage: null,
startTime: null,
endTime: null,
proveImage: null,
proveTxt: null,
rejectTxt: null,
status: null,
createTime: null,
createBy: null,
updateTime: null,
@ -446,16 +469,16 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加任务中心";
this.title = "添加用户";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getAppletTask(id).then(response => {
getAppletTaskUser(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改任务中心";
this.title = "修改用户";
});
},
/** 提交按钮 */
@ -463,13 +486,13 @@ export default {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != null) {
updateAppletTask(this.form).then(response => {
updateAppletTaskUser(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addAppletTask(this.form).then(response => {
addAppletTaskUser(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
@ -481,8 +504,8 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除任务中心编号为"' + ids + '"的数据项?').then(function() {
return delAppletTask(ids);
this.$modal.confirm('是否确认删除用户编号为"' + ids + '"的数据项?').then(function() {
return delAppletTaskUser(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
@ -491,9 +514,9 @@ export default {
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$modal.confirm('是否确认导出所有任务中心数据项?').then(() => {
this.$modal.confirm('是否确认导出所有用户数据项?').then(() => {
this.exportLoading = true;
return exportAppletTask(queryParams);
return exportAppletTaskUser(queryParams);
}).then(response => {
this.download(response.msg);
this.exportLoading = false;

+ 32
- 15
CatmDogd-Mall-Front-test/src/views/marketing/wechatStock/index.vue View File

@ -158,10 +158,17 @@
<el-table-column label="商户请求单号" align="center" prop="outRequestNo" v-if="columns[11].visible"/>
<el-table-column label="批次最大发放个数" align="center" prop="maxCoupons" v-if="columns[12].visible"/>
<el-table-column label="用户最大可领个数" align="center" prop="maxCouponsPerUser" v-if="columns[13].visible"/>
<el-table-column label="批次已发放个数" align="center" prop="giveNum" v-if="columns[13].visible"/>
<el-table-column label="券code模式" align="center" prop="couponCodeMode" v-if="columns[14].visible"/>
<!-- <el-table-column label="发送类型" align="center" prop="sendType" />-->
<!-- <el-table-column label="触发事件" align="center" prop="eventType" />-->
<el-table-column label="发送类型" align="center" prop="sendType">
<template slot-scope="scope">
<span v-if="scope.row.sendType == 'AUTO'">自动发送</span>
<span v-if="scope.row.sendType == 'MANUAL'">手动发送</span>
<span v-if="scope.row.sendType == 'newUser'">新用户领取</span>
</template>
</el-table-column>
<el-table-column label="触发事件" align="center" prop="eventType" />
<!-- <el-table-column label="折扣类型" align="center" prop="discountType" />-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@ -249,18 +256,24 @@
<el-input v-model="form.maxCouponsPerUser" placeholder="请输入用户最大可领个数" />
</el-form-item>
<!-- <el-form-item label="发放类型" prop="sendType">-->
<!-- <el-select v-model="form.sendType" placeholder="请选择发放类型">-->
<!-- <el-option label="自动发送" value="AUTO" />-->
<!-- <el-option label="手动发送" value="MANUAL" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="自动触发事件" prop="eventType">-->
<!-- <el-select v-model="form.eventType" placeholder="请选自动触发事件">-->
<!-- <el-option label="用户注册成功" value="registered_successfully" />-->
<!-- <el-option label="用户下单成功" value="checkout_success " />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="发放类型" prop="sendType">
<el-select v-model="form.sendType" placeholder="请选择发放类型">
<el-option label="自动发送" value="AUTO" />
<el-option label="手动发送" value="MANUAL" />
<el-option label="新用户领取" value="newUser" />
</el-select>
</el-form-item>
<el-form-item label="自动触发事件" prop="eventType">
<el-select v-model="form.eventType" placeholder="请选自动触发事件">
<el-option label="用户注册成功" value="registered_successfully" />
<el-option label="用户下单成功" value="checkout_success " />
</el-select>
</el-form-item>
<el-form-item label="海报" prop="couponPoster">
<imageUpload v-model="form.couponPoster"/>
</el-form-item>
<!-- <el-form-item label="折扣类型" prop="discountType">-->
<!-- <el-select v-model="form.discountType" placeholder="请选择折扣类型">-->
<!-- <el-option label="按订单折扣" value="BYORDER" />-->
@ -356,6 +369,9 @@ export default {
maxCouponsPerUser: [
{ required: true, message: "用户最大可领个数不能为空", trigger: "blur" }
],
availableDayAfterReceive: [
{ required: true, message: "领取后N天开始生效不能为空", trigger: "blur" }
],
},
columns: [
{ key: 1, label: "批次名称 ", visible: true },
@ -427,7 +443,8 @@ export default {
updateTime: null,
sendType: null,
discountType: null,
eventType: null
eventType: null,
couponPoster : null,
};
this.resetForm("form");
},


+ 132
- 25
ruoyi-catdog/src/main/java/com/ruoyi/applet/contoller/ApiMallTaskController.java View File

@ -1,77 +1,184 @@
package com.ruoyi.applet.contoller;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.cyl.h5.config.SecurityUtil;
import com.cyl.manager.marketing.service.IWechatStockService;
import com.cyl.manager.ums.domain.Member;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.model.domain.AppletTask;
import com.ruoyi.model.domain.AppletTaskUser;
import com.ruoyi.model.service.IAppletTaskService;
import com.ruoyi.model.service.IAppletTaskUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Api(description = "下单小程序端 - 任务中心相关接口")
@RestController
@RequestMapping("/applet/mall/task")
@RequestMapping("/h5/mall/task")
public class ApiMallTaskController extends BaseController {
@Autowired
private IAppletTaskService appletTaskService;
// 任务中心列表
@ApiOperation("mall端-任务中心列表")
@Autowired
private IAppletTaskUserService appletTaskUserService;
@Autowired
private IWechatStockService wechatStockService;
// 任务中心待领取列表
@ApiOperation("mall端-任务中心待领取列表")
@GetMapping("/list")
public TableDataInfo list(AppletTask appletTask) {
Member member = SecurityUtil.getLocalMember();
List<Long> notIds = appletTaskUserService.lambdaQuery()
.eq(AppletTaskUser::getMemberId, member.getId())
.select(AppletTaskUser::getTaskId)
.list().stream().map(n -> n.getTaskId())
.collect(Collectors.toList());
startPage();
List<AppletTask> list = appletTaskService.selectAppletTaskList(appletTask);
List<AppletTask> list = appletTaskService.lambdaQuery()
.notIn(notIds.size() > 0, AppletTask::getId, notIds)
.list();
for (AppletTask task : list) {
if (StringUtils.isNotBlank(task.getTaskCoupon())){
List<String> ids = Arrays.asList(task.getTaskCoupon().split(","));
task.setTaskCouponTitle(wechatStockService.getStockTitleByIds(ids));
}
}
// for (AppletTask task : list) {
// task.setStatus(appletTaskUserService.lambdaQuery()
// .eq(AppletTaskUser::getMemberId, member.getId())
// .eq(AppletTaskUser::getTaskId, task.getId())
// .count() > 0);
// }
return getDataTable(list);
}
// 任务中心已领取列表
@ApiOperation("mall端-任务中心已领取列表")
@GetMapping("/listByUser")
public TableDataInfo listByUser(AppletTaskUser appletTask) {
startPage();
Member member = SecurityUtil.getLocalMember();
appletTask.setMemberId(member.getId());
List<AppletTaskUser> list = appletTaskUserService.selectAppletTaskList(appletTask);
for (AppletTaskUser task : list) {
if (StringUtils.isNotBlank(task.getTaskCoupon())){
List<String> ids = Arrays.asList(task.getTaskCoupon().split(","));
task.setTaskCouponTitle(wechatStockService.getStockTitleByIds(ids));
}
}
return getDataTable(list);
}
//根据标识查询任务详情
@ApiOperation("mall端-根据标识查询任务详情")
//根据标识查询待领取任务详情
@ApiOperation("mall端-根据标识查询待领取任务详情")
@GetMapping("/taskDetail/{id}")
public AjaxResult taskDetail(AppletTask appletTask){
Member member = SecurityUtil.getLocalMember();
AppletTask task = appletTaskService.selectAppletTaskById(appletTask.getId());
// task.setStatus(appletTaskUserService.lambdaQuery()
// .eq(AppletTaskUser::getMemberId, member.getId())
// .eq(AppletTaskUser::getTaskId, task.getId())
// .count() > 0);
return AjaxResult.success("任务详情",task);
}
//根据标识查询已领取任务详情
@ApiOperation("mall端-根据标识查询已领取任务详情")
@GetMapping("/taskUserDetail/{id}")
public AjaxResult taskUserDetail(AppletTaskUser appletTask){
AppletTaskUser task = appletTaskUserService.selectAppletTaskById(appletTask.getId());
if (StringUtils.isNotBlank(task.getTaskCoupon())){
List<String> ids = Arrays.asList(task.getTaskCoupon().split(","));
task.setTaskCouponTitle(wechatStockService.getStockTitleByIds(ids));
}
return AjaxResult.success("任务详情",task);
}
//接受任务
@ApiOperation("mall端-接受任务")
@GetMapping("/acceptTask")
public AjaxResult acceptTask(@RequestBody AppletTask appletTask){
appletTask.setStatus(1);
int i = appletTaskService.updateAppletTask(appletTask);
if (i>0){
return AjaxResult.success("接受成功");
}
return AjaxResult.error("接受失败");
}
public AjaxResult acceptTask(AppletTask appletTask){
//提交任务信息
@ApiOperation("mall端-提交任务信息")
@PostMapping("/submitTask")
public AjaxResult submitTask(@RequestBody AppletTask appletTask){
appletTask.setTaskState(1);
int i = appletTaskService.updateAppletTask(appletTask);
if (i>0){
return AjaxResult.success("提交成功");
}
return AjaxResult.error("提交失败");
}
Member member = SecurityUtil.getLocalMember();
AppletTask task = appletTaskService.selectAppletTaskById(appletTask.getId());
AppletTaskUser taskUser = new AppletTaskUser();
BeanUtils.copyProperties(task, taskUser);
taskUser.setMemberId(member.getId());
taskUser.setId(null);
taskUser.setTaskId(task.getId());
appletTaskUserService.save(taskUser);
task.setGiveNum(task.getGiveNum() + 1);
appletTaskService.updateById(task);
return AjaxResult.success("接受成功");
}
//提交任务信息
@ApiOperation("mall端-提交任务信息")
@PostMapping("/submitTask")
public AjaxResult submitTask(@RequestBody AppletTaskUser appletTask){
appletTaskUserService.lambdaUpdate()
.eq(AppletTaskUser::getId, appletTask.getId())
.set(AppletTaskUser::getProveTxt, appletTask.getProveTxt())
.set(AppletTaskUser::getProveImage, appletTask.getProveImage())
.set(AppletTaskUser::getStatus, 1)
.set(AppletTaskUser::getSubmitTime, LocalDateTime.now())
.update();
return AjaxResult.success("提交成功");
}
}

+ 39
- 3
ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletTaskController.java View File

@ -1,6 +1,7 @@
package com.ruoyi.model.controller;
import java.util.List;
import javax.validation.Valid;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.util.StringUtils;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@ -61,7 +63,14 @@ public class AppletTaskController extends BaseController {
@PreAuthorize("@ss.hasPermi('model:AppletTask:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id) {
return AjaxResult.success(appletTaskService.selectAppletTaskById(id));
if (id == null || id <= 0) {
return AjaxResult.error("任务ID不能为空或无效");
}
AppletTask task = appletTaskService.selectAppletTaskById(id);
if (task == null) {
return AjaxResult.error("任务不存在");
}
return AjaxResult.success(task);
}
/**
@ -70,7 +79,12 @@ public class AppletTaskController extends BaseController {
@PreAuthorize("@ss.hasPermi('model:AppletTask:add')")
@Log(title = "任务中心", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody AppletTask appletTask) {
public AjaxResult add(@Valid @RequestBody AppletTask appletTask) {
// 参数验证
if (appletTask.getStartTime() != null && appletTask.getEndTime() != null
&& appletTask.getStartTime().isAfter(appletTask.getEndTime())) {
return AjaxResult.error("任务开始时间不能晚于结束时间");
}
return toAjax(appletTaskService.insertAppletTask(appletTask));
}
@ -80,7 +94,20 @@ public class AppletTaskController extends BaseController {
@PreAuthorize("@ss.hasPermi('model:AppletTask:edit')")
@Log(title = "任务中心", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody AppletTask appletTask) {
public AjaxResult edit(@Valid @RequestBody AppletTask appletTask) {
// 参数验证
if (appletTask.getId() == null || appletTask.getId() <= 0) {
return AjaxResult.error("任务ID不能为空或无效");
}
if (appletTask.getStartTime() != null && appletTask.getEndTime() != null
&& appletTask.getStartTime().isAfter(appletTask.getEndTime())) {
return AjaxResult.error("任务开始时间不能晚于结束时间");
}
// 检查任务是否存在
AppletTask existTask = appletTaskService.selectAppletTaskById(appletTask.getId());
if (existTask == null) {
return AjaxResult.error("任务不存在");
}
return toAjax(appletTaskService.updateAppletTask(appletTask));
}
@ -91,6 +118,15 @@ public class AppletTaskController extends BaseController {
@Log(title = "任务中心", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
if (ids == null || ids.length == 0) {
return AjaxResult.error("请选择要删除的任务");
}
// 验证所有ID都有效
for (Long id : ids) {
if (id == null || id <= 0) {
return AjaxResult.error("任务ID不能为空或无效");
}
}
return toAjax(appletTaskService.deleteAppletTaskByIds(ids));
}
}

+ 92
- 0
ruoyi-catdog/src/main/java/com/ruoyi/model/controller/AppletTaskUserController.java View File

@ -0,0 +1,92 @@
package com.ruoyi.model.controller;
import com.ruoyi.common.annotation.Log;
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.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.model.domain.AppletTask;
import com.ruoyi.model.domain.AppletTaskUser;
import com.ruoyi.model.service.IAppletTaskService;
import com.ruoyi.model.service.IAppletTaskUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 任务中心Controller
*
* @author daixiande
* @date 2025-04-24
*/
@RestController
@RequestMapping("/model/AppletTaskUser")
public class AppletTaskUserController extends BaseController {
@Autowired
private IAppletTaskUserService appletTaskUserService;
/**
* 查询任务中心列表
*/
@PreAuthorize("@ss.hasPermi('model:AppletTaskUser:list')")
@GetMapping("/list")
public TableDataInfo list(AppletTaskUser appletTask) {
startPage();
List<AppletTaskUser> list = appletTaskUserService.selectAppletTaskList(appletTask);
return getDataTable(list);
}
/**
* 导出任务中心列表
*/
@PreAuthorize("@ss.hasPermi('model:AppletTaskUser:export')")
@Log(title = "任务中心", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public AjaxResult export(AppletTaskUser appletTask) {
List<AppletTaskUser> list = appletTaskUserService.selectAppletTaskList(appletTask);
ExcelUtil<AppletTaskUser> util = new ExcelUtil<AppletTaskUser>(AppletTaskUser.class);
return util.exportExcel(list, "任务中心数据");
}
/**
* 获取任务中心详细信息
*/
@PreAuthorize("@ss.hasPermi('model:AppletTaskUser:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id) {
return AjaxResult.success(appletTaskUserService.selectAppletTaskById(id));
}
/**
* 新增任务中心
*/
@PreAuthorize("@ss.hasPermi('model:AppletTaskUser:add')")
@Log(title = "任务中心", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody AppletTaskUser appletTask) {
return toAjax(appletTaskUserService.insertAppletTask(appletTask));
}
/**
* 修改任务中心
*/
@PreAuthorize("@ss.hasPermi('model:AppletTaskUser:edit')")
@Log(title = "任务中心", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody AppletTaskUser appletTask) {
return toAjax(appletTaskUserService.updateAppletTask(appletTask));
}
/**
* 删除任务中心
*/
@PreAuthorize("@ss.hasPermi('model:AppletTaskUser:remove')")
@Log(title = "任务中心", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(appletTaskUserService.deleteAppletTaskByIds(ids));
}
}

+ 28
- 25
ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletTask.java View File

@ -2,6 +2,8 @@ package com.ruoyi.model.domain;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseAudit;
@ -18,14 +20,6 @@ public class AppletTask extends BaseAudit {
/** 标识 */
private Long id;
/** 当前状态0待接受1以接受 */
@Excel(name = "当前状态0待接受1以接受")
private Integer status;
/** 下单用户标识 */
@Excel(name = "下单用户标识")
private Long memberId;
/** 任务类型名称 */
@Excel(name = "任务类型名称")
private String taskName;
@ -38,6 +32,14 @@ public class AppletTask extends BaseAudit {
@Excel(name = "任务报酬")
private BigDecimal taskMoney;
/** 任务结算的优惠劵 */
@Excel(name = "任务结算的优惠劵")
private String taskCoupon;
/** 任务类型 任务类型,0优惠劵1现金 */
@Excel(name = "任务类型")
private String type;
/** 图片 */
@Excel(name = "图片")
private String image;
@ -50,28 +52,29 @@ public class AppletTask extends BaseAudit {
@Excel(name = "主题")
private String theme;
/** 任务开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "任务开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
/** 任务截至时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "任务截至时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime taskEndTime;
/** 任务进度 */
@Excel(name = "任务进度")
private Integer taskState;
/** 审核状态 */
@Excel(name = "审核状态")
private Integer examineState;
private LocalDateTime endTime;
/** 审核说明 */
@Excel(name = "审核说明")
private String examineText;
/** 任务最大领取数量 */
@Excel(name = "任务最大领取数量")
private Integer maxGetNum;
/** 审核图片 */
@Excel(name = "审核图片")
private String examineImage;
/** 任务已领取数量 */
@Excel(name = "任务已领取数量")
private Integer giveNum;
/** DEL_FLAG */
private Long delFlag;
/** 优惠劵名称 */
@TableField(exist = false)
private String taskCouponTitle;
/** 当前用户是否领取 */
@TableField(exist = false)
private boolean status;
}

+ 99
- 0
ruoyi-catdog/src/main/java/com/ruoyi/model/domain/AppletTaskUser.java View File

@ -0,0 +1,99 @@
package com.ruoyi.model.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseAudit;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 任务中心对象 applet_task
*
* @author daixiande
*/
@Data
public class AppletTaskUser extends BaseAudit {
private static final long serialVersionUID = 1L;
/** 标识 */
private Long id;
/** 所属任务 */
private Long taskId;
/** 下单用户标识 */
@Excel(name = "下单用户标识")
private Long memberId;
/** 任务类型名称 */
@Excel(name = "任务类型名称")
private String taskName;
/** 任务小图 */
@Excel(name = "任务小图")
private String taskIcon;
/** 任务报酬 */
@Excel(name = "任务报酬")
private BigDecimal taskMoney;
/** 任务结算的优惠劵 */
@Excel(name = "任务结算的优惠劵")
private String taskCoupon;
/** 任务类型 任务类型,0优惠劵1现金 */
@Excel(name = "任务类型")
private String type;
/** 图片 */
@Excel(name = "图片")
private String image;
/** 标题 */
@Excel(name = "标题")
private String title;
/** 主题 */
@Excel(name = "主题")
private String theme;
/** 任务开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "任务开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
/** 任务截至时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "任务截至时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
/** 提交审核时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "提交审核时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime submitTime;
/** 证明截图 */
@Excel(name = "证明截图")
private String proveImage;
/** 证明说明 */
@Excel(name = "证明说明")
private String proveTxt;
/** 驳回说明 */
@Excel(name = "驳回说明")
private String rejectTxt;
/** 审核流程状态 */
@Excel(name = "审核流程状态 0待提交 1待审核 2已通过 3已拒绝")
private Integer status;
/** 优惠劵名称 */
@TableField(exist = false)
private String taskCouponTitle;
}

+ 3
- 56
ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletTaskMapper.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.AppletTask;
/**
@ -8,60 +10,5 @@ import com.ruoyi.model.domain.AppletTask;
*
* @author daixiande
*/
public interface AppletTaskMapper {
/**
* 查询任务中心
*
* @param id 任务中心主键
* @return 任务中心
*/
AppletTask selectById(Long id);
/**
* 查询任务中心列表
*
* @param appletTask 任务中心
* @return 任务中心集合
*/
List<AppletTask> selectList(AppletTask appletTask);
/**
* 新增任务中心
*
* @param appletTask 任务中心
* @return 结果
*/
int insert(AppletTask appletTask);
/**
* 修改任务中心
*
* @param appletTask 任务中心
* @return 结果
*/
int update(AppletTask appletTask);
/**
* 删除任务中心
*
* @param id 任务中心主键
* @return 结果
*/
int deleteById(Long id);
/**
* 批量删除任务中心
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
int deleteByIds(Long[] ids);
/**
* 更新或插入任务中心
*
* @param appletTask 任务中心
* @return 结果
*/
int insertOrUpdate(AppletTask appletTask);
public interface AppletTaskMapper extends BaseMapper<AppletTask> {
}

+ 13
- 0
ruoyi-catdog/src/main/java/com/ruoyi/model/mapper/AppletTaskUserMapper.java View File

@ -0,0 +1,13 @@
package com.ruoyi.model.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.model.domain.AppletTask;
import com.ruoyi.model.domain.AppletTaskUser;
/**
* 任务中心Mapper接口
*
* @author daixiande
*/
public interface AppletTaskUserMapper extends BaseMapper<AppletTaskUser> {
}

+ 3
- 1
ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletTaskService.java View File

@ -1,5 +1,7 @@
package com.ruoyi.model.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.model.domain.AppletTask;
/**
@ -7,7 +9,7 @@ import com.ruoyi.model.domain.AppletTask;
*
* @author daixiande
*/
public interface IAppletTaskService {
public interface IAppletTaskService extends IService<AppletTask> {
/**
* 查询任务中心
*


+ 62
- 0
ruoyi-catdog/src/main/java/com/ruoyi/model/service/IAppletTaskUserService.java View File

@ -0,0 +1,62 @@
package com.ruoyi.model.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.model.domain.AppletTask;
import com.ruoyi.model.domain.AppletTaskUser;
import java.util.List;
/**
* 任务中心Service接口
*
* @author daixiande
*/
public interface IAppletTaskUserService extends IService<AppletTaskUser> {
/**
* 查询任务中心
*
* @param id 任务中心主键
* @return 任务中心
*/
AppletTaskUser selectAppletTaskById(Long id);
/**
* 查询任务中心列表
*
* @param appletTask 任务中心
* @return 任务中心集合
*/
List<AppletTaskUser> selectAppletTaskList(AppletTaskUser appletTask);
/**
* 新增任务中心
*
* @param appletTask 任务中心
* @return 结果
*/
int insertAppletTask(AppletTaskUser appletTask);
/**
* 修改任务中心
*
* @param appletTask 任务中心
* @return 结果
*/
int updateAppletTask(AppletTaskUser appletTask);
/**
* 批量删除任务中心
*
* @param ids 需要删除的任务中心主键集合
* @return 结果
*/
int deleteAppletTaskByIds(Long[] ids);
/**
* 删除任务中心信息
*
* @param id 任务中心主键
* @return 结果
*/
int deleteAppletTaskById(Long id);
}

+ 49
- 7
ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletTaskServiceImpl.java View File

@ -1,9 +1,14 @@
package com.ruoyi.model.service.impl;
import java.util.Arrays;
import java.util.List;
import java.time.LocalDateTime;
import java.util.stream.Collectors;
import com.ruoyi.common.utils.DateUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cyl.manager.marketing.service.IWechatStockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.model.mapper.AppletTaskMapper;
@ -16,10 +21,15 @@ import com.ruoyi.model.service.IAppletTaskService;
* @author daixiande
*/
@Service
public class AppletTaskServiceImpl implements IAppletTaskService {
public class AppletTaskServiceImpl extends ServiceImpl<AppletTaskMapper, AppletTask> implements IAppletTaskService {
@Autowired
private AppletTaskMapper appletTaskMapper;
@Autowired
private IWechatStockService wechatStockService;
/**
* 查询任务中心
*
@ -28,7 +38,16 @@ public class AppletTaskServiceImpl implements IAppletTaskService {
*/
@Override
public AppletTask selectAppletTaskById(Long id) {
return appletTaskMapper.selectById(id);
AppletTask task = appletTaskMapper.selectById(id);
if (StringUtils.isNotBlank(task.getTaskCoupon())){
List<String> ids = Arrays.asList(task.getTaskCoupon().split(","));
task.setTaskCouponTitle(wechatStockService.getStockTitleByIds(ids));
}
return task;
}
/**
@ -39,7 +58,30 @@ public class AppletTaskServiceImpl implements IAppletTaskService {
*/
@Override
public List<AppletTask> selectAppletTaskList(AppletTask appletTask) {
return appletTaskMapper.selectList(appletTask);
List<AppletTask> appletTasks = appletTaskMapper.selectList(Wrappers.<AppletTask>lambdaQuery()
.eq(appletTask.getId() != null, AppletTask::getId, appletTask.getId())
.like(appletTask.getTaskName() != null, AppletTask::getTaskName, appletTask.getTaskName())
.eq(appletTask.getType() != null, AppletTask::getType, appletTask.getType())
.like(appletTask.getTitle() != null, AppletTask::getTitle, appletTask.getTitle())
.like(appletTask.getTheme() != null, AppletTask::getTheme, appletTask.getTheme())
.like(appletTask.getTaskCoupon() != null, AppletTask::getTaskCoupon, appletTask.getTaskCoupon())
.ge(appletTask.getStartTime() != null, AppletTask::getStartTime, appletTask.getStartTime())
.le(appletTask.getEndTime() != null, AppletTask::getEndTime, appletTask.getEndTime())
.eq(appletTask.getMaxGetNum() != null, AppletTask::getMaxGetNum, appletTask.getMaxGetNum())
.eq(appletTask.getGiveNum() != null, AppletTask::getGiveNum, appletTask.getGiveNum())
.orderByDesc(AppletTask::getCreateTime));
for (AppletTask task : appletTasks) {
if (StringUtils.isNotBlank(task.getTaskCoupon())){
List<String> ids = Arrays.asList(task.getTaskCoupon().split(","));
task.setTaskCouponTitle(wechatStockService.getStockTitleByIds(ids));
}
}
return appletTasks;
}
/**
@ -62,8 +104,8 @@ public class AppletTaskServiceImpl implements IAppletTaskService {
*/
@Override
public int updateAppletTask(AppletTask appletTask) {
appletTask.setUpdateTime(DateUtils.getNowDate());
return appletTaskMapper.update(appletTask);
appletTask.setUpdateTime(LocalDateTime.now());
return appletTaskMapper.updateById(appletTask);
}
/**
@ -74,7 +116,7 @@ public class AppletTaskServiceImpl implements IAppletTaskService {
*/
@Override
public int deleteAppletTaskByIds(Long[] ids) {
return appletTaskMapper.deleteByIds(ids);
return appletTaskMapper.deleteBatchIds(Arrays.asList(ids));
}
/**


+ 164
- 0
ruoyi-catdog/src/main/java/com/ruoyi/model/service/impl/AppletTaskUserServiceImpl.java View File

@ -0,0 +1,164 @@
package com.ruoyi.model.service.impl;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cyl.h5.config.SecurityUtil;
import com.cyl.h5.service.H5CouponService;
import com.cyl.manager.marketing.pojo.SendCouponRequest;
import com.cyl.manager.marketing.service.IWechatStockService;
import com.cyl.manager.ums.domain.Member;
import com.cyl.manager.ums.service.MemberService;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.model.domain.AppletTask;
import com.ruoyi.model.domain.AppletTaskUser;
import com.ruoyi.model.mapper.AppletTaskMapper;
import com.ruoyi.model.mapper.AppletTaskUserMapper;
import com.ruoyi.model.service.IAppletTaskService;
import com.ruoyi.model.service.IAppletTaskUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
/**
* 任务中心Service业务层处理
*
* @author daixiande
*/
@Service
public class AppletTaskUserServiceImpl extends ServiceImpl<AppletTaskUserMapper, AppletTaskUser> implements IAppletTaskUserService {
@Autowired
private IWechatStockService wechatStockService;
@Autowired
private H5CouponService h5CouponService;
@Autowired
private MemberService memberService;
/**
* 查询任务中心
*
* @param id 任务中心主键
* @return 任务中心
*/
@Override
public AppletTaskUser selectAppletTaskById(Long id) {
AppletTaskUser task = getById(id);
if (StringUtils.isNotBlank(task.getTaskCoupon())){
List<String> ids = Arrays.asList(task.getTaskCoupon().split(","));
task.setTaskCouponTitle(wechatStockService.getStockTitleByIds(ids));
}
return task;
}
/**
* 查询任务中心列表
*
* @param appletTask 任务中心
* @return 任务中心
*/
@Override
public List<AppletTaskUser> selectAppletTaskList(AppletTaskUser appletTask) {
List<AppletTaskUser> appletTasks = baseMapper.selectList(Wrappers.<AppletTaskUser>lambdaQuery()
.eq(appletTask.getId() != null, AppletTaskUser::getId, appletTask.getId())
.eq(appletTask.getTaskId() != null, AppletTaskUser::getTaskId, appletTask.getTaskId())
.eq(appletTask.getMemberId() != null, AppletTaskUser::getMemberId, appletTask.getMemberId())
.like(appletTask.getTaskName() != null, AppletTaskUser::getTaskName, appletTask.getTaskName())
.eq(appletTask.getType() != null, AppletTaskUser::getType, appletTask.getType())
.like(appletTask.getTitle() != null, AppletTaskUser::getTitle, appletTask.getTitle())
.like(appletTask.getTheme() != null, AppletTaskUser::getTheme, appletTask.getTheme())
.ge(appletTask.getStartTime() != null, AppletTaskUser::getStartTime, appletTask.getStartTime())
.le(appletTask.getEndTime() != null, AppletTaskUser::getEndTime, appletTask.getEndTime())
.eq(appletTask.getStatus() != null, AppletTaskUser::getStatus, appletTask.getStatus())
.orderByDesc(AppletTaskUser::getCreateTime));
for (AppletTaskUser task : appletTasks) {
if (StringUtils.isNotBlank(task.getTaskCoupon())){
List<String> ids = Arrays.asList(task.getTaskCoupon().split(","));
task.setTaskCouponTitle(wechatStockService.getStockTitleByIds(ids));
}
}
return appletTasks;
}
/**
* 新增任务中心
*
* @param appletTask 任务中心
* @return 结果
*/
@Override
public int insertAppletTask(AppletTaskUser appletTask) {
appletTask.setCreateTime(LocalDateTime.now());
return baseMapper.insert(appletTask);
}
/**
* 修改任务中心
*
* @param appletTask 任务中心
* @return 结果
*/
@Override
public int updateAppletTask(AppletTaskUser appletTask) {
appletTask.setUpdateTime(DateUtils.getNowDate());
if (appletTask.getStatus() == 2 &&
"0".equals(appletTask.getType()) &&
StringUtils.isNotBlank(appletTask.getTaskCoupon())){
Member member = memberService.selectById(appletTask.getMemberId());
if (member == null){
throw new ServiceException("会员不存在");
}
String phone = memberService.getPhoneDecrypted(member.getPhoneEncrypted());
Arrays.stream(appletTask.getTaskCoupon().split(",")).map(Long::valueOf).forEach(c -> {
SendCouponRequest sendCouponRequest = new SendCouponRequest();
sendCouponRequest.setPhone(phone);
sendCouponRequest.setStockId(c);
h5CouponService.sendCoupon(sendCouponRequest);
});
}
return baseMapper.updateById(appletTask);
}
/**
* 批量删除任务中心
*
* @param ids 需要删除的任务中心主键
* @return 结果
*/
@Override
public int deleteAppletTaskByIds(Long[] ids) {
return baseMapper.deleteBatchIds(Arrays.asList(ids));
}
/**
* 删除任务中心信息
*
* @param id 任务中心主键
* @return 结果
*/
@Override
public int deleteAppletTaskById(Long id) {
return baseMapper.deleteById(id);
}
}

+ 0
- 185
ruoyi-catdog/src/main/resources/mapper/model/AppletTaskMapper.xml View File

@ -1,185 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.model.mapper.AppletTaskMapper">
<resultMap type="AppletTask" id="AppletTaskResult">
<result property="id" column="id"/>
<result property="status" column="status"/>
<result property="memberId" column="member_id"/>
<result property="taskName" column="task_name"/>
<result property="taskIcon" column="task_icon"/>
<result property="taskMoney" column="task_money"/>
<result property="image" column="image"/>
<result property="title" column="title"/>
<result property="theme" column="theme"/>
<result property="taskEndTime" column="task_end_time"/>
<result property="taskState" column="task_state"/>
<result property="examineState" column="examine_state"/>
<result property="examineText" column="examine_text"/>
<result property="examineImage" column="examine_image"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
<sql id="selectAppletTaskVo">
select id, status, member_id, task_name, task_icon, task_money, image, title, theme, task_end_time, task_state, examine_state, examine_text, examine_image, create_time, create_by, update_time, update_by, del_flag from applet_task
</sql>
<select id="selectList" parameterType="AppletTask" resultMap="AppletTaskResult">
<include refid="selectAppletTaskVo"/>
<where>
<if test="status != null "> and status = #{status}</if>
<if test="memberId != null "> and member_id = #{memberId}</if>
<if test="taskName != null and taskName != ''"> and task_name like concat('%', #{taskName}, '%')</if>
<if test="taskIcon != null and taskIcon != ''"> and task_icon = #{taskIcon}</if>
<if test="taskMoney != null "> and task_money = #{taskMoney}</if>
<if test="image != null and image != ''"> and image = #{image}</if>
<if test="title != null and title != ''"> and title = #{title}</if>
<if test="theme != null and theme != ''"> and theme = #{theme}</if>
<if test="taskEndTime != null "> and task_end_time = #{taskEndTime}</if>
<if test="taskState != null "> and task_state = #{taskState}</if>
<if test="examineState != null "> and examine_state = #{examineState}</if>
<if test="examineText != null and examineText != ''"> and examine_text = #{examineText}</if>
<if test="examineImage != null and examineImage != ''"> and examine_image = #{examineImage}</if>
</where>
</select>
<select id="selectById" parameterType="Long" resultMap="AppletTaskResult">
<include refid="selectAppletTaskVo"/>
where id = #{id}
</select>
<insert id="insert" parameterType="AppletTask">
insert into applet_task
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="status != null">status,</if>
<if test="memberId != null">member_id,</if>
<if test="taskName != null">task_name,</if>
<if test="taskIcon != null">task_icon,</if>
<if test="taskMoney != null">task_money,</if>
<if test="image != null">image,</if>
<if test="title != null">title,</if>
<if test="theme != null">theme,</if>
<if test="taskEndTime != null">task_end_time,</if>
<if test="taskState != null">task_state,</if>
<if test="examineState != null">examine_state,</if>
<if test="examineText != null">examine_text,</if>
<if test="examineImage != null">examine_image,</if>
<if test="createTime != null">create_time,</if>
<if test="createBy != null">create_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="delFlag != null">del_flag,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="status != null">#{status},</if>
<if test="memberId != null">#{memberId},</if>
<if test="taskName != null">#{taskName},</if>
<if test="taskIcon != null">#{taskIcon},</if>
<if test="taskMoney != null">#{taskMoney},</if>
<if test="image != null">#{image},</if>
<if test="title != null">#{title},</if>
<if test="theme != null">#{theme},</if>
<if test="taskEndTime != null">#{taskEndTime},</if>
<if test="taskState != null">#{taskState},</if>
<if test="examineState != null">#{examineState},</if>
<if test="examineText != null">#{examineText},</if>
<if test="examineImage != null">#{examineImage},</if>
<if test="createTime != null">#{createTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="delFlag != null">#{delFlag},</if>
</trim>
</insert>
<update id="update" parameterType="AppletTask">
update applet_task
<trim prefix="SET" suffixOverrides=",">
<if test="status != null">status = #{status},</if>
<if test="memberId != null">member_id = #{memberId},</if>
<if test="taskName != null">task_name = #{taskName},</if>
<if test="taskIcon != null">task_icon = #{taskIcon},</if>
<if test="taskMoney != null">task_money = #{taskMoney},</if>
<if test="image != null">image = #{image},</if>
<if test="title != null">title = #{title},</if>
<if test="theme != null">theme = #{theme},</if>
<if test="taskEndTime != null">task_end_time = #{taskEndTime},</if>
<if test="taskState != null">task_state = #{taskState},</if>
<if test="examineState != null">examine_state = #{examineState},</if>
<if test="examineText != null">examine_text = #{examineText},</if>
<if test="examineImage != null">examine_image = #{examineImage},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteById" parameterType="Long">
delete from applet_task where id = #{id}
</delete>
<delete id="deleteByIds" parameterType="String">
delete from applet_task where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<insert id="insertOrUpdate" parameterType="AppletTask" useGeneratedKeys="true" keyProperty="id">
insert into applet_task
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
status, member_id, task_name, task_icon, task_money, image, title, theme, task_end_time, task_state, examine_state, examine_text, examine_image, create_time, create_by, update_time, update_by, del_flag,
</trim>
values
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id, jdbcType=BIGINT},
</if>
#{status, jdbcType=INTEGER},#{memberId, jdbcType=BIGINT},#{taskName, jdbcType=VARCHAR},#{taskIcon, jdbcType=VARCHAR},#{taskMoney, jdbcType=DECIMAL},#{image, jdbcType=VARCHAR},#{title, jdbcType=VARCHAR},#{theme, jdbcType=VARCHAR},#{taskEndTime, jdbcType=DATE},#{taskState, jdbcType=INTEGER},#{examineState, jdbcType=INTEGER},#{examineText, jdbcType=VARCHAR},#{examineImage, jdbcType=VARCHAR},#{createTime, jdbcType=DATE},#{createBy, jdbcType=BIGINT},#{updateTime, jdbcType=DATE},#{updateBy, jdbcType=BIGINT},#{delFlag, jdbcType=BIGINT},
</trim>
on duplicate key update
<trim suffixOverrides=",">
<if test="id != null">
id = #{id,jdbcType=BIGINT},
</if>
status = #{status, jdbcType=INTEGER},
member_id = #{memberId, jdbcType=BIGINT},
task_name = #{taskName, jdbcType=VARCHAR},
task_icon = #{taskIcon, jdbcType=VARCHAR},
task_money = #{taskMoney, jdbcType=DECIMAL},
image = #{image, jdbcType=VARCHAR},
title = #{title, jdbcType=VARCHAR},
theme = #{theme, jdbcType=VARCHAR},
task_end_time = #{taskEndTime, jdbcType=DATE},
task_state = #{taskState, jdbcType=INTEGER},
examine_state = #{examineState, jdbcType=INTEGER},
examine_text = #{examineText, jdbcType=VARCHAR},
examine_image = #{examineImage, jdbcType=VARCHAR},
create_time = #{createTime, jdbcType=DATE},
create_by = #{createBy, jdbcType=BIGINT},
update_time = #{updateTime, jdbcType=DATE},
update_by = #{updateBy, jdbcType=BIGINT},
del_flag = #{delFlag, jdbcType=BIGINT},
</trim>
</insert>
</mapper>

+ 19
- 0
ruoyi-mall/src/main/java/com/cyl/h5/controller/H5CouponController.java View File

@ -11,6 +11,10 @@ import com.cyl.manager.marketing.domain.WechatMemberCoupon;
import com.cyl.manager.marketing.domain.WechatStock;
import com.cyl.manager.marketing.mapper.WechatMemberCouponMapper;
import com.cyl.manager.marketing.pojo.SendCouponRequest;
import com.cyl.manager.oms.domain.OmsOrderService;
import com.cyl.manager.oms.domain.Order;
import com.cyl.manager.oms.mapper.OmsOrderServiceMapper;
import com.cyl.manager.oms.mapper.OrderMapper;
import com.cyl.manager.ums.domain.Member;
import com.cyl.manager.ums.service.MemberService;
import com.github.pagehelper.PageHelper;
@ -51,6 +55,9 @@ public class H5CouponController extends BaseController
@Autowired
private WechatMemberCouponMapper wechatMemberCouponMapper;
@Autowired
private OrderMapper orderMapper;
/**
* 查询商家券列表
*/
@ -71,6 +78,18 @@ public class H5CouponController extends BaseController
List<WechatStock> list = h5CouponService.selectWechatStocktForGet(member);
// TODO 判断当前用户是否是新人如果是就查询新人优惠劵
Integer integer = orderMapper.selectCount(Wrappers.
<Order>lambdaQuery()
.eq(Order::getMemberId, member.getId()));
if (integer == 0){
//新用户
WechatStock newUserCoupon = h5CouponService.getNewUserCoupon();
if (newUserCoupon != null){
list.add(0, newUserCoupon);
}
}
for (WechatStock stock : list) {
stock.setAlreadyReceived(wechatMemberCouponMapper.selectCount(
Wrappers.<WechatMemberCoupon>lambdaQuery()


+ 14
- 0
ruoyi-mall/src/main/java/com/cyl/h5/service/H5CouponService.java View File

@ -1,6 +1,7 @@
package com.cyl.h5.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cyl.manager.marketing.domain.WechatStock;
import com.cyl.manager.marketing.mapper.WechatStockMapper;
import com.cyl.manager.marketing.pojo.SendCouponRequest;
@ -36,6 +37,7 @@ public class H5CouponService {
QueryWrapper<WechatStock> qw = new QueryWrapper<>();
qw.eq("send_type", "MANUAL");
qw.ge("available_end_time", LocalDateTime.now());
qw.le("available_begin_time", LocalDateTime.now());
qw.lambda().orderByDesc(WechatStock::getCreateTime);
return wechatStockMapper.selectList(qw);
}
@ -51,4 +53,16 @@ public class H5CouponService {
public int sendCoupon(SendCouponRequest sendCouponRequest) {
return wechatMemberCouponService.sendCoupon(sendCouponRequest);
}
public WechatStock getNewUserCoupon() {
List<WechatStock> wechatStocks = wechatStockMapper.selectList(Wrappers.<WechatStock>lambdaQuery()
.eq(WechatStock::getSendType, "newUser")
.ge(WechatStock::getAvailableEndTime, LocalDateTime.now())
.le(WechatStock::getAvailableBeginTime, LocalDateTime.now())
);
if (wechatStocks.size() > 0){
return wechatStocks.get(0);
}
return null;
}
}

+ 10
- 2
ruoyi-mall/src/main/java/com/cyl/manager/marketing/domain/WechatStock.java View File

@ -98,7 +98,7 @@ RUNNING:运行中 */
private String stockId;
/** 发放类型 */
@Excel(name = "发放类型")
@Excel(name = "发放类型 newUser新用户领取 ")
private String sendType;
/** 折扣类型 */
@ -109,7 +109,15 @@ RUNNING:运行中 */
@Excel(name = "触发事件")
private String eventType;
/** 已领取 */
/** 优惠劵已发放个数 */
@Excel(name = "优惠劵已发放个数")
private Integer giveNum;
/** 优惠劵海报 */
@Excel(name = "优惠劵海报")
private String couponPoster;
/** 当前用户领取次数 */
@TableField(exist = false)
private Integer alreadyReceived;
}

+ 1
- 2
ruoyi-mall/src/main/java/com/cyl/manager/marketing/mapper/WechatStockMapper.java View File

@ -46,8 +46,6 @@ public interface WechatStockMapper extends BaseMapper<WechatStock> {
/**
* 删除微信商家券
*
* @param id 微信商家券主键
* @return 结果
*/
int deleteById(Long id);
@ -67,4 +65,5 @@ public interface WechatStockMapper extends BaseMapper<WechatStock> {
* @return 结果
*/
int insertOrUpdate(WechatStock wechatStock);
}

+ 2
- 0
ruoyi-mall/src/main/java/com/cyl/manager/marketing/service/IWechatStockService.java View File

@ -59,4 +59,6 @@ public interface IWechatStockService {
* @return 结果
*/
int deleteWechatStockById(Long id);
String getStockTitleByIds(List<String> list);
}

+ 13
- 0
ruoyi-mall/src/main/java/com/cyl/manager/marketing/service/impl/WechatMemberCouponServiceImpl.java View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cyl.manager.marketing.domain.WechatMemberCoupon;
import com.cyl.manager.marketing.domain.WechatStock;
import com.cyl.manager.marketing.mapper.WechatMemberCouponMapper;
import com.cyl.manager.marketing.mapper.WechatStockMapper;
import com.cyl.manager.marketing.pojo.SendCouponRequest;
import com.cyl.manager.marketing.service.IWechatMemberCouponService;
import com.cyl.manager.marketing.service.IWechatStockService;
@ -38,6 +39,9 @@ public class WechatMemberCouponServiceImpl implements IWechatMemberCouponService
@Autowired
private IWechatStockService wechatStockService;
@Autowired
private WechatStockMapper wechatStockMapper;
@Autowired
private MemberWechatService memberWechatService;
@ -163,6 +167,10 @@ public class WechatMemberCouponServiceImpl implements IWechatMemberCouponService
throw new ServiceException("[发送优惠券]该优惠券已过期:" + sendCouponRequest.getStockId());
}
if (wechatStock.getGiveNum() >= wechatStock.getMaxCoupons()) {
throw new ServiceException("[发送优惠券]该优惠券被抢光啦:" + sendCouponRequest.getStockId());
}
//3.5 验证该用户是否已经领取该优惠券
QueryWrapper<WechatMemberCoupon> qw = new QueryWrapper<>();
qw.eq("member_id", member.getId());
@ -195,6 +203,11 @@ public class WechatMemberCouponServiceImpl implements IWechatMemberCouponService
wechatMemberCoupon.setCouponState("SENDED");
wechatMemberCoupon.setDiscountType(wechatStock.getDiscountType());
wechatStock.setGiveNum(wechatStock.getGiveNum() + 1);
wechatStockMapper.updateById(wechatStock);
log.info("【平台券发放】发送成功:" + wechatMemberCoupon);
//TODO 短信提醒


+ 17
- 0
ruoyi-mall/src/main/java/com/cyl/manager/marketing/service/impl/WechatStockServiceImpl.java View File

@ -8,6 +8,7 @@ import cn.felord.payment.wechat.v3.WechatResponseEntity;
import cn.felord.payment.wechat.v3.model.busifavor.*;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cyl.manager.marketing.domain.WechatStock;
import com.cyl.manager.marketing.mapper.WechatStockMapper;
import com.cyl.manager.marketing.service.IWechatStockService;
@ -203,4 +204,20 @@ public class WechatStockServiceImpl implements IWechatStockService {
public int deleteWechatStockById(Long id) {
return wechatStockMapper.deleteById(id);
}
@Override
public String getStockTitleByIds(List<String> list) {
List<WechatStock> wechatStocks = wechatStockMapper.selectList(Wrappers.<WechatStock>lambdaQuery()
.select(WechatStock::getStockName)
.in(WechatStock::getId, list));
StringBuffer buffer = new StringBuffer();
for (WechatStock wechatStock : wechatStocks) {
buffer.append(wechatStock.getStockName()).append(",");
}
return buffer.length() > 1 ? buffer.substring(0, buffer.length() - 1) : "";
}
}

+ 24
- 1
ruoyi-mall/src/main/java/com/cyl/manager/ums/controller/MemberController.java View File

@ -3,9 +3,12 @@ package com.cyl.manager.ums.controller;
import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.cyl.manager.ums.mapper.MemberMapper;
import com.cyl.manager.ums.pojo.dto.ChangeMemberStatusDTO;
import com.cyl.manager.ums.pojo.vo.MemberDataStatisticsVO;
import com.cyl.manager.ums.pojo.vo.MemberExtendVo;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
@ -39,6 +42,8 @@ public class MemberController extends BaseController {
private MemberService service;
@Autowired
private MemberConvert convert;
@Autowired
private MemberMapper memberMapper;
// @ApiOperation("查询会员信息列表")
@PreAuthorize("@ss.hasPermi('ums:member:list')")
@ -65,6 +70,24 @@ public class MemberController extends BaseController {
return ResponseEntity.ok(new PageImpl<>(memberExtendVoList, page, ((com.github.pagehelper.Page)list).getTotal()));
}
@PreAuthorize("@ss.hasPermi('ums:member:list')")
@PostMapping("/listName")
public AjaxResult listName() {
List<Member> list = memberMapper.selectList(Wrappers.<Member>lambdaQuery()
.select(Member::getId,
Member::getNickname,
Member::getPhoneEncrypted
));
for (Member member : list) {
member.setPhoneHidden(service.getPhoneDecrypted(member.getPhoneEncrypted()));
member.setPhoneEncrypted(null);
}
return AjaxResult.success(list);
}
// @ApiOperation("导出会员信息列表")
@PreAuthorize("@ss.hasPermi('ums:member:export')")
@Log(title = "会员信息", businessType = BusinessType.EXPORT)
@ -109,7 +132,7 @@ public class MemberController extends BaseController {
// @ApiOperation("删除会员信息")
@PreAuthorize("@ss.hasPermi('ums:member:remove')")
@Log(title = "会员信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
@DeleteMapping("/{id}")
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
}


+ 12
- 1
ruoyi-mall/src/main/resources/mapper/marketing/WechatStockMapper.xml View File

@ -31,10 +31,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="sendType" column="send_type"/>
<result property="discountType" column="discount_type"/>
<result property="eventType" column="event_type"/>
<result property="giveNum" column="give_num"/>
<result property="couponPoster" column="coupon_poster"/>
</resultMap>
<sql id="selectWechatStockVo">
select id, stock_name, comment, goods_name, stock_type, available_begin_time, available_end_time, available_day_after_receive, discount_amount, transaction_minimum, discount_percent, use_method, out_request_no, max_coupons, max_coupons_per_user, coupon_code_mode, stock_state, stock_id, create_by, create_time, update_by, update_time, send_type, discount_type, event_type from wechat_stock
select id, stock_name, comment, goods_name, stock_type, available_begin_time, available_end_time, available_day_after_receive, discount_amount,
transaction_minimum, discount_percent, use_method, out_request_no, max_coupons, max_coupons_per_user, coupon_code_mode, stock_state, stock_id,
create_by, create_time, update_by, update_time, send_type, discount_type, event_type,
give_num,
coupon_poster
from wechat_stock
</sql>
<select id="selectList2" parameterType="WechatStock" resultMap="WechatStockResult">
@ -98,6 +105,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="sendType != null and sendType != ''">send_type,</if>
<if test="discountType != null and discountType != ''">discount_type,</if>
<if test="eventType != null and eventType != ''">event_type,</if>
<if test="couponPoster != null and couponPoster != ''">coupon_poster,</if>
<if test="giveNum != null and giveNum != ''">give_num,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
@ -126,6 +135,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="sendType != null and sendType != ''">#{sendType},</if>
<if test="discountType != null and discountType != ''">#{discountType},</if>
<if test="eventType != null and eventType != ''">#{eventType},</if>
<if test="couponPoster != null and couponPoster != ''">couponPoster,</if>
<if test="giveNum != null and giveNum != ''">giveNum,</if>
</trim>
</insert>


Loading…
Cancel
Save