C#TMS系统代码-业务页面ShippingNotice学习

学一个业务页面,ok,领导开完会就被裁掉了,很突然啊,他收拾东西的时候我还以为他要旅游提前请假了,还在寻思为什么回家连自己买的几箱饮料都要叫跑腿带走,怕被偷吗?还好我在他开会之前拿了两瓶芬达

感觉感觉前面的BaseCity差不太多,这边的分页查询复杂一点,其他的当个加强记忆了

Service页面

//跟BaseCity页面的差不多
[ApiDescriptionSettings(Tag = "Business", Name = "ShippingNotice", Order = 200)]
[Route("api/TMS/Business/[controller]")]
public class TmsBusiShippingNoticeService : ITmsBusiShippingNoticeService, IDynamicApiController, ITransient
{
private readonly ISqlSugarRepository<TmsBusiShippingNoticeEntity> _repository;
private readonly IDataInterfaceService _dataInterfaceService;
private readonly IUserManager _userManager; public TmsBusiShippingNoticeService(
ISqlSugarRepository<TmsBusiShippingNoticeEntity> tmsBusiShippingNoticeRepository,
IDataInterfaceService dataInterfaceService,
ISqlSugarClient context,
IUserManager userManager)
{
_repository = tmsBusiShippingNoticeRepository;
_dataInterfaceService = dataInterfaceService;
_userManager = userManager;
}
//各种方法
......
}

获取单个ShippingNotice

[HttpGet("{id}")]
public async Task<dynamic> GetInfo(string id)
{
//BaseCity那边更简单一点_repository.FirstOrDefaultAsync(x => x.Id == id)).Adapt<TmsBaseCityInfoOutput>();
return await _repository.Context.Queryable<TmsBusiShippingNoticeEntity>()
.Where(it => it.Id == id)
.Select(it => new TmsBusiShippingNoticeInfoOutput
{
//需要处理数据
id = it.Id,
......
}).FirstAsync();
}

查询ShippingNotice分页List

[HttpGet("")]
public async Task<dynamic> GetList([FromQuery] TmsBusiShippingNoticeListQueryInput input)
{
//获取时间参数
List<DateTime> PlanDateList = input.planDate?.Split(',').ToObject<List<DateTime>>();
DateTime? SPlanDate = PlanDateList?.First();
DateTime? EPlanDate = PlanDateList?.Last();
//数据权限
//522839 这个id是直接数据库查了之后放在这里的?
//id为表的主键
var authorizeWhere = new List<IConditionalModel>();
authorizeWhere = await _userManager.GetConditionAsync<TmsBusiShippingNoticeListOutput>("522839", "it.F_Id");
//获取登录人CompanyCode 类型List<string>,管理员可以看全部
var loginUserCompany = new List<string>();
if (!_userManager.IsAdministrator)
{
loginUserCompany = await _repository.Context.Queryable<TmsBaseCompanyEmployeeEntity>().Where(x => x.DeleteMark == null && x.EnabledMark == 1 && x.UserId == _userManager.UserId).GroupBy(x => x.CompanyCode).Select(x => x.CompanyCode).ToListAsync();
}
//查询主表然后左连接明细,我猜应该有(1+n)条数据
var querywherr = _repository.Context.Queryable<TmsBusiShippingNoticeEntity, TmsBusiShippingNoticeDetailEntity>((it, b) => new object[]{ JoinType.Left,it.CRMNo==b.CRMNo })
.Where(it => it.DeleteMark == null)
//添加数据权限
.Where(authorizeWhere)
//只查询当前登录人绑定的公司编码数据
.WhereIF(!_userManager.IsAdministrator, it => loginUserCompany.Contains(it.CompanyNo))
//添加时间查询
.WhereIF(!string.IsNullOrEmpty(input.planDate), it => SqlFunc.Between(it.PlanDate, SPlanDate.ParseToDateTime("yyyy-MM-dd 00:00:00"), EPlanDate.ParseToDateTime("yyyy-MM-dd 23:59:59")))
//一大堆查询条件
......
.WhereIF(!string.IsNullOrEmpty(input.keyword), it => it.CRMNo.Contains(input.keyword) || it.SysType.Contains(input.keyword) || it.CustomerCode.Contains(input.keyword) || it.CustomerName.Contains(input.keyword) || it.Status.ToString().Contains(input.keyword)); //返回由SqlSugar生成的SQL语句字符串
var sd = querywherr.ToSql().Key;
//groupby成主表数据
var query = querywherr.GroupBy((it, b) => new
{
it.Id,
......
})
//转成输出类
.Select((it, b) => new TmsBusiShippingNoticeListOutput
{
id = it.Id,
//返回明细的F_ShippingNo用'/'做分隔符, xxx1/xxx2/xxx3
shippingNo = SqlFunc.MappingColumn(default(string), $@"STUFF((select '/'+F_ShippingNo from tms_busi_shipping_notice_detail where F_CRMNo =it.F_CRMNo AND F_DeleteMark is null group by F_ShippingNo FOR xml path('')),1,1,'')"),
//运货方式,取数据字典
transportMethod = SqlFunc.Subqueryable<DictionaryDataEntity>().Where(w => it.TransportMethod == w.EnCode && w.DictionaryTypeId == "501598831910").Select(w => w.FullName),
//转中文前端显示 '是' '否'
isShd = SqlFunc.IF(it.IsSHD == 1).Return("Y").End("N"),
.......
//汇总明细数量、金额
qty = SqlFunc.AggregateSum(b.Qty),
amount = SqlFunc.AggregateSum(b.Amount)
})
.MergeTable();
//聚合数据的查询
query.WhereIF(!string.IsNullOrEmpty(input.shippingNo), it => it.shippingNo.Contains(input.shippingNo))
.WhereIF(!string.IsNullOrEmpty(input.qtyMin) && !string.IsNullOrEmpty(input.qtyMax), it => SqlFunc.Between(it.qty, input.qtyMin, input.qtyMax))
.WhereIF(!string.IsNullOrEmpty(input.amountMin) && !string.IsNullOrEmpty(input.amountMax), it => SqlFunc.Between(it.amount, input.amountMin, input.amountMax));
//添加排序
if (!string.IsNullOrEmpty(input.sidx))
{
query.OrderBy(input.sidx + " " + input.sort);
}
else
{
query.OrderBy(it => it.creatorTime, OrderByType.Desc);
}
//转成PageResult
var data = await query.ToPagedListAsync(input.currentPage, input.pageSize);
return PageResult<TmsBusiShippingNoticeListOutput>.SqlSugarPageResult(data);
}

