Commit 3bf6045f by 吕明尚

修改优惠券查询

parent 81d94082
......@@ -95,12 +95,12 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
List<SStore> list = sStoreService.list();
SConsumer user = FrontTokenComponent.getWxSConsumerEntry();
LambdaQueryWrapper<SConsumerCoupon> queryWrapper = new LambdaQueryWrapper<SConsumerCoupon>();
queryWrapper.eq(SConsumerCoupon::getConsumerId,user.getId());
queryWrapper.eq(SConsumerCoupon::getUseStatus,useStatus);
queryWrapper.eq(SConsumerCoupon::getConsumerId, user.getId());
queryWrapper.eq(SConsumerCoupon::getUseStatus, useStatus);
queryWrapper.eq(SConsumerCoupon::getIsDelete, YesNoEnum.no.getIndex());
if(UserStatusEnum.EXPIRED.getCode().compareTo(useStatus)==0){
if (UserStatusEnum.EXPIRED.getCode().compareTo(useStatus) == 0) {
//已过期查询3个月以内的
queryWrapper.gt(SConsumerCoupon::getEndDate,DateUtils.addMonths(new Date(),-3));
queryWrapper.gt(SConsumerCoupon::getEndDate, DateUtils.addMonths(new Date(), -3));
}
queryWrapper.orderByDesc(SConsumerCoupon::getCreateTime);
List<SConsumerCoupon> sConsumerCoupons = baseMapper.selectList(queryWrapper);
......@@ -258,7 +258,7 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
//迭代
SPack finalById = byId;
sConsumerCoupons.forEach(item -> {
checkCoupon(item,couponRequest,sStores,sRooms,sPacks,timeLong);
checkCoupon(item, couponRequest, sStores, sRooms, sPacks, timeLong);
SConsumerCouponVo vo = new SConsumerCouponVo();
BeanUtils.copyProperties(item, vo);
if (item.getCouponType().equals(CouponTypeEnum.CASH.getCode()) && StringUtils.isEmpty(item.getStoreIds())) {
......@@ -270,12 +270,20 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
}
//取绝对值
if (vo.getIsAvailable().equals(AvailableEnum.AVAILABLE.getCode())) {
if (!vo.getCouponType().equals(CouponTypeEnum.AMOUNT.getCode())) {
if (vo.getCouponType().equals(CouponTypeEnum.AMOUNT.getCode())) {
if (!ObjectUtils.isEmpty(roomLabel)) {
vo.setBalance(timeLong.multiply(room.getPrice()).subtract(vo.getOriginalPrice()).abs());
}
if (!ObjectUtils.isEmpty(finalById)) {
vo.setBalance(finalById.getPrice().subtract(vo.getOriginalPrice()).abs());
}
} else if (vo.getCouponType().equals(CouponTypeEnum.CASH.getCode()) || vo.getCouponType().equals(CouponTypeEnum.MINUS.getCode())
|| vo.getCouponType().equals(CouponTypeEnum.DURATION.getCode()) || vo.getCouponType().equals(CouponTypeEnum.PACKAGE.getCode())) {
if (!ObjectUtils.isEmpty(roomLabel)) {
vo.setBalance((roomLabel.getPromotionAmount().subtract(vo.getSalePrice())).
add(((timeLong.subtract(new BigDecimal(roomLabel.getPromotionDuration()))).multiply(room.getPrice()))).abs());
} else if (!ObjectUtils.isEmpty(finalById)) {
vo.setBalance(finalById.getPrice().subtract(vo.getSalePrice()));
vo.setBalance(finalById.getPrice().subtract(vo.getSalePrice()).abs());
}
} else {
vo.setBalance(new BigDecimal("999"));
......@@ -303,19 +311,19 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
}
private Boolean checkCoupon(SConsumerCoupon item, CouponRequest couponRequest
, List<SStore> sStores, List<SRoom> sRooms, List<SPack> sPacks, BigDecimal timeLong){
, List<SStore> sStores, List<SRoom> sRooms, List<SPack> sPacks, BigDecimal timeLong) {
item.setIsAvailable(AvailableEnum.AVAILABLE.getCode());
return checkAvailableDate(item,couponRequest)
&&checkCouponPeriod(item,couponRequest)
&&checkStore(item,couponRequest,sStores)
&&checkCouponType(item,couponRequest,sStores,sRooms,timeLong)
&&checkOrderType(item,couponRequest)
&&checkPack(item,couponRequest,sPacks)
&&chekcWeeks(item,couponRequest);
return checkAvailableDate(item, couponRequest)
&& checkCouponPeriod(item, couponRequest)
&& checkStore(item, couponRequest, sStores)
&& checkCouponType(item, couponRequest, sStores, sRooms, timeLong)
&& checkOrderType(item, couponRequest)
&& checkPack(item, couponRequest, sPacks)
&& chekcWeeks(item, couponRequest);
}
private Boolean chekcWeeks(SConsumerCoupon item, CouponRequest couponRequest) {
if(StringUtils.isNotBlank(item.getWeeks())) {
if (StringUtils.isNotBlank(item.getWeeks())) {
Integer startWeek = DateUtil.dayOfWeek(DateUtils.addDays(couponRequest.getPreStartDate(), -1));
//查询可用优惠卷判断星期只判断订单预约开始时间
// Integer endWeek = DateUtil.dayOfWeek(DateUtils.addDays(couponRequest.getPreEndDate(), -1));
......@@ -325,19 +333,19 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
// ||!weeks.contains(endWeek)
) {
item.setIsAvailable(AvailableEnum.UNAVAILABLE.getCode());
if(checkIfArrayIsContinuous(weeks.stream().mapToInt(i->i.intValue()).toArray())){
if(weeks.size()==1) {
if (checkIfArrayIsContinuous(weeks.stream().mapToInt(i -> i.intValue()).toArray())) {
if (weeks.size() == 1) {
item.setReason("优惠卷" + WeekEnum.getValueByCode(weeks.get(0)) + "可用");
}else if(WeekEnum.isSundays(weeks)){
} else if (WeekEnum.isSundays(weeks)) {
item.setReason("优惠卷周末可用");
}else if(WeekEnum.isAllWorkDays(weeks)){
} else if (WeekEnum.isAllWorkDays(weeks)) {
item.setReason("优惠卷周一至周五可用");
}else{
item.setReason("优惠卷" + WeekEnum.getValueByCode(weeks.get(0)) + "至" +WeekEnum.getValueByCode(weeks.get(weeks.size()-1))+ "可用");
} else {
item.setReason("优惠卷" + WeekEnum.getValueByCode(weeks.get(0)) + "至" + WeekEnum.getValueByCode(weeks.get(weeks.size() - 1)) + "可用");
}
}else{
} else {
StringBuffer buf = new StringBuffer("优惠券");
for(int index=0;index<weeks.size();index++){
for (int index = 0; index < weeks.size(); index++) {
buf.append(WeekEnum.getValueByCode(weeks.get(index)));
if (index < weeks.size()) {
buf.append("可用");
......@@ -360,69 +368,69 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
}
Arrays.sort(array); // 先对数组进行排序
for (int i = 0; i < array.length - 1; i++) {
if (array[i] != array[i+1]) {
if (array[i] != array[i + 1]) {
return false; // 如果相邻两个元素之间存在跨度大于1的情况则返回false
}
}
return true; // 没有发现跨度大于1的情况则返回true
}
private Boolean checkPack(SConsumerCoupon item, CouponRequest couponRequest, List<SPack> sPacks){
if(couponRequest.getOrderMode().compareTo(BuyTypeEnum.PACK.getCode())==0
&&StringUtils.isNotBlank(item.getPackIds())&&Objects.nonNull(couponRequest.getPackageId())){
private Boolean checkPack(SConsumerCoupon item, CouponRequest couponRequest, List<SPack> sPacks) {
if (couponRequest.getOrderMode().compareTo(BuyTypeEnum.PACK.getCode()) == 0
&& StringUtils.isNotBlank(item.getPackIds()) && Objects.nonNull(couponRequest.getPackageId())) {
List<Long> confPackIds = Arrays.stream(item.getPackIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
if(!confPackIds.contains(couponRequest.getPackageId())){
if (!confPackIds.contains(couponRequest.getPackageId())) {
List<SPack> packs = sPacks.stream().filter(obj -> confPackIds.contains(obj.getId())).collect(Collectors.toList());
if(!CollectionUtils.isEmpty(packs)){
if (!CollectionUtils.isEmpty(packs)) {
List<String> packNames = packs.stream().map(SPack::getName).distinct().collect(Collectors.toList());
item.setIsAvailable(AvailableEnum.UNAVAILABLE.getCode());
item.setReason("优惠卷当前套餐不可用,"+packNames.toString()+"套餐可用");
item.setReason("优惠卷当前套餐不可用," + packNames.toString() + "套餐可用");
}
}
}
return item.getIsAvailable()==0;
return item.getIsAvailable() == 0;
}
private Boolean checkOrderType(SConsumerCoupon item, CouponRequest couponRequest){
if(Objects.nonNull(item.getOrderType())&&item.getOrderType().compareTo(couponRequest.getOrderType())!=0){
private Boolean checkOrderType(SConsumerCoupon item, CouponRequest couponRequest) {
if (Objects.nonNull(item.getOrderType()) && item.getOrderType().compareTo(couponRequest.getOrderType()) != 0) {
item.setIsAvailable(AvailableEnum.UNAVAILABLE.getCode());
item.setReason("优惠卷"+OrderTypeEnum.getEnumByCode(item.getOrderType()).getName()+"可用");
item.setReason("优惠卷" + OrderTypeEnum.getEnumByCode(item.getOrderType()).getName() + "可用");
}
return item.getIsAvailable()==0;
return item.getIsAvailable() == 0;
}
private Boolean checkAvailableDate(SConsumerCoupon item, CouponRequest couponRequest){
if ((Objects.nonNull(item.getStartDate())&&Objects.nonNull(item.getEndDate()))
&&(item.getStartDate().compareTo(couponRequest.getPreStartDate()) > 0
|| item.getEndDate().compareTo(couponRequest.getPreEndDate()) < 0)){
private Boolean checkAvailableDate(SConsumerCoupon item, CouponRequest couponRequest) {
if ((Objects.nonNull(item.getStartDate()) && Objects.nonNull(item.getEndDate()))
&& (item.getStartDate().compareTo(couponRequest.getPreStartDate()) > 0
|| item.getEndDate().compareTo(couponRequest.getPreEndDate()) < 0)) {
item.setIsAvailable(AvailableEnum.UNAVAILABLE.getCode());
item.setReason("优惠卷未生效,优惠卷有效时间为" + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, item.getStartDate())
+ "-" + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, item.getEndDate()));
}
return item.getIsAvailable()==0;
return item.getIsAvailable() == 0;
}
private Boolean checkCouponPeriod(SConsumerCoupon item, CouponRequest couponRequest){
private Boolean checkCouponPeriod(SConsumerCoupon item, CouponRequest couponRequest) {
Boolean isOrderCrossDay = Integer.parseInt(DateUtils.parseDateToStr("yyyyMMdd", couponRequest.getPreEndDate())) >
Integer.parseInt(DateUtils.parseDateToStr("yyyyMMdd", couponRequest.getPreStartDate()));
String startStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,couponRequest.getPreStartDate());
String lastDayStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,DateUtils.addDays(couponRequest.getPreStartDate(),1));
Boolean isCouponCrossDay = DateUtils.parseDate(startStr+" "+item.getCouponTimeStart()).compareTo(DateUtils.parseDate(startStr+" "+item.getCouponTimeEnd()))>0;
if(Objects.nonNull(item.getCouponTimeStart())&&Objects.nonNull(item.getCouponTimeEnd())
&& (!StringUtils.equals(item.getCouponTimeStart(),"00:00")||(!StringUtils.equals(item.getCouponTimeEnd(),"24:00")&&!StringUtils.equals(item.getCouponTimeEnd(),"23:00")))){
String startStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, couponRequest.getPreStartDate());
String lastDayStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, DateUtils.addDays(couponRequest.getPreStartDate(), 1));
Boolean isCouponCrossDay = DateUtils.parseDate(startStr + " " + item.getCouponTimeStart()).compareTo(DateUtils.parseDate(startStr + " " + item.getCouponTimeEnd())) > 0;
if (Objects.nonNull(item.getCouponTimeStart()) && Objects.nonNull(item.getCouponTimeEnd())
&& (!StringUtils.equals(item.getCouponTimeStart(), "00:00") || (!StringUtils.equals(item.getCouponTimeEnd(), "24:00") && !StringUtils.equals(item.getCouponTimeEnd(), "23:00")))) {
//判断是否跨日券
if(isCouponCrossDay){
if(DateUtils.parseDate(startStr+" "+item.getCouponTimeStart()).compareTo(couponRequest.getPreStartDate())>0
||DateUtils.parseDate(lastDayStr+" "+item.getCouponTimeEnd()).compareTo(couponRequest.getPreEndDate())<0) {
if (isCouponCrossDay) {
if (DateUtils.parseDate(startStr + " " + item.getCouponTimeStart()).compareTo(couponRequest.getPreStartDate()) > 0
|| DateUtils.parseDate(lastDayStr + " " + item.getCouponTimeEnd()).compareTo(couponRequest.getPreEndDate()) < 0) {
item.setIsAvailable(AvailableEnum.UNAVAILABLE.getCode());
item.setReason("优惠卷可用时段为" + item.getCouponTimeStart() + "-次日" + item.getCouponTimeEnd());
}
}else{
} else {
//判断是否跨日订单
if (isOrderCrossDay){
if (isOrderCrossDay) {
item.setIsAvailable(AvailableEnum.UNAVAILABLE.getCode());
item.setReason("优惠卷可用时段为" + item.getCouponTimeStart() + "-" + item.getCouponTimeEnd());
}else {
} else {
if (DateUtils.parseDate(startStr + " " + item.getCouponTimeStart()).compareTo(couponRequest.getPreStartDate()) > 0
|| DateUtils.parseDate(startStr + " " + item.getCouponTimeEnd()).compareTo(couponRequest.getPreEndDate()) < 0) {
item.setIsAvailable(AvailableEnum.UNAVAILABLE.getCode());
......@@ -431,16 +439,16 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
}
}
}
return item.getIsAvailable()==0;
return item.getIsAvailable() == 0;
}
private Boolean checkCouponType(SConsumerCoupon item, CouponRequest couponRequest
, List<SStore> sStores, List<SRoom> sRooms, BigDecimal timeLong){
, List<SStore> sStores, List<SRoom> sRooms, BigDecimal timeLong) {
SStore sStore = sStores.stream().filter(store -> store.getId().equals(couponRequest.getStoreId())).findFirst().orElse(null);
SRoom byId = sRooms.stream().filter(room -> room.getId().equals(couponRequest.getRoomId())).findFirst().orElse(null);
BigDecimal subtract = new BigDecimal(item.getMinDuration());
CouponTypeEnum couponTypeEnum = CouponTypeEnum.getTypeCode(item.getCouponType());
switch (couponTypeEnum){
switch (couponTypeEnum) {
case PACKAGE:
if (couponRequest.getOrderMode().equals(BuyTypeEnum.PACK.getCode())) {
//计算价格
......@@ -464,11 +472,11 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
extracted(item, timeLong, byId, subtract, sStore);
break;
}
return item.getIsAvailable()==0;
return item.getIsAvailable() == 0;
}
private Boolean checkStore(SConsumerCoupon item,CouponRequest couponRequest,List<SStore> sStores){
private Boolean checkStore(SConsumerCoupon item, CouponRequest couponRequest, List<SStore> sStores) {
if (StringUtils.isNotBlank(item.getStoreIds())) {
List<Long> storeIds = Arrays.asList(item.getStoreIds().split(",")).stream().map(Long::parseLong).collect(Collectors.toList());
if (!storeIds.contains(couponRequest.getStoreId())) {
......@@ -477,7 +485,7 @@ public class SConsumerCouponServiceImpl extends ServiceImpl<SConsumerCouponMappe
item.setReason("优惠卷当前门店不可用,适用门店:" + storeNames.toString());
}
}
return item.getIsAvailable()==0;
return item.getIsAvailable() == 0;
}
@Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment