2020-10-20

abp(net core)+easyui+efcore实现仓储管理系统——出库管理之三(五十一)

在前面的文章中我们已经介绍过了如何调用存储过程。在这里不就在介绍,直接给出相应的代码。请结合前面的文章来调试。

abp(net core)+easyui+efcore实现仓储管理系统目录

abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二)abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三) abp(net core)+easyui+efcore实现仓储管理系统——定义仓储并实现 (四)abp(net core)+easyui+efcore实现仓储管理系统——创建应用服务(五)abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之控制器(六)abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之列表视图(七)abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之增删改视图(八)abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之菜单与测试(九)abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十一)

abp(net core)+easyui+efcore实现仓储管理系统——EasyUI前端页面框架 (十八)

abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理一 (十九) abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之一(二十七) abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之十(三十六) abp(net core)+easyui+efcore实现仓储管理系统——入库管理之一(三十七) abp(net core)+easyui+efcore实现仓储管理系统——入库管理之二(三十八)abp(net core)+easyui+efcore实现仓储管理系统——入库管理之三存储过程(三十九) abp(net core)+easyui+efcore实现仓储管理系统——入库管理之四(四十) abp(net core)+easyui+efcore实现仓储管理系统——入库管理之十二(四十八) abp(net core)+easyui+efcore实现仓储管理系统——出库管理之一(四十九) abp(net core)+easyui+efcore实现仓储管理系统——出库管理之二(五十)    

五、使用存储过程创建单号

1. 在Visual Studio 2017的"解决方案资源管理器"中,右键单击"ABP.TPLMS.Core"项目的"IRepositories"文件夹,在弹出菜单中选择"添加" > "类"。如下图。

 

2.在弹出对话框中选择"接口", 将接口命名为 IOutStockOrderRepository,然后选择"添加"。如下图。 

 

3.在IOutStockOrderRepository接口定义我们需要用到的方法,代码如下。

