|
|
@@ -28,6 +28,7 @@ import org.springblade.finance.vojo.Acc;
|
|
|
import org.springblade.purchase.sales.entity.Order;
|
|
|
import org.springblade.purchase.sales.entity.OrderFees;
|
|
|
import org.springblade.purchase.sales.entity.OrderItems;
|
|
|
+import org.springblade.purchase.sales.excel.ExportOrderExcel;
|
|
|
import org.springblade.purchase.sales.excel.ProfitItemExcel;
|
|
|
import org.springblade.purchase.sales.service.*;
|
|
|
import org.springblade.purchase.sales.vo.OrderItemsVO;
|
|
|
@@ -337,6 +338,11 @@ public class ExportOrderController extends BladeController {
|
|
|
item.setPartsCost(list.stream().filter(e -> e.getPartsCost() != null).reduce(BigDecimal.ZERO,(x,y) ->{
|
|
|
return x.add(y.getPartsCost().multiply(y.getOrderQuantity()));
|
|
|
},BigDecimal::add));//配件成本金额和
|
|
|
+ }else {
|
|
|
+ item.setAmount(BigDecimal.ZERO);
|
|
|
+ item.setProcurementCost(BigDecimal.ZERO);
|
|
|
+ item.setPurchasePrice(BigDecimal.ZERO);
|
|
|
+ item.setPartsCost(BigDecimal.ZERO);
|
|
|
}
|
|
|
//获取应收费用
|
|
|
List<OrderFees> feesList = orderFeesService.list(new QueryWrapper<OrderFees>().eq("pid", item.getId()).eq("is_deleted", 0).eq("tenant_id", item.getTenantId()).eq("fees_type", 1));
|
|
|
@@ -359,9 +365,13 @@ public class ExportOrderController extends BladeController {
|
|
|
//产品利润 销售金额-采购成本金额-配件成本金额
|
|
|
item.setGrossProfit(item.getAmount().subtract(item.getProcurementCost()).subtract(item.getPartsCost()));
|
|
|
//产品利率
|
|
|
- item.setGrossProfitRate(item.getGrossProfit().divide(item.getAmount(),2,BigDecimal.ROUND_HALF_UP));
|
|
|
+ if (item.getAmount().compareTo(BigDecimal.ZERO) >0){
|
|
|
+ item.setGrossProfitRate(item.getGrossProfit().divide(item.getAmount(),2,BigDecimal.ROUND_HALF_UP));
|
|
|
+ }else {
|
|
|
+ item.setGrossProfitRate(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
//计算单票利润=单票利润+费用应收-费用应付
|
|
|
- item.setSingleTicketMargin(item.getAmount().add(item.getFd()).subtract(item.getFc()));
|
|
|
+ item.setSingleTicketMargin(item.getGrossProfit().add(item.getFd()).subtract(item.getFc()));
|
|
|
});
|
|
|
}
|
|
|
return R.data(page);
|
|
|
@@ -450,9 +460,84 @@ public class ExportOrderController extends BladeController {
|
|
|
//产品利率
|
|
|
item.setGrossProfitRate(item.getGrossProfit().divide(item.getAmount(),2,BigDecimal.ROUND_HALF_UP));
|
|
|
//计算单票利润=单票利润+费用应收-费用应付
|
|
|
- item.setSingleTicketMargin(item.getAmount().add(item.getFd()).subtract(item.getFc()));
|
|
|
+ item.setSingleTicketMargin(item.getGrossProfit().add(item.getFd()).subtract(item.getFc()));
|
|
|
});
|
|
|
+ profitItemExcelList = JSON.parseArray(JSON.toJSONString(page.getRecords()), ProfitItemExcel.class);
|
|
|
}
|
|
|
ExcelUtil.export(response, "销售利润", "销售利润", profitItemExcelList, ProfitItemExcel.class);
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 自定义分页 销售或采购订单表
|
|
|
+ */
|
|
|
+ @GetMapping("/export")
|
|
|
+ @ApiOperationSupport(order = 14)
|
|
|
+ @ApiOperation(value = "销售订单导出", notes = "销售订单导出")
|
|
|
+ public void export(OrderVO order, Query query, HttpServletResponse response) {
|
|
|
+ List<ExportOrderExcel> exportOrderExcels = new ArrayList<>();
|
|
|
+ LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(Order::getTenantId,SecureUtil.getTenantId());//租户id
|
|
|
+ lambdaQueryWrapper.eq(Order::getIsDeleted,0);//订单是否有效
|
|
|
+ lambdaQueryWrapper.eq(Order::getBillType,OrderTypeEnum.SALES.getType());//订单类型
|
|
|
+ lambdaQueryWrapper.eq(Order::getTradeType,OrderTypeEnum.EXPORT.getType());//贸易类型
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderNo()),Order::getOrderNo,order.getOrderNo());//订单号
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getCorpId()),Order::getCorpId,order.getCorpId());//客户id
|
|
|
+ lambdaQueryWrapper.ge(Func.isNotEmpty(order.getContractStartDate()),Order::getBusinesDate,order.getContractStartDate());//合同日期开始
|
|
|
+ lambdaQueryWrapper.le(Func.isNotEmpty(order.getContractEndDate()),Order::getBusinesDate,order.getContractEndDate());//合同日期结束
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getSrcOrderNo()),Order::getSrcOrderNo,order.getSrcOrderNo());//订单来源
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getShippingAddress()),Order::getShippingAddress,order.getShippingAddress());//发货地址
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getArrivalAddress()),Order::getArrivalAddress,order.getArrivalAddress());//到货地址
|
|
|
+ lambdaQueryWrapper.ge(Func.isNotEmpty(order.getActualDeliveryDateStart()),Order::getActualDeliveryDate,order.getActualDeliveryDateStart());//发货日期开始
|
|
|
+ lambdaQueryWrapper.le(Func.isNotEmpty(order.getActualDeliveryDateEnd()),Order::getActualDeliveryDate,order.getActualDeliveryDateEnd());//发货日期结束
|
|
|
+ lambdaQueryWrapper.ge(Func.isNotEmpty(order.getDeliveryStartDate()),Order::getRequiredDeliveryDate,order.getDeliveryStartDate());//要求发货日期开始
|
|
|
+ lambdaQueryWrapper.le(Func.isNotEmpty(order.getDeliveryEndDate()),Order::getRequiredDeliveryDate,order.getDeliveryEndDate());//要求发货日期结束
|
|
|
+ lambdaQueryWrapper.ge(Func.isNotEmpty(order.getArrivalDateStart()),Order::getRequiredArrivalDate,order.getArrivalDateStart());//要求到货日期开始
|
|
|
+ lambdaQueryWrapper.le(Func.isNotEmpty(order.getArrivalDateEnd()),Order::getRequiredArrivalDate,order.getArrivalDateEnd());//要求到货日期结束
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderStatus()),Order::getOrderStatus,order.getOrderStatus());//单据状态
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getSysNo()),Order::getSysNo,order.getSysNo());//系统编号
|
|
|
+ lambdaQueryWrapper.eq(Func.isNotEmpty(order.getCreateUser()),Order::getCreateUser,order.getCreateUser());//制单人
|
|
|
+ lambdaQueryWrapper.ge(Func.isNotEmpty(order.getCreateTimeStart()),Order::getCreateTime,order.getCreateTimeStart());//制单日期开始
|
|
|
+ lambdaQueryWrapper.le(Func.isNotEmpty(order.getCreateTimeEnd()),Order::getCreateTime,order.getCreateTimeEnd());//制单日期结束
|
|
|
+ lambdaQueryWrapper.ge(Func.isNotEmpty(order.getDateValidityStart()),Order::getDateValidity,order.getDateValidityStart());//有效日期开始
|
|
|
+ lambdaQueryWrapper.le(Func.isNotEmpty(order.getDateValidityEnd()),Order::getDateValidity,order.getDateValidityEnd());//有效日期结束
|
|
|
+ lambdaQueryWrapper.ge(Func.isNotEmpty(order.getOrderStartDate()),Order::getBusinesDate,order.getOrderStartDate());//订单日期开始
|
|
|
+ lambdaQueryWrapper.le(Func.isNotEmpty(order.getOrderEndDate()),Order::getBusinesDate,order.getOrderEndDate());//订单日期结束
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getPortOfLoad()),Order::getPortOfLoad,order.getPortOfLoad());//装货港
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getPortOfDestination()),Order::getPortOfDestination,order.getPortOfDestination());//目的港
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getPlannedDeliveryStart()), Order::getPlannedDeliveryDate,order.getPlannedDeliveryStart());//计划交货开始
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getPlannedDeliveryEnd()), Order::getPlannedDeliveryDate,order.getPlannedDeliveryEnd());//计划交货结束
|
|
|
+ lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderRemark()),Order::getOrderRemark,order.getOrderRemark());//备注
|
|
|
+ lambdaQueryWrapper.orderByDesc(Order::getId);
|
|
|
+ IPage<Order> page = orderService.page(Condition.getPage(query), lambdaQueryWrapper);
|
|
|
+ if (CollectionUtils.isNotEmpty(page.getRecords())){
|
|
|
+ page.getRecords().stream().forEach(item ->{
|
|
|
+ if (item.getCorpId() != null){
|
|
|
+ R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());//客户
|
|
|
+ if (corpMessage.isSuccess() && corpMessage.getData() != null){
|
|
|
+ item.setCorpsName(corpMessage.getData().getCname());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (item.getBelongToCorpId() != null){
|
|
|
+ R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getBelongToCorpId());//销售公司
|
|
|
+ if (corpMessage.isSuccess() && corpMessage.getData() != null){
|
|
|
+ item.setBelongToCorpName(corpMessage.getData().getCname());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ R<User> user = userClient.userInfoById(item.getCreateUser());//制单人
|
|
|
+ if (user.isSuccess() && user.getData() != null){
|
|
|
+ item.setCreateUserName(user.getData().getName());
|
|
|
+ }
|
|
|
+ //获取订单明细
|
|
|
+ List<OrderItems> list = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", item.getId()).eq("is_deleted", 0));
|
|
|
+ if (CollectionUtils.isNotEmpty(list)){
|
|
|
+ item.setOrderQuantity(list.stream().map(OrderItems::getOrderQuantity).reduce(BigDecimal.ZERO,BigDecimal::add));//数量合计
|
|
|
+ item.setAmount(list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));//销售金额
|
|
|
+ item.setPurchaseAmount(list.stream().map(OrderItems::getPurchaseAmount).reduce(BigDecimal.ZERO,BigDecimal::add));//采购金额
|
|
|
+ item.setActualQuantity(list.stream().map(OrderItems::getActualQuantity).reduce(BigDecimal.ZERO,BigDecimal::add));//发货数量
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ exportOrderExcels = JSON.parseArray(JSON.toJSONString(page.getRecords()), ExportOrderExcel.class);
|
|
|
+ }
|
|
|
+ ExcelUtil.export(response, "销售订单", "销售订单", exportOrderExcels, ExportOrderExcel.class);
|
|
|
+ }
|
|
|
}
|