| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.account.mapper.AccountIncomeMapper; |
| | | import com.ruoyi.account.pojo.AccountExpense; |
| | |
| | | import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper; |
| | | import com.ruoyi.production.pojo.ProductProcess; |
| | | import com.ruoyi.production.pojo.ProductWorkOrder; |
| | | import com.ruoyi.productionPlan.enums.AddressRegionEnum; |
| | | import com.ruoyi.productionPlan.mapper.SalesDeliveryMapper; |
| | | import com.ruoyi.productionPlan.pojo.SalesDelivery; |
| | | import com.ruoyi.project.system.domain.SysDept; |
| | | import com.ruoyi.project.system.mapper.SysDeptMapper; |
| | | import com.ruoyi.purchase.mapper.PaymentRegistrationMapper; |
| | |
| | | |
| | | @Autowired |
| | | private ProductProcessMapper productProcessMapper; |
| | | |
| | | |
| | | @Autowired |
| | | private AccountExpenseMapper accountExpenseMapper; |
| | | |
| | | @Autowired |
| | | private AccountIncomeMapper accountIncomeMapper; |
| | | |
| | | @Autowired |
| | | private SalesDeliveryMapper salesDeliveryMapper; |
| | | |
| | | @Override |
| | | public HomeBusinessDto business() { |
| | |
| | | LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.ge(PurchaseLedger::getEntryDate, currentMonth.atDay(1).atStartOfDay()) // 大于等于本月第一天 |
| | | .lt(PurchaseLedger::getEntryDate, currentMonth.plusMonths(1).atDay(1).atStartOfDay()); // 小于下月第一天 |
| | | // 执行查询并计算总和 |
| | | |
| | | List<PurchaseLedger> purchaseLedgers = purchaseLedgerMapper.selectList(queryWrapper); |
| | | if (!CollectionUtils.isEmpty(purchaseLedgers)) { |
| | | LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<SalesLedgerProduct>(); |
| | | salesLedgerProductMapperLambdaQueryWrapperCopy.eq(SalesLedgerProduct::getType, 2) |
| | | LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductMapperLambdaQueryWrapperCopy = new LambdaQueryWrapper<>(); |
| | | salesLedgerProductMapperLambdaQueryWrapperCopy.eq(SalesLedgerProduct::getType, 2) // 采购类型 |
| | | .in(SalesLedgerProduct::getSalesLedgerId, |
| | | purchaseLedgers.stream().map(PurchaseLedger::getId).collect(Collectors.toList())); |
| | | |
| | | List<SalesLedgerProduct> salesLedgerProductsCopy = salesLedgerProductMapper |
| | | .selectList(salesLedgerProductMapperLambdaQueryWrapperCopy); |
| | | // 合计合同金额 |
| | | |
| | | // 合计合同总金额 |
| | | BigDecimal receiveAmount = purchaseLedgers.stream() |
| | | .map(PurchaseLedger::getContractAmount) |
| | | .filter(Objects::nonNull) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | // 未开票金额 |
| | | |
| | | // 待付款总金额 |
| | | BigDecimal unReceiptPaymentAmount = salesLedgerProductsCopy.stream() |
| | | .map(SalesLedgerProduct::getNoInvoiceAmount) |
| | | .map(SalesLedgerProduct::getPendingTicketsTotal) |
| | | .filter(Objects::nonNull) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | |
| | | homeBusinessDto.setMonthPurchaseMoney(receiveAmount.setScale(2, RoundingMode.HALF_UP).toString()); |
| | | homeBusinessDto |
| | | .setMonthPurchaseHaveMoney(unReceiptPaymentAmount.setScale(2, RoundingMode.HALF_UP).toString()); |
| | | homeBusinessDto.setMonthPurchaseHaveMoney(unReceiptPaymentAmount.setScale(2, RoundingMode.HALF_UP).toString()); |
| | | } |
| | | // 统计库存 |
| | | BigDecimal stockQuantityTotal = stockInventoryMapper.selectTotal(); |
| | |
| | | |
| | | return productProcessMapper.calculateProductionStatistics(startDateTime, endDateTime, userId, processIds); |
| | | } |
| | | |
| | | @Override |
| | | public Map<String, Long> total() { |
| | | Map<String, Long> map = new HashMap<>(); |
| | | //总销售金额 |
| | | List<SalesDelivery> salesDeliveries = salesDeliveryMapper.selectList(null); |
| | | long sum = salesDeliveries.stream().mapToLong(value -> Long.parseLong(value.getPrice().toString())).sum(); |
| | | map.put("price",sum/1000);//单位w |
| | | //总发货单 |
| | | map.put("delivery",salesDeliveries.stream().count()); |
| | | //总销售区? |
| | | //累计客户 |
| | | Long count = customerMapper.selectCount(null); |
| | | map.put("customer",count); |
| | | return map; |
| | | } |
| | | |
| | | @Override |
| | | public String salesAnalysis(SalesDeliveryDto salesDeliveryDto) { |
| | | List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays()); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String salesRanking(SalesDeliveryDto salesDeliveryDto) { |
| | | List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays()); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String salesAmount(SalesDeliveryDto salesDeliveryDto) { |
| | | List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays()); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public String salesDataRanking(SalesDeliveryDto salesDeliveryDto) { |
| | | List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays()); |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public SalesTotalDto customerTrends(SalesDeliveryDto salesDeliveryDto) { |
| | | SalesTotalDto salesTotalDto = new SalesTotalDto(); |
| | | List<LocalDate> dates = convertDateList(salesDeliveryDto.getDays()); |
| | | List<Map<String, Long>> maps = new ArrayList<>(); |
| | | for (LocalDate date : dates) { |
| | | LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); |
| | | LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); |
| | | Date startDate = Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant()); |
| | | Date endDate = Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); |
| | | List<Customer> customers = customerMapper.selectList(Wrappers.<Customer>lambdaQuery() |
| | | .between(Customer::getMaintenanceTime, startDate, endDate)); |
| | | Map<String, Long> regionCountMap = Arrays.stream(AddressRegionEnum.values()) |
| | | .filter(addressRegionEnum -> addressRegionEnum.getRegionName().equals("SELF_PICKUP")) |
| | | .collect(Collectors.toMap( |
| | | AddressRegionEnum::getRegionName, // 区域名作为key |
| | | enumItem -> 0L // 初始值全部为0 |
| | | )); |
| | | if (!CollectionUtils.isEmpty(customers)) { |
| | | regionCountMap = customers.stream() |
| | | // 调用方法将原始地址转换为目标区域 |
| | | .map(customer -> AddressRegionEnum.matchRegion(customer.getCompanyAddress()).getRegionName()) |
| | | // 过滤掉转换失败/空的区域(可选,根据业务需求) |
| | | .filter(region -> region != null && !region.isEmpty()) |
| | | // 按区域分组,统计每个区域的数量 |
| | | .collect(Collectors.groupingBy( |
| | | region -> region, // 分组依据:转换后的区域 |
| | | Collectors.counting() // 计数 |
| | | )); |
| | | } |
| | | regionCountMap.put("ALLIN",customers.stream().count()); |
| | | maps.add(regionCountMap); |
| | | } |
| | | salesTotalDto.setDates(dates); |
| | | salesTotalDto.setCustomerTrends(maps); |
| | | return salesTotalDto; |
| | | } |
| | | |
| | | /** |
| | | * 根据前端传参 年/月 转换为对应LocalDate列表 |
| | | * @param days 前端参数:"年" / "月" |
| | | * @return List<LocalDate> |
| | | */ |
| | | public static List<LocalDate> convertDateList(String days) { |
| | | List<LocalDate> resultList = new ArrayList<>(); |
| | | LocalDate now = LocalDate.now(); |
| | | int currentYear = now.getYear(); |
| | | |
| | | if ("年".equals(days)) { |
| | | // 需求:近5年 → 每年的 1月1日 |
| | | for (int i = 0; i < 5; i++) { |
| | | resultList.add(LocalDate.of(currentYear - i, 1, 1)); |
| | | } |
| | | } else if ("月".equals(days)) { |
| | | // 需求:当年12个月 → 每月1日 |
| | | for (int month = 1; month <= 12; month++) { |
| | | resultList.add(LocalDate.of(currentYear, month, 1)); |
| | | } |
| | | } |
| | | return resultList; |
| | | } |
| | | } |