第一次提交

main
吴顺杰 5 months ago
commit 5ad4e3799a

39
.gitignore vendored

@ -0,0 +1,39 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
/.idea
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yingji</groupId>
<artifactId>yingjiAlgorithms</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>yingjiAlgorithms</name>
<description>应急算法</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.6</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.2.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.25</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.41</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<!--打包成jar包时的名字-->
<finalName>algorithms</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.yingji.YingjiAlgorithmsApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,19 @@
package com.yingji;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author wu
* @since 2024/2/26 10:24
*/
@SpringBootApplication
@MapperScan("com.yingji.mapper")
public class YingjiAlgorithmsApplication {
public static void main(String[] args) {
SpringApplication.run(YingjiAlgorithmsApplication.class, args);
}
}

@ -0,0 +1,93 @@
package com.yingji.base.constant;
/**
*
*
* @author ruoyi
*/
public class HttpStatus {
/**
*
*/
public static final int SUCCESS = 200;
/**
*
*/
public static final int CREATED = 201;
/**
*
*/
public static final int ACCEPTED = 202;
/**
*
*/
public static final int NO_CONTENT = 204;
/**
*
*/
public static final int MOVED_PERM = 301;
/**
*
*/
public static final int SEE_OTHER = 303;
/**
*
*/
public static final int NOT_MODIFIED = 304;
/**
*
*/
public static final int BAD_REQUEST = 400;
/**
*
*/
public static final int UNAUTHORIZED = 401;
/**
* 访
*/
public static final int FORBIDDEN = 403;
/**
*
*/
public static final int NOT_FOUND = 404;
/**
* http
*/
public static final int BAD_METHOD = 405;
/**
*
*/
public static final int CONFLICT = 409;
/**
*
*/
public static final int UNSUPPORTED_TYPE = 415;
/**
*
*/
public static final int ERROR = 500;
/**
*
*/
public static final int NOT_IMPLEMENTED = 501;
/**
*
*/
public static final int WARN = 601;
}

@ -0,0 +1,78 @@
package com.yingji.base.controller;
import com.yingji.base.domain.AjaxResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* web
*
* @author ruoyi
*/
public class BaseController {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
*
*/
public AjaxResult success() {
return AjaxResult.success();
}
/**
*
*/
public AjaxResult error() {
return AjaxResult.error();
}
/**
*
*/
public AjaxResult success(String message) {
return AjaxResult.success(message);
}
/**
*
*/
public AjaxResult success(Object data) {
return AjaxResult.success(data);
}
/**
*
*/
public AjaxResult error(String message) {
return AjaxResult.error(message);
}
/**
*
*/
public AjaxResult warn(String message) {
return AjaxResult.warn(message);
}
/**
*
*
* @param rows
* @return
*/
protected AjaxResult toAjax(int rows) {
return rows > 0 ? AjaxResult.success() : AjaxResult.error();
}
/**
*
*
* @param result
* @return
*/
protected AjaxResult toAjax(boolean result) {
return result ? success() : error();
}
}

@ -0,0 +1,202 @@
package com.yingji.base.domain;
import cn.hutool.core.bean.BeanUtil;
import com.yingji.base.constant.HttpStatus;
import java.util.HashMap;
import java.util.Objects;
/**
*
*
* @author ruoyi
*/
public class AjaxResult extends HashMap<String, Object> {
/**
*
*/
public static final String CODE_TAG = "code";
/**
*
*/
public static final String MSG_TAG = "msg";
/**
*
*/
public static final String DATA_TAG = "data";
private static final long serialVersionUID = 1L;
/**
* AjaxResult 使
*/
public AjaxResult() {
}
/**
* AjaxResult
*
* @param code
* @param msg
*/
public AjaxResult(int code, String msg) {
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg);
}
/**
* AjaxResult
*
* @param code
* @param msg
* @param data
*/
public AjaxResult(int code, String msg, Object data) {
super.put(CODE_TAG, code);
super.put(MSG_TAG, msg);
if (BeanUtil.isNotEmpty(data)) {
super.put(DATA_TAG, data);
}
}
/**
*
*
* @return
*/
public static AjaxResult success() {
return AjaxResult.success("操作成功");
}
/**
*
*
* @return
*/
public static AjaxResult success(Object data) {
return AjaxResult.success("操作成功", data);
}
/**
*
*
* @param msg
* @return
*/
public static AjaxResult success(String msg) {
return AjaxResult.success(msg, null);
}
/**
*
*
* @param msg
* @param data
* @return
*/
public static AjaxResult success(String msg, Object data) {
return new AjaxResult(HttpStatus.SUCCESS, msg, data);
}
/**
*
*
* @param msg
* @return
*/
public static AjaxResult warn(String msg) {
return AjaxResult.warn(msg, null);
}
/**
*
*
* @param msg
* @param data
* @return
*/
public static AjaxResult warn(String msg, Object data) {
return new AjaxResult(HttpStatus.WARN, msg, data);
}
/**
*
*
* @return
*/
public static AjaxResult error() {
return AjaxResult.error("操作失败");
}
/**
*
*
* @param msg
* @return
*/
public static AjaxResult error(String msg) {
return AjaxResult.error(msg, null);
}
/**
*
*
* @param msg
* @param data
* @return
*/
public static AjaxResult error(String msg, Object data) {
return new AjaxResult(HttpStatus.ERROR, msg, data);
}
/**
*
*
* @param code
* @param msg
* @return
*/
public static AjaxResult error(int code, String msg) {
return new AjaxResult(code, msg, null);
}
/**
*
*
* @return
*/
public boolean isSuccess() {
return Objects.equals(HttpStatus.SUCCESS, this.get(CODE_TAG));
}
/**
*
*
* @return
*/
public boolean isWarn() {
return Objects.equals(HttpStatus.WARN, this.get(CODE_TAG));
}
/**
*
*
* @return
*/
public boolean isError() {
return Objects.equals(HttpStatus.ERROR, this.get(CODE_TAG));
}
/**
* 便
*
* @param key
* @param value
* @return
*/
@Override
public AjaxResult put(String key, Object value) {
super.put(key, value);
return this;
}
}

