Browse Source

20220110实现域之间的通讯

master
zy_Java 4 years ago
parent
commit
c8cc1308e5
  1. 6
      src/main/java/com/ccsens/datacentre/DatacentreApplication.java
  2. 41
      src/main/java/com/ccsens/datacentre/api/DomainController.java
  3. 27
      src/main/java/com/ccsens/datacentre/api/HeartbeatController.java
  4. 34
      src/main/java/com/ccsens/datacentre/api/UserController.java
  5. 37
      src/main/java/com/ccsens/datacentre/bean/dto/HeartbeatDto.java
  6. 126
      src/main/java/com/ccsens/datacentre/bean/po/IdcDomain.java
  7. 636
      src/main/java/com/ccsens/datacentre/bean/po/IdcDomainExample.java
  8. 26
      src/main/java/com/ccsens/datacentre/bean/vo/DomainVo.java
  9. 44
      src/main/java/com/ccsens/datacentre/persist/dao/IdcDomainDao.java
  10. 185
      src/main/java/com/ccsens/datacentre/service/DomainService.java
  11. 134
      src/main/java/com/ccsens/datacentre/service/HeartbeatService.java
  12. 19
      src/main/java/com/ccsens/datacentre/service/IDomainService.java
  13. 16
      src/main/java/com/ccsens/datacentre/service/IHeartbeatService.java
  14. 3
      src/main/java/com/ccsens/datacentre/util/DataCentreCodeError.java
  15. 17
      src/main/resources/application-dev.yml
  16. 2
      src/main/resources/application-prod.yml
  17. 10
      src/main/resources/application-test.yml
  18. 4
      src/main/resources/druid-dev.yml
  19. 2
      src/main/resources/druid-prod.yml
  20. 2
      src/main/resources/druid-test.yml
  21. 2
      src/main/resources/logback-spring.xml
  22. 47
      src/main/resources/mapper_dao/SPluginDao.xml
  23. 224
      src/main/resources/mapper_raw/IdcDomainMapper.xml
  24. 12
      src/main/resources/mbg.xml

6
src/main/java/com/ccsens/datacentre/DatacentreApplication.java

@ -10,10 +10,16 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
/**
* @author
*/
@MapperScan(basePackages = {"com.ccsens.datacentre.persist.*","com.ccsens.common.persist.*"})
@ServletComponentScan
@EnableAsync
@EnableScheduling
//开启断路器功能
@EnableCircuitBreaker
@EnableFeignClients(basePackages = "com.ccsens.cloudutil.feign")

41
src/main/java/com/ccsens/datacentre/api/DomainController.java