ShippingNotice新增

没有新增,这边的发货通知单都是从SAP上传过来,后面去了解一下传递接口

同理也没有删除功能

ShippingNotice修改

[HttpPut("{id}")]
public async Task Update(string id, [FromBody] TmsBusiShippingNoticeUpInput input)
{
//转一下类型
var entity = input.Adapt<TmsBusiShippingNoticeEntity>();
//Updateable(修改对象) -> UpdateColumns(it => new {it.数据列}) -> ExecuteCommandAsync()
var isOk = await _repository.Context.Updateable(entity).UpdateColumns(it => new
{
it.CRMNo,
......
it.CostCenterName,
}).ExecuteCommandAsync();
if (!(isOk > 0)) throw Oops.Oh(ErrorCode.COM1001);
}

批量修改ShippingNotice(锁定)

//指示方法不应被视为可通过URL访问的操作方法
[NonAction]
public async Task LockOrReleaseShippingNotice(List<string> shippingNoArray, int lockFlag)
{
//获取要修改的List
var entity = await _repository.Context.Queryable<TmsBusiShippingNoticeEntity>().Where(x => shippingNoArray.Contains(x.CRMNo)).ToListAsync();
if (entity.Count > 0)
{
//批量修改
entity.ForEach(x =>
{
x.LockFlag = lockFlag;
x.LastModifyTime = DateTime.Now;
x.LastModifyUserId = _userManager.UserId;
});
var isOk = await _repository.Context.Updateable(entity).UpdateColumns(x => new { x.LockFlag, x.LastModifyTime, x.LastModifyUserId }).ExecuteCommandAsync();
}
}

导出

//和BaseCity几乎一摸一样的代码,除了转pararmList的字符串不一样,为什么不直接写个通用方法算了???
[HttpGet("Actions/Export")]
public async Task<dynamic> Export([FromQuery] TmsBusiShippingNoticeListQueryInput input)
{ var exportData = new List<TmsBusiShippingNoticeListOutput>();
if (input.dataType == 0)
exportData = Clay.Object(await GetList(input)).Solidify<PageResult<TmsBusiShippingNoticeListOutput>>().list;
else
exportData = await GetNoPagingList(input);
List<ParamsModel> paramList = "[{\"value\":\"SAP单号\",\"field\":\"shippingNo\"},{\"value\":\"发货通知单单号\",\"field\":\"cRMNo\"},{\"value\":\"业务类型\",\"field\":\"sysType\"}, ....... {\"value\":\"发货数量\",\"field\":\"qty\"},{\"value\":\"发货总金额\",\"field\":\"amount\"}]".ToList<ParamsModel>();
ExcelConfig excelconfig = new ExcelConfig();
excelconfig.FileName = "发货通知单.xls";
excelconfig.HeadFont = "微软雅黑";
excelconfig.HeadPoint = 10;
excelconfig.IsAllSizeColumn = true;
excelconfig.ColumnModel = new List<ExcelColumnModel>();
foreach (var item in input.selectKey.Split(',').ToList())
{
var isExist = paramList.Find(p => p.field == item);
if (isExist != null)
excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value });
} var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
ExcelExportHelper<TmsBusiShippingNoticeListOutput>.Export(exportData, excelconfig, addPath);
var fileName = _userManager.UserId + "|" + addPath + "|xls";
return new
{
name = excelconfig.FileName,
url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "SHZY")
};
}

