package cn.jeesoft.mvc.services;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.jeesoft.core.exception.DbException;
import cn.jeesoft.mvc.bean.SysTrade;
import cn.jeesoft.mvc.bean.Users;
import cn.jeesoft.mvc.helper.GenerateSN;
import cn.jeesoft.mvc.model.TradeState;
@Service("sysTradeService")
public class SysTradeService extends BaseService<SysTrade> {
@Autowired
private TradeBalanceService tradeBalanceService;
@Autowired
private ProfitService profitService;
/**
* 完成订单
* @param bean 必须包含[fromId]、[sn]、[money]、[feesMoney]
* @return 大于0表示成功
*/
public int finish(SysTrade bean) {
// 获取123级代理\邀请人
Users oneUsers = findInviteUsers(bean.getFromId());
Users twoUsers = null;
// Users threeUsers = null;
if (oneUsers != null) {
twoUsers = findInviteUsers(oneUsers.getId());
}
// if (twoUsers != null) {
// threeUsers = findInviteUsers(twoUsers.getId());
// }
// 计算123级代理收益
countProfit(bean, oneUsers, twoUsers);
System.out.println(oneUsers);
System.out.println(twoUsers);
System.out.println(bean);
// 更新订单
int updateSys = super.update(bean);
if (updateSys > 0 && bean.getState()==TradeState.SUCCESS) {
if (oneUsers != null) {
// 123级代理收益
int updateOne = tradeBalanceService.profit(oneUsers.getId(), bean.getOneProfitMoney(), bean.getSn());
if (updateOne <= 0) {
throw new DbException("插入记录失败");
}
if (twoUsers != null) {
int updateTwo = tradeBalanceService.profit(twoUsers.getId(), bean.getTwoProfitMoney(), bean.getSn());
if (updateTwo <= 0) {
throw new DbException("插入记录失败");
}
}
}
}
return updateSys;
}
/**
* 根据交易类型,计算123级代理收益
*/
private void countProfit(SysTrade sys, Users oneUsers, Users twoUsers) {
// 订单不为空、完成的订单、订单号金额参数正常
if (sys == null || sys.getState()!=TradeState.SUCCESS
|| sys.getSn()==null || sys.getMoney()==null) {
return;
}
sys.setType(GenerateSN.get(sys.getSn()));
System.out.println(sys.getSn()+", "+sys.getType());
int one = 0;
int two = 0;
switch (sys.getType()) {
case CALL:
if (oneUsers != null && oneUsers.getId() != null) {
one = profitService.getHelper().getOneCall(oneUsers.getId(), sys.getMoney());
}
if (twoUsers != null && twoUsers.getId() != null) {
two = profitService.getHelper().getTwoCall(twoUsers.getId(), sys.getMoney());
}
break;
case TRANSFER:
if (oneUsers != null && oneUsers.getId() != null) {
one = profitService.getHelper().getOneTransfer(oneUsers.getId(), sys.getMoney()+sys.getFeesMoney());
}
if (twoUsers != null && twoUsers.getId() != null) {
two = profitService.getHelper().getTwoTransfer(twoUsers.getId(), sys.getMoney()+sys.getFeesMoney());
}
break;
case SHOP:
// TODO
if (oneUsers != null && oneUsers.getId() != null) {
// one = profitService.getHelper().getOneCall(oneUsers.getId(), sys.getMoney());
}
if (twoUsers != null && twoUsers.getId() != null) {
// two = profitService.getHelper().getTwoCall(twoUsers.getId(), sys.getMoney());
}
break;
case P2P:
// TODO
if (oneUsers != null && oneUsers.getId() != null) {
// one = profitService.getHelper().getOneCall(oneUsers.getId(), sys.getMoney());
}
if (twoUsers != null && twoUsers.getId() != null) {
// two = profitService.getHelper().getTwoCall(twoUsers.getId(), sys.getMoney());
}
break;
case RECHARGE:
if (oneUsers != null && oneUsers.getId() != null) {
one = profitService.getHelper().getOneBalance(oneUsers.getId(), sys.getMoney()+sys.getFeesMoney());
}
if (twoUsers != null && twoUsers.getId() != null) {
two = profitService.getHelper().getTwoBalance(twoUsers.getId(), sys.getMoney()+sys.getFeesMoney());
}
break;
case WITHDRAW:
if (oneUsers != null && oneUsers.getId() != null) {
one = profitService.getHelper().getOneWithdraw(oneUsers.getId(), sys.getMoney()+sys.getFeesMoney());
}
if (twoUsers != null && twoUsers.getId() != null) {
two = profitService.getHelper().getTwoWithdraw(twoUsers.getId(), sys.getMoney()+sys.getFeesMoney());
}
break;
default:
break;
}
sys.setOneProfitMoney(one);
sys.setTwoProfitMoney(two);
}
/**
* 查找邀请人
* @return
*/
private Users findInviteUsers(Integer usersId) {
if (usersId == null || usersId <= 0) {
return null;
}
Users usersOne = new Users();
usersOne.setId(usersId);
return getDao().selectOne("users.selectInviteUsers", usersOne);
}
@Override
public String getTablename() {
return "sys_trade";
}
}