using Abp.Dependency;using Abp.Domain.Repositories;using ABP.TPLMS.Entitys;using System;using System.Collections.Generic;using System.Data;using System.Data.Common;using System.Linq;using System.Text; namespace ABP.TPLMS.IRepositories{ public interface IOutStockOrderRepository: IRepository<OutStockOrder, int>,
ITransientDependency { DbCommand CreateCommand(string commandText, CommandType commandType
, params object[] parameters); /// <summary> /// 创建单号 /// </summary> /// <param name="name">单证名称代码</param> /// <returns></returns> string GetNo(string name); /// <summary> /// 导入入库货物信息 /// </summary> /// <param name="ids">导入库单的ID集合</param> /// <param name="no">单号</param> void ImportInStockOrder(string ids, string no); }}

 

4. 在Visual Studio 2017的"解决方案资源管理器"中,右键单击"ABP.TPLMS.EntityFrameworkCore"项目的"Repositories"文件夹,在弹出菜单中选择"添加" >  "类", 将类命名为 OutStockOrderRepository,并继承IOutStockOrderRepository接口。实现接口中的方法。代码如下。

 

using Abp.Data;using Abp.Dependency;using Abp.EntityFrameworkCore;using ABP.TPLMS.Entitys;using ABP.TPLMS.IRepositories;using Microsoft.EntityFrameworkCore;using System;using System.Collections.Generic;using System.Data;using System.Data.Common;using System.Data.SqlClient;using System.Text; namespace ABP.TPLMS.EntityFrameworkCore.Repositories{ public class OutStockOrderRepository: TPLMSRepositoryBase<OutStockOrder, int>
, IOutStockOrderRepository, ITransientDependency { private readonly IActiveTransactionProvider _transactionProvider; public OutStockOrderRepository(IDbContextProvider<TPLMSDbContext>
dbContextProvider):base(dbContextProvider) { } protected OutStockOrderRepository(IDbContextProvider<TPLMSDbContext>
dbContextProvider,IActiveTransactionProvider transactionProvider) : base(dbContextProvider) { _transactionProvider = transactionProvider; } public DbCommand CreateCommand(string commandText, CommandType commandType
, params SqlParameter[] parameters) { EnsureConnectionOpen(); var dbFacade = Context.Database; var connection = Microsoft.EntityFrameworkCore
.RelationalDatabaseFacadeExtensions
.GetDbConnection(dbFacade); var command = connection.CreateCommand(); command.CommandText = commandText; command.CommandType = commandType; command.Transaction = GetActiveTransaction(); foreach (var parameter in parameters) { command.Parameters.Add(parameter); } return command; } DbCommand IOutStockOrderRepository.CreateCommand(string commandText
, CommandType commandType, params object[] parameters) { EnsureConnectionOpen(); var dbFacade = Context.Database; var connection = Microsoft.EntityFrameworkCore
.RelationalDatabaseFacadeExtensions
.GetDbConnection(dbFacade); var command = connection.CreateCommand(); command.CommandText = commandText; command.CommandType = commandType; command.Transaction = GetActiveTransaction(); foreach (var parameter in parameters) { command.Parameters.Add(parameter); } return command; } private void EnsureConnectionOpen() { var dbFacade = Context.Database; var connection = Microsoft.EntityFrameworkCore
.RelationalDatabaseFacadeExtensions
.GetDbConnection(dbFacade); if (connection.State != ConnectionState.Open) { connection.Open(); } } private DbTransaction GetActiveTransaction() { return (DbTransaction)_transactionProvider.GetActiveTransaction(
new ActiveTransactionProviderArgs { {"ContextType", typeof(TPLMSDbContext) }, {"MultiTenancySide", MultiTenancySide } }); } string IOutStockOrderRepository.GetNo(string name) { SqlParameter[] parameters = { new SqlParameter("Name",System.Data.SqlDbType.NVarChar,10), new SqlParameter("BH", System.Data.SqlDbType.NVarChar,20) }; parameters[0].Value = name; parameters[1].Direction = System.Data.ParameterDirection.Output; int cnt = Context.Database.ExecuteSqlCommand( "EXEC p_NextBH @Name, @BH output", parameters); string no = parameters[1].Value.ToString(); if (cnt < 0) { no = string.Empty; } return no; } void IOutStockOrderRepository.ImportInStockOrder(string ids, string no) { SqlParameter[] parameters = { new SqlParameter("id",System.Data.SqlDbType.VarChar,500), new SqlParameter("No", System.Data.SqlDbType.NVarChar,20) }; parameters[0].Value = ids + ","; parameters[1].Value = no; int cnt = Context.Database.ExecuteSqlCommand( "EXEC SP_ImportInStockOrder2ODO @id, @No", parameters); } } }

 

5. 在这里我一共使用了两个存储过程,p_NextBH 与SP_ImportInStockOrder2ODO。其中p_NextBH在入库单管理中已经介绍过了。

6. 在这里介绍一下SP_ImportInStockOrder2ODO这个存储过程的实现,代码如下:

Create Proc [dbo].[SP_ImportInStockOrder2ODO]@id varchar(500),   --id组合@No nvarchar(20) --编号as CREATE TABLE #IdTable(Id int NULL) DECLARE @str VARCHAR(1000)DECLARE @x select @str=@idinsert #IdTableSELECT convert(int,id) id  FROM (SELECT [value] = CONVERT('<v>' +REPLACE(@str,',' ,'</v><v>')+ '</v>')) A  OUTER APPLY ( SELECT id = N.v.value('.' , 'varchar(100)')    FROM A.[value].nodes('/v') N (v)) BDECLARE @BH nvarchar(20),@batch varchar(20),@maxseqno intselect @BH=@Noselect @maxseqno=isnull(MAX(seqno),0) from [InStockOrderDetail] where InStockNo= @BH INSERT INTO [dbo].[OutStockOrderDetail]   ([OutStockNo],[SupplierId],[CargoCode],[HSCode],[CargoName],[Spcf]   ,[Unit],[Country],[Brand] ,[Curr],[Package],[Length],[Width],[Height],[Qty]   ,[Vol],[LawfQty],[SecdLawfQty],[Price],[TotalAmt],[GrossWt],[NetWt]   ,[LawfUnit],[SecdLawfUnit],[Batch],[InStockOrderDetailLocId],[Loc]
,[CreationTime]) SELECT @BH,supplierid,[CargoCode],[HSCode],[CargoName],[Spcf] ,[Unit],[Country],[Brand],[Curr] ,[Package],[Length],[Width],[Height],0 [Qty] ,[Vol] ,0 [LawfQty], 0 [SecdLawfQty] ,[Price],0 [TotalAmt],[GrossWt],[NetWt] ,'' [LawfUnit],'' [SecdLawfUnit],batch,id,loc,getdate() FROM (select row_number() OVER ( order by b.id) seqno,a.supplierid,[CargoCode],[HSCode]
,[CargoName],[Spcf] ,[Unit],[Country],[Brand],[Curr] ,[Package],[Length],[Width],[Height],0 [Qty] ,[Vol] ,0 [LawfQty], 0 [SecdLawfQty] ,[Price],0 [TotalAmt],[GrossWt],[NetWt] ,'' [LawfUnit],'' [SecdLawfUnit],b.id,b.loc,Batch from [dbo].InStockOrderDetail a inner join InStockOrderDetailLoc bon a.Id=b.InStockOrderDetailIdleft join (select InStockOrderDetailLocId,SUM(isnull(qty,0)) as qty from OutStockOrderDetailgroup by InStockOrderDetailLocId )c on b.Id=c.InStockOrderDetailLocId where b.Qty-ISNULL(c.qty,0)>0 and b.Id in (select Id from #IdTable) ) isodrop table #IdTable

 


  

原文转载:http://www.shaoqun.com/a/481299.html

heap:https://www.ikjzd.com/w/2012

敦煌网:https://www.ikjzd.com/w/189

邮政电话:https://www.ikjzd.com/w/202


在前面的文章中我们已经介绍过了如何调用存储过程。在这里不就在介绍,直接给出相应的代码。请结合前面的文章来调试。abp(netcore)+easyui+efcore实现仓储管理系统目录abp(netcore)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)abp(netcore)+easyui+efcore实现仓储管理系统——解决方案介绍(二)abp(netcore)+easyu
kk馆:https://www.ikjzd.com/w/1713
刘军:https://www.ikjzd.com/w/1835
春节出境游注意事项,春节出境旅游,出境旅游注意事项 :http://tour.shaoqun.com/a/17919.html
常泡温泉好不好?:http://tour.shaoqun.com/a/37780.html
Pricinglab:https://www.ikjzd.com/w/2518

No comments:

Post a Comment