zhongrj
2023-10-12 39b3d16e78a22e70e99341f366dcfa2c3e6519b9
智能外呼导入水库编号发送,新增水库同步到海康接口
15 files modified
3 files added
309 ■■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/excel/CallExcel.java 21 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/listener/ExcelListener.java 55 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java 31 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkVO.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/VideoVO.java 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java 39 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java 9 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java 39 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/AttResManagePersonClient.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttAdBaseMapper.java 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.java 13 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml 24 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttAdBaseService.java 2 ●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttResManagePersonService.java 9 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttAdBaseServiceImpl.java 4 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttResManagePersonServiceImpl.java 12 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/pom.xml
@@ -19,6 +19,11 @@
            <groupId>org.springblade</groupId>
            <artifactId>blade-starter-cache</artifactId>
        </dependency>
        <!--excel-->
        <dependency>
            <groupId>org.springblade</groupId>
            <artifactId>blade-starter-excel</artifactId>
        </dependency>
    </dependencies>
</project>
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/excel/CallExcel.java
New file
@@ -0,0 +1,21 @@
package cn.gistack.sm.intelligentCall.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;
import java.io.Serializable;
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class CallExcel implements Serializable {
    private static final long serialVersionUID = 1L;
    @ColumnWidth(15)
    @ExcelProperty("水库代码")
    private String waterCode;
}
skjcmanager/skjcmanager-service-api/skjcmanager-sm-api/src/main/java/cn/gistack/sm/intelligentCall/listener/ExcelListener.java
New file
@@ -0,0 +1,55 @@
package cn.gistack.sm.intelligentCall.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import java.util.ArrayList;
import java.util.List;
/**
 * 自定义excel 解析监听器
 * @param <T>
 */
