【Mysql】——收银查询与退货

💻博主现有专栏:

                C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,设计模式、Python机器学习等
🥏主页链接:

                Y小夜-CSDN博客

🎯销售记录、销售明细查询的存储过程

🎃建立`v_xsjlmcb`视图

DROP VIEW IF EXISTS `v_xsjlmcb`;
CREATEVIEW  `v_xsjlmcb` AS
(SELECT `cashaccountdetailid`,`gname`,`unit` ,`salesquantity`,`cashaccount_detail`.`retailprice`,`cashaccount_detail`.`promotionalprice` 
FROM `cashaccount_detail`,`goods` 
WHERE `cashaccount_detail`.`gid`=`goods`.`gid` ); 

        这是一个MySQL视图的创建语句。它首先删除名为`v_xsjlmcb`的视图(如果存在),然后创建一个名为`v_xsjlmcb`的视图。这个视图从`cashaccount_detail`表和`goods`表中选择数据,其中`cashaccount_detail`表的`gid`字段与`goods`表的`gid`字段相等。选择的字段包括`cashaccountdetailid`、`gname`、`unit`、`salesquantity`、`retailprice`和`promotionalprice`。

🎃创建存储

DELIMITER $$
CREATEPROCEDURE `SyjlCx`(cxlb INT,cxcs INT)BEGINIF cxlb=0 THENSELECT `cashaccountid`,`cashierid`,`cashier_time`,`uid`,`amount_money`,`actual_money`,CASE `payment`WHEN 0 THEN '现金' WHEN 1 THEN '储值卡' WHEN 2 THEN '支付宝' WHEN 3 THEN '微信支付'END  AS 支付方式FROM `cashaccount` WHERE `cashierid`=cxcs AND `cashier_time`>=CURDATE() ORDER BY `cashaccountid` DESC;ELSESELECT * FROM v_xsjlmcb WHERE v_xsjlmcb.`cashaccountdetailid`=cxcs;END IF;END$$DELIMITER ;

🎯当天退货处理

DELIMITER $$
CREATEPROCEDURE `xiaoshou`.`ThjlCp`(cashaccountid INT)BEGINSELECT  `cashaccount`.`uid` INTO @uid    FROM `cashaccount`   WHERE `cashaccount`.`cashaccountid`=cashaccountid;SELECT  `cashaccount`.`actual_money` INTO @ssje    FROM  `cashaccount`   WHERE `cashaccount`.`cashaccountid`=cashaccountid;/*变更 余额与积分*/IF @uid>=10000 THENUPDATE `user` SET `card_balance`=`card_balance`+@ssje,`points`=`points`-FLOOR(@ssje)   WHERE `user`.`uid`=@uid;END IF;-- 还原库存(update `stock`)DROP TABLE IF EXISTS lsb;CREATE TEMPORARY TABLE lsb (gid INT,xssl NUMERIC(18,3));INSERT INTO lsb (gid,xssl) SELECT gid,SUM(`salesquantity`) FROM `cashaccount_detail` WHERE `cashaccount_detail`.`cashaccountid`=cashaccountid GROUP BY gid;UPDATE stock b1,lsb b2 SET b1.`quantity`=b1.quantity+b2.xssl WHERE b1.gid=b2.gid;-- 删除销售明细 (delete from `cashaccount_detail`)DELETE FROM `cashaccount_detail` WHERE `cashaccount_detail`.`cashaccountid`=cashaccountid;-- 删除收银记录 (delete from `cashaccount`)DELETE FROM `cashaccount` WHERE `cashaccount`.`cashaccountid`=cashaccountid;END$$DELIMITER ;

        这是一个MySQL存储过程,名为`ThjlCp`,接受一个参数:`cashaccountid`。该存储过程的功能如下:

1. 从`cashaccount`表中查询出`uid`和`actual_money`字段的值,分别赋值给变量`@uid`和`@ssje`。
2. 如果`@uid`大于等于10000,则更新`user`表的`card_balance`字段,将其值加上`@ssje`,并将`points`字段的值减去`@ssje`向下取整后的结果。
3. 创建一个临时表`lsb`,用于存储销售明细数据。将`cashaccount_detail`表中与`cashaccountid`相等的记录按照`gid`分组,计算每组的`salesquantity`总和,并将结果插入到`lsb`表中。
4. 更新`stock`表的`quantity`字段,将其值加上`lsb`表中对应的`xssl`值。
5. 删除`cashaccount_detail`表中与`cashaccountid`相等的记录。
6. 删除`cashaccount`表中与`cashaccountid`相等的记录。

🎯扎帐过程