@ -1,18 +1,20 @@
package com.ccsens.datacentre.api;
import cn.hutool.extra.servlet.ServletUtil;
import com.ccsens.datacentre.bean.dto.HeartbeatDto;
import com.ccsens.datacentre.bean.dto.UserDto;
import com.ccsens.datacentre.bean.vo.DomainVo;
import com.ccsens.datacentre.service.IDomainService;
import com.ccsens.util.JsonResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
@ -23,8 +25,10 @@ import java.util.List;
@RequestMapping("/domain")
@Slf4j
public class DomainController {
@Resource
private IDomainService domainService;
@ApiOperation(value = "查询用户关联的域列表", notes = "")
@ApiOperation(value = "查询用户关联的域列表(PT--传达室)", notes = "")
@RequestMapping(value = "/query", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<DomainVo.DomainInfo>> queryDomainByPt(@ApiParam @Validated @RequestBody UserDto.PhoneAndIdCard params) throws Exception{
log.info("PT查询用户关联的域列表:{}",params);
@ -32,14 +36,23 @@ public class DomainController {
log.info("PT查询用户关联的域列表返回:{}",params);
return JsonResponse.newInstance().ok();
}
//
// @ApiOperation(value = "查询用户关联的域列表(数据中心互相调用)", notes = "")
// @RequestMapping(value = "/queryByIdc", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
// public JsonResponse<List<DomainVo.DomainInfo>> queryDomainByIdc(@ApiParam @Validated @RequestBody UserDto.PhoneAndIdCard params) throws Exception{
// log.info("数据中心查询用户关联的域列表:{}",params);
//
// log.info("数据中心查询用户关联的域列表返回:{}",params);
// return JsonResponse.newInstance().ok();
// }
@ApiOperation(value = "根据用户信息查询用户的访问权限(传达室--传达室)", notes = "")
@RequestMapping(value = "/queryByIdc", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<Boolean> queryDomainByIdc(@ApiParam @Validated @RequestBody UserDto.PhoneAndIdCard params) throws Exception{
log.info("根据用户信息查询用户的访问权限:{}",params);
log.info("根据用户信息查询用户的访问权限返回:{}",params);
return JsonResponse.newInstance().ok();
}
@ApiOperation(value = "接收私域的请求返回域列表", notes = "")
@RequestMapping(value = "list", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<DomainVo.DomainInfo>> heartbeatQueryList(HttpServletRequest request,
@ApiParam @Validated @RequestBody HeartbeatDto.SendDomain param) throws Exception{
log.info("接收私域的查询域列表请求");
List<DomainVo.DomainInfo> domainInfos = domainService.heartbeatQueryList(param, ServletUtil.getClientIP(request));
log.info("返回域列表信息给私域:{}",domainInfos);
return JsonResponse.newInstance().ok(domainInfos);
}
}

27
src/main/java/com/ccsens/datacentre/api/HeartbeatController.java

@ -1,11 +1,19 @@
package com.ccsens.datacentre.api;
import cn.hutool.extra.servlet.ServletUtil;
import com.ccsens.datacentre.bean.dto.HeartbeatDto;
import com.ccsens.datacentre.service.IHeartbeatService;
import com.ccsens.util.JsonResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
* @author
*/
@ -14,20 +22,17 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping("/heartbeat")
@Slf4j
public class HeartbeatController {
@ApiOperation(value = "发送心跳", notes = "")
@RequestMapping(value = "/out", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
public JsonResponse outHeartbeat() throws Exception{
log.info("发送心跳成功");
return JsonResponse.newInstance().ok();
}
@Resource
private IHeartbeatService heartbeatService;
@ApiOperation(value = "接收私域的心跳", notes = "")
@RequestMapping(value = "/in", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
public JsonResponse inHeartbeat(@RequestParam(required = true) String code) throws Exception{
@RequestMapping(value = "", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse receiveHeartbeat(HttpServletRequest request, @ApiParam @Validated @RequestBody HeartbeatDto.SendDomain param) throws Exception{
log.info("接收私域的心跳");
heartbeatService.inHeartbeat(param,ServletUtil.getClientIP(request));
log.info("接受心跳后正确返回");
return JsonResponse.newInstance().ok();
}
}

34
src/main/java/com/ccsens/datacentre/api/UserController.java

@ -22,21 +22,21 @@ import org.springframework.web.bind.annotation.RestController;
public class UserController {
@ApiOperation(value = "tall调用数据中心添加用户", notes = "")
@RequestMapping(value = "/saveUserByTall", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse saveUserByTall(@ApiParam @Validated @RequestBody UserDto.DomainUser params) throws Exception{
log.info("tall调用数据中心添加用户:{}",params);
log.info("tall调用数据中心添加用户成功");
return JsonResponse.newInstance().ok();
}
@ApiOperation(value = "私域调用公域数据中心添加用户", notes = "")
@RequestMapping(value = "/saveUserByIdc", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse saveUserByIdc(@ApiParam @Validated @RequestBody UserDto.DomainUser params) throws Exception{
log.info("私域调用公域数据中心添加用户:{}",params);
log.info("私域调用公域数据中心添加用户成功");
return JsonResponse.newInstance().ok();
}
// @ApiOperation(value = "tall调用数据中心添加用户", notes = "")
// @RequestMapping(value = "/saveUserByTall", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
// public JsonResponse saveUserByTall(@ApiParam @Validated @RequestBody UserDto.DomainUser params) throws Exception{
// log.info("tall调用数据中心添加用户:{}",params);
//
// log.info("tall调用数据中心添加用户成功");
// return JsonResponse.newInstance().ok();
// }
//
// @ApiOperation(value = "私域调用公域数据中心添加用户", notes = "")
// @RequestMapping(value = "/saveUserByIdc", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
// public JsonResponse saveUserByIdc(@ApiParam @Validated @RequestBody UserDto.DomainUser params) throws Exception{
// log.info("私域调用公域数据中心添加用户:{}",params);
//
// log.info("私域调用公域数据中心添加用户成功");
// return JsonResponse.newInstance().ok();
// }
}

37
src/main/java/com/ccsens/datacentre/bean/dto/HeartbeatDto.java

@ -0,0 +1,37 @@
package com.ccsens.datacentre.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author
*/
public class HeartbeatDto {
@Data
@ApiModel("域之间传递的信息")
public static class SendDomain {
@ApiModelProperty("域code")
private String code;
@ApiModelProperty("发送时的时间戳")
private Long timestamp;
@ApiModelProperty("随机码")
private String noncestr;
@ApiModelProperty("签名后信息")
private byte[] data;
}
@Data
@ApiModel("心跳里的域信息")
public static class MessageDomainInfo {
@ApiModelProperty("域id")
private Long id;
@ApiModelProperty("域名称")
private String name;
@ApiModelProperty("域code")
private String code;
@ApiModelProperty("ip")
private String host;
}
}

126
src/main/java/com/ccsens/datacentre/bean/po/IdcDomain.java

@ -12,15 +12,27 @@ public class IdcDomain implements Serializable {
private String intro;
private String domainName;
private String url;
private String company;
private String host;
private Long time;
private Byte self;
private Byte publicDomain;
private Byte pub;
private Long lastRcvTime;
private Byte polling;
private Byte answer;
private Long lastUpdateTime;
private Long lastAskTime;
private Long lastAnswerTime;
private String publicKey;
private String privateKey;
private Long operator;
@ -64,44 +76,92 @@ public class IdcDomain implements Serializable {
this.intro = intro == null ? null : intro.trim();
}
public String getDomainName() {
return domainName;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url == null ? null : url.trim();
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host == null ? null : host.trim();
}
public Byte getSelf() {
return self;
}
public void setSelf(Byte self) {
this.self = self;
}
public Byte getPub() {
return pub;
}
public void setPub(Byte pub) {
this.pub = pub;
}
public Byte getPolling() {
return polling;
}
public void setPolling(Byte polling) {
this.polling = polling;
}
public Byte getAnswer() {
return answer;
}
public void setAnswer(Byte answer) {
this.answer = answer;
}
public Long getLastUpdateTime() {
return lastUpdateTime;
}
public void setDomainName(String domainName) {
this.domainName = domainName == null ? null : domainName.trim();
public void setLastUpdateTime(Long lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
}
public String getCompany() {
return company;
public Long getLastAskTime() {
return lastAskTime;
}
public void setCompany(String company) {
this.company = company == null ? null : company.trim();
public void setLastAskTime(Long lastAskTime) {
this.lastAskTime = lastAskTime;
}
public Long getTime() {
return time;
public Long getLastAnswerTime() {
return lastAnswerTime;
}
public void setTime(Long time) {
this.time = time;
public void setLastAnswerTime(Long lastAnswerTime) {
this.lastAnswerTime = lastAnswerTime;
}
public Byte getPublicDomain() {
return publicDomain;
public String getPublicKey() {
return publicKey;
}
public void setPublicDomain(Byte publicDomain) {
this.publicDomain = publicDomain;
public void setPublicKey(String publicKey) {
this.publicKey = publicKey == null ? null : publicKey.trim();
}
public Long getLastRcvTime() {
return lastRcvTime;
public String getPrivateKey() {
return privateKey;
}
public void setLastRcvTime(Long lastRcvTime) {
this.lastRcvTime = lastRcvTime;
public void setPrivateKey(String privateKey) {
this.privateKey = privateKey == null ? null : privateKey.trim();
}
public Long getOperator() {
@ -146,11 +206,17 @@ public class IdcDomain implements Serializable {
sb.append(", name=").append(name);
sb.append(", code=").append(code);
sb.append(", intro=").append(intro);
sb.append(", domainName=").append(domainName);
sb.append(", company=").append(company);
sb.append(", time=").append(time);
sb.append(", publicDomain=").append(publicDomain);
sb.append(", lastRcvTime=").append(lastRcvTime);
sb.append(", url=").append(url);
sb.append(", host=").append(host);
sb.append(", self=").append(self);
sb.append(", pub=").append(pub);
sb.append(", polling=").append(polling);
sb.append(", answer=").append(answer);
sb.append(", lastUpdateTime=").append(lastUpdateTime);
sb.append(", lastAskTime=").append(lastAskTime);
sb.append(", lastAnswerTime=").append(lastAnswerTime);
sb.append(", publicKey=").append(publicKey);
sb.append(", privateKey=").append(privateKey);
sb.append(", operator=").append(operator);
sb.append(", createdAt=").append(createdAt);
sb.append(", updatedAt=").append(updatedAt);

636
src/main/java/com/ccsens/datacentre/bean/po/IdcDomainExample.java

@ -375,323 +375,703 @@ public class IdcDomainExample {
return (Criteria) this;
}
public Criteria andDomainNameIsNull() {
addCriterion("domain_name is null");
public Criteria andUrlIsNull() {
addCriterion("url is null");
return (Criteria) this;
}
public Criteria andDomainNameIsNotNull() {
addCriterion("domain_name is not null");
public Criteria andUrlIsNotNull() {
addCriterion("url is not null");
return (Criteria) this;
}
public Criteria andDomainNameEqualTo(String value) {
addCriterion("domain_name =", value, "domainName");
public Criteria andUrlEqualTo(String value) {
addCriterion("url =", value, "url");
return (Criteria) this;
}
public Criteria andDomainNameNotEqualTo(String value) {
addCriterion("domain_name <>", value, "domainName");
public Criteria andUrlNotEqualTo(String value) {
addCriterion("url <>", value, "url");
return (Criteria) this;
}
public Criteria andDomainNameGreaterThan(String value) {
addCriterion("domain_name >", value, "domainName");
public Criteria andUrlGreaterThan(String value) {
addCriterion("url >", value, "url");
return (Criteria) this;
}
public Criteria andDomainNameGreaterThanOrEqualTo(String value) {
addCriterion("domain_name >=", value, "domainName");
public Criteria andUrlGreaterThanOrEqualTo(String value) {
addCriterion("url >=", value, "url");
return (Criteria) this;
}
public Criteria andDomainNameLessThan(String value) {
addCriterion("domain_name <", value, "domainName");
public Criteria andUrlLessThan(String value) {
addCriterion("url <", value, "url");
return (Criteria) this;
}
public Criteria andDomainNameLessThanOrEqualTo(String value) {
addCriterion("domain_name <=", value, "domainName");
public Criteria andUrlLessThanOrEqualTo(String value) {
addCriterion("url <=", value, "url");
return (Criteria) this;
}
public Criteria andDomainNameLike(String value) {
addCriterion("domain_name like", value, "domainName");
public Criteria andUrlLike(String value) {
addCriterion("url like", value, "url");
return (Criteria) this;
}
public Criteria andDomainNameNotLike(String value) {
addCriterion("domain_name not like", value, "domainName");
public Criteria andUrlNotLike(String value) {
addCriterion("url not like", value, "url");
return (Criteria) this;
}
public Criteria andDomainNameIn(List<String> values) {
addCriterion("domain_name in", values, "domainName");
public Criteria andUrlIn(List<String> values) {
addCriterion("url in", values, "url");
return (Criteria) this;
}
public Criteria andDomainNameNotIn(List<String> values) {
addCriterion("domain_name not in", values, "domainName");
public Criteria andUrlNotIn(List<String> values) {
addCriterion("url not in", values, "url");
return (Criteria) this;
}
public Criteria andDomainNameBetween(String value1, String value2) {
addCriterion("domain_name between", value1, value2, "domainName");
public Criteria andUrlBetween(String value1, String value2) {
addCriterion("url between", value1, value2, "url");
return (Criteria) this;
}
public Criteria andDomainNameNotBetween(String value1, String value2) {
addCriterion("domain_name not between", value1, value2, "domainName");
public Criteria andUrlNotBetween(String value1, String value2) {
addCriterion("url not between", value1, value2, "url");
return (Criteria) this;
}
public Criteria andCompanyIsNull() {
addCriterion("company is null");
public Criteria andHostIsNull() {
addCriterion("host is null");
return (Criteria) this;
}
public Criteria andCompanyIsNotNull() {
addCriterion("company is not null");
public Criteria andHostIsNotNull() {
addCriterion("host is not null");
return (Criteria) this;
}
public Criteria andCompanyEqualTo(String value) {
addCriterion("company =", value, "company");
public Criteria andHostEqualTo(String value) {
addCriterion("host =", value, "host");
return (Criteria) this;
}
public Criteria andCompanyNotEqualTo(String value) {
addCriterion("company <>", value, "company");
public Criteria andHostNotEqualTo(String value) {
addCriterion("host <>", value, "host");
return (Criteria) this;
}
public Criteria andCompanyGreaterThan(String value) {
addCriterion("company >", value, "company");
public Criteria andHostGreaterThan(String value) {
addCriterion("host >", value, "host");
return (Criteria) this;
}
public Criteria andCompanyGreaterThanOrEqualTo(String value) {
addCriterion("company >=", value, "company");
public Criteria andHostGreaterThanOrEqualTo(String value) {
addCriterion("host >=", value, "host");
return (Criteria) this;
}
public Criteria andCompanyLessThan(String value) {
addCriterion("company <", value, "company");
public Criteria andHostLessThan(String value) {
addCriterion("host <", value, "host");
return (Criteria) this;
}
public Criteria andCompanyLessThanOrEqualTo(String value) {
addCriterion("company <=", value, "company");
public Criteria andHostLessThanOrEqualTo(String value) {
addCriterion("host <=", value, "host");
return (Criteria) this;
}
public Criteria andCompanyLike(String value) {
addCriterion("company like", value, "company");
public Criteria andHostLike(String value) {
addCriterion("host like", value, "host");
return (Criteria) this;
}
public Criteria andCompanyNotLike(String value) {
addCriterion("company not like", value, "company");
public Criteria andHostNotLike(String value) {
addCriterion("host not like", value, "host");
return (Criteria) this;
}
public Criteria andCompanyIn(List<String> values) {
addCriterion("company in", values, "company");
public Criteria andHostIn(List<String> values) {
addCriterion("host in", values, "host");
return (Criteria) this;
}
public Criteria andCompanyNotIn(List<String> values) {
addCriterion("company not in", values, "company");
public Criteria andHostNotIn(List<String> values) {
addCriterion("host not in", values, "host");
return (Criteria) this;
}
public Criteria andCompanyBetween(String value1, String value2) {
addCriterion("company between", value1, value2, "company");
public Criteria andHostBetween(String value1, String value2) {
addCriterion("host between", value1, value2, "host");
return (Criteria) this;
}
public Criteria andCompanyNotBetween(String value1, String value2) {
addCriterion("company not between", value1, value2, "company");
public Criteria andHostNotBetween(String value1, String value2) {
addCriterion("host not between", value1, value2, "host");
return (Criteria) this;
}
public Criteria andTimeIsNull() {
addCriterion("time is null");
public Criteria andSelfIsNull() {
addCriterion("self is null");
return (Criteria) this;
}
public Criteria andTimeIsNotNull() {
addCriterion("time is not null");
public Criteria andSelfIsNotNull() {
addCriterion("self is not null");
return (Criteria) this;
}
public Criteria andTimeEqualTo(Long value) {
addCriterion("time =", value, "time");
public Criteria andSelfEqualTo(Byte value) {
addCriterion("self =", value, "self");
return (Criteria) this;
}
public Criteria andTimeNotEqualTo(Long value) {
addCriterion("time <>", value, "time");
public Criteria andSelfNotEqualTo(Byte value) {
addCriterion("self <>", value, "self");
return (Criteria) this;
}
public Criteria andTimeGreaterThan(Long value) {
addCriterion("time >", value, "time");
public Criteria andSelfGreaterThan(Byte value) {
addCriterion("self >", value, "self");
return (Criteria) this;
}
public Criteria andTimeGreaterThanOrEqualTo(Long value) {
addCriterion("time >=", value, "time");
public Criteria andSelfGreaterThanOrEqualTo(Byte value) {
addCriterion("self >=", value, "self");
return (Criteria) this;
}
public Criteria andTimeLessThan(Long value) {
addCriterion("time <", value, "time");
public Criteria andSelfLessThan(Byte value) {
addCriterion("self <", value, "self");
return (Criteria) this;
}
public Criteria andTimeLessThanOrEqualTo(Long value) {
addCriterion("time <=", value, "time");
public Criteria andSelfLessThanOrEqualTo(Byte value) {
addCriterion("self <=", value, "self");
return (Criteria) this;
}
public Criteria andTimeIn(List<Long> values) {
addCriterion("time in", values, "time");
public Criteria andSelfIn(List<Byte> values) {
addCriterion("self in", values, "self");
return (Criteria) this;
}
public Criteria andTimeNotIn(List<Long> values) {
addCriterion("time not in", values, "time");
public Criteria andSelfNotIn(List<Byte> values) {
addCriterion("self not in", values, "self");
return (Criteria) this;
}
public Criteria andTimeBetween(Long value1, Long value2) {
addCriterion("time between", value1, value2, "time");
public Criteria andSelfBetween(Byte value1, Byte value2) {
addCriterion("self between", value1, value2, "self");
return (Criteria) this;
}
public Criteria andTimeNotBetween(Long value1, Long value2) {
addCriterion("time not between", value1, value2, "time");
public Criteria andSelfNotBetween(Byte value1, Byte value2) {
addCriterion("self not between", value1, value2, "self");
return (Criteria) this;
}
public Criteria andPublicDomainIsNull() {
addCriterion("public_domain is null");
public Criteria andPubIsNull() {
addCriterion("pub is null");
return (Criteria) this;
}
public Criteria andPublicDomainIsNotNull() {
addCriterion("public_domain is not null");
public Criteria andPubIsNotNull() {
addCriterion("pub is not null");
return (Criteria) this;
}
public Criteria andPublicDomainEqualTo(Byte value) {
addCriterion("public_domain =", value, "publicDomain");
public Criteria andPubEqualTo(Byte value) {
addCriterion("pub =", value, "pub");
return (Criteria) this;
}
public Criteria andPublicDomainNotEqualTo(Byte value) {
addCriterion("public_domain <>", value, "publicDomain");
public Criteria andPubNotEqualTo(Byte value) {
addCriterion("pub <>", value, "pub");
return (Criteria) this;
}
public Criteria andPublicDomainGreaterThan(Byte value) {
addCriterion("public_domain >", value, "publicDomain");
public Criteria andPubGreaterThan(Byte value) {
addCriterion("pub >", value, "pub");
return (Criteria) this;
}
public Criteria andPublicDomainGreaterThanOrEqualTo(Byte value) {
addCriterion("public_domain >=", value, "publicDomain");
public Criteria andPubGreaterThanOrEqualTo(Byte value) {
addCriterion("pub >=", value, "pub");
return (Criteria) this;
}
public Criteria andPublicDomainLessThan(Byte value) {
addCriterion("public_domain <", value, "publicDomain");
public Criteria andPubLessThan(Byte value) {
addCriterion("pub <", value, "pub");
return (Criteria) this;
}
public Criteria andPublicDomainLessThanOrEqualTo(Byte value) {
addCriterion("public_domain <=", value, "publicDomain");
public Criteria andPubLessThanOrEqualTo(Byte value) {
addCriterion("pub <=", value, "pub");
return (Criteria) this;
}
public Criteria andPublicDomainIn(List<Byte> values) {
addCriterion("public_domain in", values, "publicDomain");
public Criteria andPubIn(List<Byte> values) {
addCriterion("pub in", values, "pub");
return (Criteria) this;
}
public Criteria andPublicDomainNotIn(List<Byte> values) {
addCriterion("public_domain not in", values, "publicDomain");
public Criteria andPubNotIn(List<Byte> values) {
addCriterion("pub not in", values, "pub");
return (Criteria) this;
}
public Criteria andPublicDomainBetween(Byte value1, Byte value2) {
addCriterion("public_domain between", value1, value2, "publicDomain");
public Criteria andPubBetween(Byte value1, Byte value2) {
addCriterion("pub between", value1, value2, "pub");
return (Criteria) this;
}
public Criteria andPublicDomainNotBetween(Byte value1, Byte value2) {
addCriterion("public_domain not between", value1, value2, "publicDomain");
public Criteria andPubNotBetween(Byte value1, Byte value2) {
addCriterion("pub not between", value1, value2, "pub");
return (Criteria) this;
}
public Criteria andLastRcvTimeIsNull() {
addCriterion("last_rcv_time is null");
public Criteria andPollingIsNull() {
addCriterion("polling is null");
return (Criteria) this;
}
public Criteria andLastRcvTimeIsNotNull() {
addCriterion("last_rcv_time is not null");
public Criteria andPollingIsNotNull() {
addCriterion("polling is not null");
return (Criteria) this;
}
public Criteria andLastRcvTimeEqualTo(Long value) {
addCriterion("last_rcv_time =", value, "lastRcvTime");
public Criteria andPollingEqualTo(Byte value) {
addCriterion("polling =", value, "polling");
return (Criteria) this;
}
public Criteria andLastRcvTimeNotEqualTo(Long value) {
addCriterion("last_rcv_time <>", value, "lastRcvTime");
public Criteria andPollingNotEqualTo(Byte value) {
addCriterion("polling <>", value, "polling");
return (Criteria) this;
}
public Criteria andLastRcvTimeGreaterThan(Long value) {
addCriterion("last_rcv_time >", value, "lastRcvTime");
public Criteria andPollingGreaterThan(Byte value) {
addCriterion("polling >", value, "polling");
return (Criteria) this;
}
public Criteria andLastRcvTimeGreaterThanOrEqualTo(Long value) {
addCriterion("last_rcv_time >=", value, "lastRcvTime");
public Criteria andPollingGreaterThanOrEqualTo(Byte value) {
addCriterion("polling >=", value, "polling");
return (Criteria) this;
}
public Criteria andLastRcvTimeLessThan(Long value) {
addCriterion("last_rcv_time <", value, "lastRcvTime");
public Criteria andPollingLessThan(Byte value) {
addCriterion("polling <", value, "polling");
return (Criteria) this;
}
public Criteria andLastRcvTimeLessThanOrEqualTo(Long value) {
addCriterion("last_rcv_time <=", value, "lastRcvTime");
public Criteria andPollingLessThanOrEqualTo(Byte value) {
addCriterion("polling <=", value, "polling");
return (Criteria) this;
}
public Criteria andLastRcvTimeIn(List<Long> values) {
addCriterion("last_rcv_time in", values, "lastRcvTime");
public Criteria andPollingIn(List<Byte> values) {
addCriterion("polling in", values, "polling");
return (Criteria) this;
}
public Criteria andLastRcvTimeNotIn(List<Long> values) {
addCriterion("last_rcv_time not in", values, "lastRcvTime");
public Criteria andPollingNotIn(List<Byte> values) {
addCriterion("polling not in", values, "polling");
return (Criteria) this;
}
public Criteria andLastRcvTimeBetween(Long value1, Long value2) {
addCriterion("last_rcv_time between", value1, value2, "lastRcvTime");
public Criteria andPollingBetween(Byte value1, Byte value2) {
addCriterion("polling between", value1, value2, "polling");
return (Criteria) this;
}
public Criteria andLastRcvTimeNotBetween(Long value1, Long value2) {
addCriterion("last_rcv_time not between", value1, value2, "lastRcvTime");
public Criteria andPollingNotBetween(Byte value1, Byte value2) {
addCriterion("polling not between", value1, value2, "polling");
return (Criteria) this;
}
public Criteria andAnswerIsNull() {
addCriterion("answer is null");
return (Criteria) this;
}
public Criteria andAnswerIsNotNull() {
addCriterion("answer is not null");
return (Criteria) this;
}
public Criteria andAnswerEqualTo(Byte value) {
addCriterion("answer =", value, "answer");
return (Criteria) this;
}
public Criteria andAnswerNotEqualTo(Byte value) {
addCriterion("answer <>", value, "answer");
return (Criteria) this;
}
public Criteria andAnswerGreaterThan(Byte value) {
addCriterion("answer >", value, "answer");
return (Criteria) this;
}
public Criteria andAnswerGreaterThanOrEqualTo(Byte value) {
addCriterion("answer >=", value, "answer");
return (Criteria) this;
}
public Criteria andAnswerLessThan(Byte value) {
addCriterion("answer <", value, "answer");
return (Criteria) this;
}
public Criteria andAnswerLessThanOrEqualTo(Byte value) {
addCriterion("answer <=", value, "answer");
return (Criteria) this;
}
public Criteria andAnswerIn(List<Byte> values) {
addCriterion("answer in", values, "answer");
return (Criteria) this;
}
public Criteria andAnswerNotIn(List<Byte> values) {
addCriterion("answer not in", values, "answer");
return (Criteria) this;
}
public Criteria andAnswerBetween(Byte value1, Byte value2) {
addCriterion("answer between", value1, value2, "answer");
return (Criteria) this;
}
public Criteria andAnswerNotBetween(Byte value1, Byte value2) {
addCriterion("answer not between", value1, value2, "answer");
return (Criteria) this;
}
public Criteria andLastUpdateTimeIsNull() {
addCriterion("last_update_time is null");
return (Criteria) this;
}
public Criteria andLastUpdateTimeIsNotNull() {
addCriterion("last_update_time is not null");
return (Criteria) this;
}
public Criteria andLastUpdateTimeEqualTo(Long value) {
addCriterion("last_update_time =", value, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastUpdateTimeNotEqualTo(Long value) {
addCriterion("last_update_time <>", value, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastUpdateTimeGreaterThan(Long value) {
addCriterion("last_update_time >", value, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastUpdateTimeGreaterThanOrEqualTo(Long value) {
addCriterion("last_update_time >=", value, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastUpdateTimeLessThan(Long value) {
addCriterion("last_update_time <", value, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastUpdateTimeLessThanOrEqualTo(Long value) {
addCriterion("last_update_time <=", value, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastUpdateTimeIn(List<Long> values) {
addCriterion("last_update_time in", values, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastUpdateTimeNotIn(List<Long> values) {
addCriterion("last_update_time not in", values, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastUpdateTimeBetween(Long value1, Long value2) {
addCriterion("last_update_time between", value1, value2, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastUpdateTimeNotBetween(Long value1, Long value2) {
addCriterion("last_update_time not between", value1, value2, "lastUpdateTime");
return (Criteria) this;
}
public Criteria andLastAskTimeIsNull() {
addCriterion("last_ask_time is null");
return (Criteria) this;
}
public Criteria andLastAskTimeIsNotNull() {
addCriterion("last_ask_time is not null");
return (Criteria) this;
}
public Criteria andLastAskTimeEqualTo(Long value) {
addCriterion("last_ask_time =", value, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAskTimeNotEqualTo(Long value) {
addCriterion("last_ask_time <>", value, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAskTimeGreaterThan(Long value) {
addCriterion("last_ask_time >", value, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAskTimeGreaterThanOrEqualTo(Long value) {
addCriterion("last_ask_time >=", value, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAskTimeLessThan(Long value) {
addCriterion("last_ask_time <", value, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAskTimeLessThanOrEqualTo(Long value) {
addCriterion("last_ask_time <=", value, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAskTimeIn(List<Long> values) {
addCriterion("last_ask_time in", values, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAskTimeNotIn(List<Long> values) {
addCriterion("last_ask_time not in", values, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAskTimeBetween(Long value1, Long value2) {
addCriterion("last_ask_time between", value1, value2, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAskTimeNotBetween(Long value1, Long value2) {
addCriterion("last_ask_time not between", value1, value2, "lastAskTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeIsNull() {
addCriterion("last_answer_time is null");
return (Criteria) this;
}
public Criteria andLastAnswerTimeIsNotNull() {
addCriterion("last_answer_time is not null");
return (Criteria) this;
}
public Criteria andLastAnswerTimeEqualTo(Long value) {
addCriterion("last_answer_time =", value, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeNotEqualTo(Long value) {
addCriterion("last_answer_time <>", value, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeGreaterThan(Long value) {
addCriterion("last_answer_time >", value, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeGreaterThanOrEqualTo(Long value) {
addCriterion("last_answer_time >=", value, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeLessThan(Long value) {
addCriterion("last_answer_time <", value, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeLessThanOrEqualTo(Long value) {
addCriterion("last_answer_time <=", value, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeIn(List<Long> values) {
addCriterion("last_answer_time in", values, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeNotIn(List<Long> values) {
addCriterion("last_answer_time not in", values, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeBetween(Long value1, Long value2) {
addCriterion("last_answer_time between", value1, value2, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andLastAnswerTimeNotBetween(Long value1, Long value2) {
addCriterion("last_answer_time not between", value1, value2, "lastAnswerTime");
return (Criteria) this;
}
public Criteria andPublicKeyIsNull() {
addCriterion("public_key is null");
return (Criteria) this;
}
public Criteria andPublicKeyIsNotNull() {
addCriterion("public_key is not null");
return (Criteria) this;
}
public Criteria andPublicKeyEqualTo(String value) {
addCriterion("public_key =", value, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyNotEqualTo(String value) {
addCriterion("public_key <>", value, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyGreaterThan(String value) {
addCriterion("public_key >", value, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyGreaterThanOrEqualTo(String value) {
addCriterion("public_key >=", value, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyLessThan(String value) {
addCriterion("public_key <", value, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyLessThanOrEqualTo(String value) {
addCriterion("public_key <=", value, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyLike(String value) {
addCriterion("public_key like", value, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyNotLike(String value) {
addCriterion("public_key not like", value, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyIn(List<String> values) {
addCriterion("public_key in", values, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyNotIn(List<String> values) {
addCriterion("public_key not in", values, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyBetween(String value1, String value2) {
addCriterion("public_key between", value1, value2, "publicKey");
return (Criteria) this;
}
public Criteria andPublicKeyNotBetween(String value1, String value2) {
addCriterion("public_key not between", value1, value2, "publicKey");
return (Criteria) this;
}
public Criteria andPrivateKeyIsNull() {
addCriterion("private_key is null");
return (Criteria) this;
}
public Criteria andPrivateKeyIsNotNull() {
addCriterion("private_key is not null");
return (Criteria) this;
}
public Criteria andPrivateKeyEqualTo(String value) {
addCriterion("private_key =", value, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyNotEqualTo(String value) {
addCriterion("private_key <>", value, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyGreaterThan(String value) {
addCriterion("private_key >", value, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyGreaterThanOrEqualTo(String value) {
addCriterion("private_key >=", value, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyLessThan(String value) {
addCriterion("private_key <", value, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyLessThanOrEqualTo(String value) {
addCriterion("private_key <=", value, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyLike(String value) {
addCriterion("private_key like", value, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyNotLike(String value) {
addCriterion("private_key not like", value, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyIn(List<String> values) {
addCriterion("private_key in", values, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyNotIn(List<String> values) {
addCriterion("private_key not in", values, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyBetween(String value1, String value2) {
addCriterion("private_key between", value1, value2, "privateKey");
return (Criteria) this;
}
public Criteria andPrivateKeyNotBetween(String value1, String value2) {
addCriterion("private_key not between", value1, value2, "privateKey");
return (Criteria) this;
}

26
src/main/java/com/ccsens/datacentre/bean/vo/DomainVo.java

@ -15,12 +15,32 @@ public class DomainVo {
public static class DomainInfo{
@ApiModelProperty("域id")
private Long id;
@ApiModelProperty("身份证号")
@ApiModelProperty("域名称")
private String name;
@ApiModelProperty("域code")
private String code;
@ApiModelProperty("域名(网址)")
private String domainName;
@ApiModelProperty("简介")
private String intro;
@ApiModelProperty("访问前缀")
private String url;
@ApiModelProperty("ip/域名")
private String host;
@ApiModelProperty("是否是自身 0否 1是")
private Byte self;
@ApiModelProperty("是否是当前域的公域 0否 1是")
private Byte pub;
@ApiModelProperty("是否轮询 0否 1是")
private Byte polling;
@ApiModelProperty("是否接受该域的请求 0否 1是")
private Byte answer;
@ApiModelProperty("最后更新时间")
private Long lastUpdateTime;
@ApiModelProperty("最后请求时间")
private Long lastAskTime;
@ApiModelProperty("最后应答时间")
private Long lastAnswerTime;
@ApiModelProperty("公钥")
private String publicKey;
}
}

44
src/main/java/com/ccsens/datacentre/persist/dao/IdcDomainDao.java

@ -0,0 +1,44 @@
package com.ccsens.datacentre.persist.dao;
import com.ccsens.datacentre.bean.po.IdcDomain;
import com.ccsens.datacentre.bean.vo.DomainVo;
import com.ccsens.datacentre.persist.mapper.IdcDomainMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author
*/
public interface IdcDomainDao extends IdcDomainMapper {
/**
* 根据code查询域信息
* @param code 域code
* @return 返回域信息
*/
IdcDomain getByCode(@Param("code") String code);
/**
* 查找自己的域信息
* @return 返回域信息
*/
IdcDomain getOneself();
/**
* 查询所有需要轮询的域
* @return 返回域列表
*/
List<IdcDomain> getPolling();
/**
* 查询所有域排除自身和请求的域信息
* @return 返回所有域信息
*/
List<DomainVo.DomainInfo> queryAllDomain();
/**
* 查询公域信息
* @return 返回公域信息
*/
IdcDomain getPubDomain();
}

185
src/main/java/com/ccsens/datacentre/service/DomainService.java

@ -0,0 +1,185 @@
package com.ccsens.datacentre.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ccsens.datacentre.bean.dto.HeartbeatDto;
import com.ccsens.datacentre.bean.po.IdcDomain;
import com.ccsens.datacentre.bean.vo.DomainVo;
import com.ccsens.datacentre.persist.dao.IdcDomainDao;
import com.ccsens.datacentre.util.DataCentreCodeError;
import com.ccsens.util.RestTemplateUtil;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* @author
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
public class DomainService implements IDomainService {
@Resource
private IdcDomainDao domainDao;
@Resource
private Snowflake snowflake;
@Override
public List<DomainVo.DomainInfo> heartbeatQueryList(HeartbeatDto.SendDomain param, String clientIp) {
//TODO 验证通讯时间
//根据code查找发送方域信息
IdcDomain idcDomains = domainDao.getByCode(param.getCode());
if(ObjectUtil.isNull(idcDomains)){
//返回心跳异常
log.info("未找到code对应的域");
throw new BaseException(DataCentreCodeError.GET_DOMAIN_ERROR);
}
//是否接受对方的请求
if(idcDomains.getAnswer() == 0){
//返回心跳异常
log.info("不接受对方的请求");
throw new BaseException(DataCentreCodeError.GET_DOMAIN_ERROR);
}
//根据发送方公钥验证签名
byte[] decrypt;
try {
RSA pub = new RSA(null, idcDomains.getPublicKey());
decrypt = pub.decrypt(param.getData(), KeyType.PublicKey);
}catch (Exception e){
log.info("验证签名失败:{}",e);
throw new BaseException(DataCentreCodeError.GET_DOMAIN_ERROR);
}
//查询自身域信息
IdcDomain selfDomains = domainDao.getOneself();
HeartbeatDto.MessageDomainInfo domainInfo;
try {
//根据自身私钥解密
RSA pri = new RSA(selfDomains.getPrivateKey(),null);
byte[] decrypt2 = pri.decrypt(decrypt, KeyType.PrivateKey);
log.info("解密未报错");
//转换成对象
domainInfo = JSON.parseObject(StrUtil.str(decrypt2, CharsetUtil.CHARSET_UTF_8), HeartbeatDto.MessageDomainInfo.class);
}catch (Exception e){
log.info("解密失败:{}",e);
throw new BaseException(DataCentreCodeError.GET_DOMAIN_ERROR);
}
//验证ip白名单是否匹配
if(domainInfo == null || !domainInfo.getHost().equals(clientIp)){
log.info("白名单不匹配:{}---实际请求{}",domainInfo,clientIp);
// throw new BaseException(DataCentreCodeError.GET_DOMAIN_ERROR);
}
//查询除了自身的所有域信息并返回
return domainDao.queryAllDomain();
}
/**
* 定时请求公域更新自身域列表信息
*/
@Scheduled(cron="0/30 * * * * ?")
public void sendHeartbeat(){
log.info("请求公域更新自身域列表信息");
//查询自身域信息
IdcDomain selfDomains = domainDao.getOneself();
HeartbeatDto.MessageDomainInfo msgDomainInfo = new HeartbeatDto.MessageDomainInfo();
//发送的信息
msgDomainInfo.setId(selfDomains.getId());
msgDomainInfo.setName(selfDomains.getName());
msgDomainInfo.setCode(selfDomains.getCode());
msgDomainInfo.setHost(selfDomains.getHost());
//查询自身的公域
IdcDomain pubDomain = domainDao.getPubDomain();
if(ObjectUtil.isNull(pubDomain)){
return;
}
//使用对方的公钥加密
RSA pub = new RSA(null, pubDomain.getPublicKey());
byte[] encrypt = pub.encrypt(StrUtil.bytes(JSON.toJSONString(msgDomainInfo), CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
//使用自己的私钥签名
RSA pri = new RSA(selfDomains.getPrivateKey(),null);
byte[] encrypt2 = pri.encrypt(encrypt, KeyType.PrivateKey);
//生成发送的对象
HeartbeatDto.SendDomain sendDomain = new HeartbeatDto.SendDomain();
sendDomain.setCode(selfDomains.getCode());
sendDomain.setTimestamp(System.currentTimeMillis());
//TODO 随机码
sendDomain.setData(encrypt2);
//发送请求
String url = pubDomain.getUrl() + "/domain/list";
// String url = "http://localhost:7280/domain/list";
log.info("调用接口:{}--{}", url, sendDomain);
String postBody = RestTemplateUtil.postBody(url, sendDomain);
System.out.println(postBody);
JSONObject jsonObject = JSONObject.parseObject(postBody);
log.info("接口返回:{}", jsonObject);
//请求正确返回则修改域列表信息,否则无操作
Integer code = jsonObject.getInteger("code");
if (code == null || code != 200) {
return;
}
JSONArray data = jsonObject.getJSONArray("data");
if(CollectionUtil.isNotEmpty(data)){
for (Object object : data) {
DomainVo.DomainInfo domainInfo;
try {
JSONObject object1 = (JSONObject) object;
domainInfo = object1.toJavaObject(DomainVo.DomainInfo.class);
}catch (Exception e){
log.info(""+e);
continue;
}
IdcDomain idcDomain = domainDao.getByCode(domainInfo.getCode());
if(ObjectUtil.isNotNull(idcDomain)){
//修改
if(StrUtil.isNotBlank(domainInfo.getName()) && !domainInfo.getName().equals(idcDomain.getName())){
idcDomain.setName(domainInfo.getName());
idcDomain.setLastUpdateTime(System.currentTimeMillis());
}
if(StrUtil.isNotBlank(domainInfo.getUrl()) && !domainInfo.getUrl().equals(idcDomain.getUrl())){
idcDomain.setUrl(domainInfo.getUrl());
idcDomain.setLastUpdateTime(System.currentTimeMillis());
}
if(StrUtil.isNotBlank(domainInfo.getIntro()) && !domainInfo.getIntro().equals(idcDomain.getIntro())){
idcDomain.setIntro(domainInfo.getIntro());
idcDomain.setLastUpdateTime(System.currentTimeMillis());
}
if(StrUtil.isNotBlank(domainInfo.getHost()) && !domainInfo.getHost().equals(idcDomain.getHost())){
idcDomain.setHost(domainInfo.getHost());
idcDomain.setLastUpdateTime(System.currentTimeMillis());
}
if(StrUtil.isNotBlank(domainInfo.getPublicKey()) && !domainInfo.getPublicKey().equals(idcDomain.getPublicKey())){
idcDomain.setPublicKey(domainInfo.getPublicKey());
idcDomain.setLastUpdateTime(System.currentTimeMillis());
}
domainDao.updateByPrimaryKeySelective(idcDomain);
}else {
//添加新域信息
idcDomain = new IdcDomain();
BeanUtil.copyProperties(domainInfo,idcDomain);
idcDomain.setId(snowflake.nextId());
idcDomain.setLastAnswerTime(System.currentTimeMillis());
idcDomain.setLastAskTime(System.currentTimeMillis());
idcDomain.setLastUpdateTime(System.currentTimeMillis());
domainDao.insertSelective(idcDomain);
}
}
}
}
}

134
src/main/java/com/ccsens/datacentre/service/HeartbeatService.java

@ -0,0 +1,134 @@
package com.ccsens.datacentre.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ccsens.datacentre.bean.dto.HeartbeatDto;
import com.ccsens.datacentre.bean.po.IdcDomain;
import com.ccsens.datacentre.persist.dao.IdcDomainDao;
import com.ccsens.datacentre.util.DataCentreCodeError;
import com.ccsens.util.RestTemplateUtil;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* @author
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
public class HeartbeatService implements IHeartbeatService {
@Resource
private IdcDomainDao domainDao;
@Override
public void inHeartbeat(HeartbeatDto.SendDomain param, String clientIp) {
//TODO 验证通讯时间
//根据code查找发送方域信息
IdcDomain idcDomains = domainDao.getByCode(param.getCode());
if(ObjectUtil.isNull(idcDomains)){
//返回心跳异常
log.info("未找到code对应的域");
throw new BaseException(DataCentreCodeError.HEARTBEAT_ERROR);
}
//是否接受对方的请求
if(idcDomains.getAnswer() == 0){
//返回心跳异常
log.info("不接受对方的请求");
throw new BaseException(DataCentreCodeError.HEARTBEAT_ERROR);
}
//根据发送方公钥验证签名
byte[] decrypt;
try {
RSA pub = new RSA(null, idcDomains.getPublicKey());
decrypt = pub.decrypt(param.getData(), KeyType.PublicKey);
}catch (Exception e){
log.info("验证签名失败:{}",e);
throw new BaseException(DataCentreCodeError.HEARTBEAT_ERROR);
}
//查询自身域信息
IdcDomain selfDomains = domainDao.getOneself();
HeartbeatDto.MessageDomainInfo domainInfo;
try {
//根据自身私钥解密
RSA pri = new RSA(selfDomains.getPrivateKey(),null);
byte[] decrypt2 = pri.decrypt(decrypt, KeyType.PrivateKey);
//转换成对象
domainInfo = JSON.parseObject(StrUtil.str(decrypt2, CharsetUtil.CHARSET_UTF_8), HeartbeatDto.MessageDomainInfo.class);
}catch (Exception e){
log.info("解密失败:{}",e);
throw new BaseException(DataCentreCodeError.HEARTBEAT_ERROR);
}
//验证ip白名单是否匹配
if(domainInfo == null || !domainInfo.getHost().equals(clientIp)){
log.info("白名单不匹配:{}---实际请求{}",domainInfo,clientIp);
// throw new BaseException(DataCentreCodeError.HEARTBEAT_ERROR);
}
}
/**
* 定时发送心跳信息
*/
@Scheduled(cron="0/30 * * * * ?")
public void sendHeartbeat(){
log.info("发送心跳信息");
//查询自身域信息
IdcDomain selfDomains = domainDao.getOneself();
HeartbeatDto.MessageDomainInfo domainInfo = new HeartbeatDto.MessageDomainInfo();
//发送的信息
domainInfo.setId(selfDomains.getId());
domainInfo.setName(selfDomains.getName());
domainInfo.setCode(selfDomains.getCode());
domainInfo.setHost(selfDomains.getHost());
//查找需要轮询的域
List<IdcDomain> idcDomains = domainDao.getPolling();
if(CollectionUtil.isNotEmpty(idcDomains)){
idcDomains.forEach(idcDomain -> {
//修改最后请求时间
idcDomain.setLastAskTime(System.currentTimeMillis());
domainDao.updateByPrimaryKeySelective(idcDomain);
//使用对方的公钥加密
RSA pub = new RSA(null, idcDomain.getPublicKey());
byte[] encrypt = pub.encrypt(StrUtil.bytes(JSON.toJSONString(domainInfo), CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
//使用自己的私钥签名
RSA pri = new RSA(selfDomains.getPrivateKey(),null);
byte[] encrypt2 = pri.encrypt(encrypt, KeyType.PrivateKey);
//生成发送的对象
HeartbeatDto.SendDomain sendDomain = new HeartbeatDto.SendDomain();
sendDomain.setCode(selfDomains.getCode());
sendDomain.setTimestamp(System.currentTimeMillis());
//TODO 随机码
sendDomain.setData(encrypt2);
//发送心跳
String url = idcDomain.getUrl() + "/heartbeat";
log.info("调用接口:{}--{}", url, sendDomain);
String postBody = RestTemplateUtil.postBody(url, sendDomain);
System.out.println(postBody);
JSONObject jsonObject = JSONObject.parseObject(postBody);
log.info("接口返回:{}", jsonObject);
//请求正确返回则修改最后应答时间,否则无操作
Integer code = jsonObject.getInteger("code");
if (code != null && code == 200) {
idcDomain.setLastAnswerTime(System.currentTimeMillis());
domainDao.updateByPrimaryKeySelective(idcDomain);
}
});
}
}
}

19
src/main/java/com/ccsens/datacentre/service/IDomainService.java

@ -0,0 +1,19 @@
package com.ccsens.datacentre.service;
import com.ccsens.datacentre.bean.dto.HeartbeatDto;
import com.ccsens.datacentre.bean.vo.DomainVo;
import java.util.List;
/**
* @author
*/
public interface IDomainService {
/**
* 接受私域发送的消息返回域列表信息
* @param param 发送放信息
* @param clientIp 发送方ip
* @return 返回域列表
*/
List<DomainVo.DomainInfo> heartbeatQueryList(HeartbeatDto.SendDomain param, String clientIp);
}

16
src/main/java/com/ccsens/datacentre/service/IHeartbeatService.java

@ -0,0 +1,16 @@
package com.ccsens.datacentre.service;
import com.ccsens.datacentre.bean.dto.HeartbeatDto;
/**
* @author
*/
public interface IHeartbeatService {
/**
* 接受心跳并返回自身域列表
* @param param 发送心跳的域的code和信息
* @param clientIp 请求方的ip地址
*/
void inHeartbeat(HeartbeatDto.SendDomain param, String clientIp);
}

3
src/main/java/com/ccsens/datacentre/util/DataCentreCodeError.java

@ -7,6 +7,7 @@ import com.ccsens.util.CodeError;
*/
public class DataCentreCodeError extends CodeError {
public static final Code NOT_WBS_SHEET = new Code(501,"找不到wbs表",true);
public static final Code HEARTBEAT_ERROR = new Code(501,"心跳异常",true);
public static final Code GET_DOMAIN_ERROR = new Code(502,"查询域列表失败",true);
}

17
src/main/resources/application-dev.yml

@ -7,16 +7,16 @@ spring:
name: datacentre
datasource:
type: com.alibaba.druid.pool.DruidDataSource
# rabbitmq:
# host: 192.168.0.99
# password: 111111
# port: 5672
# username: admin
rabbitmq:
host: 127.0.0.1
password: guest
# listener:
# direct:
# auto-startup: false
# simple:
# auto-startup: false
host: dd.tall.wiki
password: 111111
port: 5672
username: guest
username: admin
redis:
database: 0
host: 127.0.0.1
@ -44,6 +44,7 @@ mybatisCache:
port: 6379
timeout: 1000
file:
path: /home/cloud/datacentre/uploads/
domain: https://test.tall.wiki/gateway/datacentre

2
src/main/resources/application-prod.yml

@ -29,7 +29,7 @@ swagger:
enable: true
eureka:
instance:
ip-address: 121.36.106.168
ip-address: 101.201.226.21
gatewayUrl: https://www.tall.wiki/gateway/
notGatewayUrl: https://www.tall.wiki/

10
src/main/resources/application-test.yml

@ -7,11 +7,11 @@ spring:
name: datacentre
datasource:
type: com.alibaba.druid.pool.DruidDataSource
rabbitmq:
host: dd.tall.wiki
password: 111111
port: 5672
username: admin
# rabbitmq:
# host: dd.tall.wiki
# password: 111111
# port: 5672
# username: admin
redis:
database: 0
host: 127.0.0.1

4
src/main/resources/druid-dev.yml

@ -15,7 +15,7 @@ spring:
maxWait: 60000
minEvictableIdleTimeMillis: 300000
minIdle: 5
# password: 37080c1f223685592316b02dad8816c019290a476e54ebb638f9aa3ba8b6bdb9
# password:
password: 68073a279b399baa1fa12cf39bfbb65bfc1480ffee7b659ccc81cf19be8c4473
poolPreparedStatements: true
servletLogSlowSql: true
@ -28,7 +28,7 @@ spring:
testOnReturn: false
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
url: jdbc:mysql://101.201.226.163:3306/data_centre?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
url: jdbc:mysql://101.201.226.163:3306/tall_df?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
username: root
validationQuery: SELECT 1 FROM DUAL
env: CCSENS_TALL

2
src/main/resources/druid-prod.yml

@ -29,7 +29,7 @@ spring:
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
# url: jdbc:mysql://127.0.0.1/defaultwbs?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
url: jdbc:mysql://www.tall.wiki/data_centre?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
url: jdbc:mysql://101.201.226.163:3306/tall_dm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
username: root
validationQuery: SELECT 1 FROM DUAL
env: CCSENS_TALL

2
src/main/resources/druid-test.yml

@ -28,7 +28,7 @@ spring:
testOnReturn: false
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
url: jdbc:mysql://101.201.226.163:3306/data_centre?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
url: jdbc:mysql://101.201.226.163:3306/tall_dh?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
username: root
validationQuery: SELECT 1 FROM DUAL
env: CCSENS_TALL

2
src/main/resources/logback-spring.xml

@ -9,7 +9,7 @@
<contextName>logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<property name="log.path" value="/home/cloud/datacentre/log/" />
<property name="log.path" value="/home/pt_os/service/datacentre/log/" />
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->

47
src/main/resources/mapper_dao/SPluginDao.xml

@ -0,0 +1,47 @@
<?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.ccsens.datacentre.persist.dao.IdcDomainDao">
<select id="getByCode" resultType="com.ccsens.datacentre.bean.po.IdcDomain">
SELECT * FROM `t_idc_domain` WHERE `code` = #{code} and rec_status = 0 limit 1
</select>
<select id="getOneself" resultType="com.ccsens.datacentre.bean.po.IdcDomain">
SELECT * FROM `t_idc_domain` WHERE self = 1 and rec_status = 0 limit 1
</select>
<select id="getPolling" resultType="com.ccsens.datacentre.bean.po.IdcDomain">
SELECT
`id`,
`name`,
`code`,
`url`,
`host`,
`last_update_time` as lastUpdateTime,
`last_ask_time` as lastAskTime,
`last_answer_time` as lastAnswerTime,
`public_key` as publicKey
FROM
`t_idc_domain`
WHERE
polling = 1
and self = 0
and rec_status = 0
</select>
<select id="queryAllDomain" resultType="com.ccsens.datacentre.bean.vo.DomainVo$DomainInfo">
SELECT
`id`,
`name`,
`code`,
`url`,
`host`,
`intro`,
`public_key` as publicKey
FROM
`t_idc_domain`
WHERE
rec_status = 0
</select>
<select id="getPubDomain" resultType="com.ccsens.datacentre.bean.po.IdcDomain">
SELECT * FROM `t_idc_domain` WHERE pub = 1 and rec_status = 0 limit 1
</select>
</mapper>

224
src/main/resources/mapper_raw/IdcDomainMapper.xml

@ -6,11 +6,17 @@
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="code" jdbcType="VARCHAR" property="code" />
<result column="intro" jdbcType="VARCHAR" property="intro" />
<result column="domain_name" jdbcType="VARCHAR" property="domainName" />
<result column="company" jdbcType="VARCHAR" property="company" />
<result column="time" jdbcType="BIGINT" property="time" />
<result column="public_domain" jdbcType="TINYINT" property="publicDomain" />
<result column="last_rcv_time" jdbcType="BIGINT" property="lastRcvTime" />
<result column="url" jdbcType="VARCHAR" property="url" />
<result column="host" jdbcType="VARCHAR" property="host" />
<result column="self" jdbcType="TINYINT" property="self" />
<result column="pub" jdbcType="TINYINT" property="pub" />
<result column="polling" jdbcType="TINYINT" property="polling" />
<result column="answer" jdbcType="TINYINT" property="answer" />
<result column="last_update_time" jdbcType="BIGINT" property="lastUpdateTime" />
<result column="last_ask_time" jdbcType="BIGINT" property="lastAskTime" />
<result column="last_answer_time" jdbcType="BIGINT" property="lastAnswerTime" />
<result column="public_key" jdbcType="VARCHAR" property="publicKey" />
<result column="private_key" jdbcType="VARCHAR" property="privateKey" />
<result column="operator" jdbcType="BIGINT" property="operator" />
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
@ -75,8 +81,8 @@
</where>
</sql>
<sql id="Base_Column_List">
id, name, code, intro, domain_name, company, time, public_domain, last_rcv_time,
operator, created_at, updated_at, rec_status
id, name, code, intro, url, host, self, pub, polling, answer, last_update_time, last_ask_time,
last_answer_time, public_key, private_key, operator, created_at, updated_at, rec_status
</sql>
<select id="selectByExample" parameterType="com.ccsens.datacentre.bean.po.IdcDomainExample" resultMap="BaseResultMap">
select
@ -110,15 +116,19 @@
</delete>
<insert id="insert" parameterType="com.ccsens.datacentre.bean.po.IdcDomain">
insert into t_idc_domain (id, name, code,
intro, domain_name, company,
time, public_domain, last_rcv_time,
operator, created_at, updated_at,
rec_status)
intro, url, host, self,
pub, polling, answer,
last_update_time, last_ask_time, last_answer_time,
public_key, private_key, operator,
created_at, updated_at, rec_status
)
values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{code,jdbcType=VARCHAR},
#{intro,jdbcType=VARCHAR}, #{domainName,jdbcType=VARCHAR}, #{company,jdbcType=VARCHAR},
#{time,jdbcType=BIGINT}, #{publicDomain,jdbcType=TINYINT}, #{lastRcvTime,jdbcType=BIGINT},
#{operator,jdbcType=BIGINT}, #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP},
#{recStatus,jdbcType=TINYINT})
#{intro,jdbcType=VARCHAR}, #{url,jdbcType=VARCHAR}, #{host,jdbcType=VARCHAR}, #{self,jdbcType=TINYINT},
#{pub,jdbcType=TINYINT}, #{polling,jdbcType=TINYINT}, #{answer,jdbcType=TINYINT},
#{lastUpdateTime,jdbcType=BIGINT}, #{lastAskTime,jdbcType=BIGINT}, #{lastAnswerTime,jdbcType=BIGINT},
#{publicKey,jdbcType=VARCHAR}, #{privateKey,jdbcType=VARCHAR}, #{operator,jdbcType=BIGINT},
#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}
)
</insert>
<insert id="insertSelective" parameterType="com.ccsens.datacentre.bean.po.IdcDomain">
insert into t_idc_domain
@ -135,20 +145,38 @@
<if test="intro != null">
intro,
</if>
<if test="domainName != null">
domain_name,
<if test="url != null">
url,
</if>
<if test="company != null">
company,
<if test="host != null">
host,
</if>
<if test="time != null">
time,
<if test="self != null">
self,
</if>
<if test="publicDomain != null">
public_domain,
<if test="pub != null">
pub,
</if>
<if test="lastRcvTime != null">
last_rcv_time,
<if test="polling != null">
polling,
</if>
<if test="answer != null">
answer,
</if>
<if test="lastUpdateTime != null">
last_update_time,
</if>
<if test="lastAskTime != null">
last_ask_time,
</if>
<if test="lastAnswerTime != null">
last_answer_time,
</if>
<if test="publicKey != null">
public_key,
</if>
<if test="privateKey != null">
private_key,
</if>
<if test="operator != null">
operator,
@ -176,20 +204,38 @@
<if test="intro != null">
#{intro,jdbcType=VARCHAR},
</if>
<if test="domainName != null">
#{domainName,jdbcType=VARCHAR},
<if test="url != null">
#{url,jdbcType=VARCHAR},
</if>
<if test="host != null">
#{host,jdbcType=VARCHAR},
</if>
<if test="self != null">
#{self,jdbcType=TINYINT},
</if>
<if test="pub != null">
#{pub,jdbcType=TINYINT},
</if>
<if test="polling != null">
#{polling,jdbcType=TINYINT},
</if>
<if test="answer != null">
#{answer,jdbcType=TINYINT},
</if>
<if test="lastUpdateTime != null">
#{lastUpdateTime,jdbcType=BIGINT},
</if>
<if test="company != null">
#{company,jdbcType=VARCHAR},
<if test="lastAskTime != null">
#{lastAskTime,jdbcType=BIGINT},
</if>
<if test="time != null">
#{time,jdbcType=BIGINT},
<if test="lastAnswerTime != null">
#{lastAnswerTime,jdbcType=BIGINT},
</if>
<if test="publicDomain != null">
#{publicDomain,jdbcType=TINYINT},
<if test="publicKey != null">
#{publicKey,jdbcType=VARCHAR},
</if>
<if test="lastRcvTime != null">
#{lastRcvTime,jdbcType=BIGINT},
<if test="privateKey != null">
#{privateKey,jdbcType=VARCHAR},
</if>
<if test="operator != null">
#{operator,jdbcType=BIGINT},
@ -226,20 +272,38 @@
<if test="record.intro != null">
intro = #{record.intro,jdbcType=VARCHAR},
</if>
<if test="record.domainName != null">
domain_name = #{record.domainName,jdbcType=VARCHAR},
<if test="record.url != null">
url = #{record.url,jdbcType=VARCHAR},
</if>
<if test="record.company != null">
company = #{record.company,jdbcType=VARCHAR},
<if test="record.host != null">
host = #{record.host,jdbcType=VARCHAR},
</if>
<if test="record.time != null">
time = #{record.time,jdbcType=BIGINT},
<if test="record.self != null">
self = #{record.self,jdbcType=TINYINT},
</if>
<if test="record.publicDomain != null">
public_domain = #{record.publicDomain,jdbcType=TINYINT},
<if test="record.pub != null">
pub = #{record.pub,jdbcType=TINYINT},
</if>
<if test="record.lastRcvTime != null">
last_rcv_time = #{record.lastRcvTime,jdbcType=BIGINT},
<if test="record.polling != null">
polling = #{record.polling,jdbcType=TINYINT},
</if>
<if test="record.answer != null">
answer = #{record.answer,jdbcType=TINYINT},
</if>
<if test="record.lastUpdateTime != null">
last_update_time = #{record.lastUpdateTime,jdbcType=BIGINT},
</if>
<if test="record.lastAskTime != null">
last_ask_time = #{record.lastAskTime,jdbcType=BIGINT},
</if>
<if test="record.lastAnswerTime != null">
last_answer_time = #{record.lastAnswerTime,jdbcType=BIGINT},
</if>
<if test="record.publicKey != null">
public_key = #{record.publicKey,jdbcType=VARCHAR},
</if>
<if test="record.privateKey != null">
private_key = #{record.privateKey,jdbcType=VARCHAR},
</if>
<if test="record.operator != null">
operator = #{record.operator,jdbcType=BIGINT},
@ -264,11 +328,17 @@
name = #{record.name,jdbcType=VARCHAR},
code = #{record.code,jdbcType=VARCHAR},
intro = #{record.intro,jdbcType=VARCHAR},
domain_name = #{record.domainName,jdbcType=VARCHAR},
company = #{record.company,jdbcType=VARCHAR},
time = #{record.time,jdbcType=BIGINT},
public_domain = #{record.publicDomain,jdbcType=TINYINT},
last_rcv_time = #{record.lastRcvTime,jdbcType=BIGINT},
url = #{record.url,jdbcType=VARCHAR},
host = #{record.host,jdbcType=VARCHAR},
self = #{record.self,jdbcType=TINYINT},
pub = #{record.pub,jdbcType=TINYINT},
polling = #{record.polling,jdbcType=TINYINT},
answer = #{record.answer,jdbcType=TINYINT},
last_update_time = #{record.lastUpdateTime,jdbcType=BIGINT},
last_ask_time = #{record.lastAskTime,jdbcType=BIGINT},
last_answer_time = #{record.lastAnswerTime,jdbcType=BIGINT},
public_key = #{record.publicKey,jdbcType=VARCHAR},
private_key = #{record.privateKey,jdbcType=VARCHAR},
operator = #{record.operator,jdbcType=BIGINT},
created_at = #{record.createdAt,jdbcType=TIMESTAMP},
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP},
@ -289,20 +359,38 @@
<if test="intro != null">
intro = #{intro,jdbcType=VARCHAR},
</if>
<if test="domainName != null">
domain_name = #{domainName,jdbcType=VARCHAR},
<if test="url != null">
url = #{url,jdbcType=VARCHAR},
</if>
<if test="host != null">
host = #{host,jdbcType=VARCHAR},
</if>
<if test="self != null">
self = #{self,jdbcType=TINYINT},
</if>
<if test="pub != null">
pub = #{pub,jdbcType=TINYINT},
</if>
<if test="polling != null">
polling = #{polling,jdbcType=TINYINT},
</if>
<if test="answer != null">
answer = #{answer,jdbcType=TINYINT},
</if>
<if test="lastUpdateTime != null">
last_update_time = #{lastUpdateTime,jdbcType=BIGINT},
</if>
<if test="company != null">
company = #{company,jdbcType=VARCHAR},
<if test="lastAskTime != null">
last_ask_time = #{lastAskTime,jdbcType=BIGINT},
</if>
<if test="time != null">
time = #{time,jdbcType=BIGINT},
<if test="lastAnswerTime != null">
last_answer_time = #{lastAnswerTime,jdbcType=BIGINT},
</if>
<if test="publicDomain != null">
public_domain = #{publicDomain,jdbcType=TINYINT},
<if test="publicKey != null">
public_key = #{publicKey,jdbcType=VARCHAR},
</if>
<if test="lastRcvTime != null">
last_rcv_time = #{lastRcvTime,jdbcType=BIGINT},
<if test="privateKey != null">
private_key = #{privateKey,jdbcType=VARCHAR},
</if>
<if test="operator != null">
operator = #{operator,jdbcType=BIGINT},
@ -324,11 +412,17 @@
set name = #{name,jdbcType=VARCHAR},
code = #{code,jdbcType=VARCHAR},
intro = #{intro,jdbcType=VARCHAR},
domain_name = #{domainName,jdbcType=VARCHAR},
company = #{company,jdbcType=VARCHAR},
time = #{time,jdbcType=BIGINT},
public_domain = #{publicDomain,jdbcType=TINYINT},
last_rcv_time = #{lastRcvTime,jdbcType=BIGINT},
url = #{url,jdbcType=VARCHAR},
host = #{host,jdbcType=VARCHAR},
self = #{self,jdbcType=TINYINT},
pub = #{pub,jdbcType=TINYINT},
polling = #{polling,jdbcType=TINYINT},
answer = #{answer,jdbcType=TINYINT},
last_update_time = #{lastUpdateTime,jdbcType=BIGINT},
last_ask_time = #{lastAskTime,jdbcType=BIGINT},
last_answer_time = #{lastAnswerTime,jdbcType=BIGINT},
public_key = #{publicKey,jdbcType=VARCHAR},
private_key = #{privateKey,jdbcType=VARCHAR},
operator = #{operator,jdbcType=BIGINT},
created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},

12
src/main/resources/mbg.xml

@ -21,7 +21,7 @@
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://49.233.89.188:3306/data_centre?useUnicode=true&amp;characterEncoding=UTF-8&amp;tinyInt1isBit=false"
connectionURL="jdbc:mysql://101.201.226.163:3306/tall_dm?useUnicode=true&amp;characterEncoding=UTF-8&amp;tinyInt1isBit=false"
userId="root"
password="po3OynBO[M3579p6L7)o">
</jdbcConnection>
@ -56,12 +56,12 @@
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<table tableName="t_idc_user_domain" domainObjectName="IdcUserDomain"></table>
<table tableName="t_idc_business" domainObjectName="IdcBusiness"></table>
<!-- <table tableName="t_idc_user_domain" domainObjectName="IdcUserDomain"></table>-->
<!-- <table tableName="t_idc_business" domainObjectName="IdcBusiness"></table>-->
<table tableName="t_idc_domain" domainObjectName="IdcDomain"></table>
<table tableName="t_idc_domain_business" domainObjectName="IdcDomainBusiness"></table>
<table tableName="t_idc_user" domainObjectName="IdcUser"></table>
<table tableName="t_idc_user_domain" domainObjectName="IdcUserDomain"></table>
<!-- <table tableName="t_idc_domain_business" domainObjectName="IdcDomainBusiness"></table>-->
<!-- <table tableName="t_idc_user" domainObjectName="IdcUser"></table>-->
<!-- <table tableName="t_idc_user_domain" domainObjectName="IdcUserDomain"></table>-->
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">

Loading…
Cancel
Save