【小程序毕设】家乡扶贫助农小程序 uni-app|微信小程序|安卓 计算机毕业设计项目 微信小程序开发工具部署 附源码+文档+讲解

50 阅读6分钟

一、个人简介

  • 💖💖作者:计算机编程果茶熊
  • 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
  • 💛💛想说的话:感谢大家的关注与支持!
  • 💜💜
  • 网站实战项目
  • 安卓/小程序实战项目
  • 大数据实战项目
  • 计算机毕业设计选题
  • 💕💕文末获取源码联系计算机编程果茶熊

二、系统介绍

  • 后端开发语言:Java
  • 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)
  • 前端:微信小程序
  • 数据库:MySQL
  • 系统架构:C/S
  • 开发工具:微信小程序开发工具

家乡扶贫助农小程序是基于微信生态构建的乡村振兴数字化平台,采用Spring Boot框架作为后端核心,结合MySQL数据库实现数据持久化存储。该系统通过微信小程序为载体,为农户、消费者和管理员提供便捷的线上服务。系统涵盖用户管理、商品分类管理、农产品管理、扶贫项目管理、系统管理、订单管理和个人中心七大核心功能模块。用户管理模块负责农户和消费者的注册认证与权限分配,商品分类管理为农产品提供科学的分类体系,农产品管理模块支持农户发布展示自家产品信息,扶贫项目管理整合当地扶贫资源并提供项目跟踪功能。订单管理模块处理交易流程,确保买卖双方权益,个人中心为用户提供个性化服务界面。整个系统通过C/S架构设计,确保数据传输的稳定性和安全性,为促进农村电商发展和精准扶贫工作提供技术支撑。

三、视频解说

家乡扶贫助农小程序-视频

四、部分功能展示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、部分代码展示


