30 files modified
3 files added
| | |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-web</artifactId> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.google.zxing</groupId> |
| | | <artifactId>core</artifactId> |
| | | <version>3.4.1</version> <!-- 或最新版本 --> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.google.zxing</groupId> |
| | | <artifactId>javase</artifactId> |
| | | <version>3.4.1</version> <!-- 如果需要生成/解析二维码图片 --> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>org.flywaydb</groupId> |
| | |
| | | package com.nq.controller; |
| | | |
| | | import cn.hutool.extra.qrcode.QrCodeUtil; |
| | | import cn.hutool.extra.qrcode.QrConfig; |
| | | import com.google.common.collect.Maps; |
| | | import com.nq.common.ServerResponse; |
| | | import com.nq.pojo.SiteAdminIndex; |
| | | import com.nq.pojo.SiteSpread; |
| | | import com.nq.dao.SiteAdminMapper; |
| | | import com.nq.pojo.*; |
| | | import com.nq.service.*; |
| | | import com.nq.service.impl.GoogleAuthenticator; |
| | | import com.nq.utils.PropertiesUtil; |
| | | import com.nq.utils.redis.CookieUtils; |
| | | import com.nq.utils.redis.JsonUtil; |
| | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import javax.servlet.http.HttpSession; |
| | | import javax.validation.Valid; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.ResponseBody; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.io.PrintWriter; |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | |
| | | @Controller |
| | | @RequestMapping({"/api/admin/"}) |
| | |
| | | |
| | | @Autowired |
| | | ISiteAdminService iSiteAdminService; |
| | | |
| | | @Autowired |
| | | SiteAdminMapper siteAdminMapper; |
| | | |
| | | @Autowired |
| | | ISiteSettingService iSiteSettingService; |
| | |
| | | //管理系统登录 |
| | | @RequestMapping({"login.do"}) |
| | | @ResponseBody |
| | | public ServerResponse login(@RequestParam("adminPhone") String adminPhone, @RequestParam("adminPwd") String adminPwd, @RequestParam("verifyCode") String verifyCode, HttpSession httpSession, HttpServletRequest request, HttpServletResponse response) { |
| | | ServerResponse serverResponse = this.iSiteAdminService.login(adminPhone, adminPwd, verifyCode, request); |
| | | public ServerResponse login(@RequestParam("adminPhone") String adminPhone, |
| | | @RequestParam("adminPwd") String adminPwd, |
| | | @RequestParam("verifyCode") String verifyCode, |
| | | @RequestParam(value = "googleAuthCode", required = false) Integer googleAuthCode, |
| | | HttpSession httpSession, HttpServletRequest request, |
| | | HttpServletResponse response) { |
| | | ServerResponse serverResponse = this.iSiteAdminService.login(adminPhone, adminPwd, verifyCode, googleAuthCode,request); |
| | | |
| | | return serverResponse; |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取当前登录用户 |
| | | * @return |
| | | */ |
| | | @GetMapping("getAdmin") |
| | | @ResponseBody |
| | | public ServerResponse getAdmin(HttpServletRequest request) { |
| | | String cookie_name = PropertiesUtil.getProperty("admin.cookie.name"); |
| | | SiteAdmin siteAdmin = null; |
| | | if(StringUtils.isNotEmpty(cookie_name)){ |
| | | String logintoken = CookieUtils.readLoginToken(request, cookie_name); |
| | | String adminJson = RedisShardedPoolUtils.get(logintoken); |
| | | siteAdmin = (SiteAdmin) JsonUtil.string2Obj(adminJson, SiteAdmin.class); |
| | | siteAdmin = siteAdminMapper.selectById(siteAdmin.getId()); |
| | | } |
| | | return ServerResponse.createBySuccess(siteAdmin); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取谷歌验证码密钥 |
| | | * @return |
| | | */ |
| | | @GetMapping("getLoginGoogleAuthSecret") |
| | | @ResponseBody |
| | | public ServerResponse getLoginGoogleAuthSecret(HttpServletRequest request) { |
| | | GoogleAuthDto dto = iSiteAdminService.getGoogleAuth(request); |
| | | return ServerResponse.createBySuccess(dto); |
| | | } |
| | | |
| | | /** |
| | | * 绑定谷歌验证码 |
| | | */ |
| | | @PostMapping("bindGoogleAuth") |
| | | @ResponseBody |
| | | public ServerResponse updateGoogleAuth(@RequestParam("id") String id, |
| | | @RequestParam("googleAuthCode") String googleAuthCode, |
| | | @RequestParam("secret") String secret) { |
| | | SiteAdmin siteAdmin = siteAdminMapper.selectById(id); |
| | | if (siteAdmin == null) { |
| | | return ServerResponse.createByErrorMsg("当前用户未找到"); |
| | | } |
| | | long t = System.currentTimeMillis(); |
| | | GoogleAuthenticator ga = new GoogleAuthenticator(); |
| | | ga.setWindowSize(5); |
| | | if (siteAdmin.getGoogleAuthBind()) { |
| | | return ServerResponse.createByErrorMsg("谷歌验证码已绑定"); |
| | | } |
| | | boolean userFlag = ga.check_code(secret, Long.valueOf(googleAuthCode), t); |
| | | if (!userFlag) { |
| | | return ServerResponse.createByErrorMsg("谷歌验证码错误"); |
| | | } |
| | | siteAdmin.setGoogleAuthBind(true); |
| | | siteAdmin.setGoogleAuthSecret(secret); |
| | | siteAdminMapper.updateById(siteAdmin); |
| | | return ServerResponse.createBySuccess(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 解绑谷歌验证码 |
| | | * @param param |
| | | * @return |
| | | */ |
| | | @PostMapping("/unbindingGoogleAuth") |
| | | @ResponseBody |
| | | public ServerResponse unbindingGoogleAuth(@RequestParam("id") String id, |
| | | @RequestParam("rootGoogleAuthCode") String rootGoogleAuthCode) { |
| | | SiteAdmin siteAdmin = siteAdminMapper.selectById(id); |
| | | if (siteAdmin == null) { |
| | | return ServerResponse.createByErrorMsg("当前用户未找到"); |
| | | } |
| | | long t = System.currentTimeMillis(); |
| | | GoogleAuthenticator ga = new GoogleAuthenticator(); |
| | | ga.setWindowSize(5); |
| | | boolean flag = ga.check_code(siteAdmin.getGoogleAuthSecret(), Long.valueOf(rootGoogleAuthCode), t); |
| | | if (flag) { |
| | | if (!siteAdmin.getGoogleAuthBind()) { |
| | | return ServerResponse.createByErrorMsg("谷歌验证码未绑定,无需解绑!"); |
| | | |
| | | } |
| | | siteAdmin.setGoogleAuthBind(false); |
| | | siteAdmin.setGoogleAuthSecret(""); |
| | | siteAdminMapper.updateById(siteAdmin); |
| | | } else { |
| | | return ServerResponse.createByErrorMsg("超级谷歌验证码错误"); |
| | | } |
| | | return ServerResponse.createBySuccess(); |
| | | } |
| | | |
| | | |
| | | |
| | | // //页面样式设置 |
| | |
| | | |
| | | StockDz stockDz = this.stockDzMapper.selectOne(new QueryWrapper<StockDz>().eq("id", userPositionCheckDz.getDzId())); |
| | | |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN", user.getId()); |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP", user.getId()); |
| | | if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){ |
| | | return ServerResponse.createByErrorMsg("用户账户有待补资金未补齐,审核失败"); |
| | | } |
| | |
| | | userPosition.setId(null); |
| | | userPosition.setDzId(stockDz.getId()); |
| | | userPositionMapper.insert(userPosition); |
| | | userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"",""); |
| | | userAssetsServices.availablebalanceChange(EStockType.JP.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"",""); |
| | | return ServerResponse.createBySuccessMsg("审核成功,订单已转客户持仓"); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | User user = this.iUserService.getCurrentRefreshUser(request); |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN", user.getId()); |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP", user.getId()); |
| | | if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){ |
| | | return ServerResponse.createByErrorMsg("请先缴清待补资金", request); |
| | | } |
| | |
| | | @RequestMapping({"thirdPartyRecharge.do"}) |
| | | @ResponseBody |
| | | public ServerResponse thirdPartyRecharge(@RequestParam("tradeAmoun") String tradeAmoun,@RequestParam("type") Integer type,HttpServletRequest request) { |
| | | payLock.lock(); |
| | | try { |
| | | if (payCreated.get()) { |
| | | return ServerResponse.createByErrorMsg("当前充值人数过多,请稍后重试", request); |
| | | } |
| | | if (!isIntegerGreaterThan100(tradeAmoun)) { |
| | | return ServerResponse.createByErrorMsg("请输入整数!",request); |
| | | } |
| | | if(null == type){ |
| | | return ServerResponse.createByErrorMsg("请选择支付通道!",request); |
| | | } |
| | | if(new BigDecimal(tradeAmoun).compareTo(new BigDecimal("1000")) < 0){ |
| | | return ServerResponse.createByErrorMsg("请重新输入,最低充值金额:1000", request); |
| | | } |
| | | |
| | | payCreated.set(true); |
| | | return payService.thirdPartyRecharge(request,tradeAmoun,type); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return ServerResponse.createByErrorMsg("获取充值链接异常,请稍后重试", request); |
| | | } finally{ |
| | | payLock.unlock(); |
| | | payCreated.set(false); |
| | | } |
| | | return ServerResponse.createBySuccess("请联系客服充值"); |
| | | // payLock.lock(); |
| | | // try { |
| | | // |
| | | // if (payCreated.get()) { |
| | | // return ServerResponse.createByErrorMsg("当前充值人数过多,请稍后重试", request); |
| | | // } |
| | | // if (!isIntegerGreaterThan100(tradeAmoun)) { |
| | | // return ServerResponse.createByErrorMsg("请输入整数!",request); |
| | | // } |
| | | // if(null == type){ |
| | | // return ServerResponse.createByErrorMsg("请选择支付通道!",request); |
| | | // } |
| | | // if(new BigDecimal(tradeAmoun).compareTo(new BigDecimal("1000")) < 0){ |
| | | // return ServerResponse.createByErrorMsg("请重新输入,最低充值金额:1000", request); |
| | | // } |
| | | // |
| | | // payCreated.set(true); |
| | | // return payService.thirdPartyRecharge(request,tradeAmoun,type); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // return ServerResponse.createByErrorMsg("获取充值链接异常,请稍后重试", request); |
| | | // } finally{ |
| | | // payLock.unlock(); |
| | | // payCreated.set(false); |
| | | // } |
| | | } |
| | | // 判断字符串是否是整数且大于100 |
| | | public static boolean isIntegerGreaterThan100(String str) { |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 充值1异步接收地址 |
| | | */ |
| | | @PostMapping({"rechargeCallback.do"}) |
| | | public void rechargeCallback(PaymentResponse vo, HttpServletResponse response) throws IOException { |
| | | payService.rechargeCallback(vo,response); |
| | | } |
| | | |
| | | /** |
| | | * 充值2异步接收地址 |
| | | */ |
| | | @PostMapping({"rechargeCallbackTwo.do"}) |
| | | public void rechargeCallbackTwo(TransactionStatusVo vo, HttpServletResponse response) throws IOException { |
| | | payService.rechargeCallbackTwo(vo,response); |
| | | } |
| | | // /** |
| | | // * 充值1异步接收地址 |
| | | // */ |
| | | // @PostMapping({"rechargeCallback.do"}) |
| | | // public void rechargeCallback(PaymentResponse vo, HttpServletResponse response) throws IOException { |
| | | // payService.rechargeCallback(vo,response); |
| | | // } |
| | | // |
| | | // /** |
| | | // * 充值2异步接收地址 |
| | | // */ |
| | | // @PostMapping({"rechargeCallbackTwo.do"}) |
| | | // public void rechargeCallbackTwo(TransactionStatusVo vo, HttpServletResponse response) throws IOException { |
| | | // payService.rechargeCallbackTwo(vo,response); |
| | | // } |
| | | } |
| | |
| | | public enum EStockType { |
| | | |
| | | |
| | | |
| | | US("US","美国股票","5",PropertiesUtil.getProperty("US_HTTP_API"),PropertiesUtil.getProperty("US_KEY"),"USD","$"), |
| | | HK("HK","香港股票","39",PropertiesUtil.getProperty("HK_HTTP_API"),PropertiesUtil.getProperty("HK_KEY"),"HKD","HK$"), |
| | | MAS("MAS","马来西亚股票","42",PropertiesUtil.getProperty("MAS_HTTP_API"),PropertiesUtil.getProperty("MAS_KEY"),"MYR","RM"), |
| | | |
| | | IN("IN","印度股票","14", PropertiesUtil.getProperty("JS_IN_HTTP_URL"),PropertiesUtil.getProperty("JS_IN_KEY"),"INR","₹"); |
| | | // |
| | | // US("US","美国股票","5",PropertiesUtil.getProperty("US_HTTP_API"),PropertiesUtil.getProperty("US_KEY"),"USD","$"), |
| | | // HK("HK","香港股票","39",PropertiesUtil.getProperty("HK_HTTP_API"),PropertiesUtil.getProperty("HK_KEY"),"HKD","HK$"), |
| | | // MAS("MAS","马来西亚股票","42",PropertiesUtil.getProperty("MAS_HTTP_API"),PropertiesUtil.getProperty("MAS_KEY"),"MYR","RM"), |
| | | // |
| | | // IN("IN","印度股票","14", PropertiesUtil.getProperty("JS_IN_HTTP_URL"),PropertiesUtil.getProperty("JS_IN_KEY"),"INR","₹"); |
| | | JP("JP","日本股票","35", PropertiesUtil.getProperty("JP_HTTP_API"),PropertiesUtil.getProperty("JP_KEY"),"JPY","¥"); |
| | | // TH("TH","泰国股票","41",PropertiesUtil.getProperty("TH_HTTP_API"),PropertiesUtil.getProperty("TH_KEY")), |
| | | // HG("HG","韩国股票","11",PropertiesUtil.getProperty("HG_HTTP_API"),PropertiesUtil.getProperty("HG_KEY")), |
| | | // SZHB("SZHB","数字货币","41",PropertiesUtil.getProperty("SZHB_HTTP_API"),PropertiesUtil.getProperty("SZHB_KEY")); |
| | |
| | | } |
| | | |
| | | public static EStockType getEStockTypeByCode(String code){ |
| | | if(EStockType.US.getCode().equals(code)){ |
| | | return US; |
| | | if(EStockType.JP.getCode().equals(code)){ |
| | | return JP; |
| | | |
| | | }else if(EStockType.HK.getCode().equals(code)){ |
| | | return HK; |
| | | }else if(EStockType.MAS.getCode().equals(code)){ |
| | | return MAS; |
| | | }else if(EStockType.IN.getCode().equals(code)){ |
| | | return IN; |
| | | }else{ |
| | | return MAS; |
| | | }else { |
| | | return null; |
| | | } |
| | | // else if(EStockType.HK.getCode().equals(code)){ |
| | | // return HK; |
| | | // }else if(EStockType.MAS.getCode().equals(code)){ |
| | | // return MAS; |
| | | // }else if(EStockType.IN.getCode().equals(code)){ |
| | | // return IN; |
| | | // }else{ |
| | | // return MAS; |
| | | // } |
| | | } |
| | | |
| | | public String getContryId() { |
| New file |
| | |
| | | package com.nq.pojo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class GoogleAuthDto { |
| | | |
| | | |
| | | //密钥 |
| | | private String googleAuthSecret; |
| | | |
| | | //密钥 |
| | | private String googleAuthImg; |
| | | } |
| | |
| | | package com.nq.pojo; |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.fasterxml.jackson.annotation.JsonProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | |
| | | private Date addTime; |
| | | private String token; |
| | | |
| | | |
| | | /** |
| | | * 谷歌验证器 |
| | | */ |
| | | @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) |
| | | private String googleAuthSecret; |
| | | /** |
| | | * 谷歌验证器是否绑定 |
| | | */ |
| | | private Boolean googleAuthBind=false; |
| | | } |
| | | |
| New file |
| | |
| | | package com.nq.pojo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | |
| | | @Data |
| | | public class UnbindingGoogleAuthModel { |
| | | |
| | | |
| | | private long id; |
| | | |
| | | |
| | | //谷歌验证码 |
| | | @NotBlank |
| | | private String rootGoogleAuthCode; |
| | | } |
| New file |
| | |
| | | package com.nq.pojo; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | |
| | | @Data |
| | | public class UpdateGoogleAuthDto { |
| | | |
| | | |
| | | private long id; |
| | | |
| | | //谷歌密钥 |
| | | @NotBlank |
| | | private String secret; |
| | | |
| | | |
| | | //验证码 |
| | | private String googleAuthCode; |
| | | |
| | | } |
| | |
| | | |
| | | import com.github.pagehelper.PageInfo; |
| | | import com.nq.common.ServerResponse; |
| | | import com.nq.pojo.GoogleAuthDto; |
| | | import com.nq.pojo.SiteAdmin; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | public interface ISiteAdminService { |
| | | ServerResponse login(String paramString1, String paramString2, String paramString3, HttpServletRequest paramHttpServletRequest); |
| | | ServerResponse login(String paramString1, String paramString2, String paramString3, Integer googleAuthCode,HttpServletRequest paramHttpServletRequest); |
| | | |
| | | ServerResponse<PageInfo> listByAdmin(String paramString1, String paramString2, HttpServletRequest paramHttpServletRequest, int paramInt1, int paramInt2); |
| | | |
| | |
| | | |
| | | ServerResponse count(); |
| | | |
| | | |
| | | ServerResponse deleteAdmin(Integer adminId); |
| | | |
| | | ServerResponse moneyCount(String agentId, String startTime, String entTime); |
| | | |
| | | GoogleAuthDto getGoogleAuth(HttpServletRequest request); |
| | | } |
| | |
| | | |
| | | UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>() |
| | | .eq(UserAssets::getUserId, orderEchoBean.getUserId()) |
| | | .eq(UserAssets::getAccectType, "IN") |
| | | .eq(UserAssets::getAccectType, "JP") |
| | | ); |
| | | userAssets.setAvailableBalance(userAssets.getAvailableBalance().subtract(money)); |
| | | userAssets.setFreezeMoney(userAssets.getFreezeMoney().add(money)); |
| | |
| | | BigDecimal aml = incomeAmount.add(money); |
| | | UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>() |
| | | .eq(UserAssets::getUserId, orderEchoBean.getUserId()) |
| | | .eq(UserAssets::getAccectType, "IN") |
| | | .eq(UserAssets::getAccectType, "JP") |
| | | ); |
| | | if (userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0) { |
| | | continue; |
| | |
| | | } |
| | | UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<>(UserAssets.class) |
| | | .eq(UserAssets::getUserId, paymentRecharge.getUserId()) |
| | | .eq(UserAssets::getAccectType, "IN") |
| | | .eq(UserAssets::getAccectType, "JP") |
| | | ); |
| | | ServerResponse serverResponse = iUserAssetsServices.updateUserAssets(userAssets.getId(), vo.getOriAmount().toString(), "2"); |
| | | if(serverResponse.getStatus() == 0){ |
| | |
| | | } |
| | | UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<>(UserAssets.class) |
| | | .eq(UserAssets::getUserId, paymentRecharge.getUserId()) |
| | | .eq(UserAssets::getAccectType, "IN") |
| | | .eq(UserAssets::getAccectType, "JP") |
| | | ); |
| | | ServerResponse serverResponse = iUserAssetsServices.updateUserAssets(userAssets.getId(), vo.getAccount_fee().toString(), "2"); |
| | | if(serverResponse.getStatus() == 0){ |
| | |
| | | |
| | | public String doPost(String pid) { |
| | | // 从配置中获取 API URL,并拼接 key |
| | | String apiUrl = PropertiesUtil.getProperty("JS_IN_HTTP_URL") + "stock?key=" + PropertiesUtil.getProperty("JS_IN_KEY"); |
| | | String apiUrl = PropertiesUtil.getProperty("JP_HTTP_API") + "stock?key=" + PropertiesUtil.getProperty("JP_KEY"); |
| | | String result = null; |
| | | try { |
| | | URL url = new URL(apiUrl); |
| | |
| | | package com.nq.service.impl; |
| | | |
| | | import cn.hutool.core.collection.CollectionUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.extra.qrcode.QrCodeUtil; |
| | | import cn.hutool.extra.qrcode.QrConfig; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.nq.dao.*; |
| | | import com.github.pagehelper.PageHelper; |
| | | |
| | |
| | | import com.nq.utils.PropertiesUtil; |
| | | |
| | | import com.nq.utils.SymmetricCryptoUtil; |
| | | import com.nq.utils.redis.CookieUtils; |
| | | import com.nq.utils.redis.JsonUtil; |
| | | import com.nq.utils.redis.RedisConst; |
| | | import com.nq.utils.redis.RedisShardedPoolUtils; |
| | |
| | | @Autowired |
| | | AgentUserMapper agentUserMapper; |
| | | |
| | | public ServerResponse login(String adminPhone, String adminPwd, String verifyCode, HttpServletRequest request) { |
| | | public ServerResponse login(String adminPhone, String adminPwd, String verifyCode,Integer googleAuthCode, HttpServletRequest request) { |
| | | |
| | | if (StringUtils.isBlank(verifyCode)) { |
| | | |
| | | return ServerResponse.createByErrorMsg("验证码不能为空"); |
| | | |
| | | } |
| | | // |
| | | String original = (String) request.getSession().getAttribute("KAPTCHA_SESSION_KEY"); |
| | | |
| | | /*if (!verifyCode.equalsIgnoreCase(original)) { |
| | | |
| | | return ServerResponse.createByErrorMsg("验证码错误"); |
| | | |
| | | }*/ |
| | | |
| | | |
| | | if (StringUtils.isBlank(adminPhone) || StringUtils.isBlank(adminPwd)) { |
| | | if (StringUtils.isBlank(adminPhone) || StringUtils.isBlank(adminPwd) ) { |
| | | |
| | | return ServerResponse.createByErrorMsg("参数不能为空"); |
| | | |
| | | } |
| | | |
| | | SymmetricCryptoUtil.decryptPassword("8OTlTNZ9EwQ29Pf0R8a37Q=="); |
| | | adminPwd = SymmetricCryptoUtil.encryptPassword(adminPwd); |
| | | SiteAdmin siteAdmin = this.siteAdminMapper.login(adminPhone, adminPwd); |
| | | // SiteAdmin siteAdmin = (SiteAdmin) siteAdminMapper.selectOne(new QueryWrapper<SiteAdmin>().eq("admin_phone", adminPhone).eq("admin_pwd", adminPwd)); |
| | | |
| | | if (siteAdmin == null) { |
| | | |
| | | return ServerResponse.createByErrorMsg("账号密码错误"); |
| | | |
| | | } |
| | | |
| | | |
| | | if (siteAdmin.getIsLock().intValue() == 1) { |
| | | |
| | | return ServerResponse.createByErrorMsg("账号已被锁定"); |
| | | |
| | | } |
| | | |
| | | if(siteAdmin.getGoogleAuthBind() && ObjectUtil.isEmpty(googleAuthCode)){ |
| | | return ServerResponse.createByErrorMsg("谷歌验证码不能为空"); |
| | | } |
| | | if(siteAdmin.getGoogleAuthBind()){ |
| | | long t = System.currentTimeMillis(); |
| | | GoogleAuthenticator ga = new GoogleAuthenticator(); |
| | | ga.setWindowSize(5); |
| | | boolean userFlag = ga.check_code(siteAdmin.getGoogleAuthSecret(), Long.valueOf(googleAuthCode), t); |
| | | if (!userFlag) { |
| | | return ServerResponse.createByErrorMsg("谷歌验证码错误!"); |
| | | } |
| | | } |
| | | |
| | | siteAdmin.setAdminPwd(null); |
| | | HttpSession httpSession = request.getSession(); |
| | | String token = RedisConst.getAdminRedisKey(httpSession.getId()); |
| | | |
| | | String str = RedisShardedPoolUtils.setEx(token, |
| | | RedisShardedPoolUtils.setEx(token, |
| | | JsonUtil.obj2String(siteAdmin), 999999); |
| | | |
| | | |
| | |
| | | return ServerResponse.createBySuccess(map); |
| | | } |
| | | |
| | | @Override |
| | | public GoogleAuthDto getGoogleAuth(HttpServletRequest request) { |
| | | String secretKey = GoogleAuthenticator.generateSecretKey(); |
| | | QrConfig config = new QrConfig(345, 345); |
| | | config.setMargin(3); |
| | | String cookie_name = PropertiesUtil.getProperty("admin.cookie.name"); |
| | | SiteAdmin siteAdmin = null; |
| | | if(StringUtils.isNotEmpty(cookie_name)){ |
| | | siteAdmin = getAdmin(cookie_name,request); |
| | | } |
| | | String content = String.format("otpauth://totp/%s?secret=%s", siteAdmin.getAdminName(),secretKey); |
| | | String base64 = QrCodeUtil.generateAsBase64(content, config, "png"); |
| | | GoogleAuthDto dto = new GoogleAuthDto(); |
| | | dto.setGoogleAuthImg(base64); |
| | | dto.setGoogleAuthSecret(secretKey); |
| | | return dto; |
| | | } |
| | | |
| | | public SiteAdmin getAdmin(String cookie_name,HttpServletRequest request){ |
| | | String logintoken = CookieUtils.readLoginToken(request, cookie_name); |
| | | String adminJson = RedisShardedPoolUtils.get(logintoken); |
| | | return (SiteAdmin) JsonUtil.string2Obj(adminJson, SiteAdmin.class); |
| | | } |
| | | |
| | | public static List<Integer> getAllChildrenIds(AgentUserNodeVO parent) { |
| | | List<Integer> allChildrenIds = new ArrayList<>(); |
| | | getAllChildrenIdsHelper(parent, allChildrenIds); |
| | |
| | | log.info("当前以后名"); |
| | | if(user != null ){ |
| | | AgentUser agentUser = agentUserMapper.findAgentByAgentId(user.getAgentId()); |
| | | if(agentUser != null){ |
| | | if(agentUser != null) { |
| | | siteInfo.setAgentCode(agentUser.getAgentCode()); |
| | | if(!agentUser.getOnLineServices().isEmpty()){ |
| | | // siteInfo.setOnlineService(agentUser.getOnLineServices()); |
| | | if(agentUser.getId().equals(17)){ |
| | | siteInfo.setOnlineService("https://t.me/DuroCaspital035"); |
| | | }else if(agentUser.getId().equals(18)){ |
| | | siteInfo.setOnlineService("https://t.me/DC_1352"); |
| | | }else if(agentUser.getId().equals(19)){ |
| | | siteInfo.setOnlineService("https://t.me/DCBlocktrades"); |
| | | }else if(agentUser.getId().equals(20)){ |
| | | siteInfo.setOnlineService("https://t.me/JOP1090Q"); |
| | | }else if(agentUser.getId().equals(22)){ |
| | | siteInfo.setOnlineService("https://t.me/JOP1090Q"); |
| | | }else if(agentUser.getId().equals(23)){ |
| | | siteInfo.setOnlineService("https://t.me/DCcustomerservice"); |
| | | }else if(agentUser.getId().equals(24)){ |
| | | siteInfo.setOnlineService("https://t.me/Acc0880"); |
| | | }else if(agentUser.getId().equals(25)){ |
| | | siteInfo.setOnlineService("https://t.me/DCLisaService"); |
| | | }else if(agentUser.getId().equals(26)){ |
| | | siteInfo.setOnlineService("https://t.me/AliceKKQ"); |
| | | }else if(agentUser.getId().equals(27)){ |
| | | siteInfo.setOnlineService("https://t.me/Duro_Capital"); |
| | | }else if(agentUser.getId().equals(28)){ |
| | | siteInfo.setOnlineService("@https://t.me/DC11023"); |
| | | }else if(agentUser.getId().equals(29)){ |
| | | siteInfo.setOnlineService("https://t.me/Duro_Capital"); |
| | | }else if(agentUser.getId().equals(30)){ |
| | | siteInfo.setOnlineService("https://t.me/DL9855\t"); |
| | | } |
| | | if (!agentUser.getOnLineServices().isEmpty()) { |
| | | siteInfo.setOnlineService(agentUser.getOnLineServices()); |
| | | } |
| | | |
| | | } |
| | | }else{ |
| | | siteInfo.setOnlineService("https://t.me/Duro_Capital"); |
| | | } |
| | | return ServerResponse.createBySuccess(siteInfo); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public void grabNews() { |
| | | addNews(1, PropertiesUtil.getProperty("JS_IN_HTTP_URL") + "stock-markets?key=" + PropertiesUtil.getProperty("JS_IN_KEY") + "&type=6"); |
| | | addNews(1, PropertiesUtil.getProperty("JP_HTTP_API") + "stock-markets?key=" + PropertiesUtil.getProperty("JP_KEY") + "&type=1&country_id=35"); |
| | | } |
| | | |
| | | private void addNews(Integer type, String url) { |
| | |
| | | @Override |
| | | public ServerResponse getDzList(int pageNum, int pageSize, String orderBy, String keyWords, HttpServletRequest request) { |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | if (keyWords == null || keyWords.trim().isEmpty()) { |
| | | // 如果 keyWords 为空,则直接返回空分页结果 |
| | | return ServerResponse.createBySuccess(new RPageInfo()); |
| | | } |
| | | String formatDate = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN); |
| | | List<StockDz> stockTypeDz = stockMapper.findStockTypeDz(orderBy, keyWords,formatDate); |
| | | RPageInfo pageInfo = new RPageInfo(); |
| | |
| | | List<Stock> stockList = new ArrayList<>(); |
| | | if (stockType.equals("99")) { |
| | | PageHelper.startPage(pageNum, pageSize); |
| | | stockList.addAll(stockMapper.findZtStockListByKeyWords(keyWords, stockPlate, "IN", Integer.valueOf(0))); |
| | | stockList.addAll(stockMapper.findZtStockListByKeyWords(keyWords, stockPlate, "JP", Integer.valueOf(0))); |
| | | } else if (stockType.equals("100")) { |
| | | User user = iUserService.getCurrentRefreshUser(request); |
| | | if (user == null) { |
| | |
| | | Gson gson = new Gson(); |
| | | List<kData> dataList = gson.fromJson(object.toString(), new TypeToken<List<kData>>(){}.getType()); |
| | | |
| | | Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, pid).eq(Stock::getStockType, "IN")); |
| | | Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>().eq(Stock::getStockCode, pid).eq(Stock::getStockType, "JP")); |
| | | BigDecimal nowPrice = iPriceServices.getNowPrice(stock.getStockCode()); |
| | | Map singleStock = getSingleStock(stock.getStockCode()); |
| | | StockVO stockVO = (StockVO)singleStock.get("stock"); |
| | |
| | | @Override |
| | | public Boolean timeCheck(String stockCode) { |
| | | StockSetting stockSetting = stockSettingMapper.selectOne(new QueryWrapper<StockSetting>().eq("stock_code",stockCode)); |
| | | StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type","IN")); |
| | | StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type","JP")); |
| | | if(stockSetting!= null){ |
| | | // 说明进入盘前交易或者盘后交易时间 |
| | | Date newDate = new Date(); |
| | |
| | | BigDecimal buyAmt = nowPrice.multiply(new BigDecimal(buyNum)).divide(new BigDecimal(lever)); |
| | | BigDecimal orderFree = siteSettingBuyFee.multiply(buyAmt); |
| | | |
| | | BigDecimal fundratio = new BigDecimal(user.getFundRatio()).divide(new BigDecimal(100)); |
| | | BigDecimal fundratio = new BigDecimal(String.valueOf(user.getFundRatio().isEmpty() ? 100 : user.getFundRatio())).divide(new BigDecimal(100)); |
| | | BigDecimal availableBalance = fundratio.multiply(userAssets.getAvailableBalance()); |
| | | if (availableBalance.compareTo(buyAmt.add(orderFree)) < 0) { |
| | | return ServerResponse.createByErrorMsg("订单失败,配资不足", request); |
| | |
| | | |
| | | UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>() |
| | | .eq(UserAssets::getUserId, userPosition.getUserId()) |
| | | .eq(UserAssets::getAccectType, "IN") |
| | | .eq(UserAssets::getAccectType, "JP") |
| | | ); |
| | | if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){ |
| | | return ServerResponse.createByErrorMsg("请先缴清待补资金", request); |
| | |
| | | // StringBuffer gid = new StringBuffer(); |
| | | // gid.append(stockSubscribe.getStockType()!=null?stockSubscribe.getStockType():""); |
| | | // gid.append(userStockSubscribe.getNewCode()!=null?userStockSubscribe.getNewCode():"stock code invaild"); |
| | | userPosition.setStockGid("IN"); |
| | | userPosition.setStockGid("JP"); |
| | | userPosition.setBuyOrderId(GeneratePosition.getPositionId()); |
| | | userPosition.setBuyOrderTime(new Date()); |
| | | userPosition.setBuyOrderPrice(userStockSubscribe.getBuyPrice()); |
| | |
| | | userPosition.setNewId(stockSubscribe.getNewlistId()); |
| | | int ret = 0; |
| | | ret = this.userPositionMapper.insert(userPosition); |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", userPosition.getUserId()); |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", userPosition.getUserId()); |
| | | if(null == userAssets){ |
| | | return ServerResponse.createByErrorMsg("新股转持仓失败"); |
| | | } |
| | | userAssetsMapper.updateById(userAssets); |
| | | iUserAssetsServices.availablebalanceChange("IN", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", ""); |
| | | iUserAssetsServices.availablebalanceChange("JP", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", ""); |
| | | if (ret > 0) { |
| | | userStockSubscribe.setStatus(5); |
| | | userStockSubscribeMapper.update1(userStockSubscribe); |
| | |
| | | if (siteProduct.getRealNameDisplay() && user.getIsLock().intValue() == 1) { |
| | | return ServerResponse.createByErrorMsg("Order failed, account has been locked"); |
| | | } |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN", user.getId()); |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP", user.getId()); |
| | | if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){ |
| | | return ServerResponse.createByErrorMsg("请先缴清待补资金", request); |
| | | } |
| | |
| | | UserPosition userPosition = getUserPosition(dzId,num, user, stockDz, nowPrice, stock, buyAmt); |
| | | userPositionMapper.insert(userPosition); |
| | | BigDecimal buy_fee_amt = siteSettingBuyFee.multiply(buyAmt); |
| | | userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"",""); |
| | | iUserAssetsServices.availablebalanceChange("IN", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", ""); |
| | | userAssetsServices.availablebalanceChange(EStockType.JP.getCode(), user.getId(), EUserAssets.BUY, buyAmt.negate(),"",""); |
| | | iUserAssetsServices.availablebalanceChange("JP", userAssets.getUserId(), EUserAssets.HANDLING_CHARGE, buy_fee_amt, "", ""); |
| | | return ServerResponse.createBySuccess("购买成功", request); |
| | | } |
| | | |
| | |
| | | for (UserPosition position : list) { |
| | | UserAssets userAssets = userAssetsMapper.selectOne(new LambdaQueryWrapper<UserAssets>() |
| | | .eq(UserAssets::getUserId, position.getUserId()) |
| | | .eq(UserAssets::getAccectType, "IN") |
| | | .eq(UserAssets::getAccectType, "JP") |
| | | ); |
| | | if(userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) > 0){ |
| | | continue; |
| | |
| | | |
| | | for (int i = 0; i <userRecharges.size() ; i++) { |
| | | SitePay s = sitePayMapper.selectById(userRecharges.get(i).getPayId()); |
| | | userRecharges.get(i).setAssetsType(EStockType.IN.getSymbol1()); |
| | | userRecharges.get(i).setChannelName(EStockType.IN.getSymbol()); |
| | | userRecharges.get(i).setAssetsType(EStockType.JP.getSymbol1()); |
| | | userRecharges.get(i).setChannelName(EStockType.JP.getSymbol()); |
| | | } |
| | | |
| | | return ServerResponse.createBySuccess(pageInfo); |
| | |
| | | userRecharge.setPayTime(new Date()); |
| | | userRecharge.setOrderStatus(Integer.valueOf(1)); |
| | | userRecharge.setPayId(1); |
| | | userAssetsServices.availablebalanceChange(EStockType.IN.getCode(), |
| | | userAssetsServices.availablebalanceChange(EStockType.JP.getCode(), |
| | | userId,EUserAssets.TOP_UP,new BigDecimal(amt),"",""); |
| | | int insertCount = this.userRechargeMapper.insert(userRecharge); |
| | | if (insertCount > 0) { |
| | |
| | | user.setRegAddress(uadd); |
| | | |
| | | user.setIsLogin(Integer.valueOf(0)); |
| | | |
| | | int insertCount = this.userMapper.insert(user); |
| | | |
| | | if (insertCount > 0) { |
| | |
| | | if (user.getIsLogin().intValue() == 1) { |
| | | return ServerResponse.createByErrorMsg("登录失败。账户锁定",request); |
| | | } |
| | | userAssetsServices.assetsByTypeAndUserId(EStockType.IN.getCode(),user.getId()); |
| | | userAssetsServices.assetsByTypeAndUserId(EStockType.JP.getCode(),user.getId()); |
| | | this.iSiteLoginLogService.saveLog(user, request); |
| | | return ServerResponse.createBySuccess(user); |
| | | } |
| | |
| | | rUserAssets.setAmountToBeCovered((userAssets.getAmountToBeCovered().add(userAssets.getHandlingChargeWritten()).toString())); |
| | | rUserAssets.setHandlingChargeWritten(userAssets.getHandlingChargeWritten()); |
| | | BigDecimal rate = rateServices.currencyRate( |
| | | EStockType.getEStockTypeByCode(userAssets.getAccectType()),EStockType.US); |
| | | EStockType.getEStockTypeByCode(userAssets.getAccectType()),EStockType.JP); |
| | | |
| | | BigDecimal availableBalanceUSD = amt; |
| | | if(amt.compareTo(BigDecimal.ZERO)>0){ |
| | |
| | | userPositions = userPositionMapper. |
| | | findMyPositionByCodeAndSpell(userId, |
| | | "","", |
| | | 0, "IN"); |
| | | 0, "JP"); |
| | | |
| | | |
| | | List<UserPositionVO> userPositionVOS = Lists.newArrayList(); |
| | |
| | | ServerResponse money = iUserService.getMoney(user.getId()); |
| | | List<RUserAssets> rUserAssetsList = (List<RUserAssets>) money.getData(); |
| | | RUserAssets rUserAssets = rUserAssetsList.stream() |
| | | .filter(stock -> "IN".equals(stock.getAccectType())) |
| | | .filter(stock -> "JP".equals(stock.getAccectType())) |
| | | .findFirst() |
| | | .orElse(null); |
| | | |
| | |
| | | |
| | | int insertCount = this.userMapper.insert(user); |
| | | dbUser = userMapper.selectOne(queryWrapper); |
| | | userAssetsServices.getAvailableBalance(EStockType.IN.getCode(),dbUser.getId() ); |
| | | userAssetsServices.availablebalanceChange(EStockType.IN.getCode(),dbUser.getId(),EUserAssets.TOP_UP,new BigDecimal(amt),"",""); |
| | | userAssetsServices.getAvailableBalance(EStockType.JP.getCode(),dbUser.getId() ); |
| | | userAssetsServices.availablebalanceChange(EStockType.JP.getCode(),dbUser.getId(),EUserAssets.TOP_UP,new BigDecimal(amt),"",""); |
| | | if (insertCount > 0) { |
| | | return ServerResponse.createBySuccessMsg("Success"); |
| | | } |
| | |
| | | ServerResponse money = iUserService.getMoney(user.getId()); |
| | | List<RUserAssets> rUserAssetsList = (List<RUserAssets>) money.getData(); |
| | | RUserAssets rUserAssets = rUserAssetsList.stream() |
| | | .filter(stock -> "IN".equals(stock.getAccectType())) |
| | | .filter(stock -> "JP".equals(stock.getAccectType())) |
| | | .findFirst() |
| | | .orElse(null); |
| | | |
| | |
| | | } |
| | | User user = iUserService.getCurrentRefreshUser(request); |
| | | synchronized (user.getId()){ |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN",user.getId()); |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP",user.getId()); |
| | | if (model.getNewCode() != null) { |
| | | StockSubscribe stockSubscribe = stockSubscribeMapper.selectOne(new QueryWrapper<StockSubscribe>() |
| | | .eq("newlist_id", model.getNewlistId())); |
| | |
| | | // bound = new BigDecimal(model.getApplyNums()).multiply(stockSubscribe.getPrice()); |
| | | // } |
| | | // |
| | | BigDecimal useEnaAmount = iUserAssetsServices.getAvailableBalance(EStockType.IN.getCode(), user.getId()); |
| | | BigDecimal useEnaAmount = iUserAssetsServices.getAvailableBalance(EStockType.JP.getCode(), user.getId()); |
| | | if(useEnaAmount.compareTo(bound)<0){ |
| | | return ServerResponse.createByErrorMsg("余额不足,配售失败",request); |
| | | } |
| | |
| | | UserStockSubscribe userStockSubscribe = Convert.convert(UserStockSubscribe.class, model); |
| | | userStockSubscribe.setNewStockId(stockSubscribe.getNewlistId()); |
| | | ret = userStockSubscribeMapper.insert(userStockSubscribe); |
| | | iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(), user.getId(),EUserAssets.BUY,bound.negate(),"",""); |
| | | iUserAssetsServices.availablebalanceChange(EStockType.JP.getCode(), user.getId(),EUserAssets.BUY,bound.negate(),"",""); |
| | | if (ret > 0) { |
| | | return ServerResponse.createBySuccessMsg("配售成功",request); |
| | | } else { |
| | |
| | | } |
| | | |
| | | //客户中签直接扣除客户账户可用资金 |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", userStockSubscribe.getUserId()); |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", userStockSubscribe.getUserId()); |
| | | if (model.getStatus() == 3 && model.getApplyNumber() != null){ |
| | | if(stockSubscribe.getType() == 1){ |
| | | model.setBond((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNumber()))); |
| | |
| | | } |
| | | BigDecimal cCount = new BigDecimal(model.getApplyNums()-model.getApplyNumber()); |
| | | BigDecimal tMoney = ((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice())).multiply(cCount); |
| | | iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(), |
| | | iUserAssetsServices.availablebalanceChange(EStockType.JP.getCode(),userStockSubscribe.getUserId(), |
| | | EUserAssets.TOP_UP,tMoney,"",""); |
| | | model.setBond((stockSubscribe.getMinPrice() != null ? stockSubscribe.getMinPrice() : stockSubscribe.getPrice()).multiply(BigDecimal.valueOf(model.getApplyNumber()))); |
| | | model.setDbMoney(BigDecimal.ZERO); |
| | |
| | | userStockSubscribe.setSubmitTime(DateTimeUtil.getCurrentDate()); |
| | | userStockSubscribe.setStatus(4); |
| | | BigDecimal bigDecimal = iUserAssetsServices. |
| | | getAvailableBalance(EStockType.IN.getCode(), |
| | | getAvailableBalance(EStockType.JP.getCode(), |
| | | userStockSubscribe.getUserId()); |
| | | |
| | | BigDecimal multiply = userStockSubscribe.getBuyPrice().multiply(new BigDecimal(userStockSubscribe.getApplyNumber())); |
| | | if(bigDecimal.compareTo(multiply) <= 0){ |
| | | return ServerResponse.createByErrorMsg("余额不足",request); |
| | | } |
| | | iUserAssetsServices.availablebalanceChange(EStockType.IN.getCode(),userStockSubscribe.getUserId(), |
| | | iUserAssetsServices.availablebalanceChange(EStockType.JP.getCode(),userStockSubscribe.getUserId(), |
| | | EUserAssets.BUY,multiply.negate(),"",""); |
| | | userStockSubscribe.setDbMoney(BigDecimal.ZERO); |
| | | userStockSubscribeMapper.update1(userStockSubscribe); |
| | |
| | | } |
| | | |
| | | private boolean getServerResponse() { |
| | | StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type", "IN")); |
| | | StockTimeSetting stockTimeSetting = stockTimeSettingMapper.selectOne(new QueryWrapper<StockTimeSetting>().eq("accets_type", "JP")); |
| | | if (stockTimeSetting == null) { |
| | | return false; |
| | | } |
| | |
| | | User user = this.userMapper.selectById(userWithdraw.getUserId()); |
| | | |
| | | |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", user.getId()); |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", user.getId()); |
| | | if (userAssets == null) { |
| | | return ServerResponse.createByErrorMsg("用户资金账户不存在"); |
| | | } |
| | |
| | | if (user == null) { |
| | | return ServerResponse.createByErrorMsg("用户不存在"); |
| | | } |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("IN", user.getId()); |
| | | UserAssets userAssets = iUserAssetsServices.assetsByTypeAndUserId("JP", user.getId()); |
| | | if (userAssets == null) { |
| | | return ServerResponse.createByErrorMsg("用户资金账户不存在"); |
| | | } |
| | |
| | | |
| | | public static String doPost(String pid) { |
| | | // 从配置中获取 API URL,并拼接 key |
| | | String apiUrl = PropertiesUtil.getProperty("JS_IN_HTTP_URL") + "stock?key=" + PropertiesUtil.getProperty("JS_IN_KEY"); |
| | | String apiUrl = PropertiesUtil.getProperty("JP_HTTP_API") + "stock?key=" + PropertiesUtil.getProperty("JP_KEY"); |
| | | String result = null; |
| | | try { |
| | | URL url = new URL(apiUrl); |
| | |
| | | /* |
| | | * 新聞資訊抓取 |
| | | * */ |
| | | @Scheduled(cron = "0 0/5 * * * ?") |
| | | @Scheduled(cron = "0 0/1 * * * ?") |
| | | public void NewsInfoTask() { |
| | | if (NewsInfoTask.get()) { // 判断任务是否在处理中 |
| | | return; |
| | |
| | | List<UserStockSubscribe> userStockSubscribes = userStockSubscribeMapper.selectList(new LambdaQueryWrapper<UserStockSubscribe>() |
| | | .eq(UserStockSubscribe::getStatus, 3)); |
| | | userStockSubscribes.forEach(f->{ |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("IN",f.getUserId()); |
| | | UserAssets userAssets = userAssetsServices.assetsByTypeAndUserId("JP",f.getUserId()); |
| | | if(null != userAssets && userAssets.getAmountToBeCovered().compareTo(BigDecimal.ZERO) == 0){ |
| | | f.setStatus(4); |
| | | userStockSubscribeMapper.updateById(f); |
| | |
| | | if (syncINStockDataLock.tryLock()) { |
| | | try { |
| | | syncINStockData.set(true); // 设置处理中标识为true |
| | | loadAllStock(EStockType.IN); |
| | | loadAllStock(EStockType.JP); |
| | | } finally { |
| | | syncINStockDataLock.unlock(); |
| | | syncINStockData.set(false); // 设置处理中标识为false |
| | |
| | | |
| | | Map<String, WebSocketClient> retMap = new HashMap<>(2); |
| | | try { |
| | | WebsocketRunClient websocketRunClient = new WebsocketRunClient(new URI(PropertiesUtil.getProperty("JS_IN_WS_URL")),EStockType.IN); |
| | | WebsocketRunClient websocketRunClient = new WebsocketRunClient(new URI(PropertiesUtil.getProperty("JS_IN_WS_URL")),EStockType.JP); |
| | | websocketRunClient.connect(); |
| | | websocketRunClient.setConnectionLostTimeout(0); |
| | | new Thread(() -> { |
| | |
| | | stockRealTimeBean.setPc(stringObjectMap.get("Chg").toString()); |
| | | stockRealTimeBean.setPcp(stringObjectMap.get("ChgPct").toString()+"%"); |
| | | stockRealTimeBean.setTime(stringObjectMap.get("Time").toString()); |
| | | RedisKeyUtil.setCacheRealTimeStock(EStockType.IN,stockRealTimeBean); |
| | | RedisKeyUtil.setCacheRealTimeStock(EStockType.JP,stockRealTimeBean); |
| | | ObjectMapper objectMapper = new ObjectMapper(); |
| | | try { |
| | | if(!stockRealTimeBean.getPcp().contains("-")){ |
| | |
| | | String json = objectMapper.writeValueAsString(stockRealTimeBean); |
| | | sendLoca(json); |
| | | StockRealTimeBean stockDetailBean = new Gson().fromJson(s, StockRealTimeBean.class); |
| | | RedisKeyUtil.setCacheRealTimeStock(EStockType.IN,stockDetailBean); |
| | | RedisKeyUtil.setCacheRealTimeStock(EStockType.JP,stockDetailBean); |
| | | } catch (JsonProcessingException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public void onClose(int i, String s, boolean b) { |
| | | log.info("websocket 印度股票 关闭"+1); |
| | | log.info("websocket 日本股票 关闭"+1); |
| | | } |
| | | |
| | | @Override |
| | |
| | | ftp.user=ftp_stock |
| | | ftp.pass=123456 |
| | | ftp.address =/www/wwwroot/ftp_stock/ |
| | | ftp.server.http.prefix=https://img.durocaspitall.com/ |
| | | ftp.server.http.prefix=https://img.yanshiz.com/ |
| | | |
| | | redis1.ip=localhost |
| | | redis1.port=6379 |
| | | redis1.port=6380 |
| | | redis1.pwd= |
| | | redis1.timeout=10000 |
| | | redis.max.total=50 |
| | |
| | | #IN_NEW_HTTP_API = http://api-in-2.js-stock.top/ |
| | | #IN_NEW_KEY = eVKtHt7aG4m6ozwWL9qG |
| | | |
| | | JS_IN_HTTP_API = http://api-in-3-socket.js-stock.top |
| | | JS_IN_HTTP_URL = http://api-in-pro.js-stock.top/ |
| | | JS_IN_WS_URL = ws://api-in-pro-ws.js-stock.top |
| | | JS_IN_KEY = xKChgi47AP1NMwMeYI3c |
| | | |
| | | US_HTTP_API = http://api-us.js-stock.top/ |
| | | US_WS_URL = ws://ws-us.js-stock.top |
| | | US_KEY = jZFrku4RGQjP87Hmq5tm |
| | | |
| | | HK_HTTP_API = http://test.js-stock.top/ |
| | | HK_WS_URL = ws://test-ws.js-stock.top |
| | | HK_KEY = mG8QQDdjGuLjLnrryd0B |
| | | #JS_IN_HTTP_API = http://api-in-3-socket.js-stock.top |
| | | #JS_IN_HTTP_URL = http://api-in-pro.js-stock.top/ |
| | | #JS_IN_WS_URL = ws://api-in-pro-ws.js-stock.top |
| | | #JS_IN_KEY = xKChgi47AP1NMwMeYI3c |
| | | # |
| | | #US_HTTP_API = http://api-us.js-stock.top/ |
| | | #US_WS_URL = ws://ws-us.js-stock.top |
| | | #US_KEY = jZFrku4RGQjP87Hmq5tm |
| | | # |
| | | #HK_HTTP_API = http://test.js-stock.top/ |
| | | #HK_WS_URL = ws://test-ws.js-stock.top |
| | | #HK_KEY = mG8QQDdjGuLjLnrryd0B |
| | | |
| | | |
| | | #HK_HTTP_API = http://api-v1.js-stock.top/ |
| | | #HK_WS_URL = ws://api-v1-ws.js-stock.top |
| | | #HK_KEY = QgiqrYYZem1WWXWbHeT7 |
| | | JP_HTTP_API = http://api-jp.js-stock.top/ |
| | | JP_WS_URL = ws://api-jp-ws.js-stock.top |
| | | JP_KEY = XBAhluTZJ9hNvRJ0hHmj |
| | | |
| | | |
| | | HG_HTTP_API = http://test.js-stock.top/ |
| | | HG_WS_URL = ws://test-ws.js-stock.top |
| | | HG_KEY = mG8QQDdjGuLjLnrryd0B |
| | | |
| | | |
| | | |
| | | TH_HTTP_API = http://test.js-stock.top/ |
| | | TH_WS_URL = ws://api-in-ws.js-stock.top |
| | | TH_KEY = GBZAcUPLKZzDMDjvV9Ea |
| | | |
| | | MAS_HTTP_API = http://api-ms.js-stock.top/ |
| | | MAS_WS_URL = ws://api-ms-ws.js-stock.top |
| | | MAS_KEY = PQWyZGrw7wRqdoWrvnY9 |
| | | |
| | | SZHB_HTTP_API = https://api.huobi.pro/ |
| | | SZHB_WS_URL = ws://api-in-ws.js-stock.top |
| | | SZHB_KEY = GBZAcUPLKZzDMDjvV9Ea |
| | | #HG_HTTP_API = http://test.js-stock.top/ |
| | | #HG_WS_URL = ws://test-ws.js-stock.top |
| | | #HG_KEY = mG8QQDdjGuLjLnrryd0B |
| | | # |
| | | # |
| | | # |
| | | #TH_HTTP_API = http://test.js-stock.top/ |
| | | #TH_WS_URL = ws://api-in-ws.js-stock.top |
| | | #TH_KEY = GBZAcUPLKZzDMDjvV9Ea |
| | | # |
| | | #MAS_HTTP_API = http://api-ms.js-stock.top/ |
| | | #MAS_WS_URL = ws://api-ms-ws.js-stock.top |
| | | #MAS_KEY = PQWyZGrw7wRqdoWrvnY9 |
| | | # |
| | | #SZHB_HTTP_API = https://api.huobi.pro/ |
| | | #SZHB_WS_URL = ws://api-in-ws.js-stock.top |
| | | #SZHB_KEY = GBZAcUPLKZzDMDjvV9Ea |
| | | |
| | | |
| | | |
| | |
| | | # 开发环境配置 |
| | | server: |
| | | # 服务器的HTTP端口,默认为8090 |
| | | port: 8091 |
| | | port: 8092 |
| | | tomcat: |
| | | # tomcat的URI编码 |
| | | uri-encoding: UTF-8 |
| | |
| | | # 地址 |
| | | host: localhost |
| | | # 端口,默认为6379 |
| | | port: 6379 |
| | | port: 6380 |
| | | # 数据库索引 |
| | | database: 0 |
| | | database: 3 |
| | | # 密码 |
| | | password: |
| | | # 连接超时时间 |
| | |
| | | datasource: |
| | | type: com.alibaba.druid.pool.DruidDataSource |
| | | driverClassName: com.mysql.cj.jdbc.Driver |
| | | url: jdbc:mysql://127.0.0.1:3306/stock?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
| | | url: jdbc:mysql://127.0.0.1:6306/stock-rg?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
| | | # url: jdbc:mysql://127.0.0.1:3306/cgstock?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 |
| | | username: root |
| | | password: 123456 |
| | | password: Err;2[eoGFUriwdgr |
| | | druid: |
| | | # 初始连接数 |
| | | initialSize: 5 |