ke
2024-07-19 2e4a5ceda924d410d08632ec3bd8c6d42cf5bc08
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/feign/DataAbnormalWarnClient.java
@@ -1,16 +1,40 @@
package cn.gistack.sm.sms.feign;
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
import cn.gistack.common.utils.SpringContextUtil;
import cn.gistack.sm.sjztmd.entity.AttStBase;
import cn.gistack.sm.sjztmd.service.*;
import cn.gistack.sm.sjztods.constant.ZtApiUrlConstant;
import cn.gistack.sm.sjztods.constant.ZtConfigConstant;
import cn.gistack.sm.skBaiYiTest.entity.BaiYiTestEntity;
import cn.gistack.sm.skBaiYiTest.entity.WarnMsg;
import cn.gistack.sm.skBaiYiTest.service.ISkBaiYiService;
import cn.gistack.sm.sms.util.SmsUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tenant.annotation.NonDS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import springfox.documentation.annotations.ApiIgnore;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
 * @PROJECT_NAME: skjcmanager
@@ -38,6 +62,12 @@
   @Autowired
   private IAttResFlseLimService attResFlseLimService;
   @Autowired
   private RestTemplate restTemplate;
   @Autowired
   private ISkBaiYiService skBaiYiService;
   @Override
   public void sendOperate(String tableName, String phones) {
@@ -68,6 +98,123 @@
   }
   @Override
   public void sendOperateCZ(String phones, String rate) {
      String url = "/services/1234567890ABCDEFGHIJKLMN/source_data_ssync_staus";
      // 获取当前时间
      LocalDateTime now = LocalDateTime.now();
      // 减去一个小时
      LocalDateTime oneHourAgo = now.minusHours(1);
      // 调整为整点时间
      LocalDateTime oneHourAgoRoundedDown = oneHourAgo.truncatedTo(ChronoUnit.HOURS);
      // 获取整点时间的结束时间(该小时的最后一分钟)
      LocalDateTime oneHourAgoRoundedDownEnd = oneHourAgoRoundedDown.plusHours(1).minusSeconds(1);
      DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
      String startTime = formatter.format(oneHourAgoRoundedDown);
      String endTime = formatter.format(oneHourAgoRoundedDownEnd);
      String param = "?start_dt=" + startTime + "&end_dt=" + endTime + "&over_rate=" + rate;
//      String param = "?start_dt=2024-04-30 10:00:00&end_dt=2024-04-30 10:59:59&over_rate=20";
      JSONObject jsonObject = getZtData(param, url);
      int code = jsonObject.getInteger("code");
      if (code == 200) {
         JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("data");
         String str = "";
         for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject data = jsonArray.getJSONObject(i);
            String flag = data.getString("flag");
            String title = data.getString("title");
            String tm = data.getString("tm");
            String rateB = data.getString("rate");
            if ("".equals(str)) {
               str += tm + flag + title + "数据比昨日少" + rateB;
            } else {
               str += ";" + tm + flag + title + "数据比昨日少" + rateB;
            }
         }
         if (!str.equals("")) {
            sendMsgByCZ(phones, str);
         }
//         else {
//            jsonObject = getZtData(param, url);
//            code = jsonObject.getInteger("code");
//
//            if (code == 200) {
//               jsonArray = jsonObject.getJSONObject("data").getJSONArray("data");
//               str = "";
//
//               for (int i = 0; i < jsonArray.size(); i++) {
//                  JSONObject data = jsonArray.getJSONObject(i);
//                  String flag = data.getString("flag");
//                  String title = data.getString("title");
//                  String tm = data.getString("tm");
//                  String rate = data.getString("rate");
//
//                  str += tm + flag + title + "当前比例为:" + rate + ";";
//               }
//
//               if (!str.equals("")) {
//                  sendMsgByCZ(phones, str);
//               }
//            }
//         }
      }
   }
   /**
    * 调用中台接口查询数据
    *
    * @param params
    * @param url
    * @return
    */
   public JSONObject getZtData(String params, String url) {
      // 获取环境
      String activeProfile = SpringContextUtil.getActiveProfile();
      if (activeProfile.equals("dev")){
         url = ZtApiUrlConstant.url_prefix_dev + url;
      }
      if (activeProfile.equals("prod")){
         url = ZtApiUrlConstant.url_prefix_prod + url;
      }
      if (activeProfile.equals("test")){
         url = ZtApiUrlConstant.url_prefix_test + url;
      }
      //设置请求头
      HttpHeaders headers = new HttpHeaders();
      headers.add(ZtConfigConstant.header_key, ZtConfigConstant.header_value);
      //封装请求头
      HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<MultiValueMap<String, Object>>(headers);
      try {
         //有请求头,有参数请求
         ResponseEntity<String> responseEntity =
            restTemplate.exchange(url + params,
               HttpMethod.GET,
               formEntity,
               String.class);
         // Feature.IgnoreNotMatch 保留null值的属性
         JSONObject jsonObject = JSON.parseObject(responseEntity.getBody(), Feature.IgnoreNotMatch);
         // 返回
         return jsonObject;
      } catch (Exception e) {
         e.printStackTrace();
      }
      return null;
   }
   private void sendMsg(String tableName, String phones) {
      SMSSendRequest request = new SMSSendRequest();
      String [] phoness = phones.split(",");
@@ -79,4 +226,79 @@
      }
   }
   private void sendMsgByCZ(String phones, String str) {
      SMSSendRequest request = new SMSSendRequest();
      String [] phoness = phones.split(",");
      for (String n: phoness) {
         request.setUserNumber(n);
         request.setTemplateId("2431012277510");
         request.setMessageContent("紧急通知:数据表异常,请立即检查数据源并填充缺失的数据!"+str);
         SmsUtils.sendMsg(request);
      }
   }
   /**
    * 白蚁预警发短信
    */
   public void sendBaiYiWarn() {
      List<BaiYiTestEntity> list = skBaiYiService.selectList();
      Set<String> skNameSet = new HashSet<>();
      ArrayList<WarnMsg> msgEntityList = new ArrayList<>();
      if (list!= null && list.size()>0) {
         log.info("白蚁预警水库数量:" +  list.size());
         for (BaiYiTestEntity item : list ) {
            skNameSet.add(item.getSkName());
         }
         if(skNameSet.size()>0){
            for (String sknm : skNameSet) {
               WarnMsg warnMsg = new WarnMsg();
               warnMsg.setSkName(sknm);
               String statListStr = ""; // 测点集
               String personInCharge = ""; // 责任人名称
               String phone = ""; // 责任人联系方式
               for (BaiYiTestEntity item : list ) {
                  String skName = item.getSkName();
                  String termitePointNum = item.getTermitePointNum();
                  personInCharge = item.getPersonInCharge();
                  phone = item.getPhone();
                  if(sknm.equals(skName)){
                     statListStr = statListStr + termitePointNum + ","; // 同一个水库的报警白蚁测点拼接起来
                  }
               }
               warnMsg.setPhone(phone);
               warnMsg.setPersonInCharge(personInCharge);
               warnMsg.setBayistate(statListStr);
               msgEntityList.add(warnMsg);
            }
         }
      }
      // 获取到了数据开始发短信
      if (msgEntityList!= null && msgEntityList.size()>0) {
         for (WarnMsg item : msgEntityList) {
            String skName = item.getSkName();
            String personInCharge = item.getPersonInCharge();
            String phone = item.getPhone();
            String bayistate = item.getBayistate();
            SMSSendRequest request = new SMSSendRequest();
            request.setUserNumber(phone);
            request.setTemplateId("2431012268292");//短信模版编号
            request.setMessageContent("紧急通知:"+skName+" 中 "+bayistate+" 以上白蚁监测点发生白蚁预警,请立安排人前去检查是否真实存在白蚁。");
            SmsUtils.sendMsg(request);
         }
      }
   }
}