新增会员卡类型,新增单次扣款功能,并且增加了新增单次扣款的费用轨迹

This commit is contained in:
limqhz
2020-06-29 15:03:54 +08:00
parent e6e450bc02
commit 55f492fa42
10 changed files with 126 additions and 38 deletions

View File

@@ -12,7 +12,8 @@ public enum MoneyLogEnum {
REFUND(5, "退款"), REFUND(5, "退款"),
APPLY_MONEY(6, "提现申请"), APPLY_MONEY(6, "提现申请"),
APPLY_MONEY_FAIL(7, "提现失败"), APPLY_MONEY_FAIL(7, "提现失败"),
APPLY_MONEY_SUCCESS(8, "提现审核通过"); APPLY_MONEY_SUCCESS(8, "提现审核通过"),
MANUAL_MONEY(9,"单次扣款");
public Integer value; public Integer value;
public String name; public String name;

View File

@@ -5,7 +5,13 @@ public enum VipTypeEnum{
HELFYEARCARD(2, "半年卡"), HELFYEARCARD(2, "半年卡"),
QUARTERCARE(3, "季卡"), QUARTERCARE(3, "季卡"),
MOUTHCARD(4, "月卡"), MOUTHCARD(4, "月卡"),
FREECARD(5, "免费卡"); FREECARD(5, "免费卡"),
ONCECARD(6,"单次卡"),
PUB_YEARCARD(7,"公益年卡"),
PUB_HELFYEARCARD(8,"公益半年卡"),
PUB_QUARTERCARE(9,"公益季卡"),
PUB_MOUTHCARD(10,"公益月卡"),
PUB_ONCECARD(11,"公益单次卡");
public Integer value; public Integer value;
public String name; public String name;

View File

@@ -29,6 +29,13 @@ export function createCard(memberId, cardType, venueType, platformId, venueId, s
'venueId': venueId, 'star': star, 'end': end }) 'venueId': venueId, 'star': star, 'end': end })
} }
/**
* 扣费
*/
export function miniMoney(memberId, miniMoney, feeType) {
return http.post('/member/miniMoney', { 'memberId': memberId, 'miniMoney': miniMoney, 'feeType': feeType })
}
/** /**
* 保存用户 * 保存用户
*/ */

View File

@@ -134,26 +134,6 @@ export default {
} }
], ],
status: [ status: [
{
value: '年卡',
label: '年卡'
},
{
value: '半年卡',
label: '半年卡'
},
{
value: '季卡',
label: '季卡'
},
{
value: '月卡',
label: '月卡'
},
{
value: '免费卡',
label: '免费卡'
}
] ]
} }
} }

View File

@@ -90,6 +90,7 @@
<span v-if="scope.row.type === 6">提现申请</span> <span v-if="scope.row.type === 6">提现申请</span>
<span v-if="scope.row.type === 7">提现失败</span> <span v-if="scope.row.type === 7">提现失败</span>
<span v-if="scope.row.type === 8">提现审核通过</span> <span v-if="scope.row.type === 8">提现审核通过</span>
<span v-if="scope.row.type === 9">单次扣款</span>
</template> </template>
</el-table-column> </el-table-column>

View File

