class AppInstanceClientRelationServiceImpl implements AppInstanceClientRelationService {

    private Logger logger = LoggerFactory.getLogger(AppInstanceClientRelationServiceImpl.class);

    private AppInstanceClientRelationDao appInstanceClientRelationDao;

    @Override
    public void batchSave(List<AppClientCostTimeStat> appClientCostTimeStatList) {<FILL_FUNCTION_BODY>}

    @Override
    public List<AppInstanceClientRelation> getAppInstanceClientRelationList(Long appId, Date date) {
        try {
            return appInstanceClientRelationDao.getAppInstanceClientRelationList(appId, date);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return Collections.emptyList();
        }
    }

    public void setAppInstanceClientRelationDao(AppInstanceClientRelationDao appInstanceClientRelationDao) {
        this.appInstanceClientRelationDao = appInstanceClientRelationDao;
    }


}

        if (CollectionUtils.isEmpty(appClientCostTimeStatList)) {
            return;
        }
        try {
            List<AppInstanceClientRelation> appInstanceClientRelationList = new ArrayList<AppInstanceClientRelation>();
            for (AppClientCostTimeStat appClientCostTimeStat : appClientCostTimeStatList) {
                AppInstanceClientRelation appInstanceClientRelation = AppInstanceClientRelation.generateFromAppClientCostTimeStat(appClientCostTimeStat);
                if (appInstanceClientRelation != null) {
                    appInstanceClientRelationList.add(appInstanceClientRelation);
                }
            }
            if (CollectionUtils.isNotEmpty(appInstanceClientRelationList)) {
                appInstanceClientRelationDao.batchSave(appInstanceClientRelationList);
            }
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    
<no_super_class>