guoshilong
2023-06-06 c7f24dde247a95facd2f8d3659ed9309139d1088
Merge remote-tracking branch 'origin/jtdev' into jtdev
12 files modified
305 ■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/sms/entity/SmsRecord.java 41 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java 11 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java 69 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java 16 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsRecordController.java 3 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/mapper/SmsRecordMapper.java 7 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/mapper/SmsRecordMapper.xml 23 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/ISmsRecordService.java 12 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java 9 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsRecordServiceImpl.java 16 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java 93 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-alerts-api/src/main/java/cn/gistack/alerts/sms/entity/SmsRecord.java
@@ -1,6 +1,10 @@
package cn.gistack.alerts.sms.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
@@ -9,16 +13,26 @@
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springblade.core.tenant.mp.TenantEntity;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * 短信发送记录
 * @author Administrator
 */
@Data
@TableName("sm_sms_record")
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "sm_sms_record对象", description = "短信发送记录")
public class SmsRecord extends TenantEntity {
public class SmsRecord{
    @JsonSerialize(using = ToStringSerializer.class)
    @ApiModelProperty("主键id")
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;
    /**
     * 模板id
     */
@@ -30,12 +44,6 @@
     */
    @ApiModelProperty(value = "手机号")
    private String tel;
    /**
     * 手机号(废弃)
     */
    @ApiModelProperty(value = "手机号(废弃)")
    private String phone;
    /**
     * 消息内容
@@ -62,10 +70,25 @@
    private String responseMsg;
    /**
     * 响应消息
     * 发送结果ID
     */
    @ApiModelProperty(value = "响应消息")
    @ApiModelProperty(value = "发送结果ID")
    @JsonSerialize(using = ToStringSerializer.class)
    private Long resultId;
    @JsonSerialize(using = ToStringSerializer.class)
    @ApiModelProperty("创建人")
    private Long createUser;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("创建时间")
    private Date createTime;
    @ApiModelProperty("业务状态")
    private Integer status;
    @TableLogic
    @ApiModelProperty("是否已删除")
    private Integer isDeleted;
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiDataColumnConstant.java
@@ -40,4 +40,15 @@
        add("rz");
    }};
    /**
     * 水位初次超汛限告警(水库技术责任人、巡查责任人)
     */
    public static List<String>  waterFirstOverList = new ArrayList<String>()
    {{
        add("town_nm");
        add("res_nm");
        add("rz");
        add("over_z");
    }};
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/constant/ZtApiUrlConstant.java
@@ -23,4 +23,9 @@
     */
    public static final String res_diff_dead_z_api = "http://10.42.6.192/services/1234567890ABCDEFGHIJKLMN/res/diff_dead_z";
    /**
     *  水位初次超汛限告警
     */
    public static final String over_z_res_api = "http://10.10.2.192/services/1234567890ABCDEFGHIJKLMN/over_z_res";
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/notice/service/impl/NoticeStrategyImpl.java
@@ -66,7 +66,7 @@
     * @param templateId
     * @param alarmRule
     * @param columnsList 列名集合信息
     * @param flag
     * @param flag 是否包含日期
     * @return
     */
    private SmsRequestTemplate getSendSmsTemplate(JSONArray jsonArray,
@@ -210,6 +210,29 @@
    }
    /**
     * 依次添加巡查责任人,技术责任人信息
     * @param list
     */
    private void addPatrolTechnologyInfo(List<String> list) {
        // 查询巡查责任人姓名,技术责任人姓名信息
        List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(0),"4,5");
        String xczrr = "";
        String jszrr = "";
        for (PersonVO personVO : personVOList) {
            if (personVO.getType().equals("5")){
                xczrr = personVO.getName();
            }
            if (personVO.getType().equals("4")){
                jszrr = personVO.getName();
            }
        }
        // 巡查责任人姓名
        list.add(xczrr);
        // 技术责任人姓名
        list.add(jszrr);
    }
    /**
     * 默认实现
     *
     * @param arg1 告警规则名称
@@ -349,22 +372,7 @@
            // 遍历,拼接县水利部人员电话
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 后面依次拼接 巡查责任人姓名,技术责任人姓名,市县水利部门人员姓名电话(暂时不要)
                // 查询巡查责任人姓名,技术责任人姓名信息
                List<PersonVO> personVOList = attResManagePersonClient.getPersonListByResGuid(list.get(0),"4,5");
                String xczrr = "";
                String jszrr = "";
                for (PersonVO personVO : personVOList) {
                    if (personVO.getType().equals("5")){
                        xczrr = personVO.getName();
                    }
                    if (personVO.getType().equals("4")){
                        jszrr = personVO.getName();
                    }
                }
                // 巡查责任人姓名
                list.add(xczrr);
                // 技术责任人姓名
                list.add(jszrr);
                addPatrolTechnologyInfo(list);
                // 市县水利部门人员姓名电话(暂时不要)
//                list.add("测试:13112341234");
                // 保存告警记录信息
@@ -380,6 +388,8 @@
        return "水位接近汛限告警";
    }
    /**
     * 策略6: 水位初次超汛限告警
     *
@@ -388,8 +398,29 @@
     * @return
     */
    public String waterFirstOverHandle(String arg1, String arg2) {
        // 业务逻辑处理 2...
        return "";
        // 查询当前策略对应的告警规则信息
        AlarmRule alarmRule = alarmRuleService.getOne(new QueryWrapper<AlarmRule>().eq("rule_name", arg1));
        if (null!=alarmRule) {
            // 调用中台服务接口查询数据
            JSONArray ztData = getZtData("", ZtApiUrlConstant.over_z_res_api);
            // 只发短信,将发短信信息组装好
            SmsRequestTemplate smsRequestTemplate
                = getSendSmsTemplate(ztData, "2431012216671",alarmRule, ZtApiDataColumnConstant.waterFirstOverList,true);
            // 拼接后面内容
            for (List<String> list : smsRequestTemplate.getTemplateContent()) {
                // 依次拼接巡查责任人,技术责任人姓名
                addPatrolTechnologyInfo(list);
                // 保存告警记录信息
                AlarmRecord alarmRecord = saveAlarmRecord(list,alarmRule);
                if (null != alarmRecord) {
                    list.add(alarmRecord.getId().toString());
                }
            }
            // 调用短信服务
            smsService.sendSignMsg(smsRequestTemplate);
        }
        // 返回
        return "水位初次超汛限告警";
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsController.java
@@ -19,6 +19,7 @@
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static cn.gistack.common.cache.CacheNames.PHONE_KEY;
@@ -72,7 +73,7 @@
    /**
     * 短信动态内容发送通用方法(仅支持 具名变量 {手机号码:11} 模式的模板)
     * request 必须包含手机号,模板id,拼接好的内容
     * request
     * @param smsRequest
     * @return
     */
@@ -254,7 +255,7 @@
    /**
     * 发送 具名 变量模板短信
     * 发送 具名 变量模板短信(告警定制)
     * @param smsRequest 发送对象
     * @return
     */
@@ -262,4 +263,15 @@
    public R sendSignMsg(@RequestBody SmsRequestTemplate smsRequest){
        return R.data(smsService.sendSignMsg(smsRequest));
    }
    /**
     * 发送降雨短信
     * @param params 发送对象
     * @return
     */
    @PostMapping("/sendSignRainMsg")
    public R sendSignRainMsg(@RequestBody Map<String,Object> params){
        return R.data(smsService.sendSignRainMsg(params));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/controller/SmsRecordController.java
@@ -8,7 +8,6 @@
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
@@ -26,7 +25,7 @@
@RestController
@RequestMapping("/smsRecord/smsRecord")
@AllArgsConstructor
public class SmsRecordController extends BladeController {
public class SmsRecordController{
   private ISmsRecordService smsRecordService;
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/mapper/SmsRecordMapper.java
@@ -21,4 +21,11 @@
     * @return
     */
    List<SmsRecordVO> selectSmsRecordPage(IPage<SmsRecordVO> page,@Param("smsRecord") SmsRecordVO smsRecord);
    /**
     * 批量插入记录
     * @param list
     * @return
     */
    int batchSaveSendRecord(@Param("list") List<SmsRecord> list);
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/mapper/SmsRecordMapper.xml
@@ -5,8 +5,8 @@
    <!--自定义分页列表查询-->
    <select id="selectSmsRecordPage" resultType="cn.gistack.alerts.sms.vo.SmsRecordVO">
        select * from sm_sms_record where 1=1 and is_deleted = 0
        <if test="smsRecord.phone!=null and smsRecord.phone!=''">
            and phone like concat(concat('%',#{smsRecord.phone}),'%')
        <if test="smsRecord.tel!=null and smsRecord.tel!=''">
            and tel like concat(concat('%',#{smsRecord.tel}),'%')
        </if>
        <if test="smsRecord.content!=null and smsRecord.content!=''">
            and content like concat(concat('%',#{smsRecord.content}),'%')
@@ -17,4 +17,23 @@
        order by id desc
    </select>
    <!--批量新增-->
    <insert id="batchSaveSendRecord"
            parameterType="cn.gistack.alerts.sms.entity.SmsRecord" useGeneratedKeys="true" keyProperty="id">
        insert into sm_sms_record
        (id,template_id,tel,content,response_status,response_msg,result_id,is_deleted,create_time)
        <foreach collection="list" item="item" index="index" separator=",">
            (
            #{item.id},
            #{item.templateId},
            #{item.tel},
            #{item.content},
            #{item.responseStatus},
            #{item.responseMsg},
            #{item.resultId},
            0,now()
            )
        </foreach>
    </insert>
</mapper>
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/ISmsRecordService.java
@@ -3,9 +3,11 @@
import cn.gistack.alerts.sms.entity.SmsRecord;
import cn.gistack.alerts.sms.vo.SmsRecordVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import com.baomidou.mybatisplus.extension.service.IService;
public interface ISmsRecordService extends BaseService<SmsRecord> {
import java.util.List;
public interface ISmsRecordService extends IService<SmsRecord> {
    /**
     * 自定义分页列表查询
@@ -14,4 +16,10 @@
     * @return
     */
    Object selectSmsRecordPage(IPage<SmsRecordVO> page, SmsRecordVO smsRecord);
    /**
     * 批量插入记录
     * @param list
     */
    int batchSaveSendRecord(List<SmsRecord> list);
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/SmsService.java
@@ -25,7 +25,7 @@
                     List<String> phoneNumbers);
    /**
     * 发送 具名 变量模板短信
     * 发送 具名 变量模板短信 (告警定制)
     * @param smsRequestTemplate
     * @return
     */
@@ -55,4 +55,11 @@
     * @return
     */
    Map<String, Object> saveInStationInfo(SmsRequestTemplate smsRequestTemplate);
    /**
     * 发送降雨短信
     * @param params 发送对象
     * @return
     */
    Object sendSignRainMsg(Map<String, Object> params);
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsRecordServiceImpl.java
@@ -5,15 +5,17 @@
import cn.gistack.alerts.sms.service.ISmsRecordService;
import cn.gistack.alerts.sms.vo.SmsRecordVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * 短信发送记录
 * @author zhongrj
 */
@Service
public class SmsRecordServiceImpl extends BaseServiceImpl<SmsRecordMapper, SmsRecord> implements ISmsRecordService {
public class SmsRecordServiceImpl extends ServiceImpl<SmsRecordMapper, SmsRecord> implements ISmsRecordService {
    /**
     * 自定义分页列表查询
@@ -30,4 +32,14 @@
        // 查询返回
        return page.setRecords(baseMapper.selectSmsRecordPage(page,smsRecord));
    }
    /**
     * 批量插入记录
     * @param list
     * @return
     */
    @Override
    public int batchSaveSendRecord(List<SmsRecord> list) {
        return baseMapper.batchSaveSendRecord(list);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-alerts/src/main/java/cn/gistack/alerts/sms/service/impl/SmsServiceImpl.java
@@ -15,10 +15,14 @@
import cn.gistack.alerts.sms.service.SmsService;
import cn.gistack.alerts.sms.util.SmsUtils;
import cn.gistack.alerts.sms.vo.SmsRequestTemplate;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 短信发送服务实现层
@@ -65,7 +69,7 @@
    }
    /**
     * 发送 具名 变量模板短信
     * 发送 具名 变量模板短信(告警定制)
     * @param smsRequestTemplate
     * @return
     */
@@ -194,12 +198,34 @@
    }
    /**
     * 发送 具名 变量模板短信--批量一次发送
     * @param title 具名变量头
     * 发送降雨短信--批量一次发送
     * @param params 具名变量头
     * @return
     */
    public Object sendSignMsg(String title, String datas, SMSSendRequest request, Integer type, SmsTemplate smsTemplate) {
        String[] titleArr = title.split(",");
    @Override
    public Object sendSignRainMsg(Map<String, Object> params) {
        String[] titleArr = params.get("title").toString().split(",");
        String data = params.get("data").toString();
        String templateId = params.get("templateId").toString();
        String content = params.get("content").toString();
        List<String> phones = (List<String>)params.get("phones");
        List<String> errPhones = new ArrayList<>();
        // 手机号去重
        Set<String> hashSet = new HashSet<>();
        for (String phone : phones) {
            hashSet.add(phone);
        }
        StringBuilder builder = new StringBuilder();
        // 变量
        for (String phone : hashSet) {
            if (validator(phone)){
                builder.append(phone+","+data).append(";");
            }else {
                // 异常手机号
                errPhones.add(phone);
            }
        }
        String datas = builder.toString();
        String[] rows = datas.split(";");
        String[][] dyns = new String[rows.length + 1][titleArr.length];
        dyns[0] = titleArr;
@@ -210,22 +236,45 @@
        }
        //请求参数
        DynSMSSendRequest sendRequest = new DynSMSSendRequest();
        sendRequest.setTemplateId(request.getTemplateId());
        sendRequest.setTemplateId(templateId);
        sendRequest.setDynData(dyns);
        // 发送
        ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(sendRequest);
        SMSSendRequest request = new SMSSendRequest();
        request.setTemplateId(templateId);
        request.setMessageContent(content);
        request.setUserNumber("");
        // 先保存结果记录
        SmsResult smsResult = saveSendResult(request, rows.length);
        SmsRecord smsRecord = new SmsRecord();
        if (null != smsResult){
            // 保存记录
            smsRecord = saveSendRecord(request, resultComResult.getCode().toString(), resultComResult.getMsg(), smsResult.getId());
            List<SmsRecord> list = new ArrayList<>();
            // 遍历保存
            for (String phone : hashSet) {
                SmsRecord smsRecord = new SmsRecord();
                smsRecord.setId(IdWorker.getId());
                smsRecord.setTel(phone);
                smsRecord.setContent(content);
                smsRecord.setTemplateId(templateId);
                smsRecord.setResultId(smsResult.getId());
                smsRecord.setResponseStatus(resultComResult.getCode().toString());
                smsRecord.setResponseMsg(resultComResult.getMsg());
                // 加入集合
                list.add(smsRecord);
            }
            // 批量保存记录
            smsRecordService.batchSaveSendRecord(list);
        }
        Map<String, Object> map = new HashMap<>(2);
        map.put("smsRecord",smsRecord);
        map.put("smsResult",smsResult);
        Integer diff = phones.size() - hashSet.size();
        if (resultComResult.getCode()==0){
            String successMsg = "发送成功!共提交号码 "+phones.size()+" 个,其中重复号码 "+diff+" 个,错误号码 "
                +errPhones.size()+" 个,发送成功号码 "+ hashSet.size() + " 个。";
            // 返回
            return R.data(200,successMsg,null);
        }
        String errorMsg = "发送失败!共提交号码 "+phones.size()+" 个,其中重复号码 "+diff+" 个,错误号码 "+errPhones.size()+
            " 个,发送异常号码 "+ hashSet.size()+" 个,异常原因" + resultComResult.getMsg() + "。";
        // 返回
        return map;
        return R.data(400,errorMsg,null);
    }
@@ -274,5 +323,23 @@
        return smsRecord;
    }
    /**
     * 校验手机号码
     */
    public static boolean validator(String phone) {
        if (null!=phone && !phone.equals("")) {
            String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
            if (phone.length() != 11) {
                return false;
            } else {
                Pattern p = Pattern.compile(regex);
                Matcher m = p.matcher(phone);
                boolean isMatch = m.matches();
                return isMatch;
            }
        }
        return false;
    }
}