FqcInspBillDto.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. namespace Admin.NET.Plugin.AiDOP.FinishedWarehouse.Dto;
  2. // ══════════════════════════════════════════════════════════════════════════
  3. // S7 FQC 成品质量:检验任务列表 / 检验单(结果)列表 只读 DTO
  4. //
  5. // 数据源(均 aidopdev,只读):
  6. // - 检验任务:qms_fqcbj(37 列,归口自旧系统 dopdemo,空表待上游抽数)
  7. // - 检验单 :qms_qcpp_inspbill(主表)+ WorkOrdMaster(取 SAP 工单号,sczld=Batch)
  8. // 两表均无 tenant_id:前端 withAidopTenantParams 注入的 TenantId 仅透传、本查询不据其过滤。
  9. // 字段修正:物料名称=wlmc(非 lmc);检验数量=jysj(非 ysj);SAP工单号=WorkOrdMaster.WorkOrd。
  10. // ══════════════════════════════════════════════════════════════════════════
  11. /// <summary>FQC 检验任务列表 查询入参(只读,源 qms_fqcbj)。</summary>
  12. public class FqcTaskListInput
  13. {
  14. /// <summary>页码(从 1 开始)</summary>
  15. public int Page { get; set; } = 1;
  16. /// <summary>每页条数(上限 200)</summary>
  17. public int PageSize { get; set; } = 10;
  18. /// <summary>排序字段(前端 prop,白名单校验)</summary>
  19. public string? OrderBy { get; set; }
  20. /// <summary>排序方向 asc/desc(默认 desc)</summary>
  21. public string? OrderDir { get; set; }
  22. /// <summary>生产指令单(qms_fqcbj.sczld,模糊)</summary>
  23. public string? ProductionOrderNo { get; set; }
  24. /// <summary>生产批号(qms_fqcbj.scph,模糊)</summary>
  25. public string? ProductionBatchNo { get; set; }
  26. /// <summary>物料编码(qms_fqcbj.wlbm,模糊)</summary>
  27. public string? MaterialCode { get; set; }
  28. /// <summary>申请时间起(qms_fqcbj.FAPPLYTIME,含当日,yyyy-MM-dd)</summary>
  29. public string? ApplyTimeStart { get; set; }
  30. /// <summary>申请时间止(qms_fqcbj.FAPPLYTIME,含当日,yyyy-MM-dd)</summary>
  31. public string? ApplyTimeEnd { get; set; }
  32. /// <summary>检验进度(qms_fqcbj.FINSPECTSTATUS,精确)</summary>
  33. public string? InspectProgress { get; set; }
  34. /// <summary>检验优先级(qms_fqcbj.yxj,模糊;字典未接,原样匹配)</summary>
  35. public string? Priority { get; set; }
  36. /// <summary>检验负责人(qms_fqcbj.jyfzr,模糊)</summary>
  37. public string? Inspector { get; set; }
  38. /// <summary>租户 ID(前端注入;qms_fqcbj 无租户列,本查询忽略)</summary>
  39. public long? TenantId { get; set; }
  40. }
  41. /// <summary>FQC 检验任务列表 行(只读)。prop 对齐前端列;源列见注释(qms_fqcbj)。</summary>
  42. public class FqcTaskListRow
  43. {
  44. /// <summary>主键(qms_fqcbj.id)</summary>
  45. public long Id { get; set; }
  46. /// <summary>单据编号(qms_fqcbj.FBILLNO)</summary>
  47. public string? BillNo { get; set; }
  48. /// <summary>生产指令单(qms_fqcbj.sczld)</summary>
  49. public string? ProductionOrderNo { get; set; }
  50. /// <summary>申请组织(qms_fqcbj.FORGID,原样 id)</summary>
  51. public long? ApplyOrgId { get; set; }
  52. /// <summary>申请时间(qms_fqcbj.FAPPLYTIME)</summary>
  53. public DateTime? ApplyTime { get; set; }
  54. /// <summary>物料编码(qms_fqcbj.wlbm)</summary>
  55. public string? MaterialCode { get; set; }
  56. /// <summary>产品名称(qms_fqcbj.cpmc)</summary>
  57. public string? ProductName { get; set; }
  58. /// <summary>产品型号(qms_fqcbj.cpxh)</summary>
  59. public string? ProductModel { get; set; }
  60. /// <summary>生产批号(qms_fqcbj.scph)</summary>
  61. public string? ProductionBatchNo { get; set; }
  62. /// <summary>指令单数量(qms_fqcbj.sczldsl)</summary>
  63. public decimal? OrderQty { get; set; }
  64. /// <summary>数量(qms_fqcbj.sl)</summary>
  65. public decimal? Qty { get; set; }
  66. /// <summary>申请人(qms_fqcbj.FAPPLYUSER)</summary>
  67. public string? Applicant { get; set; }
  68. /// <summary>备注(qms_fqcbj.FCOMMENT)</summary>
  69. public string? Remark { get; set; }
  70. /// <summary>检验优先级(qms_fqcbj.yxj,原样,未接字典)</summary>
  71. public string? Priority { get; set; }
  72. /// <summary>检验开始时间(qms_fqcbj.jykssj)</summary>
  73. public DateTime? InspectStartTime { get; set; }
  74. /// <summary>检验完成时间(qms_fqcbj.jywcsj)</summary>
  75. public DateTime? InspectFinishTime { get; set; }
  76. /// <summary>检验负责人(qms_fqcbj.jyfzr)</summary>
  77. public string? Inspector { get; set; }
  78. /// <summary>检验进度(qms_fqcbj.FINSPECTSTATUS,原样)</summary>
  79. public string? InspectProgress { get; set; }
  80. }
  81. /// <summary>FQC 检验单(结果)列表 查询入参(只读,源 qms_qcpp_inspbill)。</summary>
  82. public class FqcResultListInput
  83. {
  84. /// <summary>页码(从 1 开始)</summary>
  85. public int Page { get; set; } = 1;
  86. /// <summary>每页条数(上限 200)</summary>
  87. public int PageSize { get; set; } = 10;
  88. /// <summary>排序字段(前端 prop,白名单校验)</summary>
  89. public string? OrderBy { get; set; }
  90. /// <summary>排序方向 asc/desc(默认 desc)</summary>
  91. public string? OrderDir { get; set; }
  92. /// <summary>单据编号(qms_qcpp_inspbill.FBILLNO,模糊)</summary>
  93. public string? BillNo { get; set; }
  94. /// <summary>生产批号(qms_qcpp_inspbill.scph,模糊)</summary>
  95. public string? ProductionBatchNo { get; set; }
  96. /// <summary>物料编码(qms_qcpp_inspbill.FMATERIALCFG,模糊)</summary>
  97. public string? MaterialCode { get; set; }
  98. /// <summary>物料名称(qms_qcpp_inspbill.wlmc,模糊)</summary>
  99. public string? MaterialName { get; set; }
  100. /// <summary>检验人(qms_qcpp_inspbill.jyr,模糊)</summary>
  101. public string? Inspector { get; set; }
  102. /// <summary>来源单据编号(qms_qcpp_inspbill.lydjbh,模糊)</summary>
  103. public string? SourceBillNo { get; set; }
  104. /// <summary>生产指令单(qms_qcpp_inspbill.sczld,模糊)</summary>
  105. public string? ProductionOrderNo { get; set; }
  106. /// <summary>检验日期起(qms_qcpp_inspbill.FINSPEENDDATE,含当日,yyyy-MM-dd)</summary>
  107. public string? InspectDateStart { get; set; }
  108. /// <summary>检验日期止(qms_qcpp_inspbill.FINSPEENDDATE,含当日,yyyy-MM-dd)</summary>
  109. public string? InspectDateEnd { get; set; }
  110. /// <summary>判定(qms_qcpp_inspbill.pd,原样精确)</summary>
  111. public string? Judgment { get; set; }
  112. /// <summary>租户 ID(前端注入;qms_qcpp_inspbill 无租户列,本查询忽略)</summary>
  113. public long? TenantId { get; set; }
  114. }
  115. /// <summary>FQC 检验单(结果)列表 行(只读)。prop 对齐前端列;源列见注释。</summary>
  116. public class FqcResultListRow
  117. {
  118. /// <summary>主键(qms_qcpp_inspbill.id)</summary>
  119. public long Id { get; set; }
  120. /// <summary>单据编号(qms_qcpp_inspbill.FBILLNO)</summary>
  121. public string? BillNo { get; set; }
  122. /// <summary>检验时间(qms_qcpp_inspbill.FINSPEENDDATE)</summary>
  123. public DateTime? InspectTime { get; set; }
  124. /// <summary>生产批号(qms_qcpp_inspbill.scph)</summary>
  125. public string? ProductionBatchNo { get; set; }
  126. /// <summary>物料编码(qms_qcpp_inspbill.FMATERIALCFG)</summary>
  127. public string? MaterialCode { get; set; }
  128. /// <summary>物料名称(qms_qcpp_inspbill.wlmc)</summary>
  129. public string? MaterialName { get; set; }
  130. /// <summary>规格型号(qms_qcpp_inspbill.ggxh)</summary>
  131. public string? Spec { get; set; }
  132. /// <summary>检验人(qms_qcpp_inspbill.jyr)</summary>
  133. public string? Inspector { get; set; }
  134. /// <summary>检验数量(qms_qcpp_inspbill.jysj)</summary>
  135. public decimal? InspectQty { get; set; }
  136. /// <summary>来源单据编号(qms_qcpp_inspbill.lydjbh)</summary>
  137. public string? SourceBillNo { get; set; }
  138. /// <summary>生产指令单(qms_qcpp_inspbill.sczld)</summary>
  139. public string? ProductionOrderNo { get; set; }
  140. /// <summary>指令单数量(qms_qcpp_inspbill.sczldsl)</summary>
  141. public decimal? OrderQty { get; set; }
  142. /// <summary>SAP 工单号(WorkOrdMaster.WorkOrd,经 sczld=Batch,MIN 取确定值)</summary>
  143. public string? SapWorkOrderNo { get; set; }
  144. /// <summary>判定(qms_qcpp_inspbill.pd,原样,字典未接)</summary>
  145. public string? Judgment { get; set; }
  146. /// <summary>合格数量(qms_qcpp_inspbill.hgsl)</summary>
  147. public decimal? QualifiedQty { get; set; }
  148. /// <summary>不合格数量(qms_qcpp_inspbill.bhgsl)</summary>
  149. public decimal? UnqualifiedQty { get; set; }
  150. }
  151. // ══════════════════════════════════════════════════════════════════════════
  152. // FQC 检验单只读详情:头(qms_qcpp_inspbill + SAP工单号)+ 品检项目明细(qms_qcpp_inspbillst,glid=id)
  153. // 契约对齐 S6 IPQC:扁平头字段 + Lines[];id<=0/未命中 return null。样本 j1..j50 收敛为 Samples[](样品序号值)。
  154. // ══════════════════════════════════════════════════════════════════════════
  155. /// <summary>FQC 检验单详情(只读):扁平头 + 明细行。</summary>
  156. public class FqcInspBillDetailDto
  157. {
  158. // —— 基本信息 ——
  159. /// <summary>主键(qms_qcpp_inspbill.id)</summary>
  160. public long Id { get; set; }
  161. /// <summary>单据编号 FBILLNO</summary>
  162. public string? BillNo { get; set; }
  163. /// <summary>检验时间 FINSPEENDDATE</summary>
  164. public DateTime? InspectTime { get; set; }
  165. /// <summary>来源单据编号 lydjbh</summary>
  166. public string? SourceBillNo { get; set; }
  167. /// <summary>检验人 jyr</summary>
  168. public string? Inspector { get; set; }
  169. /// <summary>判定 pd(原样,字典未接)</summary>
  170. public string? Judgment { get; set; }
  171. // —— 成品信息 ——
  172. /// <summary>物料编码 FMATERIALCFG</summary>
  173. public string? MaterialCode { get; set; }
  174. /// <summary>物料名称 wlmc</summary>
  175. public string? MaterialName { get; set; }
  176. /// <summary>规格型号 ggxh</summary>
  177. public string? Spec { get; set; }
  178. /// <summary>生产批号 scph</summary>
  179. public string? ProductionBatchNo { get; set; }
  180. // —— 生产信息 ——
  181. /// <summary>生产指令单 sczld</summary>
  182. public string? ProductionOrderNo { get; set; }
  183. /// <summary>指令单数量 sczldsl</summary>
  184. public decimal? OrderQty { get; set; }
  185. /// <summary>SAP 工单号 WorkOrdMaster.WorkOrd(sczld=Batch, MIN)</summary>
  186. public string? SapWorkOrderNo { get; set; }
  187. // —— 检验数量 ——
  188. /// <summary>检验数量 jysj</summary>
  189. public decimal? InspectQty { get; set; }
  190. /// <summary>合格数量 hgsl</summary>
  191. public decimal? QualifiedQty { get; set; }
  192. /// <summary>不合格数量 bhgsl</summary>
  193. public decimal? UnqualifiedQty { get; set; }
  194. // —— 检规信息 ——
  195. /// <summary>击发编号 jfbh</summary>
  196. public string? FireNo { get; set; }
  197. /// <summary>检规编号 jgbh</summary>
  198. public string? InspectSpecNo { get; set; }
  199. /// <summary>检规版本 jgbb</summary>
  200. public string? InspectSpecVersion { get; set; }
  201. /// <summary>品检项目明细(qms_qcpp_inspbillst,按 xh,id 排序)</summary>
  202. public List<FqcInspBillDetailLineDto> Lines { get; set; } = new();
  203. }
  204. /// <summary>FQC 品检项目明细行(只读,仅已确认列 + 样本数组;jlhb/jyyqsbj/vbl 语义未确认后置)。</summary>
  205. public class FqcInspBillDetailLineDto
  206. {
  207. /// <summary>明细主键(qms_qcpp_inspbillst.id)</summary>
  208. public long Id { get; set; }
  209. /// <summary>序号 xh</summary>
  210. public int? SeqNo { get; set; }
  211. /// <summary>检验项目 jyxm</summary>
  212. public string? InspectionItem { get; set; }
  213. /// <summary>接收标准 jsbz</summary>
  214. public string? AcceptStandard { get; set; }
  215. /// <summary>技术要求 jsyq</summary>
  216. public string? TechRequirement { get; set; }
  217. /// <summary>抽样方案 cyfa</summary>
  218. public string? SamplingPlan { get; set; }
  219. /// <summary>样本量 ybl</summary>
  220. public string? SampleQty { get; set; }
  221. /// <summary>上限 sx</summary>
  222. public string? UpperLimit { get; set; }
  223. /// <summary>下限 xx</summary>
  224. public string? LowerLimit { get; set; }
  225. /// <summary>规格标准 SizeSpecifications</summary>
  226. public string? SizeSpecification { get; set; }
  227. /// <summary>判定 pd(原样)</summary>
  228. public string? Judgment { get; set; }
  229. /// <summary>非数值型 OK NonNumericalTypeOK</summary>
  230. public long? NonNumericOk { get; set; }
  231. /// <summary>非数值型 NG NonNumericalTypeNG</summary>
  232. public long? NonNumericNg { get; set; }
  233. /// <summary>备注 bz</summary>
  234. public string? Remark { get; set; }
  235. /// <summary>样品值(样品1..样品N,按序 j1..j50,末尾空值已裁剪;前端按非空动态展开)</summary>
  236. public List<string?> Samples { get; set; } = new();
  237. }
  238. /// <summary>明细查询行(内部):已确认列 + j1..j50 原始样本列,ToLine() 收敛为 Samples[]。禁止直接出前端。</summary>
  239. public class FqcInspBillDetailLineRow
  240. {
  241. public long Id { get; set; }
  242. public int? SeqNo { get; set; }
  243. public string? InspectionItem { get; set; }
  244. public string? AcceptStandard { get; set; }
  245. public string? TechRequirement { get; set; }
  246. public string? SamplingPlan { get; set; }
  247. public string? SampleQty { get; set; }
  248. public string? UpperLimit { get; set; }
  249. public string? LowerLimit { get; set; }
  250. public string? SizeSpecification { get; set; }
  251. public string? Judgment { get; set; }
  252. public long? NonNumericOk { get; set; }
  253. public long? NonNumericNg { get; set; }
  254. public string? Remark { get; set; }
  255. public string? J1 { get; set; } public string? J2 { get; set; } public string? J3 { get; set; } public string? J4 { get; set; } public string? J5 { get; set; }
  256. public string? J6 { get; set; } public string? J7 { get; set; } public string? J8 { get; set; } public string? J9 { get; set; } public string? J10 { get; set; }
  257. public string? J11 { get; set; } public string? J12 { get; set; } public string? J13 { get; set; } public string? J14 { get; set; } public string? J15 { get; set; }
  258. public string? J16 { get; set; } public string? J17 { get; set; } public string? J18 { get; set; } public string? J19 { get; set; } public string? J20 { get; set; }
  259. public string? J21 { get; set; } public string? J22 { get; set; } public string? J23 { get; set; } public string? J24 { get; set; } public string? J25 { get; set; }
  260. public string? J26 { get; set; } public string? J27 { get; set; } public string? J28 { get; set; } public string? J29 { get; set; } public string? J30 { get; set; }
  261. public string? J31 { get; set; } public string? J32 { get; set; } public string? J33 { get; set; } public string? J34 { get; set; } public string? J35 { get; set; }
  262. public string? J36 { get; set; } public string? J37 { get; set; } public string? J38 { get; set; } public string? J39 { get; set; } public string? J40 { get; set; }
  263. public string? J41 { get; set; } public string? J42 { get; set; } public string? J43 { get; set; } public string? J44 { get; set; } public string? J45 { get; set; }
  264. public string? J46 { get; set; } public string? J47 { get; set; } public string? J48 { get; set; } public string? J49 { get; set; } public string? J50 { get; set; }
  265. /// <summary>收敛为明细 DTO:j1..j50 → Samples[](裁剪末尾空值,保留样品序号位置)。</summary>
  266. public FqcInspBillDetailLineDto ToLine()
  267. {
  268. var raw = new[]
  269. {
  270. J1, J2, J3, J4, J5, J6, J7, J8, J9, J10, J11, J12, J13, J14, J15, J16, J17, J18, J19, J20,
  271. J21, J22, J23, J24, J25, J26, J27, J28, J29, J30, J31, J32, J33, J34, J35, J36, J37, J38, J39, J40,
  272. J41, J42, J43, J44, J45, J46, J47, J48, J49, J50,
  273. };
  274. var last = -1;
  275. for (var i = 0; i < raw.Length; i++)
  276. if (!string.IsNullOrWhiteSpace(raw[i])) last = i;
  277. var samples = last < 0 ? new List<string?>() : raw.Take(last + 1).ToList();
  278. return new FqcInspBillDetailLineDto
  279. {
  280. Id = Id, SeqNo = SeqNo, InspectionItem = InspectionItem, AcceptStandard = AcceptStandard,
  281. TechRequirement = TechRequirement, SamplingPlan = SamplingPlan, SampleQty = SampleQty,
  282. UpperLimit = UpperLimit, LowerLimit = LowerLimit, SizeSpecification = SizeSpecification,
  283. Judgment = Judgment, NonNumericOk = NonNumericOk, NonNumericNg = NonNumericNg, Remark = Remark,
  284. Samples = samples,
  285. };
  286. }
  287. }