import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
public class CoreFunctionService {
    private SparkSession spark = SparkSession.builder().appName("PovertyReliefSystem").master("local[*]").getOrCreate();
    @Service
    @Transactional
    public class ProductManagementService {
        public ProductManagementResult addProduct(ProductInfo productInfo) {
            if (productInfo.getProductName() == null || productInfo.getProductName().trim().isEmpty()) {
                return new ProductManagementResult(false, "产品名称不能为空");
            }
            if (productInfo.getPrice() <= 0) {
                return new ProductManagementResult(false, "产品价格必须大于0");
            }
            if (productInfo.getStock() < 0) {
                return new ProductManagementResult(false, "库存数量不能为负数");
            }
            Product existingProduct = productMapper.findByNameAndFarmerId(productInfo.getProductName(), productInfo.getFarmerId());
            if (existingProduct != null) {
                return new ProductManagementResult(false, "该农户已存在同名产品");
            }
            Product product = new Product();
            product.setProductName(productInfo.getProductName());
            product.setDescription(productInfo.getDescription());
            product.setPrice(productInfo.getPrice());
            product.setStock(productInfo.getStock());
            product.setCategoryId(productInfo.getCategoryId());
            product.setFarmerId(productInfo.getFarmerId());
            product.setImages(String.join(",", productInfo.getImages()));
            product.setStatus(ProductStatus.PENDING_REVIEW);
            product.setCreateTime(new Date());
            product.setUpdateTime(new Date());
            try {
                int result = productMapper.insertProduct(product);
                if (result > 0) {
                    logService.addOperationLog("产品管理", "添加产品", "成功添加产品:" + product.getProductName());
                    Dataset<Row> productData = spark.sql("SELECT * FROM products WHERE farmer_id = " + productInfo.getFarmerId());
                    long totalProducts = productData.count();
                    if (totalProducts > 10) {
                        farmerService.updateFarmerLevel(productInfo.getFarmerId(), "高级农户");
                    }
                    return new ProductManagementResult(true, "产品添加成功", product.getId());
                } else {
                    return new ProductManagementResult(false, "产品添加失败");
                }
            } catch (Exception e) {
                logService.addErrorLog("产品管理", "添加产品失败", e.getMessage());
                throw new RuntimeException("产品添加过程中发生异常", e);
            }
        }
        public ProductManagementResult updateProductStock(Long productId, Integer newStock, String operationType) {
            if (productId == null || productId <= 0) {
                return new ProductManagementResult(false, "产品ID无效");
            }
            if (newStock < 0) {
                return new ProductManagementResult(false, "库存数量不能为负数");
            }
            Product product = productMapper.findById(productId);
            if (product == null) {
                return new ProductManagementResult(false, "产品不存在");
            }
            Integer oldStock = product.getStock();
            product.setStock(newStock);
            product.setUpdateTime(new Date());
            if (newStock == 0) {
                product.setStatus(ProductStatus.OUT_OF_STOCK);
            } else if (product.getStatus() == ProductStatus.OUT_OF_STOCK) {
                product.setStatus(ProductStatus.AVAILABLE);
            }
            try {
                int result = productMapper.updateProduct(product);
                if (result > 0) {
                    StockRecord stockRecord = new StockRecord();
                    stockRecord.setProductId(productId);
                    stockRecord.setOldStock(oldStock);
                    stockRecord.setNewStock(newStock);
                    stockRecord.setOperationType(operationType);
                    stockRecord.setOperationTime(new Date());
                    stockRecordMapper.insertStockRecord(stockRecord);
                    logService.addOperationLog("库存管理", "更新库存", "产品ID:" + productId + ",原库存:" + oldStock + ",新库存:" + newStock);
                    return new ProductManagementResult(true, "库存更新成功");
                } else {
                    return new ProductManagementResult(false, "库存更新失败");
                }
            } catch (Exception e) {
                logService.addErrorLog("库存管理", "更新库存失败", e.getMessage());
                throw new RuntimeException("库存更新过程中发生异常", e);
            }
        }
    }
    @Service
    @Transactional
    public class PovertyReliefProjectService {
        public ProjectManagementResult createProject(ProjectCreationRequest request) {
            if (request.getProjectName() == null || request.getProjectName().trim().isEmpty()) {
                return new ProjectManagementResult(false, "项目名称不能为空");
            }
            if (request.getTargetAmount() <= 0) {
                return new ProjectManagementResult(false, "目标金额必须大于0");
            }
            if (request.getStartDate().after(request.getEndDate())) {
                return new ProjectManagementResult(false, "开始时间不能晚于结束时间");
            }
            if (request.getBeneficiaryCount() <= 0) {
                return new ProjectManagementResult(false, "受益人数必须大于0");
            }
            PovertyReliefProject existingProject = projectMapper.findByName(request.getProjectName());
            if (existingProject != null) {
                return new ProjectManagementResult(false, "项目名称已存在");
            }
            PovertyReliefProject project = new PovertyReliefProject();
            project.setProjectName(request.getProjectName());
            project.setDescription(request.getDescription());
            project.setTargetAmount(request.getTargetAmount());
            project.setCurrentAmount(BigDecimal.ZERO);
            project.setStartDate(request.getStartDate());
            project.setEndDate(request.getEndDate());
            project.setBeneficiaryCount(request.getBeneficiaryCount());
            project.setProjectType(request.getProjectType());
            project.setRegion(request.getRegion());
            project.setStatus(ProjectStatus.PENDING_APPROVAL);
            project.setCreateTime(new Date());
            project.setUpdateTime(new Date());
            project.setCreatorId(request.getCreatorId());
            try {
                int result = projectMapper.insertProject(project);
                if (result > 0) {
                    ProjectProgress initialProgress = new ProjectProgress();
                    initialProgress.setProjectId(project.getId());
                    initialProgress.setProgressDescription("项目创建成功,等待审批");
                    initialProgress.setProgressDate(new Date());
                    initialProgress.setProgressPercentage(0);
                    projectProgressMapper.insertProgress(initialProgress);
                    logService.addOperationLog("扶贫项目", "创建项目", "成功创建项目:" + project.getProjectName());
                    Dataset<Row> projectAnalysis = spark.sql("SELECT project_type, COUNT(*) as count FROM poverty_relief_projects GROUP BY project_type");
                    projectAnalysis.show();
                    notificationService.sendProjectCreationNotification(project);
                    return new ProjectManagementResult(true, "项目创建成功", project.getId());
                } else {
                    return new ProjectManagementResult(false, "项目创建失败");
                }
            } catch (Exception e) {
                logService.addErrorLog("扶贫项目", "创建项目失败", e.getMessage());
                throw new RuntimeException("项目创建过程中发生异常", e);
            }
        }
        public ProjectManagementResult donateToProject(Long projectId, BigDecimal donationAmount, Long donorId) {
            if (projectId == null || projectId <= 0) {
                return new ProjectManagementResult(false, "项目ID无效");
            }
            if (donationAmount.compareTo(BigDecimal.ZERO) <= 0) {
                return new ProjectManagementResult(false, "捐款金额必须大于0");
            }
            if (donationAmount.compareTo(new BigDecimal("100000")) > 0) {
                return new ProjectManagementResult(false, "单次捐款金额不能超过10万元");
            }
            PovertyReliefProject project = projectMapper.findById(projectId);
            if (project == null) {
                return new ProjectManagementResult(false, "项目不存在");
            }
            if (project.getStatus() != ProjectStatus.ACTIVE) {
                return new ProjectManagementResult(false, "项目当前状态不允许捐款");
            }
            if (new Date().after(project.getEndDate())) {
                return new ProjectManagementResult(false, "项目已结束,不能继续捐款");
            }
            User donor = userMapper.findById(donorId);
            if (donor == null || donor.getAccountBalance().compareTo(donationAmount) < 0) {
                return new ProjectManagementResult(false, "账户余额不足");
            }
            try {
                BigDecimal newCurrentAmount = project.getCurrentAmount().add(donationAmount);
                project.setCurrentAmount(newCurrentAmount);
                project.setUpdateTime(new Date());
                if (newCurrentAmount.compareTo(project.getTargetAmount()) >= 0) {
                    project.setStatus(ProjectStatus.COMPLETED);
                }
                int projectUpdateResult = projectMapper.updateProject(project);
                if (projectUpdateResult <= 0) {
                    throw new RuntimeException("项目金额更新失败");
                }
                donor.setAccountBalance(donor.getAccountBalance().subtract(donationAmount));
                int donorUpdateResult = userMapper.updateUser(donor);
                if (donorUpdateResult <= 0) {
                    throw new RuntimeException("捐赠者余额更新失败");
                }
                DonationRecord donationRecord = new DonationRecord();
                donationRecord.setProjectId(projectId);
                donationRecord.setDonorId(donorId);
                donationRecord.setDonationAmount(donationAmount);
                donationRecord.setDonationTime(new Date());
                donationRecord.setStatus("SUCCESS");
                donationRecordMapper.insertDonationRecord(donationRecord);
                BigDecimal progressPercentage = newCurrentAmount.divide(project.getTargetAmount(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100"));
                ProjectProgress progress = new ProjectProgress();
                progress.setProjectId(projectId);
                progress.setProgressDescription("收到捐款 " + donationAmount + " 元");
                progress.setProgressDate(new Date());
                progress.setProgressPercentage(progressPercentage.intValue());
                projectProgressMapper.insertProgress(progress);
                logService.addOperationLog("扶贫捐款", "项目捐款", "用户ID:" + donorId + "向项目ID:" + projectId + "捐款" + donationAmount + "元");
                return new ProjectManagementResult(true, "捐款成功", projectId);
            } catch (Exception e) {
                logService.addErrorLog("扶贫捐款", "捐款失败", e.getMessage());
                throw new RuntimeException("捐款过程中发生异常", e);
            }
        }
    }
    @Service
    @Transactional
    public class OrderManagementService {
        public OrderManagementResult createOrder(OrderCreationRequest request) {
            if (request.getUserId() == null || request.getUserId() <= 0) {
                return new OrderManagementResult(false, "用户ID无效");
            }
            if (request.getOrderItems() == null || request.getOrderItems().isEmpty()) {
                return new OrderManagementResult(false, "订单商品不能为空");
            }
            User user = userMapper.findById(request.getUserId());
            if (user == null) {
                return new OrderManagementResult(false, "用户不存在");
            }
            BigDecimal totalAmount = BigDecimal.ZERO;
            List<OrderItem> validOrderItems = new ArrayList<>();
            for (OrderItemRequest itemRequest : request.getOrderItems()) {
                Product product = productMapper.findById(itemRequest.getProductId());
                if (product == null) {
                    return new OrderManagementResult(false, "商品ID " + itemRequest.getProductId() + " 不存在");
                }
                if (product.getStatus() != ProductStatus.AVAILABLE) {
                    return new OrderManagementResult(false, "商品 " + product.getProductName() + " 当前不可购买");
                }
                if (product.getStock() < itemRequest.getQuantity()) {
                    return new OrderManagementResult(false, "商品 " + product.getProductName() + " 库存不足");
                }
                OrderItem orderItem = new OrderItem();
                orderItem.setProductId(itemRequest.getProductId());
                orderItem.setProductName(product.getProductName());
                orderItem.setQuantity(itemRequest.getQuantity());
                orderItem.setPrice(product.getPrice());
                BigDecimal itemTotal = product.getPrice().multiply(new BigDecimal(itemRequest.getQuantity()));
                orderItem.setSubtotal(itemTotal);
                totalAmount = totalAmount.add(itemTotal);
                validOrderItems.add(orderItem);
            }
            if (user.getAccountBalance().compareTo(totalAmount) < 0) {
                return new OrderManagementResult(false, "账户余额不足,当前余额:" + user.getAccountBalance() + ",需要支付:" + totalAmount);
            }
            String orderNumber = generateOrderNumber();
            Order order = new Order();
            order.setOrderNumber(orderNumber);
            order.setUserId(request.getUserId());
            order.setTotalAmount(totalAmount);
            order.setStatus(OrderStatus.PENDING_PAYMENT);
            order.setCreateTime(new Date());
            order.setUpdateTime(new Date());
            order.setShippingAddress(request.getShippingAddress());
            order.setContactPhone(request.getContactPhone());
            order.setRemark(request.getRemark());
            try {
                int orderResult = orderMapper.insertOrder(order);
                if (orderResult <= 0) {
                    throw new RuntimeException("订单创建失败");
                }
                for (OrderItem orderItem : validOrderItems) {
                    orderItem.setOrderId(order.getId());
                    orderItemMapper.insertOrderItem(orderItem);
                    Product product = productMapper.findById(orderItem.getProductId());
                    product.setStock(product.getStock() - orderItem.getQuantity());
                    if (product.getStock() == 0) {
                        product.setStatus(ProductStatus.OUT_OF_STOCK);
                    }
                    productMapper.updateProduct(product);
                }
                user.setAccountBalance(user.getAccountBalance().subtract(totalAmount));
                userMapper.updateUser(user);
                order.setStatus(OrderStatus.PAID);
                order.setPayTime(new Date());
                orderMapper.updateOrder(order);
                logService.addOperationLog("订单管理", "创建订单", "用户ID:" + request.getUserId() + "创建订单,金额:" + totalAmount);
                Dataset<Row> orderAnalysis = spark.sql("SELECT DATE(create_time) as order_date, SUM(total_amount) as daily_sales FROM orders WHERE DATE(create_time) = CURDATE() GROUP BY DATE(create_time)");
                orderAnalysis.show();
                return new OrderManagementResult(true, "订单创建成功", order.getId(), orderNumber);
            } catch (Exception e) {
                logService.addErrorLog("订单管理", "创建订单失败", e.getMessage());
                throw new RuntimeException("订单创建过程中发生异常", e);
            }
        }
        public OrderManagementResult processOrderShipment(Long orderId, String trackingNumber, String shippingCompany) {
            if (orderId == null || orderId <= 0) {
                return new OrderManagementResult(false, "订单ID无效");
            }
            if (trackingNumber == null || trackingNumber.trim().isEmpty()) {
                return new OrderManagementResult(false, "快递单号不能为空");
            }
            if (shippingCompany == null || shippingCompany.trim().isEmpty()) {
                return new OrderManagementResult(false, "快递公司不能为空");
            }
            Order order = orderMapper.findById(orderId);
            if (order == null) {
                return new OrderManagementResult(false, "订单不存在");
            }
            if (order.getStatus() != OrderStatus.PAID) {
                return new OrderManagementResult(false, "订单状态不允许发货,当前状态:" + order.getStatus());
            }
            try {
                order.setStatus(OrderStatus.SHIPPED);
                order.setTrackingNumber(trackingNumber);
                order.setShippingCompany(shippingCompany);
                order.setShipTime(new Date());
                order.setUpdateTime(new Date());
                int updateResult = orderMapper.updateOrder(order);
                if (updateResult <= 0) {
                    throw new RuntimeException("订单状态更新失败");
                }
                OrderStatusHistory statusHistory = new OrderStatusHistory();
                statusHistory.setOrderId(orderId);
                statusHistory.setOldStatus(OrderStatus.PAID.toString());
                statusHistory.setNewStatus(OrderStatus.SHIPPED.toString());
                statusHistory.setChangeTime(new Date());
                statusHistory.setRemark("订单已发货,快递公司:" + shippingCompany + ",快递单号:" + trackingNumber);
                orderStatusHistoryMapper.insertStatusHistory(statusHistory);
                User user = userMapper.findById(order.getUserId());
                if (user != null) {
                    notificationService.sendShipmentNotification(user.getPhone(), order.getOrderNumber(), trackingNumber, shippingCompany);
                }
                logService.addOperationLog("订单管理", "订单发货", "订单号:" + order.getOrderNumber() + ",快递公司:" + shippingCompany + ",快递单号:" + trackingNumber);
                return new OrderManagementResult(true, "订单发货成功", orderId);
            } catch (Exception e) {
                logService.addErrorLog("订单管理", "订单发货失败", e.getMessage());
                throw new RuntimeException("订单发货过程中发生异常", e);
            }
        }
        private String generateOrderNumber() {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
            String timeStr = sdf.format(new Date());
            String randomStr = String.valueOf((int) (Math.random() * 9000) + 1000);
            return "ORD" + timeStr + randomStr;
        }
    }
}

六、部分文档展示

在这里插入图片描述

七、END

💕💕文末获取源码联系计算机编程果茶熊