|
@@ -386,32 +386,40 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
});
|
|
|
//取出EHSD采购所有金额和货币-通过合同ID分组
|
|
|
List<Long> contractIds = list.stream().map(ContractBudgetVo::getContractId).collect(Collectors.toList());
|
|
|
- List<EhsdPurchaseProductVo> ehsdAmountList = ehsdPurchaseProductService.getGroupSumAmount(contractIds);
|
|
|
- //取出采购所有金额和货币-通过合同ID分组
|
|
|
- Map<Long, String> ehsdAmountMap = ehsdAmountList.stream().collect(Collectors.toMap(EhsdPurchaseProductVo::getContractId, EhsdPurchaseProductVo::getCurrencyAmount));
|
|
|
- List<PurchaseDetailVo> otherAmountList = purchaseDetailService.getSumCountInDataResourceIds(contractIds);
|
|
|
- Map<Long, String> otherAmountMap = otherAmountList.stream().collect(Collectors.toMap(PurchaseDetailVo::getDataResourceId, PurchaseDetailVo::getSumAmountCurrency));
|
|
|
- //通过合同ID查询到退税数据
|
|
|
- List<TaxRefundDetails> refundDetails = taxRefundDetailsService.getSumMoneyByContractIds(contractIds);
|
|
|
- Map<Long, List<TaxRefundDetails>> refundDetailsMap = refundDetails.stream().collect(Collectors.groupingBy(TaxRefundDetails::getContractId));
|
|
|
-
|
|
|
- //取出默认汇率
|
|
|
-// List<CurrencyRate> currencyRateList = currencyRateService.getList();
|
|
|
-// Map<String, BigDecimal> currencyRateMap = currencyRateList.stream().collect(Collectors.toMap(CurrencyRate::getType, CurrencyRate::getRate));
|
|
|
+ List<EhsdPurchaseProductVo> ehsdAmountList = ehsdPurchaseProductService.getPurchaseByContractId(contractIds);
|
|
|
+ Map<Long, List<EhsdPurchaseProductVo>> ehsdAmountMap = ehsdAmountList.stream().collect(Collectors.groupingBy(EhsdPurchaseProductVo::getDataResourceId));
|
|
|
for (ContractBudgetVo v : list) {
|
|
|
+ BigDecimal purchaseAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal peritectoidAmount = BigDecimal.ZERO;
|
|
|
+ BigDecimal accessoriesAmount = BigDecimal.ZERO;
|
|
|
if (StringUtils.isNotEmpty(v.getCurrencyRateJson())) {//如果此条合同有汇率了
|
|
|
List<ContractCurrencyRate> contractCurrencyRates = JSON.parseArray(v.getCurrencyRateJson(), ContractCurrencyRate.class);
|
|
|
Map<String, BigDecimal> map = contractCurrencyRates.stream().collect(Collectors.toMap(ContractCurrencyRate::getType, ContractCurrencyRate::getRate));
|
|
|
- if (MapUtils.isNotEmpty(ehsdAmountMap)) { //计算EHSD租户应付货款
|
|
|
- String concatAmountCurrency = ehsdAmountMap.getOrDefault(v.getContractId(), null);
|
|
|
- if (StringUtils.isNotEmpty(concatAmountCurrency)) {
|
|
|
- BigDecimal amount = new BigDecimal(concatAmountCurrency.split("-")[0]);
|
|
|
- String currency = concatAmountCurrency.split("-")[1];
|
|
|
- BigDecimal rate = map.getOrDefault(currency, BigDecimal.ONE);
|
|
|
- v.setEhsdSumAmount(amount.multiply(rate));
|
|
|
- } else {
|
|
|
- v.setEhsdSumAmount(BigDecimal.ZERO);
|
|
|
+ /**
|
|
|
+ * 处理应付款金额-包材金额-配件金额
|
|
|
+ */
|
|
|
+ List<EhsdPurchaseProductVo> pList = ehsdAmountMap.getOrDefault(v.getContractId(), null);
|
|
|
+ if (CollectionUtils.isNotEmpty(pList)) {
|
|
|
+ for(EhsdPurchaseProductVo e : pList){
|
|
|
+ //获取汇率
|
|
|
+ BigDecimal rate = map.getOrDefault(e.getCurrency(), BigDecimal.ONE);
|
|
|
+ // 获取认领金额
|
|
|
+ BigDecimal money = e.getAmount();
|
|
|
+ //总金额
|
|
|
+ BigDecimal amount = rate.multiply(money);
|
|
|
+ purchaseAmount = purchaseAmount.add(amount);
|
|
|
+ if(ObjectUtil.isNotEmpty(e.getProductCategoryIds())){
|
|
|
+ if(e.getProductCategoryIds().contains("1685534140512616449")||e.getProductCategoryId()==1685534140512616449L){//包材
|
|
|
+ peritectoidAmount = peritectoidAmount.add(amount);
|
|
|
+ }
|
|
|
+ if(e.getProductCategoryIds().contains("1685534141821239297")||e.getProductCategoryId()==1685534141821239297L){//配件
|
|
|
+ accessoriesAmount = accessoriesAmount.add(amount);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ v.setEhsdSumAmount(purchaseAmount);
|
|
|
+ v.setPeritectoidAmount(peritectoidAmount);
|
|
|
+ v.setAccessoriesAmount(accessoriesAmount);
|
|
|
}
|
|
|
//计算支出总计 除合同金额(转人民币)+应退税金额(转人民币) 其他金额相加
|
|
|
v.setExpenditureAmount(v.getTrailerFee() == null ? BigDecimal.ZERO : v.getTrailerFee().multiply(new BigDecimal(map.getOrDefault(v.getTrailerFeeCurrency(), BigDecimal.ONE).toString())).add
|
|
@@ -429,16 +437,31 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
//计算收入总计=合同金额(转人民币)+应退税金额(转人民币)
|
|
|
v.setIncomeAmount(v.getAmount().multiply(new BigDecimal(map.getOrDefault(v.getCurrency(), BigDecimal.ONE).toString())).add(v.getRefundableAmount()));
|
|
|
} else {//没有汇率取默认汇率
|
|
|
- if (MapUtils.isNotEmpty(ehsdAmountMap)) { //计算EHSD租户应付货款
|
|
|
- String concatAmountCurrency = ehsdAmountMap.getOrDefault(v.getContractId(), null);
|
|
|
- if (StringUtils.isNotEmpty(concatAmountCurrency)) {
|
|
|
- BigDecimal amount = new BigDecimal(concatAmountCurrency.split("-")[0]);
|
|
|
- String rate = concatAmountCurrency.split("-")[2];
|
|
|
- BigDecimal DecimalRate = new BigDecimal(rate);
|
|
|
- v.setEhsdSumAmount(amount.multiply(DecimalRate));
|
|
|
- } else {
|
|
|
- v.setEhsdSumAmount(BigDecimal.ZERO);
|
|
|
+ /**
|
|
|
+ * 处理应付款金额-包材金额-配件金额
|
|
|
+ */
|
|
|
+ List<EhsdPurchaseProductVo> pList = ehsdAmountMap.getOrDefault(v.getContractId(), null);
|
|
|
+ if (CollectionUtils.isNotEmpty(pList)) {
|
|
|
+ for(EhsdPurchaseProductVo e : pList){
|
|
|
+ //获取汇率
|
|
|
+ BigDecimal rate = e.getRate();
|
|
|
+ // 获取认领金额
|
|
|
+ BigDecimal money = e.getAmount();
|
|
|
+ //总金额
|
|
|
+ BigDecimal amount = rate.multiply(money);
|
|
|
+ purchaseAmount = purchaseAmount.add(amount);
|
|
|
+ if(ObjectUtil.isNotEmpty(e.getProductCategoryIds())){
|
|
|
+ if(e.getProductCategoryIds().contains("1685534140512616449")||e.getProductCategoryId()==1685534140512616449L){//包材
|
|
|
+ peritectoidAmount = peritectoidAmount.add(amount);
|
|
|
+ }
|
|
|
+ if(e.getProductCategoryIds().contains("1685534141821239297")||e.getProductCategoryId()==1685534141821239297L){//配件
|
|
|
+ accessoriesAmount = accessoriesAmount.add(amount);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ v.setEhsdSumAmount(purchaseAmount);
|
|
|
+ v.setPeritectoidAmount(peritectoidAmount);
|
|
|
+ v.setAccessoriesAmount(accessoriesAmount);
|
|
|
}
|
|
|
BigDecimal rate = v.getRate();
|
|
|
|
|
@@ -469,6 +492,70 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 利润预算表头部统计
|
|
|
+ * @param dto
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map<String, Object> getProfitBudgetHeadStatistic(ContractSelectDto dto) {
|
|
|
+ IWrapper<Contract> wrapper = getWrapper();
|
|
|
+ wrapper.orderByDesc("t1", Contract::getCreateTime);
|
|
|
+ wrapper.eq("t1", Contract::getIsChange, "0");//列表只展示未变更得数据
|
|
|
+ wrapper.ne("t1", Contract::getIsShow, 1);
|
|
|
+ wrapper.between("t1", Contract::getStatus, FlowStatusEnum1.PASS.getKey(), FlowStatusEnum1.CANCELLATION.getKey() - 1);
|
|
|
+ if (StringUtils.isNotEmpty(dto.getCustomerId())) {
|
|
|
+ wrapper.eq("t1", Contract::getBuyCorporationId, dto.getCustomerId());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(dto.getUserId())) {
|
|
|
+ wrapper.eq("t1", Contract::getCreateUser, dto.getUserId());
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotEmpty(dto.getKeyword())) {
|
|
|
+ wrapper.keyword(dto.getKeyword(), new SqlField("t1.code"));
|
|
|
+ }
|
|
|
+ List<ContractBudgetVo> list = this.baseMapper.getProfitBudgetHeadStatistic(wrapper);
|
|
|
+ List<Long> contractIds = list.stream().map(ContractBudgetVo::getContractId).collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isNotEmpty(list)) {
|
|
|
+
|
|
|
+ for (ContractBudgetVo v : list) {
|
|
|
+ if (StringUtils.isNotEmpty(v.getCurrencyRateJson())) {//如果此条合同有汇率了---取出默认汇率
|
|
|
+ List<ContractCurrencyRate> contractCurrencyRates = JSON.parseArray(v.getCurrencyRateJson(), ContractCurrencyRate.class);
|
|
|
+ Map<String, BigDecimal> map = contractCurrencyRates.stream().collect(Collectors.toMap(ContractCurrencyRate::getType, ContractCurrencyRate::getRate));
|
|
|
+ BigDecimal rate = map.getOrDefault(v.getCurrency(),BigDecimal.ONE);
|
|
|
+ } else {//没有汇率取默认汇率
|
|
|
+ BigDecimal rate = v.getRate();
|
|
|
+ v.setRmbContractAmount(v.getAmount().multiply(rate));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //统计金额
|
|
|
+ return sumStatistic(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 统计金额
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Map<String,Object> sumStatistic(List<ContractBudgetVo> list){
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("purchaseAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ map.put("contractAmount",BigDecimal.ZERO);
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ /**
|
|
|
* 利润结算表分页
|
|
|
*
|
|
|
* @param dto
|
|
@@ -1866,14 +1953,17 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
*/
|
|
|
@Override
|
|
|
public Page<ContractVo> getExportCopyList(ContractSelectDto dto) {
|
|
|
- List<Long> authIdList = customerService.getAuthIdList();
|
|
|
-
|
|
|
- if (authIdList.size() == 0) {
|
|
|
- return new Page<>();
|
|
|
- }
|
|
|
-
|
|
|
IWrapper<Contract> wrapper = getWrapper();
|
|
|
- wrapper.in("t1", Contract::getBuyCorporationId, authIdList);
|
|
|
+ SysUser sysUser = UserUtil.getUserInfo();
|
|
|
+ if (StringUtils.isEmpty(sysUser.getUserCode())) {//不是业务员看所有
|
|
|
+ return pageCommon(dto, wrapper);
|
|
|
+ } else {//是业务员
|
|
|
+ List<Long> authIdList = customerService.getAuthIdList();
|
|
|
+ if (authIdList.size() == 0) {
|
|
|
+ return new Page<>();
|
|
|
+ }
|
|
|
+ wrapper.in("t1", Contract::getBuyCorporationId, authIdList);
|
|
|
+ }
|
|
|
wrapper.orderByDesc("t1", Contract::getCreateTime);
|
|
|
wrapper.eq("t1", Contract::getIsChange, "0");//列表只展示未变更得数据
|
|
|
wrapper.ne("t1", Contract::getIsShow, 1);
|