Browse Source

Merge branch 'refs/heads/release-sy-v1.0.0' into feature-v1.3.0

# Conflicts:
#	sql/sy/v1.3.0/增量脚本/v1.3.0-update.sql
master_tdsql
hxh 10 months ago
parent
commit
a9e13a5501
  1. 162
      shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java
  2. 257
      shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java
  3. 59
      shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java
  4. 25
      shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java
  5. 8
      shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysMenu.java
  6. 24
      shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java
  7. 60
      shuili-system/src/main/java/com/kms/system/domain/vo/RouterVo.java
  8. 45
      shuili-system/src/main/java/com/kms/system/service/SysMenuService.java
  9. 63
      shuili-system/src/main/java/com/kms/yxgh/base/domain/df/DfDwsRelDiscDike.java
  10. 2
      shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResDscdnm.java
  11. 2
      shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResRv.java
  12. 1
      shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncBasicEnum.java
  13. 8
      shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncMonitorEnum.java
  14. 28
      shuili-system/src/main/java/com/kms/yxgh/base/job/DataSyncJob.java
  15. 4
      shuili-system/src/main/java/com/kms/yxgh/util/RestTemplateUtils.java
  16. 21
      sql/sy/v1.3.0/全量脚本/dataSync.sql
  17. 22
      sql/sy/v1.3.0/增量脚本/v1.3.0-update.sql

162
shuili-admin/src/main/java/com/kms/aspect/WebLogAspect.java

@ -0,0 +1,162 @@
package com.kms.aspect;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* 接口日志界面
*
* @author hxh
**/
@Aspect
@Component
@Slf4j
public class WebLogAspect implements EnvironmentAware, InitializingBean {
private boolean printResponseEnable;
private Environment environment;
/**
* 切点
*/
@Pointcut("@within(org.springframework.web.bind.annotation.RestController) || @within(org.springframework.stereotype.Controller)")
public void webLog() {
}
/**
* 环绕切面
*
* @param joinPoint ProceedingJoinPoint
* @return 结果
* @throws Throwable 异常
*/
@Around("webLog()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (servletRequestAttributes == null) {
return joinPoint.proceed();
}
HttpServletRequest request = servletRequestAttributes.getRequest();
Class<?> targetCls = joinPoint.getTarget().getClass();
MethodSignature ms = (MethodSignature) joinPoint.getSignature();
//获取目标方法上的注解指定的操作名称
Method targetMethod =
targetCls.getDeclaredMethod(
ms.getName(),
ms.getParameterTypes());
String uri = request.getRequestURI();
String httpMethod = request.getMethod();
Object requestParams = getRequestParameter(request, joinPoint);
log.info("[{}] \"{}\" begin, params:{}", httpMethod, uri,
JSON.toJSONString(requestParams));
Object result;
try {
result = joinPoint.proceed();
if (printResponseEnable) {
log.info("[{}] \"{}\" response:{}", httpMethod, uri, JSON.toJSONString(result));
}
return result;
} catch (Throwable ex) {
log.error("[{}] \"{}\" error:{}", httpMethod, uri, ex.getMessage());
throw ex;
} finally {
log.info("[{}] \"{}\" end, use time:{}ms", httpMethod, uri, System.currentTimeMillis() - startTime);
}
}
/**
* 获取请求参数
*
* @param request HttpServletRequest
* @param joinPoint JoinPoint
* @return 结果
*/
private Object getRequestParameter(HttpServletRequest request, JoinPoint joinPoint) {
Object[] args = joinPoint.getArgs();
Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
Parameter[] parameters = method.getParameters();
Map<String, Object> params = new HashMap<>(parameters.length);
//json数据
for (int i = 0; i < parameters.length; i++) {
if (isFilterObject(args[i])) {
continue;
}
RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class);
if (requestBody != null) {
//一个接口只会有一个RequestBody
return args[i];
}
}
//表单提交或url拼接
Enumeration<String> paramNames = request.getParameterNames();
while (paramNames.hasMoreElements()) {
String key = paramNames.nextElement();
params.put(key, request.getParameter(key));
}
return !params.isEmpty() ? params : null;
}
/**
* 是否需要过滤
*
* @param obj Object
* @return true or false
*/
private boolean isFilterObject(final Object obj) {
if (obj == null) {
return true;
}
Class<?> clazz = obj.getClass();
if (clazz.isArray()) {
return clazz.getComponentType().isAssignableFrom(MultipartFile.class);
} else if (Collection.class.isAssignableFrom(clazz)) {
Collection collection = (Collection) obj;
for (Object o : collection) {
return o instanceof MultipartFile;
}
} else if (Map.class.isAssignableFrom(clazz)) {
Map map = (Map) obj;
for (Object o : map.entrySet()) {
Map.Entry entry = (Map.Entry) o;
return entry.getValue() instanceof MultipartFile;
}
}
return obj instanceof MultipartFile || obj instanceof HttpServletRequest || obj instanceof HttpServletResponse;
}
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
@Override
public void afterPropertiesSet() {
printResponseEnable = environment.getProperty("sy.public.log-config.print-response", Boolean.class, false);
}
}

