DeepLinkServiceImpl.java 3.55 KB
Newer Older
shenggui.li committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
package com.reyun.service.impl;

import com.reyun.model.AppDeepLink;
import com.reyun.model.Campaign;
import com.reyun.repository.AppDeepLinkRepository;
import com.reyun.service.CampaignService;
import com.reyun.service.DeepLinkService;
import com.reyun.service.INoSQLDBService;
import com.reyun.util.Constant;
import com.reyun.util.NoSQLDBUtil;
import com.reyun.util.ValidateUtil;
import com.reyun.util.NoSQLDBUtil.Result;
import com.reyun.util.NoSQLDBUtil.UpdateResult;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigInteger;
import java.util.List;

/**
 * @author liyin
 * @description
 * @date
 */
@Service
public class DeepLinkServiceImpl implements DeepLinkService {

    @Autowired
    private AppDeepLinkRepository appDeepLinkRepository;
    @Autowired
    private INoSQLDBService iNoSQLDBService;
    @Autowired
    private CampaignService campaignService;
    @Override
    public List<AppDeepLink> selectDeepLinksByAccount(Long id) {
        return appDeepLinkRepository.selectDeepLinksByAccount(id);
    }

    @Override
    public AppDeepLink createDeepLink(AppDeepLink appDeepLink) {
        AppDeepLink save = appDeepLinkRepository.save(appDeepLink);
        if(appDeepLink.getFlag().equals("iOS")){
            appDeepLink.setPaths("*");
            iNoSQLDBService.createOrUpdateIOSUniversalLinks(appDeepLink);
        }else{//Android
            iNoSQLDBService.createOrUpdateAndroidAppLinks(appDeepLink);
        }
        return save;
    }

    @Override
    public List<BigInteger> selectDeepLinkAppIds(Long rootParent) {
        return appDeepLinkRepository.selectDeepLinkAppIds(rootParent);
    }

    @Override
    public AppDeepLink findDeepLinkByAppId(Long appid) {
        return appDeepLinkRepository.findDeepLinkByAppId(appid);
    }

    @Override
    public AppDeepLink updateDeepLink(AppDeepLink appDeepLink) {
        AppDeepLink one = appDeepLinkRepository.findOne(appDeepLink.getId());
        String linkId = one.getLinkId();
        appDeepLink.setPaths(one.getPaths());
        appDeepLink.setCreateTime(one.getCreateTime());
        AppDeepLink save = appDeepLinkRepository.save(appDeepLink);
        //子域如果被修改需要同步数据库和ddb的活动下载地址
        if(!linkId.equals(appDeepLink.getLinkId())){
            //修改数据库
            campaignService.UpdateUrlByAppId(one.getAppid(),linkId+"."+Constant.deeplinkHost,appDeepLink.getLinkId()+"."+Constant.deeplinkHost);
            //修改ddb,ddb扫描太慢了,所以直接查数据库然后查询ddb进行修改
            List<Campaign> campaigns = campaignService.findByAppIdAndLikeUrl(one.getAppid(),appDeepLink.getLinkId()+"."+Constant.deeplinkHost);
            for (Campaign campaign : campaigns) {
                // FIXME: let's rewrite the following query&update w/ findAndUpdate()
                Result resultItem = NoSQLDBUtil.queryByPrimaryKey(NoSQLDBUtil.TBL_TABLE_SURL, "surl",
                        campaign.getSurl());
                if (ValidateUtil.isValid(resultItem)) {
                    NoSQLDBUtil.updateItem(NoSQLDBUtil.TBL_TABLE_SURL, "surl", campaign.getSurl(),
                            new UpdateResult().withString("url", campaign.getUrl()));
                }
            }
        }

        if(appDeepLink.getFlag().equals("iOS")){
            appDeepLink.setPaths("/ry/*");
            iNoSQLDBService.createOrUpdateIOSUniversalLinks(appDeepLink);
        }else{//Android
            iNoSQLDBService.createOrUpdateAndroidAppLinks(appDeepLink);
        }
        return save;
    }
}