/**
* @Project: hehenian-biz-service
* @Package com.hehenian.biz.component.report.impl
* @Title: ColorReportComponentImpl.java
* @Description: TODO
* @author: zhangyunhmf
* @date 2014年10月13日 上午11:23:52
* @Copyright: HEHENIAN Co.,Ltd. All rights reserved.
* @version V1.0
*/
package com.hehenian.biz.component.report.impl;
import java.math.BigDecimal;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.hehenian.biz.common.base.dataobject.PageDo;
import com.hehenian.biz.common.util.CalculateUtils;
import com.hehenian.biz.common.util.DateUtils;
import com.hehenian.biz.component.report.IColorReportComponent;
import com.hehenian.biz.dal.report.IColorReportDao;
/**
*
* @author: zhangyunhmf
* @date 2014年10月13日 上午11:23:52
*/
@Component("colorReportComponent")
public class ColorReportComponentImpl implements IColorReportComponent {
@Autowired
IColorReportDao colorReportDao;
/* (no-Javadoc)
* <p>Title: queryColorInvest</p>
* <p>Description: </p>
* @param parameterMap
* @param page
* @return
* @see com.hehenian.biz.component.report.IColorReportComponent#queryColorInvest(java.util.Map, com.hehenian.biz.common.base.dataobject.PageDo, java.lang.String)
*/
@Override
public PageDo queryColorInvest(Map<String, Object> parameterMap, PageDo page) {
parameterMap.put("page", page);
List resultList = colorReportDao.queryColorInvestorPage(parameterMap);
if(null == resultList || resultList.isEmpty()) return page;
//提取本页用户ID用来查询汇总的投资额
Map<String,Object> rowMap = wrapColorInvest(resultList);
List userIdList = (List)rowMap.get("userIdList");
String startDate = (String) parameterMap.get("investStartDate");
String endDate = (String) parameterMap.get("investEndDate");
//在库投资额查询日期
String inStockDate = (String) parameterMap.get("inStockDate");
//汇总投资 , hessian 不支持BigDecimal数据类型, 所以要转成double
List<Map<String,Object>> investAmountList = colorReportDao.queryInvestTotalAmount(userIdList, startDate, endDate );
if(null != investAmountList && !investAmountList.isEmpty()){
for(Map<String,Object> investMap :investAmountList){
Long investor = (Long)investMap.get("investor");
//BigDecimal recivedPrincipal = investMap.get("recivedPrincipal") == null? BigDecimal.ZERO :(BigDecimal)investMap.get("recivedPrincipal");
BigDecimal investAmount = investMap.get("investAmount") == null? BigDecimal.ZERO :(BigDecimal)investMap.get("investAmount");
BigDecimal hasInterest = investMap.get("hasInterest") == null? BigDecimal.ZERO :(BigDecimal)investMap.get("hasInterest");
//计算彩生活收益 *0.02/12
//double colorAmount = CalculateUtils.round(CalculateUtils.mul(recivedPrincipal.doubleValue(), 0.02/12),2);
Map<String,Object> userMap= (Map)rowMap.get(investor+"");
if(null != userMap){
//userMap.put("recivedPrincipal", recivedPrincipal.doubleValue()+"");
userMap.put("investAmount", investAmount.doubleValue()+"");
userMap.put("hasInterest", hasInterest.doubleValue()+"");
//userMap.put("colorAmount", colorAmount+"");
}
}
}
//在库投资额 hessian 不支持BigDecimal数据类型, 所以要转成double
List<Map<String,Object>> reffereeAmountList = colorReportDao.queryInStockInvestAmount(userIdList,inStockDate);
if(null != reffereeAmountList && !reffereeAmountList.isEmpty()){
for(Map<String,Object> investMap :reffereeAmountList){
Long investor = (Long)investMap.get("investor");
BigDecimal recivedPrincipal = investMap.get("recivedPrincipal") == null? BigDecimal.ZERO:(BigDecimal)investMap.get("recivedPrincipal");
//计算彩生活收益 *0.02/12
double colorAmount = CalculateUtils.round(CalculateUtils.mul(recivedPrincipal.doubleValue(), 0.02/12),2,BigDecimal.ROUND_DOWN);
//推荐人收益
double refAmount = CalculateUtils.round(CalculateUtils.mul(recivedPrincipal.doubleValue(), 0.005/12),2,BigDecimal.ROUND_DOWN);
Map<String,Object> userMap= (Map)rowMap.get(investor+"");
if(null != userMap){
userMap.put("recivedPrincipal", recivedPrincipal.doubleValue()+"");
userMap.put("colorAmount", colorAmount+"");
userMap.put("refAmount", refAmount+"");
}
}
}
rowMap.remove("userIdList");
resultList.clear();
resultList.addAll(rowMap.values());
page.setPage(resultList);
return page;
}
@Override public Map<String, Object> queryFKByDate(String date) {
return colorReportDao.queryFKByDate(date);
}
@Override public Map<String, Object> queryInvestByDate(String date) {
return colorReportDao.queryInvestByDate(date);
}
@Override public Map<String, Object> queryUserByDate(String date) {
return colorReportDao.queryUserByDate(date);
}
@Override public Map<String, Object> queryFK() {
return colorReportDao.queryFK();
}
@Override public Map<String, Object> queryInvest() {
return colorReportDao.queryInvest();
}
@Override public Map<String, Object> queryUser() {
return colorReportDao.queryUser();
}
private Map<String,Object> wrapColorInvest(List<Map<String,Object>> userList){
if(null == userList || userList.isEmpty()) return null;
Map<String,Object> rowMap = new HashMap<String,Object>();
List userIdList = new ArrayList();
for(Map<String,Object> row : userList){
long userId = (Long)row.get("userId");
Date investTime = (Date)row.get("investTime");
userIdList.add(userId);
//start 初始投资金额为0
row.put("investAmount", 0);
row.put("recivedPrincipal", 0);
row.put("firstMonthInvestAmount", 0);
row.put("hasInterest", 0);
row.put("investTime", DateUtils.formatDate(investTime));
//end 初始投资金额为0
rowMap.put(userId+"", row);
}
rowMap.put("userIdList", userIdList);
return rowMap;
}
}