TaskExtension.cs 25 KB

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