init: 导入项目
This commit is contained in:
207
feeCalc/src/main/java/com/ag/account/service/FeeController.java
Normal file
207
feeCalc/src/main/java/com/ag/account/service/FeeController.java
Normal file
@@ -0,0 +1,207 @@
|
||||
package com.ag.account.service;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.ag.account.detail.AccountDetail;
|
||||
import com.ag.account.detail.CalcManager;
|
||||
import com.ag.account.feeUtil.RuleUtil;
|
||||
import com.ag.account.feeUtil.TariffUtil;
|
||||
import com.ag.base.DefaultBussniessImpl;
|
||||
import com.ag.entity.account.FeeDetail;
|
||||
import com.ag.entity.account.vo.BizVO;
|
||||
import com.ag.entity.fee.BaseChargingItem;
|
||||
import com.ag.entity.fee.ItemProperties;
|
||||
import com.ag.entity.fee.TariffRitem;
|
||||
import com.ag.entity.fee.face.IFeeBase;
|
||||
import com.ag.entity.fee.face.ReqSource;
|
||||
import com.ag.entity.fee.face.SourceProperty;
|
||||
import com.ag.entity.fee.vo.ContractItemVO;
|
||||
import com.ag.entity.fee.vo.ContractVO;
|
||||
import com.ag.entity.fee.vo.SourceAndFeeDetail;
|
||||
import com.ag.entity.fee.vo.TariffVO;
|
||||
import com.ag.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Created by yangxh on 2019/8/1.
|
||||
*/
|
||||
@Controller
|
||||
public class FeeController implements IFeeBase {
|
||||
|
||||
private Log log = LogFactory.getLog(FeeController.class);
|
||||
@Autowired
|
||||
private BizContractsService contractsService;
|
||||
@Autowired
|
||||
private AccountPointsCalcService pointService;
|
||||
@Autowired
|
||||
private DefaultBussniessImpl<FeeDetail> ctcDao;
|
||||
/*@Autowired
|
||||
private RedisTemplate redisTemplate;*/
|
||||
|
||||
|
||||
/**
|
||||
* 返回每个数据源对象生成的费用明细
|
||||
* @param reqStr
|
||||
* @return List<SourceAndFeeDetail>
|
||||
*/
|
||||
@Override
|
||||
public String callbackSource(String reqStr){
|
||||
log.error("**************"+reqStr);
|
||||
BizVO bizVO = execute(reqStr);
|
||||
|
||||
/*Object clientType = redisTemplate.opsForValue().get("KVBUFF_"+ICondition.C_CLIENT_TYPE);
|
||||
System.out.println(JSON.toJSONString(clientType));
|
||||
List<KvBean> list = SerializeUtil.unserializeForList((byte[])clientType);
|
||||
System.out.println("redis==="+JSON.toJSONString(list));*/
|
||||
List<SourceAndFeeDetail> sourceAndFees = new ArrayList<>();
|
||||
|
||||
List<SourceProperty> sources = bizVO.getReqSource().getSourceProperties();
|
||||
for (SourceProperty source : sources){
|
||||
SourceAndFeeDetail sourceAndFee = new SourceAndFeeDetail();
|
||||
SourceProperty target = new SourceProperty();
|
||||
target.setBizId(source.getBizId());
|
||||
target.setBizTime(source.getBizTime());
|
||||
target.setBizType(source.getBizType());
|
||||
target.setProperty(source.getProperty());
|
||||
target.setSpare(source.getSpare());
|
||||
target.setBackTariffs(source.getBackTariffs());
|
||||
sourceAndFee.setSource(target);
|
||||
sourceAndFees.add(sourceAndFee);
|
||||
}
|
||||
List<FeeDetail> allDetails = bizVO.getDetails();
|
||||
for (SourceAndFeeDetail sourceAndFee : sourceAndFees){
|
||||
List<FeeDetail> targets = new ArrayList<>();
|
||||
sourceAndFee.setFeeDetails(targets);
|
||||
for (FeeDetail detail : allDetails) {
|
||||
if (sourceAndFee.getSource().getBizId().equals(detail.getBussinessCode())){
|
||||
targets.add(detail);
|
||||
}
|
||||
}
|
||||
}
|
||||
return JSON.toJSONString(sourceAndFees);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String callback(String reqStr){
|
||||
log.error("source **************"+reqStr);
|
||||
BizVO bizVO = execute(reqStr);
|
||||
log.error("result **************");
|
||||
log.error(JSON.toJSONString(bizVO.getDetails()));
|
||||
return JSON.toJSONString(bizVO.getDetails());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void call(String reqStr) {
|
||||
BizVO bizVO = execute(reqStr);
|
||||
ctcDao.saveAll(bizVO.getDetails());
|
||||
}
|
||||
|
||||
private BizVO execute(String reqStr){
|
||||
ReqSource reqSource = JSON.parseObject(reqStr, ReqSource.class);
|
||||
BizVO bizVO = new BizVO();
|
||||
bizVO.setReqSource(reqSource);
|
||||
//通过计费事件编号—>所有计费费目,合同编号->所有合同费目=》该合同下满足的计费费目及所有属性
|
||||
init(bizVO);
|
||||
List<ContractItemVO> itemLst = bizVO.getDefaultContractVo().getItemLst();
|
||||
List<SourceProperty> properties = reqSource.getSourceProperties();
|
||||
//数据源
|
||||
for (SourceProperty property : properties) {
|
||||
log.error("数据源对象:"+ JSON.toJSONString(property)+"===============");
|
||||
//费目
|
||||
for (ContractItemVO item : itemLst) {
|
||||
TariffUtil.clear(property);
|
||||
Map<String, Integer> eqMap = item.getItemProperties().stream()
|
||||
.collect(Collectors.toMap(ItemProperties::getPropertyCode, ItemProperties::getIsShowOperator));
|
||||
//去除显示要素,并按顺序要素重新排序
|
||||
List<ItemProperties> orderList = item.getItemProperties().stream().filter(x-> ObjectUtil.equal(0, x.getIsShowOperator()))
|
||||
.sorted(Comparator.comparing(ItemProperties::getDispOrder)).collect(Collectors.toList());
|
||||
List<TariffVO> tariffLst = item.getTariffLst();
|
||||
if (CollectionUtils.isEmpty(tariffLst)){
|
||||
log.error("合同号["+item.getContractId()+"]费目编号["+item.getItemId()+"]未找到费率");
|
||||
continue;
|
||||
}
|
||||
List<TariffVO> fits = new ArrayList<>();
|
||||
//费率
|
||||
for (TariffVO tariffVO : tariffLst) {
|
||||
/*if (tariffVO.getId().equals("b30f40b9222d48629ec2d3ba1216969b")
|
||||
&& property.getBizId().equals("56bdf298-4925-4ff8-8f8a-56b6ca18e3e6")
|
||||
){
|
||||
System.out.println(JSON.toJSONString(tariffVO));
|
||||
}*/
|
||||
//费率有效期检查,有效返回true,无效返回false, 失效日期+1
|
||||
if (!RuleUtil.checkValidity(tariffVO, property.getBizTime())){
|
||||
continue;
|
||||
}
|
||||
List<TariffRitem> ritemList = tariffVO.getRitemList();
|
||||
if (RuleUtil.compareRule(property, ritemList, eqMap)) {
|
||||
fits.add(tariffVO);
|
||||
}
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(fits)) {
|
||||
//logger.info("满足条件的费率信息:" + fits.size());
|
||||
//logger.info(JSON.toJSONString(fits));
|
||||
//合同费率筛选
|
||||
TariffUtil.compareNum(property, fits, eqMap, orderList);
|
||||
//保存合同费目
|
||||
property.setContractItem(item);
|
||||
//返回费率
|
||||
property.getBackTariffs().add(property.getTariffVO());
|
||||
Map<String, BaseChargingItem> itemMap = bizVO.getItemMap();
|
||||
log.error("合同费目信息::"+itemMap.get(property.getContractItem().getItemId()).getDescription());
|
||||
//log.error("费率信息::"+JSON.toJSONString(property.getTariffVO()));
|
||||
log.error("费率金额::"+property.getTariffVO().getRate());
|
||||
AccountDetail detail = CalcManager.getInstance(item);
|
||||
if(detail != null){
|
||||
detail.getFeeDetail(bizVO, property);
|
||||
}
|
||||
}
|
||||
}
|
||||
log.error("======================================end");
|
||||
}
|
||||
return bizVO;
|
||||
}
|
||||
|
||||
private void init(BizVO bizVO){
|
||||
ReqSource reqSource = bizVO.getReqSource();
|
||||
bizVO.setTenancyId(reqSource.getTenancyId());
|
||||
|
||||
if (!StrUtil.isEmpty(reqSource.getAccountPointCode())){
|
||||
pointService.getFeeItems(bizVO, reqSource.getAccountPointCode());
|
||||
}
|
||||
if (!StrUtil.isEmpty(reqSource.getItemId())) {
|
||||
String itemIds = "'"+subRightString(reqSource.getItemId(), ",").replace(",", "','")+"'";
|
||||
bizVO.setItemIds(itemIds);
|
||||
}
|
||||
|
||||
if (!StrUtil.isEmpty(reqSource.getContractId())){
|
||||
ContractVO contractVO = contractsService.findContractVO(reqSource.getContractId(), bizVO);
|
||||
bizVO.setDefaultContractVo(contractVO);
|
||||
}
|
||||
//按费目编号查询基础费目
|
||||
pointService.findBaseItemList(bizVO);
|
||||
|
||||
}
|
||||
|
||||
public static String subRightString(String str, String rightFlag) {
|
||||
if (StrUtil.isEmpty(str)){
|
||||
return "";
|
||||
}
|
||||
if (!str.contains(rightFlag)) {
|
||||
return str;
|
||||
}
|
||||
return str.substring(0, str.lastIndexOf(rightFlag));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user