admin
2020-08-26 26f7accb815f55f18f8eedfca4324700a96884ec
fanli/src/main/java/com/yeshi/fanli/service/impl/push/PushServiceImpl.java
@@ -1,151 +1,609 @@
package com.yeshi.fanli.service.impl.push;
import javax.annotation.Resource;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import com.yeshi.fanli.controller.admin.PushController;
import com.yeshi.fanli.dao.mybatis.AccountMessageMapper;
import com.yeshi.fanli.dao.mybatis.push.PushRecordMapper;
import com.yeshi.fanli.dto.push.PushBaseContent;
import com.yeshi.fanli.dto.push.PushTypeEnum;
import com.yeshi.fanli.entity.AppVersionInfo;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.bus.user.AccountMessage;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.system.SystemZnx;
import com.yeshi.fanli.entity.xinge.PushRecord;
import com.yeshi.fanli.exception.PushException;
import com.yeshi.fanli.service.inter.push.DeviceTokenHWService;
import com.yeshi.fanli.service.inter.push.HWPushService;
import com.yeshi.fanli.service.inter.push.IOSPushService;
import com.yeshi.fanli.service.inter.push.PushRecordService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.service.inter.push.XMPushService;
import com.yeshi.fanli.service.inter.user.AccountMessageService;
import com.yeshi.fanli.exception.push.PushException;
import com.yeshi.fanli.service.inter.config.AppVersionService;
import com.yeshi.fanli.service.inter.push.*;
import com.yeshi.fanli.service.inter.user.SystemZnxService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class PushServiceImpl implements PushService {
   static String IOSBundleId = "";
   static String PROJECT_NAME = "";
    static String IOSBundleId = "";
    static String PROJECT_NAME = "";
   static {
      IOSBundleId = Constant.systemCommonConfig.getIosBundleId();
      PROJECT_NAME = Constant.systemCommonConfig.getProjectChineseName();
   }
    static {
        IOSBundleId = Constant.systemCommonConfig.getIosBundleId();
        PROJECT_NAME = Constant.systemCommonConfig.getProjectChineseName();
    }
   @Resource
   private PushRecordService pushRecordService;
    @Resource
    private PushRecordService pushRecordService;
   @Resource
   private SystemZnxService systemZnxService;
    @Resource
    private SystemZnxService systemZnxService;
   @Resource
   private AccountMessageService accountMessageService;
    @Resource
    private DeviceTokenHWService deviceTokenHWService;
   @Resource
   private DeviceTokenHWService deviceTokenHWService;
    @Resource
    private IOSPushService iosPushService;
   @Resource
   private IOSPushService iosPushService;
    @Resource
    private HWPushService hwPushService;
   @Resource
   private HWPushService hwPushService;
    @Resource
    private XMPushService xmPushService;
   @Resource
   private XMPushService xmPushService;
    @Resource
    private OPPOPushService oPPOPushService;
   @Resource
   private PushRecordMapper pushRecordMapper;
   @Resource
   private AccountMessageMapper accountMessageMapper;
   @Async("pushExecutor")
   @Override
   public void pushGoods(Long uid, String url, String title, String content) throws PushException {
      String gids = url.split("id=")[1];
      String gid = gids.split("&")[0];
    @Resource
    private VIVOPushService vIVOPushService;
      PushRecord pushRecord = new PushRecord();
      pushRecord.setState(1);
      pushRecord.setType(PushController.GOODS); // 都成功
      pushRecord.setUrl(url);
      pushRecord.setTitle(title);
      pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
      pushRecord.setAccount(1);
    @Resource
    private PushRecordMapper pushRecordMapper;
      xmPushService.pushGoods(uid, Long.parseLong(gid), title, content);
      iosPushService.pushGoods(uid, Long.parseLong(gid), title, content);
      //hwPushService.pushGoods(uid, Long.parseLong(gid), title, content);
    @Resource
    private AccountMessageMapper accountMessageMapper;
      pushRecordMapper.insertSelective(pushRecord);
   }
    @Resource
    private AppVersionService appVersionService;
   @Async("pushExecutor")
   @Override
   public void pushUrl(Long uid, String url, String title, String content) throws PushException {
      PushRecord pushRecord = new PushRecord();
      pushRecord.setState(1);
      pushRecord.setType(PushController.URL);
      pushRecord.setUrl(url);
      pushRecord.setTitle(title);
      pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
    @Override
    public void pushGoods(Long uid, String title, String content, String url, List<String> listIOS,
                          List<String> listAndroid, SystemEnum system) throws PushException {
        String gids = url.split("id=")[1];
        String gid = gids.split("&")[0];
        if (StringUtil.isNullOrEmpty(gid))
            throw new PushException(1, "商品解析失败");
        if (StringUtil.isNullOrEmpty(title))
            throw new PushException(1, "请填写推送标题");
        if (StringUtil.isNullOrEmpty(content))
            throw new PushException(1, "请填写推送内容");
      xmPushService.pushUrl(uid, url, title, content);
      iosPushService.pushUrl(uid, url, title, content);
      hwPushService.pushUrl(uid, url, title, content);
      pushRecordMapper.insertSelective(pushRecord);
   }
        /* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listIOS == null || listIOS.size() > 0) {
            // 限制推送版本号:0
            String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS, system);
            if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
                iosPushService.pushGoods(uid, Long.parseLong(gid), title, content, codes);
            }
        }
   @Async("pushExecutor")
   @Override
   public void pushZNX(Long uId, String title, String content) throws PushException {
        /* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listAndroid == null || listAndroid.size() > 0) {
            // 限制推送版本号:0
            String versions = getEffectiveVersions(0, AppVersionInfo.PLATFORM_ANDROID, listAndroid, system);
            if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
                xmPushService.pushGoods(uid, Long.parseLong(gid), title, content, versions);
            }
            // 华为推送
            if (listAndroid == null || listAndroid.size() > 0) {
                List<Integer> versionCodeList = null;
                if (listAndroid != null)
                    versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
                hwPushService.pushGoods(uid, Long.parseLong(gid), new PushBaseContent(title, content, versionCodeList, system));
            }
      /* 无uid , 广播 数据插入系统表 */
      if (uId == null||uId==0) {
         // 插入数据库(系统站内信数据)
         SystemZnx systemZnx = new SystemZnx();
         systemZnx.setTitle(title);
         systemZnx.setContent(content);
         systemZnx.setCreateTime(System.currentTimeMillis());
         systemZnxService.save(systemZnx);
            // OPPO推送
            if (listAndroid == null || listAndroid.size() > 0) {
                List<Integer> versionCodeList = null;
                if (listAndroid != null)
                    versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
                oPPOPushService.pushGoods(uid, Long.parseLong(gid), new PushBaseContent(title, content, versionCodeList, system));
            }
            // VIVO推送
            if (listAndroid == null || listAndroid.size() > 0) {
                List<Integer> versionCodeList = null;
                if (listAndroid != null)
                    versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
                vIVOPushService.pushGoods(uid, Long.parseLong(gid), new PushBaseContent(title, content, versionCodeList, system));
            }
         PushRecord pushRecord = new PushRecord();
         pushRecord.setTitle(title);
         pushRecord.setState(1); // 成功
         pushRecord.setType(4); // 类型:站内信
         pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
         xmPushService.pushZNX(uId, null, systemZnx);
         iosPushService.pushZNX(uId, null, systemZnx);
         hwPushService.pushZNX(uId, null, systemZnx);
         // 插入推送记录
         pushRecordMapper.insertSelective(pushRecord);
      } else {
         AccountMessage accountMessage = new AccountMessage();
         accountMessage.setCreateTime(System.currentTimeMillis());
         accountMessage.setIsOpen(false);
         accountMessage.setUserInfo(new UserInfo(uId));
         accountMessage.setTitle(title);
         accountMessage.setContent(content);
         accountMessageMapper.insertSelective(accountMessage);
        }
         xmPushService.pushZNX(uId, accountMessage, null);
         iosPushService.pushZNX(uId, accountMessage, null);
         hwPushService.pushZNX(uId, accountMessage, null);
        PushRecord pushRecord = new PushRecord();
        pushRecord.setUid(uid);
        pushRecord.setState(1);
        pushRecord.setType(PushTypeEnum.goodsdetail.getCode()); // 都成功
        pushRecord.setUrl(url);
        pushRecord.setTitle(title);
        pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
        pushRecord.setAccount(1);
        pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
        pushRecordMapper.insertSelective(pushRecord);
    }
         // 插入推送记录
         PushRecord pushRecord = new PushRecord();
         pushRecord.setTitle(title);
         pushRecord.setUid(uId);
         pushRecord.setState(1); // 成功
         pushRecord.setType(PushController.ZNX); // 类型:站内信
         pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
         pushRecordMapper.insertSelective(pushRecord);
      }
   }
    @Override
    public void pushUrl(Long uid, String title, String content, String url, List<String> listIOS,
                        List<String> listAndroid, SystemEnum system) throws PushException {
        if (StringUtil.isNullOrEmpty(url))
            throw new PushException(1, "无推送链接");
        if (StringUtil.isNullOrEmpty(title))
            throw new PushException(1, "无推送标题");
        if (StringUtil.isNullOrEmpty(content))
            throw new PushException(1, "无推送内容");
        /* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listIOS == null || listIOS.size() > 0) {
            // 限制推送版本号:0
            String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS, system);
            if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
                iosPushService.pushUrl(uid, url, title, content, codes);
            }
        }
        /* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listAndroid == null || listAndroid.size() > 0) {
            // 限制推送版本号:0
            String versions = getEffectiveVersions(0, AppVersionInfo.PLATFORM_ANDROID, listAndroid, system);
            if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
                xmPushService.pushUrl(uid, url, title, content, versions);
            }
            // 华为推送
            if (listAndroid == null || listAndroid.size() > 0) {
                List<Integer> versionCodeList = null;
                if (listAndroid != null)
                    versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
                hwPushService.pushUrl(uid, url, new PushBaseContent(title, content, versionCodeList, system));
            }
            // OPPO推送
            if (listAndroid == null || listAndroid.size() > 0) {
                List<Integer> versionCodeList = null;
                if (listAndroid != null)
                    versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
                oPPOPushService.pushUrl(uid, url, new PushBaseContent(title, content, versionCodeList, system));
            }
            // VIVO推送
            if (listAndroid == null || listAndroid.size() > 0) {
                List<Integer> versionCodeList = null;
                if (listAndroid != null)
                    versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
                vIVOPushService.pushUrl(uid, url, new PushBaseContent(title, content, versionCodeList, system));
            }
        }
        PushRecord pushRecord = new PushRecord();
        pushRecord.setUid(uid);
        pushRecord.setState(1);
        pushRecord.setType(PushTypeEnum.url.getCode());
        pushRecord.setUrl(url);
        pushRecord.setTitle(title);
        pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
        pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
        pushRecordMapper.insertSelective(pushRecord);
    }
    @Override
    public void pushZNX(Long uId, String title, String content, List<String> listIOS, List<String> listAndroid, SystemEnum system)
            throws PushException {
        if (StringUtil.isNullOrEmpty(title))
            throw new PushException(1, "无推送标题");
        if (StringUtil.isNullOrEmpty(content))
            throw new PushException(1, "无推送内容");
        SystemZnx systemZnx = null;
        AccountMessage accountMessage = null;
        /* 无uid , 广播 数据插入系统表 */
        if (uId == null || uId == 0) {
            // 插入数据库(系统站内信数据)
            systemZnx = new SystemZnx();
            systemZnx.setTitle(title);
            systemZnx.setContent(content);
            systemZnx.setCreateTime(System.currentTimeMillis());
            systemZnxService.save(systemZnx);
        } else {
            accountMessage = new AccountMessage();
            accountMessage.setCreateTime(System.currentTimeMillis());
            accountMessage.setIsOpen(false);
            accountMessage.setUserInfo(new UserInfo(uId));
            accountMessage.setTitle(title);
            accountMessage.setContent(content);
            accountMessageMapper.insertSelective(accountMessage);
        }
        /* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listIOS == null || listIOS.size() > 0) {
            // 限制推送版本号:0
            String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS, system);
            if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
                iosPushService.pushZNX(uId, accountMessage, systemZnx, codes);
            }
        }
        /* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listAndroid == null || listAndroid.size() > 0) {
            // 限制推送版本号:0
            String versions = getEffectiveVersions(0, AppVersionInfo.PLATFORM_ANDROID, listAndroid, system);
            if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
                xmPushService.pushZNX(uId, accountMessage, systemZnx, versions);
            }
            // 华为推送
            if (listAndroid == null || listAndroid.size() > 0) {
                List<Integer> versionCodeList = null;
                if (listAndroid != null)
                    versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
                hwPushService.pushZNX(uId, new PushBaseContent(title, content, versionCodeList, system));
            }
            // OPPO推送
            if (listAndroid == null || listAndroid.size() > 0) {
                List<Integer> versionCodeList = null;
                if (listAndroid != null)
                    versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
                oPPOPushService.pushZNX(uId, new PushBaseContent(title, content, versionCodeList, system));
            }
            // VIVO推送
            if (listAndroid == null || listAndroid.size() > 0) {
                List<Integer> versionCodeList = null;
                if (listAndroid != null)
                    versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
                vIVOPushService.pushZNX(uId, new PushBaseContent(title, content, versionCodeList, system));
            }
        }
        // 插入推送记录
        PushRecord pushRecord = new PushRecord();
        pushRecord.setUid(uId);
        pushRecord.setTitle(title);
        pushRecord.setState(1); // 成功
        pushRecord.setType(PushTypeEnum.ZNX.getCode()); // 类型:站内信
        pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
        pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
        pushRecordMapper.insertSelective(pushRecord);
    }
    @Override
    public void pushWEEX(Long uid, String title, String content, String weexUrl, List<String> listIOS,
                         List<String> listAndroid, SystemEnum system) throws PushException {
        if (StringUtil.isNullOrEmpty(title))
            throw new PushException(1, "无推送标题");
        if (StringUtil.isNullOrEmpty(content))
            throw new PushException(1, "无推送内容");
        // 适用版本 1.4.8及以后 推送weex页面
        /* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listIOS == null || listIOS.size() > 0) {
            // 限制推送版本号:0
            String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS, system);
            if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
                iosPushService.pushWEEX(uid, title, content, weexUrl, codes);
            }
        }
        /* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listAndroid == null || listAndroid.size() > 0) {
            // 限制推送版本号:31
            String versions = getEffectiveVersions(0, AppVersionInfo.PLATFORM_ANDROID, listAndroid, system);
            if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
                xmPushService.pushWEEX(uid, title, content, weexUrl, versions);
            }
        }
        // 华为推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            hwPushService.pushWEEX(uid, weexUrl, new PushBaseContent(title, content, versionCodeList, system));
        }
        // OPPO推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            oPPOPushService.pushWEEX(uid, weexUrl, new PushBaseContent(title, content, versionCodeList, system));
        }
        // VIVO推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            vIVOPushService.pushWEEX(uid, weexUrl, new PushBaseContent(title, content, versionCodeList, system));
        }
        // 插入推送记录
        PushRecord pushRecord = new PushRecord();
        pushRecord.setTitle(title);
        pushRecord.setUid(uid);
        pushRecord.setState(1); // 成功
        pushRecord.setType(PushTypeEnum.weex.getCode()); // 类型:WEEX
        pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
        pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
        pushRecordMapper.insertSelective(pushRecord);
    }
    @Override
    public void pushBaiChuanUrl(Long uid, String title, String content, String url, List<String> listIOS,
                                List<String> listAndroid, SystemEnum system) throws PushException {
        if (StringUtil.isNullOrEmpty(title))
            throw new PushException(1, "无推送标题");
        if (StringUtil.isNullOrEmpty(content))
            throw new PushException(1, "无推送内容");
        // 适用版本 1.4.8及以后 推送百川网页
        /* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listIOS == null || listIOS.size() > 0) {
            // 限制推送版本号:0
            String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS, system);
            if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
                iosPushService.pushBaiChuanUrl(uid, title, content, url, codes);
            }
        }
        /* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listAndroid == null || listAndroid.size() > 0) {
            // 限制推送版本号:31
            String versions = getEffectiveVersions(31, AppVersionInfo.PLATFORM_ANDROID, listAndroid, system);
            if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
                xmPushService.pushBaiChuanUrl(uid, title, content, url, versions);
            }
        }
        // 华为推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            hwPushService.pushBaiChuanUrl(uid, url, new PushBaseContent(title, content, versionCodeList, system));
        }
        // OPPO推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            oPPOPushService.pushBaiChuanUrl(uid, url, new PushBaseContent(title, content, versionCodeList, system));
        }
        // VIVO推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            vIVOPushService.pushBaiChuanUrl(uid, url, new PushBaseContent(title, content, versionCodeList, system));
        }
        // 插入推送记录
        PushRecord pushRecord = new PushRecord();
        pushRecord.setUrl(url);
        pushRecord.setTitle(title);
        pushRecord.setUid(uid);
        pushRecord.setState(1); // 成功
        pushRecord.setType(PushTypeEnum.baichuan.getCode()); // 类型:百川
        pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
        pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
        pushRecordMapper.insertSelective(pushRecord);
    }
    @Override
    public void pushWelfareCenter(Long uid, String title, String content, List<String> listIOS,
                                  List<String> listAndroid, SystemEnum system) throws PushException {
        if (StringUtil.isNullOrEmpty(title))
            throw new PushException(1, "无推送标题");
        if (StringUtil.isNullOrEmpty(content))
            throw new PushException(1, "无推送内容");
        /* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listIOS == null || listIOS.size() > 0) {
            // 限制推送版本号:0
            String codes = getEffectiveVersionCodes(0, AppVersionInfo.PLATFORM_IOS, listIOS, system);
            if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
                iosPushService.pushWelfareCenter(uid, title, content, codes);
            }
        }
        /* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listAndroid == null || listAndroid.size() > 0) {
            // 限制推送版本号:36
            String versions = getEffectiveVersions(36, AppVersionInfo.PLATFORM_ANDROID, listAndroid, system);
            if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
                xmPushService.pushWelfareCenter(uid, title, content, versions);
            }
        }
        // 华为推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            hwPushService.pushWelfareCenter(uid, new PushBaseContent(title, content, versionCodeList, system));
        }
        // OPPO推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            oPPOPushService.pushWelfareCenter(uid, new PushBaseContent(title, content, versionCodeList, system));
        }
        // VIVO推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            vIVOPushService.pushWelfareCenter(uid, new PushBaseContent(title, content, versionCodeList, system));
        }
        // 插入推送记录
        PushRecord pushRecord = new PushRecord();
        pushRecord.setTitle(title);
        pushRecord.setUid(uid);
        pushRecord.setState(1); // 成功
        pushRecord.setType(PushTypeEnum.welfare.getCode()); // 类型:百川
        pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
        pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
        pushRecordMapper.insertSelective(pushRecord);
    }
    /**
     * 查询能推送版本号
     *
     * @param listVersion
     * @return
     */
    private String getEffectiveVersions(int minCode, String type, List<String> listVersion, SystemEnum system) throws PushException {
        if (minCode == 0 && listVersion == null) {
            return null;
        }
        String versions = "";
        if (listVersion == null) {
            List<AppVersionInfo> list = appVersionService.listByPlatformAndMinVersionCode(type, minCode, system);
            if (list != null) {
                for (AppVersionInfo appVersion : list) {
                    versions += appVersion.getVersion() + ",";
                }
            }
        } else {
            List<AppVersionInfo> list = appVersionService.listByVersions(type, listVersion, system);
            if (list != null) {
                for (AppVersionInfo appVersion : list) {
                    Integer code = appVersion.getVersionCode();
                    if (code != null && code >= minCode) {
                        versions += appVersion.getVersion() + ",";
                    }
                }
            }
        }
        if (versions.endsWith(",")) {
            versions = versions.substring(0, versions.length() - 1);
        }
        return versions;
    }
    /**
     * 查询能推送版本号code
     *
     * @param listVersion
     * @return
     */
    private String getEffectiveVersionCodes(int minCode, String type, List<String> listVersion, SystemEnum system) throws PushException {
        if (minCode == 0 && listVersion == null) {
            return null;
        }
        String versionCodes = "";
        if (listVersion == null) {
            List<AppVersionInfo> list = appVersionService.listByPlatformAndMinVersionCode(type, minCode, system);
            if (list != null) {
                for (AppVersionInfo appVersion : list) {
                    versionCodes += appVersion.getVersionCode() + ",";
                }
            }
        } else {
            List<AppVersionInfo> list = appVersionService.listByVersions(type, listVersion, system);
            if (list != null) {
                for (AppVersionInfo appVersion : list) {
                    Integer code = appVersion.getVersionCode();
                    if (code != null && code >= minCode) {
                        versionCodes += appVersion.getVersionCode() + ",";
                    }
                }
            }
        }
        if (versionCodes.endsWith(",")) {
            versionCodes = versionCodes.substring(0, versionCodes.length() - 1);
        }
        return versionCodes;
    }
    @Override
    public void pushUserSignInNotification(Long uid, String title, String content, List<String> listIOS,
                                           List<String> listAndroid, SystemEnum system) throws PushException {
        if (StringUtil.isNullOrEmpty(title))
            throw new PushException(1, "无推送标题");
        if (StringUtil.isNullOrEmpty(content))
            throw new PushException(1, "无推送内容");
        /* IOS端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listIOS == null || listIOS.size() > 0) {
            // 限制推送版本号:1.6.5以后
            String codes = getEffectiveVersionCodes(60, AppVersionInfo.PLATFORM_IOS, listIOS, system);
            if (listIOS == null || (listIOS.size() > 0 && codes != null && codes.trim().length() > 0)) {
                iosPushService.pushUserSignInNotification(uid, title, content, codes);
            }
        }
        /* Android端推送 (注明:list等于 'null' 时全推, size等于0 不做推送) */
        if (listAndroid == null || listAndroid.size() > 0) {
            // 限制推送版本号:1.6.5以后
            String versions = getEffectiveVersions(47, AppVersionInfo.PLATFORM_ANDROID, listAndroid, system);
            if (listAndroid == null || (listAndroid.size() > 0 && versions != null && versions.trim().length() > 0)) {
                xmPushService.pushUserSignInNotification(uid, title, content, versions);
            }
        }
        // 华为推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            hwPushService.pushUserSignInNotification(uid, new PushBaseContent(title, content, versionCodeList, system));
        }
        // OPPO推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            oPPOPushService.pushUserSignInNotification(uid, new PushBaseContent(title, content, versionCodeList, system));
        }
        // VIVO推送
        if (listAndroid == null || listAndroid.size() > 0) {
            List<Integer> versionCodeList = null;
            if (listAndroid != null)
                versionCodeList = appVersionService.listVersionCodeByVersions("android", listAndroid, system);
            vIVOPushService.pushUserSignInNotification(uid, new PushBaseContent(title, content, versionCodeList, system));
        }
        // 插入推送记录
        PushRecord pushRecord = new PushRecord();
        pushRecord.setTitle(title);
        pushRecord.setUid(uid);
        pushRecord.setState(1); // 成功
        pushRecord.setType(PushTypeEnum.signin.getCode()); // 类型:百川
        pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
        pushRecord.setCreatetime(java.lang.System.currentTimeMillis());
        pushRecordMapper.insertSelective(pushRecord);
    }
}