OrderExport0626.php 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  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)
  169. {
  170. try {
  171. //预先创建导出的记录
  172. $data = array (
  173. 'condition' => json_encode($condition_desc),
  174. 'create_time' => time(),
  175. 'type' => 1,//订单
  176. 'status' => 0,
  177. 'site_id' => $site_id
  178. );
  179. $records_result = $this->addExport($data);
  180. $export_id = $records_result[ 'data' ] ?? 0;
  181. if ($export_id <= 0) {
  182. return $this->error();
  183. }
  184. $alias = 'o';
  185. $field = $this->order_field;
  186. //通过分批次执行数据导出(防止内存超出配置设置的)
  187. set_time_limit(0);
  188. $file_name = date('YmdHis');//csv文件名
  189. $file_path = 'upload/order_csv/';
  190. if (dir_mkdir($file_path)) {
  191. $file_path = $file_path . $file_name . '.csv';
  192. //创建一个临时csv文件
  193. $fp = fopen($file_path, 'w'); //生成临时文件
  194. fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
  195. $field_value = [];
  196. $field_key = [];
  197. $field_key_array = [];
  198. //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
  199. foreach ($field as $k => $v) {
  200. $field_value[] = $v;
  201. $field_key[] = "{\$$k}";
  202. $field_key_array[] = $k;
  203. }
  204. $table_field = implode(',', $field_key_array);
  205. $order_table = Db::name('order')->where($condition)->alias($alias);
  206. if (!empty($join) || $is_verify != "all") {
  207. if (!empty($join) && $is_verify == "all") {
  208. $join = [
  209. [
  210. 'order_goods og',
  211. 'o.order_id = og.order_id',
  212. 'left'
  213. ],
  214. ];
  215. } else if ($is_verify != "all" && empty($join)) {
  216. $join = [
  217. [
  218. 'verify v',
  219. 'v.verify_code = o.virtual_code',
  220. 'left'
  221. ],
  222. ];
  223. } else {
  224. $join = [
  225. [
  226. 'order_goods og',
  227. 'o.order_id = og.order_id',
  228. 'left'
  229. ],
  230. [
  231. 'verify v',
  232. 'v.verify_code = o.virtual_code',
  233. 'left'
  234. ]
  235. ];
  236. }
  237. }
  238. $join[] = [
  239. 'member m',
  240. 'm.member_id = o.member_id',
  241. 'left'
  242. ];
  243. $join[] = [
  244. 'form_data fm',
  245. "fm.relation_id = o.order_id and scene = 'order'",
  246. 'left'
  247. ];
  248. $order_table = $this->parseJoin($order_table, $join);
  249. $first_line = implode(',', $field_value);
  250. //写入第一行表头
  251. fwrite($fp, $first_line . "\n");
  252. $temp_line = implode(',', $field_key) . "\n";
  253. $table_field = 'o.*,m.nickname,fm.form_data';
  254. $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
  255. //写入导出信息
  256. // dump($item_list);die;
  257. $m = $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
  258. // dump($m);die;
  259. unset($item_list);
  260. }, 'o.order_id');
  261. $order_table->removeOption();
  262. fclose($fp); //每生成一个文件关闭
  263. unset($order_table);
  264. //将同步导出记录状态
  265. $records_data = array (
  266. 'path' => $file_path,
  267. 'status' => 1
  268. );
  269. $records_condition = array (
  270. [ 'export_id', '=', $export_id ]
  271. );
  272. $this->editExport($records_data, $records_condition);
  273. return $this->success();
  274. } else {
  275. return $this->error();
  276. }
  277. } catch (\Exception $e) {
  278. return $this->error([], $e->getMessage() . $e->getFile() . $e->getLine());
  279. }
  280. }
  281. /**
  282. * 查询订单项数据并导出
  283. * @param $condition
  284. * @param $condition_desc
  285. * @param $site_id
  286. * @param $is_verify
  287. * @param $order_label
  288. * @return array
  289. */
  290. public function orderGoodsExport($condition, $condition_desc, $site_id, $is_verify, $order_label)
  291. {
  292. try {
  293. //预先创建导出的记录
  294. $data = array (
  295. 'condition' => json_encode($condition_desc),
  296. 'create_time' => time(),
  297. 'type' => 2,//订单项
  298. 'status' => 0,
  299. 'site_id' => $site_id
  300. );
  301. $records_result = $this->addExport($data);
  302. $export_id = $records_result[ 'data' ] ?? 0;
  303. if ($export_id <= 0) {
  304. return $this->error();
  305. }
  306. $alias = 'og';
  307. $join = [
  308. [
  309. 'order o',
  310. 'o.order_id = og.order_id',
  311. 'left'
  312. ]
  313. ];
  314. if ($is_verify != "all") {
  315. $join = [
  316. [
  317. 'order o',
  318. 'o.order_id = og.order_id',
  319. 'left'
  320. ],
  321. [
  322. 'verify v',
  323. 'v.verify_code = o.virtual_code',
  324. 'left'
  325. ]
  326. ];
  327. }
  328. $join[] = [
  329. 'member m',
  330. 'm.member_id = og.member_id',
  331. 'left'
  332. ];
  333. $join[] = [
  334. 'form_data fm',
  335. "fm.relation_id = og.order_goods_id and scene = 'goods'",
  336. 'left'
  337. ];
  338. $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';
  339. $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';
  340. $table_field = $order_field . ',' . $order_goods_field;
  341. $order_table = Db::name('order_goods')->where($condition)->alias($alias);
  342. $order_table = $this->parseJoin($order_table, $join);
  343. $field = array_merge($this->order_goods_field, $this->order_field);
  344. //通过分批次执行数据导出(防止内存超出配置设置的)
  345. set_time_limit(0);
  346. $file_name = date('YmdHis');//csv文件名
  347. $file_path = 'upload/order_csv/';
  348. if (dir_mkdir($file_path)) {
  349. //创建一个临时csv文件
  350. $file_path = $file_path . $file_name . '.csv';
  351. $fp = fopen($file_path, 'w'); //生成临时文件
  352. fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
  353. $field_value = [];
  354. $field_key = [];
  355. $field_key_array = [];
  356. //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
  357. foreach ($field as $k => $v) {
  358. $field_value[] = $v;
  359. $field_key[] = "{\$$k}";
  360. $field_key_array[] = $k;
  361. }
  362. $first_line = implode(',', $field_value);
  363. //写入第一行表头
  364. fwrite($fp, $first_line . "\n");
  365. $temp_line = implode(',', $field_key) . "\n";
  366. $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
  367. //写入导出信息
  368. // dump($item_list);
  369. $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
  370. unset($item_list);
  371. });
  372. $order_table->removeOption();
  373. fclose($fp); //每生成一个文件关闭
  374. unset($order_table);
  375. //将同步导出记录状态
  376. $records_data = array (
  377. 'path' => $file_path,
  378. 'status' => 1
  379. );
  380. $records_condition = array (
  381. [ 'export_id', '=', $export_id ]
  382. );
  383. $this->editExport($records_data, $records_condition);
  384. return $this->success();
  385. } else {
  386. return $this->error();
  387. }
  388. } catch (\Exception $e) {
  389. return $this->error([], $e->getMessage() . $e->getLine());
  390. }
  391. }
  392. /**
  393. * 查询订单项数据并导出
  394. * @param $condition
  395. * @param $condition_desc
  396. * @param int $site_id
  397. * @return array
  398. */
  399. public function orderRefundExport($condition, $condition_desc, $site_id = 0)
  400. {
  401. try {
  402. //预先创建导出的记录
  403. $data = array (
  404. 'condition' => json_encode($condition_desc),
  405. 'create_time' => time(),
  406. 'status' => 0,
  407. 'site_id' => $site_id
  408. );
  409. $records_result = $this->addRefundExport($data);
  410. $export_id = $records_result[ 'data' ] ?? 0;
  411. if ($export_id <= 0) {
  412. return $this->error();
  413. }
  414. $alias = 'og';
  415. $join = [
  416. [
  417. 'order o',
  418. 'o.order_id = og.order_id',
  419. 'left'
  420. ],
  421. [
  422. 'store s',
  423. 'o.store_id = s.id',
  424. 'left'
  425. ]
  426. ];
  427. $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';
  428. $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';
  429. $table_field = $order_field . ',' . $order_goods_field;
  430. $order_table = Db::name('order_goods')->where($condition)->alias($alias);
  431. $order_table = $this->parseJoin($order_table, $join);
  432. $field = array_merge($this->order_goods_field, $this->order_field);
  433. //通过分批次执行数据导出(防止内存超出配置设置的)
  434. set_time_limit(0);
  435. $file_name = date('YmdHis');//csv文件名
  436. $file_path = 'upload/order_csv/';
  437. if (dir_mkdir($file_path)) {
  438. $file_path = $file_path . $file_name . '.csv';
  439. //创建一个临时csv文件
  440. $fp = fopen($file_path, 'w'); //生成临时文件
  441. fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF)); // 添加 BOM
  442. $field_value = [];
  443. $field_key = [];
  444. $field_key_array = [];
  445. //为了防止部分代码被筛选中替换, 给变量前后两边增加字符串
  446. foreach ($field as $k => $v) {
  447. $field_value[] = $v;
  448. $field_key[] = "{\$$k}";
  449. $field_key_array[] = $k;
  450. }
  451. $first_line = implode(',', $field_value);
  452. //写入第一行表头
  453. fwrite($fp, $first_line . "\n");
  454. $temp_line = implode(',', $field_key) . "\n";
  455. $order_table->field($table_field)->chunk(5000, function($item_list) use ($fp, $temp_line, $field_key_array) {
  456. //写入导出信息
  457. $this->itemExport($item_list, $field_key_array, $temp_line, $fp);
  458. unset($item_list);
  459. });
  460. $order_table->removeOption();
  461. fclose($fp); //每生成一个文件关闭
  462. unset($order_table);
  463. //将同步导出记录状态
  464. $records_data = array (
  465. 'path' => $file_path,
  466. 'status' => 1
  467. );
  468. $records_condition = array (
  469. [ 'export_id', '=', $export_id ]
  470. );
  471. $this->editRefundExport($records_data, $records_condition);
  472. return $this->success();
  473. } else {
  474. return $this->error();
  475. }
  476. } catch (\Exception $e) {
  477. return $this->error([], $e->getMessage() . $e->getLine());
  478. }
  479. }
  480. /**
  481. *
  482. * @param $db_obj
  483. * @param $join
  484. * @return mixed
  485. */
  486. public function parseJoin($db_obj, $join)
  487. {
  488. foreach ($join as $item) {
  489. list($table, $on, $type) = $item;
  490. $type = strtolower($type);
  491. switch ( $type ) {
  492. case "left":
  493. $db_obj = $db_obj->leftJoin($table, $on);
  494. break;
  495. case "inner":
  496. $db_obj = $db_obj->join($table, $on);
  497. break;
  498. case "right":
  499. $db_obj = $db_obj->rightjoin($table, $on);
  500. break;
  501. case "full":
  502. $db_obj = $db_obj->fulljoin($table, $on);
  503. break;
  504. default:
  505. break;
  506. }
  507. }
  508. return $db_obj;
  509. }
  510. /**
  511. * 给csv写入新的数据
  512. * @param $item_list
  513. * @param $field_key
  514. * @param $temp_line
  515. * @param $fp
  516. */
  517. public function itemExport($item_list, $field_key, $temp_line, $fp)
  518. {
  519. $item_list = $item_list->toArray();
  520. $item_list = $this->handleData($item_list, $field_key);
  521. foreach ($item_list as $k => $item_v) {
  522. $new_line_value = $temp_line;
  523. if (isset($item_v[ 'goods_num' ])) {
  524. $item_v[ 'goods_num' ] = numberFormat($item_v[ 'goods_num' ]);
  525. }
  526. if (isset($item_v[ 'num' ])) {
  527. $item_v[ 'num' ] = numberFormat($item_v[ 'num' ]);
  528. }
  529. //省市县
  530. $address_arr = explode("-", $item_v[ 'full_address' ]);
  531. $item_v[ 'province_name' ] = !empty($address_arr[ 0 ]) ? $address_arr[ 0 ] : "";
  532. $item_v[ 'city_name' ] = !empty($address_arr[ 1 ]) ? $address_arr[ 1 ] : "";
  533. $item_v[ 'district_name' ] = !empty($address_arr[ 2 ]) ? $address_arr[ 2 ] : "";
  534. if(isset($item_v['store_id'])){
  535. $store_info = Db::name('store')->where('store_id = '.$item_v['store_id'])->find() ;
  536. $store_name = '';
  537. if($store_info){
  538. $store_name = $store_info['store_name'];
  539. }
  540. $item_v['delivery_store_name'] = $store_name;
  541. $item_v['site_name'] = $store_name;
  542. }
  543. $ogwhere['order_id'] = $item_v['order_id'];
  544. $order_goods_number = Db::name('order_goods')->where($ogwhere)->count('num');
  545. $item_v['order_goods_number'] = $order_goods_number;
  546. //true_get_money = goods_money - promotion_money -refund_money
  547. $item_v['true_get_money'] = $item_v['goods_money'] - $item_v['promotion_money'] - $item_v['refund_money'];
  548. foreach ($item_v as $key => $value) {
  549. $value = trim($value);
  550. if ($key == 'full_address') {
  551. $address = $item_v[ 'address' ] ?? '';
  552. $value = $value . $address;
  553. }
  554. //CSV比较简单,记得转义 逗号就好
  555. $values = str_replace(',', '\\', $value . "\t");
  556. $values = str_replace("\n", '', $values);
  557. $values = str_replace("\r", '', $values);
  558. $new_line_value = str_replace("{\$$key}", $values, $new_line_value);
  559. }
  560. //写入第一行表头
  561. fwrite($fp, $new_line_value);
  562. //销毁变量, 防止内存溢出
  563. unset($new_line_value);
  564. }
  565. }
  566. /**
  567. * 添加导出记录
  568. * @param $data
  569. * @return array
  570. */
  571. public function addExport($data)
  572. {
  573. $res = model("order_export")->add($data);
  574. return $this->success($res);
  575. }
  576. /**
  577. * 更新导出记录
  578. * @param $data
  579. * @param $condition
  580. * @return array
  581. */
  582. public function editExport($data, $condition)
  583. {
  584. $res = model("order_export")->update($data, $condition);
  585. return $this->success($res);
  586. }
  587. /**
  588. * 删除导出记录
  589. * @param $condition
  590. * @return array
  591. */
  592. public function deleteExport($condition)
  593. {
  594. //先查询数据
  595. $list = model("order_export")->getList($condition, '*');
  596. if (!empty($list)) {
  597. foreach ($list as $k => $v) {
  598. if (file_exists($v[ 'path' ])) {
  599. //删除物理文件路径
  600. if (!unlink($v[ 'path' ])) {
  601. //失败
  602. } else {
  603. //成功
  604. }
  605. }
  606. }
  607. $res = model("order_export")->delete($condition);
  608. }
  609. return $this->success($res);
  610. }
  611. /**
  612. * 获取导出记录
  613. * @param $condition
  614. * @param string $field
  615. * @param string $order
  616. * @return array
  617. */
  618. public function getExport($condition, $field = "*", $order = '')
  619. {
  620. $list = model("order_export")->getList($condition, $field, $order);
  621. return $this->success($list);
  622. }
  623. /**
  624. * 导出记录
  625. * @param array $condition
  626. * @param int $page
  627. * @param int $page_size
  628. * @param string $order
  629. * @param string $field
  630. * @return array
  631. */
  632. public function getExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
  633. {
  634. $list = model('order_export')->pageList($condition, $field, $order, $page, $page_size);
  635. return $this->success($list);
  636. }
  637. /**
  638. * 添加导出记录
  639. * @param $data
  640. * @return array
  641. */
  642. public function addRefundExport($data)
  643. {
  644. $res = model("order_refund_export")->add($data);
  645. return $this->success($res);
  646. }
  647. /**
  648. * 更新导出记录
  649. * @param $data
  650. * @return array
  651. */
  652. public function editRefundExport($data, $condition)
  653. {
  654. $res = model("order_refund_export")->update($data, $condition);
  655. return $this->success($res);
  656. }
  657. /**
  658. * 删除导出记录
  659. * @param $data
  660. * @return array
  661. */
  662. public function deleteRefundExport($condition)
  663. {
  664. $res = model("order_refund_export")->delete($condition);
  665. return $this->success($res);
  666. }
  667. /**
  668. * 获取导出记录
  669. * @param $member_id
  670. * @return array
  671. */
  672. public function getRefundExport($condition, $field = "*", $order = '')
  673. {
  674. $list = model("order_refund_export")->getList($condition, $field, $order);
  675. return $this->success($list);
  676. }
  677. /**
  678. * 导出记录
  679. * @param array $condition
  680. * @param int $page
  681. * @param int $page_size
  682. * @param string $order
  683. * @param string $field
  684. * @return array
  685. */
  686. public function getRefundExportPageList($condition = [], $page = 1, $page_size = PAGE_LIST_ROWS, $order = '', $field = '*')
  687. {
  688. $list = model('order_refund_export')->pageList($condition, $field, $order, $page, $page_size);
  689. return $this->success($list);
  690. }
  691. }