From dc6abd25de0fc12e7a9de54f628f970c8fdc5910 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Fri, 22 May 2026 16:57:16 +0800
Subject: [PATCH] 理财
---
trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceOrderController.java | 584 ++++++++
trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java | 4
trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/AdminFinanceServiceImpl.java | 23
trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomJob.java | 48
trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceController.java | 250 ++-
trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/AdminMinerService.java | 8
trading-order-service/src/main/java/com/yami/trading/service/finance/loadcache/FinanceLoadCacheService.java | 45
trading-order-service/src/main/java/com/yami/trading/service/finance/service/AdminFinanceService.java | 15
trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/FinanceServiceImpl.java | 123 +
trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/AdminFinanceOrderController.java | 341 +++++
trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderProfitServiceImpl.java | 12
trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceOrderLock.java | 22
trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceOrderService.java | 67 +
trading-order-service/src/main/resources/mapper/finance/FinanceMapper.xml | 20
trading-order-bean/src/main/java/com/yami/trading/bean/finance/Finance.java | 39
trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrder1DayJob.java | 135 ++
trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomServiceImpl.java | 165 ++
trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomService.java | 8
trading-order-service/src/main/java/com/yami/trading/service/finance/service/AdminFinanceOrderService.java | 17
trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/AdminFinanceController.java | 460 +++++++
trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java | 133 ++
trading-order-admin/src/main/java/com/yami/trading/admin/dao/MinerMapper.java | 8
trading-order-bean/src/main/java/com/yami/trading/bean/finance/FinanceOrder.java | 82
trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java | 28
trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceOrderLock.java | 22
/dev/null | 19
trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/MinerService.java | 3
trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderServiceImpl.java | 8
trading-order-service/src/main/java/com/yami/trading/dao/finance/FinanceOrderMapper.java | 26
trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/AdminFinanceOrderServiceImpl.java | 80 +
trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceRedisKeys.java | 12
trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/AdminMinerServiceImpl.java | 3
trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/MinerServiceImpl.java | 2
trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceService.java | 28
trading-order-service/src/main/resources/mapper/finance/FinanceOrderMapper.xml | 100 +
trading-order-service/src/main/java/com/yami/trading/service/user/UserDataService.java | 27
trading-order-service/src/main/java/com/yami/trading/dao/finance/FinanceMapper.java | 11
trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/FinanceOrderServiceImpl.java | 873 +++++++++++++
38 files changed, 3,645 insertions(+), 206 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/AdminFinanceController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/AdminFinanceController.java
new file mode 100644
index 0000000..a09497a
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/AdminFinanceController.java
@@ -0,0 +1,460 @@
+package com.yami.trading.admin.controller.finance;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yami.trading.bean.finance.Finance;
+import com.yami.trading.bean.model.Log;
+import com.yami.trading.common.constants.Constants;
+import com.yami.trading.common.domain.Result;
+import com.yami.trading.common.exception.BusinessException;
+import com.yami.trading.common.util.StringUtils;
+import com.yami.trading.common.web.ResultObject;
+import com.yami.trading.security.common.util.SecurityUtils;
+import com.yami.trading.service.AwsS3OSSFileService;
+import com.yami.trading.service.finance.service.AdminFinanceService;
+import com.yami.trading.service.finance.service.FinanceService;
+import com.yami.trading.service.system.LogService;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * 理财配置
+ */
+@RestController
+@CrossOrigin
+public class AdminFinanceController {
+
+ private Logger logger = LogManager.getLogger(AdminFinanceController.class);
+// @Autowired
+// private UserService userService;
+ @Autowired
+ protected AdminFinanceService adminFinanceService;
+ @Autowired
+ protected FinanceService financeService;
+// @Autowired
+// protected PartyService partyService;
+ @Autowired
+ protected LogService logService;
+// @Autowired
+// protected SecUserService secUserService;
+ @Autowired
+ protected PasswordEncoder passwordEncoder;
+
+ @Autowired
+ AwsS3OSSFileService awsS3OSSFileService;
+
+ private final String action = "/normal/adminFinanceAction!";
+
+ /**
+ * 获取 理财配置 列表
+ */
+ @RequestMapping(action + "list.action")
+ public Result list(HttpServletRequest request) {
+
+// ResultObject resultObject = new ResultObject();
+// resultObject = this.readSecurityContextFromSession(resultObject);
+// if (!"0".equals(resultObject.getCode())) {
+// return resultObject;
+// }
+
+
+ System.out.println("current = " + request.getParameter("current"));
+// request.get
+
+ int pageNo = Integer.parseInt(request.getParameter("current"));
+ int pageSize = Integer.parseInt(request.getParameter("size"));
+ String message = request.getParameter("message");
+ String error = request.getParameter("error");
+ String name_para = request.getParameter("name_para");
+
+
+ Page page = this.adminFinanceService.pagedQuery(pageNo, pageSize, name_para);
+
+
+
+// modelAndView.addObject("pageNo", pageNo);
+// modelAndView.addObject("pageSize", pageSize);
+// modelAndView.addObject("page", page);
+// modelAndView.addObject("message", message);
+// modelAndView.addObject("error", error);
+// modelAndView.addObject("name_para", name_para);
+ return Result.ok(page);
+ }
+
+ /**
+ * 新增 理财配置 页面adminLogin
+ */
+ @RequestMapping(action + "toAdd.action")
+ public ModelAndView toAdd() {
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("finance_add");
+ return modelAndView;
+ }
+
+ /**
+ * 新增 理财配置
+ */
+ @RequestMapping(action + "add.action")
+ public Result add(HttpServletRequest request) {
+ // 产品名称
+ String name = request.getParameter("name");
+ // 产品图片
+ String img = request.getParameter("img");
+ // 周期
+ String cycle = request.getParameter("cycle");
+ // 日利率
+ String daily_rate = request.getParameter("daily_rate");
+ String daily_rate_max = request.getParameter("daily_rate_max");
+ // 今日利率
+ String today_rate = request.getParameter("today_rate");
+ // 违约结算比例
+ String default_ratio = request.getParameter("default_ratio");
+ // 投资金额区间min
+ String investment_min = request.getParameter("investment_min");
+ // 投资金额区间max
+ String investment_max = request.getParameter("investment_max");
+ // 资金密码
+ String login_safeword = request.getParameter("login_safeword");
+ String name_en = request.getParameter("name_en");
+ String name_cn = request.getParameter("name_cn");
+ String name_kn = request.getParameter("name_kn");
+ String name_jn = request.getParameter("name_jn");
+ String state = request.getParameter("state");
+
+// ModelAndView model = new ModelAndView();
+// model.addObject("name", name);
+// model.addObject("img", img);
+// model.addObject("cycle", cycle);
+// model.addObject("daily_rate", daily_rate);
+// model.addObject("daily_rate_max", daily_rate_max);
+// model.addObject("today_rate", today_rate);
+// model.addObject("default_ratio", default_ratio);
+// model.addObject("investment_min", investment_min);
+// model.addObject("investment_max", investment_max);
+// model.addObject("name_en", name_en);
+// model.addObject("name_cn", name_cn);
+// model.addObject("name_kn", name_kn);
+// model.addObject("name_jn", name_jn);
+// model.addObject("state", state);
+
+ Finance finance = new Finance();
+ try {
+
+ String error = this.verification(name, img, cycle, daily_rate, daily_rate_max, today_rate,
+ default_ratio, investment_min, investment_max, login_safeword);
+ if (!StringUtils.isNullOrEmpty(error)) {
+ throw new BusinessException(error);
+ }
+
+
+ finance.setName(name);
+ finance.setNameEn(name_en);
+ finance.setNameCn(name_cn);
+ finance.setNameKn(name_kn);
+ finance.setNameJn(name_jn);
+ if(img.startsWith("http")){
+ finance.setImg(img);
+ }else{
+ finance.setImg(Constants.IMAGES_HTTP+img);
+ }
+ finance.setCycle(Integer.valueOf(cycle));
+ finance.setDailyRate(Double.valueOf(daily_rate));
+ finance.setDailyRateMax(Double.valueOf(daily_rate_max));
+ finance.setTodayRate(Double.valueOf(today_rate));
+ finance.setDefaultRatio(Double.valueOf(default_ratio));
+ finance.setInvestmentMin(Double.valueOf(investment_min));
+ finance.setInvestmentMax(Double.valueOf(investment_max));
+ finance.setState(state);
+
+ this.financeService.save(finance, login_safeword, SecurityUtils.getSysUser().getUsername());
+
+ Log log = new Log();
+ log.setCategory(Constants.LOG_CATEGORY_OPERATION);
+ log.setUsername(SecurityUtils.getSysUser().getUsername());
+ log.setOperator(SecurityUtils.getSysUser().getUsername());
+ log.setLog("手动添加理财配置,ip:["+this.getIp()+"]");
+ logService.save(log);
+
+ } catch (BusinessException e) {
+
+ return Result.failed(1, e.getMessage());
+ } catch (Throwable t) {
+ logger.error("UserAction.register error ", t);
+ return Result.failed(1, t.getMessage());
+ }
+
+// model.addObject("message", "操作成功");
+// model.setViewName("redirect:/" + action + "list.action");
+
+ return Result.ok(finance);
+ }
+
+ /**
+ * 修改 理财配置 页面
+ */
+ @RequestMapping(action + "toUpdate.action")
+ public ModelAndView toUpdate(HttpServletRequest request) {
+ String id = request.getParameter("id");
+
+ ModelAndView modelAndView = new ModelAndView();
+
+ try {
+
+ Finance finance = this.financeService.findById(id);
+
+ modelAndView.addObject("id", id);
+ modelAndView.addObject("name", finance.getName());
+ modelAndView.addObject("img", finance.getImg());
+ modelAndView.addObject("cycle", finance.getCycle());
+ modelAndView.addObject("daily_rate", finance.getDailyRate());
+ modelAndView.addObject("daily_rate_max", finance.getDailyRateMax());
+ modelAndView.addObject("today_rate", finance.getTodayRate());
+ modelAndView.addObject("default_ratio", finance.getDefaultRatio());
+ modelAndView.addObject("investment_min", finance.getInvestmentMin());
+ modelAndView.addObject("investment_max", finance.getInvestmentMax());
+ modelAndView.addObject("name_en", finance.getNameEn());
+ modelAndView.addObject("name_cn", finance.getNameCn());
+ modelAndView.addObject("name_kn", finance.getNameKn());
+ modelAndView.addObject("name_jn", finance.getNameJn());
+ modelAndView.addObject("state", finance.getState());
+
+ } catch (BusinessException e) {
+ modelAndView.addObject("error", e.getMessage());
+ modelAndView.setViewName("redirect:/" + action + "list.action");
+ return modelAndView;
+ } catch (Throwable t) {
+ logger.error(" error ", t);
+ modelAndView.addObject("error", "[ERROR] " + t.getMessage());
+ modelAndView.setViewName("redirect:/" + action + "list.action");
+ return modelAndView;
+ }
+
+ modelAndView.setViewName("finance_update");
+ return modelAndView;
+ }
+
+ /**
+ * 修改 理财配置
+ */
+ @RequestMapping(action + "update.action")
+ public Result update(HttpServletRequest request) {
+ String id = request.getParameter("id");
+ // 产品名称
+ String name = request.getParameter("name");
+ // 产品图片
+ String img = request.getParameter("img");
+ // 周期
+ String cycle = request.getParameter("cycle");
+ // 日利率
+ String daily_rate = request.getParameter("daily_rate");
+ String daily_rate_max = request.getParameter("daily_rate_max");
+ // 今日利率
+ String today_rate = request.getParameter("today_rate");
+ // 违约结算比例
+ String default_ratio = request.getParameter("default_ratio");
+ // 投资金额区间min
+ String investment_min = request.getParameter("investment_min");
+ // 投资金额区间max
+ String investment_max = request.getParameter("investment_max");
+ String name_en = request.getParameter("name_en");
+ String name_cn = request.getParameter("name_cn");
+ String name_kn = request.getParameter("name_kn");
+ String name_jn = request.getParameter("name_jn");
+ String state = request.getParameter("state");
+ // 资金密码
+ String login_safeword = request.getParameter("login_safeword");
+
+// ModelAndView model = new ModelAndView();
+// model.addObject("id", id);
+// model.addObject("name", name);
+// model.addObject("img", img);
+// model.addObject("cycle", cycle);
+// model.addObject("daily_rate", daily_rate);
+// model.addObject("daily_rate_max", daily_rate_max);
+// model.addObject("today_rate", today_rate);
+// model.addObject("default_ratio", default_ratio);
+// model.addObject("investment_min", investment_min);
+// model.addObject("investment_max", investment_max);
+// model.addObject("name_en", name_en);
+// model.addObject("name_cn", name_cn);
+// model.addObject("name_kn", name_kn);
+// model.addObject("name_jn", name_jn);
+// model.addObject("state", state);
+ Finance finance = null;
+ try {
+
+ String error = this.verification(name, img, cycle, daily_rate, daily_rate_max, today_rate,
+ default_ratio, investment_min, investment_max, login_safeword);
+ if (!StringUtils.isNullOrEmpty(error)) {
+ throw new BusinessException(error);
+ }
+
+ finance = this.financeService.findById(id);
+
+ finance.setName(name);
+ finance.setNameEn(name_en);
+ finance.setNameCn(name_cn);
+ finance.setNameKn(name_kn);
+ finance.setNameJn(name_jn);
+ if(img.startsWith("http")){
+ finance.setImg(img);
+ }else{
+ finance.setImg(Constants.IMAGES_HTTP+img);
+ }
+
+ finance.setCycle(Integer.valueOf(cycle));
+ finance.setDailyRate(Double.valueOf(daily_rate));
+ finance.setDailyRateMax(Double.valueOf(daily_rate_max));
+ finance.setTodayRate(Double.valueOf(today_rate));
+ finance.setDefaultRatio(Double.valueOf(default_ratio));
+ finance.setInvestmentMin(Double.valueOf(investment_min));
+ finance.setInvestmentMax(Double.valueOf(investment_max));
+ finance.setState(state);
+
+ this.financeService.update(finance, login_safeword, SecurityUtils.getSysUser().getUsername());
+
+ Log log = new Log();
+ log.setCategory(Constants.LOG_CATEGORY_OPERATION);
+ log.setUsername(SecurityUtils.getSysUser().getUsername());
+ log.setOperator(SecurityUtils.getSysUser().getUsername());
+ log.setLog("手动修改理财配置,ip:["+this.getIp()+"]");
+ logService.save(log);
+
+ } catch (BusinessException e) {
+ return Result.failed(1, e.getMessage());
+ } catch (Throwable t) {
+ logger.error("update error ", t);
+ return Result.failed(1, t.getMessage());
+ }
+
+ return Result.ok(finance);
+ }
+
+ /**
+ * 删除 理财配置
+ */
+ @RequestMapping(action + "toDelete.action")
+ public Result toDelete(HttpServletRequest request) {
+ String id = request.getParameter("id");
+ String login_safeword = request.getParameter("login_safeword");
+
+// ModelAndView modelAndView = new ModelAndView();
+// modelAndView.setViewName("redirect:/" + action + "list.action");
+
+ try {
+
+ if (StringUtils.isNullOrEmpty(login_safeword)) {
+ throw new BusinessException("请输入登录人资金密码");
+ }
+
+ this.financeService.delete(id, login_safeword, SecurityUtils.getSysUser().getUsername());
+
+ Log log = new Log();
+ log.setCategory(Constants.LOG_CATEGORY_OPERATION);
+ log.setUsername(SecurityUtils.getSysUser().getUsername());
+ log.setOperator(SecurityUtils.getSysUser().getUsername());
+ log.setLog("手动删除理财配置,ip:["+this.getIp()+"]");
+ logService.save(log);
+
+ } catch (BusinessException e) {
+ return Result.failed(1, e.getMessage());
+ } catch (Throwable t) {
+ logger.error("update error ", t);
+ return Result.failed(1, t.getMessage());
+ }
+
+ return Result.ok(0);
+ }
+
+ protected String verification(String name, String img, String cycle, String daily_rate, String daily_rate_max, String today_rate,
+ String default_ratio, String investment_min, String investment_max, String login_safeword) {
+ if (StringUtils.isEmptyString(name)) {
+ return "请输入产品名称";
+ }
+ if (StringUtils.isEmptyString(img)) {
+ return "请上传产品图片";
+ }
+ if (StringUtils.isEmptyString(login_safeword)) {
+ return "请输入登录人资金密码";
+ }
+ if (StringUtils.isNullOrEmpty(cycle)
+ || !StringUtils.isInteger(cycle)
+ || Integer.valueOf(cycle) <= 0) {
+ return "周期不能小于等于0天";
+ }
+ if (StringUtils.isNullOrEmpty(daily_rate)
+ || !StringUtils.isDouble(daily_rate)
+ || Double.valueOf(daily_rate) < 0) {
+ return "日利率不能小于0";
+ }
+ if (StringUtils.isNullOrEmpty(daily_rate_max)
+ || !StringUtils.isDouble(daily_rate_max)
+ || Double.valueOf(daily_rate_max) < 0) {
+ return "日利率不能小于0";
+ }
+ if (StringUtils.isNullOrEmpty(today_rate)
+ || !StringUtils.isDouble(today_rate)
+ || Double.valueOf(today_rate) < 0) {
+ return "今日利率不能小于0";
+ }
+ if (StringUtils.isNullOrEmpty(default_ratio)
+ || !StringUtils.isDouble(default_ratio)
+ || Double.valueOf(default_ratio) < 0) {
+ return "违约结算比例不能小于0";
+ }
+ if (StringUtils.isNullOrEmpty(investment_min)
+ || !StringUtils.isDouble(investment_min)
+ || Double.valueOf(investment_min) < 0) {
+ return "投资金额区间不能小于0";
+ }
+ if (StringUtils.isNullOrEmpty(investment_max)
+ || !StringUtils.isDouble(investment_max)
+ || Double.valueOf(investment_max) < 0) {
+ return "投资金额区间不能小于0";
+ }
+ if (Double.valueOf(investment_max) <= Double.valueOf(investment_min)) {
+ return "投资金额区间错误";
+ }
+ return null;
+ }
+
+ public ResultObject readSecurityContextFromSession(ResultObject resultObject) {
+ String partyId = SecurityUtils.getCurrentSysUserId();
+ if (StringUtils.isNullOrEmpty(partyId)) {
+ resultObject.setCode("403");
+ resultObject.setMsg("请重新登录");
+ return resultObject;
+ }
+ return resultObject;
+ }
+
+ public String getIp() {
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
+ String ip = request.getHeader("X-Forwarded-For");
+ if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
+ // 多次反向代理后会有多个ip值,第一个ip才是真实ip
+ int index = ip.indexOf(",");
+ if (index != -1) {
+ return ip.substring(0, index);
+ } else {
+ return ip;
+ }
+ }
+ ip = request.getHeader("X-Real-IP");
+ if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
+ return ip;
+ }
+ return request.getRemoteAddr();
+ }
+
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/AdminFinanceOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/AdminFinanceOrderController.java
new file mode 100644
index 0000000..9d57d7c
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/AdminFinanceOrderController.java
@@ -0,0 +1,341 @@
+package com.yami.trading.admin.controller.finance;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yami.trading.admin.facade.PermissionFacade;
+import com.yami.trading.bean.finance.Finance;
+import com.yami.trading.bean.finance.FinanceOrder;
+import com.yami.trading.bean.model.Log;
+import com.yami.trading.bean.model.User;
+import com.yami.trading.common.constants.Constants;
+import com.yami.trading.common.domain.Result;
+import com.yami.trading.common.exception.BusinessException;
+import com.yami.trading.common.util.Arith;
+import com.yami.trading.common.util.DateTimeTools;
+import com.yami.trading.common.util.DateUtils;
+import com.yami.trading.common.util.ThreadUtils;
+import com.yami.trading.security.common.util.SecurityUtils;
+import com.yami.trading.service.finance.job.FinanceOrder1DayJob;
+import com.yami.trading.service.finance.service.AdminFinanceOrderService;
+import com.yami.trading.service.finance.service.FinanceOrderLock;
+import com.yami.trading.service.finance.service.FinanceOrderService;
+import com.yami.trading.service.finance.service.FinanceService;
+import com.yami.trading.service.system.LogService;
+import com.yami.trading.service.user.UserService;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+/**
+ * 理财产品订单
+ */
+@RestController
+@CrossOrigin
+public class AdminFinanceOrderController {
+
+ private Logger logger = LogManager.getLogger(AdminFinanceOrderController.class);
+
+ @Autowired
+ protected AdminFinanceOrderService adminFinanceOrderService;
+ @Autowired
+ protected FinanceOrderService financeOrderService;
+ @Autowired
+ protected FinanceService financeService;
+ @Autowired
+ protected FinanceOrder1DayJob financeOrder1DayJob;
+ @Autowired
+ protected LogService logService;
+ @Autowired
+ protected UserService secUserService;
+ @Autowired
+ protected PasswordEncoder passwordEncoder;
+
+ @Autowired
+ private PermissionFacade permissionFacade;
+
+ private final String action = "normal/adminFinanceOrderAction!";
+
+ /**
+ * 获取 理财产品订单 列表
+ */
+ @RequestMapping(action + "list.action")
+ public Result list(HttpServletRequest request) {
+ String pageNo = request.getParameter("current");
+ String pageSize = request.getParameter("size");
+ String message = request.getParameter("message");
+ String error = request.getParameter("error");
+ String name_para = request.getParameter("name_para");
+ String finance_para = request.getParameter("finance_para");
+ String status_para = request.getParameter("status_para");
+ String order_no_para = request.getParameter("order_no_para");
+ String rolename_para = request.getParameter("rolename_para");
+ String closeTime = request.getParameter("closeTime");
+ String createTime = request.getParameter("createTime");
+
+ ModelAndView modelAndView = new ModelAndView();
+ modelAndView.setViewName("finance_order_list");
+
+ List<String> children = permissionFacade.getOwnerUserIds();
+
+ String partyId = "";
+ Page page = null;
+ try {
+
+ if("3".equals(status_para)){
+ status_para = null;
+ }
+
+// this.checkAndSetPageNo(pageNo);
+
+
+
+// String partyId = this.getLoginPartyId();
+
+ page = this.adminFinanceOrderService.pagedQuery(Integer.parseInt(pageNo), Integer.parseInt(pageSize), name_para, finance_para,
+ status_para, children, order_no_para, rolename_para,createTime ,closeTime);
+
+ List<Map> list = page.getRecords();
+ for (int i = 0; i < list.size(); i++) {
+ Map map = list.get(i);
+ if (null == map.get("rolename")) {
+ map.put("roleNameDesc", "");
+ } else {
+ String roleName = map.get("rolename").toString();
+ map.put("roleNameDesc", Constants.ROLE_MAP.containsKey(roleName) ? Constants.ROLE_MAP.get(roleName) : roleName);
+ }
+ }
+
+ } catch (BusinessException e) {
+// modelAndView.addObject("error", e.getMessage());
+ return Result.failed(e.getMessage());
+ } catch (Throwable t) {
+ logger.error(" error ", t);
+// modelAndView.addObject("error", "[ERROR] " + t.getMessage());
+ return Result.failed("程序错误");
+ }
+
+ Map<String,Object> map = new HashMap<>();
+
+ map.put("pageNo", pageNo);
+ map.put("pageSize", pageSize);
+ map.put("page", page);
+ map.put("message", message);
+ map.put("error", error);
+ map.put("name_para", name_para);
+ map.put("finance_para", finance_para);
+ map.put("status_para", status_para);
+ map.put("order_no_para", order_no_para);
+ map.put("rolename_para", rolename_para);
+ return Result.ok(map);
+ }
+
+ /**
+ * 后台赎回
+ */
+ @RequestMapping(action + "close.action")
+ public Result close(HttpServletRequest request) {
+ String id = request.getParameter("id");
+
+// ModelAndView modelAndView = new ModelAndView();
+// modelAndView.setViewName("redirect:/" + action + "list.action");
+
+ try {
+
+ FinanceOrder order = this.financeOrderService.findById(id);
+
+ CloseDelayThread lockDelayThread = new CloseDelayThread(id, order.getOrderNo(), this.financeService, this.financeOrderService);
+
+ Thread t = new Thread(lockDelayThread);
+ t.start();
+
+ User sec_user = this.secUserService.findUserByUserCode(order.getPartyId().toString());
+
+ Log log = new Log();
+ log.setCategory(Constants.LOG_CATEGORY_OPERATION);
+ log.setUsername(sec_user.getUserName());
+ log.setUserId(sec_user.getUserId());
+ log.setOperator(SecurityUtils.getSysUser().getUsername());
+ log.setLog("手动赎回理财订单,订单号:[" + order.getOrderNo() + "],ip:[" + this.getIp() + "]");
+ logService.save(log);
+
+ } catch (BusinessException e) {
+// modelAndView.addObject("error", e.getMessage());
+ return Result.failed(e.getMessage());
+ } catch (Throwable t) {
+ logger.error(" error ", t);
+// modelAndView.addObject("error", "[ERROR] " + t.getMessage());
+// return modelAndView;
+ return Result.failed(t.getMessage());
+ }
+
+// modelAndView.addObject("message", "操作成功");
+ return Result.ok("操作成功");
+ }
+
+ /**
+ * 利息重计
+ */
+ @RequestMapping(action + "addProfit.action")
+ public Result addProfit(HttpServletRequest request) {
+ String system_time = request.getParameter("system_time");
+
+// ModelAndView modelAndView = new ModelAndView();
+// modelAndView.setViewName("redirect:/" + action + "list.action");
+
+ try {
+ String username = SecurityUtils.getSysUser().getUsername();
+ if (!"root".equals(username) && !"admin".equals(username)) {
+ throw new BusinessException("权限不足");
+ }
+
+ if (StringUtils.isEmpty(system_time)) {
+ throw new BusinessException("请填入系统时间");
+ }
+
+ Date localTime = DateTimeTools.readQueryTime(system_time, DateUtils.NORMAL_DATE_FORMAT, null);
+ //JobDelayThread thread = new JobDelayThread(DateUtils.toDate(system_time, DateUtils.NORMAL_DATE_FORMAT), this.financeOrder1DayJob);
+ JobDelayThread thread = new JobDelayThread(localTime, this.financeOrder1DayJob);
+
+ Thread t = new Thread(thread);
+ t.start();
+
+ } catch (BusinessException e) {
+// modelAndView.addObject("error", e.getMessage());
+ return Result.failed(e.getMessage());
+ } catch (Throwable t) {
+ logger.error(" error ", t);
+// modelAndView.addObject("error", "[ERROR] " + t.getMessage());
+// return modelAndView;
+ return Result.failed(t.getMessage());
+ }
+
+// modelAndView.addObject("message", "操作成功");
+// return modelAndView;
+ return Result.ok("操作成功");
+ }
+
+ public static int daysBetween(Date smdate, Date bdate) throws ParseException {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ smdate = sdf.parse(sdf.format(smdate));
+ bdate = sdf.parse(sdf.format(bdate));
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(smdate);
+ long time1 = cal.getTimeInMillis();
+ cal.setTime(bdate);
+ long time2 = cal.getTimeInMillis();
+ long between_days = (time2 - time1) / (1000 * 3600 * 24);
+ return Integer.parseInt(String.valueOf(between_days));
+ }
+
+ /**
+ * 新线程处理,直接拿到订单锁处理完成后退出
+ */
+ public class CloseDelayThread implements Runnable {
+ private String id;
+ private String order_no;
+ private FinanceService financeService;
+ private FinanceOrderService financeOrderService;
+
+ public void run() {
+
+ try {
+
+ while (true) {
+
+ if (FinanceOrderLock.add(order_no)) {
+
+ // 提前赎回理财产品需要支付违约金
+ FinanceOrder order = this.financeOrderService.findById(id);
+ Finance finance = this.financeService.findById(order.getFinanceId());
+
+ if ("1".equals(order.getState())) {
+
+ // 取时间
+ Date date_now = new Date();
+
+ // 扣除违约金
+ double last_days = daysBetween(date_now, order.getStopTime());
+ if (last_days <= 0) {
+ last_days = 1;
+ }
+
+ double default_ratio = Arith.mul(finance.getDefaultRatio(), 0.01);
+ default_ratio = Arith.mul(default_ratio, last_days);
+ double breach_amount = Arith.mul(order.getAmount(), default_ratio);
+ order.setProfit(Arith.sub(0, breach_amount));
+ order.setState("2");
+
+ this.financeOrderService.saveClose(order);
+ }
+
+ // 处理完退出
+ break;
+ }
+
+ ThreadUtils.sleep(500);
+ }
+
+ } catch (Exception e) {
+ logger.error("error:", e);
+ } finally {
+ FinanceOrderLock.remove(order_no);
+ }
+ }
+
+ public CloseDelayThread(String id, String order_no, FinanceService financeService, FinanceOrderService financeOrderService) {
+ this.id = id;
+ this.order_no = order_no;
+ this.financeService = financeService;
+ this.financeOrderService = financeOrderService;
+ }
+
+ }
+
+ public class JobDelayThread implements Runnable {
+ private FinanceOrder1DayJob financeOrder1DayJob;
+ private Date systemTime;
+
+ public void run() {
+ this.financeOrder1DayJob.handleData(systemTime);
+ }
+
+ public JobDelayThread(Date systemTime, FinanceOrder1DayJob financeOrder1DayJob) {
+ this.systemTime = systemTime;
+ this.financeOrder1DayJob = financeOrder1DayJob;
+ }
+
+ }
+
+ public String getIp() {
+ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
+ String ip = request.getHeader("X-Forwarded-For");
+ if (com.yami.trading.common.util.StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
+ // 多次反向代理后会有多个ip值,第一个ip才是真实ip
+ int index = ip.indexOf(",");
+ if (index != -1) {
+ return ip.substring(0, index);
+ } else {
+ return ip;
+ }
+ }
+ ip = request.getHeader("X-Real-IP");
+ if (com.yami.trading.common.util.StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {
+ return ip;
+ }
+ return request.getRemoteAddr();
+ }
+
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceController.java
index 015e97c..9b2e596 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceController.java
@@ -1,129 +1,161 @@
package com.yami.trading.admin.controller.finance;
-import com.yami.trading.admin.model.LoginModel;
import com.yami.trading.bean.finance.Finance;
-import com.yami.trading.bean.vo.FinanceVo;
-import com.yami.trading.common.domain.Result;
-import com.yami.trading.common.exception.YamiShopBindException;
-import com.yami.trading.common.util.ConvertUtil;
-import com.yami.trading.common.util.GoogleAuthenticator;
-import com.yami.trading.security.common.bo.UserInfoInTokenBO;
-import com.yami.trading.security.common.enums.SysTypeEnum;
-import com.yami.trading.security.common.vo.TokenInfoVO;
-import com.yami.trading.service.finance.FinanceService;
-import com.yami.trading.sys.model.SysUser;
-import com.yami.trading.util.ConverterUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
+import com.yami.trading.common.exception.BusinessException;
+import com.yami.trading.common.util.StringUtils;
+import com.yami.trading.common.web.ResultObject;
+import com.yami.trading.service.finance.service.FinanceService;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.ObjectUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
-import javax.validation.Valid;
-import java.util.Collections;
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.Map;
+
/**
- * @program: trading-order-master
- * @description: 理财
- * @create: 2025-01-22 17:13
- **/
+ * 理财产品
+ *
+ */
@RestController
-@RequestMapping("finance")
-@Api(tags = "理财")
-@Slf4j
+@CrossOrigin
public class FinanceController {
- @Autowired
- FinanceService service;
+ private Logger logger = LogManager.getLogger(FinanceController.class);
+
+ @Autowired
+ protected FinanceService financeService;
+
+ private final String action = "/api/finance!";
- @PostMapping("/add")
- @ApiOperation(value = "理财-添加")
- public Result<?> login(@Valid @RequestBody FinanceVo vo) {
- Finance finance = ConverterUtil.convert(vo, Finance.class);
- service.save(finance);
- return Result.ok("添加成功");
- }
+ /**
+ * 理财产品列表
+ */
+ @RequestMapping(action + "list.action")
+ public Object list() {
+
+ ResultObject resultObject = new ResultObject();
- /**
- * 修改理财
- */
- @PutMapping("/update/{id}")
- @ApiOperation(value = "理财-修改")
- public Result<?> updateFinance(@PathVariable Long id, @Valid @RequestBody FinanceVo vo) {
- // 查询该理财产品是否被用户持有
-// boolean isHeldByUsers = userFinanceService.isFinanceHeldByUsers(id);
-// if (isHeldByUsers) {
-// return Result.failed("该理财产品已被用户持有,无法修改");
-// }
+ try {
+
+ List<Finance> data = this.financeService.findAllState_1();
+ resultObject.setData(bulidData(data));
+ resultObject.setCode("0");
+
+ } catch (BusinessException e) {
+ resultObject.setCode("1");
+ resultObject.setMsg(e.getMessage());
+ } catch (Throwable t) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ logger.error("error:", t);
+ }
- // 如果没有用户持有,继续进行修改操作
- return Optional.ofNullable(service.getById(id))
- .map(finance -> {
- finance.setName(vo.getName());
- finance.setName_en(vo.getName_en());
- finance.setName_cn(vo.getName_cn());
- finance.setName_kn(vo.getName_kn());
- finance.setName_jn(vo.getName_jn());
- finance.setImg(vo.getImg());
- finance.setCycle(vo.getCycle());
- finance.setDaily_rate(vo.getDaily_rate());
- finance.setDaily_rate_max(vo.getDaily_rate_max());
- finance.setToday_rate(vo.getToday_rate());
- finance.setDefault_ratio(vo.getDefault_ratio());
- finance.setInvestment_min(vo.getInvestment_min());
- finance.setInvestment_max(vo.getInvestment_max());
- finance.setState(vo.getState());
- finance.setBuyCurrency(vo.getBuyCurrency());
- finance.setOutputCurrency(vo.getOutputCurrency());
+ return resultObject;
+ }
- service.save(finance);
- return Result.ok("修改成功");
- })
- .orElseGet(() -> Result.failed("理财信息不存在"));
- }
+ /**
+ * 理财产品详情
+ */
+ @RequestMapping(action + "get.action")
+ public Object get(HttpServletRequest request) {
+ String id = request.getParameter("id");
+
+ ResultObject resultObject = new ResultObject();
+
+ try {
+
+ Finance data = this.financeService.findById(id);
+ if (!StringUtils.isNullOrEmpty(data.getImg())) {
+ String path = data.getImg();
+ data.setImg(path);
+ }
+
+ resultObject.setData(data);
+ resultObject.setCode("0");
+
+ } catch (BusinessException e) {
+ resultObject.setCode("1");
+ resultObject.setMsg(e.getMessage());
+ } catch (Throwable t) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ logger.error("error:", t);
+ }
+ return resultObject;
+ }
- /**
- * 删除理财
- */
- @DeleteMapping("/delete/{id}")
- @ApiOperation(value = "理财-删除")
- public Result<?> deleteFinance(@PathVariable Long id) {
- boolean removed = service.removeById(id);
- if (removed) {
- // 查询该理财产品是否被用户持有
-// boolean isHeldByUsers = userFinanceService.isFinanceHeldByUsers(id);
-// if (isHeldByUsers) {
-// return Result.failed("该理财产品已被用户持有,无法删除");
-// }
- return Result.ok("删除成功");
- } else {
- return Result.failed("理财信息不存在");
- }
- }
+ protected List<Map<String, Object>> bulidData(List<Finance> finances) throws ParseException {
- /**
- * 查询单个理财
- */
- @GetMapping("/find/{id}")
- @ApiOperation(value = "理财-查询")
- public Result<?> getFinance(@PathVariable Long id) {
- return Optional.ofNullable(service.getById(id))
- .map(Result::ok)
- .orElseGet(() -> Result.failed("理财信息不存在"));
- }
+ List<Map<String, Object>> result_finances = new ArrayList<Map<String, Object>>();
- /**
- * 查询所有理财
- */
- @GetMapping("/list")
- @ApiOperation(value = "理财-查询所有")
- public Result<?> getAllFinances() {
- List<Finance> finances = service.list();
- return Result.ok(finances.isEmpty() ? Collections.emptyList() : finances);
- }
+ for (int i = 0; i < finances.size(); i++) {
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ Finance finance = finances.get(i);
+
+ System.out.println(finance);
+
+ String path = finance.getImg();
+ map.put("img", path);
+ map.put("id", finance.getUuid());
+
+ map.put("name", finance.getName());
+ map.put("name_en", finance.getNameEn());
+ map.put("name_cn", finance.getNameCn());
+ map.put("name_kn", finance.getNameKn());
+ map.put("name_jn", finance.getNameJn());
+ map.put("cycle", finance.getCycle());
+ map.put("daily_rate", finance.getDailyRate() + " ~ " + finance.getDailyRateMax());
+ map.put("daily_rate_max", finance.getDailyRateMax());
+ map.put("today_rate", finance.getTodayRate());
+ map.put("default_ratio", finance.getDefaultRatio());
+ map.put("investment_min", finance.getInvestmentMin());
+ map.put("investment_max", finance.getInvestmentMax());
+ map.put("state", finance.getState());
+ map.put("buyCurrency", finance.getBuyCurrency());
+ map.put("outputCurrency", finance.getOutputCurrency());
+
+ result_finances.add(map);
+ }
+
+ return result_finances;
+ }
+
+ private Map<String, Object> bulidData(Finance finance) throws ParseException {
+
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ String path = finance.getImg();
+ map.put("img", path);
+ map.put("id", finance.getUuid());
+
+ map.put("name", finance.getName());
+ map.put("name_en", finance.getNameEn());
+ map.put("name_cn", finance.getNameCn());
+ map.put("name_kn", finance.getNameKn());
+ map.put("name_jn", finance.getNameJn());
+ map.put("cycle", finance.getCycle());
+ map.put("daily_rate", finance.getDailyRate());
+ map.put("daily_rate_max", finance.getDailyRateMax());
+ map.put("today_rate", finance.getTodayRate());
+ map.put("default_ratio", finance.getDefaultRatio());
+ map.put("investment_min", finance.getInvestmentMin());
+ map.put("investment_max", finance.getInvestmentMax());
+ map.put("state", finance.getState());
+ map.put("buyCurrency", finance.getBuyCurrency());
+ map.put("outputCurrency", finance.getOutputCurrency());
+
+ return map;
+ }
+
}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceOrderController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceOrderController.java
new file mode 100644
index 0000000..0bd5998
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceOrderController.java
@@ -0,0 +1,584 @@
+package com.yami.trading.admin.controller.finance;
+
+import com.yami.trading.bean.finance.Finance;
+import com.yami.trading.bean.finance.FinanceOrder;
+import com.yami.trading.bean.model.User;
+import com.yami.trading.common.exception.BusinessException;
+import com.yami.trading.common.util.*;
+import com.yami.trading.common.web.ResultObject;
+import com.yami.trading.security.common.util.SecurityUtils;
+import com.yami.trading.service.SessionTokenService;
+import com.yami.trading.service.finance.service.FinanceOrderService;
+import com.yami.trading.service.finance.service.FinanceService;
+import com.yami.trading.service.user.UserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 理财订单
+ */
+@RestController
+@CrossOrigin
+@Slf4j
+public class FinanceOrderController {
+
+// private Logger logger = LogManager.getLogger(FinanceOrderController.class);
+
+ @Autowired
+ protected FinanceOrderService financeOrderService;
+ @Autowired
+ protected FinanceService financeService;
+ @Autowired
+ protected UserService partyService;
+ @Autowired
+ protected SessionTokenService sessionTokenService;
+
+ private final String action = "/api/financeOrder!";
+
+ /**
+ * 托管订单
+ */
+ @RequestMapping(action + "list.action")
+ public Object list(HttpServletRequest request) {
+ ResultObject resultObject = new ResultObject();
+// resultObject = readSecurityContextFromSession(resultObject);
+// if (!"0".equals(resultObject.getCode())) {
+// return resultObject;
+// }
+ try {
+ List<FinanceOrder> data = new ArrayList<>();
+// String partyId = getLoginPartyId();
+ String partyId = SecurityUtils.getCurrentUserId();
+ if (StringUtils.isNullOrEmpty(partyId)) {
+ resultObject.setData(data);
+ resultObject.setCode("0");
+ return resultObject;
+ }
+ String page_no = request.getParameter("page_no");
+ int pageNo = 1;
+ if (StringUtils.isNotEmpty(page_no)) {
+ pageNo = Integer.valueOf(page_no);
+ }
+ // 状态。0.正常赎回, 1 托管中 ,2提前赎回 (违约)3.取消
+ String state = request.getParameter("state");
+ data = financeOrderService.pagedQuery(pageNo, 10, partyId, state).getRecords();
+ // 如果不为空 则从理财产品中获取日利率 图片
+ if (data == null) {
+ resultObject.setData(data);
+ resultObject.setCode("0");
+ return resultObject;
+ }
+
+ List<Finance> finances = financeService.findAll();
+ Finance finance = new Finance();
+
+ for (int i = 0; i < data.size(); i++) {
+ FinanceOrder financeOrder = data.get(i);
+
+ for (int j = 0; j < finances.size(); j++) {
+ finance = finances.get(j);
+ if (finance.getUuid().equals(financeOrder.getFinanceId())) {
+ break;
+ }
+ }
+ // 取时间
+ Date date_now = new Date();
+ int days = daysBetween(date_now, financeOrder.getStopTime());
+ if (days < 0) {
+ days = 0;
+ }
+ financeOrder.setName(finance.getName());
+ financeOrder.setNameCn(finance.getNameCn());
+ financeOrder.setNameEn(finance.getNameEn());
+ financeOrder.setDays(days);
+ financeOrder.setCloseTimeStr(DateUtils.format(financeOrder.getCloseTime(), DateUtils.DF_yyyyMMdd));
+ financeOrder.setCreateTimeStr(DateUtils.format(financeOrder.getCreateTime(), DateUtils.DF_yyyyMMdd));
+ financeOrder.setDailyRate(finance.getDailyRate() + " ~ " + finance.getDailyRateMax());
+ String path = finance.getImg();
+ financeOrder.setImg(path);
+ }
+
+ resultObject.setData(data);
+ resultObject.setCode("0");
+ } catch (BusinessException e) {
+ resultObject.setCode("1");
+ resultObject.setMsg(e.getMessage());
+ } catch (Exception t) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ log.error("error:", t);
+ }
+
+ return resultObject;
+
+ }
+
+ /**
+ * 收益统计
+ */
+ @RequestMapping(action + "listSum.action")
+ public Object listSum() {
+
+ ResultObject resultObject = new ResultObject();
+
+ try {
+ String partyId = SecurityUtils.getCurrentUserId();
+ List<FinanceOrder> data = financeOrderService.findByState(partyId, "1");
+ FinanceOrder order;
+ List<Finance> finances = financeService.findAll();
+ Finance finance = new Finance();
+ Map<String, Object> map = new HashMap<String, Object>();
+
+ // 金额总数
+ double amount_sum = 0;
+ // 预计今日盈利
+ double today_profit = 0;
+ // 已获收益
+ double aready_profit = 0;
+ // 订单数
+ double order_sum = 0;
+
+ if (data != null) {
+ for (int i = 0; i < data.size(); i++) {
+ order = data.get(i);
+ order_sum = Arith.add(order_sum, 1d);
+ amount_sum = Arith.add(amount_sum, order.getAmount());
+ aready_profit = Arith.add(aready_profit, order.getProfit());
+ for (int j = 0; j < finances.size(); j++) {
+ finance = finances.get(j);
+ if (finance.getUuid().equals(order.getFinanceId())) {
+ double finance_profit = Arith.mul(finance.getDailyRate(), 0.01d);
+ double get_profit = Arith.mul(finance_profit, order.getAmount());
+ today_profit = Arith.add(today_profit, get_profit);
+ break;
+ }
+ }
+ }
+ }
+ // map.put("amount_sum", amount_sum);
+ // map.put("today_profit", today_profit);
+ // map.put("aready_profit", aready_profit);
+ // map.put("order_sum", order_sum);
+
+ map.put("amount_sum", new BigDecimal(amount_sum).setScale(3, RoundingMode.FLOOR).toPlainString());
+ map.put("amountSumValue", new BigDecimal(amount_sum).setScale(3, RoundingMode.FLOOR).toPlainString());
+ map.put("today_profit", new BigDecimal(today_profit).setScale(3, RoundingMode.FLOOR).toPlainString());
+ map.put("aready_profit", new BigDecimal(aready_profit).setScale(3, RoundingMode.FLOOR).toPlainString());
+ map.put("order_sum", new BigDecimal(order_sum).setScale(3, RoundingMode.FLOOR).toPlainString());
+ map.put("buyCurrency", "usdt");
+ map.put("outputCurrency", "usdt");
+ map.put("amountSumValue", new BigDecimal(amount_sum).setScale(3, RoundingMode.FLOOR).toPlainString());
+ map.put("areadyProfitValue", new BigDecimal(aready_profit).setScale(3, RoundingMode.FLOOR).toPlainString());
+ map.put("todayProfitValue", new BigDecimal(today_profit).setScale(3, RoundingMode.FLOOR).toPlainString());
+
+ resultObject.setData(map);
+ resultObject.setCode("0");
+ } catch (BusinessException e) {
+ resultObject.setCode("1");
+ resultObject.setMsg(e.getMessage());
+ } catch (Throwable t) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ log.error("error:", t);
+ }
+
+ return resultObject;
+ }
+
+ /**
+ * 理财托管订单-详情
+ */
+ @RequestMapping(action + "get.action")
+ public Object get(HttpServletRequest request) {
+
+ ResultObject resultObject = new ResultObject();
+ resultObject = readSecurityContextFromSession(resultObject);
+ if (!"0".equals(resultObject.getCode())) {
+ return resultObject;
+ }
+ try {
+ String order_no = request.getParameter("order_no");
+ FinanceOrder data = financeOrderService.findByOrder_no(order_no);
+ System.out.println("FinanceOrder data => " + data);
+ // 如果不为空 则从理财产品中获取日利率 图片
+ resultObject.setData(bulidData(data));
+ resultObject.setCode("0");
+ } catch (BusinessException e) {
+ resultObject.setCode("1");
+ resultObject.setMsg(e.getMessage());
+ } catch (Throwable t) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ log.error("error:", t);
+ }
+
+ return resultObject;
+ }
+
+ /**
+ * 创建买入理财产品订单
+ */
+ @RequestMapping(action + "open.action")
+ public Object open(HttpServletRequest request) {
+
+ ResultObject resultObject = new ResultObject();
+ resultObject = readSecurityContextFromSession(resultObject);
+ if (!"0".equals(resultObject.getCode())) {
+ return resultObject;
+ }
+// String partyId = this.getLoginPartyId();
+ String partyId = SecurityUtils.getCurrentUserId();
+ try {
+ String session_token = request.getParameter("session_token");
+ String financeId = request.getParameter("financeId");
+ String amount = request.getParameter("amount");
+ String buyCurrency = request.getParameter("buyCurrency");
+
+ Object object = this.sessionTokenService.cacheGet(session_token);
+ this.sessionTokenService.del(session_token);
+ if ((object == null) || (!partyId.equals((String) object))) {
+ resultObject.setCode("1");
+ resultObject.setMsg("请稍后再试");
+ return resultObject;
+ }
+ User party = this.partyService.cacheUserBy(partyId);
+// if (!party.getEnabled()) {
+// resultObject.setCode("506");
+// resultObject.setMsg(error);
+// return resultObject;
+// }
+
+ FinanceOrder order = new FinanceOrder();
+ order.setPartyId(partyId);
+ order.setFinanceId(financeId);
+ order.setAmount(Double.valueOf(amount));
+ order.setBuyCurrency(buyCurrency);
+ order.setOrderNo(DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8));
+ order.setState("1");
+
+ this.financeOrderService.saveCreate(order);
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("order_no", order.getOrderNo());
+ resultObject.setData(map);
+ resultObject.setCode("0");
+ } catch (BusinessException e) {
+ resultObject.setCode("1");
+ resultObject.setMsg(e.getMessage());
+ } catch (Throwable t) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ log.error("error:", t);
+ }
+ return resultObject;
+ }
+
+ /**
+ * 获取订单
+ */
+ @RequestMapping(action + "getOpen.action")
+ public Object getOpen(HttpServletRequest request) {
+
+ ResultObject resultObject = new ResultObject();
+ resultObject = readSecurityContextFromSession(resultObject);
+ if (!"0".equals(resultObject.getCode())) {
+ return resultObject;
+ }
+ try {
+
+ String financeId = request.getParameter("financeId");
+ String amount_temp = request.getParameter("amount");
+ String buyCurrency = request.getParameter("buyCurrency");
+
+ Finance finance = financeService.findById(financeId);
+
+ if (StringUtils.isNullOrEmpty(amount_temp)
+ || !StringUtils.isDouble(amount_temp)
+ || Double.valueOf(amount_temp) < 0) {
+ throw new BusinessException("金额错误");
+ }
+
+ if (finance == null) {
+ throw new BusinessException("id错误");
+ }
+
+ Double amount = Double.valueOf(amount_temp);
+
+ Map<String, Object> map = new HashMap<String, Object>();
+ if (finance != null) {
+ String path = finance.getImg();
+ map.put("img", path);
+ }
+
+ map.put("finance_name", finance.getName());
+ map.put("finance_name_en", finance.getNameEn());
+ map.put("finance_name_cn", finance.getNameCn());
+ map.put("finance_name_kn", finance.getNameKn());
+ map.put("finance_name_jn", finance.getNameJn());
+ map.put("cycle", finance.getCycle());
+ String partyId = SecurityUtils.getCurrentUserId();
+ if (!StringUtils.isNullOrEmpty(partyId)) {
+ String session_token = sessionTokenService.savePut(partyId);
+ map.put("session_token", session_token);
+ }
+
+ map.put("amount", amount);
+ // 取时间
+ Date date = new Date();
+
+ map.put("create_time", DateUtils.format(date, DateUtils.DF_yyyyMMddHHmmss));
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(date);
+ calendar.add(calendar.DATE, 1);// 把日期往后增加一天.整数往后推
+ date = calendar.getTime(); //
+
+ // 起息时间
+ map.put("earn_time", DateUtils.format(date, DateUtils.DF_yyyyMMdd));
+ calendar.add(calendar.DATE, finance.getCycle() - 1);// 把日期往后增加周期.整数往后推
+ date = calendar.getTime();
+
+ // 截止时间
+ map.put("stop_time", DateUtils.format(date, DateUtils.DF_yyyyMMdd));
+
+ // 区间
+ map.put("investment_min", finance.getInvestmentMin());
+ map.put("investment_max", finance.getInvestmentMax());
+ DecimalFormat df = new DecimalFormat("#.##");
+ map.put("daily_rate", df.format(finance.getDailyRate()) + "~" + df.format(finance.getDailyRateMax()));
+ map.put("daily_rate_max", finance.getDailyRateMax());
+ map.put("financeId", financeId);
+ double rate = Arith.mul(finance.getDailyRate(), 0.01d);
+ double rateMax = Arith.mul(finance.getDailyRateMax(), 0.01d);
+ map.put("profit_may", Arith.mul(amount, Arith.mul(rate, finance.getCycle())) + "~"
+ + Arith.mul(amount, Arith.mul(rateMax, finance.getCycle())));
+ map.put("order_no", DateUtil.getToday("yyMMddHHmmss") + RandomUtil.getRandomNum(8));
+ map.put("buyCurrency", buyCurrency != null && !buyCurrency.isEmpty() ? buyCurrency : finance.getBuyCurrency());
+ map.put("outputCurrency", finance.getOutputCurrency());
+
+ resultObject.setData(map);
+ resultObject.setCode("0");
+ } catch (BusinessException e) {
+ resultObject.setCode("1");
+ resultObject.setMsg(e.getMessage());
+ } catch (Throwable t) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ log.error("error:", t);
+ }
+ return resultObject;
+ }
+
+ /**
+ * 赎回理财产品订单
+ */
+ @RequestMapping(action + "closOrder.action")
+ public Object closOrder(HttpServletRequest request) {
+
+ ResultObject resultObject = new ResultObject();
+ resultObject = readSecurityContextFromSession(resultObject);
+ if (!"0".equals(resultObject.getCode())) {
+ return resultObject;
+ }
+ try {
+ String id = request.getParameter("id");
+ FinanceOrder order = financeOrderService.findById(id);
+ CloseDelayThread lockDelayThread = new CloseDelayThread(id, order.getOrderNo(), financeOrderService);
+ Thread t = new Thread(lockDelayThread);
+ t.start();
+ } catch (BusinessException e) {
+ resultObject.setCode("1");
+ resultObject.setMsg(e.getMessage());
+ } catch (Throwable t) {
+ resultObject.setCode("1");
+ resultObject.setMsg("程序错误");
+ log.error("error:", t);
+ }
+ return resultObject;
+ }
+
+ /**
+ * 新线程处理,直接拿到订单锁处理完成后退出
+ */
+ public class CloseDelayThread implements Runnable {
+ private String id;
+ private String order_no;
+ private FinanceOrderService financeOrderService;
+
+ public void run() {
+ try {
+ while (true) {
+ if (FinanceOrderLock.add(order_no)) {
+ /**
+ * 提前赎回理财产品需要支付违约金
+ */
+ FinanceOrder order = financeOrderService.findById(id);
+ Finance finance = financeService.findById(order.getFinanceId());
+ // order.setDays(daysBetween(order.getEarn_time(), order.getStop_time()));
+ if ("1".equals(order.getState())) {
+ /**
+ * 扣除违约金
+ */
+ Date date_now = new Date();// 取时间
+ double last_days = daysBetween(date_now, order.getStopTime());
+ if (last_days <= 0) {
+ last_days = 1;
+ }
+ double default_ratio = Arith.mul(finance.getDefaultRatio(), 0.01d);
+ default_ratio = Arith.mul(default_ratio, last_days);
+ double breach_amount = Arith.mul(order.getAmount(), default_ratio);
+ order.setProfit(Arith.sub(0, breach_amount));
+ order.setState("2");
+
+ this.financeOrderService.saveClose(order);
+
+ }
+ /**
+ * 处理完退出
+ */
+ break;
+ }
+ ThreadUtils.sleep(500);
+
+ }
+
+ } catch (Throwable t) {
+ log.error("error:", t);
+ } finally {
+ FinanceOrderLock.remove(order_no);
+ }
+
+ }
+
+ public CloseDelayThread(String id, String order_no, FinanceOrderService financeOrderService) {
+ this.id = id;
+ this.order_no = order_no;
+ this.financeOrderService = financeOrderService;
+ }
+
+ }
+
+ public Map<String, Object> bulidData(FinanceOrder order) throws ParseException {
+
+ System.out.println("order => " + order);
+
+ Finance finance = new Finance();
+ finance = financeService.findById(order.getFinanceId());
+
+ DecimalFormat df = new DecimalFormat("#.##");
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("img", finance.getImg());
+ map.put("daily_rate", df.format(finance.getDailyRate()) + "~" + df.format(finance.getDailyRateMax()));
+ map.put("daily_rate_min", finance.getDailyRate());
+ map.put("daily_rate_max", finance.getDailyRateMax());
+ map.put("create_timeStr", DateUtils.format(order.getCreateTime(), DateUtils.DF_yyyyMMddHHmmss));
+ map.put("close_timeStr", DateUtils.format(order.getCloseTime(), DateUtils.DF_yyyyMMddHHmmss));
+ /**
+ * 此处将截止时间传回
+ */
+ map.put("stop_timeStr", DateUtils.format(order.getStopTime(), DateUtils.DF_yyyyMMdd));
+ map.put("earn_timeStr", DateUtils.format(order.getEarnTime(), DateUtils.DF_yyyyMMdd));
+ Date date_now = new Date();// 取时间
+ int days = daysBetween(date_now, order.getStopTime());
+ if (days < 0) {
+ days = 0;
+ }
+ map.put("days", days);
+ double rate = Arith.mul(finance.getDailyRate(), 0.01d);
+ double rateMax = Arith.mul(finance.getDailyRateMax(), 0.01d);
+ map.put("profit_may", Arith.mul(order.getAmount(), Arith.mul(rate, finance.getCycle())) + "~"
+ + Arith.mul(order.getAmount(), Arith.mul(rateMax, finance.getCycle())));
+
+// {{((data.daily_rate.split(' ~ ')[0]) / 1 * form.amount / 100).toFixed(2)}} ~
+// {{((data.daily_rate.split(' ~ ')[1]) / 1 * form.amount / 100).toFixed(2)}}
+
+ map.put("order_no", order.getOrderNo());
+ map.put("amount", order.getAmount());
+ map.put("cycle", order.getCycle());
+ map.put("id", order.getUuid());
+ map.put("name", finance.getName());
+ map.put("name_en", finance.getNameEn());
+ map.put("name_cn", finance.getNameCn());
+ map.put("name_kn", finance.getNameKn());
+ map.put("name_jn", finance.getNameJn());
+ map.put("buyCurrency", finance.getBuyCurrency());
+ map.put("outputCurrency", finance.getOutputCurrency());
+
+ map.put("state", order.getState());
+ if ("1".equals(order.getState())) {
+
+ map.put("profit", order.getProfit());
+
+ double last_days = daysBetween(date_now, order.getStopTime());
+ if (last_days <= 0) {
+ last_days = 1;
+ }
+ log.info("last_days = " + last_days);
+ log.info("finance.getDefault_ratio() = " + finance.getDefaultRatio());
+ double default_ratio = Arith.mul(finance.getDefaultRatio(), 0.01d);
+ log.info("default_ratio 1 = " + default_ratio);
+ default_ratio = Arith.mul(default_ratio, last_days);
+ log.info("default_ratio 2 = " + default_ratio);
+ double default_amount = Arith.mul(order.getAmount(), default_ratio);
+ log.info("default_amount = " + default_amount);
+ log.info("order.getAmount() = " + order.getAmount());
+ map.put("default_amount", default_amount);
+
+
+ double principal_amount = Arith.sub(order.getAmount(), default_amount);
+ if (principal_amount < 0) {
+ principal_amount = 0;
+ }
+ map.put("principal_amount", principal_amount);
+
+ }
+ if ("2".equals(order.getState())) {
+ map.put("profit", 0);
+ map.put("default_amount", df.format(Arith.sub(0, order.getProfit())));
+ map.put("principal_amount", df.format(Arith.add(order.getAmount(), order.getProfit())));
+ }
+ if ("0".equals(order.getState())) {
+ map.put("profit", order.getProfit());
+ map.put("default_amount", 0);
+ map.put("principal_amount", df.format(Arith.add(order.getAmount(), order.getProfit())));
+ }
+
+ return map;
+
+ }
+
+ public static int daysBetween(Date smdate, Date bdate) throws ParseException {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ smdate = sdf.parse(sdf.format(smdate));
+ bdate = sdf.parse(sdf.format(bdate));
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(smdate);
+ long time1 = cal.getTimeInMillis();
+ cal.setTime(bdate);
+ long time2 = cal.getTimeInMillis();
+ long between_days = (time2 - time1) / (1000 * 3600 * 24);
+
+ return Integer.parseInt(String.valueOf(between_days));
+ }
+
+ public ResultObject readSecurityContextFromSession(ResultObject resultObject) {
+// String partyId = SecurityUtils.getCurrentSysUserId();
+ String partyId = SecurityUtils.getCurrentUserId();
+ if (StringUtils.isNullOrEmpty(partyId)) {
+ resultObject.setCode("403");
+ resultObject.setMsg("请重新登录");
+ return resultObject;
+ }
+ return resultObject;
+ }
+
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceOrderLock.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceOrderLock.java
new file mode 100644
index 0000000..706e84e
--- /dev/null
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/finance/FinanceOrderLock.java
@@ -0,0 +1,22 @@
+package com.yami.trading.admin.controller.finance;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class FinanceOrderLock {
+ private static final Set<String> filter = new HashSet<String>();
+
+ public static boolean add(String order_no) {
+ if (!filter.add(order_no)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public static void remove(String order_no) {
+ filter.remove(order_no);
+
+ }
+
+}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/AdminMinerService.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/AdminMinerService.java
index 9c33584..104d469 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/AdminMinerService.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/AdminMinerService.java
@@ -1,12 +1,16 @@
+/*
package com.yami.trading.admin.controller.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
public interface AdminMinerService {
- /**
+ */
+/**
* 代理分页查询
*
- */
+ *//*
+
public Page pagedQuery(int pageNo, int pageSize, String name_para);
}
+*/
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/MinerRedisKeys.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/MinerRedisKeys.java
deleted file mode 100644
index d4e1937..0000000
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/MinerRedisKeys.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.yami.trading.admin.controller.service;
-
-public class MinerRedisKeys {
-
- /**
- * 矿机,id做key
- */
- public final static String MINER_ID = "MINER_ID_";
-
-
- /**
- * 获取所有的矿机
- */
- public final static String MINER_MAP = "MINER_MAP_";
-
- /**
- * 矿机订单,订单号做key
- */
- public final static String MINER_ORDER_ORDERNO = "MINER_ORDER_ORDERNO_";
-
- /**
- * 矿机订单,查询partyid的map
- */
- public final static String MINER_ORDER_PARTY_ID = "MINER_ORDER_PARTY_ID_";
-
- /**
- * 矿机总资产,partyid做key
- */
- public final static String MINER_ASSETS_PARTY_ID = "MINER_ASSETS_PARTY_ID_";
-
- /**
- * 矿机订单异步提交
- */
- public final static String MINER_ORDER = "MINER_ORDER_";
-
-}
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/MinerService.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/MinerService.java
index 6aafbc7..3f141b2 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/MinerService.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/MinerService.java
@@ -1,3 +1,4 @@
+/*
package com.yami.trading.admin.controller.service;
import java.util.List;
@@ -20,4 +21,4 @@
public Miner cacheById(String id);
public Map<String,Object> getBindOne(Miner miner);
-}
\ No newline at end of file
+}*/
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/AdminMinerServiceImpl.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/AdminMinerServiceImpl.java
index f8c87fe..9cda08d 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/AdminMinerServiceImpl.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/AdminMinerServiceImpl.java
@@ -1,9 +1,11 @@
+/*
package com.yami.trading.admin.controller.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yami.trading.admin.controller.service.AdminMinerService;
import com.yami.trading.admin.dao.MinerMapper;
+import com.yami.trading.bean.miner.Miner;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -38,3 +40,4 @@
// this.pagedQueryDao = pagedQueryDao;
// }
}
+*/
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/MinerServiceImpl.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/MinerServiceImpl.java
index 5f7f7a4..8aa2fac 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/MinerServiceImpl.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/service/impl/MinerServiceImpl.java
@@ -1,3 +1,4 @@
+/*
package com.yami.trading.admin.controller.service.impl;
import java.util.ArrayList;
@@ -210,3 +211,4 @@
// return new ArrayList<Finance>();
// }
}
+*/
diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/dao/MinerMapper.java b/trading-order-admin/src/main/java/com/yami/trading/admin/dao/MinerMapper.java
index abc91f8..a86b26d 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/dao/MinerMapper.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/dao/MinerMapper.java
@@ -1,16 +1,20 @@
+/*
package com.yami.trading.admin.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yami.trading.bean.miner.Miner;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
+*/
/**
* @program: trading-order-master
* @description:
* @create: 2025-03-10 14:27
- **/
+ **//*
+
@Mapper
public interface MinerMapper extends BaseMapper<Miner> {
Page pagedQuery(Page page, @Param("name_para") String name_para);
-}
\ No newline at end of file
+}*/
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/finance/Finance.java b/trading-order-bean/src/main/java/com/yami/trading/bean/finance/Finance.java
index 5ecf3d7..e10ad11 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/finance/Finance.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/finance/Finance.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.yami.trading.common.domain.UUIDEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -16,11 +17,12 @@
@EqualsAndHashCode(callSuper = false)
@TableName("t_finance")
@Data
-public class Finance {
+public class Finance extends UUIDEntity {
- @TableId(type = IdType.AUTO,value = "id")
- private int id;
-
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1639941028310043811L;
/**
* 产品名称
*/
@@ -29,28 +31,25 @@
/**
* 产品名称英文
*/
- private String name_en;
-
+// @TableField("`name_en`")
+ private String nameEn;
/**
* 产品名称繁体
*/
- private String name_cn;
-
+ private String nameCn;
/**
* 产品名称 韩语
*/
- private String name_kn;
-
+ private String nameKn;
/**
* 产品名称 日语
*/
- private String name_jn;
+ private String nameJn;
/**
* 产品图片
*/
private String img;
-
/**
* 周期-天数
*/
@@ -59,33 +58,30 @@
/**
* 日利率最低(%)
*/
- private double daily_rate;
-
+ private double dailyRate;
/**
* 日利率最高(%)
*/
- private double daily_rate_max;
-
+ private double dailyRateMax;
/**
* 今日利率(%)
*
*/
- private double today_rate;
+ private double todayRate;
/**
* 违约结算比例(%)
*/
- private double default_ratio;
+ private double defaultRatio;
/**
* 投资金额区间(USDT)
*/
- private double investment_min;
-
+ private double investmentMin;
/**
* 投资金额区间(USDT)
*/
- private double investment_max;
+ private double investmentMax;
/**
* 状态。0 停用, 1 启用
@@ -101,6 +97,5 @@
* 理财购买币种
*/
private String outputCurrency = "usdt";
-
}
diff --git a/trading-order-bean/src/main/java/com/yami/trading/bean/finance/FinanceOrder.java b/trading-order-bean/src/main/java/com/yami/trading/bean/finance/FinanceOrder.java
index 0703eb2..1700360 100644
--- a/trading-order-bean/src/main/java/com/yami/trading/bean/finance/FinanceOrder.java
+++ b/trading-order-bean/src/main/java/com/yami/trading/bean/finance/FinanceOrder.java
@@ -1,12 +1,12 @@
package com.yami.trading.bean.finance;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
+import com.yami.trading.common.domain.UUIDEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
-import java.io.Serializable;
import java.util.Date;
/**
@@ -14,43 +14,44 @@
* @description: 理财订单
* @create: 2025-01-22 16:45
**/
+@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_finance_order")
-@Data
-public class FinanceOrder {
+public class FinanceOrder extends UUIDEntity {
+ private static final long serialVersionUID = -726057340004619294L;
- @TableId(type = IdType.AUTO,value = "id")
- private int id;
+// private String uuid;
/**
* 用户ID
*/
- private int partyId;
+ private String partyId;
/**
* 订单 号
*/
- private String order_no;
+ private String orderNo;
/**
* 理财产品名称
*/
- private String financeName;
+ private String name;
/**
* 理财产品名称繁体
*/
- private String financeName_cn;
+ private String nameCn;
/**
* 理财产品名称英文
*/
- private String financeName_en;
+ private String nameEn;
/**
* 理财产品Id
*/
+ @TableField("`finance_id`")
private String financeId;
/**
@@ -61,89 +62,108 @@
/**
* 买入时间
*/
- private Date create_time;
-
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
/**
* 起息时间 从买入时间第二天开始算
*/
- private Date earn_time;
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date earnTime;
/**
* 截止时间
*/
- private Date stop_time;
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date stopTime;
/**
* 赎回时间=截止时间+1天
*/
- private Date close_time;
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date closeTime;
/**
* 收益
*/
private double profit;
-
/**
* 之前或累计收益
*/
- private double profit_before;
+ private double profitBefore;
/**
* 状态。0.正常赎回, 1 托管中 ,2提前赎回 (违约)3.取消
*/
private String state = "1";
-
/**
* 托管时间,周期
*/
private int cycle;
/**
- * 理财产品图片
+ * 传回前端数据,数据库不保存
*/
- private String img;
/**
- * 剩余天数
+ * 理财产品图片
*/
+ @TableField(exist = false)
+ private String img;
+ /**
+ * 剩余天数
+ *
+ * @return
+ */
+ @TableField(exist = false)
private int days;
-
/**
* 赎回时间=截止时间+1天
*/
- private String close_timeStr;
-
+ @TableField(exist = false)
+ private String closeTimeStr;
/**
* 买入时间
*/
- private String create_timeStr;
+ @TableField(exist = false)
+ private String createTimeStr;
/**
* 起息时间 从买入时间第二天开始算
*/
- private String earn_timeStr;
+ @TableField(exist = false)
+ private String earnTimeStr;
/**
* 截止时间
*/
- private String stop_timeStr;
+ @TableField(exist = false)
+ private String stopTimeStr;
/**
* 日利率(%)
*/
- private String daily_rate;
+ @TableField(exist = false)
+ private String dailyRate;
/**
* 预计收益
+ *
+ * @return
*/
- private double profit_may;
+ @TableField(exist = false)
+ private double profitMay;
/**
* 理财购买币种
*/
+ //@TableField(exist = false)
private String buyCurrency = "usdt";
+ //赎回币种数量
+ private double volume = 0;
+
/**
* 理财购买币种
*/
+ @TableField(exist = false)
private String outputCurrency = "usdt";
}
diff --git a/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java b/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java
index 23db7ea..c79ca23 100644
--- a/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java
+++ b/trading-order-common/src/main/java/com/yami/trading/common/constants/Constants.java
@@ -246,6 +246,29 @@
*/
public static final String MONEYLOG_CONTENT_BANK_CARD_ORDER_CANCEL = "bank_card_order_cancel";
+ /**
+ * 矿机交易
+ */
+ public static final String MONEYLOG_CATEGORY_MINER = "miner";
+
+ /**
+ * 矿机买入
+ */
+ public static final String MONEYLOG_CONTENT_MINER_BUY = "miner_buy";
+ /**
+ * 矿机退回本金
+ */
+ public static final String MONEYLOG_CONTENT_MINER_BACK = "miner_back";
+
+ /**
+ * 矿机收益
+ */
+ public static final String MONEYLOG_CONTENT_MINER_PROFIT = "miner_profit";
+ /**
+ * 矿机推荐收益
+ */
+ public static final String MONEYLOG_CONTENT_MINER_RECOM_PROFIT = "miner_recom_profit";
+
public static Map<String, String> MONEYLOG_CONTENT = new HashMap<String, String>();
static {
@@ -383,6 +406,11 @@
*/
public static String OUT_OR_IN_DEFAULT = "in";
+ /**
+ * 理财产品交易
+ */
+ public static final String MONEYLOG_CATEGORY_FINANCE = "finance";
+
public final static String PROFIT_LOSS_TYPE_PROFIT = "profit";
public final static String PROFIT_LOSS_TYPE_LOSS = "loss";
public final static String PROFIT_LOSS_TYPE_BUY_PROFIT = "buy_profit";
diff --git a/trading-order-service/src/main/java/com/yami/trading/dao/finance/FinanceMapper.java b/trading-order-service/src/main/java/com/yami/trading/dao/finance/FinanceMapper.java
index 8bbbb42..95a09d3 100644
--- a/trading-order-service/src/main/java/com/yami/trading/dao/finance/FinanceMapper.java
+++ b/trading-order-service/src/main/java/com/yami/trading/dao/finance/FinanceMapper.java
@@ -1,15 +1,10 @@
package com.yami.trading.dao.finance;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yami.trading.bean.finance.Finance;
-import com.yami.trading.bean.item.domain.Item;
-import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
-/**
- * @program: trading-order-master
- * @description: 理财
- * @create: 2025-01-22 17:18
- **/
-@Mapper
public interface FinanceMapper extends BaseMapper<Finance> {
+ Page pagedQuery(Page page, @Param("name_para") String name_para);
}
diff --git a/trading-order-service/src/main/java/com/yami/trading/dao/finance/FinanceOrderMapper.java b/trading-order-service/src/main/java/com/yami/trading/dao/finance/FinanceOrderMapper.java
new file mode 100644
index 0000000..a07c500
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/dao/finance/FinanceOrderMapper.java
@@ -0,0 +1,26 @@
+package com.yami.trading.dao.finance;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yami.trading.bean.finance.FinanceOrder;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface FinanceOrderMapper extends BaseMapper<FinanceOrder> {
+
+ Page pagedQuery(Page page, @Param("partyId") String partyId, @Param("state") String state);
+
+ Page pagedQueryByDate(Page page, @Param("date") String date);
+
+ Page pagedQuery1(Page page, @Param("name_para") String name_para, @Param("finance_para") String finance_para, @Param("status_para") String status_para,
+ @Param("children") List<String> children, @Param("orderNo") String orderNo, @Param("rolename_para") String rolename_para,
+ @Param("createTime") String createTime, @Param("closeTime") String closeTime);
+
+ // public Page pagedQuery(int pageNo, int pageSize, String partyId, String state) {
+ // public Page pagedQueryByDate(int pageNo, int pageSize, String date) {
+// public Page pagedQuery(int pageNo, int pageSize, String name_para, String finance_para, String status_para,
+// String partyId, String orderNo, String rolename_para) {
+
+ Double sumVolumeByBuyCurrency(@Param("partyId") String partyId, @Param("buyCurrency") String buyCurrency);
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/FinanceService.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/FinanceService.java
deleted file mode 100644
index 4b995b5..0000000
--- a/trading-order-service/src/main/java/com/yami/trading/service/finance/FinanceService.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.yami.trading.service.finance;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.yami.trading.bean.finance.Finance;
-import com.yami.trading.bean.vo.FinanceVo;
-
-/**
- * 理财
- */
-public interface FinanceService extends IService<Finance> {
-
-
-}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/impl/FinanceServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/impl/FinanceServiceImpl.java
deleted file mode 100644
index ae803e4..0000000
--- a/trading-order-service/src/main/java/com/yami/trading/service/finance/impl/FinanceServiceImpl.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.yami.trading.service.finance.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.yami.trading.bean.finance.Finance;
-import com.yami.trading.bean.model.ChannelBlockchain;
-import com.yami.trading.dao.finance.FinanceMapper;
-import com.yami.trading.dao.user.ChannelBlockchainMapper;
-import com.yami.trading.service.ChannelBlockchainService;
-import com.yami.trading.service.finance.FinanceService;
-import org.springframework.stereotype.Service;
-
-/**
- * @program: trading-order-master
- * @description: 理财
- * @create: 2025-01-22 17:18
- **/
-@Service
-public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> implements FinanceService {
-}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrder1DayJob.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrder1DayJob.java
new file mode 100644
index 0000000..e84024a
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrder1DayJob.java
@@ -0,0 +1,135 @@
+package com.yami.trading.service.finance.job;
+
+import com.yami.trading.bean.finance.FinanceOrder;
+import com.yami.trading.bean.model.Log;
+import com.yami.trading.common.util.DateUtils;
+import com.yami.trading.common.util.ThreadUtils;
+import com.yami.trading.service.finance.service.FinanceOrderLock;
+import com.yami.trading.service.finance.service.FinanceOrderService;
+import com.yami.trading.service.system.LogService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+
+@Component
+@Slf4j
+public class FinanceOrder1DayJob {
+ private static org.apache.commons.logging.Log logger = LogFactory.getLog(FinanceOrder1DayJob.class);
+ @Autowired
+ protected FinanceOrderService financeOrderService;
+ @Autowired
+ protected LogService sysLogService;
+
+ //
+ // <!-- 每天凌晨4点启动 -->
+ // <task:scheduled ref="dataTask" method="jobHandle" cron="0 0 4 * * ?"/>
+ @Scheduled(cron = "0 0 4 * * ?")
+ public void taskJob() {
+ try {
+ List<FinanceOrder> financeOrder = financeOrderService.getAllStateBy_1();
+ if(financeOrder != null) {
+ for (int i = 0; i < financeOrder.size(); i++) {
+ FinanceOrder order = financeOrder.get(i);
+ boolean lock = false;
+ try {
+
+ if (!FinanceOrderLock.add(order.getOrderNo())) {
+ continue;
+ }
+ lock = true;
+ this.financeOrderService.addListProfit(order);
+
+ } catch (Exception e) {
+ logger.error("FinanceOrder1DayJob order profit fail,orderno:{"+order.getOrderNo()+"},e:", e);
+ } finally {
+ if (lock) {
+ /**
+ * 每秒处理100个订单
+ */
+ ThreadUtils.sleep(10);
+ FinanceOrderLock.remove(order.getOrderNo());
+ }
+
+ }
+ }
+ logger.info(DateUtils.dateToStr(new Date(), DateUtils.DF_yyyyMMddHHmmss)+" finance profit finished ,count:" + financeOrder.size());
+ }
+
+
+ } catch (Throwable e) {
+ logger.error("FinanceOrder1DayJob run fail e:", e);
+ Log entity = new Log();
+// entity.set(SysLog.level_error);
+ entity.setCreateTime(new Date());
+ entity.setOperator("FinanceOrder1DayJob 理财任务 执行失败 e:"+e);
+ sysLogService.save(entity);
+ } finally {
+ /**
+ * 暂停0.1秒
+ */
+ ThreadUtils.sleep(1000);
+ }
+
+ }
+
+ public void handleData(Date systemTime) {
+ try {
+ List<FinanceOrder> financeOrder = financeOrderService.getAllStateBy_1();
+ if(financeOrder != null) {
+ for (int i = 0; i < financeOrder.size(); i++) {
+ FinanceOrder order = financeOrder.get(i);
+ boolean lock = false;
+ try {
+
+ if (!FinanceOrderLock.add(order.getOrderNo())) {
+ continue;
+ }
+ lock = true;
+ this.financeOrderService.addListProfit(order,systemTime);
+
+ } catch (Exception e) {
+ logger.error("FinanceOrder1DayJob order profit fail,orderno:{"+order.getOrderNo()+"},e:", e);
+ } finally {
+ if (lock) {
+ /**
+ * 每秒处理100个订单
+ */
+ ThreadUtils.sleep(10);
+ FinanceOrderLock.remove(order.getOrderNo());
+ }
+
+ }
+ }
+ logger.info(DateUtils.dateToStr(new Date(), DateUtils.DF_yyyyMMddHHmmss)+" finance profit finished ,count:" + financeOrder.size());
+ }
+
+ } catch (Throwable e) {
+ logger.error("FinanceOrder1DayJob run fail e:", e);
+ Log entity = new Log();
+// entity.setLevel(SysLog.level_error);
+ entity.setCreateTime(new Date());
+ entity.setOperator("FinanceOrder1DayJob 理财任务 执行失败 e:"+e);
+ sysLogService.save(entity);
+ } finally {
+ /**
+ * 暂停0.1秒
+ */
+ ThreadUtils.sleep(1000);
+ }
+ }
+
+ public void setFinanceOrderService(FinanceOrderService financeOrderService) {
+ this.financeOrderService = financeOrderService;
+ }
+
+// public void setSysLogService(SysLogService sysLogService) {
+// this.sysLogService = sysLogService;
+// }
+
+
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomJob.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomJob.java
new file mode 100644
index 0000000..cbdc54b
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomJob.java
@@ -0,0 +1,48 @@
+package com.yami.trading.service.finance.job;
+
+import com.yami.trading.bean.model.Log;
+import com.yami.trading.service.system.LogService;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Component
+@Slf4j
+public class FinanceOrderCreateRecomJob {
+ private static Logger logger = LoggerFactory.getLogger(FinanceOrderCreateRecomJob.class);
+ @Autowired
+ protected LogService sysLogService;
+ @Autowired
+ private FinanceOrderCreateRecomService financeOrderCreateRecomService;
+
+ // <!-- 每天凌晨4点启动 -->
+ // <task:scheduled ref="dataTask" method="jobHandle" cron="0 0 4 * * ?"/>
+ // 理财计算前一日购买奖励金额
+ @Scheduled(cron = "0 0 4 * * ?")
+ public void taskJob() {
+ try {
+ financeOrderCreateRecomService.computeRecom();
+ } catch (Exception e) {
+ logger.error("FinanceOrderCreateRecomJob run fail e:", e);
+ Log entity = new Log();
+// entity.setLevel(SysLog.level_error);
+ entity.setCreateTime(new Date());
+ entity.setOperator("FinanceOrderCreateRecomJob 理财购买奖励任务 执行失败 e:"+e);
+ sysLogService.save(entity);
+ }
+ }
+
+// public void setSysLogService(SysLogService sysLogService) {
+// this.sysLogService = sysLogService;
+// }
+
+ public void setFinanceOrderCreateRecomService(FinanceOrderCreateRecomService financeOrderCreateRecomService) {
+ this.financeOrderCreateRecomService = financeOrderCreateRecomService;
+ }
+
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomService.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomService.java
new file mode 100644
index 0000000..d6ed2a8
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomService.java
@@ -0,0 +1,8 @@
+package com.yami.trading.service.finance.job;
+
+public interface FinanceOrderCreateRecomService {
+ /**
+ * 计算前一日购买产品的订单
+ */
+ public void computeRecom();
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomServiceImpl.java
new file mode 100644
index 0000000..67c0085
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/job/FinanceOrderCreateRecomServiceImpl.java
@@ -0,0 +1,165 @@
+package com.yami.trading.service.finance.job;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yami.trading.bean.constans.WalletConstants;
+import com.yami.trading.bean.finance.FinanceOrder;
+import com.yami.trading.bean.model.MoneyLog;
+import com.yami.trading.bean.model.User;
+import com.yami.trading.bean.model.UserRecom;
+import com.yami.trading.bean.model.Wallet;
+import com.yami.trading.common.constants.Constants;
+import com.yami.trading.common.util.Arith;
+import com.yami.trading.common.util.DateUtils;
+import com.yami.trading.common.util.StringUtils;
+import com.yami.trading.service.MoneyLogService;
+import com.yami.trading.service.WalletService;
+import com.yami.trading.service.finance.service.FinanceOrderService;
+import com.yami.trading.service.syspara.SysparaService;
+import com.yami.trading.service.user.UserRecomService;
+import com.yami.trading.service.user.UserService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component
+@Slf4j
+public class FinanceOrderCreateRecomServiceImpl implements FinanceOrderCreateRecomService {
+ @Autowired
+ protected FinanceOrderService financeOrderService;
+ @Autowired
+ protected SysparaService sysparaService;
+ @Autowired
+ protected UserRecomService userRecomService;
+ @Autowired
+ protected UserService partyService;
+ @Autowired
+ protected WalletService walletService;
+ @Autowired
+ protected MoneyLogService moneyLogService;
+ /**
+ * 计算推荐人收益
+ */
+ protected Map<String, Double> cacheRecomProfit = new ConcurrentHashMap<String, Double>();
+
+ /**
+ * 计算前一日购买产品的订单
+ */
+ public void computeRecom() {
+ String finance_buy_bonus_parameters = sysparaService.find("finance_buy_bonus_parameters").getSvalue();
+ if (StringUtils.isEmptyString(finance_buy_bonus_parameters)) {
+ return;
+ }
+ cacheRecomProfit.clear();
+ int pageSize = 1000;
+ int pageNo = 1;
+ String date = DateUtils.getDateStr(DateUtils.addDate(new Date(), -1));
+ while (true) {
+ Page page = financeOrderService.pagedQueryByDate(pageNo, pageSize, date);
+ List<FinanceOrder> list = (List<FinanceOrder>) page.getRecords();
+ if (list.isEmpty()) {
+ break;
+ }
+ for (FinanceOrder order : list) {
+ handleCacheRecom(order, finance_buy_bonus_parameters);
+ }
+ pageNo++;
+ }
+ saveRecomProfit();
+ }
+
+ /**
+ * 购买推荐奖励
+ *
+ * @param entity
+ */
+ public void handleCacheRecom(FinanceOrder entity, String finance_buy_bonus_parameters) {
+ List<UserRecom> list_parents = this.userRecomService.getParents((String)entity.getPartyId());
+
+ if (CollectionUtils.isNotEmpty(list_parents)) {
+ String[] finance_buy_bonus_array = finance_buy_bonus_parameters.split(",");
+ int loop = 0;
+ int loopMax = finance_buy_bonus_array.length;
+ for (int i = 0; i < list_parents.size(); i++) {
+ if (loop >= loopMax) {
+ break;
+ }
+ User party_parent = this.partyService.cacheUserBy(list_parents.get(i).getRecomUserId());
+ if (!Constants.SECURITY_ROLE_MEMBER.equals(party_parent.getRoleName())) {
+ continue;
+ }
+ loop++;
+ double pip_amount = Double.valueOf(finance_buy_bonus_array[loop - 1]);
+ double get_money = Arith.mul(entity.getAmount(), pip_amount);
+
+ if (cacheRecomProfit.containsKey(party_parent.getUserId())) {
+ cacheRecomProfit.put(party_parent.getUserId(),
+ Arith.add(cacheRecomProfit.get(party_parent.getUserId()), get_money));
+ } else {
+ cacheRecomProfit.put(party_parent.getUserId(), get_money);
+ }
+ }
+
+ }
+ }
+
+ public void saveRecomProfit() {
+ if (cacheRecomProfit.isEmpty()) {
+ return;
+ }
+ for (Entry<String, Double> entry : cacheRecomProfit.entrySet()) {
+ Wallet wallet_parent = walletService.saveWalletByPartyId(entry.getKey());
+ BigDecimal amount_before_parent = wallet_parent.getMoney();
+ walletService.update(wallet_parent.getUserId(), entry.getValue());
+ /**
+ * 保存资金日志
+ */
+ MoneyLog moneyLog = new MoneyLog();
+ moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
+ moneyLog.setAmountBefore(amount_before_parent);
+ moneyLog.setAmount(BigDecimal.valueOf(entry.getValue()));
+ moneyLog.setAmountAfter(BigDecimal.valueOf(Arith.add(wallet_parent.getMoney(), BigDecimal.valueOf(entry.getValue()))));
+ moneyLog.setLog("下级购买理财佣金奖励");
+ moneyLog.setUserId(entry.getKey());
+ moneyLog.setWalletType(Constants.WALLET);
+ moneyLog.setContentType(WalletConstants.MONEYLOG_CONTENT_FINANCE_RECOM_PROFIT);
+ moneyLogService.save(moneyLog);
+ }
+ }
+
+ public void setFinanceOrderService(FinanceOrderService financeOrderService) {
+ this.financeOrderService = financeOrderService;
+ }
+
+ public void setSysparaService(SysparaService sysparaService) {
+ this.sysparaService = sysparaService;
+ }
+
+ public void setUserRecomService(UserRecomService userRecomService) {
+ this.userRecomService = userRecomService;
+ }
+
+ public void setPartyService(UserService partyService) {
+ this.partyService = partyService;
+ }
+
+ public void setWalletService(WalletService walletService) {
+ this.walletService = walletService;
+ }
+
+ public void setMoneyLogService(MoneyLogService moneyLogService) {
+ this.moneyLogService = moneyLogService;
+ }
+
+ public void setCacheRecomProfit(Map<String, Double> cacheRecomProfit) {
+ this.cacheRecomProfit = cacheRecomProfit;
+ }
+
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/loadcache/FinanceLoadCacheService.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/loadcache/FinanceLoadCacheService.java
new file mode 100644
index 0000000..ef49af1
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/loadcache/FinanceLoadCacheService.java
@@ -0,0 +1,45 @@
+package com.yami.trading.service.finance.loadcache;
+
+import com.yami.trading.bean.finance.Finance;
+import com.yami.trading.service.finance.service.FinanceRedisKeys;
+import com.yami.trading.service.finance.service.FinanceService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component
+@Slf4j
+public class FinanceLoadCacheService {
+ private static final Log logger = LogFactory.getLog(FinanceLoadCacheService.class);
+ @Autowired
+ private FinanceService financeService;
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ public void loadcache() {
+ load();
+ logger.info("完成Finance数据加载redis");
+ }
+
+ public void load() {
+ List<Finance> all = financeService.selectAllNoCache();
+ Map<String, Finance> cacheMap = new ConcurrentHashMap<String, Finance>();
+ for (Finance finance : all) {
+ cacheMap.put(finance.getUuid(), finance);
+ redisTemplate.opsForValue().set(FinanceRedisKeys.FINANCE_ID + finance.getUuid(), finance);
+ }
+ redisTemplate.opsForValue().set(FinanceRedisKeys.FINANCE_MAP, cacheMap);
+ }
+
+// public void setRedisHandler(RedisHandler redisHandler) {
+// this.redisHandler = redisHandler;
+// }
+
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/AdminFinanceOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/AdminFinanceOrderService.java
new file mode 100644
index 0000000..0dcabe1
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/AdminFinanceOrderService.java
@@ -0,0 +1,17 @@
+package com.yami.trading.service.finance.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.trading.bean.finance.FinanceOrder;
+
+import java.util.List;
+
+public interface AdminFinanceOrderService extends IService<FinanceOrder> {
+
+ /**
+ * 代理分页查询
+ *
+ */
+ public Page pagedQuery(int pageNo, int pageSize, String username_para, String finance_para, String status_para,
+ List<String> children, String orderNo, String rolename_para , String createTime , String closeTime);
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/AdminFinanceService.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/AdminFinanceService.java
new file mode 100644
index 0000000..2e11525
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/AdminFinanceService.java
@@ -0,0 +1,15 @@
+package com.yami.trading.service.finance.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.trading.bean.finance.Finance;
+
+
+public interface AdminFinanceService extends IService<Finance> {
+
+ /**
+ * 代理分页查询
+ *
+ */
+ public Page pagedQuery(int pageNo, int pageSize, String name_para);
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceOrderLock.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceOrderLock.java
new file mode 100644
index 0000000..90040e6
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceOrderLock.java
@@ -0,0 +1,22 @@
+package com.yami.trading.service.finance.service;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class FinanceOrderLock {
+ private static final Set<String> filter = new HashSet<String>();
+
+ public static boolean add(String order_no) {
+ if (!filter.add(order_no)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public static void remove(String order_no) {
+ filter.remove(order_no);
+
+ }
+
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceOrderService.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceOrderService.java
new file mode 100644
index 0000000..5e438fa
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceOrderService.java
@@ -0,0 +1,67 @@
+package com.yami.trading.service.finance.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yami.trading.bean.finance.FinanceOrder;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 理财产品订单
+ *
+ *
+ */
+public interface FinanceOrderService extends IService<FinanceOrder> {
+
+ /**
+ * 下单
+ */
+ public void saveCreate(FinanceOrder financeOrder);
+
+ /**
+ * 赎回
+ */
+ public void saveClose(FinanceOrder financeOrder);
+
+ public void saveClose(FinanceOrder financeOrder, Date systemTime);
+
+ /**
+ * 计算当天收益
+ */
+ public void addListProfit(FinanceOrder order);
+
+ public void addListProfit(FinanceOrder order,Date systemTime);
+
+ public FinanceOrder findByOrder_no(String order_no);
+
+ /**
+ * 按订单状态查询用户订单
+ *
+ * @param partyId
+ * @param state
+ * @return
+ */
+
+ public List<FinanceOrder> findByState(String partyId, String state);
+
+ public Page pagedQuery(int pageNo, int pageSize, String partyId, String state);
+
+ /**
+ *
+ * @return
+ */
+ public List<FinanceOrder> getAllStateBy_1();
+
+ public FinanceOrder findById(String id);
+
+ public void update(FinanceOrder entity);
+ /**
+ * 根据日期获取到当日的购买订单
+ * @param pageNo
+ * @param pageSize
+ * @param date
+ * @return
+ */
+ public Page pagedQueryByDate(int pageNo, int pageSize, String date);
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceRedisKeys.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceRedisKeys.java
new file mode 100644
index 0000000..7e04d62
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceRedisKeys.java
@@ -0,0 +1,12 @@
+package com.yami.trading.service.finance.service;
+
+public class FinanceRedisKeys {
+ /**
+ * 获取所有的理财产品
+ */
+ public final static String FINANCE_MAP = "FINANCE_MAP_";
+ /**
+ * 理财产品,id做key
+ */
+ public final static String FINANCE_ID = "FINANCE_ID_";
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceService.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceService.java
new file mode 100644
index 0000000..53205f0
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/FinanceService.java
@@ -0,0 +1,28 @@
+package com.yami.trading.service.finance.service;
+
+import com.yami.trading.bean.finance.Finance;
+
+import java.util.List;
+
+/**
+ * 理财产品
+ *
+ * @author User
+ *
+ */
+public interface FinanceService {
+
+ public void save(Finance finance,String login_safeword,String operaterUsername);
+
+ public void update(Finance finance,String login_safeword,String operaterUsername);
+
+ public Finance findById(String id);
+
+ public void delete(String id,String login_safeword,String operaterUsername);
+
+ public List<Finance> findAll();
+
+ public List<Finance> findAllState_1();
+
+ List<Finance> selectAllNoCache();
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/AdminFinanceOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/AdminFinanceOrderServiceImpl.java
new file mode 100644
index 0000000..80d691c
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/AdminFinanceOrderServiceImpl.java
@@ -0,0 +1,80 @@
+package com.yami.trading.service.finance.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.trading.bean.finance.FinanceOrder;
+import com.yami.trading.dao.finance.FinanceOrderMapper;
+import com.yami.trading.service.finance.service.AdminFinanceOrderService;
+import com.yami.trading.service.user.UserRecomService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@Transactional
+public class AdminFinanceOrderServiceImpl extends ServiceImpl<FinanceOrderMapper, FinanceOrder> implements AdminFinanceOrderService {
+// private PagedQueryDao pagedQueryDao;
+ @Autowired
+ private UserRecomService userRecomService;
+
+ public Page pagedQuery(int pageNo, int pageSize, String name_para, String finance_para, String status_para,
+ List<String> children, String orderNo, String rolename_para , String createTime , String closeTime) {
+
+// Map<String, Object> parameters = new HashMap<>();
+// StringBuffer queryString = new StringBuffer(
+// " SELECT financeOrder.UUID id,financeOrder.ORDER_NO order_no ,financeOrder.FINANCE_ID financeId , ");
+// queryString.append(" financeOrder.AMOUNT amount,financeOrder.CREATE_TIME create_time, ");
+// queryString.append(" financeOrder.CLOSE_TIME close_time,financeOrder.PROFIT profit, ");
+// queryString.append(" financeOrder.STATE state, ");
+// queryString.append(" party.user_name username,party.user_code usercode,party.role_name rolename, ");
+// queryString.append(" finance.NAME finance_name,finance.NAME_EN finance_name_en, ");
+// queryString.append(" finance.NAME_KN finance_name_kn,finance.NAME_JN finance_name_jn ");
+// queryString.append(" FROM T_FINANCE_ORDER financeOrder ");
+// queryString.append(" LEFT JOIN party ON financeOrder.PARTY_ID = party.UUID ");
+// queryString.append(" LEFT JOIN T_FINANCE finance ON finance.UUID = financeOrder.FINANCE_ID ");
+//
+// queryString.append(" WHERE 1 = 1 ");
+// if (!StringUtils.isNullOrEmpty(partyId)) {
+// queryString.append(" and financeOrder.PARTY_ID in (:partyId) ");
+// parameters.put("partyId", children);
+// }
+//
+// if (!StringUtils.isNullOrEmpty(finance_para)) {
+// queryString.append(
+// " and (finance.NAME=:finance_para or finance.NAME_EN =:finance_para or finance.NAME_CN =:finance_para) ");
+// parameters.put("finance_para", finance_para);
+// }
+//
+// if (!StringUtils.isNullOrEmpty(name_para)) {
+// queryString.append("AND (party.user_name like:username OR party.user_code like:username ) ");
+// parameters.put("username", "%" + name_para + "%");
+// }
+// if (!StringUtils.isNullOrEmpty(status_para)) {
+// queryString.append(" and financeOrder.STATE =:status_para ");
+// parameters.put("status_para", status_para);
+// }
+// if (!StringUtils.isNullOrEmpty(orderNo)) {
+// queryString.append(" and financeOrder.ORDER_NO = :orderNo ");
+// parameters.put("orderNo", orderNo);
+//
+// }
+// if (!StringUtils.isNullOrEmpty(rolename_para)) {
+// queryString.append(" and party.role_name =:rolename");
+// parameters.put("rolename", rolename_para);
+// }
+//
+// queryString.append(" order by financeOrder.CREATE_TIME desc ");
+
+// Page page = null;
+// Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters);
+// return page;
+
+ Page page=new Page(pageNo,pageSize);
+ return baseMapper.pagedQuery1(page,name_para,finance_para,status_para, children, orderNo, rolename_para , createTime , closeTime);
+
+ }
+
+
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/AdminFinanceServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/AdminFinanceServiceImpl.java
new file mode 100644
index 0000000..71564af
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/AdminFinanceServiceImpl.java
@@ -0,0 +1,23 @@
+package com.yami.trading.service.finance.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.trading.bean.finance.Finance;
+import com.yami.trading.dao.finance.FinanceMapper;
+import com.yami.trading.service.finance.service.AdminFinanceService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@Transactional
+public class AdminFinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> implements AdminFinanceService {
+
+ public Page pagedQuery(int pageNo, int pageSize, String name_para) {
+ Page page=new Page(pageNo,pageSize);
+ return baseMapper.pagedQuery(page,name_para);
+ }
+
+// public void setPagedQueryDao(PagedQueryDao pagedQueryDao) {
+// this.pagedQueryDao = pagedQueryDao;
+// }
+}
\ No newline at end of file
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/FinanceOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/FinanceOrderServiceImpl.java
new file mode 100644
index 0000000..620c5ac
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/FinanceOrderServiceImpl.java
@@ -0,0 +1,873 @@
+package com.yami.trading.service.finance.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.trading.bean.constans.WalletConstants;
+import com.yami.trading.bean.data.domain.Realtime;
+import com.yami.trading.bean.finance.Finance;
+import com.yami.trading.bean.finance.FinanceOrder;
+import com.yami.trading.bean.model.*;
+import com.yami.trading.common.constants.Constants;
+import com.yami.trading.common.exception.BusinessException;
+import com.yami.trading.common.util.Arith;
+import com.yami.trading.common.util.DateUtils;
+import com.yami.trading.common.util.StringUtils;
+import com.yami.trading.common.util.UUIDGenerator;
+import com.yami.trading.dao.finance.FinanceOrderMapper;
+import com.yami.trading.service.MoneyLogService;
+import com.yami.trading.service.WalletService;
+import com.yami.trading.service.data.DataService;
+import com.yami.trading.service.finance.service.FinanceOrderService;
+import com.yami.trading.service.finance.service.FinanceService;
+import com.yami.trading.service.syspara.SysparaService;
+import com.yami.trading.service.user.UserDataService;
+import com.yami.trading.service.user.UserRecomService;
+import com.yami.trading.service.user.UserService;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service
+@Transactional
+public class FinanceOrderServiceImpl extends ServiceImpl<FinanceOrderMapper, FinanceOrder> implements FinanceOrderService {
+ @Autowired
+ protected WalletService walletService;
+ @Autowired
+ protected MoneyLogService moneyLogService;
+ @Autowired
+ protected FinanceService financeService;
+ @Autowired
+ protected UserService partyService;
+ @Autowired
+ protected SysparaService sysparaService;
+ @Autowired
+ protected UserDataService userDataService;
+ @Autowired
+ protected UserRecomService userRecomService;
+ @Autowired
+ protected DataService dataService;
+
+ public void saveCreate(FinanceOrder entity) {
+
+ entity.setCreateTime(new Date());
+
+ // 加入周期
+ Finance finance = financeService.findById(entity.getFinanceId());
+ entity.setCycle(finance.getCycle());
+
+ // 买入金额需要在区间内
+ if (entity.getAmount() > finance.getInvestmentMax() || entity.getAmount() < finance.getInvestmentMin()) {
+ throw new BusinessException("金额错误");
+
+ }
+
+ // 查看余额
+ Wallet wallet = this.walletService.saveWalletByPartyId((String) entity.getPartyId());
+ double amount_before = wallet.getMoney().doubleValue();
+ System.out.println("wallet = " + wallet);
+ System.out.println("amount_before = " + amount_before);
+ if (amount_before < entity.getAmount()) {
+ throw new BusinessException("余额不足");
+ }
+
+// wallet.setMoney(Arith.sub(wallet.getMoney(), entity.getAmount()));
+// this.walletService.update(wallet);
+ this.walletService.update(wallet.getUserId(), Arith.sub(0, entity.getAmount()));
+
+ // 起息时间=确认时间加1天
+ Date date = new Date();// 取时间
+ Calendar calendar = new GregorianCalendar();
+ calendar.setTime(date);
+ // 把日期往后增加一天.整数往后推,负数往前移动
+ calendar.add(calendar.DATE, 1);
+ // 这个时间就是日期往后推一天的结果
+ date = calendar.getTime();
+ entity.setEarnTime(date);
+
+ // 截止时间=起息时间+周期+1
+ int days = (int) Arith.sub(entity.getCycle(), 1);
+ calendar.add(calendar.DATE, days);
+ date = calendar.getTime();
+ entity.setStopTime(date);
+
+ // 默认的赎回时间=截止时间+1
+ calendar.add(calendar.DATE, 1);
+ date = calendar.getTime();
+ entity.setCloseTime(date);
+
+ //
+ double amount = Arith.sub(0, entity.getAmount());
+ double amount_after = Arith.add(amount_before, amount);
+ System.out.println("amount_before => " + amount_before);
+ System.out.println("amount_after => " + amount_after);
+ System.out.println("amount => " + amount);
+
+ // 保存资金日志
+ MoneyLog moneylog = new MoneyLog();
+ moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
+ moneylog.setAmountBefore(BigDecimal.valueOf(amount_before));
+ moneylog.setAmount(BigDecimal.valueOf(amount));
+ moneylog.setAmountAfter(BigDecimal.valueOf(amount_after));
+ moneylog.setLog("购买理财产品,订单号[" + entity.getOrderNo() + "]");
+ moneylog.setUserId((String) entity.getPartyId());
+ moneylog.setWalletType(Constants.WALLET);
+ moneylog.setContentType(WalletConstants.MONEYLOG_CONTENT_FINANCE_BUY);
+
+ moneyLogService.save(moneylog);
+ String uuid = UUIDGenerator.getUUID();
+ entity.setUuid(uuid);
+
+ this.save(entity);
+
+ // 购买理财产品后是否需要增加用户提现流水,1不增加,2要增加(coinspace,cqpro,amex,emex)
+ String finance_buy_add_userdata = this.sysparaService.find("finance_buy_add_userdata").getSvalue();
+
+ // 理财购买后给他增加提现流水限制金额
+ if ("2".equals(finance_buy_add_userdata)) {
+ User party = this.partyService.cacheUserBy(entity.getPartyId().toString());
+// User party = this.partyService.cachePartyBy(entity.getPartyId(), false);
+ party.setWithdrawLimitAmount(
+ BigDecimal.valueOf(
+ Arith.add(party.getWithdrawLimitAmount().doubleValue(), entity.getAmount())
+ ));
+// party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), entity.getAmount()));
+ partyService.updateById(party);
+ }
+ }
+
+ public void saveClose(FinanceOrder entity, Date systemTime) {
+
+ double get_amount = Arith.add(entity.getAmount(), entity.getProfit());
+ if (get_amount < 0) {
+ entity.setProfit(Arith.sub(0, entity.getAmount()));
+ get_amount = Arith.add(entity.getAmount(), entity.getProfit());
+ }
+
+ if (get_amount > 0) {
+ String symbol = entity.getBuyCurrency().toLowerCase();
+ double amount_before;
+ double amount_after;
+ double amount;
+ if (symbol.equals("usdt")) {
+ Wallet wallet = this.walletService.saveWalletByPartyId(entity.getPartyId());
+ amount_before = wallet.getMoney().doubleValue();
+ amount_after = Arith.add(amount_before, get_amount);
+ amount = get_amount;
+ this.walletService.update(wallet.getUserId(), get_amount);
+ } else {
+ //USDT转对应symbol
+ Realtime realtime = this.dataService.realtime(symbol).get(0);
+ amount = Arith.div(get_amount, realtime.getClose().doubleValue(), 8);
+
+ WalletExtend walletExtend = walletService.saveExtendByPara(entity.getPartyId(), symbol);
+ amount_before = walletExtend.getAmount();
+ amount_after = Arith.add(amount_before, get_amount);
+ this.walletService.updateExtend(walletExtend.getPartyId(), walletExtend.getWallettype(), amount);
+ }
+
+ /**
+ * 保存资金日志
+ */
+ MoneyLog moneylog = new MoneyLog();
+ moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
+ moneylog.setAmountBefore(BigDecimal.valueOf(amount_before));
+ moneylog.setAmount(BigDecimal.valueOf(Arith.add(0, amount)));
+ moneylog.setAmountAfter(BigDecimal.valueOf(amount_after));
+ moneylog.setLog("赎回理财产品,订单号[" + entity.getOrderNo() + "]");
+ moneylog.setUserId(entity.getPartyId());
+ moneylog.setWalletType(symbol.toUpperCase());
+ moneylog.setContentType(WalletConstants.MONEYLOG_CONTENT_FINANCE_BACK);
+ moneylog.setCreateTime(new Date());
+
+ moneyLogService.save(moneylog);
+ entity.setVolume(amount);
+ }
+
+ entity.setCloseTime(new Date());// 赎回时间
+ this.update(entity);
+
+ this.userDataService.saveSellFinance(entity);
+
+ }
+
+ public void saveClose(FinanceOrder entity) {
+ double get_amount = Arith.add(entity.getAmount(), entity.getProfit());
+ if (get_amount < 0) {
+ entity.setProfit(Arith.sub(0, entity.getAmount()));
+ get_amount = Arith.add(entity.getAmount(), entity.getProfit());
+ }
+
+ if (get_amount > 0) {
+ String symbol = entity.getBuyCurrency().toLowerCase();
+ double amount_before;
+ double amount_after;
+ double amount;
+ if (symbol.equals("usdt")) {
+ Wallet wallet = this.walletService.saveWalletByPartyId(entity.getPartyId());
+ amount_before = wallet.getMoney().doubleValue();
+ amount_after = Arith.add(amount_before, get_amount);
+ amount = get_amount;
+ this.walletService.update(wallet.getUserId(), get_amount);
+ } else {
+ //USDT转对应symbol
+ Realtime realtime = this.dataService.realtime(symbol).get(0);
+ amount = Arith.div(get_amount, realtime.getClose().doubleValue(), 8);
+
+ WalletExtend walletExtend = walletService.saveExtendByPara(entity.getPartyId(), symbol);
+ amount_before = walletExtend.getAmount();
+ amount_after = Arith.add(amount_before, amount);
+ this.walletService.updateExtend(walletExtend.getPartyId(), walletExtend.getWallettype(), amount);
+ }
+
+ /**
+ * 保存资金日志
+ */
+ MoneyLog moneylog = new MoneyLog();
+ moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
+ moneylog.setAmountBefore(BigDecimal.valueOf(amount_before));
+ moneylog.setAmount(BigDecimal.valueOf(Arith.add(0, amount)));
+ moneylog.setAmountAfter(BigDecimal.valueOf(amount_after));
+ moneylog.setLog("赎回理财产品,订单号[" + entity.getOrderNo() + "]");
+ moneylog.setUserId(entity.getPartyId());
+ moneylog.setWalletType(symbol.toUpperCase());
+ moneylog.setContentType(WalletConstants.MONEYLOG_CONTENT_FINANCE_BACK);
+ moneylog.setCreateTime(new Date());
+
+ moneyLogService.save(moneylog);
+ entity.setVolume(amount);
+ }
+
+ entity.setCloseTime(new Date());// 赎回时间
+ this.update(entity);
+
+ this.userDataService.saveSellFinance(entity);
+
+ }
+
+ @Override
+ public FinanceOrder findByOrder_no(String order_no) {
+ LambdaQueryWrapper<FinanceOrder> queryWrapper = new LambdaQueryWrapper<FinanceOrder>()
+ .eq(FinanceOrder::getOrderNo, order_no)
+ .last("LIMIT 1");
+ return getOne(queryWrapper);
+ }
+
+ public List<FinanceOrder> findByState(String partyId, String state) {
+ /**
+ * 如果是查询已赎回的,则将提前赎回和正常赎回的都查出来
+ */
+ //暂时隐藏
+ List<FinanceOrder> list = null;
+ if ("2".equals(state)) {
+// list = (List<FinanceOrder>)getHibernateTemplate().find(" FROM FinanceOrder WHERE partyId =?0 and state = ?1 or state =?2 ",
+// new Object[] { partyId, "0", "2" });
+ LambdaQueryWrapper<FinanceOrder> queryWrapper = new LambdaQueryWrapper<FinanceOrder>().and(
+ wq -> wq.eq(FinanceOrder::getState, 0).or().eq(FinanceOrder::getState, 2))
+ .eq(FinanceOrder::getPartyId, partyId);
+ list = this.getBaseMapper().selectList(queryWrapper);
+ }
+ if ("0".equals(state) || "1".equals(state)) {
+// list = (List<FinanceOrder>)getHibernateTemplate().find(" FROM FinanceOrder WHERE state = ?0 and partyId =?1",
+// new Object[] { state, partyId });
+ LambdaQueryWrapper<FinanceOrder> queryWrapper = new LambdaQueryWrapper<FinanceOrder>()
+ .eq(FinanceOrder::getState, state).eq(FinanceOrder::getPartyId, partyId);
+ list = this.getBaseMapper().selectList(queryWrapper);
+ } else {
+// list = (List<FinanceOrder>)getHibernateTemplate().find(" FROM FinanceOrder WHERE partyId =?0", new Object[] { partyId });
+ LambdaQueryWrapper<FinanceOrder> queryWrapper = new LambdaQueryWrapper<FinanceOrder>()
+ .eq(FinanceOrder::getPartyId, partyId);
+ list = this.getBaseMapper().selectList(queryWrapper);
+ }
+
+ if (!list.isEmpty())
+ return list;
+ return null;
+ }
+
+ public Page pagedQuery(int pageNo, int pageSize, String partyId, String state) {
+ Page page = new Page(pageNo, pageSize);
+ LambdaQueryWrapper<FinanceOrder> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(StringUtils.isNotEmpty(partyId), FinanceOrder::getPartyId, partyId);
+ if(Objects.equals(state, "4")){
+ queryWrapper.eq(FinanceOrder::getState, "0").or().eq(FinanceOrder::getState, "2").eq(StringUtils.isNotEmpty(partyId), FinanceOrder::getPartyId, partyId);;
+ }else{
+ queryWrapper.eq(StringUtils.isNotEmpty(state), FinanceOrder::getState, state);
+ }
+
+ return baseMapper.selectPage(page, queryWrapper);
+ }
+
+// public Page pagedQuery(int pageNo, int pageSize, String partyId, String state) {
+// /**
+// * 如果是查询已赎回的,则将提前赎回和正常赎回的都查出来
+// */
+// StringBuffer queryString = new StringBuffer("");
+// queryString.append(" FROM FinanceOrder WHERE 1=1 ");
+// Map parameters = new HashMap();
+// queryString.append("AND partyId=:partyId ");
+// parameters.put("partyId", partyId);
+// if (StringUtils.isNotEmpty(state)) {
+// if ("2".equals(state)) {
+// queryString.append(" AND (state =:state_2 OR state =:state_0 )");
+// parameters.put("state_2", "0");
+// parameters.put("state_0", "2");
+//
+// } else if ("02".equals(state)) {
+// /**
+
+// * 兼容其他项目所写,2提前赎回 (违约)
+// */
+// queryString.append("AND state=:state ");
+// parameters.put("state", "2");
+// } else {
+// queryString.append("AND state=:state ");
+// parameters.put("state", state);
+// }
+// }
+// queryString.append(" order by create_time desc ");
+//
+// Page page = this.pagedDao.pagedQueryHql(pageNo, pageSize, queryString.toString(), parameters);
+//
+// return page;
+// }
+
+ /**
+ * 根据日期获取到当日的购买订单
+ *
+ * @param pageNo
+ * @param pageSize
+ * @param date
+ * @return
+ */
+ public Page pagedQueryByDate(int pageNo, int pageSize, String date) {
+ /**
+ * 如果是查询已赎回的,则将提前赎回和正常赎回的都查出来
+ */
+ Page page = new Page(pageNo, pageSize);
+ return baseMapper.pagedQueryByDate(page, date);
+
+// StringBuffer queryString = new StringBuffer("");
+// queryString.append(" FROM FinanceOrder WHERE 1=1 ");
+// Map parameters = new HashMap();
+// queryString.append("AND DATE(create_time) = DATE(:date) ");
+// parameters.put("date", date);
+//
+// queryString.append(" order by create_time asc ");
+//
+// Page page = this.pagedDao.pagedQueryHql(pageNo, pageSize, queryString.toString(), parameters);
+//
+// return page;
+ }
+
+ public void setWalletService(WalletService walletService) {
+ this.walletService = walletService;
+ }
+
+ public void setMoneyLogService(MoneyLogService moneyLogService) {
+ this.moneyLogService = moneyLogService;
+ }
+
+ public void setFinanceService(FinanceService financeService) {
+ this.financeService = financeService;
+ }
+
+ @Override
+ public List<FinanceOrder> getAllStateBy_1() {
+ LambdaQueryWrapper<FinanceOrder> queryWrapper = new LambdaQueryWrapper<FinanceOrder>().eq(FinanceOrder::getState, 1);
+ return list(queryWrapper);
+ }
+
+ public void addListProfit(FinanceOrder order) {
+
+ /**
+ * 截止时间要大于现在这个时间则计算收益 赎回时间如果小于现在时间则不计算收益
+ */
+ List<Finance> finances = financeService.findAll();
+ Finance finance = new Finance();
+ Date now_date = new Date();
+ String date_string = DateUtils.format(now_date, DateUtils.DF_yyyyMMdd);
+
+ /**
+ * 现在时间是否大于赎回时间,如果大于等于,则赎回,不计算收益了,并将状态改变为已赎回 只计算年月日
+ */
+ String order_date = DateUtils.format(order.getCloseTime(), DateUtils.DF_yyyyMMdd);
+ String order_earn = DateUtils.format(order.getEarnTime(), DateUtils.DF_yyyyMMdd);
+ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ Date date_now = null;
+ Date close_date = null;
+ Date earn_date = null;
+ try {
+ date_now = dateFormat.parse(date_string);
+ close_date = dateFormat.parse(order_date);
+ earn_date = dateFormat.parse(order_earn);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ /**
+ * 理财收益赎回时统一下发1还是每日下发2
+ */
+ String finance_profit_days = sysparaService.find("finance_profit_days").getSvalue();
+ System.out.println("finance_profit_days2 = " + finance_profit_days);
+ if ("1".equals(finance_profit_days)) {
+
+ // 如果赎回时间close_date < 现在时间date_now 则 arrive_close > 0
+ int arrive_close = date_now.compareTo(close_date);
+ if (arrive_close >= 0) {
+ order.setState("0");
+ saveClose(order);
+ return;
+ }
+ // 如果起息时间earn_date < 现在时间date_now 则 arrive_close > 0
+ // 起息时间要大于等于今天
+ int arrive_earn = date_now.compareTo(earn_date);
+ if (arrive_earn < 0) {
+ return;
+ }
+
+ for (int j = 0; j < finances.size(); j++) {
+ finance = finances.get(j);
+ if (finance.getUuid().equals(order.getFinanceId())) {
+ break;
+ }
+ }
+ /**
+ * 当日获取的收益
+ */
+ double today_rate = Arith.mul(finance.getTodayRate(), 0.01);
+ double get_amount = Arith.mul(order.getAmount(), today_rate);
+ order.setProfit(Arith.add(order.getProfit(), get_amount));
+
+ this.update(order);
+ }
+
+ if ("2".equals(finance_profit_days)) {
+
+ // 如果赎回时间close_date < 现在时间date_now 则 arrive_close > 0
+ int arrive_close = date_now.compareTo(close_date);
+ if (arrive_close >= 0) {
+ order.setState("0");
+ // 自动赎回调用,只返回本金
+ saveClosePrincipal(order);
+ return;
+ }
+ // 如果起息时间earn_date < 现在时间date_now 则 arrive_close > 0
+ /**
+ * 起息时间要大于等于今天
+ */
+ int arrive_earn = date_now.compareTo(earn_date);
+ if (arrive_earn < 0) {
+ return;
+ }
+
+ for (int j = 0; j < finances.size(); j++) {
+ finance = finances.get(j);
+ if (finance.getUuid().equals(order.getFinanceId())) {
+ break;
+ }
+ }
+ /**
+ * 当日获取的收益
+ */
+ double today_rate = Arith.mul(finance.getTodayRate(), 0.01);
+ double get_amount = Arith.mul(order.getAmount(), today_rate);
+
+ // 5,0.5,3,0.3,2,0.2
+ String finance_level_profit = sysparaService.find("finance_level_profit").getSvalue();
+ boolean finance_level_profit_open = StringUtils.isNotEmpty(finance_level_profit);
+ // 判断是否有理财推荐奖励,如果有,需要扣除30%给推荐人
+ String finance_bonus_parameters = "";
+ finance_bonus_parameters = this.sysparaService.find("finance_bonus_parameters").getSvalue();
+ if ((finance_bonus_parameters != null && !"".equals(finance_bonus_parameters))
+ || finance_level_profit_open) {
+ String[] finance_bonus_array = StringUtils.isNotEmpty(finance_bonus_parameters)
+ ? finance_bonus_parameters.split(",")
+ : new String[]{};
+ List<UserRecom> list_parents = this.userRecomService.getParents(order.getPartyId().toString());
+
+ if (CollectionUtils.isNotEmpty(list_parents)) {
+
+ int loop = 0;
+ for (int i = 0; i < list_parents.size(); i++) {
+ if (finance_level_profit_open) {// 等级奖励只给推荐一人
+ if (loop >= 1) {
+ break;
+ }
+ } else {
+ if (loop >= 3) {
+ break;
+ }
+ }
+
+ User party_parent = this.partyService.cacheUserBy(list_parents.get(i).getRecomUserId());
+ if (!Constants.SECURITY_ROLE_MEMBER.equals(party_parent.getRoleName())) {
+ continue;
+ }
+ get_amount = Arith.mul(order.getAmount(), today_rate);
+ /**
+ * 增加推荐人理财收益
+ */
+ double parent_get_money = 0d;
+ if (finance_level_profit_open) {
+ parent_get_money = levelProfit(party_parent.getUserId(), get_amount,
+ finance_level_profit);
+ } else {
+ double finance_pip_amount = Double.valueOf(finance_bonus_array[loop]);
+ parent_get_money = Arith.mul(get_amount, finance_pip_amount);
+ }
+ if (parent_get_money == 0d) {
+ break;
+ }
+
+ Wallet wallet_parent = walletService.saveWalletByPartyId(party_parent.getUserId());
+ double amount_before_parent = wallet_parent.getMoney().doubleValue();
+ walletService.update(wallet_parent.getUserId(), parent_get_money);
+ /**
+ * 保存资金日志
+ */
+ MoneyLog moneyLog = new MoneyLog();
+ moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
+ moneyLog.setAmountBefore(BigDecimal.valueOf(amount_before_parent));
+ moneyLog.setAmount(BigDecimal.valueOf(parent_get_money));
+ moneyLog.setAmountAfter(
+ BigDecimal.valueOf(
+ Arith.add(wallet_parent.getMoney().doubleValue(), parent_get_money)));
+ moneyLog.setLog("第" + (i + 1) + "代下级用户,每日理财收益奖励金");
+ moneyLog.setUserId(party_parent.getUserId());
+ moneyLog.setWalletType(Constants.WALLET);
+ moneyLog.setContentType(WalletConstants.MONEYLOG_CONTENT_FINANCE_RECOM_PROFIT);
+ moneyLogService.save(moneyLog);
+
+ loop++;
+ }
+ }
+ /**
+ * 理财收益减少百分之30给上级
+ */
+ if (!finance_level_profit_open) {// 等级奖励则无需扣除本人收益
+ get_amount = Arith.sub(get_amount, Arith.mul(order.getAmount(), 0.3));
+ }
+ }
+
+ Wallet wallet = this.walletService.saveWalletByPartyId(order.getPartyId().toString());
+ double amount_before = wallet.getMoney().doubleValue();
+// wallet.setMoney(Arith.add(wallet.getMoney(), get_amount));
+ this.walletService.update(wallet.getUserId(), get_amount);
+// this.walletService.update(wallet);
+ /**
+ * 保存资金日志
+ */
+ MoneyLog moneylog = new MoneyLog();
+ moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
+ moneylog.setAmountBefore(BigDecimal.valueOf(amount_before));
+ moneylog.setAmount(BigDecimal.valueOf(Arith.add(0, get_amount)));
+ moneylog.setAmountAfter(BigDecimal.valueOf(
+ Arith.add(wallet.getMoney().doubleValue(), get_amount)));
+ moneylog.setLog("理财产品每日收益,订单号[" + order.getOrderNo() + "]");
+ moneylog.setUserId(order.getPartyId().toString());
+ moneylog.setWalletType(Constants.WALLET);
+ moneylog.setContentType(Constants.MONEYLOG_CONTENT_FINANCE_PROFIT);
+
+ moneyLogService.save(moneylog);
+
+ order.setProfit(Arith.add(order.getProfit(), get_amount));
+
+ this.update(order);
+ }
+
+ }
+
+ public void addListProfit(FinanceOrder order, Date systemTime) {
+
+ /**
+ * 截止时间要大于现在这个时间则计算收益 赎回时间如果小于现在时间则不计算收益
+ */
+ List<Finance> finances = financeService.findAll();
+ Finance finance = new Finance();
+ Date now_date = systemTime != null ? systemTime : new Date();
+ String date_string = DateUtils.format(now_date, DateUtils.DF_yyyyMMdd);
+
+ /**
+ * 现在时间是否大于赎回时间,如果大于等于,则赎回,不计算收益了,并将状态改变为已赎回 只计算年月日
+ */
+ String order_date = DateUtils.format(order.getCloseTime(), DateUtils.DF_yyyyMMdd);
+ String order_earn = DateUtils.format(order.getEarnTime(), DateUtils.DF_yyyyMMdd);
+ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+ Date date_now = null;
+ Date close_date = null;
+ Date earn_date = null;
+ try {
+ date_now = dateFormat.parse(date_string);
+ close_date = dateFormat.parse(order_date);
+ earn_date = dateFormat.parse(order_earn);
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+ /**
+ * 理财收益赎回时统一下发1还是每日下发2
+ */
+ String finance_profit_days = sysparaService.find("finance_profit_days").getSvalue();
+ System.out.println("finance_profit_days = " + finance_profit_days);
+
+ /**
+ * 1计算收益,赎回统一发放
+ */
+ if ("1".equals(finance_profit_days)) {
+ // 如果赎回时间close_date < 现在时间date_now 则 arrive_close > 0
+ int arrive_close = date_now.compareTo(close_date);
+ if (arrive_close >= 0) {
+ order.setState("0");
+ saveClose(order, systemTime);
+ return;
+ }
+ // 如果起息时间earn_date < 现在时间date_now 则 arrive_close > 0
+ /**
+ * 起息时间要大于等于今天
+ */
+ int arrive_earn = date_now.compareTo(earn_date);
+ if (arrive_earn < 0) {
+ return;
+ }
+
+ for (int j = 0; j < finances.size(); j++) {
+ finance = finances.get(j);
+ if (finance.getUuid().equals(order.getFinanceId())) {
+ break;
+ }
+ }
+ /**
+ * 当日获取的收益
+ */
+ double today_rate = Arith.mul(finance.getTodayRate(), 0.01);
+ double get_amount = Arith.mul(order.getAmount(), today_rate);
+
+ order.setProfit(Arith.add(order.getProfit(), get_amount));
+
+ this.update(order);
+
+ }
+
+ /**
+ * 2每日下发收益
+ */
+ if ("2".equals(finance_profit_days)) {
+
+ // 如果赎回时间close_date < 现在时间date_now 则 arrive_close > 0
+ int arrive_close = date_now.compareTo(close_date);
+ if (arrive_close >= 0) {
+ order.setState("0");
+ /**
+ * 自动赎回调用,只返回本金
+ */
+ saveClosePrincipal(order);
+ return;
+ }
+ // 如果起息时间earn_date < 现在时间date_now 则 arrive_close > 0
+ /**
+ * 起息时间要大于等于今天
+ */
+ int arrive_earn = date_now.compareTo(earn_date);
+ if (arrive_earn < 0) {
+ return;
+ }
+
+ for (int j = 0; j < finances.size(); j++) {
+ finance = finances.get(j);
+ if (finance.getUuid().equals(order.getFinanceId())) {
+ break;
+ }
+ }
+
+ /**
+ * 当日获取的收益
+ */
+
+ double today_rate = Arith.mul(finance.getTodayRate(), 0.01);
+ double get_amount = Arith.mul(order.getAmount(), today_rate);
+
+ // 5,0.5,3,0.3,2,0.2
+ String finance_level_profit = sysparaService.find("finance_level_profit").getSvalue();
+ boolean finance_level_profit_open = StringUtils.isNotEmpty(finance_level_profit);
+ // 判断是否有理财推荐奖励,如果有,需要扣除30%给推荐人
+ String finance_bonus_parameters = "";
+ finance_bonus_parameters = this.sysparaService.find("finance_bonus_parameters").getSvalue();
+ if ((finance_bonus_parameters != null && !"".equals(finance_bonus_parameters))
+ || finance_level_profit_open) {
+ String[] finance_bonus_array = StringUtils.isNotEmpty(finance_bonus_parameters)
+ ? finance_bonus_parameters.split(",")
+ : new String[]{};
+ List<UserRecom> list_parents = this.userRecomService.getParents(order.getPartyId().toString());
+
+ if (CollectionUtils.isNotEmpty(list_parents)) {
+
+ int loop = 0;
+ for (int i = 0; i < list_parents.size(); i++) {
+ if (finance_level_profit_open) {// 等级奖励只给推荐一人
+ if (loop >= 1) {
+ break;
+ }
+ } else {
+ if (loop >= 3) {
+ break;
+ }
+ }
+ User party_parent = this.partyService.cacheUserBy(list_parents.get(i).getRecomUserId());
+ if (!Constants.SECURITY_ROLE_MEMBER.equals(party_parent.getRoleName())) {
+ continue;
+ }
+ get_amount = Arith.mul(order.getAmount(), today_rate);
+ /**
+ * 增加推荐人理财收益
+ */
+ double parent_get_money = 0d;
+ if (finance_level_profit_open) {
+ parent_get_money = levelProfit(party_parent.getUserId(), get_amount,
+ finance_level_profit);
+ } else {
+ double finance_pip_amount = Double.valueOf(finance_bonus_array[loop]);
+ parent_get_money = Arith.mul(get_amount, finance_pip_amount);
+ }
+ if (parent_get_money == 0d) {
+ break;
+ }
+ Wallet wallet_parent = walletService.saveWalletByPartyId(party_parent.getUserId());
+ double amount_before_parent = wallet_parent.getMoney().doubleValue();
+ walletService.update(wallet_parent.getUserId(), parent_get_money);
+ /**
+ * 保存资金日志
+ */
+ MoneyLog moneyLog = new MoneyLog();
+ moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
+ moneyLog.setAmountBefore(BigDecimal.valueOf(amount_before_parent));
+ moneyLog.setAmount(BigDecimal.valueOf(parent_get_money));
+ moneyLog.setAmountAfter(
+ BigDecimal.valueOf(Arith.add(wallet_parent.getMoney().doubleValue(), parent_get_money)));
+ moneyLog.setLog("第" + (i + 1) + "代下级用户,每日理财收益奖励金");
+ moneyLog.setUserId(party_parent.getUserId());
+// moneyLog.setPartyId(party_parent.getId().toString());
+ moneyLog.setWalletType(Constants.WALLET);
+ moneyLog.setContentType(WalletConstants.MONEYLOG_CONTENT_FINANCE_RECOM_PROFIT);
+ moneyLog.setCreateTime(systemTime);
+ moneyLogService.save(moneyLog);
+
+ loop++;
+ }
+ }
+ /**
+ * 理财收益减少百分之30给上级
+ */
+ if (finance_level_profit_open) {// 等级奖励则无需扣除本人收益
+ get_amount = Arith.sub(get_amount, Arith.mul(get_amount, 0.3));
+ }
+ }
+
+ Wallet wallet = this.walletService.saveWalletByPartyId(order.getPartyId().toString());
+ double amount_before = wallet.getMoney().doubleValue();
+// wallet.setMoney(Arith.add(wallet.getMoney(), get_amount));
+ this.walletService.update(wallet.getUserId().toString(), get_amount);
+// this.walletService.update(wallet);
+ /**
+ * 保存资金日志
+ */
+ MoneyLog moneylog = new MoneyLog();
+ moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
+ moneylog.setAmountBefore(BigDecimal.valueOf(amount_before));
+ moneylog.setAmount(BigDecimal.valueOf(Arith.add(0, get_amount)));
+ moneylog.setAmountAfter(BigDecimal.valueOf(Arith.add(wallet.getMoney().doubleValue(), get_amount)));
+ moneylog.setLog("理财产品每日收益,订单号[" + order.getOrderNo() + "]");
+ moneylog.setUserId(order.getPartyId().toString());
+ moneylog.setWalletType(Constants.WALLET);
+ moneylog.setContentType(Constants.MONEYLOG_CONTENT_FINANCE_PROFIT);
+ moneylog.setCreateTime(systemTime);
+ moneyLogService.save(moneylog);
+ order.setProfit(Arith.add(order.getProfit(), get_amount));
+ this.update(order);
+
+ }
+
+ }
+
+ /**
+ * 每日下发收益,自动赎回调用,只返回本金
+ */
+ public void saveClosePrincipal(FinanceOrder entity) {
+ double get_amount = Arith.add(entity.getAmount(), entity.getProfitBefore());
+ if (get_amount < 0) {
+ entity.setProfit(Arith.sub(0, entity.getAmount()));
+ get_amount = Arith.add(entity.getAmount(), entity.getProfit());
+ }
+
+ if (get_amount > 0) {
+ Wallet wallet = this.walletService.saveWalletByPartyId(entity.getPartyId().toString());
+ double amount_before = wallet.getMoney().doubleValue();
+ this.walletService.update(wallet.getUserId().toString(), get_amount);
+ /**
+ * 保存资金日志
+ */
+ MoneyLog moneylog = new MoneyLog();
+ moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
+ moneylog.setAmountBefore(BigDecimal.valueOf(amount_before));
+ moneylog.setAmount(BigDecimal.valueOf(Arith.add(0, get_amount)));
+ moneylog.setAmountAfter(BigDecimal.valueOf(Arith.add(wallet.getMoney().doubleValue(), get_amount)));
+ moneylog.setLog("赎回理财产品,订单号[" + entity.getOrderNo() + "]");
+ moneylog.setUserId(entity.getPartyId().toString());
+ moneylog.setWalletType(Constants.WALLET);
+ moneylog.setContentType(WalletConstants.MONEYLOG_CONTENT_FINANCE_BACK);
+
+ moneyLogService.save(moneylog);
+
+ }
+
+ this.update(entity);
+
+ this.userDataService.saveSellFinance(entity);
+
+ }
+
+ /**
+ * 等级奖励
+ *
+ * @param partyId
+ * @param profit
+ * @return 返回奖励
+ */
+ public double levelProfit(String partyId, double profit, String finance_level_profit) {
+ // 5,0.5,3,0.3,2,0.2
+ double levelProfitMoney = 0d;
+ if (StringUtils.isEmptyString(finance_level_profit)) {
+ return levelProfitMoney;
+ }
+ List<UserRecom> listRecoms = this.userRecomService.findRecoms(partyId);
+ int recomsNum = listRecoms.size();
+ String[] finance_level_profit_array = finance_level_profit.split(",");
+
+ for (int i = 0; i < finance_level_profit_array.length; i++) {
+ double levelNeed = Double.valueOf(finance_level_profit_array[i]);
+
+ if (recomsNum >= levelNeed) {// 等级满足要求
+ double pipAmount = Double.valueOf(finance_level_profit_array[i + 1]);
+ levelProfitMoney = Arith.mul(profit, pipAmount);
+ break;
+ }
+ i++;
+ }
+ return levelProfitMoney;
+ }
+
+ public FinanceOrder findById(String id) {
+ return getById(id);
+ }
+
+ public void update(FinanceOrder entity) {
+ updateById(entity);
+ }
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/FinanceServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/FinanceServiceImpl.java
new file mode 100644
index 0000000..3811f6b
--- /dev/null
+++ b/trading-order-service/src/main/java/com/yami/trading/service/finance/service/impl/FinanceServiceImpl.java
@@ -0,0 +1,123 @@
+package com.yami.trading.service.finance.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yami.trading.bean.finance.Finance;
+import com.yami.trading.dao.finance.FinanceMapper;
+import com.yami.trading.service.finance.service.FinanceRedisKeys;
+import com.yami.trading.service.finance.service.FinanceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Service
+@Transactional
+public class FinanceServiceImpl extends ServiceImpl<FinanceMapper, Finance> implements FinanceService {
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ public void save(Finance entity, String login_safeword, String operaterUsername) {
+
+
+ //todo
+// User sec = this.secUserService.findByUserName(operaterUsername);
+// String sysSafeword = sec.getSafePassword();
+// String safeword_md5 = passwordEncoder.encode(login_safeword);
+// if (!safeword_md5.equals(sysSafeword)) {
+// throw new BusinessException("资金密码错误");
+// }
+ this.save(entity);
+// redisHandler.setSync(FinanceRedisKeys.FINANCE_ID + entity.getId().toString(), entity);
+ redisTemplate.opsForValue().set(FinanceRedisKeys.FINANCE_ID + entity.getUuid(), entity);
+
+ Map<String, Finance> cacheMap = (Map<String, Finance>) redisTemplate.opsForValue().get(FinanceRedisKeys.FINANCE_MAP);
+ if (cacheMap == null) {
+ cacheMap = new ConcurrentHashMap<String, Finance>();
+ }
+ cacheMap.put(entity.getUuid(), entity);
+// redisHandler.setSync(FinanceRedisKeys.FINANCE_MAP, cacheMap);
+ redisTemplate.opsForValue().set(FinanceRedisKeys.FINANCE_MAP, cacheMap);
+
+ }
+
+ public void update(Finance entity, String login_safeword, String operaterUsername) {
+
+ System.out.println("operaterUsername => " + operaterUsername);
+ //todo
+// User sec = this.secUserService.findByUserName(operaterUsername);
+
+// String sysSafeword = sec.getSafePassword();
+// String safeword_md5 = passwordEncoder.encode(login_safeword);
+// if (!safeword_md5.equals(sysSafeword)) {
+// throw new BusinessException("资金密码错误");
+// }
+
+ this.updateById(entity);
+// redisHandler.setSync(FinanceRedisKeys.FINANCE_ID + entity.getId().toString(), entity);
+ redisTemplate.opsForValue().set(FinanceRedisKeys.FINANCE_ID + entity.getUuid(), entity);
+
+ Map<String, Finance> cacheMap = (Map<String, Finance>) redisTemplate.opsForValue().get(FinanceRedisKeys.FINANCE_MAP);
+ if (cacheMap == null) {
+ cacheMap = new ConcurrentHashMap<String, Finance>();
+ }
+ cacheMap.put(entity.getUuid(), entity);
+ redisTemplate.opsForValue().set(FinanceRedisKeys.FINANCE_MAP, cacheMap);
+
+ }
+
+ public void delete(String id, String login_safeword, String operaterUsername) {
+
+ //todo
+// User sec = this.secUserService.findByUserName(operaterUsername);
+// String sysSafeword = sec.getSafePassword();
+// String safeword_md5 = passwordEncoder.encode(login_safeword);
+// if (!safeword_md5.equals(sysSafeword)) {
+// throw new BusinessException("资金密码错误");
+// }
+
+
+ Finance entity = findById(id);
+ this.removeById(entity);
+// redisHandler.remove(FinanceRedisKeys.FINANCE_ID + entity.getUuid().toString());
+ redisTemplate.delete(FinanceRedisKeys.FINANCE_ID + entity.getUuid());
+
+ Map<String, Finance> cacheMap = (Map<String, Finance>) redisTemplate.opsForValue().get(FinanceRedisKeys.FINANCE_MAP);
+ if (cacheMap != null && !cacheMap.isEmpty()) {
+ cacheMap.remove(entity.getUuid());
+ redisTemplate.opsForValue().set(FinanceRedisKeys.FINANCE_MAP, cacheMap);
+ }
+
+
+ }
+
+ public Finance findById(String id) {
+ return (Finance) redisTemplate.opsForValue().get(FinanceRedisKeys.FINANCE_ID + id);
+ }
+
+ public List<Finance> findAll() {
+ Map<String, Finance> cacheMap = (Map<String, Finance>) redisTemplate.opsForValue().get(FinanceRedisKeys.FINANCE_MAP);
+ if (cacheMap != null && !cacheMap.isEmpty()) {
+ return new ArrayList<>(cacheMap.values());
+ }
+ return new ArrayList<>();
+ }
+
+ public List<Finance> findAllState_1() {
+ LambdaQueryWrapper<Finance> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(Finance::getState, 1);
+ queryWrapper.orderByAsc(Finance::getInvestmentMin);
+ return list(queryWrapper);
+ }
+
+ @Override
+ public List<Finance> selectAllNoCache() {
+ return list();
+ }
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderProfitServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderProfitServiceImpl.java
index eefdfb9..365bd41 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderProfitServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderProfitServiceImpl.java
@@ -273,19 +273,19 @@
String miner_buy_symbol = sysparaService.find("miner_buy_symbol").getSvalue();
if (StringUtils.isNotEmpty(miner_buy_symbol)) {
if (miner_buy_symbol.equals(miner_profit_symbol)) {
- day_profit = Arith.mul(day_profit, realtime.getClose());
+ day_profit = Arith.mul(day_profit, realtime.getClose().doubleValue());
} else {
List<Realtime> realtime_list = this.dataService.realtime(miner_buy_symbol);
Realtime realtimeBuySymbol = null;
if (realtime_list.size() > 0) {
realtimeBuySymbol = realtime_list.get(0);
}
- day_profit = Arith.mul(day_profit, realtimeBuySymbol.getClose());
+ day_profit = Arith.mul(day_profit, realtimeBuySymbol.getClose().doubleValue());
}
}
// 非USDT币种收益
if (StringUtils.isNotEmpty(miner_profit_symbol)) {
- double getSymbolVolume = Arith.div(day_profit, realtime.getClose());
+ double getSymbolVolume = Arith.div(day_profit, realtime.getClose().doubleValue());
WalletExtend walletExtend = walletService.saveExtendByPara(order.getPartyId(), miner_profit_symbol);
double amountBefore = walletExtend.getAmount();
@@ -336,19 +336,19 @@
String miner_buy_symbol = sysparaService.find("miner_buy_symbol").getSvalue();
if (StringUtils.isNotEmpty(miner_buy_symbol)) {
if (miner_buy_symbol.equals(miner_profit_symbol)) {
- day_profit = Arith.mul(day_profit, realtime.getClose());
+ day_profit = Arith.mul(day_profit, realtime.getClose().doubleValue());
} else {
List<Realtime> realtime_list = this.dataService.realtime(miner_buy_symbol);
Realtime realtimeBuySymbol = null;
if (realtime_list.size() > 0) {
realtimeBuySymbol = realtime_list.get(0);
}
- day_profit = Arith.mul(day_profit, realtimeBuySymbol.getClose());
+ day_profit = Arith.mul(day_profit, realtimeBuySymbol.getClose().doubleValue());
}
}
// 非Usdt币种收益
if (StringUtils.isNotEmpty(miner_profit_symbol)) {
- double get_symbol_volume = Arith.div(day_profit, realtime.getClose());
+ double get_symbol_volume = Arith.div(day_profit, realtime.getClose().doubleValue());
WalletExtend walletExtend = walletService.saveExtendByPara(order.getPartyId(), miner_profit_symbol);
double amountBefore = walletExtend.getAmount();
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderServiceImpl.java
index be05886..5f600ce 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerOrderServiceImpl.java
@@ -167,7 +167,7 @@
if (null == realtimes || realtimes.size() <= 0) {
throw new BusinessException("行情获取异常,稍后再试");
}
- close = realtimes.get(0).getClose();
+ close = realtimes.get(0).getClose().doubleValue();
saveMinerBuyOtherCoin(entity, buyCurrency);
}
@@ -330,7 +330,7 @@
if (CollectionUtils.isEmpty(realtimes) || null == realtimes.get(0)) {
throw new BusinessException("系统错误,请稍后重试 saveCreate");
}
- close = realtimes.get(0).getClose();
+ close = realtimes.get(0).getClose().doubleValue();
saveMinerBuyOtherCoin(entity, minerBuySymbol);
} else {
@@ -678,7 +678,7 @@
if (null == realtimes || realtimes.size() <= 0) {
throw new BusinessException("行情获取异常,稍后再试");
}
- close = realtimes.get(0).getClose();
+ close = realtimes.get(0).getClose().doubleValue();
saveMinerCloseOtherCoin(entity, buyCurrency);
}
@@ -742,7 +742,7 @@
if (CollectionUtils.isEmpty(realtimes) || null == realtimes.get(0)) {
throw new BusinessException("系统错误,请稍后重试 saveClose");
}
- close = realtimes.get(0).getClose();
+ close = realtimes.get(0).getClose().doubleValue();
saveMinerCloseOtherCoin(entity, minerBuySymbol);
} else if (entity.getAmount() != 0) {// 体验矿机,购买价为0
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java
index 5ccb055..55e051d 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/miner/service/impl/MinerServiceImpl.java
@@ -145,7 +145,7 @@
} else {
throw new BusinessException("行情获取异常,稍后再试");
}
- symbol_profit = Arith.mul(symbol_profit, realtime.getClose());
+ symbol_profit = Arith.mul(symbol_profit, realtime.getClose().doubleValue());
}
if (StringUtils.isNotEmpty(miner_profit_symbol) && !"usdt".equalsIgnoreCase(miner_profit_symbol)) {
@@ -156,7 +156,7 @@
} else {
throw new BusinessException("行情获取异常,稍后再试");
}
- symbol_profit = Arith.div(symbol_profit, realtime.getClose());
+ symbol_profit = Arith.div(symbol_profit, realtime.getClose().doubleValue());
result.put("symbol_profit", symbol_profit);
} else {
result.put("symbol_profit", symbol_profit);
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/user/UserDataService.java b/trading-order-service/src/main/java/com/yami/trading/service/user/UserDataService.java
index 6b0ef64..4d1785a 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/user/UserDataService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/user/UserDataService.java
@@ -4,7 +4,9 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.trading.bean.contract.domain.ContractOrder;
import com.yami.trading.bean.exchange.ExchangeApplyOrder;
+import com.yami.trading.bean.finance.FinanceOrder;
import com.yami.trading.bean.future.domain.FuturesOrder;
+import com.yami.trading.bean.miner.MinerOrder;
import com.yami.trading.bean.model.User;
import com.yami.trading.bean.model.UserData;
import com.yami.trading.bean.user.dto.ChildrenLever;
@@ -85,4 +87,29 @@
public List<Map<String, Object>> getChildrenLevelPagedForGalaxy(int pageNo, int pageSize, String partyId, Integer level);
List<Map<String, UserData>> findByPartyIds(List<String> children);
+
+ /**
+ * 赎回理财产品
+ */
+ public void saveSellFinance(FinanceOrder order);
+
+ /**
+ * 矿机买入
+ *
+ * @param order
+ */
+ public void saveMinerBuy(MinerOrder order);
+
+ /**
+ * 矿机赎回
+ */
+ public void saveMinerClose(MinerOrder order);
+
+ /**
+ * 矿机利息
+ *
+ * @param partyId 获利人
+ * @param profit 利息
+ */
+ public void saveMinerProfit(String partyId, double profit);
}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java
index 850f82d..cd9d7df 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/user/impl/UserDataServiceImpl.java
@@ -8,7 +8,9 @@
import com.yami.trading.bean.contract.domain.ContractOrder;
import com.yami.trading.bean.data.domain.Realtime;
import com.yami.trading.bean.exchange.ExchangeApplyOrder;
+import com.yami.trading.bean.finance.FinanceOrder;
import com.yami.trading.bean.future.domain.FuturesOrder;
+import com.yami.trading.bean.miner.MinerOrder;
import com.yami.trading.bean.model.User;
import com.yami.trading.bean.model.UserData;
import com.yami.trading.bean.model.UserDataSum;
@@ -806,4 +808,135 @@
// }
}
+ /**
+ * 理财产品平仓
+ */
+ @Override
+ public void saveSellFinance(FinanceOrder order) {
+ User user = this.userService.findUserByUserCode(order.getFinanceId());
+// SecUser user = this.userService.findUserByPartyId(order.getPartyId());
+// user.getRoles();
+ boolean guest = false;
+
+// for (Role role : user.getRoles()) {
+// if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) {
+// guest = true;
+// }
+// }
+ if (guest) {
+ return;
+ }
+
+ User party = userService.cacheUserBy(order.getPartyId().toString());
+ UserData userData = new UserData();
+
+ userData.setRolename(party.getRoleName());
+ userData.setCreateTime(new Date());
+ userData.setUserId(order.getPartyId().toString());
+ userData.setFinanceAmount(order.getAmount());
+ userData.setFinanceIncome(order.getProfit());
+ save(userData);
+
+// UserRecom userRecom = this.userRecomService.findByPartyId(order.getPartyId());
+// if (userRecom == null) {
+// return;
+// }
+// List<UserRecom> parents = this.userRecomService.getParents(userRecom.getPartyId());
+//
+// for (int i = 0; i < parents.size(); i++) {
+// Party party_parent = partyService.cachePartyBy(parents.get(i).getReco_id());
+//
+// if (Constants.SECURITY_ROLE_AGENT.equals(party_parent.getRolename())) {
+// UserData userData_reco = new UserData();
+// userData_reco.setRolename(party_parent.getRolename());
+// userData_reco.setCreateTime(new Date());
+// userData_reco.setPartyId(parents.get(i).getReco_id());
+// userData_reco.setFinance_amount(order.getAmount());
+// userData_reco.setFinance_income(order.getProfit());
+// save(userData_reco);
+// }
+// }
+ }
+
+ /**
+ * 矿机买入
+ */
+ @Override
+ public void saveMinerBuy(MinerOrder order) {
+
+ User user = this.userService.cacheUserBy(order.getPartyId().toString());
+// user.getRoles();
+ boolean guest = false;
+// for (Role role : user.getRoles()) {
+// if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) {
+// guest = true;
+// }
+// }
+ if (guest) {
+ return;
+ }
+
+ UserData userData = new UserData();
+ userData.setRolename(user.getRoleName());
+ userData.setCreateTime(new Date());
+ userData.setUserId(order.getPartyId().toString());
+ userData.setMinerAmount(order.getAmount());
+ save(userData);
+ }
+
+ /**
+ * 矿机赎回
+ */
+ @Override
+ public void saveMinerClose(MinerOrder order) {
+ User user = this.userService.cacheUserBy(order.getPartyId().toString());
+// user.getRoles();
+ boolean guest = false;
+// for (Role role : user.getRoles()) {
+// if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) {
+// guest = true;
+// }
+// }
+ if (guest) {
+ return;
+ }
+
+// Party party = partyService.cachePartyBy(order.getPartyId(), false);
+ UserData userData = new UserData();
+ userData.setRolename(user.getRoleName());
+ userData.setCreateTime(new Date());
+ userData.setUserId(order.getPartyId().toString());
+ userData.setMinerAmount(Arith.sub(0, order.getAmount()));
+ save(userData);
+ }
+
+ /**
+ * 矿机利息
+ *
+ * @param partyId 获利人
+ * @param profit 利息
+ */
+ @Override
+ public void saveMinerProfit(String partyId, double profit) {
+ User user = this.userService.cacheUserBy(partyId);
+// user.getRoles();
+ boolean guest = false;
+// for (Role role : user.getRoles()) {
+// if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) {
+// guest = true;
+// }
+// }
+ if (guest) {
+ return;
+ }
+
+// Party party = partyService.cachePartyBy(partyId, true);
+ UserData userData = new UserData();
+ userData.setRolename(user.getRoleName());
+ userData.setCreateTime(new Date());
+ userData.setUserId(partyId);
+ userData.setMinerIncome(profit);
+ save(userData);
+ }
+
}
diff --git a/trading-order-service/src/main/resources/mapper/finance/FinanceMapper.xml b/trading-order-service/src/main/resources/mapper/finance/FinanceMapper.xml
new file mode 100644
index 0000000..1391774
--- /dev/null
+++ b/trading-order-service/src/main/resources/mapper/finance/FinanceMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yami.trading.dao.finance.FinanceMapper">
+
+ <select id="pagedQuery" resultType="java.util.HashMap">
+ select finance.uuid id,finance.name name,finance.name_en name_en,finance.name_cn name_cn,
+ finance.name_kn name_kn,finance.name_jn name_jn,finance.img img,finance.cycle cycle,
+ finance.daily_rate daily_rate ,finance.daily_rate_max daily_rate_max ,finance.today_rate today_rate ,finance.state state,
+ finance.default_ratio default_ratio ,finance.investment_min investment_min,finance.investment_max investment_max
+ from t_finance finance where 1=1
+ <if test="name_para!=null and name_para!=''">
+ and finance.name like CONCAT('%', #{name_para}, '%')
+ </if>
+ </select>
+
+ <select id="findAll" resultType="java.util.HashMap">
+ FROM Finance
+ </select>
+
+</mapper>
diff --git a/trading-order-service/src/main/resources/mapper/finance/FinanceOrderMapper.xml b/trading-order-service/src/main/resources/mapper/finance/FinanceOrderMapper.xml
new file mode 100644
index 0000000..56d10fd
--- /dev/null
+++ b/trading-order-service/src/main/resources/mapper/finance/FinanceOrderMapper.xml
@@ -0,0 +1,100 @@
+<?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.yami.trading.dao.finance.FinanceOrderMapper">
+<!-- FROM FinanceOrder WHERE 1=1-->
+<!-- AND partyId=:partyId-->
+<!-- AND (state =:state_2 OR state =:state_0-->
+<!-- -- AND state=:state-->
+<!-- -- AND state=:state-->
+<!-- order by create_time desc-->
+
+ <select id="pagedQuery" resultType="java.util.HashMap">
+ select * from t_finance_order where 1=1
+ <if test="partyId!=null and partyId!=''">
+ and party_id=#{partyId}
+ </if>
+
+ <if test="state!=null and state==2">
+ AND t_finance_order.state in('0','2')
+ </if>
+
+ <if test="state!=null and state==1">
+ AND t_finance_order.state=#{state}
+ </if>
+
+ order by create_time desc
+ </select>
+
+ <select id="pagedQueryByDate" resultType="java.util.HashMap">
+ select * from t_finance_order where 1=1
+ <if test="date!=null and date!=''">
+ and create_time=#{date}
+ </if>
+
+ order by create_time desc
+ </select>
+
+ <select id="sumVolumeByBuyCurrency" resultType="java.lang.Double">
+ SELECT IFNULL(sum(volume),0) FROM t_finance_order
+ WHERE 1=1
+ <if test="partyId!=null and partyId!=''">
+ and party_id=#{partyId}
+ </if>
+ <if test="buyCurrency!=null and buyCurrency!=''">
+ and buy_currency=#{buyCurrency}
+ </if>
+ </select>
+
+
+ <select id="pagedQuery1" resultType="java.util.HashMap">
+ SELECT financeOrder.uuid id,financeOrder.order_no order_no ,financeOrder.finance_id financeId ,
+ financeOrder.amount amount,financeOrder.create_time create_time,
+ financeOrder.close_time close_time,financeOrder.profit profit,
+ financeOrder.state state,
+ party.user_name username,party.user_code usercode,party.role_name rolename,
+ finance.name,finance.name_en,
+ finance.name_kn,finance.name_jn
+ FROM t_finance_order financeOrder
+ LEFT JOIN tz_user party ON financeOrder.party_id = party.user_id
+ LEFT JOIN t_finance finance ON finance.uuid = financeOrder.finance_id
+ WHERE 1 = 1
+ <if test="name_para!=null and name_para!=''">
+ AND (party.user_name like CONCAT('%', #{name_para}, '%') OR party.user_code like CONCAT('%', #{name_para}, '%') )
+ </if>
+
+ <if test="finance_para!=null and finance_para!=''">
+ and (finance.name=#{finance_para} or finance.name_en =#{finance_para} or finance.name_cn =#{finance_para})
+ </if>
+
+ <if test="orderNo!=null and orderNo!=''">
+ and (finance.order_no=#{orderNo})
+ </if>
+
+ <if test="rolename_para!=null and rolename_para!=''">
+ and party.role_name=#{rolename_para}
+ </if>
+
+ <if test="children != null and children.size() >0">
+ AND financeOrder.party_id in
+ <foreach collection="children" item="item" index="index" open="(" close=")" separator=",">
+ #{item}
+ </foreach>
+ </if>
+
+ <if test="status_para!=null and status_para!=''">
+ and financeOrder.state=#{status_para}
+ </if>
+
+ <if test="createTime !=null and createTime!=''">
+ and financeOrder.create_time <![CDATA[ >= ]]> #{createTime}
+ </if>
+
+ <if test="closeTime !=null and closeTime!=''">
+ and financeOrder.close_time <![CDATA[ >= ]]> #{closeTime}
+ </if>
+
+ order by financeOrder.create_time desc
+ </select>
+
+
+</mapper>
--
Gitblit v1.9.3