|
|
@@ -19,6 +19,7 @@ package org.springblade.purchase.sales.controller;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.trade.purchase.order.enums.OrderTypeEnum;
|
|
|
import io.swagger.annotations.Api;
|
|
|
@@ -339,12 +340,26 @@ public class OrderController extends BladeController {
|
|
|
@ApiOperation(value = "统计分析")
|
|
|
public R listOrderStatisticAnalysis(Order order, Query query)
|
|
|
{
|
|
|
+
|
|
|
+ /* LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ orderLambdaQueryWrapper.eq(StringUtils.isNotBlank(order.getOrderNo()),Order::getOrderNo,order.getOrderNo());
|
|
|
+ orderLambdaQueryWrapper.between(StringUtils.isNotBlank(order.getStartTime())&&StringUtils.isNotBlank(order.getEndTime()),Order::getCreateTime,order.getStartTime(),order.getEndTime());
|
|
|
+ IPage<Order> iPage = orderService.page(Condition.getPage(query), orderLambdaQueryWrapper);
|
|
|
+ List<Order> records = iPage.getRecords();*/
|
|
|
Page<OrderStatisticAnalysisVO> iPage = new Page(query.getCurrent(),query.getSize());
|
|
|
IPage<OrderStatisticAnalysisVO> orderStatisticAnalysisVOIPage = orderService.listOrderStatisticAnalysis(iPage, AuthUtil.getTenantId(), order.getOrderNo(),order.getStartTime(),order.getEndTime());
|
|
|
List<OrderStatisticAnalysisVO> records = orderStatisticAnalysisVOIPage.getRecords();
|
|
|
if(CollectionUtils.isNotEmpty(records))
|
|
|
{
|
|
|
records.forEach(e->{
|
|
|
+ Long orderId = e.getOrderId();
|
|
|
+ //采购主表信息
|
|
|
+ LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ orderLambdaQueryWrapper
|
|
|
+ .eq(Order::getId,orderId)
|
|
|
+ .eq(Order::getTenantId,AuthUtil.getTenantId())
|
|
|
+ .eq(Order::getIsDeleted,0);
|
|
|
+ Order service = orderService.getOne(orderLambdaQueryWrapper);
|
|
|
//供应商名称
|
|
|
if(e.getCorpId()!=null)
|
|
|
{
|
|
|
@@ -354,47 +369,19 @@ public class OrderController extends BladeController {
|
|
|
e.setCorpName(corpMessage.getData().getCname());
|
|
|
}
|
|
|
}
|
|
|
- //客户名称
|
|
|
- if(e.getSaleCorpId()!=null)
|
|
|
- {
|
|
|
- R<CorpsDesc> corpsDescClientCorpMessage = corpsDescClient.getCorpMessage(e.getSaleCorpId());
|
|
|
- if(corpsDescClientCorpMessage.isSuccess())
|
|
|
- {
|
|
|
- e.setSaleCorpName(corpsDescClientCorpMessage.getData().getCname());
|
|
|
- }
|
|
|
- }
|
|
|
- //业务员名称
|
|
|
- if(e.getCreateUser()!=null)
|
|
|
- {
|
|
|
- R<User> info = userClient.userInfoById(e.getCreateUser());
|
|
|
- if(info.isSuccess())
|
|
|
- {
|
|
|
- e.setCreateUserName(info.getData().getRealName());
|
|
|
- }
|
|
|
- }
|
|
|
- //采购主表id
|
|
|
- Long orderId = e.getOrderId();
|
|
|
- LambdaQueryWrapper<Order> orderLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
- orderLambdaQueryWrapper
|
|
|
- .eq(Order::getId,orderId)
|
|
|
- .eq(Order::getTenantId,AuthUtil.getTenantId())
|
|
|
- .eq(Order::getIsDeleted,0);
|
|
|
-
|
|
|
- Order service = orderService.getOne(orderLambdaQueryWrapper);
|
|
|
-
|
|
|
-
|
|
|
//调用-费用微服务-获取关税设置详情
|
|
|
R<FeesDesc> customDuty = feesDescClient.getFeesByName("关税");
|
|
|
Long customDutyId=null;
|
|
|
- if(customDuty.isSuccess()&&customDuty.getData()!=null)
|
|
|
- {
|
|
|
+ if(customDuty.isSuccess()&&customDuty.getData()!=null)
|
|
|
+ {
|
|
|
customDutyId=customDuty.getData().getId();
|
|
|
}
|
|
|
+
|
|
|
//关税
|
|
|
BigDecimal customDutyMoney=BigDecimal.ZERO;
|
|
|
- //查询采购订单关税的费用明细
|
|
|
- if(customDutyId!=null)
|
|
|
- {
|
|
|
+ //查询采购订单关税的费用明细
|
|
|
+ if(customDutyId!=null)
|
|
|
+ {
|
|
|
LambdaQueryWrapper<OrderFees> orderFeesLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
orderFeesLambdaQueryWrapper
|
|
|
.eq(OrderFees::getPid,orderId)
|
|
|
@@ -426,19 +413,64 @@ public class OrderController extends BladeController {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
e.setCustomDutyMoney(customDutyMoney);
|
|
|
|
|
|
|
|
|
+ //调用-费用微服务-获取物流费设置详情
|
|
|
+ Long deliverId=null;
|
|
|
+ R<FeesDesc> deliver = feesDescClient.getFeesByName("物流费");
|
|
|
+ if(deliver.isSuccess()&&deliver.getData()!=null)
|
|
|
+ {
|
|
|
+ deliverId=deliver.getData().getId();
|
|
|
+ }
|
|
|
+ BigDecimal deliverMoney=BigDecimal.ZERO;
|
|
|
+ if(deliverId!=null)
|
|
|
+ {
|
|
|
+ LambdaQueryWrapper<OrderFees> quotaLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
+ quotaLambdaQueryWrapper
|
|
|
+ .eq(OrderFees::getPid,orderId)
|
|
|
+ .eq(OrderFees::getItemId,deliverId);
|
|
|
+ List<Long> deliverIds = orderFeesService.list(quotaLambdaQueryWrapper).stream().map(OrderFees::getId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(deliverIds))
|
|
|
+ {
|
|
|
+ Acc customDutyAcc=new Acc();
|
|
|
+ customDutyAcc.setSrcType(2);
|
|
|
+ customDutyAcc.setSrcFeesIds(deliverIds);
|
|
|
+ //只有 itemType=采购 && billType=申请 才是付钱
|
|
|
+ customDutyAcc.setItemType("采购");
|
|
|
+ customDutyAcc.setBillType("申请");
|
|
|
+ R<List<Acc>> accListByCondition = iFinanceClient.getAccListByCondition(customDutyAcc);
|
|
|
+ if(accListByCondition.isSuccess())
|
|
|
+ {
|
|
|
+ List<Acc> deliverList = accListByCondition.getData();
|
|
|
+ //物流费
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(deliverList))
|
|
|
+ {
|
|
|
+ deliverMoney=deliverList.stream().reduce(BigDecimal.ZERO,(x,y) ->{ return x.add(y.getAmount().multiply(y.getExchangeRate())); },BigDecimal::add);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ deliverMoney=BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ e.setDeliverMoney(deliverMoney);
|
|
|
+
|
|
|
|
|
|
- //调用-费用微服务-获取配额设置详情
|
|
|
+ //调用-费用微服务-获取配额设置详情
|
|
|
Long quotaId=null;
|
|
|
R<FeesDesc> quota = feesDescClient.getFeesByName("配额");
|
|
|
if(quota.isSuccess()&"a.getData()!=null)
|
|
|
{
|
|
|
quotaId=quota.getData().getId();
|
|
|
}
|
|
|
- //配额
|
|
|
+ //配额
|
|
|
BigDecimal quotaMoney=BigDecimal.ZERO;
|
|
|
//查询采购订单配额的费用明细
|
|
|
if(quotaId!=null)
|
|
|
@@ -479,8 +511,7 @@ public class OrderController extends BladeController {
|
|
|
e.setQuotaMoney(quotaMoney);
|
|
|
|
|
|
|
|
|
-
|
|
|
- //调用-费用微服务-获取增值税设置详情
|
|
|
+ //调用-费用微服务-获取增值税设置详情
|
|
|
Long gstId=null;
|
|
|
R<FeesDesc> GST = feesDescClient.getFeesByName("增值税");
|
|
|
if(GST.isSuccess()&&GST.getData()!=null)
|
|
|
@@ -527,54 +558,6 @@ public class OrderController extends BladeController {
|
|
|
e.setGstMoney(gstMoney);
|
|
|
|
|
|
|
|
|
-
|
|
|
- //调用-费用微服务-获取物流费设置详情
|
|
|
- Long deliverId=null;
|
|
|
- R<FeesDesc> deliver = feesDescClient.getFeesByName("物流费");
|
|
|
- if(deliver.isSuccess()&&deliver.getData()!=null)
|
|
|
- {
|
|
|
- deliverId=deliver.getData().getId();
|
|
|
- }
|
|
|
- BigDecimal deliverMoney=BigDecimal.ZERO;
|
|
|
- if(deliverId!=null)
|
|
|
- {
|
|
|
- LambdaQueryWrapper<OrderFees> quotaLambdaQueryWrapper=new LambdaQueryWrapper<>();
|
|
|
- quotaLambdaQueryWrapper
|
|
|
- .eq(OrderFees::getPid,orderId)
|
|
|
- .eq(OrderFees::getItemId,deliverId);
|
|
|
- List<Long> deliverIds = orderFeesService.list(quotaLambdaQueryWrapper).stream().map(OrderFees::getId).collect(Collectors.toList());
|
|
|
-
|
|
|
- if(CollectionUtils.isNotEmpty(deliverIds))
|
|
|
- {
|
|
|
- Acc customDutyAcc=new Acc();
|
|
|
- customDutyAcc.setSrcType(2);
|
|
|
- customDutyAcc.setSrcFeesIds(deliverIds);
|
|
|
- //只有 itemType=采购 && billType=申请 才是付钱
|
|
|
- customDutyAcc.setItemType("采购");
|
|
|
- customDutyAcc.setBillType("申请");
|
|
|
- R<List<Acc>> accListByCondition = iFinanceClient.getAccListByCondition(customDutyAcc);
|
|
|
- if(accListByCondition.isSuccess())
|
|
|
- {
|
|
|
- List<Acc> deliverList = accListByCondition.getData();
|
|
|
- //物流费
|
|
|
-
|
|
|
- if(CollectionUtils.isNotEmpty(deliverList))
|
|
|
- {
|
|
|
- deliverMoney=deliverList.stream().reduce(BigDecimal.ZERO,(x,y) ->{ return x.add(y.getAmount().multiply(y.getExchangeRate())); },BigDecimal::add);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- deliverMoney=BigDecimal.ZERO;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- e.setDeliverMoney(deliverMoney);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
//获取货款账单明细
|
|
|
Acc itemAcc=new Acc();
|
|
|
itemAcc.setSrcType(1);
|
|
|
@@ -601,14 +584,64 @@ public class OrderController extends BladeController {
|
|
|
}
|
|
|
|
|
|
e.setItemMoney(itemMoney.setScale(2,BigDecimal.ROUND_HALF_UP));
|
|
|
+
|
|
|
+
|
|
|
+ //成本单价=(货款+关税+配额)/发票重量---精确小数点2位
|
|
|
+ BigDecimal unitPrice=null;
|
|
|
+ if(service.getInvoiceWeight()==null || service.getInvoiceWeight().compareTo(BigDecimal.ZERO)==0)
|
|
|
+ {
|
|
|
+ unitPrice=BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ unitPrice=((itemMoney.add(quotaMoney)).add(customDutyMoney)).divide(service.getInvoiceWeight(),2,BigDecimal.ROUND_HALF_UP);
|
|
|
+ }
|
|
|
+ e.setUnitPrice(unitPrice);
|
|
|
+
|
|
|
//销售主表信息
|
|
|
LambdaQueryWrapper<Order> saleOrderWrapper=new LambdaQueryWrapper<>();
|
|
|
saleOrderWrapper.eq(Order::getId,e.getOrderSaleId()).eq(Order::getTenantId,AuthUtil.getTenantId());
|
|
|
Order serviceOne = orderService.getOne(saleOrderWrapper);
|
|
|
+ if(serviceOne==null)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //客户名称
|
|
|
+ if(e.getSaleCorpId()!=null)
|
|
|
+ {
|
|
|
+ R<CorpsDesc> corpsDescClientCorpMessage = corpsDescClient.getCorpMessage(e.getSaleCorpId());
|
|
|
+ if(corpsDescClientCorpMessage.isSuccess())
|
|
|
+ {
|
|
|
+ e.setSaleCorpName(corpsDescClientCorpMessage.getData().getCname());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //业务员名称
|
|
|
+ if(e.getCreateUser()!=null)
|
|
|
+ {
|
|
|
+ R<User> info = userClient.userInfoById(e.getCreateUser());
|
|
|
+ if(info.isSuccess())
|
|
|
+ {
|
|
|
+ e.setCreateUserName(info.getData().getRealName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- //成本单价=(货款+关税+配额)/发票重量---精确小数点2位
|
|
|
- BigDecimal unitPrice=((itemMoney.add(quotaMoney)).add(customDutyMoney)).divide(service.getInvoiceWeight(),2,BigDecimal.ROUND_HALF_UP);
|
|
|
- e.setUnitPrice(unitPrice);
|
|
|
if(serviceOne.getExchangeRate()==null)
|
|
|
{
|
|
|
throw new SecurityException("销售订单:"+serviceOne.getOrderNo()+",汇率未填,无法完成统计");
|