DELIMITER $$
CREATEPROCEDURE `xiaoshou`.`ZzjlCp`(syyid INT,ssje DECIMAL(18,3))BEGIN-- 计算应收金额SELECT SUM(`cashaccount`.`actual_money`) INTO @yjje FROM `cashaccount` WHERE `cashaccount`.`cashierid`=syyid AND `payment`=0 AND `settle_accountsid` IS NULL;-- 插入扎帐记录IF ABS(@yjje-ssje)>0.01 THENINSERT INTO `settle_accounts`(cashierid,amount_money,actual_money,errorReason
) VALUE (syyid,@yjje,ssje,'出差错');   
ELSEINSERT INTO `settle_accounts`(cashierid,amount_money,actual_money) VALUE (syyid,@yjje,ssje);END IF;SET @zzid=@@identity;-- 更新 收银记录表中的zzid;UPDATE `cashaccount` SET `settle_accountsid`=@zzid WHERE `cashaccount`.`cashierid`=syyid AND `settle_accountsid` IS NULL;END$$DELIMITER ;

        这是一个MySQL存储过程,名为`ZzjlCp`,接受两个参数:`syyid`(收银员ID)和`ssje`(实际收款金额)。该存储过程的功能如下:

1. 计算应收金额:从`cashaccount`表中查询出收银员ID为`syyid`、支付方式为现金且未结算的记录的实际收款金额之和,赋值给变量`@yjje`。
2. 插入扎帐记录:如果`@yjje`与`ssje`之间的差值大于0.01,则在`settle_accounts`表中插入一条记录,包含收银员ID、应收金额、实际收款金额和错误原因;否则,只插入收银员ID、应收金额和实际收款金额。
3. 更新收银记录表中的扎帐记录ID:将`cashaccount`表中收银员ID为`syyid`且未结算的记录的`settle_accountsid`字段设置为刚刚插入的扎帐记录ID。

🎯事后退货处理

DELIMITER $$
CREATEPROCEDURE `xiaoshou`.`thjlcp_new2`(syid INT)BEGINIF syid>0 THEN   /*当天退货*/DELETE FROM  cashaccount  WHERE cashaccount.cashaccountid=syid; ELSE /*事后退货*/        /*增加一条负销售*/INSERT INTO cashaccount(cashierid,uid,payment,amount_money,actual_money,discount_money,sales_status)SELECT cashierid,uid,payment,-amount_money,-actual_money,   -discount_money,-1FROM cashaccount WHERE `cashaccount`.`cashaccountid`=-syid;SET @syid_new=@@identity;/*修改销售状态,以避免多次退货*/UPDATE   cashaccount SET sales_status=@syid_new WHERE  cashaccount.cashaccountid=-syid;/*在销售明细表中插入负销售*/INSERT INTO cashaccount_detail(cashaccountid,gid,salesquantity,retailprice,promotionalprice)SELECT @syid_new,gid,-salesquantity,retailprice,promotionalprice FROM `cashaccount_detail` WHERE `cashaccount_detail`.`cashaccountid`=-syid;/*变更库存*/DROP TABLE IF EXISTS lsb;CREATE TEMPORARY TABLE lsb (gid INT,xssl NUMERIC(18,3));INSERT INTO lsb (gid,xssl) SELECT gid,SUM(salesquantity) FROM cashaccount_detail WHERE cashaccount_detail.cashaccountid=-syid GROUP BY gid ;UPDATE stock b1,lsb b2 SET b1.`quantity`=b1.`quantity`+b2.xssl WHERE b1.gid=b2.gid;/*如果是会员,还原积分*/ SELECT  `uid` INTO @uid    FROM `cashaccount`   WHERE `cashaccount`.`cashaccountid`=-syid;SELECT  `actual_money` INTO @ssje    FROM `cashaccount`  WHERE `cashaccount`.`cashaccountid`=-syid;IF @uid>=10000 THENUPDATE `user` SET `card_balance`=`card_balance`+@ssje,`points`=`points`-FLOOR(@ssje)   WHERE `user`.`uid`=@uid;END IF;END IF;END$$DELIMITER ;

        这是一个MySQL存储过程,名为`thjlcp_new2`,接受一个参数:`syid`(销售记录ID)。该存储过程的功能如下:

1. 如果`syid`大于0,表示当天退货,那么从`cashaccount`表中删除对应的记录。
2. 如果`syid`小于等于0,表示事后退货,那么执行以下操作:
   a. 在`cashaccount`表中插入一条负销售记录。
   b. 更新销售状态,以避免多次退货。
   c. 在销售明细表中插入负销售记录。
   d. 变更库存。
   e. 如果是会员,还原积分。

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

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

相关文章

Java并发编程:Kilim协程框架

文章目录 一、介绍1、Kilim协程框架解析2、Kilim协程框架应用 一、介绍 Kilim是一个专为Java设计的轻量级协程框架,它通过字节码操纵技术实现了轻量级的协程,为Java开发者提供了更为灵活的并发编程选项。以下是关于Kilim协程框架的解析与应用&#xff1…

struct和union大小计算规则

Union 一:联合类型的定义 联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体) 比如:共用了 i 这个较大的空间 二: 联合的…

【程序员侠】李飞往事之wifi恶魔

