dbauo_adapter.sru 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. $PBExportHeader$dbauo_adapter.sru
  2. forward
  3. global type dbauo_adapter from nonvisualobject
  4. end type
  5. end forward
  6. global type dbauo_adapter from nonvisualobject
  7. end type
  8. global dbauo_adapter dbauo_adapter
  9. type variables
  10. //====================================================================
  11. // 事件: .Declare Instance Variables()
  12. //--------------------------------------------------------------------
  13. // 描述:
  14. //--------------------------------------------------------------------
  15. // 参数:
  16. //--------------------------------------------------------------------
  17. // 返回: (none)
  18. //--------------------------------------------------------------------
  19. // 作者: lwl 日期: 2011年05月20日
  20. //--------------------------------------------------------------------
  21. // LONGJOE
  22. //--------------------------------------------------------------------
  23. // 修改历史:
  24. //
  25. //====================================================================
  26. dbauo_mtrlware ins_mtrlwares[]
  27. dbauo_task ins_tasks[]
  28. dbauo_sort ins_sorts[] // 排序方案集
  29. boolean ins_reallocall
  30. boolean ins_ignorOut
  31. end variables
  32. forward prototypes
  33. public subroutine f_clear ()
  34. public function integer f_init ()
  35. public function dbauo_mtrlware f_getware (long arg_mtrlid, string arg_mtrlcuscode, string arg_status, string arg_pcode, string arg_woodcode)
  36. public function long f_getmaxvalue ()
  37. public subroutine f_sort2 ()
  38. public subroutine f_sort1 ()
  39. end prototypes
  40. public subroutine f_clear ();long ll_i
  41. for ll_i = 1 to upperbound(ins_mtrlwares)
  42. destroy ins_mtrlwares[ll_i]
  43. next
  44. for ll_i = 1 to upperbound(ins_tasks)
  45. destroy ins_tasks[ll_i]
  46. next
  47. for ll_i = 1 to upperbound(ins_sorts)
  48. destroy ins_sorts[ll_i]
  49. next
  50. dbauo_mtrlware mtrlwares_empty[]
  51. dbauo_task tasks_empty[]
  52. dbauo_sort sort_empty[]
  53. ins_mtrlwares = mtrlwares_empty
  54. ins_tasks = tasks_empty
  55. ins_sorts = sort_empty
  56. end subroutine
  57. public function integer f_init ();//====================================================================
  58. // 事件: dbauo_adapter.f_init()
  59. //--------------------------------------------------------------------
  60. // 描述:重新分配订单
  61. //--------------------------------------------------------------------
  62. // 参数:
  63. // value integer arg_all :0-齐货不影响 1-齐货也重新分配
  64. //--------------------------------------------------------------------
  65. // 返回: integer
  66. //--------------------------------------------------------------------
  67. // 作者: lwl 日期: 2011年05月20日
  68. //--------------------------------------------------------------------
  69. // LONGJOE
  70. //--------------------------------------------------------------------
  71. // 修改历史:
  72. //
  73. //====================================================================
  74. Int rslt = 1
  75. f_clear()
  76. Long ll_scid, ll_taskid
  77. Long arr_scid[], arr_taskid[]
  78. Long ll_mxCnt, arr_mxCnt[]
  79. Decimal ld_sumqty, arr_sumqty[]
  80. Long ll_level, arr_level[]
  81. datetime ll_requiredate, arr_requiredate[]
  82. Long ll_cnt = 0, ll_i
  83. DECLARE cur1 CURSOR FOR
  84. SELECT u_SaleTask.scid, u_SaleTask.TaskID, COUNT(0) AS Expr1, SUM(u_SaleTaskMx.SaleQty - u_SaleTaskMx.consignedQty) AS Expr2, u_SaleTask.level, u_SaleTask.requiredate
  85. FROM u_SaleTask INNER JOIN
  86. u_SaleTaskMx ON u_SaleTask.scid = u_SaleTaskMx.scid AND u_SaleTask.TaskID = u_SaleTaskMx.TaskID
  87. WHERE u_saletask.status = 1
  88. GROUP BY u_SaleTask.scid, u_SaleTask.TaskID,u_SaleTask.level, u_SaleTask.requiredate
  89. Order By u_SaleTask.requiredate,u_SaleTask.Level,Expr1, Expr2;
  90. OPEN cur1;
  91. FETCH cur1 Into :ll_scid, :ll_taskid, :ll_mxCnt, :ld_sumqty, :ll_level, :ll_requiredate;
  92. DO WHILE sqlca.SQLCode = 0
  93. ll_cnt++
  94. arr_scid[ll_cnt] = ll_scid
  95. arr_taskid[ll_cnt] = ll_taskid
  96. arr_mxCnt[ll_cnt] = ll_mxCnt
  97. arr_sumqty[ll_cnt] = ld_sumqty
  98. arr_level[ll_cnt] = ll_level
  99. arr_requiredate[ll_cnt] = ll_requiredate
  100. FETCH cur1 Into :ll_scid, :ll_taskid, :ll_mxCnt, :ld_sumqty, :ll_level, :ll_requiredate;
  101. LOOP
  102. CLOSE cur1;
  103. FOR ll_i = 1 To ll_cnt
  104. ins_tasks[ll_i] = Create dbauo_task
  105. ins_tasks[ll_i].f_init(This,arr_scid[ll_i], arr_taskid[ll_i], arr_mxCnt[ll_i], arr_sumqty[ll_i], arr_level[ll_i], arr_requiredate[ll_i])
  106. NEXT
  107. RETURN rslt
  108. end function
  109. public function dbauo_mtrlware f_getware (long arg_mtrlid, string arg_mtrlcuscode, string arg_status, string arg_pcode, string arg_woodcode);long ll_i
  110. for ll_i = 1 to upperbound(ins_mtrlwares)
  111. if arg_mtrlid = ins_mtrlwares[ll_i].ins_mtrlid and arg_mtrlcuscode = ins_mtrlwares[ll_i].ins_mtrlcuscode and arg_status = ins_mtrlwares[ll_i].ins_status and arg_pcode = ins_mtrlwares[ll_i].ins_pcode and arg_woodcode = ins_mtrlwares[ll_i].ins_woodcode then
  112. return ins_mtrlwares[ll_i]
  113. end if
  114. next
  115. ll_i = upperbound(ins_mtrlwares) + 1
  116. ins_mtrlwares[ll_i] = create dbauo_mtrlware
  117. ins_mtrlwares[ll_i].f_init(arg_mtrlid, arg_mtrlcuscode, arg_status, arg_pcode, arg_woodcode)
  118. return ins_mtrlwares[ll_i]
  119. end function
  120. public function long f_getmaxvalue ();//====================================================================
  121. // 事件: dbauo_adapter.f_getmaxvalue()
  122. //--------------------------------------------------------------------
  123. // 描述:返回当前排序的可齐货订单数
  124. //--------------------------------------------------------------------
  125. // 参数:
  126. // value integer
  127. //--------------------------------------------------------------------
  128. // 返回: long
  129. //--------------------------------------------------------------------
  130. // 作者: lwl 日期: 2011年05月21日
  131. //--------------------------------------------------------------------
  132. // LONGJOE
  133. //--------------------------------------------------------------------
  134. // 修改历史:
  135. //
  136. //====================================================================
  137. long ll_taskCount = 0
  138. long ll_i, ll_j
  139. boolean lb_enough
  140. for ll_i = 1 to upperbound(ins_mtrlwares)
  141. ins_mtrlwares[ll_i].ins_tempqty = ins_mtrlwares[ll_i].ins_noallocqty
  142. next
  143. for ll_i = 1 to upperbound(ins_tasks)
  144. lb_enough = true
  145. for ll_j = 1 to upperbound(ins_tasks[ll_i].ins_mx)
  146. if ins_tasks[ll_i].ins_mx[ll_j].ins_saleqty > ins_tasks[ll_i].ins_mx[ll_j].ins_mtrlware.ins_tempqty then
  147. lb_enough = false
  148. exit
  149. end if
  150. next
  151. if lb_enough then
  152. for ll_j = 1 to upperbound(ins_tasks[ll_i].ins_mx)
  153. ins_tasks[ll_i].ins_mx[ll_j].ins_mtrlware.ins_tempqty -= ins_tasks[ll_i].ins_mx[ll_j].ins_saleqty
  154. next
  155. ll_taskCount ++
  156. end if
  157. next
  158. return ll_taskCount
  159. end function
  160. public subroutine f_sort2 ();long ll_sortindex
  161. ll_sortindex = upperbound(ins_sorts) + 1
  162. ins_sorts[ll_sortindex] = create dbauo_sort
  163. ins_sorts[ll_sortindex].f_init(this)
  164. ins_sorts[ll_sortindex].f_sort2()
  165. end subroutine
  166. public subroutine f_sort1 ();long ll_sortindex
  167. ll_sortindex = upperbound(ins_sorts) + 1
  168. ins_sorts[ll_sortindex] = create dbauo_sort
  169. ins_sorts[ll_sortindex].f_init(this)
  170. ins_sorts[ll_sortindex].f_sort1()
  171. end subroutine
  172. on dbauo_adapter.create
  173. call super::create
  174. TriggerEvent( this, "constructor" )
  175. end on
  176. on dbauo_adapter.destroy
  177. TriggerEvent( this, "destructor" )
  178. call super::destroy
  179. end on
  180. event destructor;f_clear()
  181. end event