@ -0,0 +1,26 @@
package com.yingji.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author wu
* @since 2024/2/26 11:28
*/
@Configuration
public class MybatisPlusConfig {
/**
*
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加
//interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
return interceptor;
}
}

@ -0,0 +1,74 @@
package com.yingji.config;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
/**
* Swagger2
*
* @author ruoyi
*/
@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {
/**
* swagger
*/
@Value("${knife4j.enable}")
private boolean enabled;
/**
* API
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
// 是否启用Swagger
.enable(enabled)
//分组名称
.groupName("应急算法")
// 用来创建该API的基本信息展示在文档的页面中自定义展示的信息
.apiInfo(apiInfo())
// 设置哪些接口暴露给Swagger展示
.select()
// 扫描所有有注解的api用这种方式更灵活
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 扫描指定包中的swagger注解
// .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
// 扫描所有 .apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
// .pathMapping(pathMapping)
// 排除mybatis-plus的分页参数
.ignoredParameterTypes(Page.class, IPage.class);
}
/**
*
*/
private ApiInfo apiInfo() {
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
.title("应急算法")
// 描述
.description("描述:用于应急算法")
// 版本
.version("版本号:" + 1)
.build();
}
}

@ -0,0 +1,131 @@
package com.yingji.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yingji.base.controller.BaseController;
import com.yingji.base.domain.AjaxResult;
import com.yingji.entity.Alarm;
import com.yingji.entity.dto.request.AlarmFindRequest;
import com.yingji.service.AlarmService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;
/**
* (Alarm)
*
* @author wu
* @since 2024-05-06 09:15:01
*/
@RestController
@RequestMapping("algorithms/alarm")
@Api(tags = "报警事件")
public class AlarmController extends BaseController {
/**
*
*/
@Resource
private AlarmService alarmService;
/**
*
*
* @param page
* @param req
* @return
*/
@GetMapping
@ApiOperation(value = "分页条件查询报警事件", response = Alarm.class)
public AjaxResult page(Page<Alarm> page, AlarmFindRequest req) {
return success(alarmService.page(page, req));
}
/**
*
*
* @param req
* @return
*/
@GetMapping("/findAll")
@ApiOperation(value = "条件查询所有报警事件", response = Alarm.class)
public AjaxResult findAll(AlarmFindRequest req) {
return success(alarmService.findAll(req));
}
/**
*
*
* @param id
* @return
*/
@GetMapping("{id}")
@ApiOperation(value = "通过主键查询单条报警事件", response = Alarm.class)
public AjaxResult getById(@PathVariable Serializable id) {
return success(alarmService.getById(id));
}
/**
*
*
* @param alarm
* @return
*/
@PostMapping
@ApiOperation(value = "新增报警事件", response = Alarm.class)
public AjaxResult insert(@RequestBody Alarm alarm) {
return success(alarmService.save(alarm));
}
/**
*
*
* @param alarm
* @return
*/
@PutMapping
@ApiOperation(value = "修改报警事件")
public AjaxResult update(@RequestBody Alarm alarm) {
return success(alarmService.updateById(alarm));
}
/**
*
*
* @param idList
* @return
*/
@DeleteMapping
@ApiOperation(value = "删除报警事件")
public AjaxResult delete(@RequestParam("idList") List<Long> idList) {
return success(alarmService.removeByIds(idList));
}
/**
*
*
* @param startTime
* @param size
* @return
*/
@GetMapping("/synchronous")
@ApiOperation(value = "同步数据")
public AjaxResult synchronous(String startTime, Integer size) {
alarmService.synchronous(startTime,size);
return success();
}
}

@ -0,0 +1,35 @@
package com.yingji.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @author wu
* @since 2024/4/30 4:17
*/
@Data
public class AcceptEvents implements Serializable {
private static final long serialVersionUID = 2498572602663676559L;
private String AlarmTelephone;
private String DiseaseJudge;
private String PatientName;
private String PatientSex;
private String PatientAge;
private String AcceptType;
private String ResponsibleRecipient;
private String WaitAddress;
private String SendAddress;
private String RingDateTime;
private Date StartAcceptDateTime;
private Date EndAcceptDateTime;
private Date SendOrderDateTime;
private String EventAddress;
private String AcceptId;
private String EventId;
private String AcceptOrder;
}

@ -0,0 +1,148 @@
package com.yingji.entity;
import cn.hutool.core.annotation.Alias;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* (Alarm)
*
* @author wu
* @since 2024-05-07 14:50:30
*/
@Data
@ApiModel("实体类")
@TableName(value = "alarm")
public class Alarm implements Serializable {
private static final long serialVersionUID = -61131421311961793L;
/**
* id
*/
@ApiModelProperty(value = "主键id")
@TableId(type = IdType.AUTO)
private Long emergencyEventId;
private Integer emergencyEventSource;
private Integer emergencyEventStatus;
private Integer warnResponseStatus;
private Integer emergencyResponseStatus;
private String emergencyEventTitle;
private Integer emergencyEventType;
private Integer emergencyEventLevel;
/**
*
*/
@ApiModelProperty(value = "报警时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime emergencyEventTime;
/**
*
*/
@ApiModelProperty(value = "报警内容")
@Alias("bjnr")
private String emergencyEventDesc;
/**
*
*/
@Alias("sfdd")
@ApiModelProperty(value = "报警地址")
private String emergencyEventAddress;
private String emergencyEventArea;
private Double emergencyEventLon;
private Double emergencyEventLat;
private String submitUnit;
private String submitUnitContact;
private String submitUnitTelephone;
private String reportPerson;
private String reportPersonTelephone;
private String remark;
private String fileUrls;
/**
* 0 1
*/
@ApiModelProperty(value = "是否删除 0未删除 1删除")
private Integer delFlag;
/**
*
*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**
*
*/
@ApiModelProperty(value = "创建时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
*
*/
@ApiModelProperty(value = "最后更新人")
private String updateBy;
/**
*
*/
@ApiModelProperty(value = "最后更新时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
private String sendOutTimes;
private Long groupId;
private Integer isRehearsal;
/**
*
*/
@ApiModelProperty(value = "报警电话")
@Alias("bjdh")
private String alarmPhoneNumber;
/**
* id
*/
@ApiModelProperty(value = "源id")
private String sourceId;
private Integer isJudged;
private String eventDetail;
/**
*
*/
@ApiModelProperty(value = "预警大类")
private String aiCategories;
/**
*
*/
@ApiModelProperty(value = "预警小类")
private String aiSubCategories;
/**
*
*/
@ApiModelProperty(value = "紧急程度")
private String aiLevel;
/**
*
*/
@ApiModelProperty(value = "紧急系数")
private Double aiNum;
}

@ -0,0 +1,22 @@
package com.yingji.entity;
import lombok.Data;
import java.io.Serializable;
/**
* @author wu
* @since 2024/4/30 4:18
*/
@Data
public class Amb implements Serializable {
private static final long serialVersionUID = -9140135874884043915L;
private String PlateNumber;
private String RealSign;
private String AmbCode;
private String StationName;
private String AmbType;
private String AmbPhone;
}

@ -0,0 +1,36 @@
package com.yingji.entity;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
* (Source)
*
* @author wu
* @since 2024-05-07 18:03:09
*/
@Data
@ApiModel("实体类")
@TableName(value = "source")
public class Source implements Serializable {
private static final long serialVersionUID = -80185849209851185L;
/**
* id
*/
@ApiModelProperty(value = "主键id")
private Long id;
/**
* id
*/
@ApiModelProperty(value = "任务id")
private String sourceId;
}

@ -0,0 +1,37 @@
package com.yingji.entity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @author wu
* @since 2024/4/30 4:23
*/
@Data
public class Task implements Serializable {
private static final long serialVersionUID = 4118581272605160572L;
private Boolean IsOver;
private String RealSendAddress;
private Date TaskCreatedDateTime;
private Date AcceptOrderDateTime;
private Date OutAmbDateTime;
private Date ArriveSceneDateTime;
private Date LeaveSceneDateTime;
private Date ArriveHospitalDateTime;
private Date ComplatedDateTime;
private Date ReturnStationDateTime;
private Boolean IsNormalOver;
private String AbnormalReason;
private String Driver;
private String Doctor;
private String Stretcher;
private String Nurse;
private String StationName;
private String TaskId;
private String AcceptOrder;
private String AcceptId;
private String EventId;
}

@ -0,0 +1,19 @@
package com.yingji.entity;
import lombok.Data;
import java.io.Serializable;
/**
* @author wu
* @since 2024/4/30 4:19
*/
@Data
public class TaskInfos implements Serializable {
private static final long serialVersionUID = 4118581272605160572L;
private Amb Amb;
private Task Task;
}

@ -0,0 +1,32 @@
package com.yingji.entity.dto.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 120
*
* @author wu
* @since 2024/4/30 4:09
*/
@Data
@ApiModel(value = "120获取事件请求类")
public class AccidentRequest implements Serializable {
private static final long serialVersionUID = -3450693580974529886L;
/**
*
*/
@ApiModelProperty(value = "开始时间字符串")
private String StartDateTime;
/**
*
*/
@ApiModelProperty(value = "结束时间字符串")
private String EndDateTime;
}

@ -0,0 +1,90 @@
package com.yingji.entity.dto.request;
import cn.hutool.core.annotation.Alias;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
* Alarm
*
* @author wu
* @since 2024/4/30 3:59
*/
@ApiModel(value = "Alarm查询请求类")
@Data
public class AlarmFindRequest implements Serializable {
private static final long serialVersionUID = 5773800327954649047L;
/**
*
*/
@ApiModelProperty("开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;
/**
*
*/
@ApiModelProperty("结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
/**
*
*/
@ApiModelProperty(value = "报警内容")
private String emergencyEventDesc;
/**
*
*/
@ApiModelProperty(value = "报警地址")
private String emergencyEventAddress;
/**
*
*/
@ApiModelProperty(value = "报警电话")
private String alarmPhoneNumber;
/**
*
*/
@ApiModelProperty(value = "预警大类")
private String aiCategories;
/**
*
*/
@ApiModelProperty(value = "预警小类")
private String aiSubCategories;
/**
*
*/
@ApiModelProperty(value = "紧急程度")
private String aiLevel;
/**
*
*/
@ApiModelProperty(value = "紧急系数最小值")
private Double aiNumMin;
/**
*
*/
@ApiModelProperty(value = "紧急系数最大值")
private Double aiNumMax;
}

@ -0,0 +1,44 @@
package com.yingji.entity.dto.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 110
*
* @author wu
* @since 2024/4/30 3:59
*/
@ApiModel(value = "110报警请求类")
@Data
public class AlarmRequest implements Serializable {
private static final long serialVersionUID = 7661630897162054093L;
/**
* getId / getValue
*/
@ApiModelProperty(value = "类型getId / getValue", required = true)
private String type;
/**
* / Id
*/
@ApiModelProperty(value = "值(时间 / Id", required = true)
private String value;
/**
*
*/
@ApiModelProperty(value = "当前页 默认1")
private Integer pageIndex;
/**
*
*/
@ApiModelProperty(value = "每页显示条数 默认10")
private Integer pageSize;
}

@ -0,0 +1,38 @@
package com.yingji.entity.dto.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* 120token
*
* @author wu
* @since 2024/4/30 4:05
*/
@Data
@ApiModel(value = "120token请求类")
public class TokenRequest implements Serializable {
private static final long serialVersionUID = -2538907503968466851L;
/**
* key admin
*/
@ApiModelProperty(value = "key")
private String AKey;
/**
* secret anchor120
*/
@ApiModelProperty(value = "secret")
private String Asecret;
/**
*
*/
@ApiModelProperty(value = "当前时间字符串")
private String AccessDateTime;
}

@ -0,0 +1,39 @@
package com.yingji.entity.dto.response;
import com.yingji.entity.AcceptEvents;
import com.yingji.entity.TaskInfos;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author wu
* @since 2024/4/30 4:24
*/
@Data
public class EventsResponse implements Serializable {
private static final long serialVersionUID = -3894493286879970663L;
private List<AcceptEvents> AcceptEvents;
private List<TaskInfos> TaskInfos;
private String EventName;
private String EventType;
private String EventLevel;
private Date EventDateTime;
private String EventDescribe;
private String EventArea;
private String EventAddress;
private Double EventLongitude;
private Double EventLatitude;
private String AlarmUnit;
private String AlarmUnitContactor;
private String AlarmUnitTelephone;
private Integer SendAmbCount;
private String AttachmentInfo;
private String Remark;
private String EventId;
}

@ -0,0 +1,23 @@
package com.yingji.entity.dto.response;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
*
*
* @author wu
* @since 2024/4/30 4:16
*/
@Data
public class GeneralResponse implements Serializable {
private static final long serialVersionUID = 3346787118665022563L;
private List<Object> data;
private String msg;
private int code;
}

@ -0,0 +1,36 @@
package com.yingji.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yingji.entity.Alarm;
import com.yingji.entity.dto.request.AlarmFindRequest;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* (Alarm)访
*
* @author wu
* @since 2024-05-06 09:15:01
*/
public interface AlarmMapper extends BaseMapper<Alarm> {
/**
*
*
* @param page
* @param req
* @return
*/
Page<Alarm> page(Page<Alarm> page, @Param("req") AlarmFindRequest req);
/**
*
*
* @param req
* @return
*/
List<Alarm> findAll(@Param("req") AlarmFindRequest req);
}

@ -0,0 +1,31 @@
package com.yingji.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yingji.entity.Source;
import java.util.List;
/**
* (Source)访
*
* @author wu
* @since 2024-05-07 18:03:09
*/
public interface SourceMapper extends BaseMapper<Source> {
/**
* id
*
* @param list id
*/
void addList(List<String> list);
/**
* sourceId
*
* @return SourceIdList
*/
List<String> findSourceAll();
}

@ -0,0 +1,79 @@
package com.yingji.quartz;
import cn.hutool.core.util.StrUtil;
import com.yingji.entity.dto.request.AlarmRequest;
import com.yingji.service.AlarmService;
import com.yingji.service.SourceService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
/**
* 110
*
* @author wu
* @since 2024/05/06 10:18
*/
@Configuration
@EnableScheduling
public class AlarmQuartz {
public static final Logger log = LoggerFactory.getLogger(AlarmQuartz.class);
@Resource
private AlarmService alarmService;
@Resource
private SourceService sourceService;
/**
* id
*/
@Scheduled(cron = "0 */5 * * * ? ")
private void savaData() {
// 获取token
String token = alarmService.getToken();
if (StrUtil.isEmpty(token)) {
return;
}
// 获取五分钟前的时间
LocalDateTime yesterday = LocalDateTime.now().minusMinutes(5);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmm");
String yesterdayStr = yesterday.format(formatter) + "00";
// 定义起始页
int pageIndex = 1;
// 定义每页显示条数
int pageSize = 5000;
// 定义总数据条数
int size = 0;
// 定义type
String type = "getId";
// 查询id条件
AlarmRequest req = new AlarmRequest();
req.setType(type);
req.setValue(yesterdayStr);
req.setPageIndex(pageIndex);
req.setPageSize(pageSize);
while (true) {
List<String> data = alarmService.findDataIdList(req, token);
if (data == null) {
return;
}
sourceService.addList(data);
size += data.size();
if (data.size() == pageSize) {
req.setPageIndex(pageIndex++);
log.info("第" + pageIndex + "页==========================" + size + "条数据");
} else {
break;
}
}
}
}

@ -0,0 +1,81 @@
package com.yingji.quartz;
import cn.hutool.core.util.StrUtil;
import com.yingji.entity.Alarm;
import com.yingji.entity.dto.request.AlarmRequest;
import com.yingji.service.AlarmService;
import com.yingji.service.SourceService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* 110
*
* @author wu
* @since 2024/05/06 10:18
*/
@Configuration
@EnableScheduling
@Transactional(rollbackFor = Exception.class)
public class SaveAlarmQuartz {
public static final Logger log = LoggerFactory.getLogger(SaveAlarmQuartz.class);
@Resource
private AlarmService alarmService;
@Resource
private SourceService sourceService;
@Scheduled(cron = "0 */1 * * * ? ")
private void savaData() {
// 查询所有id
List<String> data = sourceService.findSourceAll();
// 查询数据条件
AlarmRequest alarmRequest = new AlarmRequest();
alarmRequest.setType("getValue");
alarmRequest.setPageIndex(1);
alarmRequest.setPageSize(10);
// 定义成功条数
int successNum = 0;
// 定义失败条数
int failuresNum = 0;
List<Alarm> list = new ArrayList<>();
if (data == null) {
return;
}
// 获取token
String token = alarmService.getToken();
if (StrUtil.isEmpty(token)) {
return;
}
for (String x : data) {
try {
alarmRequest.setValue(x);
Alarm alarm = alarmService.findDataList(alarmRequest, token);
if (alarm != null) {
alarm.setSourceId(x);
list.add(alarm);
sourceService.delBySourceId(x);
successNum++;
Thread.sleep(2000);
}
} catch (Exception e) {
failuresNum++;
log.info("==========================" + "id:" + x, "更新数据失败");
log.info("失败更新=========================" + failuresNum + "条数据");
}
}
alarmService.saveBatch(list);
log.info("成功更新=========================" + successNum + "条数据");
}
}

@ -0,0 +1,70 @@
package com.yingji.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yingji.entity.Alarm;
import com.yingji.entity.dto.request.AlarmFindRequest;
import com.yingji.entity.dto.request.AlarmRequest;
import java.util.List;
/**
* (Alarm)
*
* @author wu
* @since 2024-05-06 09:15:01
*/
public interface AlarmService extends IService<Alarm> {
/**
*
*
* @param startTime
* @param size
*/
void synchronous(String startTime, Integer size);
/**
* Id
*
* @param req
* @param token token
* @return IdList
*/
List<String> findDataIdList(AlarmRequest req, String token);
/**
*
*
* @param req
* @param token token
* @return List
*/
Alarm findDataList(AlarmRequest req, String token);
/**
* 110token
*
* @return token
*/
String getToken();
/**
*
*
* @param page
* @param req
* @return
*/
Page<Alarm> page(Page<Alarm> page, AlarmFindRequest req);
/**
*
*
* @param req
* @return
*/
List<Alarm> findAll(AlarmFindRequest req);
}

@ -0,0 +1,36 @@
package com.yingji.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yingji.entity.Source;
import java.util.List;
/**
* (Source)
*
* @author wu
* @since 2024-05-07 18:03:09
*/
public interface SourceService extends IService<Source> {
/**
* id
*
* @param list id
*/
void addList(List<String> list);
/**
* sourceId
*
* @return SourceIdList
*/
List<String> findSourceAll();
/**
* sourceId
* @param sourceId id
*/
void delBySourceId(String sourceId);
}

@ -0,0 +1,234 @@
package com.yingji.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yingji.entity.Alarm;
import com.yingji.entity.dto.request.AlarmFindRequest;
import com.yingji.entity.dto.request.AlarmRequest;
import com.yingji.mapper.AlarmMapper;
import com.yingji.service.AlarmService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* (Alarm)
*
* @author wu
* @since 2024-05-06 09:15:01
*/
@Service("alarmService")
public class AlarmServiceImpl extends ServiceImpl<AlarmMapper, Alarm> implements AlarmService {
public static final Logger log = LoggerFactory.getLogger(AlarmServiceImpl.class);
@Value("${clientId}")
private String clientId;
@Value("${clientSecret}")
private String clientSecret;
@Value("${getToken}")
private String getToken;
@Value("${specificWarn}")
private String specificWarn;
/**
* base64
*
* @return base64
*/
public String findBase() {
String str = clientId + ":" + clientSecret;
return Base64.encode(str);
}
/**
*
*
* @param startTime
* @param size
*/
@Override
public void synchronous(String startTime, Integer size) {
// 获取token
String token = getToken();
if (StrUtil.isEmpty(token)) {
return;
}
// 定义起始页
int pageIndex = 1;
// 定义每页显示条数
int pageSize = 10;
// 保存获取的条数
int total = 0;
// 定义type
String type = "getId";
// 查询id条件
AlarmRequest req = new AlarmRequest();
req.setType(type);
req.setValue(startTime);
req.setPageIndex(pageIndex);
req.setPageSize(pageSize);
// 查询数据条件
AlarmRequest alarmRequest = new AlarmRequest();
alarmRequest.setType("getValue");
alarmRequest.setPageIndex(1);
alarmRequest.setPageSize(10);
while (true) {
total += pageSize;
List<String> data = findDataIdList(req, token);
if (data == null) {
return;
}
log.info("=======================================");
log.info("数据的条数为:" + data.size());
List<Alarm> list = new ArrayList<>();
data.forEach(x -> {
alarmRequest.setValue(x);
Alarm alarm = findDataList(alarmRequest, token);
alarm.setSourceId(x);
list.add(alarm);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
log.info("睡眠1秒失败");
}
});
saveBatch(list);
// 总条数
if (total >= size) {
return;
}
if (data.size() == pageSize) {
req.setPageIndex(pageIndex++);
log.info("第" + pageIndex + "页==========================" + list.size() + "条数据");
} else {
break;
}
}
}
/**
* Id
*
* @param req
* @param token token
* @return IdList
*/
@Override
public List<String> findDataIdList(AlarmRequest req, String token) {
String bodyJson = JSONObject.toJSONString(req);
List<String> records = null;
// 获取id
String body = HttpRequest.post(specificWarn).header("Authorization", "Basic " + token).body(bodyJson).execute().body();
JSONObject json = JSONObject.parse(body);
Object response = json.get("response");
if (BeanUtil.isNotEmpty(response)) {
String responseStr = JSONUtil.toJsonStr(response);
JSONObject res = JSONObject.parse(responseStr);
String recordsStr = JSONUtil.toJsonStr(res.get("records"));
if (StrUtil.isNotEmpty(recordsStr)) {
records = JSONUtil.toList(recordsStr, String.class);
}
}
return records;
}
/**
*
*
* @param req
* @param token token
* @return List
*/
@Override
public Alarm findDataList(AlarmRequest req, String token) {
String bodyJson = JSONObject.toJSONString(req);
Alarm records = null;
// 获取id
String body = HttpRequest.post(specificWarn).header("Authorization", "Basic " + token).header("Content-Type", "application/json").body(bodyJson).execute().body();
log.info("===============================");
log.info("body数据为:" + body);
try {
JSONObject json = JSONObject.parse(body);
Object response = json.get("response");
if (BeanUtil.isNotEmpty(response)) {
String recordsStr = JSONUtil.toJsonStr(response);
records = JSONUtil.toBean(recordsStr, Alarm.class);
JSONObject recordsJson = JSONObject.parse(recordsStr);
Object bjdhsj = recordsJson.get("bjdhsj");
String bjdhsjStr = JSONUtil.toJsonStr(bjdhsj);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").withZone(ZoneId.systemDefault());
LocalDateTime emergencyEventTime = LocalDateTime.parse(bjdhsjStr, formatter);
records.setEmergencyEventTime(emergencyEventTime);
records.setCreateTime(LocalDateTime.now());
records.setUpdateTime(LocalDateTime.now());
records.setDelFlag(0);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return records;
}
/**
* 110token
*
* @return token
*/
@Override
public String getToken() {
String accessToken = null;
String body = HttpRequest.get(getToken).header("Authorization", "Basic QkZTaFQzL1d3UGhaSlFkTDhlNEZkblExMWgwUU9lS3FCZG4reGVzQ1NKR2xESEtQazVmeG5tbkxrMW9ua20zWXpkZmpFMGdMR0VaN0g3dmZMczIxc0dNPTpHdGJnUmZOSW1Yam1CcVcwbnB4VWlHaS9zMG1iNVpkdlhBTnFVQ2dtSW00PQ==").header("Content-Type", "application/json").form("grant_type", "client_credentials").execute().body();
JSONObject json = JSONObject.parse(body);
Object response = json.get("response");
if (BeanUtil.isNotEmpty(response)) {
String recordsStr = JSONUtil.toJsonStr(response);
JSONObject res = JSONObject.parse(recordsStr);
accessToken = (String) res.get("access_token");
}
log.info("=======================================");
log.info("token为:" + accessToken);
return accessToken;
}
/**
*
*
* @param page
* @param req
* @return
*/
@Override
public Page<Alarm> page(Page<Alarm> page, AlarmFindRequest req) {
return baseMapper.page(page,req);
}
/**
*
*
* @param req
* @return
*/
@Override
public List<Alarm> findAll(AlarmFindRequest req) {
return baseMapper.findAll(req);
}
}

@ -0,0 +1,55 @@
package com.yingji.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yingji.entity.Source;
import com.yingji.mapper.SourceMapper;
import com.yingji.service.SourceService;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* (Source)
*
* @author wu
* @since 2024-05-07 18:03:09
*/
@Service("sourceService")
public class SourceServiceImpl extends ServiceImpl<SourceMapper, Source> implements SourceService {
/**
* id
*
* @param list id
*/
@Override
public void addList(List<String> list) {
baseMapper.addList(list);
}
/**
* sourceId
*
* @return SourceIdList
*/
@Override
public List<String> findSourceAll() {
return baseMapper.findSourceAll();
}
/**
* sourceId
*
* @param sourceId id
*/
@Override
public void delBySourceId(String sourceId) {
QueryWrapper<Source> wrapper = new QueryWrapper<>();
wrapper.eq("source_id", sourceId);
baseMapper.delete(wrapper);
}
}

@ -0,0 +1,42 @@
# DataSource Config
spring:
datasource:
url: jdbc:mysql://localhost:3306/algorithms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
driverClassName: com.mysql.cj.jdbc.Driver
# 日志配置
logging:
level:
com.yingji: debug
org.springframework: warn
# MyBatis配置
mybatis-plus:
# 指定实体类所在包的路径MyBatis-Plus 会自动扫描该路径下的实体类
typeAliasesPackage: com.yingji.entity
# 指定 Mapper 接口所在包的路径MyBatis-Plus 会自动扫描该路径下的 Mapper 接口
mapperLocations: classpath*:mapper/yingji/*Mapper.xml
knife4j:
enable: true
# openapi:
# group:
# test1:
# group-name: 应急算法
# 110获取token
getToken: http://2.46.4.198:8008/token
# 110获取数据
specificWarn: http://2.46.4.198:8008/rs/k4r3h/DataAnalysisService/sz/share/specificWarn
#110
clientId: BFShT3/WwPhZJQdL8e4FdnQ11h0QOeKqBdn+xesCSJGlDHKPk5fxnmnLk1onkm3YzdfjE0gLGEZ7H7vfLs21sGM=
#110
clientSecret: GtbgRfNImXjmBqW0npxUiGi/s0mb5ZdvXANqUCgmIm4=

@ -0,0 +1,7 @@
server:
port: 9001
spring:
profiles:
active: dev

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yingji.mapper.AlarmMapper">
<select id="page" resultType="com.yingji.entity.Alarm">
select * from alarm
<where>
<if test="req.startTime != null ">
emergency_event_time &gt;= #{req.startTime}
</if>
<if test="req.endTime != null ">
and emergency_event_time &lt;= #{req.endTime}
</if>
<if test="req.endTime != null ">
and emergency_event_time &lt;= #{req.endTime}
</if>
<if test="req.emergencyEventDesc != null and req.emergencyEventDesc != ''">
and emergency_event_desc like concat('%', #{req.emergencyEventDesc}, '%')
</if>
<if test="req.emergencyEventAddress != null and req.emergencyEventAddress != ''">
and emergency_event_address like concat('%', #{req.emergencyEventAddress}, '%')
</if>
<if test="req.alarmPhoneNumber != null and req.alarmPhoneNumber != ''">
and alarm_phone_number like concat('%', #{req.alarmPhoneNumber}, '%')
</if>
<if test="req.aiCategories != null and req.aiCategories != ''">
and ai_categories like concat('%', #{req.aiCategories}, '%')
</if>
<if test="req.aiSubCategories != null and req.aiSubCategories != ''">
and ai_sub_categories like concat('%', #{req.aiSubCategories}, '%')
</if>
<if test="req.aiLevel != null and req.aiLevel != ''">
and ai_level like concat('%', #{req.aiLevel}, '%')
</if>
<if test="req.aiNumMin != null ">
and ai_num &lt;= #{req.aiNumMin}
</if>
<if test="req.aiNumMax != null ">
and ai_num &lt;= #{req.aiNumMax}
</if>
</where>
</select>
<select id="findAll" resultType="com.yingji.entity.Alarm">
select * from alarm
<where>
<if test="req.startTime != null ">
emergency_event_time &gt;= #{req.startTime}
</if>
<if test="req.endTime != null ">
and emergency_event_time &lt;= #{req.endTime}
</if>
<if test="req.endTime != null ">
and emergency_event_time &lt;= #{req.endTime}
</if>
<if test="req.emergencyEventDesc != null and req.emergencyEventDesc != ''">
and emergency_event_desc like concat('%', #{req.emergencyEventDesc}, '%')
</if>
<if test="req.emergencyEventAddress != null and req.emergencyEventAddress != ''">
and emergency_event_address like concat('%', #{req.emergencyEventAddress}, '%')
</if>
<if test="req.alarmPhoneNumber != null and req.alarmPhoneNumber != ''">
and alarm_phone_number like concat('%', #{req.alarmPhoneNumber}, '%')
</if>
<if test="req.aiCategories != null and req.aiCategories != ''">
and ai_categories like concat('%', #{req.aiCategories}, '%')
</if>
<if test="req.aiSubCategories != null and req.aiSubCategories != ''">
and ai_sub_categories like concat('%', #{req.aiSubCategories}, '%')
</if>
<if test="req.aiLevel != null and req.aiLevel != ''">
and ai_level like concat('%', #{req.aiLevel}, '%')
</if>
<if test="req.aiNumMin != null ">
and ai_num &lt;= #{req.aiNumMin}
</if>
<if test="req.aiNumMax != null ">
and ai_num &lt;= #{req.aiNumMax}
</if>
</where>
</select>
</mapper>

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yingji.mapper.SourceMapper">
<insert id="addList">
insert into source
(source_id) values
<foreach collection="list" item="id" separator=",">
(#{id})
</foreach>
</insert>
<select id="findSourceAll" resultType="java.lang.String">
select source_id
from source
</select>
</mapper>
Loading…
Cancel
Save