首页 > 其他分享 >VOL框架后台事务处理的两种方式

VOL框架后台事务处理的两种方式

时间:2024-03-05 10:25:23浏览次数:32  
标签:return string VOL 事务处理 ST item 后台 webResponse

VOL框架后台事务处理的两种方式

方式一:框架自带增删改的事务处理

        public override WebResponseContent Del(object[] keys, bool delList = true)
        {
            string ids = string.Join(",", keys);
            string asql = $@"
                        SELECT sum(auditStatus) AS auditstatus
                        FROM ST_LockUnlock 
                        WHERE LockUnlockID IN ({ids})";
            var data = DBServerProvider.SqlDapper.QueryDynamicList(asql, "");
            if (data[0].auditstatus == null)
            {
                return webResponse.Error("所选记录不存在,请刷新后重新选择!");
            }
            else if (data[0].auditstatus > 0)
            {
                return webResponse.Error("只能删除状态为[待审批]的数据,请刷新后重新选择!");
            }
            else
            {
                DelOnExecuted = (keys) =>
                {
                    string stepDel = $@"
                        delete FROM Sys_WorkFlowTableStep 
                        WHERE WorkFlowTable_Id IN 
                        (
                            SELECT workflowtable_id 
                            FROM Sys_WorkFlowTable
                            WHERE WorkTableKey IN ({ids}) AND WorkTable='ST_LockUnlock'
                        )";
                    repository.ExecuteSqlCommand(stepDel);//事务处理只能用该方法
                    string tableDel = $@"
                        delete FROM Sys_WorkFlowTable
                        WHERE WorkTableKey IN ({ids}) AND WorkTable='ST_LockUnlock'";
                    repository.ExecuteSqlCommand(tableDel);

                    return webResponse.OK();
                };
                return base.Del(keys, delList);
            }

        }

