钉钉机器人推送数据

匿名 (未验证) 提交于 2019-12-02 23:03:14

钉钉开放平台地址:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.karFPe&treeId=257&articleId=105735&docType=1

需求:统计14个抽奖指标的时-日-周-月以及环比的抽奖数据,格式如下

****************************

****************************
2018-12-12 14:00 - 15:00
-----------概况-----------
抽奖次数 500
(日 n% 周 m%)
抽奖人数 480
(日 n% 周 m%)
--------奖励发放数据--------
抽得邀约资格次数 1000
(日 n% 周 m%)
抽得邀约资格人数 1000
(日 n% 周 m%)
抽得商城券次数 800
(日 n% 周 m%)
抽的商城券人数 800
(日 n% 周 m%)
抽得1元红包次数 600
(日 n% 周 m%)
抽的1元红包人数 600
(日 n% 周 m%)
--------奖励使用数据--------
邀约资格使用数 200
(日 n% 周 m%)
邀约资格使用人数 200
(日 n% 周 m%)
商城券使用数 200元
(日 n% 周 m%)
商城券使用人数 200元
(日 n% 周 m%)
1元红包提现数 1元
(日 n% 周 m%)
1元红包提现人数 1元
(日 n% 周 m%)

****************************
当天截止到2018-12-12 15:00
-----------概况-----------
抽奖次数 500
(日 n% 周 m%)
抽奖人数 480
(日 n% 周 m%)
--------奖励发放数据--------
抽得邀约资格次数 1000
(日 n% 周 m%)
抽得邀约资格人数 1000
(日 n% 周 m%)
抽得商城券次数 800
(日 n% 周 m%)
抽的商城券人数 800
(日 n% 周 m%)
抽得1元红包次数 600
(日 n% 周 m%)
抽的1元红包人数 600
(日 n% 周 m%)
--------奖励使用数据--------
邀约资格使用数 200
(日 n% 周 m%)
邀约资格使用人数 200
(日 n% 周 m%)
商城券使用数 200元
(日 n% 周 m%)
商城券使用人数 200元
(日 n% 周 m%)
1元红包提现数 1元
(日 n% 周 m%)
1元红包提现人数 1元
(日 n% 周 m%)

****************************
本月截止到2018-12-12 15:00
-----------概况-----------
抽奖次数 500
(月 m%)
抽奖人数 480
(月 m%)
--------奖励发放数据--------
抽得邀约资格次数 1000
(月 m%)
抽得邀约资格人数 1000
(月 m%)
抽得商城券次数 800
(月 m%)
抽的商城券人数 800
(月 m%)
抽得1元红包次数 600
(月 m%)
抽的1元红包人数 600
(月 m%)
--------奖励使用数据--------
邀约资格使用数 200
(月 m%)
邀约资格使用人数 200
(月 m%)
商城券使用数 200元
(月 m%)
商城券使用人数 200元
(月 m%)
1元红包提现数 1元
(月 m%)
1元红包提现人数 1元
(月 m%)

