TaskExtension.cs 24 KB

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