基础接口和基础服务
hello,大家好。我是闲齁齁,一枚用发量写代码的程序员。昨天详细说了一下增删改查的操作,我们来说一下昨天提到的基础接口和基础服务。基础接口和基础服务里面都是没有代码的,唯一的区别就是基础服务里面继承了数据库上下文公共类,上下文公共类可以参考一下SqlSguar文档。
那么为什么要写这个基础接口和基础服务呢,大家都知道,使用.NET Core基本上都会写依赖注入的,每一个功能都需要注册服务,这样就非常繁琐,那么有什么简单一点的方法呢?答案是当然有,于是我们部门的大牛写了一个自动注册服务的方法
这样就完成了对IBaseService所在程序集带有ServiceDescriptor特性的自动注册。所以每增加一个接口和服务的时候继承一下基础接口和基础服务就可以完美实现。毕竟这比很多行的Services.Add…看起来更直观。
计算价格
因为我做的功能属于报表性质的功能,所以当所有的报表都做完之后我时间就比较富裕了。但是我还不是一个能闲得住的人,于是我师父交给了我一个任务,就是计算出来你勾选的那一条或多条数据并推送给一款财务软件然后反写一下。如下图(歌词可以忽略哈)
勾选获取数据可以参考一下Layui文档(https://www.layui.com/demo/table/operate.html)前端就不展示了,我也是用的文档里面的一些代码,而且完成之后我师父稍微修改了一下。
那么我来说一下这个功能的实现思路,当你选中某一条或多条数据的时候,把ID作为参数传递给控制器,然后在由控制器把数据传递给Service服务。
其实控制器里面的代码非常好写,只是起一个中转数据的作用。
public async Task<IActionResult> Number(string ids)
{
var dbResult = await _inventoryMaterialOutListService.NumberAsync(ids);
return Json(ResultApi<string>.Result(dbResult));
}
因为是复选框,所以在前端页面里面,我把所有选中的ID拼接成了一个字符串传递过去,这也就是为什么这里传递的参数是string类型。
那么接下来服务里面该进行什么样的操作呢?
//
var idArr = ids?.Trim(',')?.Trim()?.Split(',');
//如果为空或者长度为0就没有值,返回一个错误信息
if (idArr == null || idArr.Length == 0)
{
return Result<string>.IsFailed(message: "请选择操作的id");
}
//给一个初始价格为0
decimal price = 0;
//初始化一个list集合
var listIds = new List<string>();
//foreach循环取值
foreach (var i in idArr)
{
var item = await Db.Queryable<InventoryMaterialOutList>().InSingleAsync(i);
//kingdeePush一个bool类型的字段,用来进行反写(判断这条数据是否推送过)
if (!item.kingdeePush)
{
listIds.Add(i);
price += item.MaterialPrice * item.RealNumber;
}
}
进行完这个步骤之后我们还剩最后一步,那就是if判断一下listIds 集合里还有没有值,如果没有的话就返回一条错误提示(没有可推送的数据),反之就进行推送操作,推送的代码就不粘出来了。
最后认识一下吧,我叫闲齁齁,一枚用发量写代码的程序员,期待与大家一起成长一起进步。