收银台优惠活动查询

This commit is contained in:
Vinjor 2024-09-22 20:24:44 +08:00
parent a352d84ed6
commit c7be416570
5 changed files with 126 additions and 45 deletions

View File

@ -94,14 +94,32 @@ public class PayCenterServiceImpl implements PayCenterService {
Double orderAmount = Double.valueOf(map.get("orderAmount"));
//油升数
Double oilLiter = Double.valueOf(map.get("oilLiter"));
//支付方式
String payWay = map.get("payWay");
/*2.查询所有可参加的营销活动 */
List<ActivityVO> actList = new ArrayList<>();
//2.1 查可参加的分时优惠和限时特价
actList.addAll(this.getFenshiAndTejiaAct(nowDate,userId,gradeId,storeId,labelIdList,oilAmount,oilLiter,oilId,oilPrice));
//2.2 查可参加的立减营销
actList.addAll(this.getLijianAct(nowDate,userId,gradeId,storeId,labelIdList,oilAmount,oilLiter,oilId));
//2.3 查可参加的折扣营销会员折扣
actList.addAll(this.getZhekouAct(nowDate,gradeId,storeId,oilAmount));
try {
//2.1 查可参加的分时优惠和限时特价
actList.addAll(this.getFenshiAndTejiaAct(nowDate,userId,gradeId,storeId,labelIdList,oilAmount,oilLiter,oilId,oilPrice,payWay));
}catch (Exception e){
//测试用数据问题先忽略
System.out.println("分时优惠和限时特价"+e);
}
try {
//2.2 查可参加的立减营销
actList.addAll(this.getLijianAct(nowDate,userId,gradeId,storeId,labelIdList,oilAmount,oilLiter,oilId,payWay));
}catch (Exception e){
//测试用数据问题先忽略
System.out.println("立减营销"+e);
}
try {
//2.3 查可参加的折扣营销会员折扣
actList.addAll(this.getZhekouAct(nowDate,gradeId,storeId,oilAmount,payWay));
}catch (Exception e){
//测试用数据问题先忽略
e.printStackTrace();
System.out.println("折扣营销"+e);
}
return actList;
}
@ -118,11 +136,12 @@ public class PayCenterServiceImpl implements PayCenterService {
* @param oilLiter 当前加油升数
* @param oilId 当前加油选择的油号id
* @param oilPrice 油单价
* @param payWay 支付方式
* @return java.util.List<com.fuint.pay.vo.ActivityVO>
**/
private List<ActivityVO> getFenshiAndTejiaAct(Date nowDate,Integer userId,Integer gradeId,Integer storeId,
List<Integer> labelIdList,Double oilAmount,Double oilLiter,
Integer oilId,Double oilPrice){
Integer oilId,Double oilPrice,String payWay){
/*1.先查满足条件的所有生效中的活动规则*/
List<ActivePriceRuleRespVO> activePriceRuleList = activePriceRuleService.selectAllAct(storeId, nowDate);
/*2.进行初步过滤,这里只过滤活动硬性的限制*/
@ -136,7 +155,9 @@ public class PayCenterServiceImpl implements PayCenterService {
//适用当前时间段的
.filter(rule -> checkUtil.checkTime(rule.getTimeSlots(),rule.getDayStartTime(),rule.getDayEndTime(),nowDate))
//适用当前油号的
.filter(rule-> checkUtil.checkOil(rule.getOilList(),oilId)).collect(Collectors.toList());
.filter(rule-> checkUtil.checkOil(rule.getOilList(),oilId))
//适用当前支付方式的
.filter(rule-> rule.getPaymentType().contains(payWay)).collect(Collectors.toList());
if(filteredList.isEmpty()){
return new ArrayList<>();
}
@ -155,6 +176,7 @@ public class PayCenterServiceImpl implements PayCenterService {
if(!filteredList.isEmpty()){
for(ActivePriceRuleRespVO rule:filteredList){
ActivityVO activityVO = new ActivityVO();
activityVO.setId(rule.getActiveType()+"_"+rule.getActiveId()+"_"+rule.getId());
activityVO.setActId(rule.getActiveId());
activityVO.setRuleId(rule.getId());
activityVO.setType(rule.getActiveType());
@ -162,6 +184,7 @@ public class PayCenterServiceImpl implements PayCenterService {
activityVO.setRuleName(rule.getRuleName());
activityVO.setPayTypes(rule.getPaymentType());
activityVO.setDisAmount(checkUtil.computeDisAmount(rule,oilId,oilPrice,oilAmount,oilLiter));
rtnList.add(activityVO);
}
}
return rtnList;
@ -179,11 +202,12 @@ public class PayCenterServiceImpl implements PayCenterService {
* @param oilAmount 当前加油金额
* @param oilLiter 当前加油升数
* @param oilId 当前加油选择的油号id
* @param payWay 支付方式
* @return java.util.List<com.fuint.pay.vo.ActivityVO>
**/
private List<ActivityVO> getLijianAct(Date nowDate,Integer userId,Integer gradeId,Integer storeId,
List<Integer> labelIdList,Double oilAmount,Double oilLiter,
Integer oilId){
Integer oilId,String payWay){
/*1.先查满足条件的所有生效中的活动规则*/
List<ActiveSubPriceRespVO> activeSubPriceList = activeSubPriceService.selectAllAct(storeId,nowDate);
/*2.进行初步过滤,这里只过滤活动硬性的限制*/
@ -195,7 +219,9 @@ public class PayCenterServiceImpl implements PayCenterService {
//适用当前时间段的
.filter(rule -> checkUtil.checkTime(rule.getTimeSlots(),checkUtil.getTimeFromDate(rule.getTimeApplyStart()),checkUtil.getTimeFromDate(rule.getTimeApplyEnd()),nowDate))
//适用当前油号的
.filter(rule-> checkUtil.checkOilLijian(rule.getApplyOilType(),rule.getApplyOil(),oilId)).collect(Collectors.toList());
.filter(rule-> checkUtil.checkOilLijian(rule.getApplyOilType(),rule.getApplyOil(),oilId))
//适用当前支付方式的
.filter(rule-> rule.getPaymentType().contains(payWay)).collect(Collectors.toList());
/*3.再次过滤,这里过滤掉用户已经超出参加次数限制的*/
//符合条件的活动规则查询当前会员已经参与的记录此处查立减营销的参与记录
List<String> actTypeList = Arrays.asList("3".split(StrUtil.COMMA));
@ -213,11 +239,13 @@ public class PayCenterServiceImpl implements PayCenterService {
if(!filteredList.isEmpty()){
for(ActiveSubPriceRespVO rule:filteredList){
ActivityVO activityVO = new ActivityVO();
activityVO.setId("3_"+rule.getId().toString());
activityVO.setActId(rule.getId());
activityVO.setType("3");
activityVO.setActName(rule.getActiveName());
activityVO.setPayTypes(rule.getPaymentType());
activityVO.setDisAmount(checkUtil.computeDisAmountLijian(rule,oilAmount,oilLiter));
rtnList.add(activityVO);
}
}
return rtnList;
@ -231,9 +259,10 @@ public class PayCenterServiceImpl implements PayCenterService {
* @param gradeId 会员等级
* @param storeId 店铺id
* @param oilAmount 当前加油金额
* @param payWay 支付方式
* @return java.util.List<com.fuint.pay.vo.ActivityVO>
**/
private List<ActivityVO> getZhekouAct(Date nowDate,Integer gradeId,Integer storeId,Double oilAmount){
private List<ActivityVO> getZhekouAct(Date nowDate,Integer gradeId,Integer storeId,Double oilAmount,String payWay){
/*1.先查满足条件的所有生效中的活动规则*/
List<UserDiscount> userDiscountList = userDiscountService.selectAllAct(storeId,nowDate);
/*2.进行初步过滤,这里只过滤活动硬性的限制*/
@ -245,7 +274,9 @@ public class PayCenterServiceImpl implements PayCenterService {
//适用当前时间段的
.filter(rule -> checkUtil.checkTime(rule.getSuitDate(),checkUtil.getTimeFromDate(rule.getSuitTimeSlotFront()),checkUtil.getTimeFromDate(rule.getSuitDateAfter()),nowDate))
//是否满足最低消费金额
.filter(rule-> rule.getConsumeAmount() <=oilAmount).collect(Collectors.toList());
.filter(rule-> rule.getConsumeAmount() <=oilAmount)
//适用当前支付方式的
.filter(rule-> rule.getUsePaymentWay().contains(payWay)).collect(Collectors.toList());
/*3.得到用户最终可以参加的活动,计算优惠金额并转换成统一的对象*/
List<ActivityVO> rtnList = new ArrayList<>();
if(!filteredList.isEmpty()){
@ -257,6 +288,7 @@ public class PayCenterServiceImpl implements PayCenterService {
discount = filteredList.stream().sorted(Comparator.comparingDouble(UserDiscount::getDiscount)).collect(Collectors.toList()).get(0);
}
ActivityVO activityVO = new ActivityVO();
activityVO.setId("4_"+discount.getId().toString());
activityVO.setActId(discount.getId());
activityVO.setType("4");
activityVO.setActName("折扣营销");
@ -303,9 +335,6 @@ public class PayCenterServiceImpl implements PayCenterService {
/*1.先查满足条件的所有生效中的优惠券*/
List<CardCouponVO> couponVOList = cardCouponUserService.selectAllList(storeId, userId, nowDate);
/*2.进行初步过滤,这里只过滤优惠券硬性的限制*/
List<CardCouponVO> filteredList = couponVOList.stream()
//
.filter(rule->rule.getGradeId().equals(gradeId))
List<CouponVO> rtnList = new ArrayList<>();
return rtnList;
}

View File

@ -461,7 +461,7 @@ public class CheckUtil {
* @return boolean
**/
private static boolean checkDayTime(Date nowDate,String dayStartTime,String dayEndTime){
String dayStr = DateUtil.date(nowDate).toString();
String dayStr = DateUtil.formatDate(nowDate);
//时间范围区间
Date startTime = DateUtil.parse(dayStr+" "+(StringUtils.isNotEmpty(dayStartTime)?(dayStartTime+":00"):"00:00:00"));
Date endTime = DateUtil.parse(dayStr+" "+(StringUtils.isNotEmpty(dayEndTime)?(dayEndTime+":59"):"23:59:59"));

View File

@ -11,6 +11,8 @@ import java.io.Serializable;
**/
@Data
public class ActivityVO implements Serializable {
/** 唯一Id活动Id和规则Id下划线拼接 */
private String id;
/** 活动id */
private Integer actId;
/** 活动规则id */

View File

@ -29,9 +29,16 @@ export function getCoupons(param) {
params:param
})
}
export function getActivityAndCoupon(data) {
export function getActivityList(data) {
return request({
url: '/pay/paycenter/getActivityAndCoupon',
url: '/pay/paycenter/getActivity',
method: 'post',
data: data
})
}
export function getCouponList(data) {
return request({
url: '/pay/paycenter/getCoupon',
method: 'post',
data: data
})

View File

@ -69,17 +69,15 @@
</div>
<!-- 下拉列表插入-->
<div v-if="checkAll == true">
<div class="x-d-b">
<el-checkbox v-model="checkAll1">优惠1</el-checkbox>
<div class="or_num">-0.00</div>
<div v-if="activityList.length>0">
<el-radio-group style="width: 100%" v-model="chooseAct">
<div class="x-d-b" v-for="(item,index) in activityList">
<el-radio :label="item.id">{{null==item.ruleName?item.actName:item.ruleName}}<div class="or_num">-{{item.disAmount}}</div></el-radio>
</div>
</el-radio-group>
</div>
<div class="x-d-b">
<el-checkbox v-model="checkAll2">优惠2</el-checkbox>
<div class="or_num">-0.00</div>
</div>
<div class="x-d-b">
<el-checkbox v-model="checkAll3">优惠3</el-checkbox>
<div class="or_num">-0.00</div>
<div v-if="activityList.length==0">
暂无可用优惠活动
</div>
</div>
<div class="d-b">
@ -89,6 +87,7 @@
</div>
<!-- 下拉列表插入-->
<div v-if="checkAll == true">
<div class="x-d-b">
<el-checkbox v-model="checkAll1">优惠券1</el-checkbox>
<div class="or_num">-0.00</div>
@ -120,8 +119,8 @@
</div>
<div class="er-box"></div>
<div class="wrap-box">
<div class="f-box" v-for="(item,index) in payList" :class="{'f-acvite' : index == ruleIndex }"
@click="setindex(index)" :key="index"
<div class="f-box" v-for="(item,index) in payList" :class="{'f-acvite' : item.dictValue == payWay }"
@click="setindex(item.dictValue)" :key="item.dictValue"
>{{ item.dictLabel }}
</div>
</div>
@ -520,7 +519,7 @@ import pickUp from './newHomeComponents/pickUpTheOrder.vue'
import accountPending from './newHomeComponents/accountPending.vue'
import memberRecharge from './newHomeComponents/memberRecharge.vue'
import refuelingAmount from './newHomeComponents/refuelingAmount.vue'
import { cashRegisterList, cashRegisterGoodsList,getActivityAndCoupon } from '@/api/newHome/newHome.js'
import { cashRegisterList, cashRegisterGoodsList,getActivityList,getCouponList } from '@/api/newHome/newHome.js'
import {QRCodeByStoreId} from "@/api/staff/qrcode";
import {userListByPhone} from "@/api/cashier/user";
@ -536,7 +535,16 @@ export default {
authCode:null,
seekZero:0.00
},
//
activityList:[],
// actId_ruleId
chooseAct:"",
//--
payWay: "ALIPAY",
//
orderAmount:0.0,
//
oilLiter:0,
openConfirm:false,
isPay:false,
loading:false,
@ -608,11 +616,8 @@ export default {
//
dataList: {},
userInfo: false,//
ruleIndex: 0,
tabIndex: 0,
newMember: false,
//
orderAmount:0.0,
ScanCodePayment: false,
cashPayment: false,
ruleForm: {
@ -644,15 +649,15 @@ export default {
immediate: true,
deep: true,
handler(newValue, oldValue) {
console.log('油枪发生拜年话', newValue);
console.log('油枪发生变化', newValue);
if(newValue && newValue.hasOwnProperty("oilNameId")){
this.orderAmount = (Number(newValue.amount)+Number(this.getGoodsNum)).toFixed(2)
}else{
this.orderAmount = this.getGoodsNum
}
this.refuelingAmount = false
//
this.getActivityAndCoupon()
//
this.getActivity()
}
},
//
@ -684,9 +689,9 @@ export default {
getGoodsItem() {
if (this.oilGunClearing.amount && this.oilGunClearing.amount !== undefined) {
//
let l = this.oilGunClearing.amount / this.oilGunClearing.oilPrice
this.oilLiter = (this.oilGunClearing.amount / this.oilGunClearing.oilPrice).toFixed(2)
// 821.03L/191.7936
return `${this.oilGunClearing.gunName}${l.toFixed(2)}L/${this.oilGunClearing.amount}元)`
return `${this.oilGunClearing.gunName}${this.oilLiter}L/${this.oilGunClearing.amount}元)`
} else {
return ''
@ -745,12 +750,40 @@ export default {
},
/**
* @description 油枪金额和商品金额发生变化请求后端查询可用优惠活动和优惠券
* @description 油枪金额和商品金额发生变化请求后端查询可用优惠活动
* 传入后台的参数会员的用户id加油油号加油订单金额不包括商品金额加油订单总金额包括商品金额加油总升数
* @author vinjor-m
* @date 2024年9月19日
*/
getActivityAndCoupon(){
getActivity(){
//
if(this.oilGunClearing!='' && this.oilGunClearing.hasOwnProperty("oilNameId") && this.chooseVipUser.hasOwnProperty("id")){
//
let dataObj = {
userId: this.chooseVipUser.id,
oilId: this.oilGunClearing.oilNameId,
oilPrice:this.oilGunClearing.oilPrice,
oilAmount: this.oilGunClearing.amount,
orderAmount: this.orderAmount,
payWay: this.payWay,
oilLiter: this.oilLiter
}
getActivityList(dataObj).then(res => {
console.log("返回的可参加活动",res)
this.activityList = res.data
})
}else {
//
this.activityList =[]
}
},
/**
* @description 油枪金额和商品金额发生变化请求后端查询可用优惠券
* 传入后台的参数会员的用户id加油油号加油订单金额不包括商品金额加油订单总金额包括商品金额加油总升数
* @author vinjor-m
* @date 2024年9月19日
*/
getCoupon(){
//
if(this.oilGunClearing!='' && this.oilGunClearing.hasOwnProperty("oilNameId") && this.chooseVipUser.hasOwnProperty("id")){
//
@ -764,7 +797,7 @@ export default {
orderAmount: this.orderAmount,
oilLiter: oilLiter
}
getActivityAndCoupon(dataObj).then(res => {
getCouponList(dataObj).then(res => {
console.log("返回结果",res)
})
}
@ -1012,8 +1045,12 @@ export default {
}
},
setindex(index) {
this.ruleIndex = index
/**
* 设置选中的支付方式
* @param value
*/
setindex(value) {
this.payWay = value
},
setRefuelingAmount(item) {
this.refuelingAmount = true
@ -1784,4 +1821,10 @@ input {
width: 350px;
margin-top: 0px;
}
.el-radio-group label{
width: 100%;
}
.el-radio-group .or_num{
float: right;
}
</style>