C#TMS系统学习(ShippingNotice页面)的更多相关文章

  1. 零基础如何系统学习Java Web

    零基础如何系统学习Java Web?   我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...

  2. Hibernate的系统 学习

    Hibernate的系统 学习 一.Hibernate的介绍 1.什么是Hibernate? 首先,hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBat ...

  3. Dubbo -- 系统学习 笔记 -- 示例 -- 结果缓存

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 结果缓存 结果缓存,用于加速热门数据的访问速度,Dubbo提供声明式缓存,以减少用 ...

  4. Dubbo -- 系统学习 笔记 -- 示例 -- 静态服务

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 静态服务 有时候希望人工管理服务提供者的上线和下线,此时需将注册中心标识为非动态管 ...

  5. Dubbo -- 系统学习 笔记 -- 入门

    Dubbo -- 系统学习 笔记 -- 目录 入门 背景 需求 架构 用法 入门 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行, ...

  6. 彻底明白Flink系统学习5:window、Linux本地安装Flink

    http://www.aboutyun.com/thread-26393-1-1.html 问题导读 1.如何在window下安装Flink? 2.Flink本地安装启动命令与原先版本有什么区别? 3 ...

  7. Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇

    前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...

  8. MES系统学习

    MES系统是当今制造型企业信息化的热点,而统一建模语言UML是面向对象建模的标准语言,在软件工程发挥着重要作用.MES系统如何进行UML建模呢,今天和大家重点讨论一下MES系统的UML建模方法,请看本 ...

  9. 001 今天开始系统学习C#

    2016-01-16 之前只是大概了解过c#语言,感觉掌握不牢靠.现在开始系统学习C#.现以该博客作为学习笔记,方便后续查看.C# 目标:系统掌握c#知识 时间:30天 范围:C#基础,Winform ...

  10. php大力力 [036节] 后台系统的登录页面界面做完啦

    php大力力 [036节] 后台系统的登录页面界面做完啦 我认为做的不错,我就先不上截图啦 要你的祝福 分布注册 Twitter Login Or Signup Form 藤藤每日一练——172个Ic ...

随机推荐

  1. #树形dp,直径#51nod 1812 树的双直径

    题目 给定一棵树,边权是整数 \(c_i\) ,找出两条不相交的链(没有公共点), 使得链长的乘积最大(链长定义为这条链上所有边的权值之和,如果这条链只有1个点则链长视为0). \(n\leq 4*1 ...

  2. OpenAtom OpenHarmony分论坛,今天14:00见!附大事记精彩发布

    2022开放原子全球开源峰会 OpenAtom OpenHarmony分论坛 万物互联,使能千行百业 整装待发!精彩今日揭晓与您相约7月27日 14:00  

  3. 新手真的别再用过时的jenkins freestyle了,10分钟教你搞定快速编写jenksinfile,快速离线调试

    Pipeline是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化.它通过Domain Specific Langua ...

  4. 优先队列的基本实现【数据结构与算法—TypeScript 实现】

    笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 特性 效率比普通队列高 每个出队元素拥有最高优先级 可以用 数组.链表 等数据结构实现,但是 堆结构 是最常用的实现方式 ...

  5. 视频播放测试地址(MP4、M3U8 格式)

    最近在开发视频播放相关的业务功能,开发测试时,需要涉及到 MP4.M3U8 等视频格式. 我每次找测试视频地址时,都要找很久,现在把我在网上收集到的 MP4.M3U8 格式视频地址放在这里,希望帮助到 ...

  6. 直播预告丨Hello HarmonyOS进阶系列课程重磅来袭,4月27日开播

    为了帮助初识HarmonyOS的开发者快速入门,我们曾推出Hello HarmonyOS系列一共5期课程(传送门:https://developer.huawei.com/consumer/cn/tr ...

  7. 收藏 | 超详细的Oracle19c安装步骤-CentOS Linux

    ORACLE学习-DBA数据库工程师 收藏 | 超详细的Oracle19c安装步骤 挨踢-IT人加油 [微思网络]IT培训-思科/华为/红帽/ORACLE... 2 人赞同了该文章 DBA数据库管理必 ...

  8. docker 应用篇————docker原理[三]

    前文 前面就已经介绍了docker的安装,在https://www.cnblogs.com/aoximin/p/12906218.html,这里面,这里作为重新整理. 那么这里就不介绍了,这里直接是进 ...

  9. java 读取文本文件超简单的方法

    答案是:Scanner读取,初学者大部分都用过这货,然而这货还有这样两个构造方法: public Scanner(File source); public Scanner(InputStream st ...

  10. 前端使用 Konva 实现可视化设计器(6)

    请大家动动小手,给我一个免费的 Star 吧~ 这一章处理一下复制.粘贴.删除.画布归位.层次调整,通过右键菜单控制. github源码 gitee源码 示例地址 复制粘贴 复制粘贴(通过快捷键) / ...