|
@@ -449,18 +449,24 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
|
|
|
// }
|
|
|
|
|
|
Date now = new Date();
|
|
|
- Date startTime = now;
|
|
|
+ long startTimeMills = now.getTime();
|
|
|
// 没有会员信息
|
|
|
if (vipCardRecordList.isEmpty()) {
|
|
|
PeriodEnum period = addVipCardRecord.getType();
|
|
|
- Date endDate = plusDate(startTime, period, Long.valueOf(addVipCardRecord.getTimes()));
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(now);
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ calendar.set(Calendar.MINUTE, 59);
|
|
|
+ calendar.set(Calendar.SECOND, 59);
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+ Date endDate = plusDate(calendar.getTime(), period, Long.valueOf(addVipCardRecord.getTimes()));
|
|
|
|
|
|
VipCardRecord addRecord = JSON.parseObject(JSON.toJSONString(addVipCardRecord), VipCardRecord.class);
|
|
|
addRecord.setSourceType(addVipCardRecord.getSourceType() !=null?addVipCardRecord.getSourceType():SourceTypeEnum.BACKEND_GIVE);
|
|
|
addRecord.setStatus(EVipRecordStatus.ADD);
|
|
|
addRecord.setDisplayFlag(true);
|
|
|
addRecord.setEfficientFlag(true);
|
|
|
- addRecord.setStartTime(startTime);
|
|
|
+ addRecord.setStartTime(now);
|
|
|
addRecord.setEndTime(endDate);
|
|
|
return addRecord;
|
|
|
}
|
|
@@ -469,54 +475,44 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
|
|
|
int index = 0;
|
|
|
if (addVipType.equals(EVipType.VIP)) { // vip 放到最后
|
|
|
index = vipCardRecordList.size();
|
|
|
- startTime = vipCardRecordList.stream().map(VipCardRecord::getEndTime).max(Date::compareTo).get();
|
|
|
+ startTimeMills = vipCardRecordList.stream().map(VipCardRecord::getEndTime).max(Date::compareTo).get().getTime() + 1000L;
|
|
|
}
|
|
|
if (addVipType.equals(EVipType.SVIP)) { //放到VIP的前面
|
|
|
- PeriodEnum period = addVipCardRecord.getType();
|
|
|
- if (period.equals(PeriodEnum.PERPETUAL)) {
|
|
|
- index = (int) vipCardRecordList.stream().filter(n -> EVipType.SVIP.equals(n.getVipType())).count();
|
|
|
- if (index > 0) {
|
|
|
- startTime = vipCardRecordList.stream().filter(n -> EVipType.SVIP.equals(n.getVipType())).map(VipCardRecord::getEndTime).max(Date::compareTo).get();
|
|
|
- }
|
|
|
- } else {
|
|
|
- index = (int) vipCardRecordList.stream().filter(n -> EVipType.SVIP.equals(n.getVipType()) && !PeriodEnum.PERPETUAL.equals(n.getType())).count();
|
|
|
- if (index > 0) {
|
|
|
- startTime = vipCardRecordList.stream().filter(n -> EVipType.SVIP.equals(n.getVipType()) && !PeriodEnum.PERPETUAL.equals(n.getType()))
|
|
|
- .map(VipCardRecord::getEndTime).max(Date::compareTo).get();
|
|
|
- }
|
|
|
+ index = (int) vipCardRecordList.stream().filter(n -> EVipType.SVIP.equals(n.getVipType()) && !PeriodEnum.PERPETUAL.equals(n.getType())).count();
|
|
|
+ if (index > 0) {
|
|
|
+ startTimeMills = vipCardRecordList.stream().filter(n -> EVipType.SVIP.equals(n.getVipType()) && !PeriodEnum.PERPETUAL.equals(n.getType()))
|
|
|
+ .map(VipCardRecord::getEndTime).max(Date::compareTo).get().getTime() + 1000;
|
|
|
}
|
|
|
}
|
|
|
- Date endDate = plusDate(startTime, addVipCardRecord.getType(), Long.valueOf(addVipCardRecord.getTimes()));
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(new Date(startTimeMills));
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+ calendar.set(Calendar.MINUTE, 59);
|
|
|
+ calendar.set(Calendar.SECOND, 59);
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+ Date endDate = plusDate(calendar.getTime(), addVipCardRecord.getType(), Long.valueOf(addVipCardRecord.getTimes()));
|
|
|
VipCardRecord newRecord = JSON.parseObject(JSON.toJSONString(addVipCardRecord), VipCardRecord.class);
|
|
|
newRecord.setSourceType(addVipCardRecord.getSourceType() !=null?addVipCardRecord.getSourceType():SourceTypeEnum.BACKEND_GIVE);
|
|
|
newRecord.setStatus(EVipRecordStatus.ADD);
|
|
|
- if (index > 0) {
|
|
|
- newRecord.setStartTime(new Date(startTime.getTime() + 1000));
|
|
|
- } else {
|
|
|
- newRecord.setStartTime(startTime);
|
|
|
- }
|
|
|
- newRecord.setEndTime(endDate);
|
|
|
+ newRecord.setStartTime(new Date(startTimeMills));
|
|
|
+ newRecord.setEndTime(new Date(endDate.getTime()));
|
|
|
newRecord.setDisplayFlag(true);
|
|
|
newRecord.setEfficientFlag(true);
|
|
|
|
|
|
// 平移时间
|
|
|
- long plusMills = endDate.getTime() - startTime.getTime();
|
|
|
+ long plusMills = endDate.getTime() - startTimeMills;
|
|
|
+ long beforeEndTime = newRecord.getEndTime().getTime();
|
|
|
for (int i = 0; i < vipCardRecordList.size(); i++) {
|
|
|
VipCardRecord vipCardRecord = vipCardRecordList.get(i);
|
|
|
if (i >= index) {
|
|
|
VipCardRecord addRecord = JSON.parseObject(JSON.toJSONString(vipCardRecord), VipCardRecord.class);
|
|
|
addRecord.setStatus(EVipRecordStatus.UPDATE);
|
|
|
|
|
|
- long startTimeMills = Math.max(vipCardRecord.getStartTime().getTime(), now.getTime());
|
|
|
- Date startDate = new Date(startTimeMills + plusMills + 1000);
|
|
|
- Calendar instance = Calendar.getInstance();
|
|
|
- instance.setTime(startDate);
|
|
|
- instance.set(Calendar.SECOND, 0);
|
|
|
- instance.set(Calendar.MILLISECOND, 0);
|
|
|
- addRecord.setStartTime(instance.getTime());
|
|
|
+ addRecord.setStartTime(new Date(beforeEndTime + 1000));
|
|
|
|
|
|
int days = (int) Math.ceil(plusMills * 1.0D / (24 * 60 * 60 * 1000));
|
|
|
- addRecord.setEndTime(plusDate(vipCardRecord.getEndTime(), PeriodEnum.DAY, days));
|
|
|
+ Date endTime = plusDate(vipCardRecord.getEndTime(), PeriodEnum.DAY, days);
|
|
|
+ addRecord.setEndTime(endTime);
|
|
|
addRecord.setDisplayFlag(false);
|
|
|
addRecord.setEfficientFlag(true);
|
|
|
save(addRecord);
|
|
@@ -526,6 +522,7 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
|
|
|
updateRecord.setEfficientFlag(false);
|
|
|
updateRecord.setRefId(refId);
|
|
|
updateById(updateRecord);
|
|
|
+ beforeEndTime = endTime.getTime();
|
|
|
}
|
|
|
}
|
|
|
return newRecord;
|
|
@@ -695,14 +692,14 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
|
|
|
}
|
|
|
|
|
|
private Date plusDate(Date start, PeriodEnum period, long times) {
|
|
|
- Calendar calendar = Calendar.getInstance();
|
|
|
- calendar.setTime(start);
|
|
|
- calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
- calendar.set(Calendar.MINUTE, 59);
|
|
|
- calendar.set(Calendar.SECOND, 59);
|
|
|
- calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+// Calendar calendar = Calendar.getInstance();
|
|
|
+// calendar.setTime(start);
|
|
|
+// calendar.set(Calendar.HOUR_OF_DAY, 23);
|
|
|
+// calendar.set(Calendar.MINUTE, 59);
|
|
|
+// calendar.set(Calendar.SECOND, 59);
|
|
|
+// calendar.set(Calendar.MILLISECOND, 0);
|
|
|
+ LocalDateTime localDateTimeMaxTime = LocalDateTime.ofInstant(start.toInstant(),ZoneId.systemDefault());
|
|
|
|
|
|
- LocalDateTime localDateTimeMaxTime = calendar.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
LocalDateTime end;
|
|
|
switch (period) {
|
|
|
case DAY:
|