精华内容
下载资源
问答
  • 使用模板卡将Trello里程碑任务转换为新。 免责声明:此工具不可靠。 如果您不提供Trello API密钥,它将无法握住您的手;如果您不遵循以下指定的格式,它将不会接任务。 该工具肯定是基于YAGNI原理构建的。 电路板...
  • 点击最下方“阅读原文”,直接下载Excel文件,可定制、可打印、可裁剪。说明:1. 卡片分为需求卡片和任务卡片。在开发阶段需求会被拆分成0到多个子任务。2. 建议用不同颜色区分不同类型的...

    点击最下方“阅读原文”,直接下载Excel文件,可定制、可打印、可裁剪。


    说明:

    1. 卡片分为需求卡片和任务卡片。在开发阶段需求会被拆分成0到多个子任务。

    2. 建议用不同颜色区分不同类型的需求(如:内部改进需求和外部业务需求),建议可用彩色打印纸打印后裁剪。

    3. 需求上的时间数据主要用于未来的数据度量,用以生成累积流图、周期时间控制图、周期时间分布图,以反映团队的交付模式并从中发现改进机会。

    4. 任务卡上的方框用以记录任务经历的天数,如图三所示,分成5个大框和5个小框。通过这样的设计引导团队:“任务在各阶段计划完成时间应该不超过五天,之所以还有五个小框是希望在意外情况下超过5天时还能够被正确记录”。团队可以根据期望的任务粒度,决定预留的方框数。

    5. 开发人员可以设定任务预期完成的时间,并用竖线标记。

    6. 团队应根据各自情况定制卡片模板。

    请长按以下二维码,关注我们的微信公众号,未来会有更多精彩内容!

    精益领导力

    展开全文
  • 发送微信模板消息+定时任务

    千次阅读 2018-11-01 16:52:10
    在用户购买会员后的第二天下午四点发送微信模板消息 在pom.xml里面配置 <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator&...

    在用户购买会员卡后的第二天下午四点发送微信模板消息

    在pom.xml里面配置

    <dependency>
      <groupId>net.coobird</groupId>
      <artifactId>thumbnailator</artifactId>
      <version>0.4.8</version>
    </dependency>
    
    <dependency>
      <groupId>com.github.binarywang</groupId>
      <artifactId>weixin-java-miniapp</artifactId>
      <version>${wexin-tools-version}</version>
    </dependency>
    <dependency>
      <groupId>com.github.binarywang</groupId>
      <artifactId>weixin-java-mp</artifactId>
      <version>3.1.0</version>
    </dependency>
    
    <dependency>
      <groupId>com.github.binarywang</groupId>
      <artifactId>weixin-java-common</artifactId>
      <version>${wexin-tools-version}</version>
    </dependency>
    <dependency>
      <groupId>com.github.binarywang</groupId>
      <artifactId>weixin-java-pay</artifactId>
      <version>${wexin-tools-version}</version>
    </dependency>
    

    所以先在数据库里面建了一张表,把发送时间写进去,把微信模板中要用到的信息存入到数据库中,并设置一个标识去标识这个用户有没有被发送过消息。然后写个定时任务,每隔一定时间去把这个时间拿出来跟当前时间作比较,当前时间大于存在数据库里的时间就执行发送模板消息,然后把标识改成1。

    这里面的OPENID都是公众号的openid,不是小程序的openid.可以根据小程序的unionID去找到用户在公众号中的openid

    package com.umshuo.service;
    
    import com.aliyun.openservices.shade.com.alibaba.fastjson.JSON;
    import com.aliyun.openservices.shade.com.alibaba.fastjson.JSONObject;
    import com.qiniu.util.StringUtils;
    import com.umshuo.domain.Business;
    import com.umshuo.domain.Receiver;
    import com.umshuo.domain.User;
    import lombok.extern.slf4j.Slf4j;
    import me.chanjar.weixin.common.error.WxErrorException;
    import me.chanjar.weixin.mp.api.WxMpService;
    import me.chanjar.weixin.mp.bean.result.WxMpUser;
    import me.chanjar.weixin.mp.bean.result.WxMpUserList;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.data.redis.core.RedisTemplate;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    @Slf4j
    @Service
    public class SyncOpenIdService {
        @Autowired
        @Qualifier("wxMpService")
        private WxMpService wxMpService;
        @Autowired
        @Qualifier("wxMpServiceBusiness")
        private WxMpService wxMpServiceBusiness;
        @Autowired
        private UserService userService;
        @Autowired
        private ReceiverService receiverService;
        @Autowired
        private BusinessService businessService;
        @Autowired
        private RedisTemplate<String, String> redisTemplate;
    
        public void syncFromWechat(String lastOpenId){
            try {
    
                log.info("同步关注微信公众号社区买手的用户信息 - lastMpOpenId: [{}]", lastOpenId);
                WxMpUserList list = getWxMpUserList(lastOpenId);
                log.info("获取的用户数量: " + list.getOpenids().size());
                List<Map<String,Object>> userList = userService.selectUnionList();
                int count=0;
                // 判断是否有新关注用户
                if (list != null && list.getOpenids().size() > 0  && userList!=null && userList.size()>0) {
                    for (String openid : list.getOpenids()) {
                        WxMpUser wxUser = wxMpService.getUserService().userInfo(openid);
    //                    log.debug("获取用户信息: openId:[{}], wxUser:[{}]", openid, JSON.toJSONString(wxUser));
                        boolean result = updateUser(userList,wxUser.getUnionId(),wxUser.getOpenId());
                        if(result){
                            count++;
                            log.info("更新的用户信息- openId:{},UnionId:{}", wxUser.getOpenId(),wxUser.getUnionId());
                        }
    //                    if (result != true) {
    //                        // 更新用户公众号openId失败, 将用户信息暂存redis
    //                        //log.info("用户信息不存在,临时存储到redis - openId:[{}]", openid);
    //                        //redisTemplate.opsForValue().set("wx_syncuser_" + wxUser.getUnionId(), JSON.toJSONString(wxUser));
    //                    }
                    }
                    //redisTemplate.opsForValue().set("lastMpOpenId", list.getOpenids().get(list.getOpenids().size() - 1));
                }
                log.info("----更新关注社区买手微信公众号openid的用户数:"+count);
            } catch (Exception ex) {
                log.error(ex.getMessage());
                ex.printStackTrace();
            }
        }
    
        /**
         * 同步旗手和商户的微信openID
         * @param lastOpenId
         */
        public void syncBusinessFromWechat(String lastOpenId){
            try {
    
                log.info("同步关注社区达微信公众号的用户信息 - lastMpOpenId: [{}]", lastOpenId);
                WxMpUserList list = getWxMpBusinessUserList(lastOpenId);
                log.info("获取的用户数量: " + list.getOpenids().size());
                List<Map<String,Object>> busiList = businessService.selectUnionList();
                List<Map<String,Object>> recieveList = receiverService.selectUnionList();
                int count=0;
                // 判断是否有新关注用户
                if (list != null && list.getOpenids().size() > 0  && ((busiList!=null && busiList.size()>0)||(recieveList!=null && recieveList.size()>0))) {
                    boolean result = false;
                    for (String openid : list.getOpenids()) {
                        WxMpUser wxUser = wxMpServiceBusiness.getUserService().userInfo(openid);
                        result = updateBusiUser(busiList,wxUser.getUnionId(),wxUser.getOpenId());
                        if(result){
                            count++;
                            log.info("更新商户openID信息- openId:{},UnionId:{}", wxUser.getOpenId(),wxUser.getUnionId());
                        }
                        result = updateRecieveUser(recieveList,wxUser.getUnionId(),wxUser.getOpenId());
                        if(result){
                            count++;
                            log.info("更新骑手openID信息- openId:{},UnionId:{}", wxUser.getOpenId(),wxUser.getUnionId());
                        }
                    }
                }
                log.info("----更新社区达微信公众号openid的用户数:"+count);
            } catch (Exception ex) {
                log.error(ex.getMessage());
                ex.printStackTrace();
            }
        }
    
        /**
         * 更新用户微信公众号openId
         * @return
         */
        public boolean updateUser(List<Map<String,Object>> userList,String unionId, String  openId) {
            // 查询到用户信息, 更新用户公众号openId
            if (openId!=null && unionId!=null) {
                for (Map<String,Object> map:userList) {
                    if(map.get("unionId").equals(unionId)){
                        if(map.get("wxOpenId")==null || !openId.equals(map.get("wxOpenId"))){
                            User user = new User();
                            user.setId((Long)map.get("id"));
                            user.setWxOpenId(openId);
                            int reu = userService.updateUser(user);
                            if(reu>0) return true;
                        }
                        break;
                    }
                }
            }
            return false;
        }
    
        /**
         * 更新商户微信公众号openId
         * @return
         */
        public boolean updateBusiUser(List<Map<String,Object>> busiList,String unionId, String  openId){
            // 查询到商户信息表, 更新用户公众号openId
            if (openId!=null && unionId!=null) {
                for (Map<String,Object> map:busiList) {
                    if(map.get("unionId").equals(unionId)){
                        if(map.get("wxOpenId")==null || !openId.equals(map.get("wxOpenId"))){
                            Business business = new Business();
                            business.setId((Long)map.get("id"));
                            business.setWxOpenId(openId);
                            int reu = businessService.updateBusiness(business);
                            if(reu>0) return true;
                        }
                        break;
                    }
                }
            }
            return false;
        }
    
        /**
         * 更新商户微信公众号openId
         * @return
         */
        public boolean updateRecieveUser(List<Map<String,Object>> reviList,String unionId, String  openId){
            //更新骑手表公众号openId
            if (openId!=null && unionId!=null) {
                for (Map<String,Object> map:reviList) {
                    if(map.get("unionId").equals(unionId)){
                        if(map.get("wxOpenId")==null || !openId.equals(map.get("wxOpenId"))){
                            Receiver receiver = new Receiver();
                            receiver.setId((Long)map.get("id"));
                            receiver.setWxOpenId(openId);
                            int reu = receiverService.updateReceiver(receiver);
                            if(reu>0) return true;
                        }
                        break;
                    }
                }
            }
            return false;
        }
    
    
        /**
         * 获取微信公众号关注用户列表
         *
         * @param lastOpenId
         * @return
         * @throws WxErrorException
         */
        private WxMpUserList getWxMpUserList(String lastOpenId) throws WxErrorException {
            return wxMpService.getUserService().userList(lastOpenId);
        }
    
        /**
         * 获取微信公众号关注用户列表
         *
         * @param lastOpenId
         * @return
         * @throws WxErrorException
         */
        private WxMpUserList getWxMpBusinessUserList(String lastOpenId) throws WxErrorException {
            return wxMpServiceBusiness.getUserService().userList(lastOpenId);
        }
    }
    

     

    定时任务:

     

     

    第一个:

     

    2.

    WechatMpConfig 

    package com.umshuo.properties;
    
    import me.chanjar.weixin.mp.api.WxMpConfigStorage;
    import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
    import me.chanjar.weixin.mp.api.WxMpService;
    import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    
    @Component
    public class WechatMpConfig {
        @Autowired
        WechatAccountConfig wechatAccountConfig;
    
        /**
         * 微信服务装载
         * @return
         */
        @Bean
        public WxMpService wxMpService() {
            WxMpService wxMpService = new WxMpServiceImpl();
            wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
            return wxMpService;
        }
    
        /**
         * 微信服务装载
         * @return
         */
        @Bean
        public WxMpService wxMpServiceBusiness() {
            WxMpService wxMpService = new WxMpServiceImpl();
            wxMpService.setWxMpConfigStorage(wxMpConfigStorageBusiness());
            return wxMpService;
        }
    
        /**
         * 配置温馨的APPID和密码
         * @return
         */
        @Bean
        public WxMpConfigStorage wxMpConfigStorage() {
            WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();
            wxMpConfigStorage.setAppId(wechatAccountConfig.getAppId());
            wxMpConfigStorage.setSecret(wechatAccountConfig.getSecret());
            return wxMpConfigStorage;
        }
    
        /**
         * 配置温馨的APPID和密码
         * @return
         */
        @Bean
        public WxMpConfigStorage wxMpConfigStorageBusiness() {
            WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();
            wxMpConfigStorage.setAppId(wechatAccountConfig.getAppIdBusiness());
            wxMpConfigStorage.setSecret(wechatAccountConfig.getSecretBusiness());
            return wxMpConfigStorage;
        }
    
    }

    3.

     WxMpProperties

    package com.umshuo.properties;
    
    import org.apache.commons.lang3.builder.ToStringBuilder;
    import org.apache.commons.lang3.builder.ToStringStyle;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    @ConfigurationProperties(prefix = "wechat.mp")
    public class WxMpProperties {
    
       /**
        * 设置微信公众号的appid
        */
       private String appId;
    
       /**
        * 设置微信公众号的app secret
        */
       private String secret;
    
       /**
        * 设置微信公众号的token
        */
       private String token;
    
       /**
        * 设置微信公众号的EncodingAESKey
        */
       private String aesKey;
    
       public String getAppId() {
          return this.appId;
       }
    
       public void setAppId(String appId) {
          this.appId = appId;
       }
    
       public String getSecret() {
          return this.secret;
       }
    
       public void setSecret(String secret) {
          this.secret = secret;
       }
    
       public String getToken() {
          return this.token;
       }
    
       public void setToken(String token) {
          this.token = token;
       }
    
       public String getAesKey() {
          return this.aesKey;
       }
    
       public void setAesKey(String aesKey) {
          this.aesKey = aesKey;
       }
    
       @Override
       public String toString() {
          return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
       }
    }
    

     

     wxservice:

    package com.umshuo.service;
    
    import com.alibaba.fastjson.JSON;
    import com.google.common.cache.Cache;
    import com.google.common.cache.CacheBuilder;
    import com.google.common.collect.Lists;
    import com.umshuo.common.JsonUtil;
    import com.umshuo.common.ServerResponse;
    import com.umshuo.common.StringUtil;
    import com.umshuo.common.WXBizDataCrypt;
    import com.umshuo.properties.WechatAccountConfig;
    import com.umshuo.properties.WechatMpConfig;
    import com.umshuo.vo.SessionKeyVo;
    import lombok.Getter;
    import lombok.extern.slf4j.Slf4j;
    import me.chanjar.weixin.common.error.WxErrorException;
    import me.chanjar.weixin.mp.api.WxMpService;
    import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
    import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
    import org.json.JSONException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    
    import javax.crypto.BadPaddingException;
    import javax.crypto.IllegalBlockSizeException;
    import javax.crypto.NoSuchPaddingException;
    import java.io.IOException;
    import java.security.InvalidAlgorithmParameterException;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    import java.util.List;
    import java.util.Map;
    import java.util.Objects;
    import java.util.concurrent.TimeUnit;
    
    /**
     * @author chezhu.xin
     */
    @Slf4j
    @Service
    public class WxService {
        @Autowired
        @Qualifier("wxMpService")
        private WxMpService mpService;
        @Autowired
        @Qualifier("wxMpServiceBusiness")
        private WxMpService wxMpServiceBusiness;
        @Autowired
        private WechatAccountConfig wechatAccountConfig;
    
        private static final Cache<String, String> CACHE = CacheBuilder.newBuilder()
                .initialCapacity(1000)
                .maximumSize(20000)
                .expireAfterWrite(30, TimeUnit.MINUTES)
                .build();
    
        private static final Cache<String, String> OPENID_CACHE = CacheBuilder.newBuilder()
                .initialCapacity(1000)
                .maximumSize(20000)
                .expireAfterWrite(30, TimeUnit.MINUTES)
                .build();
    
        @Getter
        private enum WxAppIdEnum {
            /**
             * 微信小程序信息
             */
            APP_1("小程序名字", "这里放APPID", "这里放模板id"),
            APP_2("小程序名字", "这里放APPID", "这里放模板id"),
            APP_3("小程序名字", "这里放APPID", "这里放模板id");
    
            private final String desc;
            private final String appId;
            private final String appSecret;
    
    
            WxAppIdEnum(String desc, String appId, String appSecret) {
                this.desc = desc;
                this.appId = appId;
                this.appSecret = appSecret;
            }
    
    
            public static WxAppIdEnum getWxAppIdEnum(String appId) {
                for (WxAppIdEnum wxAppIdEnum : Lists.newArrayList(WxAppIdEnum.values())) {
                    if (Objects.equals(appId, wxAppIdEnum.getAppId())) {
                        return wxAppIdEnum;
                    }
                }
                return null;
            }
        }
    
        public ServerResponse<SessionKeyVo> sessionKey(String code, String appId) throws JSONException {
            WxAppIdEnum wxAppIdEnum = WxAppIdEnum.getWxAppIdEnum(appId);
            if (wxAppIdEnum == null) {
                return ServerResponse.createByErrorMessage(appId);
            }
            String requestAppId = wxAppIdEnum.appId;
            String requestAppSecret = wxAppIdEnum.appSecret;
    
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("https://api.weixin.qq.com/sns/jscode2session");
            stringBuilder.append("?").append("appid").append("=").append(requestAppId);
            stringBuilder.append("&").append("secret").append("=").append(requestAppSecret);
            stringBuilder.append("&").append("js_code").append("=").append(code);
            stringBuilder.append("&").append("grant_type").append("=").append("authorization_code");
            String result = new RestTemplate().getForObject(stringBuilder.toString(), String.class);
            log.debug(stringBuilder.toString());
            log.debug(result);
    
            String sessinKey = JsonUtil.toJsonObject(result).getString("session_key");
            String openid = JsonUtil.toJsonObject(result).getString("openid");
            log.debug("添加缓存=="+openid);
            CACHE.put(code, sessinKey);
            OPENID_CACHE.put(code, openid);
            SessionKeyVo sessionKeyVo = JsonUtil.fromJson(result, SessionKeyVo.class);
            return ServerResponse.createBySuccess(sessionKeyVo);
        }
    
        public ServerResponse<SessionKeyVo> descrypt(String code, String appId, String encryptedData, String iv) throws NoSuchPaddingException, InvalidKeyException, NoSuchAlgorithmException, IOException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, JSONException {
            if (StringUtil.isBlank(code)) {
                return ServerResponse.createByErrorMessage("code 值不允许为空");
            }
            String sessionKey = CACHE.getIfPresent(code);
            if (StringUtil.isBlank(sessionKey)) {
                WxAppIdEnum wxAppIdEnum = WxAppIdEnum.getWxAppIdEnum(appId);
                if (wxAppIdEnum == null) {
                    return ServerResponse.createByErrorMessage(appId);
                }
                String requestAppId = wxAppIdEnum.appId;
                String requestAppSecret = wxAppIdEnum.appSecret;
                String stringBuilder = "https://api.weixin.qq.com/sns/jscode2session" +
                        "?" + "appid" + "=" + requestAppId +
                        "&" + "secret" + "=" + requestAppSecret +
                        "&" + "js_code" + "=" + code +
                        "&" + "grant_type" + "=" + "authorization_code";
                String resultStr = new RestTemplate().getForObject(stringBuilder, String.class);
                String str = JsonUtil.toJsonObject(resultStr).getString("session_key");
                String openid = JsonUtil.toJsonObject(resultStr).getString("openid");
                if (StringUtil.isNotBlank(str)) {
                    sessionKey = str;
                    CACHE.put(appId,sessionKey);
                }
                log.debug("查询的结果:{}",resultStr);
                if(StringUtil.isNotBlank(resultStr)){
                  SessionKeyVo sessionKeyVo = JsonUtil.fromJson(resultStr, SessionKeyVo.class);
                  return ServerResponse.createBySuccess(sessionKeyVo);
                }
            }
            String result = WXBizDataCrypt.getInstance().decrypt(encryptedData, sessionKey, iv, "utf-8");
            log.debug("result:{}", result);
            SessionKeyVo sessionKeyVo = JsonUtil.fromJson(result, SessionKeyVo.class);
            return ServerResponse.createBySuccess(sessionKeyVo);
        }
    
        /**
         * 解密unionID
         */
        public String descrypt(String sessionKey, String encryptedData, String iv) throws NoSuchPaddingException, InvalidKeyException, NoSuchAlgorithmException, IOException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
            String result = WXBizDataCrypt.getInstance().decrypt(encryptedData, sessionKey, iv, "utf-8");
            log.debug("result:{}", result);
            SessionKeyVo sessionKeyVo = JsonUtil.fromJson(result, SessionKeyVo.class);
            return sessionKeyVo.getUnionid();
        }
    
        /**
         * 发送社区买手模板消息
         * @param templateMap
         * @return
         */
        public boolean sendMessage(Map<String,Object> templateMap) {
            try {
                WxMpTemplateMessage template = new WxMpTemplateMessage();
                template.setToUser((String)templateMap.get("openId"));
                template.setTemplateId((String)templateMap.get("templateId"));
                template.setMiniProgram(new WxMpTemplateMessage.MiniProgram(wechatAccountConfig.getMiniAppId(),(String)templateMap.get("url")));
                template.setData((List<WxMpTemplateData>)templateMap.get("data"));
                String response = mpService.getTemplateMsgService().sendTemplateMsg(template);
                log.debug("发送微信模板信息结果 - openId:[{}], response:[{}]", template.getToUser(), JSON.toJSONString(response));
                return true;
    
            } catch (WxErrorException ex) {
                ex.printStackTrace();
                log.error("【微信模版消息】发送失败, {}", ex);
            }
            return false;
        }
        /**
         *
         */
        /**
         * 发送社区达模板消息
         * @param templateMap
         * @return
         */
        public boolean sendMessageBusiness(Map<String,Object> templateMap) {
            try {
                WxMpTemplateMessage template = new WxMpTemplateMessage();
                template.setToUser((String)templateMap.get("openId"));
                template.setTemplateId((String)templateMap.get("templateId"));
                template.setMiniProgram(new WxMpTemplateMessage.MiniProgram(wechatAccountConfig.getMiniAppIdBusiness(),(String)templateMap.get("url")));
                template.setData((List<WxMpTemplateData>)templateMap.get("data"));
                String response = wxMpServiceBusiness.getTemplateMsgService().sendTemplateMsg(template);
                log.debug("发送微信模板信息结果 - openId:[{}], response:[{}]", template.getToUser(), JSON.toJSONString(response));
                return true;
    
            } catch (WxErrorException ex) {
                ex.printStackTrace();
                log.error("【微信模版消息】发送失败, {}", ex);
            }
            return false;
        }
    
    }
    

     

     

    展开全文
  • DHARMA项目B任务组,东部卢卡亚人口统计学语料库。 有关更多信息,请参阅。 储存库静态页面 您可以在上查询此存储库上的工作的当前状态。 帮助和指南 中的提供了Git指南。 DHARMA编码指南可在,但我们建议您使用...
  • O是Objectives,KR是Key Results,OKR...OKR是一种战略目标任务体系,是一套明确目标并跟踪其完成情况的管理工具和方法。OKR目标与关键成果法是以目标为起始点,在管理者制定出全企业层面的总目标后,中层及基层主...

    OKR操作指引.doc

    点击标题查看文档

    OKR——帮你聚焦核心目标,落实推进,减少不理性的分心。O是Objectives,KR是Key Results,OKR就是Objectives and Key Results,即目标与关键结果法。OKR是一种战略目标任务体系,是一套明确目标并跟踪其完成情况的管理工具和方法。

    OKR目标与关键成果法是以目标为起始点,在管理者制定出全企业层面的总目标后,中层及基层主管、员工据以设定各自的部门目标及个别目标,并把最宝贵的最接近一线最有感触的一线员工的见识、建议、积累的经验方法等更多的纳入运营过程中发挥价值。

    一个好的OKR的目标必须是可衡量的,是有挑战性却又不至于让人绝望的,对于完成它,你们大约抱有50%左右的信心。

    精选文档推荐:

    点击→【OKR工作法.ppt】

    点击→【OKR计划考核表.xls】

    点击→【目标与关键成果法(OKR)实施材料.doc】

    KPI绩效考核方案(模板).doc

    点击标题/图片查看文档

    关键绩效指标法(Key Performance Indicator,KPI),它把对绩效的评估简化为对几个关键指标的考核,将关键指标当作评估标准,把员工的绩效与关键指标作出比较地评估方法,在一定程度上可以说是目标管理法与帕累托定律的有效结合。关键指标必须符合SMART原则:具体性(Specific)、衡量性(Measurable)、可达性(Attainable)、相关性(Relevant)、时限性(Time-based)。

    KPI法标准比较鲜明,易于做出评估。其缺点是对简单的工作制定标准难度较大;缺乏一定的定量性;绩效指标只是一些关键的指标,对于其他内容缺少一定的评估,应当适当地注意。

    KPI法符合一个重要的管理原理——“二八原理”。在一个企业的价值创造过程中,存在着“20/80”的规律,即20%的骨干人员创造企业80%的价值;而且在每一位员工身上“二八原理”同样适用,即 80%的工作任务是由20%的关键行为完成的。因此,必须抓住20%的关键行为,对之进行分析和衡量,这样就能抓住业绩评价的重心。

    精选推荐:

    点击→【KPI指标库(包含40种指标).doc】

    点击→【KPI指标库全集.doc】

    公司目标考核方案.doc

    点击标题/图片查看文档

    目标管理的(MBO)要求企业各级主管让员工参与工作目标的制定,目标理论的前提是,如果员工有意识地建立一个目标,它就将影响到个人的工作表现。

    建立目标的人们比没有建立目标时会得到较高水平的结果,而且,建立了目标的人比没有建立目标的人工作表现更好。

    ①目标特性。对个人来说,设立具体目标会改善工作表现,也会提高个人和组织活动的效率。

    ②目标难度和可接受性。通常,目标越难达到,可望达到的工作表现水平就越高。但是,如果目标超过了人们接受的程度,则会降低目标的效应。

    ③反馈。如果在建立目标的同时现建立反馈机制,则能更进一步改善工作表现。

    ④与建立目标有关的其他因素。研究表明,目标可能与刺激有联系,而时间限制可能削弱与目标相关和生产。此外,在受教育程度较低、成就需要较低以及习惯于参与方式的人们中,通过参与方式建立的目标最有利。

    更多内容推荐:

    点击→【MBO绩效考核表(范本).xls】

    点击→【七大职能部门平衡计分卡绩效指标完整版.ppt】

    平衡计分卡知识(完整版).doc

    点击标题查看文档

    平衡计分卡以企业战略为导向,通过财务、客户、内部业务流程和学习与增长四个方面及其业绩指标的因果关系,全面管理和评价企业综合业绩,是企业愿景和战略的具体体现,既是一个绩效评价系统也是一个有效的战略管理系统。四个维度的具体内容:

    财务维度。其目标是解决“股东如何看待我们?”这一类问题。表明我们的努力是否对企业的经济收益产生了积极的作用,因此,财务方面是其他三个方面的出发点和归宿。

    客户维度。这一维度回答的是“客户如何看待我们?”的问题。

    客户是企业之本,是现代企业的利润来源,客户理应成为企业的关注焦点。客户方面体现了公司与外界、部门与其他单位变化的反映,它是BSC的平衡点。

    内部运作流程维度。内部业务维度着眼于企业的核心竞争力,回答的是“我们的优势是什么”的问题。因此,企业应当甄选出那些对客户满意度有最大影响的业务程序(包括影响时间、质量、服务和生产率的各种因素),明确自身的核心竞争能力,并把它们转化成具体的测评指标,内部过程是公司改善经营业绩的重点。

    学习和成长维度。其目标是解决“我们是否能持续为客户提高并创造价值?”这一类问题。只有持续提高员工的技术素质和管理素质,才能不断的开发新产品,为客户创造更多价值并提高经营效率,企业才能打入新市场,增加红利和股东价值。

    更多内容推荐:

    点击→【平衡计分卡式绩效考核模板(12个表格).xls】

    点击→【平衡计分卡绩效考评通用指标库.doc】

    360度绩效考核管理办法.doc

    点击标题/图片查看文档

    360度绩效考核法又称全方位绩效考核法或多源绩效考核法,是指从与被考核者发生工作关系的多方主体那里获得被考核者的信息,以此对被考核者进行全方位、多维度的绩效评估的过程。

    这些信息的来源包括:来自上级监督者的自上而下的反馈(上级);来自下属的自下而上的反馈(下属);来自平级同事的反馈(同事);来自企业内部的支持部门和供应部门的反馈(支持者);来自公司内部和外部的客户的反馈(服务对象);以及来自本人的反馈。

    这种绩效考核过程与传统的绩效考核和评价方法最大的不同是它不仅仅把上级的评价作为员工绩效信息的唯一来源,而是将在组织内部和外部与员工有关的多方主体作为提供反馈的信息来源。

    精选文档推荐:

    点击→【360度员工绩效考核表(上级+下级+协作人员+自评使用).xls】

    点击→【360度绩效考核方案.doc】

    查看专题完整内容

    点击→【5大绩效考评工具及常用表格(360度绩效考核+OKR目标与关键成果+BSC平衡计分卡+KPI关键绩效指标+MBO目标管理)】

    转了吗

    赞了吗

    在看吗

    展开全文
  • 精美的ppt模板

    2013-09-18 11:08:23
    您只需经过选择演示文稿类型、确定输出类型(屏幕输出、Web演示文稿等)和输入演示文稿选项几个步骤,就可以在“幻灯片”选项中看到符合特定任务要求的一系列模板。您只要逐个选中模板中的幻灯片,根据需要插入...
  • 精美的ppt模板2

    热门讨论 2013-09-18 11:27:19
    您只需经过选择演示文稿类型、确定输出类型(屏幕输出、Web演示文稿等)和输入演示文稿选项几个步骤,就可以在“幻灯片”选项中看到符合特定任务要求的一系列模板。您只要逐个选中模板中的幻灯片,根据需要插入...
  • PHPnew 模板引擎 v7.3.1

    2019-10-25 00:35:42
    2: 模板并发写入优化更新, 防止住或者崩溃情况发生 3: css, js引用增加模板语法功能, 引入流程更如人所想 4: 增加Todo, buy等标注支持功能, 在模板中可写标注了 5: 安全保护功能增强, 缓存文件地址及禁止直接...
  • 10、发送模板消息

    千次阅读 2018-01-04 13:34:35
    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用刷卡通知,商品购买成功通知等。不支持广告等营销类...

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277

    模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。

    • 事件推送
      在模版消息发送任务完成后,微信服务器会将是否送达成功作为通知,发送到开发者中心中填写的服务器配置地址中。

    1、送达成功时,推送的XML如下:

           <xml>
           <ToUserName>< ![CDATA[gh_7f083739789a] ]></ToUserName>
           <FromUserName>< ![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8] ]></FromUserName>
           <CreateTime>1395658920</CreateTime>
           <MsgType>< ![CDATA[event] ]></MsgType>
           <Event>< ![CDATA[TEMPLATESENDJOBFINISH] ]></Event>
           <MsgID>200163836</MsgID>
           <Status>< ![CDATA[success] ]></Status>
           </xml>
    

    关于使用规则,请注意:

    1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限;
    2、需要选择公众账号服务所处的2个行业,每月可更改1次所选行业;
    3、在所选择行业的模板库中选用已有的模板进行调用;
    4、每个账号可以同时使用25个模板。
    5、当前每个账号的模板消息的日调用上限为10万次,单个模板没有特殊限制。【2014年11月18日将接口调用频率从默认的日1万次提升为日10万次,可在MP登录后的开发者中心查看】。当账号粉丝数超过10W/100W/1000W时,模板消息的日调用上限会相应提升,以公众号MP后台开发者中心页面中标明的数字为准。
    关于接口文档,请注意:

    1、模板消息调用时主要需要模板ID和模板中各参数的赋值内容;
    2、模板中参数内容必须以”.DATA”结尾,否则视为保留字;
    3、模板保留符号”{{ }}”。

    package com.lm.action.accessToken;
    
    import com.lm.conf.WechatConf;
    import com.lm.util.AesException;
    import com.lm.util.HttpConnectionUtil;
    import com.lm.util.WXBizMsgCrypt;
    import com.lm.util.XmlUtil;
    import org.dom4j.DocumentException;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Date;
    import java.util.Map;
    
    /**
     * 模板消息
     */
    @Controller
    public class MbXxAction {
    
        @GetMapping("/wechat/server/config")
        @ResponseBody
        public String get(HttpServletRequest request, HttpServletResponse response,
                        String signature, String timestamp, String nonce, String echostr) throws IOException {
            return echostr;
        }
    
        /**
         * 模板消息发送成功后,微信会推送是否发送成功消息给服务器(此示例会造成死循环)
         * 只为工作演示
         * @param request
         * @param requestBody
         * @param response
         * @param signature
         * @param timestamp
         * @param nonce
         * @param msg_signature
         * @return
         * @throws IOException
         * @throws DocumentException
         * @throws AesException
         */
        @PostMapping("/wechat/server/config")
        @ResponseBody
        public String post(HttpServletRequest request, @RequestBody String requestBody, HttpServletResponse response,
                         String signature, String timestamp, String nonce, String msg_signature) throws IOException, DocumentException, AesException {
            //服务器为加密状态时候-----start---
            WXBizMsgCrypt pc = new WXBizMsgCrypt(WechatConf.TOKEN, WechatConf.AESKEY, WechatConf.APPID);
            // 第三方收到公众号平台发送的消息
            String result2 = pc.decryptMsg(msg_signature, timestamp, nonce, requestBody);
            System.out.println("解密后明文: " + result2);
            Map<String, String> map = XmlUtil.xmlToMap(result2);
            //微信客服消息
            String text = "{" +
                            "\"touser\":\"" + map.get("FromUserName") + "\"," +
                            "\"template_id\":\"3_C2LJr52nxKDOZxK8pWnvjhQOVBSfmdghWUc4aBWZY\"," +
                            "\"url\":\"http://www.baidu.com\"," +
                            "\"data\":{" +
                                "\"first\":{\"value\":\"恭喜你购买成功!\",\"color\":\"#173177\"}," +
                                "\"keyword1\":{\"value\":\"巧克力\",\"color\":\"#173177\"}," +
                                "\"keyword2\":{\"value\":\"39.8元\",\"color\":\"#173177\"}," +
                                "\"keyword3\":{\"value\":\"39.8元\",\"color\":\"#173177\"}," +
                                "\"keyword4\":{\"value\":\"2014年9月22日\",\"color\":\"#173177\"}," +
                                "\"remark\":{\"value\":\"欢迎再次购买!\"," +
                                "\"color\":\"#173177\"}" +
                                "}" +
                            "}";
            System.out.println(text);
            String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + WechatConf.ACCESSTOKEN;
            String result = HttpConnectionUtil.post(url, text);
            System.out.println(result);
    //        String mingwen = pc.encryptMsg(text, timestamp, nonce);
    //        System.out.println("加密后: " + mingwen);
    //        return mingwen;
            return "";
        }
    
    }
    package com.lm.util;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class XmlUtil {
    
        /**
         * xml文本转成map
         * @param str
         * @return
         */
        public static Map<String, String> xmlToMap(String str) throws DocumentException {
            Document document = DocumentHelper.parseText(str);
            Element element = document.getRootElement();
            List<Element> childrenList = element.elements();
            Map<String, String> map = new HashMap<>();
            childrenList.forEach( item -> {
                map.put(item.getName(), item.getTextTrim());
            });
            return map;
        }
    
    }
    
    /**
     * 对公众平台发送给公众账号的消息加解密示例代码.
     * 
     * @copyright Copyright (c) 1998-2014 Tencent Inc.
     */
    
    // ------------------------------------------------------------------------
    
    /**
     * 针对org.apache.commons.codec.binary.Base64,
     * 需要导入架包commons-codec-1.9(或commons-codec-1.8等其他版本)
     * 官方下载地址:http://commons.apache.org/proper/commons-codec/download_codec.cgi
     */
    package com.lm.util;
    
    import java.nio.charset.Charset;
    import java.util.Arrays;
    import java.util.Random;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    import org.apache.commons.codec.binary.Base64;
    
    /**
     * 提供接收和推送给公众平台消息的加解密接口(UTF8编码的字符串).
     * <ol>
     *  <li>第三方回复加密消息给公众平台</li>
     *  <li>第三方收到公众平台发送的消息,验证消息的安全性,并对消息进行解密。</li>
     * </ol>
     * 说明:异常java.security.InvalidKeyException:illegal Key Size的解决方案
     * <ol>
     *  <li>在官方网站下载JCE无限制权限策略文件(JDK7的下载地址:
     *      http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html</li>
     *  <li>下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt</li>
     *  <li>如果安装了JRE,将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件</li>
     *  <li>如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件</li>
     * </ol>
     */
    public class WXBizMsgCrypt {
        static Charset CHARSET = Charset.forName("utf-8");
        Base64 base64 = new Base64();
        byte[] aesKey;
        String token;
        String appId;
    
        /**
         * 构造函数
         * @param token 公众平台上,开发者设置的token
         * @param encodingAesKey 公众平台上,开发者设置的EncodingAESKey
         * @param appId 公众平台appid
         * 
         * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息
         */
        public WXBizMsgCrypt(String token, String encodingAesKey, String appId) throws AesException {
            if (encodingAesKey.length() != 43) {
                throw new AesException(AesException.IllegalAesKey);
            }
    
            this.token = token;
            this.appId = appId;
            aesKey = Base64.decodeBase64(encodingAesKey + "=");
        }
    
        // 生成4个字节的网络字节序
        byte[] getNetworkBytesOrder(int sourceNumber) {
            byte[] orderBytes = new byte[4];
            orderBytes[3] = (byte) (sourceNumber & 0xFF);
            orderBytes[2] = (byte) (sourceNumber >> 8 & 0xFF);
            orderBytes[1] = (byte) (sourceNumber >> 16 & 0xFF);
            orderBytes[0] = (byte) (sourceNumber >> 24 & 0xFF);
            return orderBytes;
        }
    
        // 还原4个字节的网络字节序
        int recoverNetworkBytesOrder(byte[] orderBytes) {
            int sourceNumber = 0;
            for (int i = 0; i < 4; i++) {
                sourceNumber <<= 8;
                sourceNumber |= orderBytes[i] & 0xff;
            }
            return sourceNumber;
        }
    
        // 随机生成16位字符串
        String getRandomStr() {
            String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
            Random random = new Random();
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < 16; i++) {
                int number = random.nextInt(base.length());
                sb.append(base.charAt(number));
            }
            return sb.toString();
        }
    
        /**
         * 对明文进行加密.
         * 
         * @param text 需要加密的明文
         * @return 加密后base64编码的字符串
         * @throws AesException aes加密失败
         */
        String encrypt(String randomStr, String text) throws AesException {
            ByteGroup byteCollector = new ByteGroup();
            byte[] randomStrBytes = randomStr.getBytes(CHARSET);
            byte[] textBytes = text.getBytes(CHARSET);
            byte[] networkBytesOrder = getNetworkBytesOrder(textBytes.length);
            byte[] appidBytes = appId.getBytes(CHARSET);
    
            // randomStr + networkBytesOrder + text + appid
            byteCollector.addBytes(randomStrBytes);
            byteCollector.addBytes(networkBytesOrder);
            byteCollector.addBytes(textBytes);
            byteCollector.addBytes(appidBytes);
    
            // ... + pad: 使用自定义的填充方式对明文进行补位填充
            byte[] padBytes = PKCS7Encoder.encode(byteCollector.size());
            byteCollector.addBytes(padBytes);
    
            // 获得最终的字节流, 未加密
            byte[] unencrypted = byteCollector.toBytes();
    
            try {
                // 设置加密模式为AES的CBC模式
                Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
                SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES");
                IvParameterSpec iv = new IvParameterSpec(aesKey, 0, 16);
                cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);
    
                // 加密
                byte[] encrypted = cipher.doFinal(unencrypted);
    
                // 使用BASE64对加密后的字符串进行编码
                String base64Encrypted = base64.encodeToString(encrypted);
    
                return base64Encrypted;
            } catch (Exception e) {
                e.printStackTrace();
                throw new AesException(AesException.EncryptAESError);
            }
        }
    
        /**
         * 对密文进行解密.
         * 
         * @param text 需要解密的密文
         * @return 解密得到的明文
         * @throws AesException aes解密失败
         */
        String decrypt(String text) throws AesException {
            byte[] original;
            try {
                // 设置解密模式为AES的CBC模式
                Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
                SecretKeySpec key_spec = new SecretKeySpec(aesKey, "AES");
                IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16));
                cipher.init(Cipher.DECRYPT_MODE, key_spec, iv);
    
                // 使用BASE64对密文进行解码
                byte[] encrypted = Base64.decodeBase64(text);
    
                // 解密
                original = cipher.doFinal(encrypted);
            } catch (Exception e) {
                e.printStackTrace();
                throw new AesException(AesException.DecryptAESError);
            }
    
            String xmlContent, from_appid;
            try {
                // 去除补位字符
                byte[] bytes = PKCS7Encoder.decode(original);
    
                // 分离16位随机字符串,网络字节序和AppId
                byte[] networkOrder = Arrays.copyOfRange(bytes, 16, 20);
    
                int xmlLength = recoverNetworkBytesOrder(networkOrder);
    
                xmlContent = new String(Arrays.copyOfRange(bytes, 20, 20 + xmlLength), CHARSET);
                from_appid = new String(Arrays.copyOfRange(bytes, 20 + xmlLength, bytes.length),
                        CHARSET);
            } catch (Exception e) {
                e.printStackTrace();
                throw new AesException(AesException.IllegalBuffer);
            }
    
            // appid不相同的情况
            if (!from_appid.equals(appId)) {
                throw new AesException(AesException.ValidateAppidError);
            }
            return xmlContent;
    
        }
    
        /**
         * 将公众平台回复用户的消息加密打包.
         * <ol>
         *  <li>对要发送的消息进行AES-CBC加密</li>
         *  <li>生成安全签名</li>
         *  <li>将消息密文和安全签名打包成xml格式</li>
         * </ol>
         * 
         * @param replyMsg 公众平台待回复用户的消息,xml格式的字符串
         * @param timeStamp 时间戳,可以自己生成,也可以用URL参数的timestamp
         * @param nonce 随机串,可以自己生成,也可以用URL参数的nonce
         * 
         * @return 加密后的可以直接回复用户的密文,包括msg_signature, timestamp, nonce, encrypt的xml格式的字符串
         * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息
         */
        public String encryptMsg(String replyMsg, String timeStamp, String nonce) throws AesException {
            // 加密
            String encrypt = encrypt(getRandomStr(), replyMsg);
    
            // 生成安全签名
            if (timeStamp == "") {
                timeStamp = Long.toString(System.currentTimeMillis());
            }
    
            String signature = SHA1.getSHA1(token, timeStamp, nonce, encrypt);
    
            // System.out.println("发送给平台的签名是: " + signature[1].toString());
            // 生成发送的xml
            String result = XMLParse.generate(encrypt, signature, timeStamp, nonce);
            return result;
        }
    
        /**
         * 检验消息的真实性,并且获取解密后的明文.
         * <ol>
         *  <li>利用收到的密文生成安全签名,进行签名验证</li>
         *  <li>若验证通过,则提取xml中的加密消息</li>
         *  <li>对消息进行解密</li>
         * </ol>
         * 
         * @param msgSignature 签名串,对应URL参数的msg_signature
         * @param timeStamp 时间戳,对应URL参数的timestamp
         * @param nonce 随机串,对应URL参数的nonce
         * @param postData 密文,对应POST请求的数据
         * 
         * @return 解密后的原文
         * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息
         */
        public String decryptMsg(String msgSignature, String timeStamp, String nonce, String postData)
                throws AesException {
    
            // 密钥,公众账号的app secret
            // 提取密文
            Object[] encrypt = XMLParse.extract(postData);
    
            // 验证安全签名
            String signature = SHA1.getSHA1(token, timeStamp, nonce, encrypt[1].toString());
    
            // 和URL中的签名比较是否相等
            // System.out.println("第三方收到URL中的签名:" + msg_sign);
            // System.out.println("第三方校验签名:" + signature);
            if (!signature.equals(msgSignature)) {
                throw new AesException(AesException.ValidateSignatureError);
            }
    
            // 解密
            String result = decrypt(encrypt[1].toString());
            return result;
        }
    
        /**
         * 验证URL
         * @param msgSignature 签名串,对应URL参数的msg_signature
         * @param timeStamp 时间戳,对应URL参数的timestamp
         * @param nonce 随机串,对应URL参数的nonce
         * @param echoStr 随机串,对应URL参数的echostr
         * 
         * @return 解密之后的echostr
         * @throws AesException 执行失败,请查看该异常的错误码和具体的错误信息
         */
        public String verifyUrl(String msgSignature, String timeStamp, String nonce, String echoStr)
                throws AesException {
            String signature = SHA1.getSHA1(token, timeStamp, nonce, echoStr);
    
            if (!signature.equals(msgSignature)) {
                throw new AesException(AesException.ValidateSignatureError);
            }
    
            String result = decrypt(echoStr);
            return result;
        }
    
    }
    
    package com.lm.util;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.Map;
    
    public class HttpConnectionUtil {
        //get请求
        public static String get(String url){
            HttpURLConnection conn = null;
            BufferedReader rd = null ;
            StringBuilder sb = new StringBuilder ();
            String line = null ;
            String response = null;
            try {
                conn = (HttpURLConnection) new URL(url).openConnection();
                conn.setRequestMethod("GET");
                conn.setDoInput(true);
                conn.setReadTimeout(20000);
                conn.setConnectTimeout(20000);
                conn.setUseCaches(false);
                conn.connect();
                rd  = new BufferedReader( new InputStreamReader(conn.getInputStream(), "UTF-8"));
                while ((line = rd.readLine()) != null ) {
                    sb.append(line);
                }
                response = sb.toString();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    if(rd != null){
                        rd.close();
                    }
                    if(conn != null){
                        conn.disconnect();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return response;
        }
        //post表单请求
        public static String post(String url, Map<String, String> form){
            HttpURLConnection conn = null;
            PrintWriter pw = null ;
            BufferedReader rd = null ;
            StringBuilder out = new StringBuilder();
            StringBuilder sb = new StringBuilder();
            String line = null ;
            String response = null;
            for (String key : form.keySet()) {
                if(out.length()!=0){
                    out.append("&");
                }
                out.append(key).append("=").append(form.get(key));
            }
            try {
                conn = (HttpURLConnection) new URL(url).openConnection();
                conn.setRequestMethod("POST");
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setReadTimeout(20000);
                conn.setConnectTimeout(20000);
                conn.setUseCaches(false);
                conn.connect();
                pw = new PrintWriter(conn.getOutputStream());
                pw.print(out.toString());
                pw.flush();
                rd  = new BufferedReader( new InputStreamReader(conn.getInputStream(), "UTF-8"));
                while ((line = rd.readLine()) != null ) {
                    sb.append(line);
                }
                response = sb.toString();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    if(pw != null){
                        pw.close();
                    }
                    if(rd != null){
                        rd.close();
                    }
                    if(conn != null){
                        conn.disconnect();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return response;
        }
        //post字符串请求
        public static String post(String url, String rawBody){
            HttpURLConnection conn = null;
            PrintWriter pw = null ;
            BufferedReader rd = null ;
            StringBuilder sb = new StringBuilder ();
            String line = null ;
            String response = null;
            try {
                conn = (HttpURLConnection) new URL(url).openConnection();
                conn.setRequestMethod("POST");
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setReadTimeout(20000);
                conn.setConnectTimeout(20000);
                conn.setUseCaches(false);
                conn.connect();
                pw = new PrintWriter(conn.getOutputStream());
                pw.print(rawBody);
                pw.flush();
                rd  = new BufferedReader( new InputStreamReader(conn.getInputStream(), "UTF-8"));
                while ((line = rd.readLine()) != null ) {
                    sb.append(line);
                }
                response = sb.toString();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    if(pw != null){
                        pw.close();
                    }
                    if(rd != null){
                        rd.close();
                    }
                    if(conn != null){
                        conn.disconnect();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return response;
        }
    
    }
    
    展开全文
  • 最近公司计划对接支付宝会员卡功能,而任务恰巧由领导安排给我这边,小弟之前也未做过支付宝接口,研究了三天,终于将支付宝会员卡API接口大体...1、会员卡模板管理:包括会员卡模板创建,会员卡模板查询,会员卡模...
  • 学校卫生室工作计划模板2020 【篇一】 201x年我村卫生室各项工作,将在镇卫生院、村委以及上级业务部门的正确领导下,紧紧围绕全镇卫生工作会议精神和201x年度各项工作任务,进一步加强业务学习及加大卫生工作宣传...
  • 例如招商银行通过模板消息向信用用户推送账单分期,对于未使用信用的用户推送办卡活动通知等,可以大大提高公众号粉丝用户的转化率。 而且和公众号本身的推送内容相比,模板消息可以让粉丝用户更加清晰、直观的...
  • 信用数字识别

    2019-08-15 20:56:17
    首先是对模板的处理,这是所用的模板,主要的任务是将这是十个数字进行分割标号,即第一个位置标识为0,第二个位置标识为2… 先对该模板图片进行轮廓检测,然后画出每一个数字的外接矩形,再对这十个外接矩形进行...
  • 任务流程图(Task Flow)和用户流程图(User Flows) 流程实际上是对运动过程的分解。设计人员需要考虑用户如何浏览网站或app。 这些流程中的每个步骤都将有助于设计人员考虑用户在访问特定页面之前和之后所发生...
  • 学生-源码

    2021-02-11 22:05:48
    方向: ...一个。... 样板是“模板”的另一种表达方式,这种创建HTML样板的方法将为您提供基本HTML文档... 如果您没有完成任务,但是尽力而为,可以。 将此课程上载到GitHub,并在工作会议结束时将链接粘贴到Moodle作业中。
  • 想测试一下在ucOS_ii中动态的启动任务,能启动多少个不, 启停控制是否都正常。 先从上次作的固件库模板上,加入ucOS_ii 加好ucOS_ii的MDK工程 稍后上传 试验 在上次搭好的STM34F4的固件库模板的基础上,加上ucOS_...
  • Description Z城市居住着很多只跳蚤。在Z城市周六生活频道有一个娱乐节目。一只跳蚤将被请上一个高空钢丝的正中央。钢丝很长,可以看作是无限长。...而他最终的任务是跳到距离他左边一个单位长度的地方,并...
  • 计划:任务清单-源码

    2021-02-22 08:06:58
    计划 计划第一定律:计划赶不上变化计划第二定律:不忘初心,方得始终 ...关于模板参数,类内部私有模板别名统一使用_t后缀标识的导入 功能库 让macro / private / extern.log通用化 功能库 在macro / private /
  • 项目名称: 优先级任务管理器 时 间: ...优先级任务管理器使用一个卡片代表一个将要完成的任务,使程序显得美观、简洁。在实现中,充分使用了WPF中的特性,比如绑定、模板、Style、触发...
  • 题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。...本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多...
  • 该库是使用数据驱动的方法构建的,这意味着大量数据(例如任务,消息,用户通知)将作为对象数组传递给组件。 这将使将UI界面与任何后端API轻松连接。 自举5 该库基于最新版本的,带来了许多改进,例如,引入了RTL...
  • ... 3、在“组策略”中依次展开 "本地计算机"策略/用户配置/...5、在 删除“任务管理器” 属性中的“设置”选项中点选“已禁用”或“未配置”单选项,确定。 注:该策略的效果为,“任务栏”上的右键菜单上的“...
  • “组策略”法,请按照下面步骤进行组策略操作: 1、点击『开始』菜单 2、...删除“任务管理器” 的属性 5、在 删除“任务管理器” 属性中的“设置”选项中点选“已禁用”或“未配置”单选项,确定。 注:该策略的...
  • 但是代码下载到SD总感觉不太方便,所以研究了一下VSCODE 1、配置生成任务 打开VSCODE后,终端->配置任务->使用模板创建tasks.json文件->others,自动创建一个json文件,在.vscode处 然后将其修改...
  • 您可以使用“新建”按钮启动: ...除了“新建”选项外,还有另外两个选项:“模板”和“API网络”。有关这些选项的详细信息,请参阅模板和API网络部分。 创建新的 您可以使用“新建”按钮创建新的“...
  • (2)打开SQL Server 2000中的“企业管理器”,然后展开本地服务器,在“数据库”数据项上单击鼠标右键,在弹出的快捷菜单中选择“所有任务”/“附加数据库”菜单项。 (3)将弹出“附加数据库”对话框,在该对话框...
  •  启动PowerPoint 2007后,点“插入”选项,点“插图”组中的“剪贴图”。比如插入一张女人的图片,在右边任务窗格的“搜索文字”文本框中输入“女人”,点“搜索”。会搜索到很多图片,选中一张图片拖到幻灯片中...
  • 周末了,周一布置的任务还没完毕,在了页面跳转上,接手了一个半截的项目要进行开发,之前没有人给培训。全靠自己爬代码,所以进度比較慢。并且加上之前没实用过 Spring Mvc 开发项目。所以有点吃力,只是接触了...
  • 任务:使用opencv利用模板实现对信用卡卡号的识别 模板图像如图: 使用opencv对图像处理得到图像对应的数字并使用字典存储 def template_process(img): temp_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 转换...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 293
精华内容 117
关键字:

任务卡模板