@@ -95,6 +95,7 @@
<el-button size="small" type="text" @click="handleEdit(scope.row.id)">查看</el-button> <el-button size="small" type="text" @click="handleEdit(scope.row.id)">查看</el-button>
<el-button size="small" type="text" @click="showUploadFace(scope.row.id)">上传人脸</el-button> <el-button size="small" type="text" @click="showUploadFace(scope.row.id)">上传人脸</el-button>
<el-button size="small" type="text" @click="showimg(scope.row.id)">送卡</el-button> <el-button size="small" type="text" @click="showimg(scope.row.id)">送卡</el-button>
<el-button size="small" type="text" @click="miniMoney(scope.row.id,scope.row.money)">扣费</el-button>
<el-button v-if="hasEditPermission() && scope.row.status === 0" size="small" type="text" @click="handleAddEdit(scope.row.id)">编辑</el-button> <el-button v-if="hasEditPermission() && scope.row.status === 0" size="small" type="text" @click="handleAddEdit(scope.row.id)">编辑</el-button>
</template> </template>
</el-table-column> </el-table-column>
@@ -151,11 +152,20 @@
<i class="el-icon-plus avatar-uploader-icon"></i> <i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload> </el-upload>
</el-dialog> </el-dialog>
<el-dialog title="单次卡扣费" :visible.sync="isShowMiniMoney">
<span>请输入单次消费金额</span>
<el-input-number v-model="form.miniMoney" :min="0" placeholder="请输入金额"></el-input-number>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="miniMoneyCheck()">确认</el-button>
<el-button @click="isShowMiniMoney = false"> </el-button>
</div>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { updateStatus, createCard } from '@/api//member' import { updateStatus, createCard, miniMoney } from '@/api//member'
import waves from '@/directive/waves.js'// 水波纹指令 import waves from '@/directive/waves.js'// 水波纹指令
import Pagination from '@/components/Pagination' import Pagination from '@/components/Pagination'
import Status from '@/components/Status' import Status from '@/components/Status'
@@ -188,6 +198,8 @@ export default {
'https://yingdd.oss-cn-hangzhou.aliyuncs.com/278b03e2ed25ae206ab95d9e5e111ab2.png', 'https://yingdd.oss-cn-hangzhou.aliyuncs.com/278b03e2ed25ae206ab95d9e5e111ab2.png',
isShowUploadFace: false, isShowUploadFace: false,
isShowMiniMoney: false,
personAmomunt: undefined,
checkAll: false, checkAll: false,
checkedCities: [], checkedCities: [],
memberId: cityOptions, memberId: cityOptions,
@@ -265,6 +277,15 @@ export default {
this.memberId = id this.memberId = id
}, },
/**
* 减少余额
*/
miniMoney(id, amount) {
this.personAmomunt = amount
this.isShowMiniMoney = true
this.memberId = id
},
/** /**
* 批量送卡弹框 * 批量送卡弹框
*/ */
@@ -293,6 +314,24 @@ export default {
} }
}, },
miniMoneyCheck () {
if (this.form.miniMoney <= 0) {
this.$message({
message: '非法扣款金额',
type: 'warning'
})
return
}
if (this.personAmomunt < this.form.miniMoney) {
this.$message({
message: '余额不足',
type: 'warning'
})
return
}
this.isShowMiniMoney = false
miniMoney(this.memberId, this.form.miniMoney, 'admin')
},
giveCard(id) { giveCard(id) {
if (this.venue === '') { if (this.venue === '') {
this.$message({ this.$message({

View File

@@ -86,6 +86,18 @@ public class MemberController extends OmsController {
return ResponseDTO.ok("赠送成功"); return ResponseDTO.ok("赠送成功");
} }
/**
* 后台手工扣费
*/
@RequestMapping(value = "/member/miniMoney", method = RequestMethod.POST)
public ResponseDTO miniMoney(@RequestParam("memberId") Integer[] memberId, @RequestParam("miniMoney") Integer miniMoney,
@RequestParam("feeType") String feeType) {
for (int i = 0; i < memberId.length; i++) {
memberCardService.miniMoney(memberId[i], miniMoney, feeType);
}
return ResponseDTO.ok("扣费成功");
}
/** /**
* 变更用户状态 * 变更用户状态
*/ */

View File

@@ -185,15 +185,18 @@ public class MemberCardService extends BaseServiceImpl {
Date endTime; Date endTime;
MemberCard memberCard = memberCardMapper.findCard(memberCardOrder.getMemberId(),memberCardOrder.getVeneuType(),memberCardOrder.getVenueId()); MemberCard memberCard = memberCardMapper.findCard(memberCardOrder.getMemberId(),memberCardOrder.getVeneuType(),memberCardOrder.getVenueId());
if (memberCard != null ) { if (memberCard != null ) {
if (!memberCard.getCardType().equals(VipTypeEnum.getByValue(5).getName())){ if (!memberCard.getCardType().equals(VipTypeEnum.FREECARD.name)){
starTime = DateUtilCard.getDay(memberCard.getEndTime()); starTime = DateUtilCard.getDay(memberCard.getEndTime());
} }
} }
if (memberCardOrder.getCardType().equals(VipTypeEnum.YEARCARD.name)){ // 脑残逻辑,太蠢
endTime = DateUtilCard.getYear(starTime); // if (memberCardOrder.getCardType().equals(VipTypeEnum.YEARCARD.name)
}else{ // || memberCardOrder.getCardType().equals(VipTypeEnum.YEARCARD_NO1.name)){
endTime = DateUtilCard.getMouth(starTime,memberCardOrder.getCardType()); // endTime = DateUtilCard.getYear(starTime);
} // }else{
// endTime = DateUtilCard.getMouth(starTime,memberCardOrder.getCardType());
// }
endTime = DateUtilCard.CacByCardType(starTime,memberCardOrder.getCardType());
card.setStartTime(starTime); card.setStartTime(starTime);
card.setEndTime(endTime); card.setEndTime(endTime);
long nowDate = new Date().getTime(); long nowDate = new Date().getTime();

View File

@@ -115,4 +115,20 @@ public class DateUtilCard {
int maxDate = a.get(Calendar.DATE); int maxDate = a.get(Calendar.DATE);
return maxDate; return maxDate;
} }
/**
* 非免费卡计算起始日期逻辑处理
*/
public static Date CacByCardType(Date starTime,String cardType){
Date endTime = null;
// 按照年计算的逻辑
if (cardType.equals(VipTypeEnum.YEARCARD.name) || cardType.equals(VipTypeEnum.ONCECARD)
|| cardType.equals(VipTypeEnum.PUB_YEARCARD.name) ||cardType.equals(VipTypeEnum.PUB_ONCECARD.name)){
endTime = DateUtilCard.getYear(starTime);
} else {
// 除了免费卡和年卡,都是按照月进行计算(月卡、季卡、半年卡)
endTime = DateUtilCard.getMouth(starTime,cardType);
}
return endTime;
}
} }

View File

@@ -1,10 +1,12 @@
package com.sv.service.common; package com.sv.service.common;
import com.enums.PayTypeEnum;
import com.enums.VipTypeEnum; import com.enums.VipTypeEnum;
import com.sv.entity.MemberCard; import com.sv.entity.MemberCard;
import com.sv.entity.GiftMemberCard; import com.sv.entity.GiftMemberCard;
import com.sv.entity.MemberCardOrder; import com.sv.exception.oms.OmsException;
import com.sv.service.api.MemberCardService; import com.sv.service.api.MemberCardService;
import com.sv.service.api.MemberMoneyLogService;
import com.sv.service.api.util.DateUtilCard; import com.sv.service.api.util.DateUtilCard;
import com.sv.service.oms.GiftMemberCardService; import com.sv.service.oms.GiftMemberCardService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -23,6 +25,9 @@ public class MemberCardCommonService {
@Resource @Resource
private GiftMemberCardService giftMemberCardService; private GiftMemberCardService giftMemberCardService;
@Resource
private MemberMoneyLogService memberMoneyLogService;
/** /**
* 生成生成用户会员卡 * 生成生成用户会员卡
*/ */
@@ -41,7 +46,7 @@ public class MemberCardCommonService {
Date starTime = DateUtilCard.getTime(new Date()); Date starTime = DateUtilCard.getTime(new Date());
Date endTime; Date endTime;
MemberCard memberCard = memberCardService.findCard(memberId,venueType,venueId); MemberCard memberCard = memberCardService.findCard(memberId,venueType,venueId);
if (cardType.equals(VipTypeEnum.getByValue(5).getName())){ if (cardType.equals(VipTypeEnum.FREECARD.name)){
if (star == null && end == null){ if (star == null && end == null){
return; return;
} }
@@ -51,11 +56,14 @@ public class MemberCardCommonService {
if (memberCard != null ) { if (memberCard != null ) {
starTime = DateUtilCard.getDay(memberCard.getEndTime()); starTime = DateUtilCard.getDay(memberCard.getEndTime());
} }
if (cardType.equals(VipTypeEnum.YEARCARD.name)){ // 脑残逻辑,太蠢
endTime = DateUtilCard.getYear(starTime); // if (cardType.equals(VipTypeEnum.YEARCARD.name)
}else{ // || cardType.equals(VipTypeEnum.YEARCARD_NO1.name)){
endTime = DateUtilCard.getMouth(starTime,cardType); // endTime = DateUtilCard.getYear(starTime);
} // }else{
// endTime = DateUtilCard.getMouth(starTime,cardType);
// }
endTime = DateUtilCard.CacByCardType(starTime,cardType);
} }
// 1. 判断用户是否有其他的会员卡,并且不是免费卡,有效时间顺延 // 1. 判断用户是否有其他的会员卡,并且不是免费卡,有效时间顺延
card.setStartTime(starTime); card.setStartTime(starTime);
@@ -69,6 +77,21 @@ public class MemberCardCommonService {
} }
/**
* 生成生成用户会员卡
*/
@Transactional
public void miniMoney(Integer memberId,Integer miniMoney,String feeType){
if (memberId == null || miniMoney == null || feeType == null){
throw new OmsException("扣费失败,非法参数");
}
/**
* Integer memberId, Integer platformId, Integer type, BigDecimal price, Integer payType,
* String cardType , Integer venueId, Integer venueType, Integer lessonId
*/
memberMoneyLogService.create(memberId,1,9,new BigDecimal(miniMoney).negate(), PayTypeEnum.BALANCE.value,null,null,null,null);
}
/** /**
* 保存赠送记录 * 保存赠送记录
*/ */