RGVSystems.cs 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434
  1. using PlcSiemens.Core.Extension;
  2. using ServiceCenter.Extensions;
  3. using ServiceCenter.Logs;
  4. using ServiceCenter.SqlSugars;
  5. using SqlSugar;
  6. using System.ComponentModel;
  7. using WCS.Core;
  8. using WCS.Entity;
  9. using WCS.Entity.Protocol.BCR;
  10. using WCS.Entity.Protocol.RGV;
  11. using WCS.Entity.Protocol.Robot;
  12. using WCS.Entity.Protocol.Station;
  13. using WCS.Entity.Protocol.Truss;
  14. using WCS.WorkEngineering.Extensions;
  15. using WCS.WorkEngineering.Worlds;
  16. using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
  17. using TaskStatus = WCS.Entity.TaskStatus;
  18. using TaskType = WCS.Entity.TaskType;
  19. namespace WCS.WorkEngineering.Systems
  20. {
  21. /// <summary>
  22. /// RGV交互系统
  23. /// </summary>
  24. [BelongTo(typeof(RgvWorld))]
  25. [Description("RGV交互系统")]
  26. public class RGVSystems : DeviceSystem<Device<IRGV520, IRGV521, IBCR81>>
  27. {
  28. protected override bool ParallelDo => true;
  29. /// <summary>
  30. /// 取货点设备集合
  31. /// </summary>
  32. private readonly Dictionary<string, List<Device<IStation520, IStation521, IStation523>>> _pickUpDevices = new();
  33. public RGVSystems()
  34. {
  35. //获取所有的巷道集合
  36. var rgvList = Device.All.Where(v => v.HasFlag(DeviceFlags.RGV));
  37. foreach (var rgv in rgvList)
  38. {
  39. _pickUpDevices.Add(rgv.Code, rgv.Sources.Where(v => v.HasFlag(DeviceFlags.输送机)).Select(v => new Device<IStation520, IStation521, IStation523>(v, this.World)).ToList());
  40. }
  41. }
  42. public override void Do(Device<IRGV520, IRGV521, IBCR81> obj)
  43. {
  44. try
  45. {
  46. if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
  47. {
  48. World.Log($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High);
  49. return;
  50. }
  51. if (obj.Data2.WorkMode != RGVWorkMode.Automatic)
  52. {
  53. World.Log(obj.Data2.WorkMode.GetDescription());
  54. return;
  55. }
  56. //wcs任务完成确认信号未清除
  57. if (obj.Data.RES1 == 1)
  58. {
  59. World.Log("wcs任务完成确认信号未清除");
  60. return;
  61. }
  62. if (obj.Data2.Status.HasFlag(RGVStatus.Taskfinishi))
  63. {
  64. switch (obj.Data2.CmdType)
  65. {
  66. case RGVCmdType.PickGoods: //单独取货任务完成,默认只有空托盘才会下发单独取货任务
  67. World.Log($"任务处理:开始-取货完成-任务号[{obj.Data2.TaskNumber}]起始地址[{obj.Data2.StartPosition}]目标地址[{obj.Data2.DestPosition}]");
  68. //开始申请读码信息
  69. var bcrCode = obj.Data3.GetBCRCode();
  70. if (bcrCode.IsNullOrWhiteSpace() || bcrCode.Contains(":"))
  71. {
  72. World.Log("扫码失败,内容为空", LogLevelEnum.Mid);
  73. return;
  74. }
  75. World.Log($"任务处理:扫码结果-{bcrCode}");
  76. var taskNumber = 0;
  77. SqlSugarHelper.Do(_db =>
  78. {
  79. var db = _db.Default;
  80. //检查库存表是否有残留库存信息
  81. if (db.Queryable<BillInvnow>().Any(x => x.ContGrpBarCode == bcrCode))
  82. {
  83. //删除库存
  84. var invNow = db.Queryable<BillInvnow>().Where(x => x.ContGrpBarCode == bcrCode).OrderByDescending(x => x.AddTime).First();
  85. if (invNow.IsTorsChk) //是一楼码垛入库
  86. {
  87. db.DeleteableRowLock(invNow).ExecuteCommand(); //删除库存
  88. var invInit = db.Queryable<BillInvinit>().Where(x => x.ContGrpBarCode == bcrCode).OrderByDescending(x => x.AddTime).First();
  89. db.DeleteableRowLock(invInit).ExecuteCommand();//删除条码
  90. var taskInfos = db.Queryable<WCS_TaskInfo>().Where(x => x.BarCode == bcrCode && x.Status == TaskStatus.NewBuild && x.BusType == "人工满托入库").ToList();
  91. foreach (var task in taskInfos)
  92. {
  93. //取消任务
  94. task.Status = TaskStatus.Cancel;
  95. task.ManualRemarks = "托盘已使用,需在二楼组盘";
  96. db.Updateable(task).ExecuteCommand();
  97. task.AddWCS_TASK_DTL(db, obj.Entity.Code, "", "取消任务");
  98. }
  99. }
  100. World.Log($"【{obj.Entity.Code}】上的托盘 【{bcrCode}】存在历史库存信息,请检查对应托盘条码是否存在未完成的出库任务!!!!!", LogLevelEnum.High);
  101. return;
  102. }
  103. var dev = Device.All.First(x => x.Code == obj.Data2.DestPosition.ToString());
  104. if (dev.HasFlag(DeviceFlags.桁架码垛位))
  105. {
  106. //开始绑定任务,并下发新的任务信息到小车
  107. var palletizingInfo = db.Queryable<WCS_Palletizing>().Single(x => x.Id == obj.Data2.TaskNumber);
  108. if (palletizingInfo == null)
  109. {
  110. World.Log($"未找到对应的码垛信息{obj.Data2.TaskNumber}", LogLevelEnum.Mid);
  111. return;
  112. }
  113. palletizingInfo.PalleCode = bcrCode;
  114. db.UpdateableRowLock(palletizingInfo).UpdateColumns(x => new { x.PalleCode }).ExecuteCommand();
  115. taskNumber = palletizingInfo.Id;
  116. World.Log($"任务处理:当前任务为桁架区域补空托任务");
  117. }
  118. else if (dev.HasFlag(DeviceFlags.环形库码垛工位))
  119. {
  120. //开始处理对应的搬运任务信息
  121. var task = db.Queryable<WCS_TaskInfo>().UpdLock().First(x => x.Type == TaskType.Delivery && x.ID == obj.Data2.TaskNumber && x.AddrTo == obj.Data2.DestPosition.ToString());
  122. if (task == null)
  123. {
  124. World.Log($"未找到对应的搬运任务{obj.Data2.TaskNumber}", LogLevelEnum.Mid);
  125. return;
  126. }
  127. task.BarCode = bcrCode;
  128. db.UpdateableRowLock(task).UpdateColumns(x => new { x.BarCode }).ExecuteCommand();
  129. task.AddWCS_TASK_DTL(db, obj.Entity.Code, obj.Data2.DestPosition.ToString(), $"环形库码垛位{obj.Data2.DestPosition}搬运任务绑定条码信息{bcrCode}");
  130. taskNumber = task.ID;
  131. World.Log($"任务处理:当前任务为环形库区域补空托任务");
  132. }
  133. });
  134. if (taskNumber == 0)
  135. {
  136. World.Log($"取货完成处理失败", LogLevelEnum.Mid);
  137. return;
  138. }
  139. //清空目标点信息
  140. var destDev = new Device<IStation520>(Device.All.FirstOrDefault(x => x.Code == obj.Data2.DestPosition.ToString())!, World);
  141. destDev.Data.TaskNumber = 0;
  142. destDev.Data.GoodsStart = 0;
  143. destDev.Data.GoodsEnd = 0;
  144. obj.Data2.TaskNumber = taskNumber;
  145. obj.Data.RES1 = 1;
  146. World.Log($"任务处理:结束-取货完成-任务号[{obj.Data2.TaskNumber}]起始地址[{obj.Data2.StartPosition}]目标地址[{obj.Data2.DestPosition}]");
  147. break;
  148. case RGVCmdType.PutGoods:
  149. Device destPosition = null;
  150. bool isPalletizing = false;
  151. try
  152. {
  153. World.Log($"任务处理:开始-放货完成-任务号[{obj.Data2.TaskNumber}]起始地址[{obj.Data2.StartPosition}]目标地址[{obj.Data2.DestPosition}]");
  154. WCS_TaskInfo finishiTask = null;
  155. var startPosition = Device.All.Where(x => x.Code == obj.Data2.StartPosition.ToString())
  156. .Select(x => new Device<IStation520, IStation521, IStation523>(x, World))
  157. .FirstOrDefault();
  158. destPosition = Device.All.FirstOrDefault(x => x.Code == obj.Data2.DestPosition.ToString());
  159. isPalletizing = destPosition!.HasFlag(DeviceFlags.桁架码垛位, DeviceFlags.环形库码垛工位);
  160. short countQty = 0;
  161. short shortCode = 0;
  162. SqlSugarHelper.Do(_db =>
  163. {
  164. var db = _db.Default;
  165. if (isPalletizing)
  166. {
  167. if (destPosition.HasFlag(DeviceFlags.桁架码垛位))
  168. {
  169. var palletizingInfo = db.Queryable<WCS_Palletizing>()
  170. .First(x => x.Id == obj.Data.TaskNumber);
  171. countQty = palletizingInfo.CountQty.ToShort();
  172. shortCode = palletizingInfo.ShortCode;
  173. World.Log($"任务处理:当前任务为桁架区域补空托任务");
  174. }
  175. else if (destPosition.HasFlag(DeviceFlags.环形库码垛工位))
  176. {
  177. var deliveryTask = db.Queryable<WCS_TaskInfo>().UpdLock()
  178. .First(x => x.ID == obj.Data.TaskNumber);
  179. countQty = deliveryTask.FullQty;
  180. shortCode = deliveryTask.PalletType;
  181. deliveryTask.Status = TaskStatus.RgvCompleted;
  182. deliveryTask.EditTime = DateTime.Now;
  183. deliveryTask.LastInteractionPoint = obj.Entity.Code;
  184. db.Updateable(deliveryTask).UpdateColumns(x => new { x.Status, x.EditTime, x.LastInteractionPoint }).ExecuteCommand();
  185. deliveryTask.AddWCS_TASK_DTL(db, deliveryTask.AddrTo, $"RGV任务执行结束");
  186. World.Log($"任务处理:当前任务为环形库区域补空托任务");
  187. }
  188. }
  189. });
  190. if (startPosition.Data.TaskNumber == obj.Data.TaskNumber) //初始化起始点信息
  191. {
  192. startPosition.Data.TaskNumber = 0;
  193. startPosition.Data.GoodsEnd = 0;
  194. World.Log($"任务处理:初始化取货点{startPosition.Entity.Code}任务及目标地址信息");
  195. }
  196. //目标地址是码垛工位
  197. if (isPalletizing)
  198. {
  199. if (destPosition.HasFlag(DeviceFlags.桁架码垛位))
  200. {
  201. var dest = new Device<ITruss530,ITruss531>(destPosition!, World);
  202. if (dest.Data2.MaxQuantity == 0)
  203. {
  204. dest.Data.MaxQuantity = countQty;
  205. dest.Data.Quantity = 0;
  206. dest.Data.Type = shortCode;
  207. dest.Data.VoucherNo++;
  208. World.Log($"任务处理:写入码垛信息-码垛位[{dest.Entity.Code}]最大码垛数量[{dest.Data.MaxQuantity}]已码数量[{dest.Data.Quantity}]垛形[{dest.Data.Type}]凭证号[{dest.Data.VoucherNo}]");
  209. }
  210. else {
  211. World.Log($"桁架垛型信息未清除,无法写入新垛型信息请检查确认,最大码垛数量[{dest.Data.MaxQuantity}]已码数量[{dest.Data.Quantity}]垛形[{dest.Data.Type}]凭证号[{dest.Data.VoucherNo}]",LogLevelEnum.Mid);
  212. return;
  213. }
  214. }
  215. else if (destPosition.HasFlag(DeviceFlags.环形库码垛工位))
  216. {
  217. var dest = new Device<IRobot530>(destPosition!, World);
  218. dest.Data.MaxQuantity = countQty;
  219. dest.Data.Type = shortCode;
  220. dest.Data.VoucherNo++;
  221. World.Log($"任务处理:写入码垛信息-码垛位[{dest.Entity.Code}]最大码垛数量[{dest.Data.MaxQuantity}]垛形[{dest.Data.Type}]凭证号[{dest.Data.VoucherNo}]");
  222. }
  223. }
  224. }
  225. catch (Exception e)
  226. {
  227. World.Log($"处理小车放货完成是出现错误:{e.Message}-{e.StackTrace}");
  228. return;
  229. }
  230. obj.Data.RES1 = 1;
  231. World.Log($"任务处理:结束-放货完成-任务号[{obj.Data2.TaskNumber}]起始地址[{obj.Data2.StartPosition}]目标地址[{obj.Data2.DestPosition}]");
  232. break;
  233. case RGVCmdType.Move:
  234. World.Log($"任务处理:开始-移动完成-任务号[{obj.Data2.TaskNumber}]目标地址[{obj.Data2.DestPosition}]");
  235. obj.Data.RES1 = 1;
  236. World.Log($"任务处理:结束-移动完成-任务号[{obj.Data2.TaskNumber}]目标地址[{obj.Data2.DestPosition}]");
  237. break;
  238. case RGVCmdType.ChangePutGoods:
  239. break;
  240. case RGVCmdType.ChangePickGoods:
  241. break;
  242. case RGVCmdType.PickPutGoods:
  243. World.Log($"任务处理:开始-取放货完成-任务号[{obj.Data2.TaskNumber}]起始地址[{obj.Data2.StartPosition}]目标地址[{obj.Data2.DestPosition}]");
  244. var statDev = Device.All.FirstOrDefault(x => x.Code == obj.Data.StartPosition.ToString());
  245. var stDev = new Device<IStation520, IStation521>(Device.All.FirstOrDefault(x => x.Code == obj.Data.StartPosition.ToString())!, World);
  246. stDev.Data.TaskNumber = 0;
  247. stDev.Data.GoodsStart = 0;
  248. stDev.Data.GoodsEnd = 0;
  249. World.Log($"任务处理:清除目标地址信息-目标货位{stDev.Entity.Code}");
  250. obj.Data.RES1 = 1;
  251. World.Log($"任务处理:结束-取放货完成-任务号[{obj.Data2.TaskNumber}]起始地址[{obj.Data2.StartPosition}]目标地址[{obj.Data2.DestPosition}]");
  252. break;
  253. default:
  254. throw new ArgumentOutOfRangeException();
  255. }
  256. return;
  257. }
  258. if (obj.Data2.SystemStatus != RGVSystemStatus.空闲)
  259. {
  260. World.Log(obj.Data2.SystemStatus.GetDescription());
  261. return;
  262. }
  263. if (obj.Data2.Status.HasFlag(RGVStatus.RES1)) //离开非安全区域
  264. {
  265. World.Log($"任务处理:开始-下发移动任务-任务号[{obj.Data.TaskNumber}]任务类型[{obj.Data.CmdType}]目标地址[{obj.Data.DestPosition}]凭证号[{obj.Data.VoucherNo}]");
  266. obj.Data.TaskNumber = obj.Data.TaskNumber;
  267. obj.Data.CmdType = RGVCmdType.Move;
  268. obj.Data.DestPosition = obj.Entity.Code switch
  269. {
  270. "RGV1" => 1668,
  271. "RGV2" => 1683,
  272. "RGV3" => 1698,
  273. "RGV4" => 1713,
  274. "RGV5" => 1728,
  275. "RGV6" => 1743,
  276. _ => throw new ArgumentOutOfRangeException()
  277. };
  278. obj.Data.VoucherNo++;
  279. World.Log($"任务处理:结束-下发移动任务-任务号[{obj.Data.TaskNumber}]任务类型[{obj.Data.CmdType}]目标地址[{obj.Data.DestPosition}]凭证号[{obj.Data.VoucherNo}]");
  280. return;
  281. }
  282. if (obj.Data2.CmdType == RGVCmdType.PickGoods && !obj.Data2.Status.HasFlag(RGVStatus.Taskfinishi))
  283. {
  284. if (obj.Data2.Status.HasFlag(RGVStatus.PH_Status))
  285. {
  286. World.Log($"任务处理:开始-下发放货任务-任务号[{obj.Data.TaskNumber}]任务类型[{obj.Data.CmdType}]起始地址[{obj.Data.StartPosition}]目标地址[{obj.Data.DestPosition}]凭证号[{obj.Data.VoucherNo}]");
  287. obj.Data.TaskNumber = obj.Data.TaskNumber;
  288. obj.Data.CmdType = RGVCmdType.PutGoods;
  289. obj.Data.StartPosition = obj.Data2.StartPosition;
  290. obj.Data.DestPosition = obj.Data2.DestPosition;
  291. obj.Data.VoucherNo++;
  292. World.Log($"任务处理:结束-下发放货任务-任务号[{obj.Data.TaskNumber}]任务类型[{obj.Data.CmdType}]起始地址[{obj.Data.StartPosition}]目标地址[{obj.Data.DestPosition}]凭证号[{obj.Data.VoucherNo}]");
  293. return;
  294. }
  295. }
  296. var pickUpDevices = _pickUpDevices.FirstOrDefault(x => x.Key == obj.Entity.Code).Value;
  297. //有货且需要搬运货物的站台
  298. var devs = pickUpDevices.Where(v => v.Data3.Status.HasFlag(StationStatus.PH_Status) && v.Data.TaskNumber != 0)
  299. .Where(v => v.Entity.Code.ToShort() != v.Data.GoodsEnd && v.Data.GoodsEnd != 0)
  300. .ToList();
  301. //筛选出目标站台无货的站台
  302. var putDev = obj.Entity.Targets.Where(x => x.HasFlag(DeviceFlags.输送机))
  303. .Select(x => new Device<IStation520, IStation521, IStation523>(x, World))
  304. .Where(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status))
  305. .Where(x => !x.Data3.Status.HasFlag(StationStatus.OT_Status))
  306. .Select(x => x.Entity.Code.ToShort());
  307. //var devList = devs.OrderBy(x => x.Entity.Code).Where(x => putDev.Contains(x.Data.GoodsEnd));
  308. var devList = devs.OrderBy(x => x.Data.TaskNumber).Where(x => putDev.Contains(x.Data.GoodsEnd));
  309. if (!devList.Any())
  310. {
  311. World.Log($"无可用任务");
  312. }
  313. foreach (var dev in devList)
  314. {
  315. //区分任务是拆盘机到码垛工位,还是码垛工位到拆盘机
  316. if (dev.Entity.HasFlag(DeviceFlags.拆盘机))
  317. {
  318. World.Log($"任务处理:开始-下发取货任务-任务号[{obj.Data.TaskNumber}]任务类型[{obj.Data.CmdType}]RGV运行状态[{obj.Data2.WorkMode.GetDescription()}]起始地址[{obj.Data.StartPosition}]目标地址[{obj.Data.DestPosition}]凭证号[{obj.Data.VoucherNo}]");
  319. obj.Data.TaskNumber = dev.Data.TaskNumber;
  320. obj.Data.CmdType = RGVCmdType.PickGoods;
  321. obj.Data.StartPosition = dev.Entity.Code.ToShort();
  322. obj.Data.DestPosition = dev.Data.GoodsEnd;
  323. obj.Data.VoucherNo++;
  324. World.Log($"任务处理:结束-下发取货任务-任务号[{obj.Data.TaskNumber}]任务类型[{obj.Data.CmdType}]起始地址[{obj.Data.StartPosition}]目标地址[{obj.Data.DestPosition}]凭证号[{obj.Data.VoucherNo}]");
  325. return;
  326. }
  327. //if (dev.Entity.HasFlag(DeviceFlags.二次码垛RGV取货口))
  328. //{
  329. // obj.Data.TaskNumber = dev.Data.TaskNumber;
  330. // obj.Data.CmdType = RGVCmdType.PickPutGoods;
  331. // obj.Data.StartPosition = dev.Entity.Code.ToShort();
  332. // obj.Data.DestPosition = dev.Data.GoodsEnd;
  333. // obj.Data.VoucherNo++;
  334. // return;
  335. //}
  336. World.Log($"任务处理:开始-下发满托入库任务-任务号[{obj.Data.TaskNumber}]任务类型[{obj.Data.CmdType}]RGV运行状态[{obj.Data2.WorkMode.GetDescription()}]起始地址[{obj.Data.StartPosition}]目标地址[{obj.Data.DestPosition}]凭证号[{obj.Data.VoucherNo}]");
  337. //非拆盘机起始任务
  338. //站台中的任务号
  339. WCS_TaskInfo task = null;
  340. SqlSugarHelper.Do(_db =>
  341. {
  342. var db = _db.Default;
  343. var taskInfo = db.Queryable<WCS_TaskInfo>().First(p => p.ID == dev.Data.TaskNumber && p.Status == TaskStatus.ConveyorExecution);
  344. if (taskInfo == null)
  345. {
  346. World.Log($"任务处理:未找到对应的任务{dev.Entity.Code}--{dev.Data.TaskNumber}-1");
  347. return;
  348. }
  349. taskInfo.Status = TaskStatus.RgvExecution;
  350. taskInfo.AddrNext = obj.Entity.Code;
  351. taskInfo.EditWho = "WCS";
  352. taskInfo.EditTime = DateTime.Now; ;
  353. db.UpdateableRowLock(taskInfo).UpdateColumns(x => new { x.Status, x.AddrNext, x.EditWho, x.EditTime }).ExecuteCommand();
  354. taskInfo.AddWCS_TASK_DTL(db, dev.Entity.Code, obj.Entity.Code, $"任务分配至{obj.Entity.Code}");
  355. task = taskInfo;
  356. });
  357. if (task == null)
  358. {
  359. World.Log($"任务处理:未找到对应的任务{dev.Entity.Code}--{dev.Data.TaskNumber}-2");
  360. return;
  361. }
  362. World.Log($"任务处理:满托入库业务流程处理完成-任务[{task.ID}]状态已变更为[{task.Status}]开始准备写入PLC");
  363. obj.Data.TaskNumber = task.ID;
  364. obj.Data.CmdType = RGVCmdType.PickPutGoods;
  365. obj.Data.StartPosition = dev.Entity.Code.ToShort();
  366. obj.Data.DestPosition = dev.Data.GoodsEnd;
  367. obj.Data.VoucherNo++;
  368. World.Log($"任务处理:结束-下发满托入库任务-任务号[{obj.Data.TaskNumber}]任务类型[{obj.Data.CmdType}]起始地址[{obj.Data.StartPosition}]目标地址[{obj.Data.DestPosition}]凭证号[{obj.Data.VoucherNo}]");
  369. return;
  370. }
  371. }
  372. catch (Exception ex)
  373. {
  374. if (ex.Message == "Destination array was not long enough. Check the destination index, length, and the array's lower bounds")
  375. {
  376. World.Log($"未知异常:{ex.StackTrace}");
  377. }
  378. else if (ex.Message == "Number was less than the array's lower bound in the first dimension")
  379. {
  380. World.Log($"未知异常:{ex.StackTrace}");
  381. }
  382. else throw new KnownException(ex.Message, LogLevelEnum.Mid);
  383. }
  384. }
  385. public override bool Select(Device dev)
  386. {
  387. return dev.Code is "RGV1" or "RGV2" or "RGV3" or "RGV4" or "RGV5" or "RGV6";
  388. //return dev.HasFlag(Extensions.DeviceFlags.RGV);
  389. }
  390. }
  391. /// <summary>
  392. /// 库存表
  393. /// </summary>
  394. [SugarTable("Bill_InvNow")]
  395. public partial class BillInvnow : BaseModel
  396. {
  397. /// <summary>
  398. /// 仓库ID 关联仓库表 ID
  399. /// </summary>
  400. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  401. public long WarehouseId { get; set; }
  402. /// <summary>
  403. /// 组盘ID
  404. /// 创建库存的时候 获取条码表ContGrpId
  405. /// </summary>
  406. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  407. public long ContGrpId { get; set; }
  408. /// <summary>
  409. /// 容器条码 同联容器表容器条码 ContBarCode
  410. /// </summary>
  411. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  412. public string ContGrpBarCode { get; set; }
  413. /// <summary>
  414. /// 组盘类型(1物料盘 2空盘)
  415. /// </summary>
  416. [SugarColumn(IsNullable = true)]
  417. public FJContGrpType ContGrpType { get; set; }
  418. /// <summary>
  419. /// 箱条码
  420. /// </summary>
  421. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  422. public string BoxBarCode { get; set; }
  423. /// <summary>
  424. /// Bom单号 关联投料单 帘线工序工单号 BillCode
  425. /// </summary>
  426. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  427. public string BomDocsNo { get; set; }
  428. /// <summary>
  429. /// Bom物料ID
  430. /// </summary>
  431. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  432. public long BomMatId { get; set; }
  433. /// <summary>
  434. /// Bom物料编号
  435. /// </summary>
  436. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  437. public string BomMatCode { get; set; }
  438. /// <summary>
  439. /// Bom物料
  440. /// </summary>
  441. [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
  442. public string BomMatName { get; set; }
  443. /// <summary>
  444. /// 垛形主表 ID
  445. /// </summary>
  446. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  447. public long BomSetId { get; set; }
  448. /// <summary>
  449. /// 垛型编码
  450. /// </summary>
  451. [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
  452. public string SetGrpCode { get; set; }
  453. /// <summary>
  454. /// 库存状态码
  455. /// </summary>
  456. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  457. public string ExecStateCode { get; set; }
  458. /// <summary>
  459. /// 单据编号 关联单据表单据编号 DocsNo
  460. /// </summary>
  461. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  462. public string ExecDocsNo { get; set; }
  463. /// <summary>
  464. /// 单据行号
  465. /// </summary>
  466. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  467. public string ExecDocsRowNo { get; set; }
  468. /// <summary>
  469. /// 单据类型编号 同单据表TypeNum
  470. /// </summary>
  471. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  472. public string ExecDocsTypeCode { get; set; }
  473. /// <summary>
  474. /// 出入库标识
  475. /// </summary>
  476. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  477. public FJInvInOutType InvInOut { get; set; }
  478. /// <summary>
  479. /// 执行人
  480. /// </summary>
  481. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  482. public string ExecWho { get; set; }
  483. /// <summary>
  484. /// 执行时间
  485. /// </summary>
  486. [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
  487. public DateTime ExecTime { get; set; }
  488. /// <summary>
  489. /// 行
  490. /// </summary>
  491. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  492. public int PutRow { get; set; }
  493. /// <summary>
  494. /// 列
  495. /// </summary>
  496. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  497. public int PutCol { get; set; }
  498. /// <summary>
  499. /// 层
  500. /// </summary>
  501. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  502. public int PutLayer { get; set; }
  503. /// <summary>
  504. /// 入库条码号 FJ材料号
  505. /// </summary>
  506. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  507. public string InvBarCode { get; set; }
  508. /// <summary>
  509. /// 库存状态
  510. /// </summary>
  511. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  512. public string InvStateCode { get; set; }
  513. /// <summary>
  514. /// 入库单号
  515. /// </summary>
  516. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  517. public string InDocsNo { get; set; }
  518. /// <summary>
  519. /// 入库单行号
  520. /// </summary>
  521. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  522. public string InDocsRowNo { get; set; }
  523. /// <summary>
  524. /// 供应编号
  525. /// </summary>
  526. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  527. public string SuppCode { get; set; }
  528. /// <summary>
  529. /// 供应商名称
  530. /// </summary>
  531. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  532. public string SuppName { get; set; }
  533. /// <summary>
  534. /// 海关编号
  535. /// </summary>
  536. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  537. public string CustCode { get; set; }
  538. /// <summary>
  539. /// 海关名称
  540. /// </summary>
  541. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  542. public string CustName { get; set; }
  543. /// <summary>
  544. /// 物料ID
  545. /// </summary>
  546. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  547. public long MatId { get; set; }
  548. /// <summary>
  549. /// 物料编号
  550. /// </summary>
  551. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  552. public string MatCode { get; set; }
  553. /// <summary>
  554. /// 物料名称
  555. /// </summary>
  556. [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
  557. public string MatName { get; set; }
  558. /// <summary>
  559. /// 总重量
  560. /// </summary>
  561. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  562. public decimal TolWQty { get; set; }
  563. /// <summary>
  564. /// 净重
  565. /// </summary>
  566. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  567. public decimal NetWQty { get; set; }
  568. /// <summary>
  569. /// 皮重
  570. /// </summary>
  571. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  572. public decimal TareWQty { get; set; }
  573. /// <summary>
  574. /// 总长
  575. /// </summary>
  576. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  577. public decimal LengthQty { get; set; }
  578. /// <summary>
  579. /// 碳当量
  580. /// </summary>
  581. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  582. public decimal CaQty { get; set; }
  583. /// <summary>
  584. /// 销售总量
  585. /// </summary>
  586. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  587. public decimal SolderQty { get; set; }
  588. /// <summary>
  589. /// 暂定
  590. /// </summary>
  591. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  592. public int ContUsageQty { get; set; }
  593. /// <summary>
  594. /// 批次号
  595. /// </summary>
  596. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  597. public string BatchNo { get; set; }
  598. /// <summary>
  599. /// 生产时间
  600. /// </summary>
  601. [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
  602. public DateTime ProductTime { get; set; }
  603. /// <summary>
  604. /// 第一次入库时间
  605. /// </summary>
  606. [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
  607. public DateTime OneInTime { get; set; }
  608. /// <summary>
  609. /// 盘条条码
  610. /// </summary>
  611. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  612. public string RodBarCode { get; set; }
  613. /// <summary>
  614. /// 工字轮条码
  615. /// </summary>
  616. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  617. public string HWBarCode { get; set; }
  618. /// <summary>
  619. /// RFID条码
  620. /// </summary>
  621. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  622. public string RFIDBarCode { get; set; }
  623. /// <summary>
  624. /// 材料号
  625. /// </summary>
  626. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  627. public string CLBarCode { get; set; }
  628. /// <summary>
  629. /// 工字轮条码类型
  630. /// </summary>
  631. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  632. public string HWTypeCode { get; set; }
  633. /// <summary>
  634. /// 炉号
  635. /// </summary>
  636. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  637. public string BoilerNo { get; set; }
  638. /// <summary>
  639. /// 包号
  640. /// </summary>
  641. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  642. public string PackNo { get; set; }
  643. /// <summary>
  644. /// 牌号
  645. /// </summary>
  646. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  647. public string BrandNo { get; set; }
  648. /// <summary>
  649. /// 执行标准
  650. /// </summary>
  651. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  652. public string ExecStd { get; set; }
  653. /// <summary>
  654. /// 许可证号
  655. /// </summary>
  656. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  657. public string LicenceCode { get; set; }
  658. /// <summary>
  659. /// 改手盘标记
  660. /// </summary>
  661. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  662. public bool IsSurplus { get; set; }
  663. /// <summary>
  664. /// 返工标记
  665. /// </summary>
  666. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  667. public bool IsRework { get; set; }
  668. /// <summary>
  669. /// 是否黑盘
  670. /// </summary>
  671. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  672. public bool IsBlack { get; set; }
  673. /// <summary>
  674. /// 是否芯股
  675. /// </summary>
  676. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  677. public bool IsCore { get; set; }
  678. /// <summary>
  679. /// 快投标记
  680. /// </summary>
  681. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  682. public bool IsFast { get; set; }
  683. /// <summary>
  684. /// 是否异常
  685. /// </summary>
  686. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  687. public bool IsFail { get; set; }
  688. /// <summary>
  689. /// 异常原因
  690. /// </summary>
  691. [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
  692. public string FailReason { get; set; }
  693. /// <summary>
  694. /// 单/双丝
  695. /// </summary>
  696. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  697. public string SilkTypeCode { get; set; }
  698. /// <summary>
  699. /// 等级
  700. /// </summary>
  701. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  702. public string Grade { get; set; }
  703. /// <summary>
  704. /// 是否退料
  705. /// </summary>
  706. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  707. public bool IsBack { get; set; }
  708. /// <summary>
  709. /// 退料原因
  710. /// </summary>
  711. [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
  712. public string BackReason { get; set; }
  713. /// <summary>
  714. /// 是否扭转检测
  715. /// </summary>
  716. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  717. public bool IsTorsChk { get; set; }
  718. /// <summary>
  719. /// 扭转次数
  720. /// </summary>
  721. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  722. public int TorsChkQty { get; set; }
  723. /// <summary>
  724. /// 扭转检测时间
  725. /// </summary>
  726. [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
  727. public DateTime TorsChkTime { get; set; }
  728. /// <summary>
  729. /// 正反面
  730. /// </summary>
  731. [SugarColumn(ColumnDataType = "int", IsNullable = true, ColumnDescription = "正反面")]
  732. public int SideNum { get; set; }
  733. /// <summary>
  734. /// 扭转检测结果值
  735. /// </summary>
  736. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
  737. public decimal? TorsChkValue { get; set; }
  738. /// <summary>
  739. /// 扭转检测设备号
  740. /// </summary>
  741. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  742. public string TorsChkMachCode { get; set; }
  743. /// <summary>
  744. /// 工序订单号
  745. /// </summary>
  746. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  747. public string ProcessDocsCode { get; set; }
  748. /// <summary>
  749. /// 生产机台号
  750. /// </summary>
  751. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  752. public string ProductMachCode { get; set; }
  753. /// <summary>
  754. /// 生成产线号
  755. /// </summary>
  756. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  757. public string ProductLineNo { get; set; }
  758. /// <summary>
  759. /// 货物大小
  760. /// </summary>
  761. [SugarColumn(IsNullable = true)]
  762. public int Size { get; set; }
  763. /// <summary>
  764. /// 托盘类型
  765. /// </summary>
  766. [SugarColumn(IsNullable = true, ColumnDescription = "托盘类型")]
  767. public FJPalletType PalletType { get; set; }
  768. /// <summary>
  769. /// 需要二次码垛的物料
  770. /// </summary>
  771. [SugarColumn(IsNullable = true, ColumnDescription = "循环码垛物料")]
  772. public bool Secondary { get; set; }
  773. }
  774. /// <summary>
  775. /// 条码表
  776. /// </summary>
  777. [SugarTable("Bill_InvInit")]
  778. public partial class BillInvinit : BaseModel
  779. {
  780. /// <summary>
  781. /// 仓库ID 关联仓库表 ID
  782. /// </summary>
  783. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  784. public long WarehouseId { get; set; }
  785. /// <summary>
  786. /// 组盘ID
  787. /// 创建条码表时生成 同库存表组盘ID ContGrpId
  788. /// </summary>
  789. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  790. public long ContGrpId { get; set; }
  791. /// <summary>
  792. /// 容器条码 同联容器表容器条码 ContBarCode
  793. /// </summary>
  794. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  795. public string ContGrpBarCode { get; set; }
  796. /// <summary>
  797. /// 箱条码
  798. /// </summary>
  799. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  800. public string BoxBarCode { get; set; }
  801. /// <summary>
  802. /// Bom单号 关联投料单 帘线工序工单号 BillCode
  803. /// </summary>
  804. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  805. public string BomDocsNo { get; set; }
  806. /// <summary>
  807. /// Bom物料ID
  808. /// </summary>
  809. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  810. public long BomMatId { get; set; }
  811. /// <summary>
  812. /// Bom物料编号
  813. /// </summary>
  814. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  815. public string BomMatCode { get; set; }
  816. /// <summary>
  817. /// Bom物料
  818. /// </summary>
  819. [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
  820. public string BomMatName { get; set; }
  821. /// <summary>
  822. /// 垛形主表 ID
  823. /// </summary>
  824. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  825. public long BomSetId { get; set; }
  826. /// <summary>
  827. /// 垛型编码
  828. /// </summary>
  829. [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
  830. public string SetGrpCode { get; set; }
  831. /// <summary>
  832. /// 库存状态码
  833. /// </summary>
  834. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  835. public string ExecStateCode { get; set; }
  836. /// <summary>
  837. /// 单据编号 关联单据表单据编号 DocsNo
  838. /// </summary>
  839. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  840. public string ExecDocsNo { get; set; }
  841. /// <summary>
  842. /// 单据行号
  843. /// </summary>
  844. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  845. public string ExecDocsRowNo { get; set; }
  846. /// <summary>
  847. /// 单据类型编号 同单据表TypeNum
  848. /// </summary>
  849. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  850. public string ExecDocsTypeCode { get; set; }
  851. /// <summary>
  852. /// 出入库标识
  853. /// </summary>
  854. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  855. public FJInvInOutType InvInOut { get; set; }
  856. /// <summary>
  857. /// 执行人
  858. /// </summary>
  859. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  860. public string ExecWho { get; set; }
  861. /// <summary>
  862. /// 执行时间
  863. /// </summary>
  864. [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
  865. public DateTime ExecTime { get; set; }
  866. /// <summary>
  867. /// 行
  868. /// </summary>
  869. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  870. public int PutRow { get; set; }
  871. /// <summary>
  872. /// 列
  873. /// </summary>
  874. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  875. public int PutCol { get; set; }
  876. /// <summary>
  877. /// 层
  878. /// </summary>
  879. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  880. public int PutLayer { get; set; }
  881. /// <summary>
  882. /// 入库条码号 FJ材料号
  883. /// </summary>
  884. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  885. public string InvBarCode { get; set; }
  886. /// <summary>
  887. /// 库存状态
  888. /// </summary>
  889. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  890. public string InvStateCode { get; set; }
  891. /// <summary>
  892. /// 入库单号
  893. /// </summary>
  894. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  895. public string InDocsNo { get; set; }
  896. /// <summary>
  897. /// 入库单行号
  898. /// </summary>
  899. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  900. public string InDocsRowNo { get; set; }
  901. /// <summary>
  902. /// 供应编号
  903. /// </summary>
  904. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  905. public string SuppCode { get; set; }
  906. /// <summary>
  907. /// 供应商名称
  908. /// </summary>
  909. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  910. public string SuppName { get; set; }
  911. /// <summary>
  912. /// 海关编号
  913. /// </summary>
  914. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  915. public string CustCode { get; set; }
  916. /// <summary>
  917. /// 海关名称
  918. /// </summary>
  919. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  920. public string CustName { get; set; }
  921. /// <summary>
  922. /// 物料ID
  923. /// </summary>
  924. [SugarColumn(ColumnDataType = "bigint", IsNullable = false)]
  925. public long MatId { get; set; }
  926. /// <summary>
  927. /// 物料编号
  928. /// </summary>
  929. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  930. public string MatCode { get; set; }
  931. /// <summary>
  932. /// 物料名称
  933. /// </summary>
  934. [SugarColumn(ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
  935. public string MatName { get; set; }
  936. /// <summary>
  937. /// 总重量
  938. /// </summary>
  939. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  940. public decimal TolWQty { get; set; }
  941. /// <summary>
  942. /// 净重
  943. /// </summary>
  944. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  945. public decimal NetWQty { get; set; }
  946. /// <summary>
  947. /// 皮重
  948. /// </summary>
  949. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  950. public decimal TareWQty { get; set; }
  951. /// <summary>
  952. /// 总长
  953. /// </summary>
  954. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  955. public decimal LengthQty { get; set; }
  956. /// <summary>
  957. /// 碳当量
  958. /// </summary>
  959. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  960. public decimal CaQty { get; set; }
  961. /// <summary>
  962. /// 销售总量
  963. /// </summary>
  964. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = false)]
  965. public decimal SolderQty { get; set; }
  966. /// <summary>
  967. /// 暂定
  968. /// </summary>
  969. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  970. public int ContUsageQty { get; set; }
  971. /// <summary>
  972. /// 批次号
  973. /// </summary>
  974. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  975. public string BatchNo { get; set; }
  976. /// <summary>
  977. /// 生产时间
  978. /// </summary>
  979. [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
  980. public DateTime ProductTime { get; set; }
  981. /// <summary>
  982. /// 第一次入库时间
  983. /// </summary>
  984. [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
  985. public DateTime OneInTime { get; set; }
  986. /// <summary>
  987. /// 盘条条码
  988. /// </summary>
  989. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  990. public string RodBarCode { get; set; }
  991. /// <summary>
  992. /// 工字轮条码
  993. /// </summary>
  994. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  995. public string HWBarCode { get; set; }
  996. /// <summary>
  997. /// RFID条码
  998. /// </summary>
  999. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1000. public string RFIDBarCode { get; set; }
  1001. /// <summary>
  1002. /// 材料号
  1003. /// </summary>
  1004. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1005. public string CLBarCode { get; set; }
  1006. /// <summary>
  1007. /// 工字轮条码类型
  1008. /// </summary>
  1009. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1010. public string HWTypeCode { get; set; }
  1011. /// <summary>
  1012. /// 炉号
  1013. /// </summary>
  1014. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1015. public string BoilerNo { get; set; }
  1016. /// <summary>
  1017. /// 包号
  1018. /// </summary>
  1019. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1020. public string PackNo { get; set; }
  1021. /// <summary>
  1022. /// 牌号
  1023. /// </summary>
  1024. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1025. public string BrandNo { get; set; }
  1026. /// <summary>
  1027. /// 执行标准
  1028. /// </summary>
  1029. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1030. public string ExecStd { get; set; }
  1031. /// <summary>
  1032. /// 许可证号
  1033. /// </summary>
  1034. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1035. public string LicenceCode { get; set; }
  1036. /// <summary>
  1037. /// 改手盘标记
  1038. /// </summary>
  1039. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  1040. public bool IsSurplus { get; set; }
  1041. /// <summary>
  1042. /// 返工标记
  1043. /// </summary>
  1044. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  1045. public bool IsRework { get; set; }
  1046. /// <summary>
  1047. /// 是否黑盘
  1048. /// </summary>
  1049. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  1050. public bool IsBlack { get; set; }
  1051. /// <summary>
  1052. /// 是否芯股
  1053. /// </summary>
  1054. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  1055. public bool IsCore { get; set; }
  1056. /// <summary>
  1057. /// 快投标记
  1058. /// </summary>
  1059. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  1060. public bool IsFast { get; set; }
  1061. /// <summary>
  1062. /// 是否异常
  1063. /// </summary>
  1064. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  1065. public bool IsFail { get; set; }
  1066. /// <summary>
  1067. /// 异常原因
  1068. /// </summary>
  1069. [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
  1070. public string FailReason { get; set; }
  1071. /// <summary>
  1072. /// 单/双丝
  1073. /// </summary>
  1074. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1075. public string SilkTypeCode { get; set; }
  1076. /// <summary>
  1077. /// 等级
  1078. /// </summary>
  1079. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1080. public string Grade { get; set; }
  1081. /// <summary>
  1082. /// 是否退料
  1083. /// </summary>
  1084. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  1085. public bool IsBack { get; set; }
  1086. /// <summary>
  1087. /// 退料原因
  1088. /// </summary>
  1089. [SugarColumn(ColumnDataType = "nvarchar", Length = 200, IsNullable = true)]
  1090. public string BackReason { get; set; }
  1091. /// <summary>
  1092. /// 是否扭转检测
  1093. /// </summary>
  1094. [SugarColumn(ColumnDataType = "bit", IsNullable = false)]
  1095. public bool IsTorsChk { get; set; }
  1096. /// <summary>
  1097. /// 扭转次数
  1098. /// </summary>
  1099. [SugarColumn(ColumnDataType = "int", IsNullable = false)]
  1100. public int TorsChkQty { get; set; }
  1101. /// <summary>
  1102. /// 扭转检测时间
  1103. /// </summary>
  1104. [SugarColumn(ColumnDataType = "datetime", IsNullable = false)]
  1105. public DateTime TorsChkTime { get; set; }
  1106. /// <summary>
  1107. /// 扭转检测结果值
  1108. /// </summary>
  1109. [SugarColumn(ColumnDataType = "decimal", Length = 18, IsNullable = true)]
  1110. public decimal? TorsChkValue { get; set; }
  1111. /// <summary>
  1112. /// 扭转检测设备号
  1113. /// </summary>
  1114. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1115. public string TorsChkMachCode { get; set; }
  1116. /// <summary>
  1117. /// 工序订单号
  1118. /// </summary>
  1119. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1120. public string ProcessDocsCode { get; set; }
  1121. /// <summary>
  1122. /// 生产机台号
  1123. /// </summary>
  1124. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1125. public string ProductMachCode { get; set; }
  1126. /// <summary>
  1127. /// 生成产线号
  1128. /// </summary>
  1129. [SugarColumn(ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
  1130. public string ProductLineNo { get; set; }
  1131. /// <summary>
  1132. /// 货物大小
  1133. /// </summary>
  1134. [SugarColumn(IsNullable = false)]
  1135. public int Size { get; set; }
  1136. /// <summary>
  1137. /// 托盘类型
  1138. /// </summary>
  1139. [SugarColumn(IsNullable = true, ColumnDescription = "托盘类型")]
  1140. public FJPalletType PalletType { get; set; }
  1141. /// <summary>
  1142. /// 组盘类型
  1143. /// </summary>
  1144. [SugarColumn(IsNullable = true)]
  1145. public FJContGrpType ContGrpType { get; set; }
  1146. }
  1147. /// <summary>
  1148. /// 基础表实体
  1149. /// </summary>
  1150. public class BaseModel
  1151. {
  1152. public BaseModel()
  1153. { }
  1154. /// <summary>
  1155. /// ID
  1156. /// </summary>
  1157. [SugarColumn(ColumnName = "Id", IsPrimaryKey = true, ColumnDescription = "ID")]
  1158. public virtual long Id { get; set; }
  1159. /// <summary>
  1160. /// 备注
  1161. /// </summary>
  1162. [SugarColumn(ColumnName = "Memo", Length = 500, IsNullable = true, ColumnDataType = "nvarchar", DefaultValue = "", ColumnDescription = "备注")]
  1163. public virtual string Memo { get; set; }
  1164. /// <summary>
  1165. /// 创建用户
  1166. /// </summary>
  1167. [SugarColumn(ColumnName = "AddWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "创建用户")]
  1168. public virtual string AddWho { get; set; } = "";
  1169. /// <summary>
  1170. /// 更新用户
  1171. /// </summary>
  1172. [SugarColumn(ColumnName = "EditWho", Length = 50, ColumnDataType = "nvarchar", DefaultValue = "", IsNullable = false, ColumnDescription = "更新用户")]
  1173. public virtual string EditWho { get; set; } = "";
  1174. /// <summary>
  1175. /// 创建时间
  1176. /// </summary>
  1177. [SugarColumn(ColumnName = "AddTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "创建时间")]
  1178. public virtual DateTime AddTime { get; set; } = DateTime.Now;
  1179. /// <summary>
  1180. /// 更新时间
  1181. /// </summary>
  1182. [SugarColumn(ColumnName = "EditTime", DefaultValue = "1900-1-1", IsNullable = false, ColumnDescription = "更新时间")]
  1183. public virtual DateTime EditTime { get; set; } = DateTime.Now;
  1184. }
  1185. /// <summary>
  1186. /// 组盘类型
  1187. /// </summary>
  1188. public enum FJContGrpType
  1189. {
  1190. /// <summary>
  1191. /// 物料盘
  1192. /// </summary>
  1193. [Description("物料盘")]
  1194. Material = 1,
  1195. /// <summary>
  1196. /// 空盘
  1197. /// </summary>
  1198. [Description("空盘")]
  1199. EmptyCon = 2,
  1200. }
  1201. /// <summary>
  1202. /// 托盘类型
  1203. /// </summary>
  1204. public enum FJPalletType
  1205. {
  1206. /// <summary>
  1207. /// 09使用的托盘
  1208. /// </summary>
  1209. [Description("09使用的托盘")]
  1210. Pallet09 = 1,
  1211. /// <summary>
  1212. /// 非09使用的托盘
  1213. /// </summary>
  1214. [Description("非09使用的托盘")]
  1215. PalletNo09 = 2,
  1216. }
  1217. /// <summary>
  1218. /// 出入库类型
  1219. /// </summary>
  1220. public enum FJInvInOutType
  1221. {
  1222. /// <summary>
  1223. /// 默认
  1224. /// </summary>
  1225. [Description("默认")]
  1226. Default = 0,
  1227. /// <summary>
  1228. /// 入库
  1229. /// </summary>
  1230. [Description("入库")]
  1231. In = 1,
  1232. /// <summary>
  1233. /// 出库
  1234. /// </summary>
  1235. [Description("出库")]
  1236. Out = 2,
  1237. }
  1238. }