springboot vue 开源 会员收银系统 (7) 收银台的完善 新增开卡 结算

前言

完整版演示
开发版演示

在前面的开发中,我们成功完成了商品分类和商品信息的搭建,开发了收银台基础。现在,我们将进一步完善收银台的功能,添加开卡和结算功能,并在后台实现会员卡的创建和订单保存。同时,我们还将保存页面vue data数据用于修改订单

1.收银台添加开卡功能 后期不仅限开发 还有续卡 套餐…开卡
结算
2.结算后需要生成订单在此注意几个订单的问题

  • 需要有主订单表 一个订单有多个商品需要创建一个订单详情表与之关联
  • 还需要创建一个支付方式表 一个订单有多种支付方式
  • 订单表需要关联会员id便于筛查和查询消费记录
  • 添加状态字段用于消单、改单 (并创建一个表保存当前vue实例的data用于修改订单)

以下为相关表格

CREATE TABLE `business_sell` (
  `SELL_ID` varchar(32) NOT NULL COMMENT '订单id',
  `SELL_NO` varchar(255) DEFAULT NULL COMMENT '订单号',
  `SERIAL_NO` varchar(32) DEFAULT NULL COMMENT '流水号',
  `MEMBER_ID` varchar(32) DEFAULT NULL COMMENT '会员ID',
  `MEMBER_NAME` varchar(255) DEFAULT NULL COMMENT '会员名称',
  `MEMBER_CARD_ID` varchar(32) DEFAULT NULL COMMENT '会员卡id',
  `SELL_AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '消费金额',
  `REAL_AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '实际入账',
  `SELL_TYPE` tinyint(2) DEFAULT NULL COMMENT '1开卡 2续卡 3项目/卖品',
  `SELL_STATUS` tinyint(2) DEFAULT '0' COMMENT '0正常 1取消',
  `DELETED` tinyint(2) DEFAULT '0' COMMENT '0正常 1删除',
  `VERSION` bigint(10) DEFAULT '0' COMMENT '乐观锁字段',
  `SHOP_ID` varchar(32) DEFAULT NULL COMMENT '门店id',
  `SHOP_NAME` varchar(255) DEFAULT NULL COMMENT '门店名',
  `CREATE_NAME` varchar(255) DEFAULT NULL COMMENT '创建人',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
  `CREATE_ID` varchar(32) DEFAULT NULL COMMENT '创建人id',
  `UPDATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `UPDATE_NAME` varchar(255) DEFAULT NULL COMMENT '修改人',
  `UPDATE_ID` varchar(32) DEFAULT NULL COMMENT '修改人id',
  `MEMBER_CARD_AFTER_AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '消费后金额',
  `MEMBER_CARD_BEFORE_AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '消费前赠送金额',
  `MEMBER_CARD_BEFORE_GIVE_AMOUNT` decimal(10,2) DEFAULT NULL,
  `MEMBER_CARD_AFTER_GIVE_AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '消费后赠送金额',
  PRIMARY KEY (`SELL_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单';


CREATE TABLE `business_sell_detail` (
  `SELL_DETAIL_ID` varchar(32) NOT NULL COMMENT '销售细单id',
  `MEMBER_ID` varchar(32) DEFAULT NULL COMMENT '会员id',
  `SELL_ID` varchar(32) DEFAULT NULL COMMENT '订单id',
  `SELL_TYPE` tinyint(2) DEFAULT NULL COMMENT '1开卡 2续卡 3项目 4卖品',
  `MEMBER_CARD_ID` varchar(32) DEFAULT NULL COMMENT '会员卡id',
  `PRODUCT_ID` varchar(32) DEFAULT NULL COMMENT '商品ID',
  `PRODUCT_NAME` varchar(255) DEFAULT NULL COMMENT '商品名',
  `COUNT` int(10) DEFAULT '1' COMMENT '商品数量',
  `DISCOUNT` decimal(10,2) DEFAULT NULL COMMENT '折扣',
  `AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '金额',
  `REAL_AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '实际金额',
  `CARD_ID` varchar(32) DEFAULT NULL COMMENT '卡项ID',
  `CARD_NAME` varchar(255) DEFAULT NULL COMMENT '卡名',
  `GIVE_AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '赠送金额',
  `SHOP_ID` varchar(32) DEFAULT NULL COMMENT '门店id',
  `SHOP_NAME` varchar(255) DEFAULT NULL COMMENT '门店名',
  `CREATE_NAME` varchar(255) DEFAULT NULL COMMENT '创建人',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
  `CREATE_ID` varchar(32) DEFAULT NULL COMMENT '创建人id',
  `UPDATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `UPDATE_NAME` varchar(255) DEFAULT NULL COMMENT '修改人',
  `UPDATE_ID` varchar(32) DEFAULT NULL COMMENT '修改人id',
  `SELL_STATUS` tinyint(2) DEFAULT '0' COMMENT '0正常 1取消',
  PRIMARY KEY (`SELL_DETAIL_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单详情';


CREATE TABLE `business_sellpay` (
  `SELL_PAY_ID` varchar(32) NOT NULL COMMENT '支付id',
  `SELL_ID` varchar(32) DEFAULT NULL COMMENT '销售单id',
  `PAY_NAME` varchar(255) DEFAULT NULL COMMENT '支付方式名称',
  `PAY_TYPE` tinyint(2) DEFAULT NULL COMMENT '1.卡金 2.扫码 3.现金  888.优惠 ',
  `AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '金额',
  PRIMARY KEY (`SELL_PAY_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单支付';

CREATE TABLE `business_selljson` (
  `JSON_ID` varchar(32) NOT NULL,
  `SELL_ID` varchar(32) DEFAULT NULL COMMENT '订单id',
  `SELL_JSON` json DEFAULT NULL COMMENT '获得下订单时的JSON',
  PRIMARY KEY (`JSON_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单json';


3.订单创建完毕后还需要创建会员卡
这样后续就可以选择会员卡卡金支付了

CREATE TABLE `business_member_card` (
  `MEMBER_CARD_ID` varchar(32) NOT NULL COMMENT '会员卡id',
  `MEMBER_ID` varchar(32) DEFAULT NULL COMMENT '会员id',
  `CARD_ID` varchar(32) DEFAULT NULL COMMENT '卡项ID',
  `CARD_NO` varchar(255) DEFAULT NULL COMMENT '卡号',
  `CARD_NAME` varchar(255) DEFAULT NULL COMMENT '卡名称',
  `AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '余额',
  `GIVE_AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '赠送金额',
  `DISCOUNT` decimal(10,2) DEFAULT NULL COMMENT '商品折扣',
  `BUILD_CARD_AMOUNT` decimal(10,2) DEFAULT NULL COMMENT '开卡金额',
  `PUSH_MONEY` decimal(10,2) DEFAULT NULL COMMENT '提成比例',
  `CARD_STATUS` tinyint(2) DEFAULT '0' COMMENT '0正常 1取消',
  `DELETED` tinyint(2) DEFAULT '0' COMMENT '0正常 1删除',
  `VERSION` bigint(10) DEFAULT '0' COMMENT '乐观锁字段',
  `SHOP_ID` varchar(32) DEFAULT NULL COMMENT '门店id',
  `SHOP_NAME` varchar(255) DEFAULT NULL COMMENT '门店名',
  `CREATE_NAME` varchar(255) DEFAULT NULL COMMENT '创建人',
  `CREATE_TIME` datetime DEFAULT NULL COMMENT '创建时间',
  `CREATE_ID` varchar(32) DEFAULT NULL COMMENT '创建人id',
  `UPDATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `UPDATE_NAME` varchar(255) DEFAULT NULL COMMENT '修改人',
  `UPDATE_ID` varchar(32) DEFAULT NULL COMMENT '修改人id',
  PRIMARY KEY (`MEMBER_CARD_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员卡';


package com.dd.admin.business.pay.service.impl;

import com.dd.admin.business.card.entity.Card;
import com.dd.admin.business.card.service.CardService;
import com.dd.admin.business.memberCard.domain.MemberCardVo;
import com.dd.admin.business.memberCard.entity.MemberCard;
import com.dd.admin.business.memberCard.service.MemberCardService;
import com.dd.admin.business.pay.domain.BaseSell;
import com.dd.admin.business.pay.domain.BuildCardForm;
import com.dd.admin.business.pay.domain.BuildCardSell;
import com.dd.admin.business.pay.service.AddSellDetailService;
import com.dd.admin.business.sell.entity.Sell;
import com.dd.admin.business.sell.service.SellService;
import com.dd.admin.business.sellDetail.entity.SellDetail;
import com.dd.admin.business.sellDetail.service.SellDetailService;
import com.dd.admin.business.sellPay.entity.Sellpay;
import com.dd.admin.business.sellPay.service.SellpayService;
import com.dd.admin.common.exception.ApiException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;

import static com.dd.admin.business.pay.enmus.CashierExceptionEnum.CARDNO_ALREADY_EXIST;

@Service
public class SellDetailBuildCard implements AddSellDetailService {

    @Autowired
    private CardService cardService;
    @Autowired
    private MemberCardService memberCardService;
    @Autowired
    private SellDetailService sellDetailService;
    @Autowired
    private SellpayService sellpayService;
    @Autowired
    private SellService sellService;

    @Override
    public void addSellDetail(Sell sell, BaseSell sellDto) {
        //转换数据
        BuildCardSell buildCardSell = (BuildCardSell) sellDto;
        // 1 获取开卡金额 等信息 先开卡
        String cardId = buildCardSell.getBuildCardForm().getCardId();
        //获取需要的开卡信息
        Card card = cardService.getById(cardId);
        //开卡
        MemberCard memberCard = buildMemberCard(sell, buildCardSell.getBuildCardForm(), card);
        //2生成销售细单
        SellDetail sellDetail = addSellDetail(sell,buildCardSell,memberCard);
        //添加支付方式
        sellpayService.addSellPayList(buildCardSell.getSellPayList(),sell.getSellId());

        //4因为是开卡还要设置额外信息
        Sell extraSellInfo = new Sell();
        extraSellInfo.setSellId(sell.getSellId());

        //设置会员信息
        extraSellInfo.setMemberId(buildCardSell.getMemberId());
        extraSellInfo.setMemberName(buildCardSell.getMemberName());
        //设置订单的卡信息
        extraSellInfo.setMemberCardId(memberCard.getMemberCardId());
        //设置订单的卡余额
        extraSellInfo.setMemberCardBeforeAmount(BigDecimal.ZERO);
        extraSellInfo.setMemberCardBeforeGiveAmount(BigDecimal.ZERO);

        extraSellInfo.setMemberCardAfterAmount(memberCard.getAmount());
        extraSellInfo.setMemberCardAfterGiveAmount(memberCard.getGiveAmount());

        sellService.updateById(extraSellInfo);
    }

    MemberCard buildMemberCard(Sell sell, BuildCardForm buildCardForm, Card card){
        //设置卡的基本和余额信息
        MemberCard memberCard = new MemberCard();
        memberCard.setMemberId(sell.getMemberId());
        memberCard.setCardId(card.getCardId());
        memberCard.setCardName(card.getCardName());

        String cardNo = buildCardForm.getCardNo();
        MemberCardVo membercardVo =  memberCardService.selectOneByCardNo(cardNo);
        if(membercardVo!=null){
            throw new ApiException(CARDNO_ALREADY_EXIST);
        }
        memberCard.setCardNo(buildCardForm.getCardNo());
        memberCard.setAmount(buildCardForm.getCardAmount());
        memberCard.setBuildCardAmount(buildCardForm.getCardAmount());
        memberCard.setGiveAmount(buildCardForm.getGiveAmount());

        //获取订单的卡折扣信息 设置进会员卡中
        memberCard.setDiscount(card.getCardDiscount());

        //设置该卡的提成金额
        memberCard.setPushMoney(card.getCardPushPercent());

        memberCardService.save(memberCard);
        return memberCard;
    }

    SellDetail addSellDetail(Sell sell,BuildCardSell buildCardSell,MemberCard membercard){
        BuildCardForm buildCardForm = buildCardSell.getBuildCardForm();
        SellDetail sellDetail = new SellDetail();
        //3设置订单id 订单类型 订单状态
        sellDetail.setSellId(sell.getSellId());
        sellDetail.setSellType(sell.getSellType());
        sellDetail.setMemberId(sell.getMemberId());
        //设置商品信息
        sellDetail.setCardId(buildCardForm.getCardId());
        sellDetail.setCardName(buildCardForm.getCardName());
        sellDetail.setAmount(buildCardForm.getCardAmount());
        sellDetail.setGiveAmount(buildCardForm.getGiveAmount());
        sellDetail.setRealAmount(sell.getRealAmount());

        //设置会员信息
        sellDetail.setMemberCardId(membercard.getMemberCardId());

        //开卡后卡金和赠送金
        sellDetail.setAmount(membercard.getAmount());
        sellDetail.setGiveAmount(membercard.getGiveAmount());

        //保存销售细单
        sellDetailService.save(sellDetail);
        return sellDetail;
    }

}

后续我们需要完成收银台的选择会员卡支付
订单管理功能

代码地址
https://gitee.com/ddeatrr/memberShop

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring BootVue.js都是非常流行的开源项目,它们分别用于后端和前端开发。有很多基于这两个项目的开源项目,可以让开发人员快速地搭建起一个全栈应用程序。其中,一些比较受欢迎的开源项目包括: 1. vue-element-admin:这是一个基于Vue.js和Element UI的开源后台管理系统,提供了许多常见的管理功能和布局。 2. spring-boot-vuejs:这是一个使用Spring BootVue.js构建的全栈Web应用程序,提供了一个简单的示例,展示了如何使用这两个项目搭建一个现代化的Web应用程序。 3. mall-admin-web:这是一个基于Spring BootVue.js的电子商务管理系统,提供了管理商品、订单、库存等功能。 这些开源项目可以帮助开发人员学习和掌握如何使用Spring BootVue.js构建现代化的Web应用程序。 ### 回答2: SpringBootVue是现在非常流行的两个开源项目,它们分别是Java后端开发和前端开发中最火热的框架之一。SpringBoot是一款基于Spring框架的快速开发脚手架,它简化了Spring应用程序的配置和部署,这样开发人员可以更加专注于业务逻辑的实现。 Vue是一款轻量级MVVM框架,它可以轻松地构建复杂的单页应用程序。与传统的MVC框架相比,Vue具有更好的性能和更高的开发效率。同时,Vue还支持组件化开发,这意味着开发人员可以将复杂的用户界面分解为更小、更可重用的部分。 将SpringBootVue结合起来,可以构建出一款具有前后端分离的全栈应用程序。 SpringBoot作为后端承担处理业务逻辑和操作数据库等后台处理,Vue作为前端负责展示UI界面和用户交互。使用Vue作为前端框架,可以让开发人员更容易地构建交互式和动态的Web应用程序,同时采用SpringBoot作为后端框架,能够更快地开发出高质量的后台服务,增强Web应用程序的性能和扩展性。 熟悉 SpringBootVue 的 Java 开发人员很容易使用这两个框架来构建成熟的全栈应用程序,尤其适合面向中小型企业开发Web应用程序。当然,将SpringBootVue结合起来开发全栈应用程序也需要熟练的前后端分离技术,这包括熟悉AJAX技术、 XML/JSON 文件的操作、理解前后端代码分离的思想等。在掌握了相关的开发技术后,开发人员可以选择自己感兴趣的业务领域,并用SpringBootVue完美地搭建出一款高质量的全栈应用程序。 ### 回答3: SpringBoot是一个非常流行的Java开发框架,而Vue则是一个轻量级的JavaScript框架,两者都是开源的。综合使用SpringBootVue,可以开发出高效、稳定、易于维护的Web应用程序。下面我将就SpringBoot Vue开源项目(以下简称项目)进行详细介绍。 首先,项目依托于SpringBoot框架,它提供了很多便利的开箱即用的特性,比如自动配置、优化等。SpringBoot的运行时环境也非常简洁,可以大大减少应用程序的启动时间。另外,SpringBoot还提供了自带的Embedded Tomcat服务器,无需繁杂的配置,就能直接运行Web应用程序。 而Vue则是客户端框架,它非常适合构建用户界面。Vue提供了一些易于使用的指令和组件,可以将应用程序的视图和状态分离。这对开发人员来说非常方便,大大减少了应用程序的前端开发成本,并且提高了应用程序的响应速度。 在项目中,我们可以使用Vue-CLI帮助我们构建项目,并使用webpack进行构建。Vue-CLI提供了一些方便的特性,比如热加载、自动刷新等。这些特性可以让我们更加高效地进行开发,并且提高开发效率和质量。 总体来说,SpringBoot Vue开源项目是一款优秀的Web应用程序开发框架,它结合了SpringBootVue等流行的框架,提供了一套简洁高效的开发模式和运行环境。开发人员可以快速地开发出高质量、高性能的Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值