admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/service/impl/push/IOSPushServiceImpl.java
@@ -1,683 +1,685 @@
package com.yeshi.fanli.service.impl.push;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.push.DeviceTokenIOSMapper;
import com.yeshi.fanli.dao.mybatis.push.PushQueueRecordMapper;
import com.yeshi.fanli.dto.push.PushTypeEnum;
import com.yeshi.fanli.entity.bus.user.AccountMessage;
import com.yeshi.fanli.entity.push.DeviceTokenIOS;
import com.yeshi.fanli.entity.push.PushQueueRecord;
import com.yeshi.fanli.entity.system.SystemZnx;
import com.yeshi.fanli.entity.xinge.MessageInfo;
import com.yeshi.fanli.entity.xinge.PushRecord;
import com.yeshi.fanli.exception.push.PushException;
import com.yeshi.fanli.log.PushLogHelper;
import com.yeshi.fanli.service.inter.push.IOSPushService;
import com.yeshi.fanli.service.inter.user.UserCustomSettingsService;
import com.yeshi.fanli.util.CMQManager;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.push.IOSPushUtil;
import net.sf.json.JSONObject;
@Service
public class IOSPushServiceImpl implements IOSPushService {
   @Resource
   private DeviceTokenIOSMapper deviceTokenIOSMapper;
   @Resource
   private PushQueueRecordMapper pushQueueRecordMapper;
   @Resource
   private UserCustomSettingsService userCustomSettingsService;
   @Async("pushExecutor")
   @Override
   public void pushGoods(Long uid, Long auctionId, String title, String content, String versionCodes)
         throws PushException {
      String url = "https://item.taobao.com/item.htm?id=" + auctionId;
      JSONObject json = new JSONObject();
      json.put("id", auctionId);
      json.put("type", "goodsdetail");
      json.put("miPushUrl", String.format("%s.ui.recommend.GoodsBrowserActivity",
            Constant.systemCommonConfig.getAndroidBaseactivityName()));
      MessageInfo info = new MessageInfo();
      info.setTitle(title);
      info.setContent(content);
      info.setDescription(content);
      info.setPackageName(Constant.systemCommonConfig.getAndroidPackageName());
      info.setActivty(String.format("%s.ui.recommend.GoodsBrowserActivity",
            Constant.systemCommonConfig.getAndroidBaseactivityName()));
      PushRecord pushRecord = new PushRecord();
      pushRecord.setState(1);
      pushRecord.setType(PushTypeEnum.goodsdetail.getCode()); // 都成功
      pushRecord.setUrl(url);
      pushRecord.setTitle(title);
      pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
      if (uid == null || uid == 0) {
         addPushIOSQueue(info, url, PushTypeEnum.goodsdetail.getCode(), versionCodes);
         /*
          * // 查询IOS所有设备号 // TODO 需要全推 List<String> deviceTokenList =
          * getDeviceTokenList(1, 20000); // IOS 全推 ThreadUtil.run(new
          * Runnable() {
          *
          * @Override public void run() { try {
          * IOSPushUtil.allPushIOS(deviceTokenList, info, url,
          * PushController.GOODS); } catch (Exception e) {
          * PushLogHelper.iosError(e);
          *
          * } } });
          */
      } else {
         if (!validateNotDisturbSingle(uid)) {
            return; // 通知免打扰(20:00-24:00 / 00:00 -08:00)
         }
         // IOS 单推
         List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
         List<String> deviceTokenList = new ArrayList<>();
         if (deviceTokenIosList != null)
            for (DeviceTokenIOS ios : deviceTokenIosList) {
               deviceTokenList.add(ios.getDeviceToken());
            }
         try {
            IOSPushUtil.allPushIOS(deviceTokenList, info, url, PushTypeEnum.goodsdetail.getCode());
         } catch (Exception e) {
            PushLogHelper.iosError(e);
         }
      }
   }
   @Async("pushExecutor")
   @Override
   public void pushUrl(Long uid, String url, String title, String content, String versionCodes) throws PushException {
      JSONObject json = new JSONObject();
      json.put("url", url);
      json.put("type", "url");
      json.put("webUrl", url);
      json.put("miPushUrl",
            String.format("%s.ui.BrowserActivity", Constant.systemCommonConfig.getAndroidBaseactivityName()));
      MessageInfo info = new MessageInfo();
      info.setTitle(title);
      info.setContent(content);
      info.setDescription(content);
      // 小米推送网页
      info.setPackageName(Constant.systemCommonConfig.getAndroidPackageName());
      info.setActivty(
            String.format("%s.ui.BrowserActivity", Constant.systemCommonConfig.getAndroidBaseactivityName()));
      PushRecord pushRecord = new PushRecord();
      // IOS 全推
      if (uid == null || uid == 0) {
         // TODO 需要全推
         addPushIOSQueue(info, url, PushTypeEnum.url.getCode(), versionCodes);
         /*
          * List<String> deviceTokenList = getDeviceTokenList(1, 1000);
          * ThreadUtil.run(new Runnable() {
          *
          * @Override public void run() { try {
          *
          * IOSPushUtil.allPushIOS(deviceTokenList, info, url,
          * PushController.URL);
          *
          * } catch (Exception e) { PushLogHelper.iosError(e); } } });
          */
      } else {
         if (!validateNotDisturbSingle(uid)) {
            return; // 通知免打扰(20:00-24:00 / 00:00 -08:00)
         }
         List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
         List<String> deviceTokenList = new ArrayList<>();
         if (deviceTokenIosList != null)
            for (DeviceTokenIOS ios : deviceTokenIosList) {
               deviceTokenList.add(ios.getDeviceToken());
            }
         try {
            IOSPushUtil.allPushIOS(deviceTokenList, info, url, PushTypeEnum.url.getCode());
         } catch (Exception e) {
            PushLogHelper.iosError(e);
         }
      }
   }
   @Async("pushExecutor")
   @Override
   public void pushZNX(Long uId, AccountMessage msg, SystemZnx systemZNX, String versionCodes) throws PushException {
      MessageInfo info = new MessageInfo();
      info.setPackageName(Constant.systemCommonConfig.getAndroidPackageName());
      JSONObject contentJson = new JSONObject();
      contentJson.put("isOpen", 0);
      contentJson.put("createTime", java.lang.System.currentTimeMillis());
      /* 无uid , 广播 数据插入系统表 */
      if (systemZNX != null) {
         info.setTitle(systemZNX.getTitle());
         info.setContent(systemZNX.getContent());
         contentJson.put("title", systemZNX.getTitle());
         contentJson.put("content", systemZNX.getContent());
         info.setDescription(systemZNX.getContent());
         // 小米开始全推
         long id = systemZNX.getId();
         contentJson.put("id", id);
         JSONObject json = new JSONObject();
         json.put("type", "ZNX");
         json.put("content", contentJson);
         json.put("miPushUrl", String.format("%s.ui.mine.AppMailDetailActivity",
               Constant.systemCommonConfig.getAndroidBaseactivityName()));
         PushRecord pushRecord = new PushRecord();
         // TODO 需要全推
         addPushIOSQueue(info, id + "", PushTypeEnum.ZNX.getCode(), versionCodes);
         /*
          * List<String> deviceTokenList = getDeviceTokenList(1, 1000);
          *
          * ThreadUtil.run(new Runnable() {
          *
          * @Override public void run() { try {
          * IOSPushUtil.allPushIOS(deviceTokenList, info, id + "",
          * PushController.ZNX); } catch (Exception e) {
          * PushLogHelper.iosError(e); }
          *
          * } });
          */
      } else if (msg != null) {
         if (uId != null) {
            if (!validateNotDisturbSingle(uId)) {
               return; // 通知免打扰(20:00-24:00 / 00:00 -08:00)
            }
         }
         // 插入推送记录
         PushRecord pushRecord = new PushRecord();
         info.setTitle(msg.getTitle());
         info.setContent(msg.getContent());
         contentJson.put("title", msg.getTitle());
         contentJson.put("content", msg.getContent());
         info.setDescription(msg.getContent());
         info.setAlias(uId + "");
         info.setPackageName(Constant.systemCommonConfig.getAndroidPackageName());
         info.setActivty(
               String.format("%s.ui.BrowserActivity", Constant.systemCommonConfig.getAndroidBaseactivityName()));
         contentJson.put("id", msg.getId() + "");
         JSONObject json = new JSONObject();
         json.put("type", "ZNX");
         json.put("content", contentJson);
         json.put("miPushUrl", String.format("%s.ui.mine.AppMailDetailActivity",
               Constant.systemCommonConfig.getAndroidBaseactivityName()));
         List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(msg.getUserInfo().getId(), versionCodes);
         List<String> deviceTokenList = new ArrayList<>();
         if (deviceTokenIosList != null)
            for (DeviceTokenIOS ios : deviceTokenIosList) {
               deviceTokenList.add(ios.getDeviceToken());
            }
         // IOS 单推
         try {
            IOSPushUtil.allPushIOS(deviceTokenList, info, "0", PushTypeEnum.ZNX.getCode());
         } catch (Exception e) {
            PushLogHelper.iosError(e);
         }
      }
   }
   @Transactional
   @Override
   public void addDeviceToken(Long uid, int version, String deviceToken, String device) {
      // 如果device为空就返回
      if (StringUtil.isNullOrEmpty(device) || StringUtil.isNullOrEmpty(deviceToken))
         return;
      // 判断device是否存在
      DeviceTokenIOS deviceTokenIos = deviceTokenIOSMapper.selectByDeviceForUpdate(device);
      if (deviceTokenIos == null) {
         deviceTokenIos = new DeviceTokenIOS();
         deviceTokenIos.setCreateTime(new Date());
         deviceTokenIos.setUpdateTime(new Date());
         deviceTokenIos.setDevice(device);
         deviceTokenIos.setDeviceToken(deviceToken);
         deviceTokenIos.setDeviceTokenMd5(StringUtil.Md5(deviceToken));
         deviceTokenIos.setUid(uid);
         deviceTokenIos.setVersion(version);
         deviceTokenIOSMapper.insertSelective(deviceTokenIos);
      } else {// 更新devicetoken
         DeviceTokenIOS updateDeviceTokenIOS = new DeviceTokenIOS();
         updateDeviceTokenIOS.setId(deviceTokenIos.getId());
         updateDeviceTokenIOS.setDeviceToken(deviceToken);
         updateDeviceTokenIOS.setDeviceTokenMd5(StringUtil.Md5(deviceToken));
         updateDeviceTokenIOS.setUid(uid);
         updateDeviceTokenIOS.setUpdateTime(new Date());
         deviceTokenIOSMapper.updateByPrimaryKeySelective(updateDeviceTokenIOS);
      }
   }
   @Override
   public List<DeviceTokenIOS> getDeviceTokenListByUid(Long uid, String versionCodes) throws PushException {
      return deviceTokenIOSMapper.selectByUid(uid, convertVersionType(versionCodes));
   }
   @Override
   public List<String> getDeviceTokenList(int page, int size) {
      List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList((long) ((page - 1) * size), size, null);
      List<String> tokenList = new ArrayList<>();
      for (DeviceTokenIOS ios : list)
         if (!StringUtil.isNullOrEmpty(ios.getDeviceToken()))
            tokenList.add(ios.getDeviceToken());
      return tokenList;
   }
   @Override
   public long getDeviceTokenCount() {
      return deviceTokenIOSMapper.selectCount();
   }
   @Override
   public void updateDeviceToken(DeviceTokenIOS deviceTokenIos) {
      if (deviceTokenIos != null) {
         deviceTokenIos.setUpdateTime(new Date());
         deviceTokenIOSMapper.updateByPrimaryKey(deviceTokenIos);
      }
   }
   @Override
   public DeviceTokenIOS getDeviceTokenByDeviceToken(String deviceToken) {
      return deviceTokenIOSMapper.selectByDeviceToken(deviceToken);
   }
   /**
    * 保存推送内容只队列中
    *
    * @param json
    */
   @Transactional
   public void addPushIOSQueue(MessageInfo info, String url, int type, String versionCodes) throws PushException {
      if (Constant.IS_TEST)
         return;
      try {
         JSONObject json = IOSPushUtil.getJSONObject(info, url, type);
         // 总条目
         long tokenCount = getDeviceTokenCount();
         // 一个队列 1000 条
         long totalCount = 1000;
         // 每次执行条目
         int pushNum = 50;
         for (long i = 0; i < tokenCount + totalCount;) {
            PushQueueRecord pushQueueRecord = new PushQueueRecord();
            // 初始状态
            pushQueueRecord.setState(0);
            // 发送内容
            pushQueueRecord.setJsonContent(json.toString());
            // 创建时间
            pushQueueRecord.setCreatetime(new Date());
            // 每次推送数量
            pushQueueRecord.setPushNum(pushNum);
            // 推送端 IOS
            pushQueueRecord.setType(1);
            // 版本号
            pushQueueRecord.setVersions(versionCodes);
            if (tokenCount - i < totalCount) {
               // 起始游标
               pushQueueRecord.setStartCursor(i);
               // 结束游标
               pushQueueRecord.setEndCursor(tokenCount);
               // 存入数据库
               pushQueueRecordMapper.insert(pushQueueRecord);
               // 加入队列
               CMQManager.getInstance().addIOSPushMsg(pushQueueRecord);
               break;
            } else {
               // 起始游标
               pushQueueRecord.setStartCursor(i);
               long endCursor = (i + totalCount) - 1;
               // 结束游标
               pushQueueRecord.setEndCursor(endCursor);
               // 存入数据库
               pushQueueRecordMapper.insert(pushQueueRecord);
               // 加入队列
               CMQManager.getInstance().addIOSPushMsg(pushQueueRecord);
            }
            i += totalCount;
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   /**
    * 队列执行推送操作
    */
   @Override
   public void readyPushIOS(PushQueueRecord pushQueueRecord) throws Exception {
      // 起始位置
      Long startCursor = pushQueueRecord.getStartCursor();
      // 结束位置
      Long endCursor = pushQueueRecord.getEndCursor();
      if (startCursor == null && endCursor == null) {
         return;
      }
      // 推送的版本号
      String versions = pushQueueRecord.getVersions();
      List<Integer> listCode = convertVersionType(versions);
      int total = (int) (endCursor - startCursor);
      // 每次推送总条数
      int moveNum = pushQueueRecord.getPushNum();
      int count = total / moveNum;
      if (total % moveNum > 0) {
         count += 1;
      }
      long recordCursor = startCursor;
      for (int i = 0; i < count; i++) {
         // 不足50个数据
         if (moveNum > total) {
            moveNum = (int) (endCursor - startCursor);
            List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(startCursor, moveNum, listCode);
            recordCursor = endCursor;
            if (list != null) {
               executePushIOS(list, pushQueueRecord, recordCursor);
               PushLogHelper.iosInfo("推送游标:" + startCursor + "," + moveNum);
            }
         } else {
            if (recordCursor + moveNum > endCursor) {
               // System.out.println("recordCursorend:" +recordCursor);
               moveNum = (int) (endCursor - recordCursor);
               // System.out.println(moveNum);
               List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum, listCode);
               if (list != null) {
                  executePushIOS(list, pushQueueRecord, endCursor);
                  PushLogHelper.iosInfo("推送游标:" + recordCursor + "," + moveNum);
               }
               recordCursor = endCursor;
            } else {
               List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum, listCode);
               recordCursor = recordCursor + 50;
               if (list != null) {
                  executePushIOS(list, pushQueueRecord, recordCursor - 1);
                  PushLogHelper.iosInfo("推送游标:" + recordCursor + "," + moveNum);
               }
            }
         }
      }
   }
   public void executePushIOS(List<DeviceTokenIOS> list, PushQueueRecord pushQueueRecord, long recordCursor) {
      String jsonContent = pushQueueRecord.getJsonContent();
      JSONObject json = JSONObject.fromObject(jsonContent);
      List<String> tokenList = new ArrayList<>();
      boolean ispush = false;
      List<Long> listNotPushId = null;
      Calendar now = Calendar.getInstance();
      int hour = now.get(Calendar.HOUR_OF_DAY);
//      if (hour >= 8 && hour < 20) {
//         ispush = true; // 可推送
//      } else {
//         listNotPushId = validateNotDisturb();
//      }
      ispush=true;//TODO 处理消息免打扰
      for (DeviceTokenIOS ios : list) {
         if (!StringUtil.isNullOrEmpty(ios.getDeviceToken())) {
            if (!ispush && listNotPushId != null && listNotPushId.size() > 0) {
               Long uid = ios.getUid();
               if (uid != null && listNotPushId.contains(uid)) {
                  continue; // 通知免打扰(20:00-24:00 / 00:00 -08:00)
               }
            }
            tokenList.add(ios.getDeviceToken());
         }
      }
      if (tokenList.size() > 0) {
         // 执行推送
         try {
            IOSPushUtil.executePushIOS(tokenList, json);
         } catch (Exception e) {
            e.printStackTrace();
         }
      }
      pushQueueRecord.setState(1);
      pushQueueRecord.setEndtime(new Date());
      pushQueueRecord.setRecordCursor(recordCursor);
      // 更新数据库
      pushQueueRecordMapper.updateByPrimaryKeySelective(pushQueueRecord);
   }
   @Override
   public void unBindUidAndDevice(String device) {
      if (StringUtil.isNullOrEmpty(device))
         return;
      DeviceTokenIOS deviceTokenIOS = deviceTokenIOSMapper.selectByDevice(device);
      if (device != null) {
         deviceTokenIOS.setUpdateTime(new Date());
         deviceTokenIOS.setUid(null);
         deviceTokenIOSMapper.updateByPrimaryKey(deviceTokenIOS);
      }
   }
   @Async("pushExecutor")
   @Override
   public void pushWEEX(Long uid, String title, String content, String weexUrl, String versionCodes)
         throws PushException {
      MessageInfo info = new MessageInfo();
      info.setTitle(title);
      info.setContent(content);
      info.setDescription(content);
      // IOS 全推
      if (uid == null || uid == 0) {
         addPushIOSQueue(info, weexUrl, PushTypeEnum.weex.getCode(), versionCodes);
      } else {
         List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
         List<String> deviceTokenList = new ArrayList<>();
         if (deviceTokenIosList != null)
            for (DeviceTokenIOS ios : deviceTokenIosList) {
               deviceTokenList.add(ios.getDeviceToken());
            }
         try {
            IOSPushUtil.allPushIOS(deviceTokenList, info, weexUrl, PushTypeEnum.weex.getCode());
         } catch (Exception e) {
            PushLogHelper.iosError(e);
         }
      }
   }
   @Async("pushExecutor")
   @Override
   public void pushBaiChuanUrl(Long uid, String title, String content, String url, String versionCodes)
         throws PushException {
      MessageInfo info = new MessageInfo();
      info.setTitle(title);
      info.setContent(content);
      info.setDescription(content);
      // IOS 全推
      if (uid == null || uid == 0) {
         addPushIOSQueue(info, url, PushTypeEnum.baichuan.getCode(), versionCodes);
      } else {
         List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
         List<String> deviceTokenList = new ArrayList<>();
         if (deviceTokenIosList != null)
            for (DeviceTokenIOS ios : deviceTokenIosList) {
               deviceTokenList.add(ios.getDeviceToken());
            }
         try {
            IOSPushUtil.allPushIOS(deviceTokenList, info, url, PushTypeEnum.baichuan.getCode());
         } catch (Exception e) {
            PushLogHelper.iosError(e);
         }
      }
   }
   /**
    * 通知免打扰(20:00-8:00)
    */
   public List<Long> validateNotDisturb() {
      return userCustomSettingsService.getCancelNoticeUsers();
   }
   /**
    * 通知免打扰(20:00-8:00)
    */
   public boolean validateNotDisturbSingle(Long uid) {
      Calendar now = Calendar.getInstance();
      int hour = now.get(Calendar.HOUR_OF_DAY);
      boolean ispush;
      if (hour >= 8 && hour < 20) {
         ispush = true; // 可推送
      } else {
         // 自定义设置 通知免打扰(20:00-24:00 / 00:00 -08:00)
         ispush = userCustomSettingsService.validateCancelNoticeByUid(uid);
      }
      return ispush;
   }
   @Async("pushExecutor")
   @Override
   public void pushWelfareCenter(Long uid, String title, String content, String versionCodes) throws PushException {
      MessageInfo info = new MessageInfo();
      info.setTitle(title);
      info.setContent(content);
      info.setDescription(content);
      // IOS 全推
      if (uid == null || uid == 0) {
         addPushIOSQueue(info, "", PushTypeEnum.welfare.getCode(), versionCodes);
      } else {
         if (!validateNotDisturbSingle(uid)) {
            return;
         }
         List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
         List<String> deviceTokenList = new ArrayList<>();
         if (deviceTokenIosList != null)
            for (DeviceTokenIOS ios : deviceTokenIosList) {
               deviceTokenList.add(ios.getDeviceToken());
            }
         try {
            IOSPushUtil.allPushIOS(deviceTokenList, info, "", PushTypeEnum.welfare.getCode());
         } catch (Exception e) {
            PushLogHelper.iosError(e);
         }
      }
   }
   private List<Integer> convertVersionType(String versionCodes) {
      List<Integer> listVersionCode = null;
      if (versionCodes != null && versionCodes.trim().length() > 0) {
         List<String> listVersion = Arrays.asList(versionCodes.split(","));
         if (listVersion != null && listVersion.size() > 0) {
            listVersionCode = new ArrayList<Integer>();
            // 转换成功整型
            for (String version : listVersion) {
               if (version != null && version.trim().length() > 0) {
                  listVersionCode.add(Integer.parseInt(version));
               }
            }
         }
      }
      return listVersionCode;
   }
   @Override
   public void pushUserSignInNotification(Long uid, String title, String content, String versions)
         throws PushException {
      MessageInfo info = new MessageInfo();
      info.setTitle(title);
      info.setContent(content);
      info.setDescription(content);
      // IOS 全推
      if (uid == null || uid == 0) {
         addPushIOSQueue(info, "", PushTypeEnum.signin.getCode(), versions);
      } else {
         List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versions);
         List<String> deviceTokenList = new ArrayList<>();
         if (deviceTokenIosList != null)
            for (DeviceTokenIOS ios : deviceTokenIosList) {
               deviceTokenList.add(ios.getDeviceToken());
            }
         try {
            IOSPushUtil.allPushIOS(deviceTokenList, info, "", PushTypeEnum.signin.getCode());
         } catch (Exception e) {
            PushLogHelper.iosError(e);
         }
      }
   }
}
package com.yeshi.fanli.service.impl.push;
import com.yeshi.fanli.dao.mybatis.push.DeviceTokenIOSMapper;
import com.yeshi.fanli.dao.mybatis.push.PushQueueRecordMapper;
import com.yeshi.fanli.dto.push.PushTypeEnum;
import com.yeshi.fanli.entity.SystemEnum;
import com.yeshi.fanli.entity.bus.user.AccountMessage;
import com.yeshi.fanli.entity.config.SystemConfigKeyEnum;
import com.yeshi.fanli.entity.push.DeviceTokenIOS;
import com.yeshi.fanli.entity.push.PushQueueRecord;
import com.yeshi.fanli.entity.system.SystemZnx;
import com.yeshi.fanli.entity.xinge.MessageInfo;
import com.yeshi.fanli.entity.xinge.PushRecord;
import com.yeshi.fanli.exception.push.PushException;
import com.yeshi.fanli.log.PushLogHelper;
import com.yeshi.fanli.service.inter.config.SystemConfigService;
import com.yeshi.fanli.service.inter.push.IOSPushService;
import com.yeshi.fanli.service.inter.user.UserCustomSettingsService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.mq.rabbit.RabbitmqManager;
import com.yeshi.fanli.util.push.IOSPushUtil;
import net.sf.json.JSONObject;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
@Service
public class IOSPushServiceImpl implements IOSPushService {
    @Resource
    private DeviceTokenIOSMapper deviceTokenIOSMapper;
    @Resource
    private PushQueueRecordMapper pushQueueRecordMapper;
    @Resource
    private UserCustomSettingsService userCustomSettingsService;
    @Resource
    private SystemConfigService systemConfigService;
    @Resource
    private RabbitmqManager rabbitmqManager;
    @Async("pushExecutor")
    @Override
    public void pushGoods(Long uid, String auctionId, String title, String content, String versionCodes, SystemEnum system)
            throws PushException {
        String url = "https://item.taobao.com/item.htm?id=" + auctionId;
        JSONObject json = new JSONObject();
        json.put("id", auctionId);
        json.put("type", "goodsdetail");
        json.put("miPushUrl", String.format("%s.ui.recommend.GoodsBrowserActivity",
                systemConfigService.getValueCache(SystemConfigKeyEnum.androidBaseActivityName,system)));
        MessageInfo info = new MessageInfo();
        info.setTitle(title);
        info.setContent(content);
        info.setDescription(content);
        info.setPackageName(systemConfigService.getValueCache(SystemConfigKeyEnum.androidPackageNames,system));
        info.setActivty(String.format("%s.ui.recommend.GoodsBrowserActivity",
                systemConfigService.getValueCache(SystemConfigKeyEnum.androidBaseActivityName,system)));
        PushRecord pushRecord = new PushRecord();
        pushRecord.setState(1);
        pushRecord.setType(PushTypeEnum.goodsdetail.getCode()); // 都成功
        pushRecord.setUrl(url);
        pushRecord.setTitle(title);
        pushRecord.setAppName(Constant.systemCommonConfig.getProjectChineseName());
        if (uid == null || uid == 0) {
            addPushIOSQueue(info, url, PushTypeEnum.goodsdetail.getCode(), versionCodes,system);
            /*
             * // 查询IOS所有设备号 // TODO 需要全推 List<String> deviceTokenList =
             * getDeviceTokenList(1, 20000); // IOS 全推 ThreadUtil.run(new
             * Runnable() {
             *
             * @Override public void run() { try {
             * IOSPushUtil.allPushIOS(deviceTokenList, info, url,
             * PushController.GOODS); } catch (Exception e) {
             * PushLogHelper.iosError(e);
             *
             * } } });
             */
        } else {
            if (!validateNotDisturbSingle(uid)) {
                return; // 通知免打扰(20:00-24:00 / 00:00 -08:00)
            }
            // IOS 单推
            List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
            List<String> deviceTokenList = new ArrayList<>();
            if (deviceTokenIosList != null)
                for (DeviceTokenIOS ios : deviceTokenIosList) {
                    deviceTokenList.add(ios.getDeviceToken());
                }
            try {
                IOSPushUtil.allPushIOS(deviceTokenList, info, url, PushTypeEnum.goodsdetail.getCode(),systemConfigService.getValueCache(SystemConfigKeyEnum.iosPushCertPwd,system));
            } catch (Exception e) {
                PushLogHelper.iosError(e);
            }
        }
    }
    @Async("pushExecutor")
    @Override
    public void pushUrl(Long uid, String url, String title, String content, String versionCodes, SystemEnum system) throws PushException {
        JSONObject json = new JSONObject();
        json.put("url", url);
        json.put("type", "url");
        json.put("webUrl", url);
        json.put("miPushUrl",
                String.format("%s.ui.BrowserActivity",systemConfigService.getValueCache(SystemConfigKeyEnum.androidBaseActivityName,system)));
        MessageInfo info = new MessageInfo();
        info.setTitle(title);
        info.setContent(content);
        info.setDescription(content);
        // 小米推送网页
        info.setPackageName(systemConfigService.getValueCache(SystemConfigKeyEnum.androidPackageNames,system));
        info.setActivty(
                String.format("%s.ui.BrowserActivity", systemConfigService.getValueCache(SystemConfigKeyEnum.androidBaseActivityName,system)));
        PushRecord pushRecord = new PushRecord();
        // IOS 全推
        if (uid == null || uid == 0) {
            // TODO 需要全推
            addPushIOSQueue(info, url, PushTypeEnum.url.getCode(), versionCodes,system);
            /*
             * List<String> deviceTokenList = getDeviceTokenList(1, 1000);
             * ThreadUtil.run(new Runnable() {
             *
             * @Override public void run() { try {
             *
             * IOSPushUtil.allPushIOS(deviceTokenList, info, url,
             * PushController.URL);
             *
             * } catch (Exception e) { PushLogHelper.iosError(e); } } });
             */
        } else {
            if (!validateNotDisturbSingle(uid)) {
                return; // 通知免打扰(20:00-24:00 / 00:00 -08:00)
            }
            List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
            List<String> deviceTokenList = new ArrayList<>();
            if (deviceTokenIosList != null)
                for (DeviceTokenIOS ios : deviceTokenIosList) {
                    deviceTokenList.add(ios.getDeviceToken());
                }
            try {
                IOSPushUtil.allPushIOS(deviceTokenList, info, url, PushTypeEnum.url.getCode(),systemConfigService.getValueCache(SystemConfigKeyEnum.iosPushCertPwd,system));
            } catch (Exception e) {
                PushLogHelper.iosError(e);
            }
        }
    }
    @Async("pushExecutor")
    @Override
    public void pushZNX(Long uId, AccountMessage msg, SystemZnx systemZNX, String versionCodes, SystemEnum system) throws PushException {
        MessageInfo info = new MessageInfo();
        info.setPackageName(systemConfigService.getValueCache(SystemConfigKeyEnum.androidPackageNames,system));
        JSONObject contentJson = new JSONObject();
        contentJson.put("isOpen", 0);
        contentJson.put("createTime", java.lang.System.currentTimeMillis());
        /* 无uid , 广播 数据插入系统表 */
        if (systemZNX != null) {
            info.setTitle(systemZNX.getTitle());
            info.setContent(systemZNX.getContent());
            contentJson.put("title", systemZNX.getTitle());
            contentJson.put("content", systemZNX.getContent());
            info.setDescription(systemZNX.getContent());
            // 小米开始全推
            long id = systemZNX.getId();
            contentJson.put("id", id);
            JSONObject json = new JSONObject();
            json.put("type", "ZNX");
            json.put("content", contentJson);
            json.put("miPushUrl", String.format("%s.ui.mine.AppMailDetailActivity",
                    systemConfigService.getValueCache(SystemConfigKeyEnum.androidBaseActivityName,system)));
            PushRecord pushRecord = new PushRecord();
            // TODO 需要全推
            addPushIOSQueue(info, id + "", PushTypeEnum.ZNX.getCode(), versionCodes,system);
            /*
             * List<String> deviceTokenList = getDeviceTokenList(1, 1000);
             *
             * ThreadUtil.run(new Runnable() {
             *
             * @Override public void run() { try {
             * IOSPushUtil.allPushIOS(deviceTokenList, info, id + "",
             * PushController.ZNX); } catch (Exception e) {
             * PushLogHelper.iosError(e); }
             *
             * } });
             */
        } else if (msg != null) {
            if (uId != null) {
                if (!validateNotDisturbSingle(uId)) {
                    return; // 通知免打扰(20:00-24:00 / 00:00 -08:00)
                }
            }
            // 插入推送记录
            PushRecord pushRecord = new PushRecord();
            info.setTitle(msg.getTitle());
            info.setContent(msg.getContent());
            contentJson.put("title", msg.getTitle());
            contentJson.put("content", msg.getContent());
            info.setDescription(msg.getContent());
            info.setAlias(uId + "");
            info.setPackageName(systemConfigService.getValueCache(SystemConfigKeyEnum.androidPackageNames,system));
            info.setActivty(
                    String.format("%s.ui.BrowserActivity",systemConfigService.getValueCache(SystemConfigKeyEnum.androidBaseActivityName,system)));
            contentJson.put("id", msg.getId() + "");
            JSONObject json = new JSONObject();
            json.put("type", "ZNX");
            json.put("content", contentJson);
            json.put("miPushUrl", String.format("%s.ui.mine.AppMailDetailActivity",
                    systemConfigService.getValueCache(SystemConfigKeyEnum.androidBaseActivityName,system)));
            List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(msg.getUserInfo().getId(), versionCodes);
            List<String> deviceTokenList = new ArrayList<>();
            if (deviceTokenIosList != null)
                for (DeviceTokenIOS ios : deviceTokenIosList) {
                    deviceTokenList.add(ios.getDeviceToken());
                }
            // IOS 单推
            try {
                IOSPushUtil.allPushIOS(deviceTokenList, info, "0", PushTypeEnum.ZNX.getCode(),systemConfigService.getValueCache(SystemConfigKeyEnum.iosPushCertPwd,system));
            } catch (Exception e) {
                PushLogHelper.iosError(e);
            }
        }
    }
    @Transactional
    @Override
    public void addDeviceToken(Long uid, int version, String deviceToken, String device) {
        // 如果device为空就返回
        if (StringUtil.isNullOrEmpty(device) || StringUtil.isNullOrEmpty(deviceToken))
            return;
        // 判断device是否存在
        DeviceTokenIOS deviceTokenIos = deviceTokenIOSMapper.selectByDeviceForUpdate(device);
        if (deviceTokenIos == null) {
            deviceTokenIos = new DeviceTokenIOS();
            deviceTokenIos.setCreateTime(new Date());
            deviceTokenIos.setUpdateTime(new Date());
            deviceTokenIos.setDevice(device);
            deviceTokenIos.setDeviceToken(deviceToken);
            deviceTokenIos.setDeviceTokenMd5(StringUtil.Md5(deviceToken));
            deviceTokenIos.setUid(uid);
            deviceTokenIos.setVersion(version);
            deviceTokenIOSMapper.insertSelective(deviceTokenIos);
        } else {// 更新devicetoken
            DeviceTokenIOS updateDeviceTokenIOS = new DeviceTokenIOS();
            updateDeviceTokenIOS.setId(deviceTokenIos.getId());
            updateDeviceTokenIOS.setDeviceToken(deviceToken);
            updateDeviceTokenIOS.setDeviceTokenMd5(StringUtil.Md5(deviceToken));
            updateDeviceTokenIOS.setUid(uid);
            updateDeviceTokenIOS.setUpdateTime(new Date());
            deviceTokenIOSMapper.updateByPrimaryKeySelective(updateDeviceTokenIOS);
        }
    }
    @Override
    public List<DeviceTokenIOS> getDeviceTokenListByUid(Long uid, String versionCodes) throws PushException {
        return deviceTokenIOSMapper.selectByUid(uid, convertVersionType(versionCodes));
    }
    @Override
    public List<String> getDeviceTokenList(int page, int size) {
        List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList((long) ((page - 1) * size), size, null);
        List<String> tokenList = new ArrayList<>();
        for (DeviceTokenIOS ios : list)
            if (!StringUtil.isNullOrEmpty(ios.getDeviceToken()))
                tokenList.add(ios.getDeviceToken());
        return tokenList;
    }
    @Override
    public long getDeviceTokenCount() {
        return deviceTokenIOSMapper.selectCount();
    }
    @Override
    public void updateDeviceToken(DeviceTokenIOS deviceTokenIos) {
        if (deviceTokenIos != null) {
            deviceTokenIos.setUpdateTime(new Date());
            deviceTokenIOSMapper.updateByPrimaryKey(deviceTokenIos);
        }
    }
    @Override
    public DeviceTokenIOS getDeviceTokenByDeviceToken(String deviceToken) {
        return deviceTokenIOSMapper.selectByDeviceToken(deviceToken);
    }
    /**
     * 保存推送内容只队列中
     */
    @Transactional(rollbackFor = Exception.class)
    public void addPushIOSQueue(MessageInfo info, String url, int type, String versionCodes,SystemEnum system) throws PushException {
        if (Constant.IS_TEST)
            return;
        try {
            JSONObject json = IOSPushUtil.getJSONObject(info, url, type);
            // 总条目
            long tokenCount = getDeviceTokenCount();
            // 一个队列 1000 条
            long totalCount = 1000;
            // 每次执行条目
            int pushNum = 50;
            for (long i = 0; i < tokenCount + totalCount; ) {
                PushQueueRecord pushQueueRecord = new PushQueueRecord();
                pushQueueRecord.setSystem(system);
                // 初始状态
                pushQueueRecord.setState(0);
                // 发送内容
                pushQueueRecord.setJsonContent(json.toString());
                // 创建时间
                pushQueueRecord.setCreatetime(new Date());
                // 每次推送数量
                pushQueueRecord.setPushNum(pushNum);
                // 推送端 IOS
                pushQueueRecord.setType(1);
                // 版本号
                pushQueueRecord.setVersions(versionCodes);
                if (tokenCount - i < totalCount) {
                    // 起始游标
                    pushQueueRecord.setStartCursor(i);
                    // 结束游标
                    pushQueueRecord.setEndCursor(tokenCount);
                    // 存入数据库
                    pushQueueRecordMapper.insert(pushQueueRecord);
                    // 加入队列
                    rabbitmqManager.addIOSPushMsg(pushQueueRecord);
                    break;
                } else {
                    // 起始游标
                    pushQueueRecord.setStartCursor(i);
                    long endCursor = (i + totalCount) - 1;
                    // 结束游标
                    pushQueueRecord.setEndCursor(endCursor);
                    // 存入数据库
                    pushQueueRecordMapper.insert(pushQueueRecord);
                    // 加入队列
                    rabbitmqManager.addIOSPushMsg(pushQueueRecord);
                }
                i += totalCount;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 队列执行推送操作
     */
    @Override
    public void readyPushIOS(PushQueueRecord pushQueueRecord) throws Exception {
        // 起始位置
        Long startCursor = pushQueueRecord.getStartCursor();
        // 结束位置
        Long endCursor = pushQueueRecord.getEndCursor();
        if (startCursor == null && endCursor == null) {
            return;
        }
        // 推送的版本号
        String versions = pushQueueRecord.getVersions();
        List<Integer> listCode = convertVersionType(versions);
        int total = (int) (endCursor - startCursor);
        // 每次推送总条数
        int moveNum = pushQueueRecord.getPushNum();
        int count = total / moveNum;
        if (total % moveNum > 0) {
            count += 1;
        }
        long recordCursor = startCursor;
        for (int i = 0; i < count; i++) {
            // 不足50个数据
            if (moveNum > total) {
                moveNum = (int) (endCursor - startCursor);
                List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(startCursor, moveNum, listCode);
                recordCursor = endCursor;
                if (list != null) {
                    executePushIOS(list, pushQueueRecord, recordCursor,pushQueueRecord.getSystem());
                    PushLogHelper.iosInfo("推送游标:" + startCursor + "," + moveNum);
                }
            } else {
                if (recordCursor + moveNum > endCursor) {
                    // System.out.println("recordCursorend:" +recordCursor);
                    moveNum = (int) (endCursor - recordCursor);
                    // System.out.println(moveNum);
                    List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum, listCode);
                    if (list != null) {
                        executePushIOS(list, pushQueueRecord, endCursor,pushQueueRecord.getSystem());
                        PushLogHelper.iosInfo("推送游标:" + recordCursor + "," + moveNum);
                    }
                    recordCursor = endCursor;
                } else {
                    List<DeviceTokenIOS> list = deviceTokenIOSMapper.selectList(recordCursor, moveNum, listCode);
                    recordCursor = recordCursor + 50;
                    if (list != null) {
                        executePushIOS(list, pushQueueRecord, recordCursor - 1,pushQueueRecord.getSystem());
                        PushLogHelper.iosInfo("推送游标:" + recordCursor + "," + moveNum);
                    }
                }
            }
        }
    }
    public void executePushIOS(List<DeviceTokenIOS> list, PushQueueRecord pushQueueRecord, long recordCursor,SystemEnum system) {
        String jsonContent = pushQueueRecord.getJsonContent();
        JSONObject json = JSONObject.fromObject(jsonContent);
        List<String> tokenList = new ArrayList<>();
        boolean ispush = false;
        List<Long> listNotPushId = null;
        Calendar now = Calendar.getInstance();
        int hour = now.get(Calendar.HOUR_OF_DAY);
//      if (hour >= 8 && hour < 20) {
//         ispush = true; // 可推送
//      } else {
//         listNotPushId = validateNotDisturb();
//      }
        ispush = true;//TODO 处理消息免打扰
        for (DeviceTokenIOS ios : list) {
            if (!StringUtil.isNullOrEmpty(ios.getDeviceToken())) {
                if (!ispush && listNotPushId != null && listNotPushId.size() > 0) {
                    Long uid = ios.getUid();
                    if (uid != null && listNotPushId.contains(uid)) {
                        continue; // 通知免打扰(20:00-24:00 / 00:00 -08:00)
                    }
                }
                tokenList.add(ios.getDeviceToken());
            }
        }
        if (tokenList.size() > 0) {
            // 执行推送
            try {
                IOSPushUtil.executePushIOS(tokenList, json,systemConfigService.getValueCache(SystemConfigKeyEnum.iosPushCertPwd,system));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        pushQueueRecord.setState(1);
        pushQueueRecord.setEndtime(new Date());
        pushQueueRecord.setRecordCursor(recordCursor);
        // 更新数据库
        pushQueueRecordMapper.updateByPrimaryKeySelective(pushQueueRecord);
    }
    @Override
    public void unBindUidAndDevice(String device) {
        if (StringUtil.isNullOrEmpty(device))
            return;
        DeviceTokenIOS deviceTokenIOS = deviceTokenIOSMapper.selectByDevice(device);
        if (device != null) {
            deviceTokenIOS.setUpdateTime(new Date());
            deviceTokenIOS.setUid(null);
            deviceTokenIOSMapper.updateByPrimaryKey(deviceTokenIOS);
        }
    }
    @Async("pushExecutor")
    @Override
    public void pushWEEX(Long uid, String title, String content, String weexUrl, String versionCodes, SystemEnum system)
            throws PushException {
        MessageInfo info = new MessageInfo();
        info.setTitle(title);
        info.setContent(content);
        info.setDescription(content);
        // IOS 全推
        if (uid == null || uid == 0) {
            addPushIOSQueue(info, weexUrl, PushTypeEnum.weex.getCode(), versionCodes,system);
        } else {
            List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
            List<String> deviceTokenList = new ArrayList<>();
            if (deviceTokenIosList != null)
                for (DeviceTokenIOS ios : deviceTokenIosList) {
                    deviceTokenList.add(ios.getDeviceToken());
                }
            try {
                IOSPushUtil.allPushIOS(deviceTokenList, info, weexUrl, PushTypeEnum.weex.getCode(),systemConfigService.getValueCache(SystemConfigKeyEnum.iosPushCertPwd,system));
            } catch (Exception e) {
                PushLogHelper.iosError(e);
            }
        }
    }
    @Async("pushExecutor")
    @Override
    public void pushBaiChuanUrl(Long uid, String title, String content, String url, String versionCodes, SystemEnum system)
            throws PushException {
        MessageInfo info = new MessageInfo();
        info.setTitle(title);
        info.setContent(content);
        info.setDescription(content);
        // IOS 全推
        if (uid == null || uid == 0) {
            addPushIOSQueue(info, url, PushTypeEnum.baichuan.getCode(), versionCodes,system);
        } else {
            List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
            List<String> deviceTokenList = new ArrayList<>();
            if (deviceTokenIosList != null)
                for (DeviceTokenIOS ios : deviceTokenIosList) {
                    deviceTokenList.add(ios.getDeviceToken());
                }
            try {
                IOSPushUtil.allPushIOS(deviceTokenList, info, url, PushTypeEnum.baichuan.getCode(),systemConfigService.getValueCache(SystemConfigKeyEnum.iosPushCertPwd,system));
            } catch (Exception e) {
                PushLogHelper.iosError(e);
            }
        }
    }
    /**
     * 通知免打扰(20:00-8:00)
     */
    public List<Long> validateNotDisturb() {
        return userCustomSettingsService.getCancelNoticeUsers();
    }
    /**
     * 通知免打扰(20:00-8:00)
     */
    public boolean validateNotDisturbSingle(Long uid) {
        Calendar now = Calendar.getInstance();
        int hour = now.get(Calendar.HOUR_OF_DAY);
        boolean ispush;
        if (hour >= 8 && hour < 20) {
            ispush = true; // 可推送
        } else {
            // 自定义设置 通知免打扰(20:00-24:00 / 00:00 -08:00)
            ispush = userCustomSettingsService.validateCancelNoticeByUid(uid);
        }
        return ispush;
    }
    @Async("pushExecutor")
    @Override
    public void pushWelfareCenter(Long uid, String title, String content, String versionCodes, SystemEnum system) throws PushException {
        MessageInfo info = new MessageInfo();
        info.setTitle(title);
        info.setContent(content);
        info.setDescription(content);
        // IOS 全推
        if (uid == null || uid == 0) {
            addPushIOSQueue(info, "", PushTypeEnum.welfare.getCode(), versionCodes,system);
        } else {
            if (!validateNotDisturbSingle(uid)) {
                return;
            }
            List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versionCodes);
            List<String> deviceTokenList = new ArrayList<>();
            if (deviceTokenIosList != null)
                for (DeviceTokenIOS ios : deviceTokenIosList) {
                    deviceTokenList.add(ios.getDeviceToken());
                }
            try {
                IOSPushUtil.allPushIOS(deviceTokenList, info, "", PushTypeEnum.welfare.getCode(),systemConfigService.getValueCache(SystemConfigKeyEnum.iosPushCertPwd,system));
            } catch (Exception e) {
                PushLogHelper.iosError(e);
            }
        }
    }
    private List<Integer> convertVersionType(String versionCodes) {
        List<Integer> listVersionCode = null;
        if (versionCodes != null && versionCodes.trim().length() > 0) {
            List<String> listVersion = Arrays.asList(versionCodes.split(","));
            if (listVersion != null && listVersion.size() > 0) {
                listVersionCode = new ArrayList<Integer>();
                // 转换成功整型
                for (String version : listVersion) {
                    if (version != null && version.trim().length() > 0) {
                        listVersionCode.add(Integer.parseInt(version));
                    }
                }
            }
        }
        return listVersionCode;
    }
    @Override
    public void pushUserSignInNotification(Long uid, String title, String content, String versions, SystemEnum system)
            throws PushException {
        MessageInfo info = new MessageInfo();
        info.setTitle(title);
        info.setContent(content);
        info.setDescription(content);
        // IOS 全推
        if (uid == null || uid == 0) {
            addPushIOSQueue(info, "", PushTypeEnum.signin.getCode(), versions,system);
        } else {
            List<DeviceTokenIOS> deviceTokenIosList = getDeviceTokenListByUid(uid, versions);
            List<String> deviceTokenList = new ArrayList<>();
            if (deviceTokenIosList != null)
                for (DeviceTokenIOS ios : deviceTokenIosList) {
                    deviceTokenList.add(ios.getDeviceToken());
                }
            try {
                IOSPushUtil.allPushIOS(deviceTokenList, info, "", PushTypeEnum.signin.getCode(),systemConfigService.getValueCache(SystemConfigKeyEnum.iosPushCertPwd,system));
            } catch (Exception e) {
                PushLogHelper.iosError(e);
            }
        }
    }
}