方式二:自定义方法的事务处理

        public async Task<WebResponseContent> Confirm(string id)
        {
            var dapper = DBServerProvider.SqlDapper;
            try
            {
                //开始事务处理
                dapper.BeginTrans();

                string sql = @$"
                    UPDATE ST_MeterMonthVolMain 
                    SET ConfirmState='1',ConfirmID={UserContext.Current.UserInfo.User_Id},Confirmor='{UserContext.Current.UserInfo.UserTrueName}',ConfirmDate='{DateTime.Now}'
                    WHERE MonthCompMainID='{id}'";
                await dapper.ExcuteNonQueryAsync(sql, "");

                string subsql = $@"
                    SELECT a.MonthCompID,a.MeterMonth,a.FeeDate,a.FinalVol,a.Price,a.ReceivableFee,
                        b.MeterID,b.MeterCode,b.MeterName,
                        c.CustomerID,c.CustCode,c.CustName,c.INVCustName,c.CompanyCode,c.AccBanlance,c.AccDeposit
                    FROM ST_MeterMonthVol a
                    LEFT JOIN ST_CodeMeter b ON b.MeterID = a.MeterID
                    LEFT JOIN ST_CustomerInfo c ON c.CustomerID = b.CustomerID
                    WHERE a.MonthCompMainID='{id}'
                ";
                List<meterConfirmParam> list = DBServerProvider.SqlDapper.QueryList<meterConfirmParam>(subsql, "");

                StringBuilder sb = new StringBuilder();
                sb.Append($@"
                        insert into ST_FeeReceivable (MonthCompID,CustomerID,CustCode,CustName,MeterID,MeterName,CompanyCode,
                            Vol,Price,Amount,AccBanlance,AccDeposit,
                            MeterMonth,Unit,FeeName,PaidFee,WaitFee,InvFee,InvFlag,FeeDate)
                        values ");
                
                foreach(meterConfirmParam item in list)
                {
                    sb.Append($@"
                        ({item.MonthCompID},{item.CustomerID},'{item.CustCode}','{item.CustName}',{item.MeterID},'{item.MeterName}','{item.CompanyCode}',
                        {item.FinalVol},{item.Price},{item.ReceivableFee},{item.ReceivableFee},{item.AccBanlance},{item.AccDeposit},
                        '{item.MeterMonth}','吨','蒸汽往来',0,0,0,0,'{DateTime.Now}'),");

                }
                sb.Remove(sb.Length - 1, 1);
                await dapper.ExcuteNonQueryAsync(sb.ToString(), "");

                dapper.Commit();

                webResponse.Status = true;
                webResponse.Message = "确认成功!";
                return webResponse.OK();
            }
            catch (Exception ex)
            {
                dapper.Rollback();
                return webResponse.Error("确认失败!"+ex.Message);
            }
        }

 

标签:return,string,VOL,事务处理,ST,item,后台,webResponse
From: https://www.cnblogs.com/wishit/p/18053380

相关文章

  • .net core 6.0后台 Vue2前台 导出Excel文件
    要导出这样一个Excel表格:1.后端API下载安装包:EPPlus2.后端代码点击查看代码///<summary>///接口///</summary>///<returns>结果</returns>[HttpGet]publicIActionResultExportTab(){varli......
  • 奥特曼净资产破20亿美元;苹果计划通过线上渠道发布 2024 款 iPad 和 Mac丨 RTE 开发者
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 给大家推荐一款基于Vue3通用型后台管理模板
    ​ 给大家推荐一款基于Vue3通用型后台管理模板这款Vue3后台管理模板介绍如下:        使用Vue3、Vite、ElementPlus、Pinia最新开发技术栈,拥有完整的Token登录鉴权、路由配置、界面简洁美观,可根据需要灵活配置主题、系统采用响应式布局,自适应各类屏幕尺寸、源代码有......
  • XSS后台代码绕过
    xss_01正则表达式替换绕过方式:大小写混合或纯大写绕过paylaod:<scripT>alert(AAA);</Script>或<SCRIPT>alert(123);<SCRIPT>字符最小化将获取的message数据中获取的大小写字符全部转换为小写绕过方式:通过双写绕过Payload:<sc<script>ript>alert</scrip<script>t>......
  • Volatile关键字原理
    转载请标明:https://www.cnblogs.com/tangZH/p/15113505.html一、如果一个变量被volatile关键字修饰,那么所有线程都是可见的。所谓可见就是,当一条线程修改了这个变量值,新值对于其他线程来时是立即可见的; 而普通变量不能做到这一点。 1、现在计算机缓存架构:  CPU与内存之......
  • FolkMQ 是怎样进行消息的事务处理?
    FolkMQ提供了二段式提交的事务提交的机制(TCC模型)。允许生产者在发送消息时绑定到一个事务中并接收事务的管理,以确保消息的原子性(要么全成功,要么全失败)。在FolkMQ中,事务是通过MqTransaction接口实现管理的。一般是通过:新建事务:在产生者端,可以通过调用MqTransactiontran=......
  • 比特币暴涨逼近历史最高点;阿里云全线降价20%丨 RTE 开发者日报 Vol.155
     开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的......
  • 初中英语优秀范文100篇-094A volunteer labor-一次公益劳动
    PDF格式公众号回复关键字:SHCZFW094记忆树1Whenitcomestothevolunteerlabor,thewords“meaningfulandhelpful”willcometomymind.翻译当谈及志愿劳动时,我总会想到“有意义且有帮助”这两个词。简化记忆劳动句子结构Whenitcomestothevolunteerla......
  • pageoffice6后台生成单个PDF文档
    转载:后台生成单个PDF文档#后台生成单个PDF文档注意本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。在实际项目中经常遇到这样的场景,客户希望后台动态生成PDF文档,目前网上有一些针对此需求的方案,如果您想要了解这些......
  • JUC系列之(二)volatile关键字
    volatile关键字-内存可见性引出内存可见性问题的示例:packagecom.atguigu.juc;publicclassTestVolatile{publicstaticvoidmain(String[]args){//线程threadDemo修改共享变量的值ThreadDemothreadDemo=newThreadDemo();newThrea......