TaskExtension.cs 29 KB

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