ExportFileService.php 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736
  1. <?php
  2. namespace App\Service;
  3. use App\Exports\ExportOrder;
  4. use App\Exports\MyExport;
  5. use App\Model\Area;
  6. use App\Model\BasicMaterial;
  7. use App\Model\BasicRollFilm;
  8. use App\Model\BasicType;
  9. use App\Model\CarDepart;
  10. use App\Model\CarFiles;
  11. use App\Model\CarType;
  12. use App\Model\Company;
  13. use App\Model\Construction;
  14. use App\Model\ConstructionInfo;
  15. use App\Model\ConstructionOrder;
  16. use App\Model\ConstructionOrderImg;
  17. use App\Model\ConstructionOrderSub;
  18. use App\Model\ConstructionProductInfo;
  19. use App\Model\Employee;
  20. use App\Model\FoursShop;
  21. use App\Model\InOutRecord;
  22. use App\Model\Inventory;
  23. use App\Model\InventorySub;
  24. use App\Model\Material;
  25. use App\Model\MaterialCharge;
  26. use App\Model\MaterialChargeSub;
  27. use App\Model\MaterialOrder;
  28. use App\Model\MaterialOrderApply;
  29. use App\Model\MaterialOrderIn;
  30. use App\Model\MaterialOrderSend;
  31. use App\Model\MaterialOrderSendSub;
  32. use App\Model\MaterialReturn;
  33. use App\Model\MaterialReturnSub;
  34. use App\Model\PaymentReceipt;
  35. use App\Model\PaymentReceiptInfo;
  36. use App\Model\PurchaseOrder;
  37. use App\Model\PurchaseOrderInfo;
  38. use App\Model\RollFilm;
  39. use App\Model\RollFilmCombine;
  40. use App\Model\RollFilmCompany;
  41. use App\Model\RollFilmInventory;
  42. use App\Model\SalesOrder;
  43. use App\Model\SalesOrderOtherFee;
  44. use App\Model\SalesOrderProductInfo;
  45. use App\Model\Storehouse;
  46. use App\Model\Supplier;
  47. use App\Model\Transfer;
  48. use App\Model\TransferSub;
  49. use Illuminate\Support\Facades\DB;
  50. use Maatwebsite\Excel\Facades\Excel;
  51. class ExportFileService extends Service
  52. {
  53. //导出文件
  54. const type_one = 1;
  55. const type_two = 2;
  56. const type_three = 3;
  57. const type_four = 4;
  58. const type_five = 5;
  59. const type_six = 6;
  60. const type_seven = 7;
  61. //导出文件方法
  62. protected static $fuc = [
  63. self::type_one => 'one',
  64. self::type_two => 'two',
  65. self::type_three => 'three',
  66. self::type_four => 'four',
  67. self::type_five => 'five',
  68. ];
  69. protected static $fuc_name = [
  70. self::type_one => '合同订单',
  71. self::type_two => '派工订单',
  72. self::type_three => '收付款单',
  73. self::type_four => '施工单',
  74. self::type_five => '采购单',
  75. ];
  76. public static $filename = "";
  77. public function exportAll($data,$user){
  78. if(empty($data['id'])) return [false,'请选择导出数据'];
  79. if(empty($data['type']) || ! isset(self::$fuc[$data['type']])) return [false,'导出文件类型错误或者不存在'];
  80. self::$filename = self::$fuc_name[$data['type']] ?? "";
  81. //不超时
  82. ini_set('max_execution_time', 0);
  83. //内存设置
  84. ini_set('memory_limit', -1);
  85. $function = self::$fuc[$data['type']];
  86. $return = $this->$function($data);
  87. return [true, $return];
  88. }
  89. public function one($ergs){
  90. $id = $ergs['id'];
  91. // 导出数据
  92. $return = [];
  93. DB::table('sales_order')
  94. ->whereIn('id', $id)
  95. ->select('id','order_number','model_type','sales_order_type','sign_time','plat_order','plat_type','product_total','other_fee','discount_fee','contract_fee','crt_time','crt_id','state','invoice_state','pay_way')
  96. ->orderBy('id','desc')
  97. ->chunk(500,function ($data) use(&$return){
  98. $data = $data->toArray();
  99. $data_id = array_unique(array_column($data,'id'));
  100. $emp_map = Employee::whereIn('id',array_unique(array_column($data,'crt_id')))
  101. ->pluck('emp_name','id')
  102. ->toArray();
  103. //获取分社订货合同关联的发货单
  104. $id = [];
  105. foreach ($data as $value){
  106. $id[] = [
  107. 'id' => $value->id,
  108. 'invoice_state' => $value->invoice_state,
  109. ];
  110. }
  111. $invoiceData = (new SalesOrderService())->getInvoiceOrderData($id);
  112. $array = array_unique(array_merge_recursive(array_column($data,'car_type'),array_column($data,'pay_way'),array_column($data,'install_position'),array_column($data,'install_method'),array_column($data,'plat_type')));
  113. $basic_map = BasicType::whereIn('id',$array)
  114. ->pluck('title','id')
  115. ->toArray();
  116. $product = [];
  117. $sales_p_info = SalesOrderProductInfo::where('del_time',0)
  118. ->whereIn('sales_order_id',$data_id)
  119. ->get()->toArray();
  120. $basic_price = BasicType::whereIn('id',array_unique(array_column($sales_p_info,'basic_type_id')))->pluck('title','id')->toArray();
  121. $map = (new ProductService())->getProductDetail(array_column($sales_p_info,'product_id'));
  122. foreach ($sales_p_info as $value){
  123. $tmp = $map[$value['product_id']] ?? [];
  124. $value['title'] = $tmp['title'] ?? "";
  125. $value['code'] = $tmp['code'] ?? "";
  126. $value['size'] = $tmp['size'] ?? "";
  127. $value['bar_code'] = $tmp['bar_code'] ?? "";
  128. $value['basic_type_title'] = $basic_price[$value['basic_type_id']] ?? "";
  129. $value['install_time'] = $tmp['install_time'] ?? 0;
  130. $product[$value['sales_order_id']][] = $value;
  131. }
  132. $flag = [];
  133. foreach ($data as $value){
  134. $tmp = $invoiceData[$value->id] ?? [];
  135. $invoice_arr = implode(',', $tmp);
  136. $model_type_title = SalesOrder::$model_type_title[$value->model_type] ?? '';
  137. $plat_type_title = $basic_map[$value->plat_type] ?? '';
  138. $sales_order_type_title = SalesOrder::$order_type[$value->sales_order_type] ?? '';
  139. $crt_time = empty($value->crt_time) ? '' : date('Y-m-d',$value->crt_time);
  140. $sign_time = empty($value->sign_time) ? '' : date('Y-m-d',$value->sign_time);
  141. $product_tmp = $product[$value->id] ?? [];
  142. if($value->sales_order_type == SalesOrder::Order_type_one){
  143. if($value->model_type == SalesOrder::Model_type_four){
  144. $state = SalesOrder::$state[$value->state] ?? '';
  145. }else{
  146. $state = SalesOrder::$state_2[$value->state] ?? '';
  147. }
  148. }else{
  149. $state = SalesOrder::$state2[$value->state] ?? '';
  150. }
  151. foreach ($product_tmp as $val){
  152. if(in_array($val['sales_order_id'], $flag)){
  153. $return[] = [
  154. 'order_number' => "",
  155. 'model_type_title' => "",
  156. 'sales_order_type_title' => "",
  157. 'sign_time' => "",
  158. 'plat_order' => "",
  159. 'plat_type_title' => "",
  160. 'product_total' => "",
  161. 'other_fee' => "",
  162. 'discount_fee' => "",
  163. 'contract_fee' => "",
  164. 'crt_time' => "",
  165. 'crt_name' => "",
  166. 'state_title' => "",
  167. 'invoice_state_title' =>"",
  168. 'invoice_arr' => "",
  169. 'pay_way' => "",
  170. 'product_title' => $val['title'],
  171. 'product_code' => $val['code'],
  172. 'product_size' => $val['size'],
  173. 'product_rate' => $val['rate'],
  174. 'product_price' => $val['price'],
  175. 'product_num' => $val['number'],
  176. 'product_final_amount' => $val['final_amount'],
  177. ];
  178. }else{
  179. $flag[] = $val['sales_order_id'];
  180. $return[] = [
  181. 'order_number' => $value->order_number,
  182. 'model_type_title' => $model_type_title,
  183. 'sales_order_type_title' => $sales_order_type_title,
  184. 'sign_time' => $sign_time,
  185. 'plat_order' => $value->plat_order,
  186. 'plat_type_title' => $plat_type_title,
  187. 'product_total' => $value->product_total,
  188. 'other_fee' => $value->other_fee,
  189. 'discount_fee' => $value->discount_fee,
  190. 'contract_fee' => $value->contract_fee,
  191. 'crt_time' => $crt_time,
  192. 'crt_name' => $emp_map[$value->crt_id] ?? "",
  193. 'state_title' => $state,
  194. 'invoice_state_title' => SalesOrder::$invoice_state[$value->invoice_state] ?? '',
  195. 'invoice_arr' => $invoice_arr,
  196. 'pay_way' => $basic_map[$value->pay_way] ?? "",
  197. 'product_title' => $val['title'],
  198. 'product_code' => $val['code'],
  199. 'product_size' => $val['size'],
  200. 'product_rate' => $val['rate'],
  201. 'product_price' => $val['price'],
  202. 'product_num' => $val['number'],
  203. 'product_final_amount' => $val['final_amount'],
  204. ];
  205. }
  206. }
  207. }
  208. });
  209. $header = ['合同单号','销售类型','产品类型','签订时间','平台单号','平台类型','产品合计','其他费用','优惠金额','合同金额','创建时间','创建人','订单状态','发货状态','发货单号','付款方式','产品名称','产品编码','产品规格','产品税率','产品单价','产品数量','产品合同金额'];
  210. return $this->saveExportData($return,$header);
  211. }
  212. public function two($ergs){
  213. $id = $ergs['id'];
  214. // 导出数据
  215. $return = [];
  216. DB::table('sales_order')
  217. ->whereIn('id', $id)
  218. ->select('id','order_number','model_type','sales_order_type','sign_time','plat_order','plat_type','product_total','other_fee','discount_fee','contract_fee','crt_time','crt_id','state','invoice_state','pay_way')
  219. ->orderBy('id','desc')
  220. ->chunk(500,function ($data) use(&$return){
  221. $data = $data->toArray();
  222. $data_id = array_unique(array_column($data,'id'));
  223. $emp_map = Employee::whereIn('id',array_unique(array_column($data,'crt_id')))
  224. ->pluck('emp_name','id')
  225. ->toArray();
  226. //获取分社订货合同关联的发货单
  227. $id = [];
  228. foreach ($data as $value){
  229. $id[] = [
  230. 'id' => $value->id,
  231. 'invoice_state' => $value->invoice_state,
  232. 'state' => $value->state,
  233. ];
  234. }
  235. $invoiceData = (new SalesOrderService())->getInvoiceOrderData($id);
  236. $array = array_unique(array_merge_recursive(array_column($data,'car_type'),array_column($data,'pay_way'),array_column($data,'install_position'),array_column($data,'install_method'),array_column($data,'plat_type')));
  237. $basic_map = BasicType::whereIn('id',$array)
  238. ->pluck('title','id')
  239. ->toArray();
  240. $product = [];
  241. $sales_p_info = SalesOrderProductInfo::where('del_time',0)
  242. ->whereIn('sales_order_id',$data_id)
  243. ->get()->toArray();
  244. $basic_price = BasicType::whereIn('id',array_unique(array_column($sales_p_info,'basic_type_id')))->pluck('title','id')->toArray();
  245. $map = (new ProductService())->getProductDetail(array_column($sales_p_info,'product_id'));
  246. //指派金额
  247. $fee = [];
  248. $sales_o_info = SalesOrderOtherFee::where('del_time',0)
  249. ->whereIn('sales_order_id',$data_id)
  250. ->get()->toArray();
  251. foreach ($sales_o_info as $value){
  252. $fee[$value['sales_order_id']] = $value['other_fee_1'];
  253. }
  254. foreach ($sales_p_info as $value){
  255. $tmp = $map[$value['product_id']] ?? [];
  256. $value['title'] = $tmp['title'] ?? "";
  257. $value['code'] = $tmp['code'] ?? "";
  258. $value['size'] = $tmp['size'] ?? "";
  259. $value['bar_code'] = $tmp['bar_code'] ?? "";
  260. $value['basic_type_title'] = $basic_price[$value['basic_type_id']] ?? "";
  261. $value['install_time'] = $tmp['install_time'] ?? 0;
  262. $product[$value['sales_order_id']][] = $value;
  263. }
  264. //分派的总社或分社
  265. $dispatch = (new SalesOrderService())->getDispatchData($id);
  266. //金额
  267. list($for_amount_list, $for_amount_list1) = (new PaymentReceiptService())->getPaymentReceiptDataCountList(array_column($data,'order_number'));
  268. list($getDifferentAmountALL,$getDifferentAmountALL1) = (new ReturnExchangeOrderService())->getDifferentAmountALLNew(array_column($data,'id'));
  269. $flag = [];
  270. foreach ($data as $value){
  271. $tmp = $invoiceData[$value->id] ?? [];
  272. $invoice_arr = implode(',', $tmp);
  273. $model_type_title = SalesOrder::$model_type_title[$value->model_type] ?? '';
  274. $plat_type_title = $basic_map[$value->plat_type] ?? '';
  275. $sales_order_type_title = SalesOrder::$order_type[$value->sales_order_type] ?? '';
  276. $crt_time = empty($value->crt_time) ? '' : date('Y-m-d',$value->crt_time);
  277. $sign_time = empty($value->sign_time) ? '' : date('Y-m-d',$value->sign_time);
  278. $product_tmp = $product[$value->id] ?? [];
  279. if($value->sales_order_type == SalesOrder::Order_type_one){
  280. if($value->model_type == SalesOrder::Model_type_four){
  281. $state = SalesOrder::$state[$value->state] ?? '';
  282. }else{
  283. $state = SalesOrder::$state_2[$value->state] ?? '';
  284. }
  285. }else{
  286. $state = SalesOrder::$state2[$value->state] ?? '';
  287. }
  288. foreach ($product_tmp as $val){
  289. if(in_array($val['sales_order_id'], $flag)){
  290. $return[] = [
  291. 'order_number' => "",
  292. 'model_type_title' => "",
  293. 'sales_order_type_title' => "",
  294. 'sign_time' => "",
  295. 'plat_order' => "",
  296. 'plat_type_title' => "",
  297. 'product_total' => "",
  298. 'other_fee' => "",
  299. 'discount_fee' => "",
  300. 'contract_fee' => "",
  301. 'fee' => "",
  302. 'dispatch_company' => "",
  303. 'fee1' => "",
  304. 'fee2' => "",
  305. 'fee3' => "",
  306. 'fee4' => "",
  307. 'crt_time' => "",
  308. 'crt_name' => "",
  309. 'state_title' => "",
  310. 'invoice_state_title' =>"",
  311. 'invoice_arr' => "",
  312. 'pay_way' => "",
  313. 'product_title' => $val['title'],
  314. 'product_code' => $val['code'],
  315. 'product_size' => $val['size'],
  316. 'product_rate' => $val['rate'],
  317. 'product_price' => $val['price'],
  318. 'product_num' => $val['number'],
  319. 'product_final_amount' => $val['final_amount'],
  320. ];
  321. }else{
  322. $flag[] = $val['sales_order_id'];
  323. //(审核后)
  324. //已收
  325. $one = $for_amount_list1[$value->order_number . PaymentReceipt::type_one] ?? 0;
  326. $red = $for_amount_list1[$value->order_number . PaymentReceipt::type_three] ?? 0;
  327. $return_exchange_amount1 = $getDifferentAmountALL1[$value->id] ?? 0;
  328. $bad = bcsub($return_exchange_amount1 ,$red,2);
  329. //已收金额
  330. $fee1 = bcsub($one ,$red,2);
  331. //未收金额
  332. $fee2 = bcsub(bcsub(bcsub($value->contract_fee, $fee1,2), $bad, 2),$red,2);
  333. //红冲金额
  334. $fee3 = $red;
  335. //坏账金额
  336. $fee4 = $bad;
  337. $return[] = [
  338. 'order_number' => $value->order_number,
  339. 'model_type_title' => $model_type_title,
  340. 'sales_order_type_title' => $sales_order_type_title,
  341. 'sign_time' => $sign_time,
  342. 'plat_order' => $value->plat_order,
  343. 'plat_type_title' => $plat_type_title,
  344. 'product_total' => $value->product_total,
  345. 'other_fee' => $value->other_fee,
  346. 'discount_fee' => $value->discount_fee,
  347. 'contract_fee' => $value->contract_fee,
  348. 'fee' => $fee[$value->id] ?? "",
  349. 'dispatch_company' => $dispatch[$value->id] ?? '',
  350. 'fee1' => $fee1,
  351. 'fee2' => $fee2,
  352. 'fee3' => $fee3,
  353. 'fee4' => $fee4,
  354. 'crt_time' => $crt_time,
  355. 'crt_name' => $emp_map[$value->crt_id] ?? "",
  356. 'state_title' => $state,
  357. 'invoice_state_title' => SalesOrder::$invoice_state[$value->invoice_state] ?? '',
  358. 'invoice_arr' => $invoice_arr,
  359. 'pay_way' => $basic_map[$value->pay_way] ?? "",
  360. 'product_title' => $val['title'],
  361. 'product_code' => $val['code'],
  362. 'product_size' => $val['size'],
  363. 'product_rate' => $val['rate'],
  364. 'product_price' => $val['price'],
  365. 'product_num' => $val['number'],
  366. 'product_final_amount' => $val['final_amount'],
  367. ];
  368. }
  369. }
  370. }
  371. });
  372. $header = ['合同单号','销售类型','产品类型','签订时间','平台单号','平台类型','产品合计','其他费用','优惠金额','合同金额','指派金额','派遣门店','已收金额','未收金额','红冲金额','坏账金额','创建时间','创建人','订单状态','发货状态','发货单号','付款方式','产品名称','产品编码','产品规格','产品税率','产品单价','产品数量','产品合同金额'];
  373. return $this->saveExportData($return,$header);
  374. }
  375. public function three($ergs){
  376. $id = $ergs['id'];
  377. // 导出数据
  378. $return = [];
  379. DB::table('payment_receipt')
  380. ->whereIn('id', $id)
  381. ->select('id','order_number','account','pay_way','type','data_type','payment_receipt_date','mark','crt_time','crt_id','state')
  382. ->orderBy('id','desc')
  383. ->chunk(500,function ($data) use(&$return){
  384. $data = $data->toArray();
  385. $emp_map = Employee::whereIn('id',array_unique(array_column($data,'crt_id')))
  386. ->pluck('emp_name','id')
  387. ->toArray();
  388. $array = array_unique(array_merge_recursive(array_column($data,'account'),array_column($data,'pay_way')));
  389. $basic_map = BasicType::whereIn('id',$array)
  390. ->pluck('title','id')
  391. ->toArray();
  392. $info = PaymentReceiptInfo::where('del_time',0)
  393. ->where('type',PaymentReceiptInfo::type_three)
  394. ->whereIn('payment_receipt_id',array_column($data,'id'))
  395. ->get()->toArray();
  396. $map = [];
  397. foreach ($info as $value){
  398. $map[$value['payment_receipt_id']][] = [
  399. 'payment_receipt_id' => $value['payment_receipt_id'],
  400. 'data_order_no' => $value['data_order_no'],
  401. 'amount' => $value['amount']
  402. ];
  403. }
  404. $flag = [];
  405. foreach ($data as $value){
  406. $account_title = $basic_map[$value->account] ?? '';
  407. $pay_way_title = $basic_map[$value->pay_way] ?? '';
  408. $crt_time = empty($value->crt_time) ? '' : date('Y-m-d',$value->crt_time);
  409. $payment_receipt_date= empty($value->payment_receipt_date) ? '' : date('Y-m-d',$value->payment_receipt_date);
  410. $state_title = PaymentReceipt::$name[$value->state] ?? '';
  411. $product_tmp = $map[$value->id] ?? [];
  412. foreach ($product_tmp as $val){
  413. if(in_array($val['payment_receipt_id'], $flag)){
  414. $return[] = [
  415. 'order_number' => "",
  416. 'account' => "",
  417. 'pay_way' => "",
  418. 'type' => "",
  419. 'data_type' => "",
  420. 'payment_receipt_date' => "",
  421. 'mark' => "",
  422. 'crt_time' => "",
  423. 'crt_name' => "",
  424. 'state_title' => "",
  425. 'data_order_no' => $val['data_order_no'],
  426. 'amount' => $val['amount'],
  427. ];
  428. }else{
  429. $flag[] = $val['payment_receipt_id'];
  430. $return[] = [
  431. 'order_number' => $value->order_number,
  432. 'account' => $account_title,
  433. 'pay_way' => $pay_way_title,
  434. 'type' => PaymentReceipt::$model_type[$value->type] ?? '',
  435. 'data_type' => PaymentReceipt::$data_type[$value->data_type] ?? '',
  436. 'payment_receipt_date' => $payment_receipt_date,
  437. 'mark' => $value->mark,
  438. 'crt_time' => $crt_time,
  439. 'crt_name' => $emp_map[$value->crt_id] ?? "",
  440. 'state_title' => $state_title,
  441. 'data_order_no' => $val['data_order_no'],
  442. 'amount' => $val['amount'],
  443. ];
  444. }
  445. }
  446. }
  447. });
  448. $header = ['收付款单号','收付款账户','支付方式','收付款类型','关联单号类型','日期','备注','创建时间','创建人','订单状态','关联单号','金额'];
  449. return $this->saveExportData($return,$header);
  450. }
  451. public function four($ergs){
  452. $id = $ergs['id'];
  453. // 导出数据
  454. $return = [];
  455. DB::table('construction')
  456. ->whereIn('id', $id)
  457. ->select('id','order_number','title','sales_order_id','handover_time','install_method','install_position','mark','urgency','start_time','end_time','crt_time','crt_id','state',"construction_fee")
  458. ->orderBy('id','desc')
  459. ->chunk(500,function ($data) use(&$return){
  460. $data = $data->toArray();
  461. $emp_map = Employee::whereIn('id',array_unique(array_column($data,'crt_id')))
  462. ->pluck('emp_name','id')
  463. ->toArray();
  464. $construction_info = ConstructionInfo::where('del_time',0)
  465. ->where('type',ConstructionInfo::type_three)
  466. ->whereIn('construction_id',array_unique(array_column($data,'id')))
  467. ->select('construction_id','employee_id')
  468. ->get()->toArray();
  469. $emp_map2 = Employee::whereIn('id',array_unique(array_column($construction_info,'employee_id')))
  470. ->pluck('emp_name','id')
  471. ->toArray();
  472. $construction_info_map = [];
  473. foreach ($construction_info as $value){
  474. $emp = $emp_map2[$value['employee_id']] ?? "";
  475. if(! $emp) continue;
  476. if(isset($construction_info_map[$value['construction_id']])){
  477. $construction_info_map[$value['construction_id']] .= ',' . $emp;
  478. }else{
  479. $construction_info_map[$value['construction_id']] = $emp;
  480. }
  481. }
  482. $sales = SalesOrder::whereIn('id',array_unique(array_column($data,'sales_order_id')))->select('order_number','id','handover_time')->get()->toArray();
  483. $sales_map = [];
  484. foreach ($sales as $value){
  485. $sales_map[$value['id']] = $value;
  486. }
  487. $array = array_unique(array_merge_recursive(array_column($data,'install_method'),array_column($data,'urgency'),array_column($data,'install_position')));
  488. $basic_map = BasicType::whereIn('id',$array)
  489. ->pluck('title','id')
  490. ->toArray();
  491. $product = [];
  492. $p_info = ConstructionProductInfo::where('del_time',0)
  493. ->whereIn('construction_id',array_unique(array_column($data,'id')))
  494. ->get()->toArray();
  495. $map = (new ProductService())->getProductDetail(array_column($p_info,'product_id'));
  496. foreach ($p_info as $value){
  497. $tmp = $map[$value['product_id']] ?? [];
  498. $value['title'] = $tmp['title'] ?? "";
  499. $value['code'] = $tmp['code'] ?? "";
  500. $value['size'] = $tmp['size'] ?? "";
  501. $value['unit'] = $tmp['unit'] ?? "";
  502. $value['bar_code'] = $tmp['bar_code'] ?? "";
  503. $product[$value['construction_id']][] = $value;
  504. }
  505. $flag = [];
  506. foreach ($data as $value){
  507. $tmp_sales = $sales_map[$value->sales_order_id] ?? [];
  508. $handover_time = $value->handover_time ? date("Y-m-d") : "";
  509. $sales_order_number = $tmp_sales['order_number'];
  510. $crt_time = empty($value->crt_time) ? '' : date('Y-m-d',$value->crt_time);
  511. $install_position_title = $basic_map[$value->install_position] ?? '';
  512. $install_method_title = $basic_map[$value->install_position] ?? '';
  513. $urgency_title = $basic_map[$value->urgency] ?? '';
  514. $start_time = $value->start_time ? date("Y-m-d H:i",$value->start_time) : '';
  515. $end_time = $value->end_time ? date("Y-m-d H:i",$value->end_time) : '';
  516. $construction_period = $start_time . '——' . $end_time;
  517. $state = Construction::$name[$value->state] ?? '';
  518. $product_tmp = $product[$value->id] ?? [];
  519. $emp_tmp = $construction_info_map[$value->id] ?? "";
  520. foreach ($product_tmp as $val){
  521. if(in_array($val['construction_id'], $flag)){
  522. $return[] = [
  523. 'order_number' => "",
  524. 'title' => "",
  525. 'sales_order_title' => "",
  526. 'money' => "",
  527. 'emp' => '',
  528. 'handover_time' => "",
  529. 'install_method' => "",
  530. 'install_position' => "",
  531. 'mark' => "",
  532. 'urgency' => "",
  533. 'construction_period' => "",
  534. 'state_title' => "",
  535. 'crt_time' => "",
  536. 'crt_name' => "",
  537. 'product_title' => $val['title'],
  538. 'product_code' => $val['code'],
  539. 'product_size' => $val['size'],
  540. 'product_price' => $val['price'],
  541. 'product_num' => $val['number'],
  542. 'product_final_amount' => $val['final_amount'],
  543. ];
  544. }else{
  545. $flag[] = $val['construction_id'];
  546. $return[] = [
  547. 'order_number' => $value->order_number,
  548. 'title' => $value->title,
  549. 'sales_order_title' => $sales_order_number,
  550. 'money' => $value->construction_fee,
  551. 'emp' => $emp_tmp,
  552. 'handover_time' => $handover_time,
  553. 'install_method' => $install_method_title,
  554. 'install_position' => $install_position_title,
  555. 'mark' => $value->mark,
  556. 'urgency' => $urgency_title,
  557. 'construction_period' => $construction_period,
  558. 'state_title' => $state,
  559. 'crt_time' => $crt_time,
  560. 'crt_name' => $emp_map[$value->crt_id] ?? "",
  561. 'product_title' => $val['title'],
  562. 'product_code' => $val['code'],
  563. 'product_size' => $val['size'],
  564. 'product_price' => $val['price'],
  565. 'product_num' => $val['number'],
  566. 'product_final_amount' => $val['final_amount'],
  567. ];
  568. }
  569. }
  570. }
  571. });
  572. $header = ['施工单号','工单来源','关联单号','施工费用','负责人','交车日期','安装方式','安装地点','备注','紧急程度','施工时间','订单状态','创建时间','创建人','产品名称','产品编码','产品规格','产品单价','产品数量','产品合同金额'];
  573. return $this->saveExportData($return,$header);
  574. }
  575. public function five($ergs){
  576. $id = $ergs['id'];
  577. // 导出数据
  578. $return = [];
  579. DB::table('purchase_order')
  580. ->whereIn('id', $id)
  581. ->select('order_number','id','depart_id','top_depart_id','mark','crt_time','state','crt_id','order_type','sales_order_id','supplier','purchase_id','purchase_total','discount_fee','other_fee','total','storehouse_id')
  582. ->orderBy('id','desc')
  583. ->chunk(500,function ($data) use(&$return){
  584. $data = $data->toArray();
  585. $array = array_unique(array_merge_recursive(array_column($data,'crt_id'),array_column($data,'purchase_id')));
  586. $emp_map = Employee::whereIn('id',$array)
  587. ->pluck('emp_name','id')
  588. ->toArray();
  589. $sales = SalesOrder::whereIn('id',array_unique(array_column($data,'sales_order_id')))->pluck('order_number','id')->toArray();
  590. $supplier = Supplier::whereIn('id',array_unique(array_column($data,'supplier')))
  591. ->pluck('title','id')
  592. ->toArray();
  593. $product = [];
  594. $p_info = PurchaseOrderInfo::where('del_time',0)->whereIn('purchase_order_id',array_unique(array_column($data,'id')))
  595. ->get()->toArray();
  596. $map = (new ProductService())->getProductDetail(array_column($p_info,'product_id'));
  597. foreach ($p_info as $value){
  598. $tmp = $map[$value['product_id']] ?? [];
  599. $value['title'] = $tmp['title'] ?? "";
  600. $value['code'] = $tmp['code'] ?? "";
  601. $value['size'] = $tmp['size'] ?? "";
  602. $value['unit'] = $tmp['unit'] ?? "";
  603. $value['bar_code'] = $tmp['bar_code'] ?? "";
  604. $product[$value['purchase_order_id']][] = $value;
  605. }
  606. //获取发货信息
  607. $invoice_map = (new InvoiceOrderService())->getInvoiceData($data);
  608. $flag = [];
  609. foreach ($data as $value){
  610. $tmp_supplier = $supplier[$value->supplier] ?? "";
  611. $crt_name = $emp_map[$value->crt_id] ?? "";
  612. $purchase_name = $emp_map[$value->purchase_id] ?? "";
  613. $sales_order = $sales[$value->sales_order_id] ?? "";
  614. $crt_time = empty($value->crt_time) ? '' : date('Y-m-d',$value->crt_time);
  615. //发货信息
  616. $state_title = PurchaseOrder::$name[$value->state] ?? '';
  617. $invoice_state = "未发货";
  618. if(! empty($invoice_map[$value->order_number])) $invoice_state = implode(',',$invoice_map[$value->order_number]);
  619. $state_message = "订单状态:" . $state_title . "\n"."是否发货:" . $invoice_state;
  620. $product_tmp = $product[$value->id] ?? [];
  621. foreach ($product_tmp as $val){
  622. if(in_array($val['purchase_order_id'], $flag)){
  623. $return[] = [
  624. 'order_number' => "",
  625. 'sales_order_number' => "",
  626. 'purchase_name' => "",
  627. 'product_total' => "",
  628. 'supplier' => "",
  629. 'purchase_amount' => "",
  630. 'other_fee' => "",
  631. 'discount_fee' => "",
  632. 'state_title' => "",
  633. 'crt_time' => "",
  634. 'crt_name' => "",
  635. 'product_title' => $val['title'],
  636. 'product_code' => $val['code'],
  637. 'product_size' => $val['size'],
  638. 'product_price' => $val['price'],
  639. 'product_num' => $val['number'],
  640. ];
  641. }else{
  642. $flag[] = $val['purchase_order_id'];
  643. $return[] = [
  644. 'order_number' => $value->order_number,
  645. 'sales_order_number' => $sales_order,
  646. 'purchase_name' => $purchase_name,
  647. 'product_total' => $value->total,
  648. 'supplier' => $tmp_supplier,
  649. 'purchase_amount' => $value->purchase_total,
  650. 'other_fee' => $value->other_fee,
  651. 'discount_fee' => $value->discount_fee,
  652. 'state_title' => $state_message,
  653. 'crt_time' => $crt_time,
  654. 'crt_name' => $crt_name,
  655. 'product_title' => $val['title'],
  656. 'product_code' => $val['code'],
  657. 'product_size' => $val['size'],
  658. 'product_price' => $val['price'],
  659. 'product_num' => $val['number'],
  660. ];
  661. }
  662. }
  663. }
  664. });
  665. $header = ['采购单号','关联单号','采购人','产品合计','供应商','采购金额','其他费用','优惠金额','状态','创建时间','创建人','产品名称','产品编码','产品规格','产品单价','产品数量'];
  666. return $this->saveExportData($return,$header);
  667. }
  668. public function saveExportData($data, $headers, $type = 'default',$file_name = ''){
  669. if(empty($file_name)) $file_name = self::$filename . "_". date("Y-m-d") . "_". rand(1000,9999);
  670. $filename = $file_name . '.' . 'xlsx';
  671. $bool = Excel::store(new ExportOrder($data,$type,$headers),"/public/export/{$filename}", null, 'Xlsx', []);
  672. return $filename;
  673. }
  674. }