pet-admin/admin/src/main/java/com/linln/admin/config/InitLoadDataService.java

159 lines
6.5 KiB
Java

package com.linln.admin.config;
import com.linln.admin.orders.domain.*;
import com.linln.admin.orders.repository.*;
import com.linln.admin.users.domain.UserCoupons;
import com.linln.admin.users.repository.UsersCouponsRepository;
import com.linln.admin.users.repository.UsersRepository;
import com.linln.common.enums.StatusEnum;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.availability.ApplicationAvailabilityBean;
import org.springframework.boot.availability.AvailabilityChangeEvent;
import org.springframework.boot.availability.ReadinessState;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author: yan.y
* @Description:
* @Date: Created in 22:40 2023/7/3
* @Modified by:
*/
@Slf4j
@Component
public class InitLoadDataService extends ApplicationAvailabilityBean {
public static final Map<Long, Goods> GOODS_MAP = new HashMap<>();
public static final Map<Long, Car> CAR_MAP = new HashMap<>();
public static final Map<Long, CarUser> CAR_USER_MAP = new HashMap<>();
public static final Map<Long, PetBaseInfo> PET_BASE_INFO_MAP = new HashMap<>();
public static final Map<String, List<Goods>> PET_GOODS_MAP = new HashMap<>();
public static final List<ServiceAddrs> SERVICE_ADDRS = new ArrayList<>();
public static final Map<Long, Coupons> COUPONS_MAP = new HashMap<>();
@Resource
private PetBaseInfoRepository petBaseInfoRepository;
@Resource
private GoodsRepository goodsRepository;
@Resource
private CarRepository carRepository;
@Resource
private CarUserRepository carUserRepository;
@Resource
private UsersRepository usersRepository;
@Resource
private PetGoodsRepository petGoodsRepository;
@Resource
private ServiceAddrsRepository servicesRepository;
@Resource
private UsersCouponsRepository usersCouponsRepository;
@Resource
private CouponsRepository couponsRepository;
@Resource
private CarConfigRepository carConfigRepository;
@Override
public void onApplicationEvent(AvailabilityChangeEvent<?> event) {
super.onApplicationEvent(event);
if (ReadinessState.ACCEPTING_TRAFFIC.equals(event.getState())) {
loadData();
}
}
@Scheduled(cron = "0 0/2 * * * ?")
public void loadData() {
List<Goods> goodsList = goodsRepository.findAll();
GOODS_MAP.clear();
GOODS_MAP.putAll(goodsList.stream().collect(Collectors.toMap(Goods::getId, goods -> goods)));
List<PetBaseInfo> petBaseInfoList = petBaseInfoRepository.findAll();
PET_BASE_INFO_MAP.clear();
PET_BASE_INFO_MAP.putAll(petBaseInfoList.stream().collect(Collectors.toMap(PetBaseInfo::getId, petBaseInfo -> petBaseInfo)));
List<Car> carList = carRepository.findAll();
CAR_MAP.clear();
CAR_MAP.putAll(carList.stream().collect(Collectors.toMap(Car::getId, car -> car)));
List<CarUser> carUserList = carUserRepository.findAll();
for (CarUser carUser : carUserList) {
carUser.setUsers(usersRepository.findById(carUser.getUid()).get());
}
CAR_USER_MAP.clear();
CAR_USER_MAP.putAll(carUserList.stream().collect(Collectors.toMap(CarUser::getId, carUser -> carUser)));
List<PetGoods> petGoodsList = petGoodsRepository.findAll();
Map<String, List<Goods>> petGoodsMap = new HashMap<>();
for (PetGoods petGoods : petGoodsList) {
String key = petGoods.getAssortment() + "" + petGoods.getPetType() + petGoods.getWeight() + petGoods.getHair();
if (petGoodsMap.containsKey(key)) {
petGoodsMap.get(key).add(GOODS_MAP.get(petGoods.getGoodsId()));
} else {
List<Goods> petGoodsList1 = new ArrayList<>();
petGoodsList1.add(GOODS_MAP.get(petGoods.getGoodsId()));
petGoodsMap.put(key, petGoodsList1);
}
}
PET_GOODS_MAP.clear();
PET_GOODS_MAP.putAll(petGoodsMap);
List<ServiceAddrs> serviceAddrs = servicesRepository.findAll();
SERVICE_ADDRS.clear();
SERVICE_ADDRS.addAll(serviceAddrs);
List<Coupons> couponsList = couponsRepository.findAll();
COUPONS_MAP.clear();
COUPONS_MAP.putAll(couponsList.stream().collect(Collectors.toMap(Coupons::getId, coupons -> coupons)));
log.info("goods load all as : {}", GOODS_MAP);
log.info("petBaseInfos load all as : {}", PET_BASE_INFO_MAP);
log.info("carList load all as : {}", CAR_MAP);
log.info("petGoodsList load all as : {}", PET_GOODS_MAP);
log.info("serviceAddrs load all as : {}", serviceAddrs);
}
/**
* 优惠券过期逻辑
*/
@Scheduled(cron = "0 0/1 * * * ?")
public void couponsExpire() {
List<UserCoupons> userCouponsList = usersCouponsRepository.findUserCouponsByLastExpireTimeLessThan(new Date());
for (UserCoupons userCoupons : userCouponsList) {
userCoupons.setCouponsStatus(3);
}
usersCouponsRepository.saveAllAndFlush(userCouponsList);
List<Coupons> couponsList = couponsRepository.findAllByExpireTimeLessThan(System.currentTimeMillis());
for (Coupons coupons : couponsList) {
coupons.setStatus(StatusEnum.DELETE.getCode());
}
couponsRepository.saveAllAndFlush(couponsList);
List<CarConfig> carConfigs = carConfigRepository.findAll();
for (CarConfig carConfig : carConfigs) {
if (carConfig.getStartDownTime() == null && carConfig.getEndDownTime() == null
&& CAR_MAP.get(carConfig.getCarId()).getCarStatus() == 2) {
Car car = CAR_MAP.get(carConfig.getCarId());
car.setCarStatus(1);
carRepository.save(car);
} else if (System.currentTimeMillis() >= carConfig.getStartDownTime().getTime() && System.currentTimeMillis() < carConfig.getEndDownTime().getTime()
&& CAR_MAP.get(carConfig.getCarId()).getCarStatus() == 1) {
Car car = CAR_MAP.get(carConfig.getCarId());
car.setCarStatus(2);
carRepository.save(car);
} else if (System.currentTimeMillis() >= carConfig.getEndDownTime().getTime()
&& CAR_MAP.get(carConfig.getCarId()).getCarStatus() == 2) {
Car car = CAR_MAP.get(carConfig.getCarId());
car.setCarStatus(1);
carRepository.save(car);
}
}
}
}