| | |
| | | import com.ruoyi.framework.web.domain.AjaxResult; |
| | | import com.ruoyi.project.system.domain.SysUser; |
| | | import com.ruoyi.sales.mapper.SalesLedgerMapper; |
| | | import com.ruoyi.sales.mapper.SalesLedgerProductMapper; |
| | | import com.ruoyi.sales.pojo.SalesLedger; |
| | | import com.ruoyi.sales.pojo.SalesLedgerProduct; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | |
| | | @Slf4j |
| | | public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> implements ICustomerService { |
| | | private final SalesLedgerMapper salesLedgerMapper; |
| | | private final SalesLedgerProductMapper salesLedgerProductMapper; |
| | | private CustomerMapper customerMapper; |
| | | |
| | | /** |
| | |
| | | if (latestLedger != null) { |
| | | c.setLatestPurchaseTime(latestLedger.getExecutionDate()); |
| | | } |
| | | |
| | | // 计算常购产品(top 3) |
| | | List<SalesLedgerProduct> allProducts = new ArrayList<>(); |
| | | for (SalesLedger ledger : salesLedgers) { |
| | | List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList( |
| | | new QueryWrapper<SalesLedgerProduct>().lambda() |
| | | .eq(SalesLedgerProduct::getSalesLedgerId, ledger.getId()) |
| | | ); |
| | | if (!CollectionUtils.isEmpty(products)) { |
| | | allProducts.addAll(products); |
| | | } |
| | | } |
| | | |
| | | if (!CollectionUtils.isEmpty(allProducts)) { |
| | | // 按产品类别和规格型号分组,统计购买次数 |
| | | Map<String, Long> productCountMap = allProducts.stream() |
| | | .collect(Collectors.groupingBy( |
| | | p -> p.getProductCategory() + "-" + p.getSpecificationModel(), |
| | | Collectors.counting() |
| | | )); |
| | | |
| | | // 排序并取前3 |
| | | List<String> topProducts = productCountMap.entrySet().stream() |
| | | .sorted(Map.Entry.<String, Long>comparingByValue().reversed()) |
| | | .limit(3) |
| | | .map(Map.Entry::getKey) |
| | | .collect(Collectors.toList()); |
| | | |
| | | c.setTopProducts(topProducts); |
| | | } else { |
| | | c.setTopProducts(new ArrayList<>()); |
| | | } |
| | | } else { |
| | | // 没有销售记录时设置默认值 |
| | | c.setPurchaseCount(0); |
| | | c.setAverageAmount(BigDecimal.ZERO); |
| | | c.setLatestPurchaseTime(null); |
| | | c.setTopProducts(new ArrayList<>()); |
| | | } |
| | | }) |
| | | .collect(Collectors.toList()); |