package com.sp2p.action.front;
import java.io.IOException;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.hehenian.biz.common.account.dataobject.AccountUserDo;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.shove.Convert;
import com.shove.data.DataException;
import com.shove.util.SqlInfusion;
import com.shove.web.util.JSONUtils;
import com.sp2p.constants.IConstants;
import com.sp2p.service.AssignmentDebtService;
import com.sp2p.service.AuctionDebtService;
import com.sp2p.service.MyHomeService;
import com.sp2p.service.SelectedService;
import com.sp2p.service.UserService;
import com.sp2p.util.DateUtil;
/**
* 债权转让
*/
public class FrontDebtAction extends BaseFrontAction {
public static Log log = LogFactory.getLog(FrontDebtAction.class);
private static final long serialVersionUID = 1L;
private AssignmentDebtService assignmentDebtService;
private AuctionDebtService auctionDebtService;
private MyHomeService myHomeService;
private UserService userService;
@SuppressWarnings("unused")
private SelectedService selectedService;
public void setMyHomeService(MyHomeService myHomeService) {
this.myHomeService = myHomeService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
/**
* 前台 债权转让 获取已发布债权
*/
@SuppressWarnings("unchecked")
public String queryFrontAllDebt() {
pageBean.setPageNum(request("curPage"));
try {
assignmentDebtService.queryAllDebt(null, -1, -1, -1, -1, -1, "2,3", pageBean);
List<Map<String, Object>> list = pageBean.getPage();
Date nowDate = new Date();
if (list != null)
for (Map<String, Object> map : list) {
Date date = (Date) map.get("actionTime");
Date publishTime = (Date) map.get("publishTime");
int auctionDays = (Integer) map.get("auctionDays");
long times = DateUtil.getMsecondsDiff(DateUtil.dateAddDay(publishTime, (int) auctionDays));
map.put("remainTimes", times);
int status = Integer.parseInt(map.get("debtStatus") + "");
if (status != 2) {
map.put("remainDays", "--");
continue;
}
String remainDays = DateUtil.remainDateToString(nowDate, date);
map.put("remainDays", remainDays);
}
} catch (Exception e) {
log.error(e);
e.printStackTrace();
}
// 将参数设置到paramMap
setRequestToParamMap();
return SUCCESS;
}
/**
* 正在转让的债权
*/
@SuppressWarnings("unchecked")
public String queryPublishDebt() {
pageBean.setPageNum(SqlInfusion.FilteSqlInfusion(request("curPage")));
try {
assignmentDebtService.queryAllDebt(null, -1, -1, -1, -1, -1, null, null);
List<Map<String, Object>> list = pageBean.getPage();
if (list != null)
for (Map<String, Object> map : list) {
String a = map.get("repayPeriod").toString();
String[] c = a.split("/");
map.put("num", Integer.parseInt(c[1]) - Integer.parseInt(c[0]));
int pre = 100 - ((Integer.parseInt(c[0]) - 1) * 100) / Integer.parseInt(c[1]);
map.put("repayPeriod", pre);
}
} catch (Exception e) {
log.error(e);
e.printStackTrace();
}
// 将参数设置到paramMap
setRequestToParamMap();
return SUCCESS;
}
/**
* 查询前台的债权转让
*
* @return
*/
public String queryFrontSuccessDebt() {
pageBean.setPageNum(SqlInfusion.FilteSqlInfusion(request("curPage")));
long debtSum = Convert.strToLong(request("debtSum"), -1);
long auctionBasePrice = Convert.strToLong(request("auctionBasePrice"), -1);
long auctionMode = Convert.strToLong(request("auctionMode"), -1);
long isLate = Convert.strToLong(request("isLate"), -1);
long publishDays = Convert.strToLong(request("publishDays"), -1);
String borrowTitle = SqlInfusion.FilteSqlInfusion(request("borrowTitle"));
try {
assignmentDebtService.queryAllDebt(borrowTitle, debtSum, auctionBasePrice, auctionMode, isLate, publishDays, "3", pageBean);
} catch (SQLException e) {
log.error(e);
e.printStackTrace();
}
// 将参数设置到paramMap
setRequestToParamMap();
return SUCCESS;
}
/**
* 查询债权债权详情
*
* @return
*/
public String queryDebtDetail() {
long id = Convert.strToLong(request("id"), -1);
try {
Map<String, String> map = assignmentDebtService.getAssignmentDebt(id);
if (map != null) {
long viewCount = Convert.strToLong(map.get("viewCount"), 0);
viewCount++;
paramMap.putAll(map);
long borrowId = Convert.strToLong(map.get("borrowId"), -1);
long borrowerId = auctionDebtService.queryBorrowerByBorrowId(borrowId);
paramMap.put("borrowerId", borrowerId + "");
paramMap.put("viewCount", viewCount + "");
map = new HashMap<String, String>();
map.put("viewCount", viewCount + "");
assignmentDebtService.updateAssignmentDebt(id, -1, map);
String publishTime = paramMap.get("publishTime");
long auctionDays = Convert.strToLong(paramMap.get("auctionDays"), 0);
String remainDays = DateUtil.remainDateToString(new Date(), DateUtil.dateAddDay(DateUtil.strToDate(publishTime), (int) auctionDays));
paramMap.put("remainDays", remainDays);
long debtId = Convert.strToLong(paramMap.get("id"), -1);
paramMap.put("debtId", paramMap.get("id"));
paramMap.putAll(auctionDebtService.queryAuctionMaxPriceAndCount(debtId));
long alienatorId = Convert.strToLong(paramMap.get("alienatorId"), -1);
Map<String, String> userMap = auctionDebtService.getUserAddressById(alienatorId);
request().setAttribute("userMap", userMap);
List<Map<String, Object>> investList = auctionDebtService.queryInvestByid(id);
request().setAttribute("investList", investList);
Map<String, String> borrowDetailMap = auctionDebtService.queryBorrowDetailById(id);
request().setAttribute("borrowDetailMap", borrowDetailMap);
}
} catch (SQLException e) {
log.error(e);
e.printStackTrace();
} catch (DataException e) {
log.error(e);
e.printStackTrace();
}
return SUCCESS;
}
/**
* 添加留言
*/
public String addDebtMSG() throws IOException, SQLException, DataException {
AccountUserDo user = (AccountUserDo) session().getAttribute("user");
JSONObject obj = new JSONObject();
String code = SqlInfusion.FilteSqlInfusion((String) session().getAttribute("msg_checkCode"));
String _code = SqlInfusion.FilteSqlInfusion(paramMap.get("code") == null ? "" : paramMap.get("code"));
if (!code.equals(_code)) {
this.addFieldError("paramMap['code']", IConstants.CODE_FAULS);
return "input";
}
String id = paramMap.get("id") == null ? "" : paramMap.get("id");
long idLong = Convert.strToLong(id, -1);
String msgContent = paramMap.get("msg") == null ? "" : paramMap.get("msg");
long returnId = -1;
returnId = assignmentDebtService.addDebtMsg(idLong, user.getId(), msgContent);
if (returnId <= 0) {
obj.put("msg", IConstants.ACTION_FAILURE);
JSONUtils.printObject(obj);
return null;
} else {
// 添加成功返回值
obj.put("msg", "1");
JSONUtils.printObject(obj);
return null;
}
}
/**
* 留言初始化
*
*/
public String debtMSGInit() throws SQLException, DataException {
String id = SqlInfusion.FilteSqlInfusion(paramMap.get("id") == null ? "" : paramMap.get("id"));
long idLong = Convert.strToLong(id, -1);
String pageNum = SqlInfusion.FilteSqlInfusion(paramMap.get("curPage"));
if (StringUtils.isNotBlank(pageNum)) {
pageBean.setPageNum(pageNum);
}
pageBean.setPageSize(IConstants.PAGE_SIZE_6);
if (idLong == -1) {
return "404";
}
assignmentDebtService.queryDebtMSGBord(idLong, pageBean);
request().setAttribute("id", id);
return "success";
}
/**
* 竞拍初始化
*
* @return
*/
public String auctingDebtInit() {
long userId = this.getUserId();
try {
paramMap.put("debtId", request("debtId"));
Map<String, String> map = auctionDebtService.getUserById(userId);
if (map != null) {
paramMap.put("usableSum", map.get("usableSum"));
paramMap.put("totalSum", String.format("%.2f", Convert.strToDouble(map.get("freezeSum"), 0.0) + Convert.strToDouble(map.get("usableSum"), 0.0)));
}
Map<String, String> debtMap = assignmentDebtService.getAssignmentDebt(Convert.strToLong(request("debtId"), -1));
if (debtMap != null) {
paramMap.putAll(debtMap);
}
} catch (SQLException e) {
log.error(e);
e.printStackTrace();
} catch (DataException e) {
log.error(e);
e.printStackTrace();
}
return SUCCESS;
}
/**
* 债权购买
*/
public String addAuctingDebt() throws Exception {
long debtId = Convert.strToLong(paramMap.get("id"), -1);
long userId = this.getUserId();
if (userId <= 0) {
JSONUtils.printStr2("请先登录");
return null;
}
try {
double auctionPrice = Convert.strToDouble(paramMap.get("auctionPrice"), 0.0);
Map<String, String> debtMap = assignmentDebtService.getAssignmentDebt(debtId);
Map<String, String> userMap = auctionDebtService.getUserById(userId);
if (debtMap != null && userMap != null) {
if (debtMap.get("alienatorId").equals(userId + "")) {
JSONUtils.printStr2("不能购买自己转让的的债权"); // 不能投自己转让的的债权
return null;
}
long borrowId = Convert.strToLong(debtMap.get("borrowId"), -1);
Map<String, String> aucctionMap = auctionDebtService.getAuctionDebt(debtId, userId);
double oldAuctionPrice = 0.0;
if (aucctionMap != null) {
oldAuctionPrice = Convert.strToDouble(aucctionMap.get("auctionPrice"), 0.0);
}
double usableSum = Convert.strToDouble(userMap.get("usableSum"), 0.0);
if (usableSum < (auctionPrice - oldAuctionPrice)) {
JSONUtils.printStr2("可用余额不足"); // 可用余额不足
return null;
}
/* Map<String, String> investPWDMap = auctionDebtService.getDealPWD(userId, dealpass);
if (investPWDMap == null || investPWDMap.size() == 0) {
JSONUtils.printStr2("密码错误"); // 密码错误
return null;
}*/
long borrowerId = auctionDebtService.queryBorrowerByBorrowId(borrowId);
if (borrowerId == userId) {
JSONUtils.printStr2("借款者不能购买该债权"); // 借款者不能竞拍该债权
return null;
}
if (!"2".equals(debtMap.get("debtStatus"))) {
JSONUtils.printStr2("购买失败,非转让中的债权"); // 竞拍失败
return null;
}
String transAmt = Convert.strToStr(SqlInfusion.FilteSqlInfusion(paramMap.get("auctionPrice")), "0.00");
StringBuffer sb = new StringBuffer();
if (transAmt != null && transAmt.indexOf(".") == -1) {
transAmt = sb.append(transAmt).append(".00").toString();
} else {
transAmt = transAmt.substring(0, transAmt.indexOf(".") + 3);
}
String html= auctionDebtService.sendDebtHtml(debtId, auctionPrice, this.getUser().getUsrCustId());
sendHtml(html);
// Map<String, String> pro_map = auctionDebtService.procedure_Debts(debtId, userId, debtUsrCustId, auctionPrice, dealpass, this.getBasePath(), this.getUser()
// .getUsrCustId());
// if (Convert.strToInt(pro_map.get("ret"), -1) < 0) {
// JSONUtils.printStr2(pro_map.get("ret_desc"));
// return null;
// }
// JSONUtils.printStr2(pro_map.get("ret_desc"));
return null;
}
} catch (Exception e) {
log.error(e);
e.printStackTrace();
}
return null;
}
/**
* 查询竞拍记录
*
* @return
*/
public String queryAcutionRecordInfo() {
long id = Convert.strToLong(paramMap.get("id"), -1);
try {
List<Map<String, Object>> list = auctionDebtService.queryAuctionDebtByDebtId(id);
request().setAttribute("list", list);
} catch (SQLException e) {
log.error(e);
e.printStackTrace();
}
return SUCCESS;
}
public void setAssignmentDebtService(AssignmentDebtService assignmentDebtService) {
this.assignmentDebtService = assignmentDebtService;
}
public void setAuctionDebtService(AuctionDebtService auctionDebtService) {
this.auctionDebtService = auctionDebtService;
}
public void setSelectedService(SelectedService selectedService) {
this.selectedService = selectedService;
}
/**
* 合和年 前台 我要转让债权
*
* @return
*/
public String queryFrontCanDebt() {
pageBean.setPageNum(SqlInfusion.FilteSqlInfusion(request("curPage")));
pageBean.setPageSize(8);
try {
assignmentDebtService.queryAssignmentDebtable(pageBean, this.getUserId());
} catch (Exception e) {
log.error(e);
e.printStackTrace();
}
// 将参数设置到paramMap
setRequestToParamMap();
return SUCCESS;
}
/**
* 合和年 前台 即将发布债权
*
* @return
*/
public String queryFrontRedayDebt() {
pageBean.setPageNum(SqlInfusion.FilteSqlInfusion(request("curPage")));
try {
assignmentDebtService.queryAssigRedayDebt(pageBean);
} catch (Exception e) {
log.error(e);
e.printStackTrace();
}
return SUCCESS;
}
/**
* 合和年查询债权债权详情
*
* @return
*/
public String queryDebtDetailHHN() {
long id = Convert.strToLong(request("id"), -1);
// 兼容标准版处理
if (id == -1)
id = Convert.strToLong(paramMap.get("id"), -1);
request().setAttribute("debtId", id);
if (id < 0)
return SUCCESS;
try {
Map<String, String> map = assignmentDebtService.getAssignmentDebt(id);
AccountUserDo user = (AccountUserDo) session().getAttribute("user");
if (map != null) {
long viewCount = Convert.strToLong(map.get("viewCount"), 0);
viewCount++;
paramMap.putAll(map);
long borrowId = Convert.strToLong(map.get("borrowId"), -1);
long borrowerId = auctionDebtService.queryBorrowerByBorrowId(borrowId);
paramMap.put("borrowerId", borrowerId + "");
paramMap.put("viewCount", viewCount + "");
map = new HashMap<String, String>();
map.put("viewCount", viewCount + "");
assignmentDebtService.updateAssignmentDebt(id, -1, map);
String publishTime = paramMap.get("publishTime");
long auctionDays = Convert.strToLong(paramMap.get("auctionDays"), 0);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (null == publishTime || publishTime.equals("")) {
publishTime = df.format(new Date());
}
// String remainDays = DateUtil.remainDateToString(new Date(), DateUtil.dateAddDay(DateUtil.strToDate(publishTime), (int) auctionDays));
//paramMap.put("remainDays", remainDays);
long times = DateUtil.getMsecondsDiff(DateUtil.dateAddDay(DateUtil.strToDate(publishTime), (int) auctionDays));
request().setAttribute("times", times);
long debtId = Convert.strToLong(paramMap.get("id"), -1);
paramMap.put("debtId", paramMap.get("id"));
paramMap.putAll(auctionDebtService.queryAuctionMaxPriceAndCount(debtId));
request().setAttribute("nextDay", paramMap.get("nextDay").substring(0, 10));
double bal =Convert.strToDouble( paramMap.get("balance"), 0);//剩余本金
double interest =Convert.strToDouble( paramMap.get("interest"), 0);//剩余应收利息
double days =Convert.strToDouble( paramMap.get("dayss"), 0);//剩余期限(天)
double price =Convert.strToDouble( paramMap.get("auctionBasePrice"), 0);//转让价格
double earn = (bal+interest-price)*36000/(price*days);
paramMap.put("earn", new DecimalFormat("0.00").format(earn));
long alienatorId = Convert.strToLong(paramMap.get("alienatorId"), -1);
Map<String, String> userMap = auctionDebtService.getUserAddressById(alienatorId);
request().setAttribute("userMap", userMap);
Map<String, String> borrowMap = auctionDebtService.getBorrowDetailById(borrowId);
if(StringUtils.isBlank(borrowMap.get("detail"))){
borrowMap.put("detail", "无");
}
request().setAttribute("borrowMap", borrowMap);
long publisherId = Convert.strToLong(borrowMap.get("publisher"), -1);
Map<String, String> publisherMap = auctionDebtService.getUserAddressById(publisherId);
request().setAttribute("publisherMap", publisherMap);
Map<String, String> borrowerMap = auctionDebtService.getUserAddressById(borrowerId);
request().setAttribute("borrowerMap", borrowerMap);
Map<String, String> accmountStatisMap = myHomeService.queryAccountStatisInfo(user.getId());
request().setAttribute("accmountStatisMap", accmountStatisMap);
Map<String, String> investCountMap = auctionDebtService.queryInvestCountByid(user.getId());
request().setAttribute("investCountMap", investCountMap);
Map<String, String> personMap = userService.queryPersonById(user.getId());
request().setAttribute("personMap", personMap);
// 账户总额(投资总额+可用余额..)
String investCount = investCountMap.get("investCount");
String usableAmount = accmountStatisMap.get("usableAmount");
DecimalFormat decf = new DecimalFormat("0.00");
BigDecimal invest;
BigDecimal usable;
BigDecimal countMoney = new BigDecimal(0);
if (investCount != null && investCount.length() > 0) {
invest = new BigDecimal(investCount);
usable = new BigDecimal(usableAmount);
countMoney = usable.add(invest);
} else if (usableAmount != null && usableAmount.length() > 0) {
usable = new BigDecimal(usableAmount);
countMoney = usable;
}
request().setAttribute("countMoney", decf.format(countMoney));
}
} catch (Exception e) {
log.error(e);
e.printStackTrace();
}
return SUCCESS;
}
/**
* 合和年确认购买债权
*
* @return
*/
public String buyDebtDetailHHN() {
long id = Convert.strToLong(request("debtId"), -1);
request().setAttribute("debtId", id);
try {
Map<String, String> map = assignmentDebtService.getAssignmentDebt(id);
// Map<String, String> personMap = new HashMap<String, String>();
AccountUserDo user = (AccountUserDo) session().getAttribute("user");
if (map != null) {
long viewCount = Convert.strToLong(map.get("viewCount"), 0);
viewCount++;
paramMap.putAll(map);
long borrowId = Convert.strToLong(map.get("borrowId"), -1);
long borrowerId = auctionDebtService.queryBorrowerByBorrowId(borrowId);
paramMap.put("borrowerId", borrowerId + "");
paramMap.put("viewCount", viewCount + "");
map = new HashMap<String, String>();
map.put("viewCount", viewCount + "");
assignmentDebtService.updateAssignmentDebt(id, -1, map);
String publishTime = SqlInfusion.FilteSqlInfusion(paramMap.get("publishTime"));
long auctionDays = Convert.strToLong(paramMap.get("auctionDays"), 0);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (null == publishTime || publishTime.equals("")) {
publishTime = df.format(new Date());
}
String remainDays = DateUtil.remainDateToString(new Date(), DateUtil.dateAddDay(DateUtil.strToDate(publishTime), (int) auctionDays));
paramMap.put("remainDays", remainDays);
long debtId = Convert.strToLong(paramMap.get("id"), -1);
paramMap.put("debtId", paramMap.get("id"));
paramMap.putAll(auctionDebtService.queryAuctionMaxPriceAndCount(debtId));
// 借款人的信息
long alienatorId = Convert.strToLong(paramMap.get("alienatorId"), -1);
Map<String, String> userMap = auctionDebtService.getUserAddressById(alienatorId);
request().setAttribute("userMap", userMap);
Map<String, String> borrowMap = auctionDebtService.getBorrowDetailById(borrowId);
request().setAttribute("borrowMap", borrowMap);
// 发布人的信息
long publisherId = Convert.strToLong(borrowMap.get("publisher"), -1);
Map<String, String> publisherMap = auctionDebtService.getUserAddressById(publisherId);
request().setAttribute("publisherMap", publisherMap);
Map<String, String> borrowerMap = auctionDebtService.getUserAddressById(borrowerId);
request().setAttribute("borrowerMap", borrowerMap);
Map<String, String> accmountStatisMap = myHomeService.queryAccountStatisInfo(user.getId());
request().setAttribute("accmountStatisMap", accmountStatisMap);
Map<String, String> investCountMap = auctionDebtService.queryInvestCountByid(user.getId());
request().setAttribute("investCountMap", investCountMap);
Map<String, String> personMap = userService.queryPersonById(user.getId());
request().setAttribute("personMap", personMap);
// 账户总额(投资总额+可用余额..)
String investCount = investCountMap.get("investCount");
String usableAmount = accmountStatisMap.get("usableAmount");
DecimalFormat decf = new DecimalFormat("0.00");
BigDecimal invest;
BigDecimal usable;
BigDecimal countMoney = new BigDecimal(0);
if (investCount != null && investCount.length() > 0) {
invest = new BigDecimal(investCount);
usable = new BigDecimal(usableAmount);
countMoney = usable.add(invest);
} else if (usableAmount != null && usableAmount.length() > 0) {
usable = new BigDecimal(usableAmount);
countMoney = usable;
}
request().setAttribute("countMoney", decf.format(countMoney));
}
} catch (Exception e) {
log.error(e);
e.printStackTrace();
}
return SUCCESS;
}
}