public final class ExcelListener<T> extends AnalysisEventListener<T> {
    /**
     * 自定义用于暂时存储data
     * 可以通过实例获取该值
     */
    private List<T> datas = new ArrayList<>();
    /**
     * 每解析一行都会回调invoke()方法
     * @param object  读取后的数据对象
     * @param context 内容
     */
    @Override
    @SuppressWarnings("unchecked")
    public void invoke(Object object, AnalysisContext context) {
        T map = (T) object;
        //数据存储到list,供批量处理,或后续自己业务逻辑处理。
        datas.add(map);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        //解析结束销毁不用的资源
        //注意不要调用datas.clear(),否则getDatas为null
    }
    /**
     * 返回数据
     * @return 返回读取的数据集合
     **/
    public List<T> getDatas() {
        return datas;
    }
    /**
     * 设置读取的数据集合
     * @param datas 设置读取的数据集合
     **/
    public void setDatas(List<T> datas) {
        this.datas = datas;
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/constant/HkConstant.java
@@ -135,6 +135,11 @@
     */
    public static final String eventSubscriptionViewURLs = "/api/eventService/v1/eventSubscriptionView";
    /**
     * 区域的批量添加
     */
    public static final String batchAddURLs = "/api/resource/v1/region/batch/add";
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/controller/HkController.java
@@ -4,6 +4,8 @@
import cn.gistack.sm.hk.constant.ProtocolConstant;
import cn.gistack.sm.hk.service.HkService;
import cn.gistack.sm.hk.vo.HkVO;
import cn.gistack.sm.hk.vo.VideoVO;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -13,6 +15,8 @@
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static cn.gistack.sm.hk.util.GetCameraUtils.*;
@@ -310,4 +314,31 @@
        return R.data(common(null==hk.getType()?1:hk.getType(),HkConstant.presetsDeletionURLs, body));
    }
    /**
     * 同步水库设备信息
     * @param hk 水库设备
     * @return
     */
    @ApiOperation(value = "海康设备-同步水库设备信息", notes = "海康设备-同步水库设备信息")
    @PostMapping(value = "/syncVideo")
    public R syncVideo(@RequestBody HkVO hk) {
        /**
         * 组装请求参数
         */
        List<VideoVO> list = new ArrayList<>();
        VideoVO video = new VideoVO();
        video.setRegionName(hk.getRegionName());
        video.setRegionIndexCode(hk.getRegionIndexCode());
        video.setParentIndexCode("root000000");
        video.setRegionType(10);
        list.add(video);
        String body = JSON.toJSONString(list);
        /**
         * 调用接口并返回数据
         * post请求application/json类型参数;
         */
        return R.data(JSONObject.parseObject(common(null==hk.getType()?2:hk.getType(),HkConstant.batchAddURLs, body)));
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/HkVO.java
@@ -139,4 +139,14 @@
     * 扩展
     */
    private String expand;
    /**
     * 水库/区域名称
     */
    private String regionName;
    /**
     * 水库/区域编号
     */
    private String regionIndexCode;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/hk/vo/VideoVO.java
New file
@@ -0,0 +1,24 @@
package cn.gistack.sm.hk.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class VideoVO implements Serializable {
    private String parentIndexCode;
    /**
     * 水库名称
     */
    private String regionName;
    /**
     * 水库编号
     */
    private String regionIndexCode;
    private Integer regionType;
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/controller/CallController.java
@@ -2,18 +2,26 @@
import cn.gistack.sm.intelligentCall.entity.CallTaskResult;
import cn.gistack.sm.intelligentCall.entity.Scene;
import cn.gistack.sm.intelligentCall.excel.CallExcel;
import cn.gistack.sm.intelligentCall.listener.ExcelListener;
import cn.gistack.sm.intelligentCall.service.CallService;
import cn.gistack.sm.intelligentCall.service.ICallSmsNoticeTaskService;
import cn.gistack.sm.intelligentCall.vo.CallTaskResultVO;
import cn.gistack.sm.intelligentCall.vo.CallTaskStatistic;
import com.alibaba.excel.EasyExcel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
/**
@@ -177,4 +185,35 @@
        // 返回
        return R.data(callService.getCallResultListTemp(Condition.getPage(query),callTaskResult));
    }
    /**
     * 导入表格发送智能外呼
     * @param file excel文件
     * @param time 呼叫时间(空的话默认选择当前时间)
     * @return
     */
    @PostMapping("/import-call")
    public R importCall(MultipartFile file,String time){
        ExcelListener<CallExcel> listener = new ExcelListener<>();
        //headRowNumber(1)从第2行开始读取,使用getDatas()方法取出数据
        try {
            EasyExcel.read(file.getInputStream(), CallExcel.class, listener).headRowNumber(1).sheet(0).doRead();
        } catch (IOException e) {
            e.printStackTrace();
        }
        List<CallExcel> list = listener.getDatas();
        // 导入并返回
        return R.data(callService.importCall(list,time));
    }
    /**
     * 导出模板
     */
    @GetMapping("/export-template")
    @ApiOperation(value = "导出模板")
    public void exportTemplate(HttpServletResponse response) {
        List<CallExcel> list = new ArrayList<>();
        ExcelUtil.export(response, "智能外呼数据模板", "智能外呼数据表", list, CallExcel.class);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/CallService.java
@@ -2,6 +2,7 @@
import cn.gistack.sm.intelligentCall.entity.CallNotFillRecord;
import cn.gistack.sm.intelligentCall.excel.CallExcel;
import cn.gistack.sm.intelligentCall.vo.CallTaskResultVO;
import cn.gistack.sm.intelligentCall.vo.CallTaskStatistic;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -122,4 +123,12 @@
     * @return
     */
    List<String> createOutCallTaskByAlarm(Map<String, Object> map);
    /**
     * 导入表格发送智能外呼
     * @param list
     * @param time
     * @return
     */
    Object importCall(List<CallExcel> list,String time);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
@@ -4,12 +4,14 @@
import cn.gistack.sm.intelligentCall.constant.CallConstant;
import cn.gistack.sm.intelligentCall.constant.ZtConstant;
import cn.gistack.sm.intelligentCall.entity.Scene;
import cn.gistack.sm.intelligentCall.excel.CallExcel;
import cn.gistack.sm.intelligentCall.mapper.CallTaskMapper;
import cn.gistack.sm.intelligentCall.service.CallService;
import cn.gistack.sm.intelligentCall.vo.CallTaskResultVO;
import cn.gistack.sm.intelligentCall.vo.CallTaskStatistic;
import cn.gistack.sm.sjztmd.entity.AttAdBase;
import cn.gistack.sm.sjztmd.service.IAttAdBaseService;
import cn.gistack.sm.sjztmd.service.IAttResManagePersonService;
import cn.gistack.sm.sjztmd.vo.AttAdBaseVO;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
@@ -20,6 +22,7 @@
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
@@ -53,6 +56,9 @@
    @Autowired
    private BladeRedis bladeRedis;
    @Autowired
    private IAttResManagePersonService attResManagePersonService;
    @Autowired
    private AsyncCallService asyncCallService;
@@ -1225,4 +1231,37 @@
        // 不分页
        return callTaskMapper.getCallResultListTemp(null,callTaskResult,list);
    }
    /**
     * 导入表格发送智能外呼
     * @param list
     * @param time
     * @return
     */
    @Override
    public Object importCall(List<CallExcel> list,String time) {
        // 转换
        List<String> stringList = list.stream().map(CallExcel::getWaterCode).collect(Collectors.toList());
        // 通过水库代码获取水库及巡查责任人信息
        Set<Scene>  personList = attResManagePersonService.getPatrolPersonListByWaterCodeList(stringList);
        Map<String, Object> params = new HashMap<>();
        //传入调度时间和随机得到的人员信息进行任务的创建并返回
        params.put("list",setForListMap(personList));
        // 调度时间处理
        if (null!=time && !time.equals("")){
            params.put("taskScheduleTime",new SimpleDateFormat("yyyy-MM-dd").format(new Date())+ " " + time + ":00");
        }else {
            params.put("taskScheduleTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        }
        // 创建任务并返回结果
        List<String> task = createTask(params);
        if (null!=task.get(1) && !task.get(1).equals("")){
            String successMsg = "外呼任务创建成功";
            // 返回
            return R.data(200,successMsg,null);
        }
        String errorMsg = task.get(0);
        // 返回
        return R.data(400,errorMsg,null);
    }
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/feign/AttResManagePersonClient.java
@@ -81,7 +81,7 @@
     * @return
     */
    @Override
    public List<PersonVO> getUserListByResGuid(String res_cd,String areaList) {
    public List<PersonVO> getUserListByResGuid(String res_cd, String areaList) {
        return adBaseService.getPersonListByResGuid(res_cd,areaList);
    }
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttAdBaseMapper.java
@@ -1,13 +1,12 @@
package cn.gistack.sm.sjztmd.mapper;
import cn.gistack.common.node.TreeNode;
import cn.gistack.sm.sjztmd.vo.PersonVO;
import cn.gistack.sm.sjztmd.entity.AttAdBase;
import cn.gistack.sm.sjztmd.vo.AttAdBaseVO;
import cn.gistack.sm.sjztmd.vo.PersonVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.PostMapping;
import java.util.List;
import java.util.Map;
@@ -37,7 +36,7 @@
     * @param res_cd
     * @return
     */
    List<PersonVO> getPersonListByResGuid(@Param("res_cd")String res_cd,@Param("roleName") String areaList);
    List<PersonVO> getPersonListByResGuid(@Param("res_cd")String res_cd, @Param("roleName") String areaList);
    AttAdBaseVO getDetail(@Param("attAdBase") AttAdBase attAdBase);
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.java
@@ -1,5 +1,6 @@
package cn.gistack.sm.sjztmd.mapper;
import cn.gistack.sm.intelligentCall.entity.Scene;
import cn.gistack.sm.sjztmd.entity.AttResManagePerson;
import cn.gistack.sm.sjztmd.entity.PatrolResponsiblePerson;
import cn.gistack.sm.sjztmd.vo.PersonVO;
@@ -59,8 +60,16 @@
     * @return
     */
    List<PersonVO> getCityCountyPersonListByResGuid(@Param("adCode") String res_cd,
                                                    @Param("roleAlias") String roleAlias,
                                                    @Param("type") String type);
                                                         @Param("roleAlias") String roleAlias,
                                                         @Param("type") String type);
    List<PatrolResponsiblePerson> getPatrolResponsiblePersonByResCdList(@Param("ids") List<String> reservoirList);
    /**
     * 通过水库代码获取水库及巡查责任人信息
     * @param list
     * @return
     */
    @DS("zt")
    Set<Scene>  getPatrolPersonListByWaterCodeList(@Param("list") List<String> list);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/mapper/AttResManagePersonMapper.xml
@@ -175,6 +175,30 @@
        group by b."user_phone"
    </select>
    <!--通过水库代码获取巡查责任人及技术责任人手机号-->
    <select id="getPatrolPersonListByWaterCodeList" resultType="cn.gistack.sm.intelligentCall.entity.Scene">
        SELECT
        a."guid" as waterCode,
        a."name" as waterName,
        b."user_name" as username,
        b."user_phone" as userId,
        b."user_phone" as phone
        FROM SJZT_MD."att_res_base"  a
        LEFT JOIN SJZT_MD."att_res_manage_person" b ON a."guid" = b."res_guid"
        where 1=1 and b."type" = 5
        <choose>
            <when test="list!=null and list.size()>0">
                and "sk_code" in
                <foreach collection="list" item="id" open="(" close=")" separator=",">
                   #{id}
                </foreach>
            </when>
            <otherwise>
                and "sk_code" in ('')
            </otherwise>
        </choose>
    </select>
    <!--根据水库编号查询市县水利部人员姓名及联系方式-->
    <select id="getCityCountyPersonListByResGuid" resultType="cn.gistack.sm.sjztmd.vo.PersonVO">
        select real_name as name,phone,#{type} as type from YWXT.blade_user bu
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttAdBaseService.java
@@ -35,7 +35,7 @@
     * @param areaList
     * @return
     */
    List<PersonVO> getPersonListByResGuid(String res_cd,String areaList);
    List<PersonVO> getPersonListByResGuid(String res_cd, String areaList);
    /**
     * 获取详情
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/IAttResManagePersonService.java
@@ -1,9 +1,9 @@
package cn.gistack.sm.sjztmd.service;
import cn.gistack.sm.intelligentCall.entity.Scene;
import cn.gistack.sm.sjztmd.entity.AttResManagePerson;
import cn.gistack.sm.sjztmd.entity.PatrolResponsiblePerson;
import cn.gistack.sm.sjztmd.vo.PersonVO;
import cn.gistack.sm.sjztmd.vo.UserPersonVO;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.tool.api.R;
@@ -76,4 +76,11 @@
     * @return
     */
    List<PatrolResponsiblePerson> getPatrolResponsiblePersonByResCdList(List<String> reservoirList);
    /**
     * 通过水库代码获取水库及巡查责任人信息
     * @param stringList
     * @return
     */
    Set<Scene>  getPatrolPersonListByWaterCodeList(List<String> stringList);
}
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttAdBaseServiceImpl.java
@@ -2,11 +2,11 @@
import cn.gistack.common.node.TreeNode;
import cn.gistack.common.utils.NodeTreeUtil;
import cn.gistack.sm.sjztmd.vo.PersonVO;
import cn.gistack.sm.sjztmd.entity.AttAdBase;
import cn.gistack.sm.sjztmd.mapper.AttAdBaseMapper;
import cn.gistack.sm.sjztmd.service.IAttAdBaseService;
import cn.gistack.sm.sjztmd.vo.AttAdBaseVO;
import cn.gistack.sm.sjztmd.vo.PersonVO;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@@ -75,7 +75,7 @@
     * @return
     */
    @Override
    public List<PersonVO> getPersonListByResGuid(String res_cd,String areaList) {
    public List<PersonVO> getPersonListByResGuid(String res_cd, String areaList) {
        return baseMapper.getPersonListByResGuid(res_cd,areaList);
    }
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sjztmd/service/impl/AttResManagePersonServiceImpl.java
@@ -1,6 +1,6 @@
package cn.gistack.sm.sjztmd.service.impl;
import cn.gistack.sm.sjztmd.entity.AttResBase;
import cn.gistack.sm.intelligentCall.entity.Scene;
import cn.gistack.sm.sjztmd.entity.AttResManagePerson;
import cn.gistack.sm.sjztmd.entity.PatrolResponsiblePerson;
import cn.gistack.sm.sjztmd.mapper.AttResManagePersonMapper;
@@ -178,4 +178,14 @@
    public List<PatrolResponsiblePerson> getPatrolResponsiblePersonByResCdList(List<String> reservoirList) {
        return baseMapper.getPatrolResponsiblePersonByResCdList(reservoirList);
    }
    /**
     * 通过水库代码获取水库及巡查责任人信息
     * @param stringList
     * @return
     */
    @Override
    public Set<Scene>  getPatrolPersonListByWaterCodeList(List<String> stringList) {
        return baseMapper.getPatrolPersonListByWaterCodeList(stringList);
    }
}