OrderExport.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com
  8. * =========================================================
  9. */
  10. namespace app\model\order;
  11. use app\model\BaseModel;
  12. use app\model\store\Store as StoreModel;
  13. use think\facade\Db;
  14. /**
  15. * 订单导出
  16. * @author Administrator
  17. */
  18. class OrderExport extends BaseModel
  19. {
  20. public $order_field = [
  21. 'order_no' => '订单编号',
  22. 'site_name' => '店铺名称',
  23. 'order_name' => '订单内容',
  24. 'order_from_name' => '订单来源',
  25. 'order_type_name' => '订单类型',
  26. 'order_promotion_name' => '营销活动类型',
  27. 'out_trade_no' => '支付流水号',
  28. 'out_trade_no_2' => '支付流水号(多次支付)',
  29. 'delivery_code' => '整体提货编码',
  30. 'order_status_name' => '订单状态',
  31. 'pay_status' => '支付状态',
  32. 'delivery_status' => '配送状态',
  33. 'pay_type_name' => '支付方式',
  34. 'order_goods_number'=>'订单商品数量',
  35. 'delivery_type_name' => '配送方式',
  36. 'nickname' => '购买人',
  37. 'name' => '客户姓名',
  38. 'mobile' => '客户手机',
  39. 'telephone' => '客户固定电话',
  40. 'province_name' => '省',
  41. 'city_name' => '市',
  42. 'district_name' => '县',
  43. 'full_address' => '详细地址',
  44. 'buyer_ip' => '客户ip',
  45. 'buyer_ask_delivery_time' => '客户要求配送时间',
  46. 'buyer_message' => '客户留言信息',
  47. 'goods_money' => '商品总金额',
  48. 'delivery_money' => '配送费用',
  49. 'promotion_money' => '订单优惠金额',
  50. 'coupon_money' => '优惠券金额',
  51. 'order_money' => '订单合计金额',
  52. 'adjust_money' => '订单调整金额',
  53. 'balance_money' => '余额支付金额',
  54. 'pay_money' => '抵扣之后应付金额',
  55. 'refund_money' => '订单退款金额',
  56. 'true_get_money'=>'实际收款',
  57. 'pay_time' => '支付时间',
  58. 'delivery_time' => '配送时间',
  59. 'sign_time' => '签收时间',
  60. 'finish_time' => '完成时间',
  61. 'remark' => '卖家留言',
  62. 'goods_num' => '商品件数',
  63. 'delivery_status_name' => '发货状态',
  64. 'is_settlement' => '是否进行结算',
  65. 'delivery_store_name' => '门店名称',
  66. 'promotion_type_name' => '营销类型',
  67. 'form_data' => '表单数据'
  68. ];
  69. //订单商品信息
  70. public $order_goods_field = [
  71. 'sku_name' => '商品名称',
  72. 'sku_no' => '商品编码',
  73. 'goods_class_name' => '商品类型',
  74. 'price' => '商品卖价',
  75. 'cost_price' => '成本价',
  76. 'num' => '购买数量',
  77. 'goods_money' => '商品总价',
  78. 'cost_money' => '成本总价',
  79. 'delivery_status_name' => '配送状态',
  80. 'delivery_no' => '配送单号',
  81. 'refund_status_name' => '退款状态',
  82. 'refund_no' => '退款编号',
  83. 'refund_type' => '退货方式',
  84. 'refund_apply_money' => '退款申请金额',
  85. 'refund_reason' => '退款原因',
  86. 'refund_real_money' => '实际退款金额',
  87. 'refund_delivery_name' => '退款公司名称',
  88. 'refund_delivery_no' => '退款单号',
  89. 'refund_time' => '实际退款时间',
  90. 'refund_refuse_reason' => '退款拒绝原因',
  91. 'refund_action_time' => '申请退款时间',
  92. 'real_goods_money' => '实际商品购买价',
  93. 'refund_remark' => '退款说明',
  94. 'refund_delivery_remark' => '买家退货说明',
  95. 'refund_address' => '退货地址',
  96. 'is_refund_stock' => '是否返还库存',
  97. 'form_data' => '表单数据'
  98. ];
  99. public $define_data = [
  100. 'pay_status' => [ 'type' => 2, 'data' => [ '未支付', '已支付' ] ],//支付状态
  101. 'delivery_status' => [ 'type' => 2, 'data' => [ '待发货', '已发货', '已收货' ] ],//配送状态
  102. 'refund_status' => [ 'type' => 2, 'data' => [ '未退款', '已退款' ] ],//退款状态
  103. // 'buyer_ask_delivery_time' => [ 'type' => 1 ],//购买人要求配送时间
  104. 'pay_time' => [ 'type' => 1 ],//支付时间
  105. 'delivery_time' => [ 'type' => 1 ],//订单配送时间
  106. 'sign_time' => [ 'type' => 1 ],//订单签收时间
  107. 'finish_time' => [ 'type' => 1 ],//订单完成时间
  108. 'refund_time' => [ 'type' => 1 ],//退款到账时间
  109. 'refund_action_time' => [ 'type' => 1 ],//实际退款时间
  110. 'is_settlement' => [ 'type' => 2, 'data' => [ '否', '是' ] ],//是否进行结算
  111. 'refund_type' => [ 'type' => 2, 'data' => [ 1 => '仅退款', 2 => '退款退货' ] ],//退货方式
  112. 'is_refund_stock' => [ 'type' => 2, 'data' => [ '否', '是' ] ],//是否返还库存
  113. 'form_data' => [ 'type' => 3 ],//表单数据
  114. ];
  115. /**
  116. * 数据处理
  117. * @param $data
  118. * @param $field
  119. * @return array
  120. */
  121. public function handleData($data, $field)
  122. {
  123. $define_data = $this->define_data;
  124. foreach ($data as $k => $v) {
  125. //获取键
  126. $keys = array_keys($v);
  127. foreach ($keys as $key) {
  128. if (in_array($key, $field)) {
  129. if (array_key_exists($key, $define_data)) {
  130. $type = $define_data[ $key ][ 'type' ];
  131. switch ( $type ) {
  132. case 1:
  133. $data[ $k ][ $key ] = time_to_date((int) $v[ $key ]);
  134. break;
  135. case 2:
  136. $define_data_data = $define_data[ $key ][ 'data' ];
  137. $data[ $k ][ $key ] = !empty($v[ $key ]) ? $define_data_data[ $v[ $key ] ] : '';
  138. break;
  139. case 3:
  140. if (!empty($v[ $key ])) {
  141. $form_data = json_decode($v[ $key ], true);
  142. $form_content = '';
  143. if (is_array($form_data)) {
  144. foreach ($form_data as $item) {
  145. $form_content .= $item[ 'value' ][ 'title' ] . ':' . $item[ 'val' ] . ' ';
  146. }
  147. }
  148. $data[ $k ][ $key ] = $form_content;
  149. }
  150. break;
  151. }
  152. }
  153. }
  154. }
  155. }
  156. return $data;
  157. }
  158. /**
  159. * 查询订单项数据并导出
  160. * @param $condition
  161. * @param $condition_desc
  162. * @param $site_id
  163. * @param $join
  164. * @param $is_verify
  165. * @param $order_label
  166. * @return array
  167. */
  168. public function orderExport($condition, $condition_desc, $site_id, $join, $is_verify, $order_label,$user_id = 1)
  169. {
  170. try {
  171. //预先创建导出的记录
  172. $data = array (
  173. 'admin_user_id'=>$user_id,
  174. 'condition' => json_encode($condition_desc),
  175. 'create_time' => time(),
  176. 'type' => 1,//订单
  177. 'status' => 0,
  178. 'site_id' => $site_id
  179. );
  180. $records_result = $this->addExport($data);
  181. $export_id = $records_result[ 'data' ] ?? 0;
  182. if ($export_id <= 0) {
  183. return $this->error();
  184. }
  185. $alias = 'o';
  186. $field = $this->order_field;
  187. //通过分批次执行数据导出(防止内存超出配置设置的)
  188. set_time_limit(0);
  189. $file_name = date('YmdHis');//csv文件名
  190. $file_path = 'upload/order_csv/';
  191. if (dir_mkdir($file_path)) {
  192. $file_path = $file_path . $file_name . '.csv';
  193. //创建一个临时csv文件
  194. $fp = fopen($file_path, 'w'); //生成临时文件
  195. fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
  196. $field_value = [];
  197. $field_key = [];
  198. $field_key_array = [];
  199. //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
  200. foreach ($field as $k => $v) {
  201. $field_value[] = $v;
  202. $field_key[] = "{\$$k}";
  203. $field_key_array[] = $k;
  204. }
  205. $table_field = implode(',', $field_key_array);
  206. $order_table = Db::name('order')->where($condition)->alias($alias);
  207. if (!empty($join) || $is_verify != "all") {
  208. if (!empty($join) && $is_verify == "all") {
  209. $join = [
  210. [
  211. 'order_goods og',
  212. 'o.order_id = og.order_id',
  213. 'left'
  214. ],
  215. ];
  216. } else if ($is_verify != "all" && empty($join)) {
  217. $join = [
  218. [
  219. 'verify v',
  220. 'v.verify_code = o.virtual_code',
  221. 'left'
  222. ],
  223. ];
  224. } else {
  225. $join = [
  226. [
  227. 'order_goods og',
  228. 'o.order_id = og.order_id',
  229. 'left'
  230. ],
  231. [
  232. 'verify v',
  233. 'v.verify_code = o.virtual_code',
  234. 'left'
  235. ]
  236. ];
  237. }
  238. }
  239. $join[] = [
  240. 'member m',
  241. 'm.member_id = o.member_id',
  242. 'left'
  243. ];
  244. $join[] = [
  245. 'form_data fm',
  246. "fm.relation_id = o.order_id and scene = 'order'",
  247. 'left'
  248. ];
  249. $order_table = $this->parseJoin($order_table, $join);
  250. $first_line = implode(',', $field_value);
  251. //写入第一行表头
  252. fwrite($fp, $first_line . "\n");
  253. $temp_line = implode(',', $field_key) . "\n";
  254. $table_field = 'o.*,m.nickname,fm.form_data';
  255. $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
  256. //写入导出信息
  257. // dump($item_list);die;
  258. $m = $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
  259. // dump($m);die;
  260. unset($item_list);
  261. }, 'o.order_id');
  262. $order_table->removeOption();
  263. fclose($fp); //每生成一个文件关闭
  264. unset($order_table);
  265. //将同步导出记录状态
  266. $records_data = array (
  267. 'path' => $file_path,
  268. 'status' => 1
  269. );
  270. $records_condition = array (
  271. [ 'export_id', '=', $export_id ]
  272. );
  273. $this->editExport($records_data, $records_condition);
  274. return $this->success();
  275. } else {
  276. return $this->error();
  277. }
  278. } catch (\Exception $e) {
  279. return $this->error([], $e->getMessage() . $e->getFile() . $e->getLine());
  280. }
  281. }
  282. /**
  283. * 查询订单项数据并导出
  284. * @param $condition
  285. * @param $condition_desc
  286. * @param $site_id
  287. * @param $is_verify
  288. * @param $order_label
  289. * @return array
  290. */
  291. public function orderGoodsExport($condition, $condition_desc, $site_id, $is_verify, $order_label,$uid = 1)
  292. {
  293. try {
  294. //预先创建导出的记录
  295. $data = array (
  296. 'admin_user_id' => $uid,
  297. 'condition' => json_encode($condition_desc),
  298. 'create_time' => time(),
  299. 'type' => 2,//订单项
  300. 'status' => 0,
  301. 'site_id' => $site_id
  302. );
  303. $records_result = $this->addExport($data);
  304. $export_id = $records_result[ 'data' ] ?? 0;
  305. if ($export_id <= 0) {
  306. return $this->error();
  307. }
  308. $alias = 'og';
  309. $join = [
  310. [
  311. 'order o',
  312. 'o.order_id = og.order_id',
  313. 'left'
  314. ]
  315. ];
  316. if ($is_verify != "all") {
  317. $join = [
  318. [
  319. 'order o',
  320. 'o.order_id = og.order_id',
  321. 'left'
  322. ],
  323. [
  324. 'verify v',
  325. 'v.verify_code = o.virtual_code',
  326. 'left'
  327. ]
  328. ];
  329. }
  330. $join[] = [
  331. 'member m',
  332. 'm.member_id = og.member_id',
  333. 'left'
  334. ];
  335. $join[] = [
  336. 'form_data fm',
  337. "fm.relation_id = og.order_goods_id and scene = 'goods'",
  338. 'left'
  339. ];
  340. $order_field = 'o.order_no,o.site_name,o.order_name,o.order_from_name,o.order_type_name,o.order_promotion_name,o.out_trade_no,o.out_trade_no_2,o.delivery_code,o.order_status_name,o.pay_status,o.delivery_status,o.refund_status,o.pay_type_name,o.delivery_type_name,o.name,o.mobile,o.telephone,o.full_address,o.buyer_ip,o.buyer_ask_delivery_time,o.buyer_message,o.goods_money,o.delivery_money,o.promotion_money,o.coupon_money,o.order_money,o.adjust_money,o.balance_money,o.pay_money,o.refund_money,o.pay_time,o.delivery_time,o.sign_time,o.finish_time,o.remark,o.goods_num,o.delivery_status_name,o.is_settlement,o.delivery_store_name,o.store_id,o.promotion_type_name,o.address,m.nickname';
  341. $order_goods_field = 'og.order_goods_id,og.sku_name,og.sku_no,og.is_virtual,og.goods_class_name,og.price,og.cost_price,og.num,og.goods_money,og.cost_money,og.delivery_no,og.refund_no,og.refund_type,og.refund_apply_money,og.refund_reason,og.refund_real_money,og.refund_delivery_name,og.refund_delivery_no,og.refund_time,og.refund_refuse_reason,og.refund_action_time,og.real_goods_money,og.refund_remark,og.refund_delivery_remark,og.refund_address,og.is_refund_stock,og.refund_status_name,fm.form_data';
  342. $table_field = $order_field . ',' . $order_goods_field;
  343. $order_table = Db::name('order_goods')->where($condition)->alias($alias);
  344. $order_table = $this->parseJoin($order_table, $join);
  345. $field = array_merge($this->order_goods_field, $this->order_field);
  346. //通过分批次执行数据导出(防止内存超出配置设置的)
  347. set_time_limit(0);
  348. $file_name = date('YmdHis');//csv文件名
  349. $file_path = 'upload/order_csv/';
  350. if (dir_mkdir($file_path)) {
  351. //创建一个临时csv文件
  352. $file_path = $file_path . $file_name . '.csv';
  353. $fp = fopen($file_path, 'w'); //生成临时文件
  354. fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
  355. $field_value = [];
  356. $field_key = [];
  357. $field_key_array = [];
  358. //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
  359. foreach ($field as $k => $v) {
  360. $field_value[] = $v;
  361. $field_key[] = "{\$$k}";
  362. $field_key_array[] = $k;
  363. }
  364. $first_line = implode(',', $field_value);
  365. //写入第一行表头
  366. fwrite($fp, $first_line . "\n");
  367. $temp_line = implode(',', $field_key) . "\n";
  368. $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
  369. //写入导出信息
  370. // dump($item_list);
  371. $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
  372. unset($item_list);
  373. });
  374. $order_table->removeOption();
  375. fclose($fp); //每生成一个文件关闭
  376. unset($order_table);
  377. //将同步导出记录状态
  378. $records_data = array (
  379. 'path' => $file_path,
  380. 'status' => 1
  381. );
  382. $records_condition = array (
  383. [ 'export_id', '=', $export_id ]
  384. );
  385. $this->editExport($records_data, $records_condition);
  386. return $this->success();
  387. } else {
  388. return $this->error();
  389. }
  390. } catch (\Exception $e) {
  391. return $this->error([], $e->getMessage() . $e->getLine());
  392. }
  393. }
  394. /**
  395. * 查询订单项数据并导出
  396. * @param $condition
  397. * @param $condition_desc
  398. * @param int $site_id
  399. * @return array
  400. */
  401. public function orderRefundExport($condition, $condition_desc, $site_id = 0)
  402. {
  403. try {
  404. //预先创建导出的记录
  405. $data = array (
  406. 'condition' => json_encode($condition_desc),
  407. 'create_time' => time(),
  408. 'status' => 0,
  409. 'site_id' => $site_id
  410. );
  411. $records_result = $this->addRefundExport($data);
  412. $export_id = $records_result[ 'data' ] ?? 0;
  413. if ($export_id <= 0) {
  414. return $this->error();
  415. }
  416. $alias = 'og';
  417. $join = [
  418. [
  419. 'order o',
  420. 'o.order_id = og.order_id',
  421. 'left'
  422. ],
  423. [
  424. 'store s',
  425. 'o.store_id = s.id',
  426. 'left'
  427. ]
  428. ];
  429. $order_field = 'o.order_no,o.site_name,o.order_name,o.order_from_name,o.order_type_name,o.order_promotion_name,o.out_trade_no,o.out_trade_no_2,o.delivery_code,o.order_status_name,o.pay_status,o.delivery_status,o.refund_status,o.pay_type_name,o.delivery_type_name,o.name,o.mobile,o.telephone,o.full_address,o.buyer_ip,o.buyer_ask_delivery_time,o.buyer_message,o.goods_money,o.delivery_money,o.promotion_money,o.coupon_money,o.order_money,o.adjust_money,o.balance_money,o.pay_money,o.refund_money,o.pay_time,o.delivery_time,o.sign_time,o.finish_time,o.remark,o.goods_num,o.delivery_status_name,o.is_settlement,o.delivery_store_name,o.promotion_type_name,o.address';
  430. $order_goods_field = 'og.order_goods_id,og.sku_name,og.sku_no,og.is_virtual,og.goods_class_name,og.price,og.cost_price,og.num,og.goods_money,og.cost_money,og.delivery_no,og.refund_no,og.refund_type,og.refund_apply_money,og.refund_reason,og.refund_real_money,og.refund_delivery_name,og.refund_delivery_no,og.refund_time,og.refund_refuse_reason,og.refund_action_time,og.real_goods_money,og.refund_remark,og.refund_delivery_remark,og.refund_address,og.is_refund_stock,og.refund_status_name';
  431. $table_field = $order_field . ',' . $order_goods_field;
  432. $order_table = Db::name('order_goods')->where($condition)->alias($alias);
  433. $order_table = $this->parseJoin($order_table, $join);
  434. $field = array_merge($this->order_goods_field, $this->order_field);
  435. //通过分批次执行数据导出(防止内存超出配置设置的)
  436. set_time_limit(0);
  437. $file_name = date('YmdHis');//csv文件名
  438. $file_path = 'upload/order_csv/';
  439. if (dir_mkdir($file_path)) {
  440. $file_path = $file_path . $file_name . '.csv';
  441. //创建一个临时csv文件
  442. $fp = fopen($file_path, 'w'); //生成临时文件
  443. fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
  444. $field_value = [];
  445. $field_key = [];
  446. $field_key_array = [];
  447. //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
  448. foreach ($field as $k => $v) {
  449. $field_value[] = $v;
  450. $field_key[] = "{\$$k}";
  451. $field_key_array[] = $k;
  452. }
  453. $first_line = implode(',', $field_value);
  454. //写入第一行表头
  455. fwrite($fp, $first_line . "\n");
  456. $temp_line = implode(',', $field_key) . "\n";
  457. $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
  458. //写入导出信息
  459. $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
  460. unset($item_list);
  461. });
  462. $order_table->removeOption();
  463. fclose($fp); //每生成一个文件关闭
  464. unset($order_table);
  465. //将同步导出记录状态
  466. $records_data = array (
  467. 'path' => $file_path,
  468. 'status' => 1
  469. );
  470. $records_condition = array (
  471. [ 'export_id', '=', $export_id ]
  472. );
  473. $this->editRefundExport($records_data, $records_condition);
  474. return $this->success();
  475. } else {
  476. return $this->error();
  477. }
  478. } catch (\Exception $e) {
  479. return $this->error([], $e->getMessage() . $e->getLine());
  480. }
  481. }
  482. /**
  483. *
  484. * @param $db_obj
  485. * @param $join
  486. * @return mixed
  487. */
  488. public function parseJoin($db_obj, $join)
  489. {
  490. foreach ($join as $item) {
  491. list($table, $on, $type) = $item;
  492. $type = strtolower($type);
  493. switch ( $type ) {
  494. case "left":
  495. $db_obj = $db_obj->leftJoin($table, $on);
  496. break;
  497. case "inner":
  498. $db_obj = $db_obj->join($table, $on);
  499. break;
  500. case "right":
  501. $db_obj = $db_obj->rightjoin($table, $on);
  502. break;
  503. case "full":
  504. $db_obj = $db_obj->fulljoin($table, $on);
  505. break;
  506. default:
  507. break;
  508. }
  509. }
  510. return $db_obj;
  511. }
  512. /**
  513. * 给csv写入新的数据
  514. * @param $item_list
  515. * @param $field_key
  516. * @param $temp_line
  517. * @param $fp
  518. */
  519. public function itemExport($item_list, $field_key, $temp_line, $fp)
  520. {
  521. $item_list = $item_list->toArray();
  522. $item_list = $this->handleData($item_list, $field_key);
  523. foreach ($item_list as $k => $item_v) {
  524. $new_line_value = $temp_line;
  525. if (isset($item_v[ 'goods_num' ])) {
  526. $item_v[ 'goods_num' ] = numberFormat($item_v[ 'goods_num' ]);
  527. }
  528. if (isset($item_v[ 'num' ])) {
  529. $item_v[ 'num' ] = numberFormat($item_v[ 'num' ]);
  530. }
  531. //省市县
  532. $address_arr = explode("-", $item_v[ 'full_address' ]);
  533. $item_v[ 'province_name' ] = !empty($address_arr[ 0 ]) ? $address_arr[ 0 ] : "";
  534. $item_v[ 'city_name' ] = !empty($address_arr[ 1 ]) ? $address_arr[ 1 ] : "";
  535. $item_v[ 'district_name' ] = !empty($address_arr[ 2 ]) ? $address_arr[ 2 ] : "";
  536. if(isset($item_v['store_id'])){
  537. $store_info = Db::name('store')->where('store_id = '.$item_v['store_id'])->find() ;
  538. $store_name = '';
  539. if($store_info){
  540. $store_name = $store_info['store_name'];
  541. }
  542. $item_v['delivery_store_name'] = $store_name;
  543. $item_v['site_name'] = $store_name;
  544. }
  545. $ogwhere['order_id'] = $item_v['order_id'];
  546. $order_goods_number = Db::name('order_goods')->where($ogwhere)->count('num');
  547. $item_v['order_goods_number'] = $order_goods_number;
  548. //true_get_money = goods_money - promotion_money -refund_money
  549. $item_v['true_get_money'] = $item_v['goods_money'] - $item_v['promotion_money'] - $item_v['refund_money'];
  550. foreach ($item_v as $key => $value) {
  551. $value = trim($value);
  552. if ($key == 'full_address') {
  553. $address = $item_v[ 'address' ] ?? '';
  554. $value = $value . $address;
  555. }
  556. //CSV比较简单,记得转义 逗号就好
  557. $values = str_replace(',', '\\', $value . "\t");
  558. $values = str_replace("\n", '', $values);
  559. $values = str_replace("\r", '', $values);
  560. $new_line_value = str_replace("{\$$key}", $values, $new_line_value);
  561. }
  562. //写入第一行表头
  563. fwrite($fp, $new_line_value);
  564. //销毁变量, 防止内存溢出
  565. unset($new_line_value);
  566. }
  567. }
  568. /**
  569. * 添加导出记录
  570. * @param $data
  571. * @return array
  572. */
  573. public function addExport($data)
  574. {
  575. $res = model("order_export")->add($data);
  576. return $this->success($res);
  577. }
  578. /**
  579. * 更新导出记录
  580. * @param $data
  581. * @param $condition
  582. * @return array
  583. */
  584. public function editExport($data, $condition)
  585. {
  586. $res = model("order_export")->update($data, $condition);
  587. return $this->success($res);
  588. }
  589. /**
  590. * 删除导出记录
  591. * @param $condition
  592. * @return array
  593. */
  594. public function deleteExport($condition)
  595. {
  596. //先查询数据
  597. $list = model("order_export")->getList($condition, '*');
  598. if (!empty($list)) {
  599. foreach ($list as $k => $v) {
  600. if (file_exists($v[ 'path' ])) {
  601. //删除物理文件路径
  602. if (!unlink($v[ 'path' ])) {
  603. //失败
  604. } else {
  605. //成功
  606. }
  607. }
  608. }
  609. $res = model("order_export")->delete($condition);
  610. }
  611. return $this->success($res);
  612. }
  613. /**
  614. * 获取导出记录
  615. * @param $condition
  616. * @param string $field
  617. * @param string $order
  618. * @return array
  619. */
  620. public function getExport($condition, $field = "*", $order = '')
  621. {
  622. $list = model("order_export")->getList($condition, $field, $order);
  623. return $this->success($list);
  624. }
  625. /**
  626. * 导出记录
  627. * @param array $condition
  628. * @param int $page
  629. * @param int $page_size
  630. * @param string $order
  631. * @param string $field
  632. * @return array
  633. */
  634. public function getExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
  635. {
  636. $list = model('order_export')->pageList($condition, $field, $order, $page, $page_size);
  637. return $this->success($list);
  638. }
  639. /**
  640. * 添加导出记录
  641. * @param $data
  642. * @return array
  643. */
  644. public function addRefundExport($data)
  645. {
  646. $res = model("order_refund_export")->add($data);
  647. return $this->success($res);
  648. }
  649. /**
  650. * 更新导出记录
  651. * @param $data
  652. * @return array
  653. */
  654. public function editRefundExport($data, $condition)
  655. {
  656. $res = model("order_refund_export")->update($data, $condition);
  657. return $this->success($res);
  658. }
  659. /**
  660. * 删除导出记录
  661. * @param $data
  662. * @return array
  663. */
  664. public function deleteRefundExport($condition)
  665. {
  666. $res = model("order_refund_export")->delete($condition);
  667. return $this->success($res);
  668. }
  669. /**
  670. * 获取导出记录
  671. * @param $member_id
  672. * @return array
  673. */
  674. public function getRefundExport($condition, $field = "*", $order = '')
  675. {
  676. $list = model("order_refund_export")->getList($condition, $field, $order);
  677. return $this->success($list);
  678. }
  679. /**
  680. * 导出记录
  681. * @param array $condition
  682. * @param int $page
  683. * @param int $page_size
  684. * @param string $order
  685. * @param string $field
  686. * @return array
  687. */
  688. public function getRefundExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
  689. {
  690. $list = model('order_refund_export')->pageList($condition, $field, $order, $page, $page_size);
  691. return $this->success($list);
  692. }
  693. }