抽象出一个公用的统计函数,14个指标公用即可

 /**  * 获得统计指标的各项数据  * @param className  * @param methodName  * @return  */ public Map<String,String> getStatisticsInfo(String className, String methodName){     try {          Map<String, String> result = new HashMap<>();          //通过Spring容器获得Dao对象,不能直接获取         WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();         Class<?>  cls = wac.getBean(className).getClass();         Method method = cls.getMethod(methodName, Map.class);           //分时-今日数量         Date now = new Date();         String nowDate = DateTimeUtils.formatDateHH(now);         String beginDate = DateTimeUtils.formatDateHH(DateTimeUtils.addHours(now, -1));         Map<String, Object> drawPrizeHourParams = new HashMap<>();         drawPrizeHourParams.put("beginDate", beginDate);         drawPrizeHourParams.put("endDate", nowDate);         Integer drawPrizeHour = (Integer) method.invoke(wac.getBean(className), drawPrizeHourParams);         if(drawPrizeHour == null) {             drawPrizeHour = 0;         }         result.put("drawPrizeHour", drawPrizeHour.toString());          //分时-日环比         String dayBeforeEndDate = DateTimeUtils.formatDateHH(DateTimeUtils.addDays(now, -1));         String dayBeforeBeginDate = DateTimeUtils.formatDateHH(DateTimeUtils.addHours(DateTimeUtils.addDays(now, -1), -1));         Map<String, Object> drawPrizeHourBeforeParams = new HashMap<>();         drawPrizeHourBeforeParams.put("beginDate", dayBeforeBeginDate);         drawPrizeHourBeforeParams.put("endDate", dayBeforeEndDate);         Integer drawPrizeHourBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeHourBeforeParams);         if(drawPrizeHourBefore == null || drawPrizeHourBefore.intValue() == 0) {             drawPrizeHourBefore = 1;         }         String hourDayBeforePercent = getPercent(drawPrizeHour.intValue(), drawPrizeHourBefore.intValue());         result.put("hourDayCmpPercent", hourDayBeforePercent);          //分时-周环比         String weekBeforeEndDate = DateTimeUtils.formatDateHH(DateTimeUtils.addDays(now, -7));         String weekBeforeBeginDate = DateTimeUtils.formatDateHH(DateTimeUtils.addHours(DateTimeUtils.addDays(now, -7), -1));         Map<String, Object> drawPrizeHourWeekBeforeParams = new HashMap<>();         drawPrizeHourWeekBeforeParams.put("beginDate", weekBeforeBeginDate);         drawPrizeHourWeekBeforeParams.put("endDate", weekBeforeEndDate);         Integer drawPrizeWeekBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeHourWeekBeforeParams);         if(drawPrizeWeekBefore == null || drawPrizeWeekBefore.intValue() == 0) {             drawPrizeWeekBefore = 1;         }         String hourWeekBeforePercent = getPercent(drawPrizeHour.intValue(), drawPrizeWeekBefore.intValue());         result.put("hourWeekCmpPercent", hourWeekBeforePercent);          //当日截止统计时间-今日数量         String dayDeadlineDate = DateTimeUtils.formatDateHH(now);         String dayDeadlineBeginDate = DateTimeUtils.formatDate(now) + " 00:00:00";         Map<String, Object> drawPrizeTodayParams = new HashMap<>();         drawPrizeTodayParams.put("beginDate", dayDeadlineBeginDate);         drawPrizeTodayParams.put("endDate", dayDeadlineDate);         Integer drawPrizeToday = (Integer) method.invoke(wac.getBean(className), drawPrizeTodayParams);         if(drawPrizeToday == null) {             drawPrizeToday = 0;         }         result.put("drawPrizeToday", drawPrizeToday.toString());           //当日截止统计时间-日环比         String dayDeadlineBeforeEndDate = DateTimeUtils.formatDateHH(DateTimeUtils.addDays(now, -1));         String dayDeadlineBeforeBeginDate = DateTimeUtils.formatDate(DateTimeUtils.addDays(now, -1)) + " 00:00:00";         Map<String, Object> drawPrizeDayDeadlineBeforeParams = new HashMap<>();         drawPrizeDayDeadlineBeforeParams.put("beginDate", dayDeadlineBeforeBeginDate);         drawPrizeDayDeadlineBeforeParams.put("endDate", dayDeadlineBeforeEndDate);         Integer drawPrizeDayDeadlineBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeDayDeadlineBeforeParams);         if(drawPrizeDayDeadlineBefore == null || drawPrizeDayDeadlineBefore.intValue() == 0) {             drawPrizeDayDeadlineBefore = 1;         }         String dayDeadlineBeforePercent = getPercent(drawPrizeToday.intValue(), drawPrizeDayDeadlineBefore.intValue());         result.put("dayDeadlineCmpPercent", dayDeadlineBeforePercent);          //当日截止统计时间-周环比         String weekDeadlineBeforeEndDate = DateTimeUtils.formatDateHH(DateTimeUtils.addDays(now, -7));         String weekDeadlineBeforeBeginDate = DateTimeUtils.formatDate(DateTimeUtils.addDays(now, -7)) + " 00:00:00";         Map<String, Object> drawPrizeWeekDeadlineBeforeParams = new HashMap<>();         drawPrizeWeekDeadlineBeforeParams.put("beginDate", weekDeadlineBeforeBeginDate);         drawPrizeWeekDeadlineBeforeParams.put("endDate", weekDeadlineBeforeEndDate);         Integer drawPrizeWeekDeadlineBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeWeekDeadlineBeforeParams);         if(drawPrizeWeekDeadlineBefore == null || drawPrizeWeekDeadlineBefore.intValue() == 0) {             drawPrizeWeekDeadlineBefore = 1;         }         String weekDeadlineBeforePercent = getPercent(drawPrizeToday.intValue(), drawPrizeWeekDeadlineBefore.intValue());         result.put("weekDeadlineCmpPercent", weekDeadlineBeforePercent);          //当日截止统计时间-本月数量         String monthDeadlineDate = DateTimeUtils.formatDateHH(now);         String monthDeadlineBeginDate = DateTimeUtils.formatDate(DateTimeUtils.beginDateOfMonth(now,0,1)) + " 00:00:00";         Map<String, Object> drawPrizeMonthParams = new HashMap<>();         drawPrizeMonthParams.put("beginDate", monthDeadlineBeginDate);         drawPrizeMonthParams.put("endDate", monthDeadlineDate);         Integer drawPrizeMonth = (Integer) method.invoke(wac.getBean(className), drawPrizeMonthParams);         if(drawPrizeMonth == null) {             drawPrizeMonth = 0;         }         result.put("drawPrizeMonth", drawPrizeMonth.toString());          //当日截止统计时间-月环比         String monthBeforeDeadlineDate = DateTimeUtils.formatDateHH(DateTimeUtils.addMonths(now,-1));         String monthBeforeDeadlineBeginDate = DateTimeUtils.formatDate(DateTimeUtils.beginDateOfMonth(now,-1,1)) + " 00:00:00";         Map<String, Object> drawPrizeMonthBeforeParams = new HashMap<>();         drawPrizeMonthBeforeParams.put("beginDate", monthBeforeDeadlineBeginDate);         drawPrizeMonthBeforeParams.put("endDate", monthBeforeDeadlineDate);         Integer drawPrizeMonthBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeMonthBeforeParams);         if(drawPrizeMonthBefore == null || drawPrizeMonthBefore.intValue() == 0) {             drawPrizeMonthBefore = 1;         }         String monthBeforePercent = getPercent(drawPrizeMonth.intValue(), drawPrizeMonthBefore.intValue());         result.put("monthCmpPercent", monthBeforePercent);          return result;     } catch (NoSuchMethodException e) {         LOG.error("DrawPrizeDingTalkSchedule.getStatisticsInfo 获取统计指标NoSuchMethodException异常, className:{}, methodName:{},exp:{}",className,methodName,e);         return null;     } catch (IllegalAccessException e) {         LOG.error("DrawPrizeDingTalkSchedule.getStatisticsInfo 获取统计指标IllegalAccessException异常, className:{}, methodName:{},exp:{}",className,methodName,e);         return null;     } catch (InvocationTargetException e) {         LOG.error("DrawPrizeDingTalkSchedule.getStatisticsInfo 获取统计指标InvocationTargetException异常, className:{}, methodName:{},exp:{}",className,methodName,e);         return null;     } catch (Exception e){         LOG.error("DrawPrizeDingTalkSchedule.getStatisticsInfo 获取统计指标Exception异常, className:{}, methodName:{},exp:{}",className,methodName,e);         return null;     } }

值得注意的是className不能传Dao接口名,而必须传Dao实现类的名称(如activTaskLogDaoImpl),不然会因为Spring的动态代理,不能注入Dao,而且由于是统计数据,Dao走从库,且SQL需要命中索引,完整代码如下:

 @Service public class DrawPrizeDingTalkSchedule {      @Value(value = "${dingtalk.redpackage.data}")     private String redPackageDingTalkAddress;      private static final Logger LOG = LoggerFactory.getLogger(DrawPrizeDingTalkSchedule.class);      /**      * 定时调度      * 每个整点统计抽奖活动数据      */     public void pushDrawInfo(){          /**抽奖次数*/         Map<String,String> drawPrizeNumberInfo = getStatisticsInfo("activTaskLogDaoImpl", "countDrawNumber");          /**抽奖人数*/         Map<String,String> manTimeInfo = getStatisticsInfo("activTaskLogDaoImpl", "countDrawPeople");          /**抽得邀约资格次数*/         Map<String,String> invitationNumberInfo = getStatisticsInfo("shareInventoryDetailDaoImpl", "countInvitationNumber");          /**抽得邀约资格人数*/         Map<String,String> invitationPeopleInfo = getStatisticsInfo("shareInventoryDetailDaoImpl", "countInvitationPeople");          /**邀约资格使用数*/         Map<String,String> invitationUsedNumberInfo = getStatisticsInfo("shareInventoryDetailDaoImpl", "countInvitationUsedNumber");          /**邀约资格使用人数*/         Map<String,String> invitationUsedPeopleInfo = getStatisticsInfo("shareInventoryDetailDaoImpl", "countInvitationUsedPeople");          /**抽得1元红包次数*/         Map<String,String> oneYuanRpNumberInfo = getStatisticsInfo("activeCouponDetailDaoImpl", "countOneYuanRpNumber");          /**抽得1元红包人数*/         Map<String,String> oneYuanRpPeopleInfo = getStatisticsInfo("activeCouponDetailDaoImpl", "countOneYuanRpPeople");          /**1元红包提现数*/         Map<String,String> oneYuanRpWithdrawNumberInfo = getStatisticsInfo("activeCouponDetailDaoImpl", "countOneYuanRpWithdrawNumber");          /**1元红包提现人数*/         Map<String,String> oneYuanRpWithdrawPeopleInfo = getStatisticsInfo("activeCouponDetailDaoImpl", "countOneYuanRpWithdrawPeople");          /**抽得商城券次数*/         Map<String,String> shopRpNumberInfo = getStatisticsInfo("activeCouponDetailDaoImpl", "countShopRpNumber");          /**抽得商城券人数*/         Map<String,String> shopRpPeopleInfo = getStatisticsInfo("activeCouponDetailDaoImpl", "countShopRpPeople");          /**商城券使用数*/         Map<String,String> shopRpWithdrawNumberInfo = getStatisticsInfo("activeCouponDetailDaoImpl", "countShopRpWithdrawNumber");          /**商城券使用人数*/         Map<String,String> shopRpWithdrawPeopleInfo = getStatisticsInfo("activeCouponDetailDaoImpl", "countShopRpWithdrawPeople");          /**拼接钉钉消息*/         try {             String content = "****************************\n"                     +"          抽奖活动          "+"\n"                     +"****************************\n"                     + getHourZone() + "\n"                     + "-----------概况-----------\n"                     +"抽奖次数 " + drawPrizeNumberInfo.get("drawPrizeHour") + "\n"                     +"(日 " + drawPrizeNumberInfo.get("hourDayCmpPercent") + " 周 " + drawPrizeNumberInfo.get("hourWeekCmpPercent") + ")\n"                     +"抽奖人数 " + manTimeInfo.get("drawPrizeHour") + "\n"                     +"(日 " + manTimeInfo.get("hourDayCmpPercent") + " 周 " + manTimeInfo.get("hourWeekCmpPercent") + ")\n"                      +"--------奖励发放数据--------\n"                     +"抽得邀约资格次数 " + invitationNumberInfo.get("drawPrizeHour") + "\n"                     +"(日 " + invitationNumberInfo.get("hourDayCmpPercent") + " 周 " + invitationNumberInfo.get("hourWeekCmpPercent") + ")\n"                     +"抽得邀约资格次人数 " + invitationPeopleInfo.get("drawPrizeHour") + "\n"                     +"(日 " + invitationPeopleInfo.get("hourDayCmpPercent") + " 周 " + invitationPeopleInfo.get("hourWeekCmpPercent") + ")\n"                     +"抽得商城券次数 " + shopRpNumberInfo.get("drawPrizeHour") + "\n"                     +"(日 " + shopRpNumberInfo.get("hourDayCmpPercent") + " 周 " + shopRpNumberInfo.get("hourWeekCmpPercent") + ")\n"                     +"抽得商城券人数 " + shopRpPeopleInfo.get("drawPrizeHour") + "\n"                     +"(日 " + shopRpPeopleInfo.get("hourDayCmpPercent") + " 周 " + shopRpPeopleInfo.get("hourWeekCmpPercent") + ")\n"                     +"抽得1元红包次数 " + oneYuanRpNumberInfo.get("drawPrizeHour") + "\n"                     +"(日 " + oneYuanRpNumberInfo.get("hourDayCmpPercent") + " 周 " + oneYuanRpNumberInfo.get("hourWeekCmpPercent") + ")\n"                     +"抽得1元红包人数 " + oneYuanRpPeopleInfo.get("drawPrizeHour") + "\n"                     +"(日 " + oneYuanRpPeopleInfo.get("hourDayCmpPercent") + " 周 " + oneYuanRpPeopleInfo.get("hourWeekCmpPercent") + ")\n"                      +"--------奖励使用数据--------\n"                     +"邀约资格使用数 " + invitationUsedNumberInfo.get("drawPrizeHour") + "\n"                     +"(日 " + invitationUsedNumberInfo.get("hourDayCmpPercent") + " 周 " + invitationUsedNumberInfo.get("hourWeekCmpPercent") + ")\n"                     +"邀约资格使用人数 " + invitationUsedPeopleInfo.get("drawPrizeHour") + "\n"                     +"(日 " + invitationUsedPeopleInfo.get("hourDayCmpPercent") + " 周 " + invitationUsedPeopleInfo.get("hourWeekCmpPercent") + ")\n"                     +"商城券使用数 " + shopRpWithdrawNumberInfo.get("drawPrizeHour") + "\n"                     +"(日 " + shopRpWithdrawNumberInfo.get("hourDayCmpPercent") + " 周 " + shopRpWithdrawNumberInfo.get("hourWeekCmpPercent") + ")\n"                     +"商城券使用人数 " + shopRpWithdrawPeopleInfo.get("drawPrizeHour") + "\n"                     +"(日 " + shopRpWithdrawPeopleInfo.get("hourDayCmpPercent") + " 周 " + shopRpWithdrawPeopleInfo.get("hourWeekCmpPercent") + ")\n"                     +"1元红包提现数 " + oneYuanRpWithdrawNumberInfo.get("drawPrizeHour") + "\n"                     +"(日 " + oneYuanRpWithdrawNumberInfo.get("hourDayCmpPercent") + " 周 " + oneYuanRpWithdrawNumberInfo.get("hourWeekCmpPercent") + ")\n"                     +"1元红包提现人数 " + oneYuanRpWithdrawPeopleInfo.get("drawPrizeHour") + "\n"                     +"(日 " + oneYuanRpWithdrawPeopleInfo.get("hourDayCmpPercent") + " 周 " + oneYuanRpWithdrawPeopleInfo.get("hourWeekCmpPercent") + ")\n"                      +"****************************\n"                     +"当天截止到" + getDeadlineTime() +"\n"                     + "-----------概况-----------\n"                     +"抽奖次数 " + drawPrizeNumberInfo.get("drawPrizeToday") + "\n"                     +"(日 " + drawPrizeNumberInfo.get("dayDeadlineCmpPercent") + " 周 " + drawPrizeNumberInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"抽奖人数 " + manTimeInfo.get("drawPrizeToday") + "\n"                     +"(日 " + manTimeInfo.get("dayDeadlineCmpPercent") + " 周 " + manTimeInfo.get("weekDeadlineCmpPercent") + ")\n"                      +"--------奖励发放数据--------\n"                     +"抽得邀约资格次数 " + invitationNumberInfo.get("drawPrizeToday") + "\n"                     +"(日 " + invitationNumberInfo.get("dayDeadlineCmpPercent") + " 周 " + invitationNumberInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"抽得邀约资格人数 " + invitationPeopleInfo.get("drawPrizeToday") + "\n"                     +"(日 " + invitationPeopleInfo.get("dayDeadlineCmpPercent") + " 周 " + invitationPeopleInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"抽得商城券次数 " + shopRpNumberInfo.get("drawPrizeToday") + "\n"                     +"(日 " + shopRpNumberInfo.get("dayDeadlineCmpPercent") + " 周 " + shopRpNumberInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"抽得商城券人数 " + shopRpPeopleInfo.get("drawPrizeToday") + "\n"                     +"(日 " + shopRpPeopleInfo.get("dayDeadlineCmpPercent") + " 周 " + shopRpPeopleInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"抽得1元红包次数 " + oneYuanRpNumberInfo.get("drawPrizeToday") + "\n"                     +"(日 " + oneYuanRpNumberInfo.get("dayDeadlineCmpPercent") + " 周 " + oneYuanRpNumberInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"抽得1元红包人数 " + oneYuanRpPeopleInfo.get("drawPrizeToday") + "\n"                     +"(日 " + oneYuanRpPeopleInfo.get("dayDeadlineCmpPercent") + " 周 " + oneYuanRpPeopleInfo.get("weekDeadlineCmpPercent") + ")\n"                      +"--------奖励使用数据--------\n"                     +"邀约资格使用数 " + invitationUsedNumberInfo.get("drawPrizeToday") + "\n"                     +"(日 " + invitationUsedNumberInfo.get("dayDeadlineCmpPercent") + " 周 " + invitationUsedNumberInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"邀约资格使用人数 " + invitationUsedPeopleInfo.get("drawPrizeToday") + "\n"                     +"(日 " + invitationUsedPeopleInfo.get("dayDeadlineCmpPercent") + " 周 " + invitationUsedPeopleInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"商城券使用数 " + shopRpWithdrawNumberInfo.get("drawPrizeToday") + "\n"                     +"(日 " + shopRpWithdrawNumberInfo.get("dayDeadlineCmpPercent") + " 周 " + shopRpWithdrawNumberInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"商城券使用人数 " + shopRpWithdrawPeopleInfo.get("drawPrizeToday") + "\n"                     +"(日 " + shopRpWithdrawPeopleInfo.get("dayDeadlineCmpPercent") + " 周 " + shopRpWithdrawPeopleInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"1元红包提现数 " + oneYuanRpWithdrawNumberInfo.get("drawPrizeToday") + "\n"                     +"(日 " + oneYuanRpWithdrawNumberInfo.get("dayDeadlineCmpPercent") + " 周 " + oneYuanRpWithdrawNumberInfo.get("weekDeadlineCmpPercent") + ")\n"                     +"1元红包提现人数 " + oneYuanRpWithdrawPeopleInfo.get("drawPrizeToday") + "\n"                     +"(日 " + oneYuanRpWithdrawPeopleInfo.get("dayDeadlineCmpPercent") + " 周 " + oneYuanRpWithdrawPeopleInfo.get("weekDeadlineCmpPercent") + ")\n"                       +"****************************\n"                     +"本月截止到" + getDeadlineTime() +"\n"                     + "-----------概况-----------\n"                     +"抽奖次数 " + drawPrizeNumberInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + drawPrizeNumberInfo.get("monthCmpPercent") + ")\n"                     +"抽奖人数 " + manTimeInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + manTimeInfo.get("monthCmpPercent") + ")\n"                      +"--------奖励发放数据--------\n"                     +"抽得邀约资格次数 " + invitationNumberInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + invitationNumberInfo.get("monthCmpPercent")  + ")\n"                     +"抽得邀约资格人数 " + invitationPeopleInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + invitationPeopleInfo.get("monthCmpPercent")  + ")\n"                     +"抽得商城券次数 " + shopRpNumberInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + shopRpNumberInfo.get("monthCmpPercent")  + ")\n"                     +"抽得商城券人数 " + shopRpPeopleInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + shopRpPeopleInfo.get("monthCmpPercent")  + ")\n"                     +"抽得1元红包次数 " + oneYuanRpNumberInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + oneYuanRpNumberInfo.get("monthCmpPercent")  + ")\n"                     +"抽得1元红包人数 " + oneYuanRpPeopleInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + oneYuanRpPeopleInfo.get("monthCmpPercent")  + ")\n"                      +"--------奖励使用数据--------\n"                     +"邀约资格使用数 " + invitationUsedNumberInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + invitationUsedNumberInfo.get("monthCmpPercent") + ")\n"                     +"邀约资格使用人数 " + invitationUsedPeopleInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + invitationUsedPeopleInfo.get("monthCmpPercent")  + ")\n"                     +"商城券使用数 " + shopRpWithdrawNumberInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + shopRpWithdrawNumberInfo.get("monthCmpPercent")  + ")\n"                     +"商城券使用人数 " + shopRpWithdrawPeopleInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + shopRpWithdrawPeopleInfo.get("monthCmpPercent")  + ")\n"                     +"1元红包提现数 " + oneYuanRpWithdrawNumberInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + oneYuanRpWithdrawNumberInfo.get("monthCmpPercent")  + ")\n"                     +"1元红包提现人数 " + oneYuanRpWithdrawPeopleInfo.get("drawPrizeMonth") + "\n"                     +"(月 " + oneYuanRpWithdrawPeopleInfo.get("monthCmpPercent") + ")\n";              Map<String, Object> text = new HashMap<>();             text.put("content", content);             Map<String, Object> at = new HashMap<>();             at.put("atMobiles", new String[]{});             at.put("isAtAll", false);              Map<String, Object> param = new HashMap<>();             param.put("text", text);             param.put("msgtype", "text");             param.put("at", at);             HttpUtil.post(redPackageDingTalkAddress, JsonUtil.toString(param));             LOG.info("[DrawPrizeDingTalkSchedule.pushDrawInfo] 发送完成,发送信息:{}",JsonUtil.toString(param));          }catch (Exception e){             LOG.info("[DrawPrizeDingTalkSchedule.pushDrawInfo] 发送信息异常,时间:{}exp:{}",DateTimeUtils.formatDateHH(new Date()),e);         }     }      /**      * 获取抽奖活动的小时区间      * @return      */     private String getHourZone(){         Date now= new Date();         String nowDate = DateTimeUtils.formatDateHH(now);         String beginDate = DateTimeUtils.formatDateHH(DateTimeUtils.addHours(now, -1));         return  nowDate.substring(0,10) + beginDate.substring(10,16) + " - " + nowDate.substring(10,16);     }      private String getDeadlineTime() {         Date now= new Date();         String nowDate = DateTimeUtils.formatDateHH(now);         return  nowDate.substring(0,16);     }      /**      * 获得统计指标的各项数据      * @param className      * @param methodName      * @return      */     public Map<String,String> getStatisticsInfo(String className, String methodName){         try {              Map<String, String> result = new HashMap<>();              //通过Spring容器获得Dao对象,不能直接获取             WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();             Class<?>  cls = wac.getBean(className).getClass();             Method method = cls.getMethod(methodName, Map.class);               //分时-今日数量             Date now = new Date();             String nowDate = DateTimeUtils.formatDateHH(now);             String beginDate = DateTimeUtils.formatDateHH(DateTimeUtils.addHours(now, -1));             Map<String, Object> drawPrizeHourParams = new HashMap<>();             drawPrizeHourParams.put("beginDate", beginDate);             drawPrizeHourParams.put("endDate", nowDate);             Integer drawPrizeHour = (Integer) method.invoke(wac.getBean(className), drawPrizeHourParams);             if(drawPrizeHour == null) {                 drawPrizeHour = 0;             }             result.put("drawPrizeHour", drawPrizeHour.toString());              //分时-日环比             String dayBeforeEndDate = DateTimeUtils.formatDateHH(DateTimeUtils.addDays(now, -1));             String dayBeforeBeginDate = DateTimeUtils.formatDateHH(DateTimeUtils.addHours(DateTimeUtils.addDays(now, -1), -1));             Map<String, Object> drawPrizeHourBeforeParams = new HashMap<>();             drawPrizeHourBeforeParams.put("beginDate", dayBeforeBeginDate);             drawPrizeHourBeforeParams.put("endDate", dayBeforeEndDate);             Integer drawPrizeHourBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeHourBeforeParams);             if(drawPrizeHourBefore == null || drawPrizeHourBefore.intValue() == 0) {                 drawPrizeHourBefore = 1;             }             String hourDayBeforePercent = getPercent(drawPrizeHour.intValue(), drawPrizeHourBefore.intValue());             result.put("hourDayCmpPercent", hourDayBeforePercent);              //分时-周环比             String weekBeforeEndDate = DateTimeUtils.formatDateHH(DateTimeUtils.addDays(now, -7));             String weekBeforeBeginDate = DateTimeUtils.formatDateHH(DateTimeUtils.addHours(DateTimeUtils.addDays(now, -7), -1));             Map<String, Object> drawPrizeHourWeekBeforeParams = new HashMap<>();             drawPrizeHourWeekBeforeParams.put("beginDate", weekBeforeBeginDate);             drawPrizeHourWeekBeforeParams.put("endDate", weekBeforeEndDate);             Integer drawPrizeWeekBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeHourWeekBeforeParams);             if(drawPrizeWeekBefore == null || drawPrizeWeekBefore.intValue() == 0) {                 drawPrizeWeekBefore = 1;             }             String hourWeekBeforePercent = getPercent(drawPrizeHour.intValue(), drawPrizeWeekBefore.intValue());             result.put("hourWeekCmpPercent", hourWeekBeforePercent);              //当日截止统计时间-今日数量             String dayDeadlineDate = DateTimeUtils.formatDateHH(now);             String dayDeadlineBeginDate = DateTimeUtils.formatDate(now) + " 00:00:00";             Map<String, Object> drawPrizeTodayParams = new HashMap<>();             drawPrizeTodayParams.put("beginDate", dayDeadlineBeginDate);             drawPrizeTodayParams.put("endDate", dayDeadlineDate);             Integer drawPrizeToday = (Integer) method.invoke(wac.getBean(className), drawPrizeTodayParams);             if(drawPrizeToday == null) {                 drawPrizeToday = 0;             }             result.put("drawPrizeToday", drawPrizeToday.toString());               //当日截止统计时间-日环比             String dayDeadlineBeforeEndDate = DateTimeUtils.formatDateHH(DateTimeUtils.addDays(now, -1));             String dayDeadlineBeforeBeginDate = DateTimeUtils.formatDate(DateTimeUtils.addDays(now, -1)) + " 00:00:00";             Map<String, Object> drawPrizeDayDeadlineBeforeParams = new HashMap<>();             drawPrizeDayDeadlineBeforeParams.put("beginDate", dayDeadlineBeforeBeginDate);             drawPrizeDayDeadlineBeforeParams.put("endDate", dayDeadlineBeforeEndDate);             Integer drawPrizeDayDeadlineBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeDayDeadlineBeforeParams);             if(drawPrizeDayDeadlineBefore == null || drawPrizeDayDeadlineBefore.intValue() == 0) {                 drawPrizeDayDeadlineBefore = 1;             }             String dayDeadlineBeforePercent = getPercent(drawPrizeToday.intValue(), drawPrizeDayDeadlineBefore.intValue());             result.put("dayDeadlineCmpPercent", dayDeadlineBeforePercent);              //当日截止统计时间-周环比             String weekDeadlineBeforeEndDate = DateTimeUtils.formatDateHH(DateTimeUtils.addDays(now, -7));             String weekDeadlineBeforeBeginDate = DateTimeUtils.formatDate(DateTimeUtils.addDays(now, -7)) + " 00:00:00";             Map<String, Object> drawPrizeWeekDeadlineBeforeParams = new HashMap<>();             drawPrizeWeekDeadlineBeforeParams.put("beginDate", weekDeadlineBeforeBeginDate);             drawPrizeWeekDeadlineBeforeParams.put("endDate", weekDeadlineBeforeEndDate);             Integer drawPrizeWeekDeadlineBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeWeekDeadlineBeforeParams);             if(drawPrizeWeekDeadlineBefore == null || drawPrizeWeekDeadlineBefore.intValue() == 0) {                 drawPrizeWeekDeadlineBefore = 1;             }             String weekDeadlineBeforePercent = getPercent(drawPrizeToday.intValue(), drawPrizeWeekDeadlineBefore.intValue());             result.put("weekDeadlineCmpPercent", weekDeadlineBeforePercent);              //当日截止统计时间-本月数量             String monthDeadlineDate = DateTimeUtils.formatDateHH(now);             String monthDeadlineBeginDate = DateTimeUtils.formatDate(DateTimeUtils.beginDateOfMonth(now,0,1)) + " 00:00:00";             Map<String, Object> drawPrizeMonthParams = new HashMap<>();             drawPrizeMonthParams.put("beginDate", monthDeadlineBeginDate);             drawPrizeMonthParams.put("endDate", monthDeadlineDate);             Integer drawPrizeMonth = (Integer) method.invoke(wac.getBean(className), drawPrizeMonthParams);             if(drawPrizeMonth == null) {                 drawPrizeMonth = 0;             }             result.put("drawPrizeMonth", drawPrizeMonth.toString());              //当日截止统计时间-月环比             String monthBeforeDeadlineDate = DateTimeUtils.formatDateHH(DateTimeUtils.addMonths(now,-1));             String monthBeforeDeadlineBeginDate = DateTimeUtils.formatDate(DateTimeUtils.beginDateOfMonth(now,-1,1)) + " 00:00:00";             Map<String, Object> drawPrizeMonthBeforeParams = new HashMap<>();             drawPrizeMonthBeforeParams.put("beginDate", monthBeforeDeadlineBeginDate);             drawPrizeMonthBeforeParams.put("endDate", monthBeforeDeadlineDate);             Integer drawPrizeMonthBefore = (Integer) method.invoke(wac.getBean(className), drawPrizeMonthBeforeParams);             if(drawPrizeMonthBefore == null || drawPrizeMonthBefore.intValue() == 0) {                 drawPrizeMonthBefore = 1;             }             String monthBeforePercent = getPercent(drawPrizeMonth.intValue(), drawPrizeMonthBefore.intValue());             result.put("monthCmpPercent", monthBeforePercent);              return result;         } catch (NoSuchMethodException e) {             LOG.error("DrawPrizeDingTalkSchedule.getStatisticsInfo 获取统计指标NoSuchMethodException异常, className:{}, methodName:{},exp:{}",className,methodName,e);             return null;         } catch (IllegalAccessException e) {             LOG.error("DrawPrizeDingTalkSchedule.getStatisticsInfo 获取统计指标IllegalAccessException异常, className:{}, methodName:{},exp:{}",className,methodName,e);             return null;         } catch (InvocationTargetException e) {             LOG.error("DrawPrizeDingTalkSchedule.getStatisticsInfo 获取统计指标InvocationTargetException异常, className:{}, methodName:{},exp:{}",className,methodName,e);             return null;         } catch (Exception e){             LOG.error("DrawPrizeDingTalkSchedule.getStatisticsInfo 获取统计指标Exception异常, className:{}, methodName:{},exp:{}",className,methodName,e);             return null;         }     }      private String getPercent(int x, int y) {         DecimalFormat df = new DecimalFormat("0.00%");         return df.format((x * 1.0) / (y * 1.0));     } } 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!