TaskExtension.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. using ServiceCenter.Extensions;
  2. using ServiceCenter.Logs;
  3. using ServiceCenter.Redis;
  4. using ServiceCenter.SqlSugars;
  5. using SqlSugar;
  6. using System.Xml.Linq;
  7. using WCS.Entity;
  8. using static System.Runtime.InteropServices.JavaScript.JSType;
  9. using TaskStatus = WCS.Entity.TaskStatus;
  10. namespace WCS.WorkEngineering.Extensions
  11. {
  12. /// <summary>
  13. /// 任务扩展
  14. /// </summary>
  15. public static class TaskExtension
  16. {
  17. /// <summary>
  18. /// 更新任务执行记录
  19. /// 同步更新历史任务
  20. /// </summary>
  21. /// <param name="task">任务信息</param>
  22. /// <param name="db">数据库上下文</param>
  23. /// <param name="curPoint">当前地址</param>
  24. /// <param name="desc">描述</param>
  25. public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarScopeProvider db, string curPoint, string desc) => task.AddWCS_TASK_DTL(db, curPoint, "", desc);
  26. /// <summary>
  27. /// 更新任务执行记录
  28. /// 同步更新历史任务
  29. /// </summary>
  30. /// <param name="task">任务信息</param>
  31. /// <param name="db">数据库上下文</param>
  32. /// <param name="curPoint">当前地址</param>
  33. /// <param name="nextPoint">下一个地址</param>
  34. /// <param name="desc">描述</param>
  35. public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarScopeProvider db, string curPoint, string nextPoint, string desc)
  36. {
  37. db.Insertable(new WCS_TaskDtl
  38. {
  39. ID = Guid.NewGuid(),
  40. ParentTaskCode = task.ID,
  41. CurPoint = curPoint,
  42. NextPoint = nextPoint,
  43. Desc = desc,
  44. AddWho = "WCS"
  45. }).SplitTable().ExecuteCommand();
  46. task.UpdateableOldTask(db);
  47. }
  48. /// <summary>
  49. /// 更新任务执行记录
  50. /// 同步更新历史任务
  51. /// </summary>
  52. /// <param name="task">任务信息</param>
  53. /// <param name="db">数据库上下文</param>
  54. /// <param name="curPoint">当前地址</param>
  55. /// <param name="desc">描述</param>
  56. public static void AddWCS_TASK_DTL(this WCS_TaskOld task, SqlSugarScopeProvider db, string curPoint, string desc) => task.AddWCS_TASK_DTL(db, curPoint, "", desc);
  57. /// <summary>
  58. /// 更新任务执行记录
  59. /// 同步更新历史任务
  60. /// </summary>
  61. /// <param name="task">任务信息</param>
  62. /// <param name="db">数据库上下文</param>
  63. /// <param name="curPoint">当前地址</param>
  64. /// <param name="nextPoint">下一个地址</param>
  65. /// <param name="desc">描述</param>
  66. public static void AddWCS_TASK_DTL(this WCS_TaskOld task, SqlSugarScopeProvider db, string curPoint, string nextPoint, string desc)
  67. {
  68. db.Insertable(new WCS_TaskDtl
  69. {
  70. ID = Guid.NewGuid(),
  71. ParentTaskCode = task.Id,
  72. CurPoint = curPoint,
  73. NextPoint = nextPoint,
  74. Desc = desc,
  75. AddWho = "WCS"
  76. }).SplitTable().ExecuteCommand();
  77. }
  78. /// <summary>
  79. /// 更新历史表数据
  80. /// </summary>
  81. /// <param name="taskInfo"></param>
  82. /// <param name="db"></param>
  83. public static void UpdateableOldTask(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
  84. {
  85. if (taskInfo.Status == TaskStatus.NewBuild) return;
  86. // 同步任务信息
  87. //Console.WriteLine($"开始找任务:{taskInfo.ID}");
  88. var name = db.SplitHelper<WCS_TaskOld>().GetTableName(taskInfo.AddTime);
  89. var taskOld = db.Queryable<WCS_TaskOld>().Where(v => v.Id == taskInfo.ID).SplitTable(tabs => tabs.InTableNames(name)).ToList().OrderByDescending(v => v.AddTime).First();
  90. //Console.WriteLine($"找到任务:{taskInfo.ID}");
  91. if (taskOld is not null)
  92. {
  93. if (taskInfo.Status >= TaskStatus.Finish) taskInfo.CompleteOrCancelTasks(db);
  94. else
  95. {
  96. taskOld = taskInfo.Mapper<WCS_TaskOld, WCS_TaskInfo>();
  97. taskOld.Id = taskInfo.ID;
  98. //Console.WriteLine($"开始更新:{taskInfo.ID}");
  99. db.Updateable(taskOld).Where(x => x.Id == taskOld.Id).SplitTable(tabs => tabs.InTableNames(name)).ExecuteCommand();
  100. //Console.WriteLine($"更新结束:{taskInfo.ID}");
  101. }
  102. }
  103. else
  104. {
  105. throw new KnownException($"WCS_TaskOld表中不存在任务:{taskInfo.ID},无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
  106. }
  107. }
  108. /// <summary>
  109. /// 完成或取消任务
  110. /// </summary>
  111. /// <param name="taskInfo"></param>
  112. /// <param name="db"></param>
  113. public static void CompleteOrCancelTasks(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
  114. {
  115. if (taskInfo.Status is not Entity.TaskStatus.Finish and not Entity.TaskStatus.Cancel) throw new KnownException("任务未完成或取消,无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
  116. // 任务完成或取消,进行相关同步动作
  117. var name = db.SplitHelper<WCS_TaskOld>().GetTableName(taskInfo.AddTime);
  118. var taskOld = db.Queryable<WCS_TaskOld>().Where(v => v.Id == taskInfo.ID).SplitTable(tabs => tabs.InTableNames(name)).ToList().OrderByDescending(v => v.AddTime).First();
  119. if (taskOld is not null)
  120. {
  121. taskOld = taskInfo.Mapper<WCS_TaskOld, WCS_TaskInfo>();
  122. taskOld.Id = taskInfo.ID;
  123. //更新任务历史表,删除任务当前表
  124. db.Updateable(taskOld).Where(x => x.Id == taskOld.Id).SplitTable(tabs => tabs.InTableNames(name)).ExecuteCommand();
  125. db.Deleteable(taskInfo).ExecuteCommand();
  126. }
  127. else
  128. {
  129. throw new KnownException($"WCS_TaskOld表中不存在任务:{taskInfo.ID},无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid);
  130. }
  131. }
  132. /// <summary>
  133. /// 更新表数据
  134. /// </summary>
  135. /// <param name="taskInfo"></param>
  136. /// <param name="db"></param>
  137. public static void Updateable(this WCS_TaskInfo taskInfo, SqlSugarScopeProvider db)
  138. {
  139. taskInfo.EditTime = DateTime.Now;
  140. taskInfo.EditWho = "WCS";
  141. db.Updateable(taskInfo).ExecuteCommand();
  142. }
  143. ///// <summary>
  144. ///// 获取出库任务
  145. ///// </summary>
  146. ///// <param name="taskInfo">任务</param>
  147. ///// <param name="db">db</param>
  148. ///// <param name="allOutCode">可用出库站台</param>
  149. ///// <param name="floor">楼层</param>
  150. ///// <param name="obj">堆垛机</param>
  151. ///// <param name="index">递归次数</param>
  152. ///// <returns></returns>
  153. ///// <exception cref="KnownException"></exception>
  154. //public static WCS_TaskInfo GetOutTask(this WCS_TaskInfo taskInfo, SqlSugarHelper db, List<string> allOutCode, int floor, SRM obj, int index = 1)
  155. //{
  156. // return task;
  157. //}
  158. /// <summary>
  159. /// 获取AGV任务ID
  160. /// </summary>
  161. /// <param name="db">db</param>
  162. /// <returns></returns>
  163. public static int GetAgvTaskId(this SqlSugarHelper db)
  164. {
  165. var id = db.Default.Queryable<WCS_AgvTaskInfo>().SplitTable(v => v.Take(2)).Max(v => v.ID);
  166. return id + 1;
  167. }
  168. /// <summary>
  169. /// 更新任务执行记录
  170. /// </summary>
  171. /// <param name="task">任务信息</param>
  172. public static void UpdateRedisHash(this WCS_TaskInfo task)
  173. {
  174. var key = $"Hash:{task.ID}";
  175. if (task.Status >= TaskStatus.Finish)
  176. {
  177. RedisHub.WMS.Del(key);
  178. }
  179. else
  180. {
  181. RedisHub.WMS.HMSet(key, task.ToDic());
  182. }
  183. }
  184. #region 工字轮支线分流
  185. /// <summary>
  186. /// 初始化码垛信息
  187. /// </summary>
  188. /// <param name="task"></param>
  189. public static void InitStackStructure(this WCS_TaskInfo task, SqlSugarScopeProvider db)
  190. {
  191. var billBomsetgrp = db.Queryable<BillBomsetgrp>().Single(x => x.IsStop == 0 && x.BomCode.Contains(task.MatCode));
  192. if (billBomsetgrp == null) throw new KnownException($"物料规格[{task.MatCode}]无可用码垛垛形", LogLevelEnum.Mid);
  193. var billBomsetinfos = db.Queryable<BillBomsetinfo>().Where(x => x.BomSetHdrId == billBomsetgrp.Id).ToList();
  194. //开始构造垛形信息
  195. var palletizing = new WCS_Palletizing()
  196. {
  197. Code = billBomsetgrp.Code,
  198. ShortCode = billBomsetgrp.ShortCode,
  199. ProMaterCode = billBomsetgrp.ProMaterCode,
  200. TpTypeCode = billBomsetgrp.TpTypeCode,
  201. LayerCountQty = 2,
  202. StampType = billBomsetgrp.StampType,
  203. Finish = false,
  204. AddTime = DateTime.Now,
  205. TaskId = task.ID,
  206. WarehouseCode = task.WarehouseCode,
  207. DeviceCode = task.Device
  208. };
  209. palletizing = db.Insertable(palletizing).ExecuteReturnEntity();
  210. foreach (var item in billBomsetinfos.GroupBy(x => x.Row).OrderBy(x => x.Key))
  211. {
  212. var layerNo = item.Key <= 6 ? 1 : 2;
  213. //获取层信息
  214. var palletizingLayer = db.Queryable<WCS_PalletizingLayer>()
  215. .Single(x => x.PalletizingId == palletizing.Id && x.LayerNo == layerNo);
  216. if (palletizingLayer == null)
  217. {
  218. palletizingLayer = new WCS_PalletizingLayer()
  219. {
  220. LayerNo = layerNo,
  221. PalletizingId = palletizing.Id,
  222. WarehouseCode = palletizing.WarehouseCode,
  223. };
  224. palletizingLayer = db.Insertable(palletizingLayer).ExecuteReturnEntity();
  225. }
  226. //获取行信息
  227. var palletizingRow = db.Queryable<WCS_PalletizingRow>()
  228. .Single(x => x.PalletizingLayerId == palletizingLayer.Id && x.RowNo == item.Key);
  229. if (palletizingRow == null)
  230. {
  231. palletizingRow = new WCS_PalletizingRow()
  232. {
  233. RowNo = item.Key,
  234. PalletizingLayerId = palletizingLayer.Id,
  235. PalletizingId = palletizing.Id,
  236. WarehouseCode = palletizingLayer.WarehouseCode
  237. };
  238. palletizingRow = db.Insertable(palletizingRow).ExecuteReturnEntity();
  239. }
  240. //重新查询最新的数据
  241. var layer = palletizingLayer;
  242. palletizingLayer = db.Queryable<WCS_PalletizingLayer>().Single(x => x.Id == layer.Id);
  243. var row = palletizingRow;
  244. palletizingRow = db.Queryable<WCS_PalletizingRow>().Single(x => x.Id == row.Id);
  245. //构造位信息
  246. foreach (var loc in item)
  247. {
  248. var palletizingLoc = db.Queryable<WCS_PalletizingLoc>().Single(x => x.PalletizingRowId == palletizingRow.Id && x.XYNo == loc.XYNo);
  249. if (palletizingLoc == null)
  250. {
  251. palletizingLoc = new WCS_PalletizingLoc()
  252. {
  253. IsEmpty = loc.IsEmpty != 0,
  254. XYNo = loc.XYNo,
  255. MatCode = loc.MatCode,
  256. SideNum = loc.SideNum,
  257. SpoolType = loc.SpoolType,
  258. TaskId = task.ID,
  259. PalletizingRowId = palletizingRow.Id,
  260. Finish = false,
  261. WarehouseCode = palletizingRow.WarehouseCode
  262. };
  263. db.Insertable(palletizingLoc).ExecuteReturnEntity();
  264. }
  265. //同步是否混合料行
  266. palletizingRow.IsMixRow = loc.IsMixRow != 0;
  267. db.Updateable(palletizingRow).ExecuteCommand();
  268. }
  269. //更新行信息
  270. palletizingRow = db.Queryable<WCS_PalletizingRow>().Includes(x => x.Locs).Single(x => x.Id == row.Id);
  271. palletizingRow.QtyMaxCount = palletizingRow.Locs.Count(x => !x.IsEmpty);
  272. palletizingRow.IsEmpty = palletizingRow.QtyMaxCount <= 0;
  273. palletizingRow.MatCodeList = palletizingRow.Locs.Select(x => x.MatCode).ToList().GetMatList();
  274. db.Updateable(palletizingRow).ExecuteCommand();
  275. //更新层信息
  276. palletizingLayer = db.Queryable<WCS_PalletizingLayer>().Includes(x => x.Rows, l => l.Locs).Single(x => x.Id == layer.Id);
  277. var count = palletizingLayer.Rows.Count(x => !x.IsEmpty); //计算所有不空数量
  278. palletizingLayer.IsEmpty = count <= 0;
  279. palletizingLayer.RowCountQty = palletizingLayer.Rows.Count;
  280. palletizingLayer.Finish = false;
  281. palletizingLayer.MatCodeList = palletizingLayer.Rows.SelectMany(x => x.Locs).Select(x => x.MatCode).ToList().GetMatList();
  282. db.Updateable(palletizingLayer).ExecuteCommand();
  283. }
  284. var palletizing1 = palletizing;
  285. palletizing = db.Queryable<WCS_Palletizing>().Includes(x => x.Layers, r => r.Rows, l => l.Locs).Single(x => x.Id == palletizing1.Id);
  286. //计算垛形信息
  287. var goods = palletizing.Layers.Select(x => x.Rows).SelectMany(x => x).Select(x => x.Locs).SelectMany(x => x).ToList();
  288. palletizing.CountQty = goods.Count(x => !x.IsEmpty);
  289. palletizing.MatCodeList = palletizing.Layers.SelectMany(x => x.Rows).SelectMany(x => x.Locs).Select(x => x.MatCode).ToList().GetMatList();
  290. db.Updateable(palletizing).ExecuteCommand();
  291. }
  292. public static string GetMatList(this List<string> matList)
  293. {
  294. return matList.Distinct().Aggregate("", (current, mat) => current + $"[{mat}]");
  295. }
  296. /// <summary>
  297. /// 去除转义字符
  298. /// </summary>
  299. /// <param name="value"></param>
  300. /// <returns></returns>
  301. public static string RemoveEscapeCharacters(this string? value)
  302. {
  303. return value.Trim('\0', '\a', '\b', '\f', '\n', '\r', '\t', '\v').Trim();
  304. }
  305. #endregion 工字轮支线分流
  306. }
  307. /// <summary>
  308. /// 垛形位信息
  309. /// </summary>
  310. public class StackPosInfo
  311. {
  312. /// <summary>
  313. /// 任务号
  314. /// </summary>
  315. public int TaskNumber { get; set; }
  316. /// <summary>
  317. /// 是否空置
  318. /// </summary>
  319. public bool IsEmpty { get; set; }
  320. /// <summary>
  321. /// 坐标号
  322. /// </summary>
  323. public string XYNo { get; set; }
  324. /// <summary>
  325. /// 物料编码
  326. /// </summary>
  327. public string MatCode { get; set; }
  328. /// <summary>
  329. /// 正反面
  330. /// </summary>
  331. public int SideNum { get; set; }
  332. /// <summary>
  333. /// 工字轮类型
  334. /// </summary>
  335. public string SpoolType { get; set; }
  336. /// <summary>
  337. /// 是否结束
  338. /// </summary>
  339. public bool Finish { get; set; }
  340. }
  341. /// <summary>
  342. /// 垛型明细表
  343. /// </summary>
  344. [SugarTable("Bill_BomSetInfo", tableDescription: "垛型明细表")]
  345. public partial class BillBomsetinfo
  346. {
  347. /// <summary>
  348. /// ID
  349. /// </summary>
  350. [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, ColumnDescription = "ID")]
  351. public virtual long Id { get; set; }
  352. /// <summary>
  353. /// 备注
  354. /// </summary>
  355. [SugarColumn(ColumnName = "Memo", Length = 500, IsNullable = true, ColumnDataType = "nvarchar", DefaultValue = "", ColumnDescription = "备注")]
  356. public virtual string Memo { get; set; }
  357. /// <summary>
  358. /// 创建用户
  359. /// </summary>
  360. [SugarColumn(ColumnName = "AddWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "创建用户")]
  361. public virtual string AddWho { get; set; } = "";
  362. /// <summary>
  363. /// 更新用户
  364. /// </summary>
  365. [SugarColumn(ColumnName = "EditWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "更新用户")]
  366. public virtual string EditWho { get; set; } = "";
  367. /// <summary>
  368. /// 创建时间
  369. /// </summary>
  370. [SugarColumn(ColumnName = "AddTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "创建时间")]
  371. public virtual DateTime AddTime { get; set; } = DateTime.Now;
  372. /// <summary>
  373. /// 更新时间
  374. /// </summary>
  375. [SugarColumn(ColumnName = "EditTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "更新时间")]
  376. public virtual DateTime EditTime { get; set; } = DateTime.Now;
  377. /// <summary>
  378. /// 垛型id
  379. /// </summary>
  380. [SugarColumn(ColumnDataType = "bigint", IsNullable = false, ColumnDescription = "垛型id")]
  381. public long BomSetHdrId { get; set; }
  382. /// <summary>
  383. /// 是否停用
  384. /// </summary>
  385. [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否停用")]
  386. public int IsStop { get; set; }
  387. /// <summary>
  388. /// 是否空置
  389. /// </summary>
  390. [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否空置")]
  391. public int IsEmpty { get; set; }
  392. /// <summary>
  393. /// 坐标号
  394. /// </summary>
  395. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "坐标号")]
  396. public string XYNo { get; set; }
  397. /// <summary>
  398. /// 物料id
  399. /// </summary>
  400. [SugarColumn(ColumnDataType = "bigint", ColumnDescription = "物料id")]
  401. public long MatId { get; set; }
  402. /// <summary>
  403. /// 物料编码
  404. /// </summary>
  405. [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true, Length = 50, ColumnDescription = "物料编码")]
  406. public string MatCode { get; set; }
  407. /// <summary>
  408. /// 正反面
  409. /// </summary>
  410. [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "正反面")]
  411. public int SideNum { get; set; }
  412. /// <summary>
  413. /// 工字轮类型
  414. /// </summary>
  415. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true, ColumnDescription = "工字轮类型")]
  416. public string SpoolType { get; set; }
  417. /// <summary>
  418. /// 钢丝类型
  419. /// </summary>
  420. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true, ColumnDescription = "钢丝类型")]
  421. public string SilkType { get; set; }
  422. /// <summary>
  423. /// 钢丝直径
  424. /// </summary>
  425. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true, ColumnDescription = "钢丝直径")]
  426. public decimal SilkDiam { get; set; }
  427. /// <summary>
  428. /// 钢丝直径上限
  429. /// </summary>
  430. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true, ColumnDescription = "钢丝直径上限")]
  431. public decimal SilkDiamMaxCount { get; set; }
  432. /// <summary>
  433. /// 数量上限
  434. /// </summary>
  435. [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "数量上限")]
  436. public int QtyMaxCount { get; set; }
  437. /// <summary>
  438. /// 是否芯股
  439. /// </summary>
  440. [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否芯股")]
  441. public int IsCore { get; set; }
  442. /// <summary>
  443. /// 09垛型里面的行(1-12)
  444. /// </summary>
  445. [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "09垛型里面的行(1-12)")]
  446. public int Row { get; set; }
  447. /// <summary>
  448. /// 是否混合料行(09垛型使用,1是0否)
  449. /// </summary>
  450. [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否混合料行(09垛型使用,1是0否)")]
  451. public int IsMixRow { get; set; }
  452. /// <summary>
  453. /// 混合料行编码
  454. /// </summary>
  455. [SugarColumn(ColumnDataType = "nvarchar", IsNullable = true, Length = 50, ColumnDescription = "混合料行编码")]
  456. public string MixRowCode { get; set; }
  457. /// <summary>
  458. /// 第一种第二种第三种
  459. /// </summary>
  460. [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "第一种第二种第三种")]
  461. public int CategoryId { get; set; }
  462. }
  463. /// <summary>
  464. /// 垛形主表
  465. /// </summary>
  466. [Tenant("fj")]
  467. [SugarTable("Bill_BomSetGrp", tableDescription: "垛形主表")]
  468. public partial class BillBomsetgrp
  469. {
  470. /// <summary>
  471. /// ID
  472. /// </summary>
  473. [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, ColumnDescription = "ID")]
  474. public virtual long Id { get; set; }
  475. /// <summary>
  476. /// 备注
  477. /// </summary>
  478. [SugarColumn(ColumnName = "Memo", Length = 500, IsNullable = true, ColumnDataType = "nvarchar", DefaultValue = "", ColumnDescription = "备注")]
  479. public virtual string Memo { get; set; }
  480. /// <summary>
  481. /// 创建用户
  482. /// </summary>
  483. [SugarColumn(ColumnName = "AddWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "创建用户")]
  484. public virtual string AddWho { get; set; } = "";
  485. /// <summary>
  486. /// 更新用户
  487. /// </summary>
  488. [SugarColumn(ColumnName = "EditWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "更新用户")]
  489. public virtual string EditWho { get; set; } = "";
  490. /// <summary>
  491. /// 创建时间
  492. /// </summary>
  493. [SugarColumn(ColumnName = "AddTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "创建时间")]
  494. public virtual DateTime AddTime { get; set; } = DateTime.Now;
  495. /// <summary>
  496. /// 更新时间
  497. /// </summary>
  498. [SugarColumn(ColumnName = "EditTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "更新时间")]
  499. public virtual DateTime EditTime { get; set; } = DateTime.Now;
  500. /// <summary>
  501. /// 是否停用
  502. /// </summary>
  503. [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "是否停用")]
  504. public int IsStop { get; set; }
  505. /// <summary>
  506. /// 垛型编码
  507. /// </summary>
  508. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "垛型编码")]
  509. public string Code { get; set; }
  510. /// <summary>
  511. /// 短垛型编码
  512. /// </summary>
  513. [SugarColumn(ColumnDataType = "smallint", IsNullable = false, ColumnDescription = "短垛型编码")]
  514. public short ShortCode { get; set; }
  515. /// <summary>
  516. /// 垛型名称
  517. /// </summary>
  518. [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = false, ColumnDescription = "垛型名称")]
  519. public string Name { get; set; }
  520. /// <summary>
  521. /// BomCode(投料信息)
  522. /// </summary>
  523. [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = false, ColumnDescription = "BomCode(投料信息)")]
  524. public string BomCode { get; set; }
  525. /// <summary>
  526. /// 帘线物料编码
  527. /// </summary>
  528. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "帘线物料编码")]
  529. public string ProMaterCode { get; set; }
  530. /// <summary>
  531. /// 工字轮个数
  532. /// </summary>
  533. [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "工字轮个数")]
  534. public int HWCountQty { get; set; }
  535. /// <summary>
  536. /// 托盘类型
  537. /// </summary>
  538. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = false, ColumnDescription = "托盘类型")]
  539. public string TpTypeCode { get; set; }
  540. /// <summary>
  541. /// 层数
  542. /// </summary>
  543. [SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "层数")]
  544. public int LayerCountQty { get; set; }
  545. /// <summary>
  546. /// 垛型大类
  547. /// </summary>
  548. [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "垛型大类")]
  549. public int StampType { get; set; }
  550. }
  551. }