|
|
package com.yohoufo.order.service.impl;
|
|
|
|
|
|
import com.google.common.cache.Cache;
|
|
|
import com.google.common.cache.CacheBuilder;
|
|
|
import com.yoho.core.cache.LocalCache;
|
|
|
import com.yohoufo.dal.order.TradeBillsMapper;
|
|
|
import com.yohoufo.dal.order.model.TradeBills;
|
|
|
import com.yohoufo.order.common.TradeType;
|
|
|
import com.yohoufo.order.model.bo.TradeBillsBo;
|
|
|
import com.yohoufo.order.model.bo.TradeBillsSummaryBo;
|
|
|
import com.yohoufo.order.model.response.AssetsResp;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.concurrent.Callable;
|
|
|
import java.util.concurrent.ExecutionException;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**资产
|
|
|
* Created by chenchao on 2018/9/28.
|
|
|
*/
|
|
|
@Service
|
|
|
public class AssetsService {
|
|
|
final Logger logger = LoggerFactory.getLogger(getClass());
|
|
|
|
|
|
private Cache<String,List<TradeBillsBo>> localContentCache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterAccess(5, TimeUnit.MINUTES).build();
|
|
|
private Cache<Integer,TradeBillsSummaryBo> localTradeBillsSummaryBoCache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterAccess(2, TimeUnit.MINUTES).build();
|
|
|
|
|
|
@Autowired
|
|
|
private TradeBillsMapper tradeBillsMapper;
|
|
|
|
|
|
public AssetsResp getAssetsDetails(int uid, int page, int pageSize){
|
|
|
|
|
|
//TODO get count
|
|
|
int total = 0;
|
|
|
int total = tradeBillsMapper.selectCountGoodsIncomeOrCompensateIncomeByUid(uid);
|
|
|
|
|
|
TradeBillsSummaryBo summary = null;
|
|
|
List<TradeBillsBo> detailList = null;
|
|
|
if (total>0){
|
|
|
detailList = buildTradeBills(uid, page, pageSize);
|
|
|
summary = buildTradeBillsSummary(uid);
|
|
|
detailList = buildTradeBills(uid, page, pageSize);
|
|
|
}
|
|
|
|
|
|
|
|
|
AssetsResp assetsResp = new AssetsResp();
|
|
|
assetsResp.setSummary(summary);
|
|
|
assetsResp.setData(detailList);
|
...
|
...
|
@@ -42,9 +64,41 @@ public class AssetsService { |
|
|
* @return
|
|
|
*/
|
|
|
List<TradeBillsBo> buildTradeBills(int uid,int page, int pageSize){
|
|
|
List<TradeBillsBo> detailList = null;
|
|
|
//把第一页缓存
|
|
|
String key=uid+"-"+page+"-"+pageSize;
|
|
|
if(page==1){
|
|
|
try{
|
|
|
return localContentCache.get(key, new Callable<List<TradeBillsBo>>() {
|
|
|
@Override
|
|
|
public List<TradeBillsBo> call() throws Exception {
|
|
|
|
|
|
return detailList;
|
|
|
return loadTradeBillFromDb(uid,page,pageSize);
|
|
|
}
|
|
|
});
|
|
|
}catch (ExecutionException e){
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
}else{
|
|
|
return loadTradeBillFromDb(uid,page,pageSize);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private List<TradeBillsBo> loadTradeBillFromDb(int uid,int page, int pageSize){
|
|
|
|
|
|
List<TradeBills> detailList = tradeBillsMapper.selectTradeBillsWithPageByUid(uid,pageSize*(page-1),pageSize);
|
|
|
|
|
|
List<TradeBillsBo> rtnList=new ArrayList<>();
|
|
|
for(TradeBills bills:detailList){
|
|
|
TradeBillsBo bo = new TradeBillsBo();
|
|
|
bo.setUid(uid);
|
|
|
bo.setAmount(bills.getAmount());
|
|
|
bo.setIncomeOutcome(bills.getIncomeOutcome());
|
|
|
bo.setOrderCode(bills.getOrderCode());
|
|
|
bo.setTradeType(bills.getTradeType());
|
|
|
bo.setTradeTypeDesc(TradeType.getTradeTypeByCode(bills.getTradeType()).getDesc());
|
|
|
rtnList.add(bo);
|
|
|
}
|
|
|
return rtnList;
|
|
|
}
|
|
|
|
|
|
/**
|
...
|
...
|
@@ -53,11 +107,66 @@ public class AssetsService { |
|
|
* @return
|
|
|
*/
|
|
|
TradeBillsSummaryBo buildTradeBillsSummary(int uid){
|
|
|
TradeBillsSummaryBo summary = null;
|
|
|
//TODO 使用 sql sum 货款
|
|
|
//TODO 使用 sql sum 补偿款
|
|
|
try{
|
|
|
return localTradeBillsSummaryBoCache.get(uid,new Callable<TradeBillsSummaryBo>() {
|
|
|
@Override
|
|
|
public TradeBillsSummaryBo call() throws Exception {
|
|
|
TradeBillsSummaryBo summary = new TradeBillsSummaryBo();
|
|
|
|
|
|
BigDecimal sum_goods_income=new BigDecimal(0);
|
|
|
BigDecimal compensate_income=new BigDecimal(0);
|
|
|
|
|
|
//计算收入
|
|
|
List<Map<String, Object>> incomeList=tradeBillsMapper.selectIncomeAmountByUid(uid);
|
|
|
if(CollectionUtils.isNotEmpty(incomeList)){
|
|
|
|
|
|
for(Map<String, Object> tmpMap:incomeList){
|
|
|
if(tmpMap.get("tradeType")==null){
|
|
|
continue;
|
|
|
}
|
|
|
Integer key = (Integer)tmpMap.get("tradeType");
|
|
|
if(TradeType.goods_income.getCode()==key){
|
|
|
sum_goods_income.add((BigDecimal)tmpMap.get("allAmount"));
|
|
|
}
|
|
|
|
|
|
if(TradeType.compensateIncome.getCode()==key){
|
|
|
compensate_income.add((BigDecimal)tmpMap.get("allAmount"));
|
|
|
}
|
|
|
|
|
|
//TODO 内存中计算total
|
|
|
return summary;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//计算支出
|
|
|
List<Map<String, Object>> spendList=tradeBillsMapper.selectSpendAmountByUid(uid);
|
|
|
if(CollectionUtils.isNotEmpty(spendList)){
|
|
|
for(Map<String, Object> tmpMap:incomeList){
|
|
|
if(tmpMap.get("tradeType")==null){
|
|
|
continue;
|
|
|
}
|
|
|
Integer key = (Integer)tmpMap.get("tradeType");
|
|
|
if(TradeType.goods_income.getCode()==key){
|
|
|
sum_goods_income.subtract((BigDecimal)tmpMap.get("allAmount"));
|
|
|
}
|
|
|
|
|
|
if(TradeType.compensateIncome.getCode()==key){
|
|
|
compensate_income.subtract((BigDecimal)tmpMap.get("allAmount"));
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//TODO 内存中计算total
|
|
|
summary.setGoods_income(sum_goods_income);
|
|
|
summary.setGoodsIncome(String.valueOf(sum_goods_income));
|
|
|
summary.setCompensate_income(compensate_income);
|
|
|
summary.setCompensateIncome(String.valueOf(compensate_income));
|
|
|
summary.setTotal_income(sum_goods_income.add(compensate_income));
|
|
|
summary.setTotalIncome(String.valueOf(compensate_income));
|
|
|
return summary;
|
|
|
}
|
|
|
});
|
|
|
}catch (ExecutionException e){
|
|
|
throw new RuntimeException(e);
|
|
|
}
|
|
|
}
|
|
|
} |
...
|
...
|
|