U8ServerService.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. <?php
  2. namespace App\Service;
  3. use App\Model\Inventory;
  4. use App\Model\Record;
  5. use App\Model\Vendor;
  6. use Illuminate\Support\Facades\DB;
  7. class U8ServerService extends Service
  8. {
  9. protected $databaseService;
  10. /**
  11. * @var string|null
  12. */
  13. protected $error;
  14. /**
  15. * U8ServerService constructor.
  16. */
  17. public function __construct($loginUser = [])
  18. {
  19. $service = new U8DatabaseServerService($loginUser);
  20. $this->databaseService = $service->db;
  21. $this->error = $service->error;
  22. }
  23. /**
  24. * 获取错误信息
  25. *
  26. * @return string|null
  27. */
  28. public function getError()
  29. {
  30. return $this->error;
  31. }
  32. public function purchaseRequisition($data, $user){
  33. $qx = $user['qx'];
  34. $order_date = $data['order_date'] ?? [];
  35. $order_date = array_filter($order_date);
  36. $order_number = $data['order_number'] ?? "";
  37. $model = $this->databaseService->table('PU_AppVouch as a')
  38. ->leftJoin('Person as c', 'c.cPersonCode', 'a.cPersonCode')
  39. ->when(empty($qx), function ($query) use($user){
  40. return $query->where('a.cMaker',$user['username']);
  41. })
  42. ->when(! empty($order_number), function ($query) use($order_number){
  43. return $query->where('a.cCode','LIKE', '%'.$order_number.'%');
  44. })
  45. ->when(! empty($order_date), function ($query) use($order_date){
  46. $start = date('Y-m-d H:i:s.000', $order_date[0]);
  47. $end = date('Y-m-d H:i:s.000', $order_date[1]);
  48. return $query->whereBetween('a.dDate', [$start, $end]);
  49. })
  50. ->where(function ($query) {
  51. $query->where('a.iverifystateex', 0)
  52. ->OrwhereNull('a.iverifystateex');
  53. })
  54. ->select('a.cMaker as crt_name', DB::raw("COALESCE(c.cPersonName, '') as purchase_name"),'a.cBusType as business_type','a.cCode as order_number',DB::raw("CONVERT(varchar(10), a.dDate, 120) as order_date"))
  55. ->orderBy('a.ID','desc');
  56. $list = $this->limit($model,'',$data);
  57. $list = $this->fillAll($list, 2);
  58. return [true , $list];
  59. }
  60. public function purchaseRequisitionDetail($data, $user){
  61. if(empty($data['order_number'])) return [false, '采购请购单号不能为空'];
  62. $order = $this->databaseService->table('PU_AppVouch as a')
  63. ->leftJoin('Person as c', 'c.cPersonCode', 'a.cPersonCode')
  64. // ->where('a.cMaker',$user['username'])
  65. // ->where('a.iverifystateex',0)
  66. ->where('cCode', $data['order_number'])
  67. ->select('a.cMaker as crt_name', DB::raw("COALESCE(c.cPersonName, '') as purchase_name"),'a.cBusType as business_type','a.cCode as order_number',DB::raw("CONVERT(varchar(10), a.dDate, 120) as order_date"),'a.ID as id')
  68. ->first();
  69. if(empty($order)) return [false, '采购请购单不存在'];
  70. $order = (array) $order;
  71. $detail = $this->databaseService->table('PU_AppVouchs as a')
  72. ->leftJoin('Inventory as b', 'b.cInvCode', 'a.cInvCode')
  73. ->leftJoin('ComputationUnit as c', 'c.cComunitCode', 'b.cComUnitCode')
  74. ->where('a.ID', $order['id'])
  75. ->select('b.cInvName as product_title','b.cInvCode as product_code','c.cComUnitName as unit_title',DB::raw("CONVERT(varchar(10), a.dRequirDate, 120) as need_arrived_date"),DB::raw("LTRIM(STR(a.fQuantity, 20, 2)) as quantity"))
  76. ->get();
  77. // 转为数组的数组
  78. $detail = array_map(function ($item) {
  79. return (array) $item;
  80. }, $detail->toArray());
  81. $order['detail'] = $detail;
  82. return [true, $order];
  83. }
  84. public function purchaseOrder($data, $user){
  85. $qx = $user['qx'];
  86. $order_date = $data['order_date'] ?? [];
  87. $order_date = array_filter($order_date);
  88. $order_number = $data['order_number'] ?? "";
  89. $model = $this->databaseService->table('PO_Pomain as a')
  90. ->leftJoin('Vendor as c', 'c.cVenCode', 'a.cVenCode')
  91. ->when(empty($qx), function ($query) use($user){
  92. return $query->where('a.cMaker',$user['username']);
  93. })
  94. ->when(! empty($order_number), function ($query) use($order_number){
  95. return $query->where('a.cPOID','LIKE', '%'.$order_number.'%');
  96. })
  97. ->when(! empty($order_date), function ($query) use($order_date){
  98. $start = date('Y-m-d H:i:s.000', $order_date[0]);
  99. $end = date('Y-m-d H:i:s.000', $order_date[1]);
  100. return $query->whereBetween('a.dPODate', [$start, $end]);
  101. })
  102. ->where(function ($query) {
  103. $query->where('a.iverifystateex', 0)
  104. ->OrwhereNull('a.iverifystateex');
  105. })
  106. ->select('a.cMaker as crt_name', 'a.cBusType as business_type','a.cPOID as order_number',DB::raw("CONVERT(varchar(10), a.dPODate, 120) as order_date"),'c.cVenName as supplier_title')
  107. ->orderBy('a.POID','desc');
  108. $list = $this->limit($model,'',$data);
  109. $list = $this->fillAll($list, 1);
  110. return [true , $list];
  111. }
  112. public function purchaseOrderDetail($data, $user){
  113. if(empty($data['order_number'])) return [false, '采购单号不能为空'];
  114. $order = $this->databaseService->table('PO_Pomain as a')
  115. ->leftJoin('Vendor as c', 'c.cVenCode', 'a.cVenCode')
  116. ->where('cPOID', $data['order_number'])
  117. // ->where('a.cMaker',$user['username'])
  118. // ->where('a.iverifystateex',0)
  119. ->select('a.cMaker as crt_name', 'a.cBusType as business_type','a.cPOID as order_number',DB::raw("CONVERT(varchar(10), a.dPODate, 120) as order_date"),'c.cVenName as supplier_title','a.POID as id')
  120. ->first();
  121. if(empty($order)) return [false, '采购单不存在'];
  122. $order = (array) $order;
  123. $detail = $this->databaseService->table('PO_Podetails as a')
  124. ->leftJoin('Inventory as b', 'b.cInvCode', 'a.cInvCode')
  125. ->leftJoin('ComputationUnit as c', 'c.cComunitCode', 'b.cComUnitCode')
  126. ->where('a.POID', $order['id'])
  127. ->select('b.cInvName as product_title','b.cInvCode as product_code','c.cComUnitName as unit_title',DB::raw("LTRIM(STR(a.iQuantity, 20, 2)) as quantity"),DB::raw("LTRIM(STR(a.iSum, 20, 2)) as amount"))
  128. ->get();
  129. // 转为数组的数组
  130. $detail = array_map(function ($item) {
  131. return (array) $item;
  132. }, $detail->toArray());
  133. $order['detail'] = $detail;
  134. return [true, $order];
  135. }
  136. public function purchaseInOrder($data, $user){
  137. $qx = $user['qx'];
  138. $order_date = $data['order_date'] ?? [];
  139. $order_date = array_filter($order_date);
  140. $order_number = $data['order_number'] ?? "";
  141. $model = $this->databaseService->table('RdRecord01 as a')
  142. ->leftJoin('Vendor as c', 'c.cVenCode', 'a.cVenCode')
  143. ->when(empty($qx), function ($query) use($user){
  144. return $query->where('a.cMaker',$user['username']);
  145. })
  146. ->when(! empty($order_number), function ($query) use($order_number){
  147. return $query->where('a.cCode','LIKE', '%'.$order_number.'%');
  148. })
  149. ->when(! empty($order_date), function ($query) use($order_date){
  150. $start = date('Y-m-d H:i:s.000', $order_date[0]);
  151. $end = date('Y-m-d H:i:s.000', $order_date[1]);
  152. return $query->whereBetween('a.dDate', [$start, $end]);
  153. })
  154. ->whereNull('a.cHandler')
  155. ->select('a.cMaker as crt_name', 'c.cVenName as supplier_title','a.cCode as order_number',DB::raw("CONVERT(varchar(10), a.dDate, 120) as order_date"))
  156. ->orderBy('a.ID','desc');
  157. $list = $this->limit($model,'',$data);
  158. $list = $this->fillAll($list, 3);
  159. return [true , $list];
  160. }
  161. public function purchaseInOrderDetail($data, $user){
  162. if(empty($data['order_number'])) return [false, '付款申请单号不能为空'];
  163. $order = $this->databaseService->table('RdRecord01 as a')
  164. ->leftJoin('Vendor as c', 'c.cVenCode', 'a.cVenCode')
  165. // ->where('a.cOperator',$user['username'])
  166. // ->whereNull('a.cCheckMan')
  167. ->where('cCode', $data['order_number'])
  168. ->select('a.cMaker as crt_name', 'c.cVenName as supplier_title','a.cCode as order_number',DB::raw("CONVERT(varchar(10), a.dDate, 120) as order_date"))
  169. ->first();
  170. if(empty($order)) return [false, '采购入库单不存在'];
  171. $order = (array) $order;
  172. $detail = $this->databaseService->table('RdRecords01 as a')
  173. ->leftJoin('Inventory as b', 'b.cInvCode', 'a.cInvCode')
  174. ->leftJoin('ComputationUnit as c', 'c.cComunitCode', 'b.cComUnitCode')
  175. ->where('a.ID', $order['id'])
  176. ->select('b.cInvName as product_title','c.cComUnitName as unit_title')
  177. ->get();
  178. // 转为数组的数组
  179. $detail = array_map(function ($item) {
  180. return (array) $item;
  181. }, $detail->toArray());
  182. // 使用 array_column 提取所有 amount 并求和
  183. $order['total_amount'] = number_format(array_sum(array_column($detail, 'amount')), 2, '.', '');
  184. $order['detail'] = $detail;
  185. return [true, $order];
  186. }
  187. public function inventoryDetail($data, $user){
  188. if(empty($data['order_number'])) return [false, '流水单号不能为空'];
  189. $order = Inventory::where('del_time',0)
  190. ->where('order_number', $data['order_number'])
  191. ->first();
  192. if(empty($order)) return [false, '存货不存在'];
  193. $order = (array) $order;
  194. return [true, $order];
  195. }
  196. public function vendorDetail($data, $user){
  197. if(empty($data['order_number'])) return [false, '流水单号不能为空'];
  198. $order = Vendor::where('del_time',0)
  199. ->where('order_number', $data['order_number'])
  200. ->first();
  201. if(empty($order)) return [false, '供应商不存在'];
  202. $order = (array) $order;
  203. return [true, $order];
  204. }
  205. public function getOrderDetails($data,$user){
  206. $type = $data['type'];
  207. if($type == 1){
  208. // 采购单
  209. [$success, $order] = $this->purchaseOrderDetail($data,$user);
  210. }elseif ($type == 2){
  211. // 请购单
  212. [$success, $order] = $this->purchaseRequisitionDetail($data,$user);
  213. }elseif ($type == 3){
  214. // 采购入库
  215. [$success, $order] = $this->purchaseInOrderDetail($data,$user);
  216. }elseif ($type == 4){
  217. // 存货
  218. [$success, $order] = $this->inventoryDetail($data,$user);
  219. }elseif ($type == 5){
  220. // 供应商
  221. [$success, $order] = $this->vendorDetail($data,$user);
  222. }
  223. return [$success, $order];
  224. }
  225. private function fillAll($list, $type){
  226. if(empty($list['data'])) return $list;
  227. $map = Record::where('del_time',0)
  228. ->where('type', $type)
  229. ->whereIn('order_number',array_column($list['data'],'order_number'))
  230. ->pluck('id','order_number')
  231. ->toArray();
  232. foreach ($list['data'] as $key => $value){
  233. $is_create = 0;
  234. if(isset($map[$value->order_number])) $is_create = 1;
  235. $list['data'][$key]->is_create = $is_create;
  236. }
  237. return $list;
  238. }
  239. }