package cn.jeesoft.mvc.action.app;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import cn.jeesoft.core.interceptor.Before;
import cn.jeesoft.core.model.PagerModel;
import cn.jeesoft.core.utils.StringUtils;
import cn.jeesoft.interceptor.UsersLoginInterceptor;
import cn.jeesoft.mvc.Config;
import cn.jeesoft.mvc.bean.Balance;
import cn.jeesoft.mvc.bean.SysTrade;
import cn.jeesoft.mvc.bean.TradeTransfer;
import cn.jeesoft.mvc.bean.Users;
import cn.jeesoft.mvc.helper.GenerateSN;
import cn.jeesoft.mvc.model.ResultCode;
import cn.jeesoft.mvc.model.TradeState;
import cn.jeesoft.mvc.model.TradeType;
import cn.jeesoft.mvc.services.TradeBalanceService;
import cn.jeesoft.mvc.services.TradeTransferService;
import cn.jeesoft.mvc.services.UsersService;
/**
* 转账
* @author king
*/
@RestController("app.transfer")
@RequestMapping("app/transfer")
@Before(UsersLoginInterceptor.class)
public class TransferAction extends BaseTradeAction {
static class MPagerModel extends PagerModel<TradeTransfer, TradeTransfer> {
}
@Autowired
private TradeTransferService tradeTransferService;
@Autowired
private TradeBalanceService tradeBalanceService;
@Autowired
private UsersService usersService;
/**
* 创建订单
* 参数:money、toId
*/
@ResponseBody
@RequestMapping(value = "insert", method=RequestMethod.POST)
public String insert(HttpServletRequest request, TradeTransfer transfer) {
transfer.setFromId(getLoginUserId());
// 参数检查
if (transfer.getMoney()==null || transfer.getMoney()<Config.MIN_MONEY_TRANSFER) {
return toFailure(ResultCode.ERROE_PARAMETER, "金额不正确");
}
if (transfer.getToId()==null) {
String toPhone = request.getParameter("phone");
if (!StringUtils.isPhone(toPhone)) {
return toFailure(ResultCode.ERROE_PARAMETER, "收款方手机号不正确");
}
Users users = new Users();
users.setPhone(toPhone);
users = usersService.selectOne(users);
if (StringUtils.isEmpty(users)) {
return toFailure(ResultCode.ERROE_PARAMETER, "收款方手机号不存在");
} else if (users.getId() == getLoginUserId()) {
return toFailure(ResultCode.ERROE_PARAMETER, "不能转账给自己");
} else {
transfer.setToId(users.getId());
}
}
if (transfer.getToId()<=0) {
return toFailure(ResultCode.ERROE_PARAMETER, "收款方ID不正确");
}
Balance balance = tradeBalanceService.queryBalance(getLoginUserId());
// 可用余额不足以取现
if (balance == null) {
return toFailure(ResultCode.FAILURE, "余额查询失败,无法转账");
} else if (balance.getMoney() < transfer.getMoney()) {
// 可用余额不足以取现
return toFailure(ResultCode.FAILURE, "可用余额不足,无法转账");
}
// 系统记录
SysTrade sys = new SysTrade();
sys.setSn(GenerateSN.create(TradeType.TRANSFER));
sys.setType(TradeType.TRANSFER);
sys.setName("转账"+(transfer.getMoney()*0.01)+"元");
sys.setFeesMoney(profitService.getHelper().getTransfer(getLoginUserId(), transfer.getMoney()));
sys.setMoney(transfer.getMoney()-sys.getFeesMoney());
sys.setFromId(getLoginUserId());
sys.setToId(transfer.getToId());
sys.setState(TradeState.SUCCESS);
sys.setCreateTime(new Date());
sys.setIsInstant(true);
if (isEmptyBean(sys)) {
return toFailure(ResultCode.ERROE_PARAMETER, "参数不正确");
}
// 转账记录
int sysId = getService().insert(sys);
if (sysId <= 0) {
return toFailure(ResultCode.FAILURE, "创建订单失败");
} else {
sys.setId(sysId);
}
transfer.setMoney(sys.getMoney());
transfer.setSn(sys.getSn());
transfer.setCreateTime(sys.getCreateTime());
transfer.setIsArrival(true);
// 用户转账记录
int transferId = tradeTransferService.insert(transfer, sys.getFeesMoney());
if (transferId <= 0) {
getService().deleteById(sysId);
setTransactionRollback();
return toFailure(ResultCode.FAILURE, "创建订单失败");
} else {
transfer.setId(transferId);
// 订单完成(代理收益)
int finishId = getService().finish(sys);
if (finishId <= 0) {
return toFailure(ResultCode.FAILURE, "订单处理失败");
}
return toSuccess(sys);
}
}
@ResponseBody
@RequestMapping("selectList")
public String selectList(HttpServletRequest request, TradeTransfer query) {
query.setFromId(getLoginUserId());
return toSuccess(tradeTransferService.selectList(query));
}
}