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

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, "退款"),
APPLY_MONEY(6, "提现申请"),
APPLY_MONEY_FAIL(7, "提现失败"),
APPLY_MONEY_SUCCESS(8, "提现审核通过");
APPLY_MONEY_SUCCESS(8, "提现审核通过"),
MANUAL_MONEY(9,"单次扣款");
public Integer value;
public String name;

View File

@@ -5,7 +5,13 @@ public enum VipTypeEnum{
HELFYEARCARD(2, "半年卡"),
QUARTERCARE(3, "季卡"),
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 String name;

View File

@@ -29,6 +29,13 @@ export function createCard(memberId, cardType, venueType, platformId, venueId, s
'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: [
{
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 === 7">提现失败</span>
<span v-if="scope.row.type === 8">提现审核通过</span>
<span v-if="scope.row.type === 9">单次扣款</span>
</template>
</el-table-column>
@@ -249,7 +250,7 @@
margin-bottom : 10px;
}
.span-fost{
text-align: right;
text-align: right;
margin-right: 20px;
}
</style>

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="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="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>
</template>
</el-table-column>
@@ -151,11 +152,20 @@
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</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>
</template>
<script>
import { updateStatus, createCard } from '@/api//member'
import { updateStatus, createCard, miniMoney } from '@/api//member'
import waves from '@/directive/waves.js'// 水波纹指令
import Pagination from '@/components/Pagination'
import Status from '@/components/Status'
@@ -188,6 +198,8 @@ export default {
'https://yingdd.oss-cn-hangzhou.aliyuncs.com/278b03e2ed25ae206ab95d9e5e111ab2.png',
isShowUploadFace: false,
isShowMiniMoney: false,
personAmomunt: undefined,
checkAll: false,
checkedCities: [],
memberId: cityOptions,
@@ -265,6 +277,15 @@ export default {
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) {
if (this.venue === '') {
this.$message({
@@ -499,4 +538,4 @@ export default {
height: 148px;
display: block;
}
</style>
</style>

View File

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

View File

@@ -115,4 +115,20 @@ public class DateUtilCard {
int maxDate = a.get(Calendar.DATE);
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;
import com.enums.PayTypeEnum;
import com.enums.VipTypeEnum;
import com.sv.entity.MemberCard;
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.MemberMoneyLogService;
import com.sv.service.api.util.DateUtilCard;
import com.sv.service.oms.GiftMemberCardService;
import org.springframework.stereotype.Service;
@@ -23,6 +25,9 @@ public class MemberCardCommonService {
@Resource
private GiftMemberCardService giftMemberCardService;
@Resource
private MemberMoneyLogService memberMoneyLogService;
/**
* 生成生成用户会员卡
*/
@@ -41,7 +46,7 @@ public class MemberCardCommonService {
Date starTime = DateUtilCard.getTime(new Date());
Date endTime;
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){
return;
}
@@ -51,11 +56,14 @@ public class MemberCardCommonService {
if (memberCard != null ) {
starTime = DateUtilCard.getDay(memberCard.getEndTime());
}
if (cardType.equals(VipTypeEnum.YEARCARD.name)){
endTime = DateUtilCard.getYear(starTime);
}else{
endTime = DateUtilCard.getMouth(starTime,cardType);
}
// 脑残逻辑,太蠢
// if (cardType.equals(VipTypeEnum.YEARCARD.name)
// || cardType.equals(VipTypeEnum.YEARCARD_NO1.name)){
// endTime = DateUtilCard.getYear(starTime);
// }else{
// endTime = DateUtilCard.getMouth(starTime,cardType);
// }
endTime = DateUtilCard.CacByCardType(starTime,cardType);
}
// 1. 判断用户是否有其他的会员卡,并且不是免费卡,有效时间顺延
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);
}
/**
* 保存赠送记录
*/