Files
123123/comm/Finance/src/project/finance/internal/FinanceOrderServiceImpl.java
2026-02-19 03:37:37 +08:00

807 lines
27 KiB
Java
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package project.finance.internal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import kernel.exception.BusinessException;
import kernel.util.Arith;
import kernel.util.DateUtils;
import kernel.util.StringUtils;
import kernel.web.Page;
import kernel.web.PagedQueryDao;
import project.Constants;
import project.finance.Finance;
import project.finance.FinanceOrder;
import project.finance.FinanceOrderService;
import project.finance.FinanceService;
import project.log.MoneyLog;
import project.log.MoneyLogService;
import project.party.PartyService;
import project.party.model.Party;
import project.party.model.UserRecom;
import project.party.recom.UserRecomService;
import project.syspara.SysparaService;
import project.user.UserDataService;
import project.wallet.Wallet;
import project.wallet.WalletService;
public class FinanceOrderServiceImpl extends HibernateDaoSupport implements FinanceOrderService {
protected PagedQueryDao pagedDao;
protected WalletService walletService;
protected MoneyLogService moneyLogService;
protected FinanceService financeService;
protected PartyService partyService;
protected SysparaService sysparaService;
protected UserDataService userDataService;
protected UserRecomService userRecomService;
public void saveCreate(FinanceOrder entity) {
entity.setCreate_time(new Date());
// 加入周期
Finance finance = financeService.findById(entity.getFinanceId());
entity.setCycle(finance.getCycle());
// 买入金额需要在区间内
if (entity.getAmount() > finance.getInvestment_max() || entity.getAmount() < finance.getInvestment_min()) {
throw new BusinessException("金额错误");
}
// 查看余额
Wallet wallet = this.walletService.saveWalletByPartyId(entity.getPartyId());
double amount_before = wallet.getMoney();
if (wallet.getMoney() < entity.getAmount()) {
throw new BusinessException("余额不足");
}
// wallet.setMoney(Arith.sub(wallet.getMoney(), entity.getAmount()));
// this.walletService.update(wallet);
this.walletService.update(wallet.getPartyId().toString(), 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.setEarn_time(date);
// 截止时间=起息时间+周期+1
int days = (int) Arith.sub(entity.getCycle(), 1);
calendar.add(calendar.DATE, days);
date = calendar.getTime();
entity.setStop_time(date);
// 默认的赎回时间=截止时间+1
calendar.add(calendar.DATE, 1);
date = calendar.getTime();
entity.setClose_time(date);
// 保存资金日志
MoneyLog moneylog = new MoneyLog();
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
moneylog.setAmount_before(amount_before);
moneylog.setAmount(Arith.sub(0, entity.getAmount()));
moneylog.setAmount_after(Arith.sub(amount_before, entity.getAmount()));
moneylog.setLog("购买理财产品,订单号[" + entity.getOrder_no() + "]");
moneylog.setPartyId(entity.getPartyId());
moneylog.setWallettype(Constants.WALLET);
moneylog.setContent_type(Constants.MONEYLOG_FINANCE);
moneyLogService.save(moneylog);
this.getHibernateTemplate().save(entity);
// 购买理财产品后是否需要增加用户提现流水1不增加2要增加(coinspace,cqpro,amex,emex)
String finance_buy_add_userdata = this.sysparaService.find("finance_buy_add_userdata").getValue();
// 理财购买后给他增加提现流水限制金额
if ("2".equals(finance_buy_add_userdata)) {
Party party = this.partyService.cachePartyBy(entity.getPartyId(), false);
party.setWithdraw_limit_amount(Arith.add(party.getWithdraw_limit_amount(), entity.getAmount()));
partyService.update(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) {
Wallet wallet = this.walletService.saveWalletByPartyId(entity.getPartyId());
double amount_before = wallet.getMoney();
// wallet.setMoney(Arith.add(wallet.getMoney(), get_amount));
// this.walletService.update(wallet);
this.walletService.update(wallet.getPartyId().toString(), get_amount);
/**
* 保存资金日志
*/
MoneyLog moneylog = new MoneyLog();
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
moneylog.setAmount_before(amount_before);
moneylog.setAmount(Arith.add(0, get_amount));
moneylog.setAmount_after(Arith.add(amount_before, get_amount));
moneylog.setLog("赎回理财产品,订单号[" + entity.getOrder_no() + "]");
moneylog.setPartyId(entity.getPartyId());
moneylog.setWallettype(Constants.WALLET);
moneylog.setContent_type(Constants.MONEYLOG_FINANCE);
moneylog.setCreateTime(systemTime != null ? systemTime : new Date());
moneyLogService.save(moneylog);
}
getHibernateTemplate().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) {
Wallet wallet = this.walletService.saveWalletByPartyId(entity.getPartyId());
double amount_before = wallet.getMoney();
// wallet.setMoney(Arith.add(wallet.getMoney(), get_amount));
// this.walletService.update(wallet);
this.walletService.update(wallet.getPartyId().toString(), get_amount);
/**
* 保存资金日志
*/
MoneyLog moneylog = new MoneyLog();
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
moneylog.setAmount_before(amount_before);
moneylog.setAmount(Arith.add(0, get_amount));
moneylog.setAmount_after(Arith.add(amount_before, get_amount));
moneylog.setLog("赎回理财产品,订单号[" + entity.getOrder_no() + "]");
moneylog.setPartyId(entity.getPartyId());
moneylog.setWallettype(Constants.WALLET);
moneylog.setContent_type(Constants.MONEYLOG_FINANCE);
moneylog.setCreateTime(new Date());
moneyLogService.save(moneylog);
}
getHibernateTemplate().update(entity);
this.userDataService.saveSellFinance(entity);
}
@Override
public FinanceOrder findByOrder_no(String order_no) {
List<FinanceOrder> list = (List<FinanceOrder>)getHibernateTemplate().find(" FROM FinanceOrder WHERE order_no = ?0",
new Object[] { order_no });
if (list.size() > 0)
return list.get(0);
return null;
}
public List<FinanceOrder> findByState(String partyId, String state) {
/**
* 如果是查询已赎回的,则将提前赎回和正常赎回的都查出来
*/
List<FinanceOrder> list;
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" });
}
if ("0".equals(state) || "1".equals(state)) {
list = (List<FinanceOrder>)getHibernateTemplate().find(" FROM FinanceOrder WHERE state = ?0 and partyId =?1",
new Object[] { state, partyId });
} else {
list = (List<FinanceOrder>)getHibernateTemplate().find(" FROM FinanceOrder WHERE partyId =?0", new Object[] { partyId });
}
if (list.size() > 0)
return list;
return null;
}
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) {
/**
* 如果是查询已赎回的,则将提前赎回和正常赎回的都查出来
*/
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() {
List<FinanceOrder> list = (List<FinanceOrder>)getHibernateTemplate().find(" FROM FinanceOrder WHERE state = ?0 ", new Object[] { "1" });
if (list.size() > 0) {
return list;
}
return null;
}
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.getClose_time(), DateUtils.DF_yyyyMMdd);
String order_earn = DateUtils.format(order.getEarn_time(), 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").getValue();
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.getId().equals(order.getFinanceId())) {
break;
}
}
/**
* 当日获取的收益
*/
double today_rate = Arith.mul(finance.getToday_rate(), 0.01);
double get_amount = Arith.mul(order.getAmount(), today_rate);
order.setProfit(Arith.add(order.getProfit(), get_amount));
this.getHibernateTemplate().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.getId().equals(order.getFinanceId())) {
break;
}
}
/**
* 当日获取的收益
*/
double today_rate = Arith.mul(finance.getToday_rate(), 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").getValue();
boolean finance_level_profit_open = StringUtils.isNotEmpty(finance_level_profit);
// 判断是否有理财推荐奖励如果有需要扣除30%给推荐人
String finance_bonus_parameters = "";
finance_bonus_parameters = this.sysparaService.find("finance_bonus_parameters").getValue();
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());
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;
}
}
Party party_parent = this.partyService.cachePartyBy(list_parents.get(i).getReco_id(), true);
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.getId().toString(), 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.getId().toString());
double amount_before_parent = wallet_parent.getMoney();
walletService.update(wallet_parent.getPartyId().toString(), parent_get_money);
/**
* 保存资金日志
*/
MoneyLog moneyLog = new MoneyLog();
moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
moneyLog.setAmount_before(amount_before_parent);
moneyLog.setAmount(parent_get_money);
moneyLog.setAmount_after(Arith.add(amount_before_parent, parent_get_money));
moneyLog.setLog("" + (i + 1) + "代下级用户,每日理财收益奖励金");
moneyLog.setPartyId(party_parent.getId().toString());
moneyLog.setWallettype(Constants.WALLET);
moneyLog.setContent_type(Constants.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());
double amount_before = wallet.getMoney();
// wallet.setMoney(Arith.add(wallet.getMoney(), get_amount));
this.walletService.update(wallet.getPartyId().toString(), get_amount);
// this.walletService.update(wallet);
/**
* 保存资金日志
*/
MoneyLog moneylog = new MoneyLog();
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
moneylog.setAmount_before(amount_before);
moneylog.setAmount(Arith.add(0, get_amount));
moneylog.setAmount_after(Arith.add(amount_before, get_amount));
moneylog.setLog("理财产品每日收益,订单号[" + order.getOrder_no() + "]");
moneylog.setPartyId(order.getPartyId());
moneylog.setWallettype(Constants.WALLET);
moneylog.setContent_type(Constants.MONEYLOG_CONTENT_FINANCE_PROFIT);
moneyLogService.save(moneylog);
order.setProfit(Arith.add(order.getProfit(), get_amount));
this.getHibernateTemplate().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.getClose_time(), DateUtils.DF_yyyyMMdd);
String order_earn = DateUtils.format(order.getEarn_time(), 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").getValue();
/**
* 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.getId().equals(order.getFinanceId())) {
break;
}
}
/**
* 当日获取的收益
*/
double today_rate = Arith.mul(finance.getToday_rate(), 0.01);
double get_amount = Arith.mul(order.getAmount(), today_rate);
order.setProfit(Arith.add(order.getProfit(), get_amount));
this.getHibernateTemplate().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.getId().equals(order.getFinanceId())) {
break;
}
}
/**
* 当日获取的收益
*/
double today_rate = Arith.mul(finance.getToday_rate(), 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").getValue();
boolean finance_level_profit_open = StringUtils.isNotEmpty(finance_level_profit);
// 判断是否有理财推荐奖励如果有需要扣除30%给推荐人
String finance_bonus_parameters = "";
finance_bonus_parameters = this.sysparaService.find("finance_bonus_parameters").getValue();
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());
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;
}
}
Party party_parent = this.partyService.cachePartyBy(list_parents.get(i).getReco_id(), true);
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.getId().toString(), 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.getId().toString());
double amount_before_parent = wallet_parent.getMoney();
walletService.update(wallet_parent.getPartyId().toString(), parent_get_money);
/**
* 保存资金日志
*/
MoneyLog moneyLog = new MoneyLog();
moneyLog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
moneyLog.setAmount_before(amount_before_parent);
moneyLog.setAmount(parent_get_money);
moneyLog.setAmount_after(Arith.add(amount_before_parent, parent_get_money));
moneyLog.setLog("" + (i + 1) + "代下级用户,每日理财收益奖励金");
moneyLog.setPartyId(party_parent.getId().toString());
moneyLog.setWallettype(Constants.WALLET);
moneyLog.setContent_type(Constants.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());
double amount_before = wallet.getMoney();
// wallet.setMoney(Arith.add(wallet.getMoney(), get_amount));
this.walletService.update(wallet.getPartyId().toString(), get_amount);
// this.walletService.update(wallet);
/**
* 保存资金日志
*/
MoneyLog moneylog = new MoneyLog();
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
moneylog.setAmount_before(amount_before);
moneylog.setAmount(Arith.add(0, get_amount));
moneylog.setAmount_after(Arith.add(amount_before, get_amount));
moneylog.setLog("理财产品每日收益,订单号[" + order.getOrder_no() + "]");
moneylog.setPartyId(order.getPartyId());
moneylog.setWallettype(Constants.WALLET);
moneylog.setContent_type(Constants.MONEYLOG_CONTENT_FINANCE_PROFIT);
moneylog.setCreateTime(systemTime);
moneyLogService.save(moneylog);
order.setProfit(Arith.add(order.getProfit(), get_amount));
this.getHibernateTemplate().update(order);
}
}
/**
* 每日下发收益,自动赎回调用,只返回本金
*/
public void saveClosePrincipal(FinanceOrder entity) {
double get_amount = Arith.add(entity.getAmount(), entity.getProfit_before());
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());
double amount_before = wallet.getMoney();
// wallet.setMoney(Arith.add(wallet.getMoney(), get_amount));
// this.walletService.update(wallet);
this.walletService.update(wallet.getPartyId().toString(), get_amount);
/**
* 保存资金日志
*/
MoneyLog moneylog = new MoneyLog();
moneylog.setCategory(Constants.MONEYLOG_CATEGORY_FINANCE);
moneylog.setAmount_before(amount_before);
moneylog.setAmount(Arith.add(0, get_amount));
moneylog.setAmount_after(Arith.add(amount_before, get_amount));
moneylog.setLog("赎回理财产品,订单号[" + entity.getOrder_no() + "]");
moneylog.setPartyId(entity.getPartyId());
moneylog.setWallettype(Constants.WALLET);
moneylog.setContent_type(Constants.MONEYLOG_FINANCE);
moneyLogService.save(moneylog);
}
getHibernateTemplate().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 (FinanceOrder) getHibernateTemplate().get(FinanceOrder.class, id);
}
public void update(FinanceOrder entity) {
getHibernateTemplate().update(entity);
}
public void setPagedDao(PagedQueryDao pagedDao) {
this.pagedDao = pagedDao;
}
public void setUserDataService(UserDataService userDataService) {
this.userDataService = userDataService;
}
public void setPartyService(PartyService partyService) {
this.partyService = partyService;
}
public void setSysparaService(SysparaService sysparaService) {
this.sysparaService = sysparaService;
}
public void setUserRecomService(UserRecomService userRecomService) {
this.userRecomService = userRecomService;
}
}