ExcelService.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. <?php
  2. /**
  3. * @package merchant
  4. * @Author: Qinii
  5. * @Date: 2020/7/28
  6. */
  7. namespace crmeb\services;
  8. use app\common\repositories\store\order\StoreOrderRepository;
  9. use app\common\repositories\store\ExcelRepository;
  10. use app\common\repositories\store\order\StoreRefundOrderRepository;
  11. use app\common\repositories\system\merchant\FinancialRecordRepository;
  12. use think\Exception;
  13. class ExcelService
  14. {
  15. public function getAll($data)
  16. {
  17. $this->{$data['type']}($data['where'],$data['excel_id']);
  18. }
  19. public function export($header, $title_arr, $export = [],$path, $filename = '', $id,$suffix = 'xlsx')
  20. {
  21. $title = isset($title_arr[0]) && !empty($title_arr[0]) ? $title_arr[0] : '导出数据';
  22. $name = isset($title_arr[1]) && !empty($title_arr[1]) ? $title_arr[1] : '导出数据';
  23. $info = isset($title_arr[2]) && !empty($title_arr[2]) ? $title_arr[2] : date('Y-m-d H:i:s', time());
  24. try{
  25. $_path = SpreadsheetExcelService::instance_xin()
  26. ->createOrActive()
  27. ->setExcelHeader($header)
  28. ->setExcelTile($title, $name, $info)
  29. ->setExcelContent($export)
  30. ->excelSave($filename, $suffix, $path);
  31. $dir=app()->getRootPath() . 'public' ;
  32. $img=$dir.'/'.$_path;
  33. $upload = UploadService::create();
  34. $time = date('Y-m-d');
  35. $osspath = "chuxubao/phpexcel/" . $time . '/'.$filename.'.xlsx';
  36. $data = $upload->stream(file_get_contents($img),$osspath);
  37. if ($data === false) {
  38. return app('json')->fail($upload->getError());
  39. }
  40. $res = $upload->getUploadInfo();
  41. $_path2=$res['thumb_path'];
  42. app()->make(ExcelRepository::class)->update($id,[
  43. 'name' => $filename.'.'.$suffix,
  44. 'status' => 1,
  45. // 'path' => '/'.$_path
  46. 'path' => $_path2
  47. ]);
  48. }catch (Exception $exception){
  49. app()->make(ExcelRepository::class)->update($id,[
  50. 'name' => $filename.'.'.$suffix,
  51. 'status' => 2,
  52. 'message' => $exception->getMessage()
  53. ]);
  54. }
  55. }
  56. /**
  57. * TODO 导出订单
  58. * @param array $where
  59. * @param int $id
  60. * @author Qinii
  61. * @day 2020-08-10
  62. */
  63. public function order(array $export,int $id)
  64. {
  65. // $make = app()->make(StoreOrderRepository::class);
  66. // var_dump($where);
  67. // $list=$make->merchantGetListYhc($where,1,10000);
  68. // var_dump($list);die;
  69. $header = [
  70. '序号','订单编号','收货人','手机号','商品信息','价格*数量','实际支付', '支付类型','支付方式','订单状态','下单时间','养老金','养老金状态',
  71. ];
  72. //
  73. //
  74. // $status = $where['status'];
  75. // $del = $where['mer_id'] > 0 ? 0 : null;
  76. // unset($where['status']);
  77. // $query = $make->search($where,$del)->where($make->getOrderType($status))->order('order_id ASC');
  78. //// $count = $query->count();
  79. // $list = $query->with([
  80. // 'orderProduct',
  81. // 'merchant' => function ($query) {return $query->field('mer_id,mer_name');},
  82. // 'user.spread'
  83. // ])->select()->toArray();
  84. // $export = $this->orderList($list);
  85. // $header = [
  86. // '序号','订单编号','订单类型','推广人','用户信息',
  87. // '商品名称','单商品总数','商品价格(元)','优惠','实付邮费(元)','实付金额(元)','已退款金额(元)',
  88. // '收货人','收货人电话','收货地址','物流单号','下单时间','支付方式','支付状态','商家备注'
  89. // ];
  90. $title = ['订单列表','订单信息','生成时间:' . date('Y-m-d H:i:s',time())];
  91. $filename = '订单列表_'.date('YmdHis');
  92. return $this->export($header,$title,$export,'order',$filename,$id,'xlsx');
  93. }
  94. public function orderList2(array $data){
  95. $result = [];
  96. if(empty($data)) return $result;
  97. $i = 1;
  98. // '序号','订单编号','收货人','商品信息','实际支付', '支付类型','支付方式','支付状态',订单状态'下单时间','养老金','养老金状态',
  99. foreach ($data as $item){
  100. if($item['status']==5){
  101. $item['pay_price']='0';
  102. }
  103. $item['leixing']='';
  104. $item['ddzt']='';
  105. $item['is_red_ylj_text']='未结算';
  106. if($item['paid']==1){
  107. if($item['pay_type']==0){
  108. $item['leixing']='虚拟支付';
  109. }else if ($item['pay_type']==1){
  110. $item['leixing']='微信支付';
  111. }else if ($item['pay_type']==5){
  112. $item['leixing']='红积分兑换';
  113. }
  114. }
  115. if($item['status'] == 5) $item['ddzt']='待付款';
  116. if($item['status'] == 0) $item['ddzt']='待发货';
  117. if($item['status'] == 1) $item['ddzt']='待收货';
  118. if($item['status'] == 2) $item['ddzt']='待评价';
  119. if($item['status'] == 3) $item['ddzt']='已完成';
  120. if($item['status'] == 4) $item['ddzt']='已申请退款';
  121. if($item['status'] == -1) $item['ddzt']='已退款';
  122. if($item['status'] == 6) $item['ddzt']='已取消';
  123. if($item['is_red_ylj']==1){
  124. $item['is_red_ylj_text']='待审核';
  125. }
  126. if($item['is_red_ylj']==2){
  127. $item['is_red_ylj_text']='已结算';
  128. }
  129. $result[] = [
  130. $i,
  131. $item['order_sn'],
  132. $item['real_name'],
  133. $item['user']['nickname'],
  134. '商品信息',
  135. $item['pay_price'],
  136. $item['leixing'],
  137. $item['paid'] ? '已支付':'未支付',
  138. $item['ddzt'] ? '已支付':'未支付',
  139. $item['create_time'] ,
  140. $item['ylj'] ,
  141. $item['is_red_ylj_text'] ,
  142. ];
  143. $i++;
  144. }
  145. return $result;
  146. }
  147. /**
  148. * TODO 整理订单信息
  149. * @param array $data
  150. * @return array
  151. * @author Qinii
  152. * @day 2020-08-10
  153. */
  154. public function orderList(array $data)
  155. {
  156. $result = [];
  157. if(empty($data)) return $result;
  158. $i = 1;
  159. foreach ($data as $item){
  160. $refund_price = app()->make(StoreRefundOrderRepository::class)->refundPirceByOrder([$item['order_id']]);
  161. foreach ($item['orderProduct'] as $key => $value){
  162. $result[] = [
  163. $i,
  164. $item['order_sn'],
  165. $item['order_type'] ? '核销订单':'普通订单',
  166. $item['user']['spread']['nickname'],
  167. $item['user']['nickname'],
  168. $value['cart_info']['product']['store_name'],
  169. $value['product_num'],
  170. $value['cart_info']['product']['price'],
  171. ($key == 0 ) ? $item['coupon_price'] : 0,
  172. ($key == 0 ) ? $item['pay_postage'] : 0,
  173. ($key == 0 ) ? $item['total_price'] : 0,
  174. ($key == 0 ) ? $refund_price : 0,
  175. $item['real_name'],
  176. $item['user_phone'],
  177. $item['user_address'],
  178. $item['delivery_id'],
  179. $item['create_time'],
  180. $item['pay_type'] ? '微信': '余额',
  181. $item['paid'] ? '已支付':'未支付',
  182. $item['remark']
  183. ];
  184. $i++;
  185. }
  186. }
  187. return $result;
  188. }
  189. /**
  190. * TODO 流水记录导出
  191. * @param array $where
  192. * @param int $id
  193. * @author Qinii
  194. * @day 2020-08-10
  195. */
  196. public function financial(array $where,int $id)
  197. {
  198. $_key = [
  199. 'mer_accoubts' => '财务对账',
  200. 'sys_accoubts' => '财务对账',
  201. 'refund_order' => '退款订单',
  202. 'brokerage_one' => '一级分佣',
  203. 'brokerage_two' => '二级分佣',
  204. 'refund_brokerage_one' => '返还一级分佣',
  205. 'refund_brokerage_two' => '返还二级分佣',
  206. 'order' => '订单支付',
  207. ];
  208. $make = app()->make(FinancialRecordRepository::class);
  209. $query = $make->search($where)->with(['merchant']);
  210. $list = $query->select();
  211. $header = [
  212. '序号','商户ID','商户名称','流水ID','流水单号','订单ID','订单号','用户名','用户ID','流水类型','收入/支付','金额','创建时间'
  213. ];
  214. $_export = [];
  215. foreach ($list as $k => $v){
  216. $_export[]=[
  217. $k,
  218. $v['merchant']['mer_id'],
  219. $v['merchant']['mer_name'],
  220. $v['financial_record_id'],
  221. $v['financial_record_sn'],
  222. $v['order_id'],
  223. $v['order_sn'],
  224. $v['user_info'],
  225. $v['user_id'],
  226. $_key[$v['financial_type']],
  227. $v['financial_pm'] ? '收入' : '支出',
  228. $v['number'],
  229. $v['create_time'],
  230. ];
  231. }
  232. $title = ['流水列表','流水信息','生成时间:' . date('Y-m-d H:i:s',time())];
  233. $filename = '流水列表_'.date('YmdHis');
  234. return $this->export($header,$title,$_export,'financial',$filename,$id,'xlsx');
  235. }
  236. public function extract(array $data)
  237. {
  238. $export =$data;
  239. $header = [
  240. '申请时间','姓名','申请金额','综合服务费','实际到账金额','提现方式','所属银行','所属银行支行','银行卡号','状态'
  241. ];
  242. $title_arr = ['提现列表','提现信息','生成时间:' . date('Y-m-d H:i:s',time())];
  243. $filename = '提现列表_'.date('YmdHis');
  244. $title = isset($title_arr[0]) && !empty($title_arr[0]) ? $title_arr[0] : '导出数据';
  245. $name = isset($title_arr[1]) && !empty($title_arr[1]) ? $title_arr[1] : '导出数据';
  246. $info = isset($title_arr[2]) && !empty($title_arr[2]) ? $title_arr[2] : date('Y-m-d H:i:s', time());
  247. $suffix='xlsx';
  248. $path='extract';
  249. $_path = SpreadsheetExcelService::instance()
  250. ->createOrActive()
  251. ->setExcelHeader($header)
  252. ->setExcelTile($title, $name, $info)
  253. ->setExcelContent($export)
  254. ->excelSave($filename, $suffix, $path);
  255. return [
  256. 'name' => $filename.'.'.$suffix,
  257. 'status' => 1,
  258. 'path' => '/'.$_path
  259. ];
  260. }
  261. }