257
shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java

File diff suppressed because one or more lines are too long

59
shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java

@ -3,8 +3,12 @@ package com.kms.web.utils;
import cn.hutool.core.util.IdUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.kms.web.utils.singleDomain.SingleMenu;
import com.shuili.common.exception.CustomException;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
@ -12,6 +16,7 @@ import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@Component
public class WaterRequestUtil {
@ -195,22 +200,38 @@ public class WaterRequestUtil {
* @param authorization
* @return
*/
public WaterResult authUser(String authorization) {
log.info("--------请求统一门户用户验证,请求地址为:" + userUrl);
public WaterResultV2<WaterUser> authUser(String authorization) {
long startTime = System.currentTimeMillis();
log.info("--------请求统一门户用户验证,请求地址为:{}", userUrl);
HttpRequest get = createGet(userUrl, authUserServiceId, authUserAppsecret);
String body;
try (HttpResponse response = get.header("Authorization", authorization)
.execute()) {
body = response.body();
}
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
long endTime = System.currentTimeMillis();
log.info("--------请求统一门户用户验证,耗时{}毫秒,返回结果为:{}", endTime - startTime, body);
WaterResultV2<WaterUser> waterResult = JSON.parseObject(body, new TypeReference<WaterResultV2<WaterUser>>() {
});
isSuccess(waterResult);
return waterResult;
}
@Data
public static class WaterUser {
private WaterUserInfo user;
private List<String> functionPerms;
}
@Data
public static class WaterUserInfo {
private String id;
}
public WaterResult getOrgPage() {
log.info("--------请求获取门户组织信息,请求地址为:" + orgUrl);
log.info("--------请求获取门户组织信息,请求地址为:{}", orgUrl);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("page", 1);
hashMap.put("size", 100);
@ -238,19 +259,20 @@ public class WaterRequestUtil {
}
public WaterResult getUserResource(String authorization) {
log.info("--------请求获取门户角色信息,请求地址为:" + resourceUrl);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("systemCode", systemCode);
public WaterResultV2<List<SingleMenu>> getUserResource(String authorization) {
//计算请求消耗的时间
long startTime = System.currentTimeMillis();
log.info("--------请求获取门户用户资源信息,请求地址为:{}", resourceUrl);
HttpRequest get = createPost(resourceUrl + "?systemCode=" + systemCode, resourceServiceId, resourceAppsecret);
// HttpRequest get = createPost(resourceUrl,resourceServiceId,resourceAppsecret);
get.header("Authorization", authorization);
String body;
try (HttpResponse response = get.execute()) {
body = response.body();
}
log.info("--------请求获取门户用户资源信息,返回结果为:" + body);
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
long endTime = System.currentTimeMillis();
log.info("--------请求获取门户用户资源信息,耗时{}毫秒,返回结果为:{}", endTime - startTime, body);
WaterResultV2<List<SingleMenu>> waterResult = JSON.parseObject(body, new TypeReference<WaterResultV2<List<SingleMenu>>>() {
});
isSuccess(waterResult);
//{\"total\":1,\"size\":100,\"records\":[{\"area\":\"440000\",\"systemList\":[{\"area\":\"440000\",\"code\":\"sgc-jg\",\"name\":\"水工程应用-水利工程建设管理模块\",\"id\":\"1732648267643097090\"}],\"code\":\"YW00013\",\"level\":\"1d\",\"dataConfig\":\"none\",\"type\":\"BUSINESS\",\"posts\":[],\"users\":[{\"id\":\"20231225000006\"},{\"id\":\"20240119000002\"}],\"name\":\"水利工程应用-水利工程建设管理模块角色\",\"id\":\"20231213000001\",\"category\":\"BUSINESS\",\"businesses\":[{\"parent\":\"1762458920822599682\",\"businessCode\":\"YWSLGCJSGL0008\",\"parentName\":\"水利工程建设管理\",\"businessName\":\"水利工程建设管理\",\"description\":\"\",\"id\":\"1705128209926942721\",\"delFlag\":0}],\"status\":\"1\"}],\"page\":1}
return waterResult;
@ -258,7 +280,7 @@ public class WaterRequestUtil {
public WaterResult getRolePage() {
log.info("--------请求获取门户角色信息,请求地址为:" + roleUrl);
log.info("--------请求获取门户角色信息,请求地址为:{}", roleUrl);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("page", 1);
hashMap.put("size", 100);
@ -269,6 +291,7 @@ public class WaterRequestUtil {
.execute()) {
body = response.body();
}
log.info("--------请求获取门户角色信息,返回结果为:{}", body);
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
isSuccess(waterResult);
//{\"total\":1,\"size\":100,\"records\":[{\"area\":\"440000\",\"systemList\":[{\"area\":\"440000\",\"code\":\"sgc-jg\",\"name\":\"水工程应用-水利工程建设管理模块\",\"id\":\"1732648267643097090\"}],\"code\":\"YW00013\",\"level\":\"1d\",\"dataConfig\":\"none\",\"type\":\"BUSINESS\",\"posts\":[],\"users\":[{\"id\":\"20231225000006\"},{\"id\":\"20240119000002\"}],\"name\":\"水利工程应用-水利工程建设管理模块角色\",\"id\":\"20231213000001\",\"category\":\"BUSINESS\",\"businesses\":[{\"parent\":\"1762458920822599682\",\"businessCode\":\"YWSLGCJSGL0008\",\"parentName\":\"水利工程建设管理\",\"businessName\":\"水利工程建设管理\",\"description\":\"\",\"id\":\"1705128209926942721\",\"delFlag\":0}],\"status\":\"1\"}],\"page\":1}
@ -277,7 +300,7 @@ public class WaterRequestUtil {
public WaterResult usersPage() {
log.info("--------请求获取门户用户信息,请求地址为:" + usersUrl);
log.info("--------请求获取门户用户信息,请求地址为:{}", usersUrl);
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("page", 1);
hashMap.put("size", 100);
@ -288,6 +311,7 @@ public class WaterRequestUtil {
.execute()) {
body = response.body();
}
log.info("--------请求获取门户用户信息,返回结果为:{}", body);
WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class);
isSuccess(waterResult);
return waterResult;
@ -303,5 +327,14 @@ public class WaterRequestUtil {
}
}
private void isSuccess(WaterResultV2<?> waterResult) {
if (waterResult == null) {
throw new CustomException("请求异常");
}
if (waterResult.getCode() != 200 || !waterResult.getSuccess()) {
throw new CustomException("请求失败,原因:" + waterResult.getMessage());
}
}
}

25
shuili-admin/src/main/java/com/kms/web/utils/WaterResultV2.java

@ -0,0 +1,25 @@
package com.kms.web.utils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @ClassName: WaterResultV2
* @Description: TODO
* @Date: 2024/6/1 上午12:27
* *
* @author: hxh
* @version: 1.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class WaterResultV2<T> {
private int code;
private String message;
private Boolean success;
private T data;
private String timestamp;
}

8
shuili-framework/src/main/java/com/shuili/common/core/domain/entity/SysMenu.java

@ -39,7 +39,7 @@ public class SysMenu extends BaseEntity {
/**
* 显示顺序
*/
private String orderNum;
private Integer orderNum;
/**
* 路由地址
@ -91,6 +91,8 @@ public class SysMenu extends BaseEntity {
private List<SysMenu> children = new ArrayList<SysMenu>();
@NotBlank(message = "菜单名称不能为空")
@Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
public String getMenuName() {
@ -118,11 +120,11 @@ public class SysMenu extends BaseEntity {
}
@NotBlank(message = "显示顺序不能为空")
public String getOrderNum() {
public Integer getOrderNum() {
return orderNum;
}
public void setOrderNum(String orderNum) {
public void setOrderNum(Integer orderNum) {
this.orderNum = orderNum;
}

24
shuili-system/src/main/java/com/kms/framework/web/service/SysPermissionService.java

@ -12,8 +12,10 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -56,7 +58,7 @@ public class SysPermissionService {
* @return 菜单权限信息
*/
public Set<String> getMenuPermission(SysUser user) {
Set<String> perms = new HashSet<String>();
Set<String> perms = new HashSet<>();
// 管理员拥有所有权限
if (user.isAdmin()) {
perms.add("*:*:*");
@ -80,31 +82,35 @@ public class SysPermissionService {
Object cache = redisCache.getCacheObject(menusKey(userId));
if (cache != null) {
List<MenuDto> menus = StringUtils.cast(cache);
List<String> ides = menus.stream().map(MenuDto::getCode).collect(Collectors.toList());
Map<String, MenuDto> map = menus.stream().collect(Collectors.toMap(MenuDto::getCode, m -> m));
return menuService.selectMenuList(ides).stream().map(item ->
List<String> ides = menus.stream().map(MenuDto::getCode).map(String::trim).collect(Collectors.toList());
Map<String, MenuDto> map = menus.stream().collect(Collectors.toMap(MenuDto::getCode, Function.identity(), (a, b) -> a));
return menuService.getChildPerms(menuService.selectMenuList(ides).stream().peek(item ->
{
MenuDto dto = map.get(item.getId());
if (dto != null) {
item.setVisible(dto.getVisible());
item.setOrderNum(dto.getSeq().toString());
item.setOrderNum(dto.getSeq());
item.setStatus(dto.getStatus());
item.setIsMain(true);
return item;
}
return null;
}
).filter(Objects::nonNull).collect(Collectors.toList());
).collect(Collectors.toList()), "0");
} else {
return Collections.emptyList();
}
}
public void setUserPermissionFromPortal(String userId, List<String> perms) {
if (CollectionUtils.isEmpty(perms)) {
return;
}
redisCache.setCacheObject(permsKey(userId), perms);
}
public void setUserMenuFromPortal(String userId, List<MenuDto> menus) {
if (CollectionUtils.isEmpty(menus)) {
return;
}
redisCache.setCacheObject(menusKey(userId), menus);
}

60
shuili-system/src/main/java/com/kms/system/domain/vo/RouterVo.java

@ -10,8 +10,7 @@ import java.util.List;
* @author kms
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class RouterVo
{
public class RouterVo {
/**
* 路由名字
*/
@ -42,6 +41,8 @@ public class RouterVo
*/
private Boolean alwaysShow;
private Integer orderNum;
/**
* 其他元素
*/
@ -52,83 +53,74 @@ public class RouterVo
*/
private List<RouterVo> children;
public String getName()
{
public Integer getOrderNum() {
return orderNum;
}
public void setOrderNum(Integer orderNum) {
this.orderNum = orderNum;
}
public String getName() {
return name;
}
public void setName(String name)
{
public void setName(String name) {
this.name = name;
}
public String getPath()
{
public String getPath() {
return path;
}
public void setPath(String path)
{
public void setPath(String path) {
this.path = path;
}
public boolean getHidden()
{
public boolean getHidden() {
return hidden;
}
public void setHidden(boolean hidden)
{
public void setHidden(boolean hidden) {
this.hidden = hidden;
}
public String getRedirect()
{
public String getRedirect() {
return redirect;
}
public void setRedirect(String redirect)
{
public void setRedirect(String redirect) {
this.redirect = redirect;
}
public String getComponent()
{
public String getComponent() {
return component;
}
public void setComponent(String component)
{
public void setComponent(String component) {
this.component = component;
}
public Boolean getAlwaysShow()
{
public Boolean getAlwaysShow() {
return alwaysShow;
}
public void setAlwaysShow(Boolean alwaysShow)
{
public void setAlwaysShow(Boolean alwaysShow) {
this.alwaysShow = alwaysShow;
}
public MetaVo getMeta()
{
public MetaVo getMeta() {
return meta;
}
public void setMeta(MetaVo meta)
{
public void setMeta(MetaVo meta) {
this.meta = meta;
}
public List<RouterVo> getChildren()
{
public List<RouterVo> getChildren() {
return children;
}
public void setChildren(List<RouterVo> children)
{
public void setChildren(List<RouterVo> children) {
this.children = children;
}
}

45
shuili-system/src/main/java/com/kms/system/service/SysMenuService.java

@ -16,9 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 菜单 业务层处理
@ -103,39 +101,6 @@ public class SysMenuService extends BaseService<SysMenuMapper, SysMenu> {
return getChildPerms(menus, "0");
}
public List<SysMenu> selectMenuTreeByUserId(String userId, List<SysMenu> menuList) {
List<SysMenu> menus;
if ("1".equals(userId)) {
menus = menuMapper.selectMenuTreeAll();
} else {
menus = menuMapper.selectMenuTreeByUserId(userId);
}
if (menus != null) {
return getChildPerms(unionMenu(menus, menuList), "0");
} else {
return Collections.emptyList();
}
}
//菜单取并集
private List<SysMenu> unionMenu(List<SysMenu> menuList, List<SysMenu> menus) {
return Stream.concat(menuList.stream(), menus.stream())
.collect(Collectors.toMap(SysMenu::getId, Function.identity(), (o1, o2) -> {
if (o1.getIsMain()) {
return o1;
}
if (o2.getIsMain()) {
return o2;
}
return o1;
}))
.values()
.stream()
.filter(item -> item.getStatus().equals("0"))
.collect(Collectors.toList());
}
/**
* 根据角色ID查询菜单树信息
*
@ -153,13 +118,13 @@ public class SysMenuService extends BaseService<SysMenuMapper, SysMenu> {
* @return 路由列表
*/
public List<RouterVo> buildMenus(List<SysMenu> menus) {
List<RouterVo> routers = new LinkedList<>();
for (SysMenu menu : menus) {
return menus.stream().map(menu -> {
RouterVo router = new RouterVo();
router.setHidden("1".equals(menu.getVisible()));
router.setName(getRouteName(menu));
router.setPath(getRouterPath(menu));
router.setComponent(getComponent(menu));
router.setOrderNum(menu.getOrderNum());
router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
List<SysMenu> cMenus = menu.getChildren();
if (!cMenus.isEmpty() && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
@ -176,9 +141,9 @@ public class SysMenuService extends BaseService<SysMenuMapper, SysMenu> {
childrenList.add(children);
router.setChildren(childrenList);
}
routers.add(router);
}
return routers;
return router;
}).sorted(Comparator.comparingInt(RouterVo::getOrderNum))
.collect(Collectors.toList());
}
/**

63
shuili-system/src/main/java/com/kms/yxgh/base/domain/df/DfDwsRelDiscDike.java

@ -0,0 +1,63 @@
package com.kms.yxgh.base.domain.df;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.kms.yxgh.base.SyBaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@TableName("dws_rel_disc_dike")
@Data
@ApiModel("堤段所属堤防对象关系表")
public class DfDwsRelDiscDike extends SyBaseEntity {
private static final long serialVersionUID = 1L;
/**
* 堤段代码
*/
@ApiModelProperty("堤段代码")
@TableField("DISC_CODE")
private String discCode;
/**
* 堤段名称
*/
@ApiModelProperty("堤段名称")
@TableField("DISC_NAME")
private String discName;
/**
* 堤防代码
*/
@ApiModelProperty("堤防代码")
@TableField("DIKE_CODE")
private String dikeCode;
/**
* 堤防名称
*/
@ApiModelProperty("堤防名称")
@TableField("DIKE_NAME")
private String dikeName;
/**
* 关系建立时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("关系建立时间")
@TableField("FROM_DATE")
private Date fromDate;
/**
* 关系终止时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("关系终止时间")
@TableField("TO_DATE")
private Date toDate;
}

2
shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResDscdnm.java

@ -50,7 +50,7 @@ public class SkDwsRelResDscdnm extends SyBaseEntity {
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("关系建立时间")
@TableField("FROM_CODE")
@TableField("FROM_DATE")
private Date fromDate;
/**

2
shuili-system/src/main/java/com/kms/yxgh/base/domain/sk/SkDwsRelResRv.java

@ -50,7 +50,7 @@ public class SkDwsRelResRv extends SyBaseEntity {
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("关系建立时间")
@TableField("FROM_CODE")
@TableField("FROM_DATE")
private Date fromDate;
/**

1
shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncBasicEnum.java

@ -33,6 +33,7 @@ public enum DataSyncBasicEnum {
REL_WAGA_RES("dws_rel_waga_res", "/dws_rel_waga_res", SzDwsRelWagaRes.class, "水闸所属水库关系表"),
REL_WAGA_DIKE("dws_rel_waga_dike", "/dws_rel_waga_dike", SzDwsRelWagaDike.class, "水闸所属堤防对象关系表"),
REL_DIKE_RV("dws_rel_dike_rv", "/dws_rel_dike_rv", DfDwsRelDikeRv.class, "堤防所属河流关系表"),
REL_DISC_DIKE("dws_rel_disc_dike", "/dws_rel_disc_dike", DfDwsRelDiscDike.class, "堤段所属堤防对象关系表"),
;
private final String name;

8
shuili-system/src/main/java/com/kms/yxgh/base/enums/DataSyncMonitorEnum.java

@ -11,7 +11,7 @@ public enum DataSyncMonitorEnum {
MS_HDM_OBP("ms_hdm_obp", "/bzjck/ms_hdm_obp", MsHdmObp.class, "降水量监测表"),
MS_HDM_RIVER("ms_hdm_river", "/bzjck/ms_hdm_river", MsHdmRiver.class, "河道水情监测表"),
MS_HDM_RSVR("ms_hdm_rsvr", "/bzjck/ms_hdm_rsvr", MsHdmRiver.class, "水库水情监测表"),
MS_HDM_RSVR("ms_hdm_rsvr", "/bzjck/ms_hdm_rsvr", MsHdmRsvr.class, "水库水情监测表"),
MS_HDM_TIDE("ms_hdm_tide", "/bzjck/ms_hdm_tide", MsHdmTide.class, "潮汐水情监测表"),
MS_HDM_WDWV("ms_hdm_wdwv", "/bzjck/ms_hdm_wdwv", MsHdmWdwv.class, "风浪监测表"),
MS_HDM_SALT("ms_hdm_salt", "/bzjck/ms_hdm_salt", MsHdmSalt.class, "咸潮监测表"),
@ -21,15 +21,15 @@ public enum DataSyncMonitorEnum {
MS_HDM_DAYEV("ms_hdm_dayev", "/bzjck/ms_hdm_dayev", MsHdmDayev.class, "日蒸发量表"),
MS_HDM_PSTAT("ms_hdm_pstat", "/bzjck/ms_hdm_pstat", MsHdmPstat.class, "降水量统计表"),
MS_WQM_WQAMD("ms_wqm_wqamd", "/bzjck/ms_wqm_wqamd", MsHdmWqamd.class, "水质自动监测数据表"),
MS_HPM_SLCRS("ms_hpm_slcrs", "/bzjck/ms_hpm_slcrs", MsHdmStorm.class, "水闸运行状况监测表"),
MS_HPM_SLCRS("ms_hpm_slcrs", "/bzjck/ms_hpm_slcrs", MsHdmSlcrs.class, "水闸运行状况监测表"),
MS_HPM_DKRS("ms_hpm_dkrs", "/bzjck/ms_hpm_dkrs", MsHdmDkrs.class, "堤防段运行状况监测表"),
MS_HPM_GATE("ms_hpm_gate", "/bzjck/ms_hpm_gate", MsHdmGate.class, "水利工程闸门开度监测表"),
MS_DSM_SRVRDS("ms_dsm_srvrds", "/bzjck/ms_dsm_srvrds", MsHdmSvrds.class, "表面垂直位移监测表"),
MS_DSM_SRHRDS("ms_dsm_srhrds", "/bzjck/ms_dsm_srhrds", MsHdmSrhrds.class, "表面水平位移监测表"),
MS_DSM_INVRDS("ms_dsm_invrds", "/bzjck/ms_dsm_invrds", MsHdmInvrds.class, "内部垂直位移监测表"),
MS_DSM_INHRDS("ms_dsm_inhrds", "/bzjck/ms_dsm_inhrds", MsHdmInhrds.class, "内部水平位移监测表"),
MS_DSM_CKOPDG("ms_dsm_ckopdg", "/bzjck/ms_dsm_ckopdg", MsHdmGate.class, "裂缝开合度位移监测表"),
MS_DSM_SPPR("ms_dsm_sppr", "/bzjck/ms_dsm_sppr", MsHdmSvrds.class, "渗流压力水位监测表"),
MS_DSM_CKOPDG("ms_dsm_ckopdg", "/bzjck/ms_dsm_ckopdg", MsHdmCkopdg.class, "裂缝开合度位移监测表"),
MS_DSM_SPPR("ms_dsm_sppr", "/bzjck/ms_dsm_sppr", MsHdmSppr.class, "渗流压力水位监测表"),
MS_DSM_PZWL("ms_dsm_pzwl", "/bzjck/ms_dsm_pzwl", MsHdmPzwl.class, "测压管水位监测表"),
MS_DSM_SPQN("ms_dsm_spqn", "/bzjck/ms_dsm_spqn", MsHdmSpqn.class, "渗流量监测表"),
MS_DSM_ST("ms_dsm_st", "/bzjck/ms_dsm_srhrds", MsHdmSt.class, "应变监测表"),

28
shuili-system/src/main/java/com/kms/yxgh/base/job/DataSyncJob.java

@ -44,7 +44,7 @@ public class DataSyncJob {
private static final Map<String, String> FIELD_MAP = TableFieldFactory.getCacheFieldMap();
private static final Map<String, Map<String, Class>> FIELD_TYPE_MAP = TableFieldFactory.getCacheFieldTypeMap();
private static final int ASYNC_THRESHOLD = 500;
private static final int BATCH_COUNT = 100;
private static final int BATCH_COUNT = 500;
private static final SimpleDateFormat DATE_FORMAT_WITH_TIME = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final SimpleDateFormat DATE_FORMAT_WITH_OUT_TIME = new SimpleDateFormat("yyyy-MM-dd");
@ -67,7 +67,7 @@ public class DataSyncJob {
*/
@Scheduled(cron = "0 0 2 * * *")
public void runMonitor() {
log.info("--------开启监测数据同步请求--------------", dataSyncEnabled);
log.info("--------开启监测数据同步请求:{}--------------", dataSyncEnabled);
if (dataSyncEnabled) {
Date date = new Date();
for (DataSyncMonitorEnum dataSyncEnum : DataSyncMonitorEnum.values()) {
@ -97,12 +97,12 @@ public class DataSyncJob {
do {
String requestUrl = String.format("%s%s", dataSyncUrl, url);
// 发送POST请求
Map<String, Object> map = new HashMap();
Map<String, Object> map = new HashMap<>();
map.put("pageNum", pageNum);
map.put("pageSize", pageSize);
if(StringUtils.isNotBlank(type)){
map.put("beginTime", beginTime);
map.put("endTime", endTime);
map.put("START_TIME", beginTime);
map.put("END_TIME", endTime);
}
String jsonStr = restTemplateUtils.doPostRequest(requestUrl, map);
if (StringUtils.isBlank(jsonStr)) {
@ -124,7 +124,7 @@ public class DataSyncJob {
// 解析数据
List<List<Object>> dataList = processDataList(jsonArray, filed.split(","), date, tableName, type);
// 清除数据
if (StringUtils.isBlank(type)) {
if (StringUtils.isBlank(type) && pageNum == 1) {
baseDdlMapper.delete(tableName);
}
// 插入数据
@ -133,13 +133,13 @@ public class DataSyncJob {
if (StringUtils.isBlank(type) && jsonArray.size() < pageSize) {
break;
}
if (pageNum * pageSize >= total) {
if (StringUtils.isNotBlank(type) && pageNum * pageSize >= total) {
break;
}
pageNum += 1;
} while (true);
} catch (Exception e) {
log.error("--------数据同步出错--------------,表:" + tableName, e);
log.error("--------数据同步出错--------------,表:"+tableName+", 异常:" + e.getMessage());
}
}
@ -161,9 +161,9 @@ public class DataSyncJob {
Class<?> fieldType = FIELD_TYPE_MAP.getOrDefault(tableName, Collections.emptyMap()).get(fieldName);
// 特殊处理:监测数据的入库时间与系统的CREATE_TIME冲突
if (StringUtils.isNotBlank(type)) {
if (fieldName.equals("MS_CREATE_TIME")) {
if ("MS_CREATE_TIME".equals(fieldName)) {
return typeConversion(obj, "CREATE_TIME", fieldType);
} else if (fieldName.equals("CREATE_TIME")) {
} else if ("CREATE_TIME".equals(fieldName)) {
return nowDate;
}
}
@ -176,6 +176,9 @@ public class DataSyncJob {
* 批量入库
*/
private void insertData(String filed, List<List<Object>> dataList, String tableName) {
if(dataList.isEmpty()){
return;
}
// 入库操作
if (dataList.size() > ASYNC_THRESHOLD) {
// 先入库100条数据入库
@ -193,7 +196,9 @@ public class DataSyncJob {
cachedDataList = new ArrayList<>(BATCH_COUNT);
}
}
if(cachedDataList.size()>0) {
baseDdlMapper.insert(filed, cachedDataList, tableName);
}
});
} else {
baseDdlMapper.insert(filed, dataList, tableName);
@ -230,7 +235,8 @@ public class DataSyncJob {
} else if (Date.class.equals(fieldType)) {
return convertToDate(obj, fieldName);
} else if (Long.class.equals(fieldType)) {
return obj.getLong(fieldName);
return Optional.ofNullable(obj.get(fieldName)).map(Object::toString).filter(s -> !StringUtils.isBlank(s))
.map(s -> Double.valueOf(s).longValue()).orElse(0L);
}
return null;
}

4
shuili-system/src/main/java/com/kms/yxgh/util/RestTemplateUtils.java

@ -69,9 +69,9 @@ public class RestTemplateUtils {
String seqResult = "";
try {
seqResult = new String(responseEntity.getBody().getBytes(),"utf-8");
log.info("返回报文:{}", seqResult);
log.info("请求接口:{}, 请求报文:{}, 返回报文:{}", url, requestStr, seqResult);
} catch (UnsupportedEncodingException e) {
log.error("接口返回异常", e);
log.error("请求接口:" + url + ",返回异常:" + e.getMessage());
}
return seqResult;
}

21
sql/sy/v1.3.0/全量脚本/dataSync.sql

@ -157,6 +157,21 @@ CREATE TABLE `dws_rel_dike_rv` (
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='堤防所属河流对象关系表';
CREATE TABLE `dws_rel_disc_dike` (
`ID` int NOT NULL AUTO_INCREMENT COMMENT '编号',
`DISC_CODE` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '堤段代码',
`DISC_NAME` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '堤段名称',
`DIKE_CODE` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '堤防代码',
`DIKE_NAME` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '堤防名称',
`FROM_DATE` datetime DEFAULT NULL COMMENT '关系建立时间',
`TO_DATE` datetime DEFAULT NULL COMMENT '关系终止时间',
`REMARK` text COLLATE utf8mb4_general_ci COMMENT '备注',
`CREATE_UID` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
`UPDATE_UID` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最近修改人',
`UPDATE_TIME` datetime DEFAULT NULL COMMENT '最近修改时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='堤段所属堤防对象关系表';
@ -870,7 +885,7 @@ CREATE TABLE `MS_DSM_AMS` (
CREATE TABLE `MS_DSM_GSTMONREC` (
`ID` int NOT NULL AUTO_INCREMENT COMMENT '编号',
`PRJ_STCD` varchar(18) NOT NULL COMMENT '水利工程测站代码',
`MPCD` varchar(13) NOT NULL COMMENT '测点编号',
`MPCD` varchar(20) NOT NULL COMMENT '测点编号',
`TM` datetime NOT NULL COMMENT '时间',
`STATUS` int DEFAULT NULL COMMENT 'GNSS定位状态(°)',
`SATELLITE_NUM` int DEFAULT NULL COMMENT '卫星数',
@ -904,7 +919,7 @@ CREATE TABLE `MS_DSM_GSTMONREC` (
CREATE TABLE `MS_DSM_OSSMONREC` (
`ID` int NOT NULL AUTO_INCREMENT COMMENT '编号',
`PRJ_STCD` varchar(18) NOT NULL COMMENT '水利工程测站代码',
`MPCD` varchar(13) NOT NULL COMMENT '测点编号',
`MPCD` varchar(20) NOT NULL COMMENT '测点编号',
`TM` datetime NOT NULL COMMENT '时间',
`UPLIFTED_PRESSURE` decimal(8,2) DEFAULT NULL COMMENT '扬压力(MPa)',
`OSMOTIC_PRESSURE` decimal(8,2) DEFAULT NULL COMMENT '渗透压力(坝体、坝基、绕坝)(MPa)',
@ -929,7 +944,7 @@ CREATE TABLE `MS_DSM_OSSMONREC` (
CREATE TABLE `MS_DSM_ENV` (
`ID` int NOT NULL AUTO_INCREMENT COMMENT '编号',
`PRJ_STCD` varchar(18) NOT NULL COMMENT '水利工程测站代码',
`MPCD` varchar(13) NOT NULL COMMENT '测点编号',
`MPCD` varchar(20) NOT NULL COMMENT '测点编号',
`TM` datetime NOT NULL COMMENT '时间',
`GTP` decimal(6,1) DEFAULT NULL COMMENT '地温(℃)',
`AlTP` decimal(6,1) DEFAULT NULL COMMENT '瞬时气温(℃)',

22
sql/sy/v1.3.0/增量脚本/v1.3.0-update.sql

@ -65,3 +65,25 @@ CREATE TABLE `bs_sgc_df_xsjhxq` (
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='堤防巡查计划内容表';
CREATE TABLE `dws_rel_disc_dike` (
`ID` int NOT NULL AUTO_INCREMENT COMMENT '编号',
`DISC_CODE` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '堤段代码',
`DISC_NAME` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '堤段名称',
`DIKE_CODE` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '堤防代码',
`DIKE_NAME` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '堤防名称',
`FROM_DATE` datetime DEFAULT NULL COMMENT '关系建立时间',
`TO_DATE` datetime DEFAULT NULL COMMENT '关系终止时间',
`REMARK` text COLLATE utf8mb4_general_ci COMMENT '备注',
`CREATE_UID` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人',
`CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
`UPDATE_UID` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最近修改人',
`UPDATE_TIME` datetime DEFAULT NULL COMMENT '最近修改时间',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='堤段所属堤防对象关系表';
ALTER TABLE `MS_DSM_ENV` MODIFY COLUMN MPCD varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '测点编号';
ALTER TABLE `MS_DSM_GSTMONREC` MODIFY COLUMN MPCD varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '测点编号';
ALTER TABLE `MS_DSM_OSSMONREC` MODIFY COLUMN MPCD varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '测点编号';

Loading…
Cancel
Save