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) } 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() } } } 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 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> 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 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}") 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 ; } 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; } 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); } 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()); 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());