OrderExport0430.php 28 KB

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