//package com.boman.wechat.service.impl;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import com.boman.common.core.utils.StringUtils;
//import com.boman.domain.TemplateData;
//import com.boman.domain.dto.AjaxResult;
//import com.boman.domain.dto.WxMsgDto;
//import com.boman.system.api.RemoteUserService;
//import com.boman.wechat.config.WechatProperties;
//import com.boman.wechat.service.WxPushService;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.http.ResponseEntity;
//import org.springframework.stereotype.Service;
//import org.springframework.web.client.RestTemplate;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//@Service
//public class WxPushServiceImpl implements WxPushService {
//    private static final Logger logger = LoggerFactory.getLogger(WxPushServiceImpl.class);
//
//    //用来请求微信的get和post
//    @Autowired
//    private RestTemplate restTemplate;
//    @Autowired
//    private WechatProperties properties;
//    @Autowired
//    private RemoteUserService remoteUserService;
//
//    /**
//     * 微信小程序推送给用户
//     */
//    @Override
//    public Map<String, Object> pushToUser(WxMsgDto dto) {
//        logger.info("WxMsgDto {}", JSON.toJSONString(dto));
//        logger.info("properties {}", JSON.toJSONString(properties));
//        List<Long> userIds = dto.getIds();
//        Map<String, Object> params = dto.getParams();
//        Map<String, Object> pushResult = new HashMap<>();
//
//        //获取access_token
//        String accessToken = getAccessToken();
//        if(StringUtils.isEmpty(accessToken)) {
//            pushResult.put("msg", "获取access_token失败");
//            return pushResult;
//        }
//
//        String url = properties.getMsgUrl() + "?access_token=" + accessToken;
//        AjaxResult result = remoteUserService.selectUserByIds(userIds);
//        List<Map<String, Object>> users = (List<Map<String, Object>>) result.get("data");
//        if(users == null || users.size() <= 0) {
//            pushResult.put("msg", "推送失败，没有选择推送人员");
//            return pushResult;
//        }
//
//        WxMsgDto wxMssVo = new WxMsgDto();
//        Map<String, String> responseResult = new HashMap<>();
//        for(Map user : users) {
//            String openId = (String) user.get("openId");
//            if(StringUtils.isEmpty(openId)) {
//                continue;
//            }
//            //拼接推送的模版
////            WxMsgDto wxMssVo = new WxMsgDto();
//            wxMssVo.setTouser(openId);//用户openid
//            wxMssVo.setTemplate_id(properties.getTemplateId());//模版id
//            Map<String, TemplateData> msgMap = new HashMap<>(5);
//            for(String key : params.keySet()) {
//                TemplateData templateData = new TemplateData();
//                templateData.setValue(params.get(key));
//                msgMap.put(key, templateData);
//            }
//            wxMssVo.setData(msgMap);
//            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMssVo, String.class);
//            logger.info(" wxmssvo: " + JSON.toJSONString(wxMssVo));
//            JSONObject resultJsonObject = JSON.parseObject(responseEntity.getBody());
//            if((Integer) resultJsonObject.get("errcode") != 0) {
//                responseResult.put(user.get("id").toString(), "用户 " + user.get("nickName") + " 推送失败，" + resultJsonObject.get("errmsg").toString());
//            }
//            logger.info("result {}", responseEntity.getBody());
//        }
//        if(responseResult.size() > 0) {
//            pushResult.put("msg", responseResult.toString());
//            pushResult.put("data", responseResult);
//        }
//        return pushResult;
//    }
//
//    /*
//     * 获取access_token
//     * appid和appsecret到小程序后台获取，当然也可以让小程序开发人员给你传过来
//     * */
//    private String getAccessToken() {
//        //获取access_token
//        String url = properties.getAccessTokenUrl() + "&appid=" + properties.getAppId() + "&secret=" + properties.getSecret();
//        String json = restTemplate.getForObject(url, String.class);
//        JSONObject jsonObject = JSONObject.parseObject(json);
//        return (String) jsonObject.get("access_token");
//    }
//}