程序员侠李飞是一名技术高超的年轻程序员,他在城市中打击各种网络犯罪活动,保护市民的网络安全。一天,他接到了一个任务,说是城市中有一个邪恶的wifi恶魔正在肆虐,许多人的个人信息被盗取,银行账户被盗刷&a…

AI怎么把图形分割下来

1 画一个图形 2 画一条直线分割 用直线段工具,画一条直线 3 分割操作 用 直接选择工具,先选中直线,按shift键,再选中矩形,把他两都选上 路径查找器,点分割(路径查找器面板如果没有,在窗口 菜单…

接口自动化框架篇:接口框架中的日志记录封装!

接口自动化框架中的日志记录是一个重要的环节,它能帮助我们追踪接口的执行情况、调试问题、分析测试结果等。通过规范的日志记录,我们可以更好地管理和维护接口自动化测试代码。 以下是一个从0到1的详细规范,来进行接口框架中的日志记录封装…

Java方法和数组

方法 Java中的方法就是c语言中的函数。 方法的定义 定义格式如下 修饰符 返回值 方法名([参数列表]){代码块[return 返回值;] } //方括号[]括起来代表可以没有,不是必须有的方法名采用小驼峰命名(就是有多个单词,第一个单词首字母小写其…

酷柚易汛ERP源码部署/售后更新/搭建/上线维护

一款基于FastAdminThinkPHPLayui开发的ERP管理系统,帮助中小企业实现ERP管理规范化,此系统能为你解决五大方面的经营问题:1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理,适用于:服装鞋帽、化妆品、机械机电…

Vue3自定义指令封装-按钮权限控制v-permission、hasPermissions

背景:平常所接触到的系统权限控制,大部分都是菜单、路由级别的控制,但后台管理系统中,很多操作都是与职责和角色挂钩的,同样一个列表,不同人的操作列并不都一样,有些页面存在一些含有重要数据的…

B+树(B+ Tree)

B树(B Tree)是一种对B树(B-Tree)的改进版本,它在数据库系统和文件系统中作为索引结构得到了广泛的应用,特别是在磁盘存储的场景下。B树保留了B树的基本特征,如自平衡、多路分支等,但…

excel中怎么跳转到指定的单元格?

也许你会有这样的需求,如A1单元格中显示B100这种单元格地址,怎么做以点一下就跳转到B100? 一、设置公式 B1HYPERLINK("#"&MID(CELL("FILENAME",A1),FIND("]",CELL("FILENAME",A1))1,99)&&…

java-函数式编程-jdk

背景 函数式接口很简单,但是不是每一个函数式接口都需要我们自己来写jdk 根据 有无参数,有无返回值,参数的个数和类型,返回值的类型 提前定义了一些通用的函数式接口 IntPredicate 参数:有一个,类型是int类…

VSCode(安装)

前言 VSCode(全称:Visual Studio Code)是一款由微软开发且跨平台的免费源代码编辑器。该软件支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和 Git …

Redis面试高频问题

什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,可能导致数据库挂掉。这种情况大概率是遭到了攻击。解决方案的话&#xff0…

C++ 实现一个不能被copy的类

文章目录 实现一个不能被copy的类1.先实现父类2.代码实现 小结 实现一个不能被copy的类 1.先实现父类 一个类不能被copy,首先肯定是构造函数没有。其次,拷贝构造不能有赋值构造函数也不能有 基于这三点,就容易实现了。下边看看代码。 2.代…

spring开发问题总结(持续更新)

开始 最近在做项目的时候,总遇到一些大小不一,奇形怪状的问题。 现在终于有时间来总结一下遇到的问题,以备复习之用。 以下提到的问题经过简化,不代表任何项目代码或问题。 问题1:未完成任务状态搜索结果有误&#x…

【贪心算法】Leetcode 134. 加油站【中等】

加油站 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和…

【Android】自定义View不显示的一种问题

需求 在自定义View里面添加一种颜色表示某个数据到达了某个状态 问题 颜色没有显示 问题分析 在代码中定义一种颜色和画笔 private int wathetBlue;private Paint backgroundWathetBlue;在init方法里面初始化 wathetBlue Color.argb(205, 165, 209, 254);backgroundWat…

5月游戏市场迎来新的体验,网易两款游戏重磅出炉

易采游戏网5月9日消息,随着科技的飞速发展,手机游戏已经成为人们休闲娱乐的重要方式。在这个领域,网易作为国内领先的游戏开发商,一直致力于为玩家带来高品质的游戏体验。近日,网易携手国际大厂Square Enix&#xff0c…

2024年数维杯高校数学建模竞赛(B题) 建模解析| 生物质和煤共热解问题的研究 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长,就读于上海交通大学,截至目前已经帮200人完成了建模与思路的构建的处理了~ 本篇文章是鹿鹿学长经过深度思考,独辟蹊径,实现综合建模。独创复杂系统视角,帮助你解决数维杯的难关呀。 完整内容可…