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 {@Autowiredprivate CardService cardService;@Autowiredprivate MemberCardService memberCardService;@Autowiredprivate SellDetailService sellDetailService;@Autowiredprivate SellpayService sellpayService;@Autowiredprivate SellService sellService;@Overridepublic 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/30763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 Monkey Patch 解决 Sahi 可视化的中文乱码问题

其实如果是对算法的输出结果进行可视化的话,使用 Pillow 库是完全没有问题的。但是存在着这样一种情况,我们调用的公共包当中,里面已经有了可视化的接口,但是使用的是 OpenCV 中的 cv2.putText 进行可视化的。正常来说&#xff0c…

地瓜网络技术综合助手教你一键下载腾讯会议高清视频

当您错过腾讯会议的直播课程,不必担心,地瓜网络技术综合助手帮您轻松获取视频回放。 只需几个简单步骤,即可在手头保留珍贵的学习资料。 首先,启动地瓜网络技术综合助手, 进行软件初始化并开启监测功能。 接下来&…

智慧乡村和美人家信息化系统

一、简介 智慧乡村和美人家信息化系统是一个综合管理平台,集成了首页概览、一张图可视化、数据填报、智能评估、便捷申报、公开公示、任务管理、活动发布和灵活配置等功能。该系统不仅提升了乡村管理效率,也优化了家庭生活的便捷性。通过一张图&#xf…

BEVM背靠比特大陆打造新赛道,算力RWA成下一个千亿市场?

众所周知,在加密行业,每隔一段时间就会有一个新的概念或者一个新词出现,并引来社区和资本的追捧关注,笔者近期在浏览新闻时,发现了一个特别有意思的新概念——算力RWA,在社区引起了不少讨论。 该词最早出现…

工时管理系统的优势及推荐

企业发展离不开每一个员工,而员工的工作效率高低也是影响着企业在行业内的竞争力,所以规范管理员工时间,提升员工工作效率势在必行。工时管理系统在现代企业中的应用越来越广泛,不仅是因为它能显著提高企业管理效率,更…

Flutter【组件】按钮

简介 flutter 按钮组件。提供一种封装按钮组件的思路,并不支持过多的自定义属性。根据使用场景及设计规范进行封装,使用起来比较方便。 github地址:https://github.com/ThinkerJack/jac_uikit pub地址:https://pub.dev/package…

IOS 关于Apple Pay 与内购

一、什么是Apple Pay、什么是内购 首先这两个不是一样的,很多人一看觉得这两是一回事,我之前也是这么想的。今天我来给大家阐述一下: Apple Pay:是指支付实物类。类似国内的微信、支付宝。支付超市食品类啥的。 内购&#xff1…

el-upload组件校验不通过预览列表依然显示图片问题解决

如图校验不通过的图片依然显示在预览列表了&#xff0c;需要在校验不通过的时候移除图片 <el-uploadclass"upload-cls":action"ossSignature.host":auto-upload"false"ref"upload":list-type"listType":limit"limi…

如何在React中使用CSS模块,并解释为什么使用它们比传统CSS更有益?

在React中使用CSS模块是一种将CSS类名局部化到单个组件的方法&#xff0c;从而避免了全局作用域中的类名冲突。CSS模块允许你为组件编写样式&#xff0c;并确保这些样式只应用于该组件&#xff0c;而不会影响到其他组件。 以下是在React中使用CSS模块的步骤&#xff1a; 安装C…

通过CSS样式来禁用href

<style>.disabled-link {pointer-events: none;cursor: default;text-decoration: none;color: inherit; }</style><a href"https://www.example.com" class"disabled-link">禁用链接</a> 在上述CSS样式中&#xff0c; pointer-…

前端项目如何规范文件命名

前端项目如何规范文件命名 ls-lint 是一个非常快的文件和目录名称 linter&#xff0c;可方便约束项目目录和文件的命名。 特点&#xff1a; 快速依赖少适用所有文件配置简单 安装依赖 npm install ls-lint/ls-lint -D 在 husky 加入 git hook:"husky": {"h…

医疗器械3D全景展会在线漫游创造数字化时代的展览新篇章

在数字化浪潮的引领下&#xff0c;VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光&#xff0c;凭借优质的服务和丰富的经验&#xff0c;赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战&#xff0c;许…

日语 词汇

あつい 熱い さむい 寒い ひろい 広い せまい 狭い   おおき 大き  ちいさい 小さい おおい 多い しょう  少 はやい 早い 速い  おそい 遅い わるい 悪い たかい 高い  ひくい 低い つよい 強い よわい 弱い ふかい 深い うすい 薄い あつい …

深入浅出Git原理与Gitflow流程

1 Git原理 版本控制系统在软件开发和团队协作中扮演着至关重要的角色。它们帮助开发人员跟踪和管理代码的变化&#xff0c;协调多人同时编辑同一代码库&#xff0c;回溯历史版本&#xff0c;并解决代码冲突等问题。Git作为当今最流行的分布式版本控制系统&#xff0c;为开发人…

C++ 59 之 纯虚函数和抽象类

#include <iostream> #include <string> using namespace std;class Cal { // 类中有纯虚函数&#xff0c;这个类也叫做抽象类&#xff0c;无法实现实例化 public:int m_a;int m_b;// 虚函数// virtual int getRes(){// return 0;// }// 纯虚函数 作用和虚函数…

士兰微MEMS陀螺仪在电动升降桌上的应用

杭州士兰微电子股份有限公司&#xff0c;一家在国内集成电路芯片设计与制造领域内具有领先地位的高新技术企业&#xff0c;早已以其创新的半导体微电子产品和服务&#xff0c;赢得了市场的广泛认可。士兰微不仅致力于集成电路芯片的研发&#xff0c;而且涉猎于MEMS传感器技术领…

第7章 工程项目财务评价 作业

第7章 工程项目财务评价 作业 一单选题&#xff08;共23题&#xff0c;100分&#xff09; (单选题)企业缴纳所得税后的利润,按照下列哪一个顺序进行分配?() A. ①②③④ B. ①③②④ C. ④③②① D. ②④①③ 其中:①承担被没收的财物损失,支付各项税收的滞纳金和罚款; ②提…

torch.optim 之 distinct penalization

看torch.optim中介绍到distinct penalization: Remember that parameters() returns an iterable that contains all learnable parameters, including biases and other parameters that may prefer distinct penalization. To address this, one can specify individual pena…

Python第二语言(十三、PySpark实战)

目录 1.开篇 2. PySpark介绍 3. PySpark基础准备 3.1 PySpark安装 3.2 掌握PySpark执行环境入口对象的构建 3.3 理解PySpark的编程模型 4. PySpark&#xff1a;RDD对象数据输入 4.1 RDD对象概念&#xff1a;PySpark支持多种数据的输入&#xff0c;完成后会返回RDD类的对…

LeetCode题练习与总结:分割回文串Ⅱ--132

一、题目描述 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回符合要求的 最少分割次数 。 示例 1&#xff1a; 输入&#xff1a;s "aab" 输出&#xff1a;1 解释&#xff1a;只需一次分割就可将 s 分割成 ["…