package com.yami.trading.api.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.yami.trading.bean.model.RiskClient; import com.yami.trading.bean.model.User; import com.yami.trading.common.domain.Result; import com.yami.trading.common.util.DateTimeTools; import com.yami.trading.common.util.IPHelper; import com.yami.trading.common.util.TimeZoneContext; import com.yami.trading.security.common.bo.UserInfoInTokenBO; import com.yami.trading.security.common.util.AuthUserContext; import com.yami.trading.security.common.util.RiskClientUtil; import com.yami.trading.service.syspara.LocalSysparaService; import com.yami.trading.service.user.RiskClientService; import com.yami.trading.service.user.UserService; import io.swagger.annotations.ApiModel; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.time.ZoneId; import java.util.*; @RestController @CrossOrigin @Data @ApiModel public class ApiSysparaController { @Autowired LocalSysparaService localSysparaService; @Autowired private RiskClientService riskClientService; @Autowired private UserService userService; /** * 可逗号相隔,查询多个参数值。 exchange_rate_out 兑出货币和汇率; exchange_rate_in * 兑入货币和汇率;withdraw_fee 提现手续费,type=fixed是单笔固定金额,=rate是百分比,结果到小数点2位。 * index_top_symbols 首页显示的4个品种。customer_service_url 在线客服URL */ @RequestMapping("api/syspara!getSyspara.action") public Result getSyspara(HttpServletRequest request) { String code = request.getParameter("code"); Map data = localSysparaService.find(code); return Result.succeed(data); } @GetMapping("/api/timezone/info") public Result> getTimeZoneInfo() { Map infoMap = new HashMap(); Date now = new Date(); // 当前客户端系统时区比预期的数据展示时区大的毫秒偏移值 String showTimeZone = TimeZoneContext.showTimeZoneId.get(); String clientTimeZone = TimeZoneContext.clientTimeZoneId.get(); long timeOffset = DateTimeTools.getTimeOffset(ZoneId.of(showTimeZone), ZoneId.of(clientTimeZone)); // 展示数据的时区配置 infoMap.put("showTimeZone", showTimeZone); infoMap.put("timeOffset", timeOffset); infoMap.put("now", now); return Result.ok(infoMap); } @GetMapping("/api/check/network") public Result> checkNetwork(@RequestParam(required = false) String clientUserCode) { Map infoMap = new HashMap(); infoMap.put("network", "1"); String clientIp = IPHelper.getIpAddr(); String userCode = ""; UserInfoInTokenBO userInfoIn = AuthUserContext.get(); if (userInfoIn != null) { String userId = userInfoIn.getUserId(); // 缓存优化 TODO User userEntity = userService.cacheUserBy(userId); if (userEntity != null) { userCode = userEntity.getUserCode(); } } if (StrUtil.isBlank(userCode) || Objects.equals(userCode, "0")) { if (StrUtil.isNotBlank(clientUserCode)) { userCode = clientUserCode.trim(); } } infoMap.put("userCode", userCode); if (StrUtil.isNotBlank(userCode) && !Objects.equals(userCode, "0")) { List badNetwordConfigList = RiskClientUtil.getRiskInfoByUserCode(userCode, "badnetwork"); if (CollectionUtil.isNotEmpty(badNetwordConfigList)) { // 当前用户仍然存在网络异常 infoMap.put("network", "0"); } } List badNetwordConfigList = RiskClientUtil.getRiskInfoByIp(clientIp, "badnetwork"); if (CollectionUtil.isNotEmpty(badNetwordConfigList)) { // 当前客户端对应的 ip 仍然存在网络异常 infoMap.put("network", "0"); } return Result.ok(infoMap); } }