From c25fecae568a074e338bce625a92960aca859fb8 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 15 一月 2026 16:04:10 +0800
Subject: [PATCH] 经销商管理
---
server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java | 4
server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java | 2
admin/src/components/business/OperaOrgsWindow.vue | 3
admin/src/api/business/memberCoupon.js | 2
admin/src/views/business/coupon.vue | 6
admin/src/components/business/OperaMemberCouponWindow.vue | 349 +++++++++-------------------------
server/dmmall_admin/src/main/java/com/doumee/api/business/MemberCouponController.java | 8
server/dmmall_service/src/main/java/com/doumee/dao/system/dto/MemberCouponAddDTO.java | 28 ++
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java | 10
admin/src/views/business/memberCoupon.vue | 2
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java | 143 ++++++++++++++
11 files changed, 291 insertions(+), 266 deletions(-)
diff --git a/admin/src/api/business/memberCoupon.js b/admin/src/api/business/memberCoupon.js
index f006475..4769802 100644
--- a/admin/src/api/business/memberCoupon.js
+++ b/admin/src/api/business/memberCoupon.js
@@ -15,5 +15,5 @@
// 鍒涘缓
export function create (data) {
- return request.post('/business/memberCoupon/create', data)
+ return request.post('/business/memberCoupon/addBatch', data)
}
diff --git a/admin/src/components/business/OperaMemberCouponWindow.vue b/admin/src/components/business/OperaMemberCouponWindow.vue
index 68002b6..e290ef9 100644
--- a/admin/src/components/business/OperaMemberCouponWindow.vue
+++ b/admin/src/components/business/OperaMemberCouponWindow.vue
@@ -1,92 +1,58 @@
<template>
<GlobalWindow
:title="title"
- width="80%"
+ width="60%"
:visible.sync="visible"
:confirm-working="isWorking"
@confirm="confirm"
>
<el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="锛�" inline>
- <p class="tip-header" >鍩烘湰灞炴��</p>
- <el-form-item label="浼樻儬鍒稿悕绉�" prop="name">
- <el-input v-model="form.name" placeholder="璇疯緭鍏ヤ紭鎯犲埜鍚嶇О" :maxlength="12" v-trim/>
- </el-form-item>
- <el-form-item label="绫诲瀷" prop="couponType">
- <el-radio-group v-model="form.couponType">
- <el-radio :label="0" >婊″噺鍒�</el-radio>
- <el-radio :label="1">鎶樻墸鍒�</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="浼樻儬瑙勫垯" prop="couponRule" >
- <div class="coupon-rule">
- <div class="discrep">璁㈠崟婊�</div>
- <el-input v-model="form.limitPrice" placeholder="璇疯緭鍏�" @input="inputAction(form, 'limitPrice')"
- >
- <template slot="append">鍏�</template>
- </el-input>
- <div class="discrep" >{{form.couponType === 1?'锛屼韩':'锛屽噺'}}</div>
- <el-input v-model="form.price" placeholder="璇疯緭鍏�" @input="inputAction(form, 'price')" >
- <template slot="append" >{{form.couponType ===1?'鎶�':'鍏�'}}</template>
- </el-input>
- </div>
- </el-form-item>
- <el-form-item label="浼樻儬鍒歌鏄�" prop="info">
- <el-input type="textarea" v-model="form.info" placeholder="璇疯緭鍏ヤ紭鎯犲埜璇存槑" v-trim/>
- </el-form-item>
- <p class="tip-header" >浣跨敤闄愬埗</p>
- <el-form-item label="鏈夋晥鏈�" prop="useType">
- <el-radio-group v-model="form.useType">
- <el-radio :label="0">鍥哄畾鏃舵</el-radio>
- <el-radio :label="1">鍥哄畾鏃堕暱</el-radio>
+ <el-form-item label="鍙戞斁瀵硅薄" prop="applyType">
+ <el-radio-group v-model="form.addType">
+ <el-radio :label="0">鎸囧畾浼氬憳</el-radio>
+ <el-radio :label="1">鎸囧畾鎵嬫満鍙�</el-radio>
+ <el-radio :label="2">鍏ㄩ儴浼氬憳</el-radio>
</el-radio-group>
</el-form-item>
- <el-form-item label="浣跨敤鏃舵" prop="getDate" v-if="form.useType===0">
- <div class="date-style">
- <el-date-picker
- v-model="getDate"
- type="datetimerange"
- value-format="yyyy-MM-dd HH:mm:ss"
- format="yyyy-MM-dd HH:mm:ss"
- range-separator="鑷�"
- start-placeholder="寮�濮嬫椂闂�"
- end-placeholder="缁撴潫鏃堕棿"
- @change="selectDate"
- ></el-date-picker>
- </div>
- </el-form-item>
- <el-form-item label="鍥哄畾鏃堕暱" prop="validDays" v-if="form.useType===1">
- <div class="coupon-rule">
- <div class="discrep">棰嗗姷鍚�</div>
- <el-input
- v-model="form.validDays"
- placeholder="璇疯緭鍏�"
- @input="inputAction(form, 'validDays')"
+ <el-form-item v-if="form.addType===0" label="閫夋嫨鐢ㄦ埛" prop="addMemberIds" >
+ <el-select v-model="form.addMemberIds" placeholder="璇疯緭鍏ヤ細鍛樻樀绉�/鎵嬫満鍙凤紝鍐嶉�夋嫨" clearable filterable remote reserve-keyword :remote-method="remoteMethod"
+ :loading="searchLoading"
+ style="width: 400px;"
>
- <template slot="append">澶�</template>
- </el-input>
- <div class="discrep">鏈夋晥</div>
- </div>
+ <el-option
+ v-for="item in users"
+ :key="item.id"
+ :label="item.nickname+' '+(item.phone||'')"
+ :value="item.id">
+ </el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="閫傜敤瀵硅薄" prop="applyType">
- <el-radio-group v-model="form.applyType">
- <el-radio :label="0">鍏ㄥ満閫氱敤</el-radio>
- <el-radio :label="1">鎸夊搧绫�</el-radio>
- <el-radio :label="2">鎸囧畾鍟嗗搧</el-radio>
- </el-radio-group>
+ <el-form-item v-if="form.addType===1" label="鎸囧畾鎵嬫満鍙�" prop="addMemberPhones" >
+ <el-input style="width: 400px;" type="textarea" v-model="form.addMemberPhones" placeholder="璇疯緭鍏ユ墜鏈哄彿" v-trim/>
+ <p class="tip-warn" style="margin-bottom: 1px;"><i class="el-icon-warning"></i>鎻愰啋锛氬涓墜鏈哄彿锛岃鎹㈣杈撳叆</p>
</el-form-item>
- <el-form-item v-if="form.applyType===1" label="閫夋嫨鍝佺被" prop="applyCateIdList" >
- <el-select v-model="form.applyCateIdList" placeholder="璇烽�夋嫨,鏀寔澶氶��" filterable multiple clearable >
- <el-option v-for="item in categorys" :key="'optCate'+item.id" :label="item.name" :value="item.id"> </el-option>
- </el-select>
- </el-form-item>
- <el-form-item v-if="form.applyType===2" label="閫夋嫨鍟嗗搧" prop="applyIdList" style="display: flex">
- <span style="font-size: 12px;color: #216EEE" @click="selectGoods">宸叉寚瀹氥�� {{applyDataList.length}} 銆戜欢鍟嗗搧</span>
- <el-button style="margin-left:30px;display: inline-block;width: 80px;" type="primary" @click="selectGoods">鍘婚�夋嫨 </el-button>
- </el-form-item>
- <p class="tip-header" >鍙戞斁瑙勫垯</p>
- <el-form-item label="鍙戞斁鎬婚噺" prop="num">
- <div class="num-style">
- <el-input-number v-model="form.num" :controls="false" :min="1" :max="99999" placeholder="璇疯緭鍏ュ彂鏀炬�婚噺(1~99999)" v-trim></el-input-number>
+ <el-form-item label="鍙戞斁鍐呭" prop="num">
+ <div style="border: 1px solid #f2f2f2">
+ <el-table style="width: 600px;" :data="form.addCouponList">
+ <el-table-column prop="name" label="浼樻儬鍒�" min-width="300px" align="center">
+ <template slot-scope="{row}" >
+ <el-select v-model="row.couponId" style="width: 200px;margin: 0px 20px" clearable filterable placeholder="璇烽�夋嫨浼樻儬鍒�" >
+ <el-option v-for="item in couponList" :label="item.name" :value="item.id"> </el-option>
+ </el-select>
+ </template>
+ </el-table-column>
+ <el-table-column prop="num" label="鏁伴噺" min-width="200px" align="center">
+ <template slot-scope="{row}" >
+ <el-input style="width: 150px;margin: 0px 20px" type="number" v-model="row.num" placeholder="璇疯緭鍏ユ暟閲�" v-trim/>
+ </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" min-width="100px" align="center">
+ <template slot-scope="scope" >
+ <el-button style="color: red;border: none;" @click="delCoupon( scope.$index)">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-button s type="primary" icon="el-icon-plus" @click="addCoupon()" style="height: 30px;margin: 10px;">娣诲姞</el-button>
</div>
</el-form-item>
</el-form>
@@ -96,226 +62,103 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
-import { fetchList as shopList } from '@/api/business/shop'
import GlobalWindow from '@/components/common/GlobalWindow'
-import { findAll as labelList } from '@/api/business/labels'
-import { allList as goodsList} from '@/api/business/goods'
import OperaCouponGoodsWindow from '@/components/business/OperaCouponGoodsWindow'
+import { allList } from '@/api/business/coupon'
+import { findAll, findAll as memberlist } from '@/api/business/member'
export default {
name: 'OperaCouponWindow',
extends: BaseOpera,
- components: { GlobalWindow,OperaCouponGoodsWindow },
+ components: { GlobalWindow, OperaCouponGoodsWindow },
data () {
const couponRules = (rule, value, callback) => {
- if (!this.form.limitPrice) {
- callback(new Error('璇疯緭鍏ユ弧棰�'))
- } else if (!this.form.price) {
- callback(new Error('璇峰畬鍠勪紭鎯犺鍒�'))
+ if (!this.form.addCouponList || !this.form.addCouponList.length) {
+ callback(new Error('璇烽�夋嫨浼樻儬鍒镐俊鎭�'))
} else {
- callback()
- }
- }
- const getDateRules = (rule, value, callback) => {
- if (!this.form.startDate) {
- callback(new Error('璇烽�夋嫨寮�濮嬫椂闂�'))
- } else if (!this.form.endDate) {
- callback(new Error('璇疯緭鍏ョ粨鏉熸椂闂�'))
- } else {
- callback()
- }
- }
- const numRule = (rule, value, callBack) => {
- if (value < 0) {
- callBack(new Error())
- } else {
- callBack()
+ var r = true
+ this.form.addCouponList.forEach(item => {
+ if (!item.id || !item.num) {
+ r = false
+ }
+ })
+ if (!r) {
+ callback(new Error('璇峰畬鍠勪紭鎯犲埜淇℃伅'))
+ } else {
+ callback()
+ }
}
}
return {
searchLoading: false,
- getDate: [],
- applyDataList:[],
- showGoods:false,
+ couponList: [],
+ users: [],
// 琛ㄥ崟鏁版嵁
form: {
- id: null,
- name: '',
- couponType: 0,
- applyType: 0,
- useType: 0,
- shopId: '',
- applyIdList: [],
- applyCateIdList: [],
- type: 0,
- limitPrice: '',
- price: '',
- startDate: '',
- endDate: '',
- applyIds: '',
- validDays: '',
- getMethod: '',
- integral: '',
- status: '',
- num: '',
- info: ''
+ addType: 0,
+ addMemberIds: null,
+ addMemberPhones: null,
+ addCouponList: [{ id: null, num: null }]
},
shops: [],
categorys: [],
// 楠岃瘉瑙勫垯
rules: {
- name: [
- { required: true, message: '璇疯緭鍏ヤ紭鎯犲埜鍚嶇О', tigger: 'blur' }
+ addType: [
+ { required: true, message: '璇烽�夋嫨鍙戞斁瀵硅薄' }
],
- couponRule: [
+ addCouponList: [
{ required: true, validator: couponRules, tigger: 'blur' }
- ],
- useType: [
- { required: true, message: '璇烽�夋嫨鏈夋晥鏈熸柟寮�' }
- ],
- couponType: [
- { required: true, message: '璇烽�夋嫨绫诲瀷' }
- ],
- applyType: [
- { required: true, message: '璇烽�夋嫨閫傜敤瀵硅薄绫诲瀷' }
- ],
- num: [
- { required: true, validator: numRule, message: '璇疯緭鍏ュ彂鏀炬�绘暟', tigger: 'blur' }
- ],
- /*integral: [
- { required: true, validator: numRule, message: '璇疯緭鍏ュ厬鎹㈡潯浠�', tigger: 'blur' }
- ],*/
- // validDays: [
- // { required: true, message: '璇疯緭鍏ュ彲鐢ㄦ椂闂�', tigger: 'blur' }
- // ],
- // getDate: [
- // { required: true, validator: getDateRules, tigger: 'change' }
- // ],
- // shopId: [
- // { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈搴楅摵', tigger: 'change' }
- // ]
+ ]
}
}
},
created () {
this.config({
- api: '/business/coupon',
+ api: '/business/memberCoupon',
'field.id': 'id'
})
},
methods: {
- selectGoods(){
- this.$refs.OperaCouponGoodsWindow.open('閫夋嫨鍟嗗搧', this.applyDataList)
- },
- loadLabels(){
- labelList({
- type: 0 // 鍟嗗搧鍒嗙被
- }).then(res => {
- this.categorys = res || []
- })
- },
- loadSelectGoods(){
- console.log(this.form.applyIdList)
- if(!this.form.applyIdList || !this.form.applyIdList.length){
- return
- }
- goodsList({
- idList: this.form.applyIdList // 鍟嗗搧鍒嗙被
- }).then(res => {
- this.applyDataList = res || []
- })
- },
- doSelect(rows){
- console.log(rows,this.applyDataList)
- this.applyDataList =[]
- this.form.applyIdList=[]
- if(rows && rows.length){
- rows.forEach(item => {
- this.applyDataList.push(item)
- this.form.applyIdList.push(item.id)
- })
- }
- },
- open (title, target, type) {
- this.showGoods=false
- this.title = title
- this.visible = true
- this.form.type = type
- this.getDate = []
- this.form.startDate = ''
- this.form.endDate = ''
- this.applyDataList=[]
- this.form.applyIdList=[]
- this.form.applyCateIdList=[]
- this.loadLabels()
- this.form.limitPrice=null
- this.form.price=null
- this.form.startDate=null
- this.form.endDate=null
- this.form.num=1
- // 鏂板缓
- if (target == null) {
- this.$nextTick(() => {
- this.$refs.form.resetFields()
- console.log(this.form)
- this.form[this.configData['field.id']] = null
- })
- return
- }
- // 缂栬緫
- this.$nextTick(() => {
- for (const key in this.form) {
- this.form[key] = target[key]
- }
- this.getDate = [target.startDate, target.endDate]
- if(this.form.applyType === 1){
- this.form.applyCateIdList =[]
- var ta = this.form.applyIds.split(',')
- if(ta && ta.length){
- ta.forEach(tt =>{
- this.form.applyCateIdList.push(parseInt(tt))
- })
- }
- }
- if(this.form.applyType === 2){
- this.form.applyIdList = this.form.applyIds.split(',')
- this.loadSelectGoods()
- }
- })
- },
- selectDate (value) {
- this.form.startDate = value[0]
- this.form.endDate = value[1]
- },
- inputAction (item, key) {
- if (item[key] < 0) {
- item[key] = ''
- } else {
- item[key] = item[key].replace(/[^\d.]/g, '')
- .replace(/\.{2,}/g, '.')
- .replace('.', '$#$')
- .replace(/\./g, '')
- .replace('$#$', '.')
- .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
- .replace(/^\./g, '')
- }
- },
remoteMethod (query) {
if (query !== '') {
this.searchLoading = true
- const action = this.form.type == 2 ? activityList : shopList
- action({
+ findAll({
capacity: 999,
model: {
- name: query
+ nickname: query,
+ status: 0
}
})
.then(res => {
- this.shops = res.records
+ this.users = res
})
.finally(() => {
this.searchLoading = false
})
}
+ },
+ getCouponList () {
+ allList({status:0})
+ .then(res => {
+ if (res) {
+ this.couponList = res || []
+ }
+ })
+ },
+ delCoupon (index) {
+ this.form.addCouponList.splice(index, 1)
+ },
+ addCoupon (type) {
+ this.form.addCouponList.push({ id: null, num: null })
+ },
+ open (title, target, type) {
+ this.title = title
+ this.visible = true
+ this.form.addMemberIds=null
+ this.form.addMemberPhones=null
+ this.form.addType = 0
+ this.form.addCouponList = [{id:null,num:null}]
+ this.getCouponList()
}
}
}
diff --git a/admin/src/components/business/OperaOrgsWindow.vue b/admin/src/components/business/OperaOrgsWindow.vue
index 3183646..8291c2b 100644
--- a/admin/src/components/business/OperaOrgsWindow.vue
+++ b/admin/src/components/business/OperaOrgsWindow.vue
@@ -128,7 +128,6 @@
})
},
remoteMethod(query) {
- debugger
if (query !== '') {
this.searchLoading = true
findAll({
@@ -145,7 +144,7 @@
this.searchLoading = false
})
}
- },
+ },
uploadIdcardImgSuccess(file) {
this.form.imgurlfull = file.imgurlfull
this.form.imgurl = file.imgurl
diff --git a/admin/src/views/business/coupon.vue b/admin/src/views/business/coupon.vue
index d306af7..a3683dd 100644
--- a/admin/src/views/business/coupon.vue
+++ b/admin/src/views/business/coupon.vue
@@ -47,15 +47,17 @@
<el-table-column prop="num" label="鍙戞斁鎬婚噺" align="center" min-width="100px"></el-table-column>
<el-table-column label="宸插彂閫佹暟閲�" align="center" min-width="100px">
<template slot-scope="{row}">
- <el-button type="text" @click="showCouponUse(row.id)">{{ row.unused + row.used }}</el-button>
+ <el-button type="text" @click="showCouponUse(row.id)">{{ row.received||0 }}</el-button>
</template>
</el-table-column>
<el-table-column label="鍓╀綑鏁伴噺" align="center" min-width="100px">
<template slot-scope="{row}">
- {{ row.num - row.unused - row.used }}
+ {{ (row.num||0) - (row.received||0) }}
</template>
</el-table-column>
+<!--
<el-table-column prop="used" label="浣跨敤鏁伴噺" align="center" min-width="100px"></el-table-column>
+-->
<el-table-column prop="validDays" label="浣跨敤鏈夋晥鏈�" align="center" min-width="210px">
<template slot-scope="{row}">
<span v-if="row.useType ===0"><li> 璧凤細{{ row.startDate}}</li> <li>姝細{{row.endDate }}</li></span>
diff --git a/admin/src/views/business/memberCoupon.vue b/admin/src/views/business/memberCoupon.vue
index 71f5b44..7875ad1 100644
--- a/admin/src/views/business/memberCoupon.vue
+++ b/admin/src/views/business/memberCoupon.vue
@@ -39,7 +39,7 @@
<!-- 琛ㄦ牸鍜屽垎椤� -->
<template v-slot:table-wrap>
<ul class="toolbar" v-permissions="['business:membercoupon:create', 'business:membercoupon:exportExcel']">
- <li><el-button type="primary" @click="$refs.OperaMemberCouponWindow.open('鏂板缓', null)" v-permissions="['business:membercoupon:create']">瀹氬悜鍙戞斁</el-button></li>
+ <li><el-button type="primary" @click="$refs.OperaMemberCouponWindow.open('瀹氬悜鍙戞斁浼樻儬鍒�', null)" v-permissions="['business:membercoupon:create']">瀹氬悜鍙戞斁</el-button></li>
<li> <el-button type="primary" :loading="isWorking.export" v-permissions="['business:membercoupon:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
</ul>
<el-table
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberCouponController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberCouponController.java
index 96d56b3..2f9303b 100644
--- a/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberCouponController.java
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/MemberCouponController.java
@@ -7,6 +7,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.dao.business.model.MemberCoupon;
+import com.doumee.dao.system.dto.MemberCouponAddDTO;
import com.doumee.service.business.MemberCouponService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -37,6 +38,13 @@
public ApiResponse create(@RequestBody MemberCoupon memberCoupon) {
return ApiResponse.success(memberCouponService.create(memberCoupon));
}
+ @PreventRepeat
+ @ApiOperation("瀹氬悜鍙戞斁")
+ @PostMapping("/create")
+ @RequiresPermissions("business:membercoupon:create")
+ public ApiResponse<String> addBatch(@RequestBody MemberCouponAddDTO memberCoupon) {
+ return ApiResponse.success(memberCouponService.addBatch(memberCoupon));
+ }
@ApiOperation("鏍规嵁ID鍒犻櫎")
@GetMapping("/delete/{id}")
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java
index 5246132..f9bbe52 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java
@@ -68,7 +68,7 @@
@ExcelColumn(name="缁撴潫鏃堕棿",width = 10 ,index = 6,dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date endDate;
- @ApiModelProperty(value = "棰嗗彇鏂瑰紡 0棰嗗彇 1鍏戞崲", example = "1")
+ @ApiModelProperty(value = "棰嗗彇鏂瑰紡 0=棣栨娉ㄥ唽;1=閭�璇峰ソ鍙�;2=瀹氬悜鍙戞斁;", example = "1")
@ExcelColumn(name="棰嗗彇鏂瑰紡",width = 10,index = 4,valueMapping = "0=棣栨娉ㄥ唽;1=閭�璇峰ソ鍙�;2=瀹氬悜鍙戞斁;")
private Integer getMethod;
@@ -131,6 +131,6 @@
@ApiModelProperty(value = "浼樻儬閲戦锛堝厓锛�", example = "1")
@ExcelColumn(name="浼樻儬閲戦锛堝厓锛�",width = 10,index = 7)
@TableField(exist = false)
- private BigDecimal couponPrice ;
+ private BigDecimal couponPrice ;
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/system/dto/MemberCouponAddDTO.java b/server/dmmall_service/src/main/java/com/doumee/dao/system/dto/MemberCouponAddDTO.java
new file mode 100644
index 0000000..95afdcd
--- /dev/null
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/system/dto/MemberCouponAddDTO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.system.dto;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.dao.business.model.Coupon;
+import com.doumee.dao.business.model.MemberCoupon;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author T14
+ */
+@Data
+@ApiModel("瀹氬悜鍙戞斁浼樻儬鍒稿弬鏁�")
+public class MemberCouponAddDTO {
+ @ApiModelProperty(value = "娣诲姞绫诲瀷 0鎸囧畾浜哄憳 1鎸囧畾鎵嬫満鍙� 2鍏ㄩ儴浼氬憳")
+ private Integer addType;
+ @ApiModelProperty(value = "鐢ㄦ埛id")
+ private Integer addMemberIds;
+ @ApiModelProperty(value = "浼樻儬鍒镐俊鎭�")
+ private List<Coupon> addCouponList;
+ @ApiModelProperty(value = "鎵嬫満鍙烽泦鍚堬紙鏂囨湰鍩熸崲琛岋級")
+ private String addMemberPhones;
+ @ApiModelProperty(value = "鎵嬫満鍙烽泦鍚�")
+ private List<String> phones;
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java
index 82cbb63..e8e3398 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/MemberCouponService.java
@@ -4,6 +4,7 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.MemberCoupon;
+import com.doumee.dao.system.dto.MemberCouponAddDTO;
import com.doumee.dao.web.dto.CouponDTO;
import com.doumee.dao.web.dto.MemberCouponDTO;
import com.doumee.dao.web.request.PayDetailRequest;
@@ -145,4 +146,5 @@
*/
List<MemberCoupon> getApplyCoupon(List<PayDetailRequest> requestList, Integer memberId);
+ String addBatch(MemberCouponAddDTO memberCoupon);
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java
index 53fd9d8..efc0335 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java
@@ -192,8 +192,9 @@
Utils.MP.blankToNull(pageWrap );
queryWrapper.selectAll(Coupon.class);
queryWrapper.like(StringUtils.isNotBlank(pageWrap. getName()),Coupon::getName,pageWrap.getName());
+ queryWrapper.eq(pageWrap.getStatus()!=null,Coupon::getStatus,pageWrap.getStatus());
queryWrapper.eq(Coupon::getIsdeleted,Constants.ZERO);
- queryWrapper.orderByDesc(Coupon::getCreateDate);
+ queryWrapper.orderByDesc(Coupon::getId);
List<Coupon> result = couponJoinMapper.selectList( queryWrapper);
for(Coupon model:result){
initCouponStatus(model);
@@ -207,9 +208,10 @@
MPJLambdaWrapper<Coupon> queryWrapper = new MPJLambdaWrapper<>();
Utils.MP.blankToNull(pageWrap.getModel());
queryWrapper.selectAll(Coupon.class);
- queryWrapper.select("(select count(id) from member_coupon where ISDELETED=0 and COUPON_ID=t.id) as received");
- queryWrapper.select("(select count(id) from member_coupon where ISDELETED=0 and COUPON_ID=t.id and STATUS=0) as unused");
- queryWrapper.select("(select count(id) from member_coupon where ISDELETED=0 and COUPON_ID=t.id and STATUS=1) as used");
+ //宸插彂鏀炬暟閲忥紙涓嶅寘鍚畾鍚戝彂鏀撅級
+ queryWrapper.select("(select count(id) from member_coupon where ISDELETED=0 and COUPON_ID=t.id and GET_METHOD !=2) as received");
+// queryWrapper.select("(select count(id) from member_coupon where ISDELETED=0 and COUPON_ID=t.id and STATUS=0) as unused");
+// queryWrapper.select("(select count(id) from member_coupon where ISDELETED=0 and COUPON_ID=t.id and STATUS=1) as used");
queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Coupon::getName,pageWrap.getModel().getName());
queryWrapper.eq(pageWrap.getModel().getCouponType()!=null,Coupon::getCouponType,pageWrap.getModel().getCouponType());
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
index ae76be3..c1c50ca 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
@@ -11,6 +11,7 @@
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.dto.MemberCouponAddDTO;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.dto.CouponDTO;
import com.doumee.dao.web.dto.MemberCouponDTO;
@@ -29,6 +30,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
@@ -65,6 +67,146 @@
@Autowired
private MemberMapper memberMapper;
+
+ @Override
+ @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+ public String addBatch(MemberCouponAddDTO memberCoupon){
+ checkAddBatchParamValid(memberCoupon);
+
+ int num = 0;
+ List<Coupon> couponList = getCouponListByParam(memberCoupon);
+ List<Member> memberList = getMemberListByParam(memberCoupon);
+ List<MemberCoupon> addList = new ArrayList<>();
+ int index =1;
+ LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
+ Date now = new Date();
+ for(Coupon param : memberCoupon.getAddCouponList()){
+ Coupon coupon = getCouponFromListById(param.getId(),couponList);
+ if(coupon == null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗��"+index+"銆戜釜浼樻儬鍒告煡璇㈡棤鏁堬紝璇峰埛鏂伴〉闈㈤噸鏂帮紒");
+ }
+ for(Member member : memberList){
+ for (int i = 0; i < Constants.formatLongNum(param.getNum()); i++) {
+ //鎸ㄤ釜閫�
+ addList.add(initMemberCouponByParam(coupon,member,loginUserInfo,now));
+ }
+ num++;
+ }
+ index++;
+ }
+
+
+ if(addList.size()>0){
+ //鎵归噺鎻掑叆鏁版嵁
+ memberCouponMapper.insert(addList);
+ }
+ return "鎿嶄綔鎴愬姛,鎴愬姛浜哄憳鏁伴噺锛�"+num+",鍏卞彂鏀句紭鎯犲埜鏁伴噺锛�"+addList.size();
+
+ }
+
+ private MemberCoupon initMemberCouponByParam(Coupon coupon, Member member, LoginUserInfo loginUserInfo ,Date now) {
+ MemberCoupon insert = new MemberCoupon();
+ insert.setCreator(loginUserInfo.getId());
+ insert.setCreateDate(now);
+ insert.setEditor(loginUserInfo.getId());
+ insert.setEditDate(now);
+ insert.setIsdeleted(Constants.ZERO);
+ insert.setRemark("瀹氬悜鍙戞斁");
+ insert.setMemberId(member.getId());
+ insert.setShopId(coupon.getShopId());
+ insert.setType(coupon.getType());
+ insert.setLimitPrice(coupon.getLimitPrice());
+ insert.setPrice(coupon.getPrice());
+ if(Constants.equalsObject(coupon.getUseType(),Constants.ZERO)){
+ //濡傛灉鏄浐瀹氭椂娈�
+ insert.setStartDate(coupon.getStartDate());
+ insert.setEndDate(coupon.getEndDate());
+ }else{
+ //鍥哄畾鏃堕暱 //鎺ㄨ繜澶╂暟
+ insert.setEndDate(DateUtil.addDaysToDate(now,Constants.formatIntegerNum(coupon.getValidDays())));
+ insert.setStartDate(now);
+ }
+ insert.setGetMethod(Constants.TWO);//瀹氬悜鍙戞斁
+ insert.setIntegral(coupon.getIntegral());
+ insert.setStatus(Constants.ZERO);//鏈娇鐢�
+ insert.setInfo(coupon.getInfo());
+// insert.setBackIntegral(coupon.getB);
+ insert.setName(coupon.getName());
+ insert.setApplyIds(coupon.getApplyIds());
+ insert.setApplyType(coupon.getApplyType());
+ insert.setCouponId(coupon.getId());
+ return insert;
+ }
+
+ private Coupon getCouponFromListById(Integer id, List<Coupon> couponList) {
+ for(Coupon c : couponList){
+ if(Constants.equalsObject(id,c.getId())){
+ return c;
+ }
+ }
+ return null;
+ }
+
+
+ private List<Member> getMemberListByParam(MemberCouponAddDTO memberCoupon) {
+ List<Member> list = memberMapper.selectList(new QueryWrapper<Member>().lambda()
+ .eq(Member::getIsdeleted,Constants.ZERO)
+ .eq(memberCoupon.getAddType() == Constants.ZERO,Member::getId,memberCoupon.getAddMemberIds())
+ .in(memberCoupon.getAddType() == Constants.ONE,Member::getPhone,memberCoupon.getPhones()));
+ if(list == null || list.size()==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鏈煡璇㈠埌鏈夋晥鐨勭敤鎴蜂俊鎭紒");
+ }
+
+ return list;
+ }
+
+ private List<Coupon> getCouponListByParam(MemberCouponAddDTO memberCoupon) {
+ List<Integer> ids = new ArrayList<>();
+ for(Coupon coupon : memberCoupon.getAddCouponList()){
+ if(coupon.getId() ==null || Constants.formatLongNum(coupon.getNum())==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ ids.add(coupon.getId());
+ }
+ List<Coupon> list = couponMapper.selectList(new QueryWrapper<Coupon>().lambda()
+ .eq(Coupon::getStatus,Constants.ZERO)
+ .eq(Coupon::getIsdeleted,Constants.ZERO)
+ .in(Coupon::getId,ids));
+
+ if(list == null || list.size()==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鏈煡璇㈠埌鏈夋晥浼樻儬鍒告暟鎹�,璇峰埛鏂伴〉闈㈤噸璇曪紒");
+ }
+
+ return list;
+ }
+
+ private void checkAddBatchParamValid(MemberCouponAddDTO memberCoupon) {
+ if(memberCoupon.getAddType() == null || memberCoupon.getAddCouponList()==null || memberCoupon.getAddCouponList().size()==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ if(Constants.equalsObject(memberCoupon.getAddType(),Constants.ZERO)){
+ //鎸囧畾浜哄憳
+ if( memberCoupon.getAddMemberIds() ==null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ }else if(Constants.equalsObject(memberCoupon.getAddType(),Constants.ONE)){
+ //鎸囧畾鎵嬫満鍙�
+ if( StringUtils.isBlank(memberCoupon.getAddMemberPhones())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ String[] ss =memberCoupon.getAddMemberPhones().split("\n");
+ if(ss == null ||ss.length==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ memberCoupon.setPhones(Arrays.asList(ss));
+
+ }else if(Constants.equalsObject(memberCoupon.getAddType(),Constants.TWO)){
+ //鍏ㄩ儴浼氬憳
+ }else{
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ }
+
@Override
public Integer create(MemberCoupon memberCoupon) {
LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
@@ -89,7 +231,6 @@
if(memberCouponMapper.selectCount(queryWrapper) > Constants.ZERO){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "宸插厬鎹㈣浼樻儬鍒�,鏃犳硶鍏戞崲锛�");
};
-
MemberCoupon insert = new MemberCoupon();
Date now = new Date();
insert.setCreator(loginUserInfo.getId());
--
Gitblit v1.9.3