=0)$where['settlementStatus'] = $settlementStatus; $order = 'st.settlementId desc'; if($sort){ $sortArr = explode('.',$sort); $order = $sortArr[0].' '.$sortArr[1]; if($sortArr[0]=='settlementNo'){ $order = $sortArr[0].'+0 '.$sortArr[1]; } } $result=Db::name('settlements')->alias('st') ->join('__SHOPS__ s','s.shopId=st.shopId','left') ->join('__ORDERS__ o','o.settlementId=st.settlementId','left') ->join('__SHOPS_DEPOSIT_DETAIL__ sd','sd.orderId=o.orderId','left') ->join('__PAYMENTS__ p','p.payCode=o.payFrom','left') ->where($where)->field('s.shopName,settlementNo,sd.cashDeposit,st.settlementId,st.settlementMoney,st.commissionFee,st.backMoney,st.settlementStatus,st.settlementTime,st.createTime,payFrom,payName')->order($order) ->paginate(input('limit/d'))->toArray(); return $result; } /** * 获取结算订单详情 */ public function getById(){ $settlementId = (int)input('id'); $object = Db::name('settlements')->alias('st')->where('settlementId',$settlementId)->join('__SHOPS__ s','s.shopId=st.shopId','left')->field('s.shopName,st.*')->find(); // dump($object);die; if(!empty($object)){ $object['list'] = Db::name('orders')->alias('o')->join('__SHOPS_DEPOSIT_DETAIL__ sd','o.orderId=sd.orderId','left')->where(['o.settlementId'=>$settlementId]) ->field('sd.cashDeposit,o.orderId,orderNo,o.payType,goodsMoney,deliverMoney,realTotalMoney,totalMoney,commissionFee,scoreMoney,createTime') ->order('payType desc,orderId desc')->select(); } // dump($object);die; return $object; } /** * 处理订单 */ public function handle(){ $id = (int)input('settlementId'); $remarks = input('remarks'); Db::startTrans(); try{ $object = $this->get($id); $object->settlementStatus = 1; $object->settlementTime = date('Y-m-d H:i:s'); if($remarks!='')$object->remarks = $remarks; $rs = $object->save(); if(false !== $rs){ $shop = model('Shops')->get($object->shopId); WSTSendMsg($shop['userId'],"您的结算申请【".$object->settlementNo."】已处理,请留意到账户息哦~",['from'=>4,'dataId'=>$id]); $shop->shopMoney = $shop->shopMoney+$object->backMoney; $shop->paymentMoney = $shop->paymentMoney + $object->commissionFee; $shop->save(); $lmarr = []; //增加资金变动信息 if($object->settlementMoney>0){ $lm = []; $lm['targetType'] = 1; $lm['targetId'] = $object->shopId; $lm['dataId'] = $id; $lm['dataSrc'] = 2; $lm['remark'] = '结算订单申请【'.$object->settlementNo.'】收入订单金额¥'.$object->settlementMoney; $lm['moneyType'] = 1; $lm['money'] = $object->settlementMoney; $lm['payType'] = 0; $lm['createTime'] = date('Y-m-d H:i:s'); $lmarr[] = $lm; } if($object->commissionFee>0){ //要对有积分支付的佣金记录进行处理 $commissionFee = $object->commissionFee; //如果backMoney小于0则说明平台收到的钱不足以支付佣金,这个backMoney已经减去了积分支付,所以直接显示backMoney为应付的佣金就好 if($object->backMoney<0){ $commissionFee = $object->backMoney; } $lm = []; $lm['targetType'] = 1; $lm['targetId'] = $object->shopId; $lm['dataId'] = $id; $lm['dataSrc'] = 2; $lm['remark'] = '结算订单申请【'.$object->settlementNo.'】支出订单佣金¥'.$commissionFee."。".(($object->remarks!='')?"【操作备注】:".$object->remarks:''); $lm['moneyType'] = 0; $lm['money'] = $commissionFee; $lm['payType'] = 0; $lm['createTime'] = date('Y-m-d H:i:s'); $lmarr[] = $lm; } if(count($lmarr)>0)model('LogMoneys')->saveAll($lmarr); Db::commit(); return WSTReturn('操作成功!',1); } }catch (\Exception $e) { Db::rollback();errLog($e); } return WSTReturn('操作失败!',-1); } /** * 获取订单商品 */ public function pageGoodsQuery(){ $id = (int)input('id'); return Db::name('orders')->alias('o')->join('__ORDER_GOODS__ og','o.orderId=og.orderId')->where('o.settlementId',$id) ->field('orderNo,og.goodsPrice,og.goodsName,og.goodsSpecNames,og.goodsNum,og.commissionRate')->order('o.payType desc,o.orderId desc')->paginate(input('limit/d'))->toArray(); } /** * 获取待结算商家 */ public function pageShopQuery(){ $areaIdPath = input('areaIdPath'); $shopName = input('shopName'); $where = []; if($shopName!='')$where['s.shopName|s.shopSn'] = ['like','%'.$shopName.'%']; if($areaIdPath !='')$where['s.areaIdPath'] = ['like',$areaIdPath."%"]; $where['s.dataFlag'] = 1; $where['s.noSettledOrderNum'] = ['>',0]; return Db::table('__SHOPS__')->alias('s')->join('__AREAS__ a2','s.areaId=a2.areaId') ->where($where) ->field('shopId,shopSn,shopName,a2.areaName,shopkeeper,telephone,abs(noSettledOrderFee) noSettledOrderFee,noSettledOrderNum') ->order('noSettledOrderFee desc')->paginate(input('limit/d')); } /** * 获取商家未结算的订单 */ public function pageShopOrderQuery(){ $orderNo = input('orderNo'); $payType = (int)input('payType',-1); $where = []; $where['settlementId'] = 0; $where['orderStatus'] = 2; $where['shopId'] = (int)input('id'); $where['dataFlag'] = 1; if($orderNo!='')$where['orderNo'] = ['like','%'.$orderNo.'%']; if(in_array($payType,[0,1]))$where['payType'] = $payType; $page = Db::name('orders')->where($where) ->field('orderId,orderNo,payType,goodsMoney,deliverMoney,realTotalMoney,totalMoney,commissionFee,createTime') ->order('payType desc,orderId desc')->paginate(input('limit/d'))->toArray(); if(count($page['Rows'])>0){ foreach ($page['Rows'] as $key => $v) { $page['Rows'][$key]['payTypeName'] = WSTLangPayType($v['payType']); } } return $page; } /** * 生成结算单 */ public function generateSettleByShop(){ $shopId = (int)input('id'); $where = []; $where['shopId'] = $shopId; $where['dataFlag'] = 1; $where['orderStatus'] = 2; $where['settlementId'] = 0; $orders = Db::name('orders')->where($where)->field('orderId,payType,realTotalMoney,scoreMoney,commissionFee')->select(); if(empty($orders))return WSTReturn('没有需要结算的订单,请刷新后再核对!'); $settlementMoney = 0; $commissionFee = 0; //平台要收的佣金 $ids = []; foreach ($orders as $key => $v) { $ids[] = $v['orderId']; if($v['payType']==1){ $settlementMoney += $v['realTotalMoney']+$v['scoreMoney']; }else{ $settlementMoney += $v['scoreMoney']; } $commissionFee += abs($v['commissionFee']); } $backMoney = $settlementMoney-$commissionFee; $shops = model('shops')->get($shopId); if(empty($shops))WSTReturn('无效的店铺结算账号!'); Db::startTrans(); try{ $data = []; $data['settlementType'] = 0; $data['shopId'] = $shopId; $data['settlementMoney'] = $settlementMoney; $data['commissionFee'] = $commissionFee; $data['backMoney'] = $settlementMoney-$commissionFee; $data['settlementStatus'] = 1; $data['settlementTime'] = date('Y-m-d H:i:s'); $data['createTime'] = date('Y-m-d H:i:s'); $data['settlementNo'] = ''; $result = $this->save($data); if(false !== $result){ $this->settlementNo = $this->settlementId.(fmod($this->settlementId,7)); $this->save(); //修改商家订单情况 Db::name('orders')->where(['orderId'=>['in',$ids]])->update(['settlementId'=>$this->settlementId]); $shops->shopMoney = $shops->shopMoney + $backMoney; $shops->noSettledOrderNum = 0; $shops->noSettledOrderFee = 0; $shops->paymentMoney = 0; //修改商家充值金额 $lockCashMoney = (($shops->rechargeMoney - $commissionFee)>=0)?($shops->rechargeMoney - $commissionFee):0; $shops->rechargeMoney = $lockCashMoney; $shops->save(); //发消息 $tpl = WSTMsgTemplates('SHOP_SETTLEMENT'); if( $tpl['tplContent']!='' && $tpl['status']=='1'){ $find = ['${SETTLEMENT_NO}']; $replace = [$this->settlementNo]; $msg = array(); $msg["shopId"] = $shopId; $msg["tplCode"] = $tpl["tplCode"]; $msg["msgType"] = 1; $msg["content"] = str_replace($find,$replace,$tpl['tplContent']) ; $msg["msgJson"] = ['from'=>4,'dataId'=>$this->settlementId]; model("common/MessageQueues")->add($msg); } //增加资金变动信息 $lmarr = []; if($settlementMoney>0){ $lm = []; $lm['targetType'] = 1; $lm['targetId'] = $shopId; $lm['dataId'] = $this->settlementId; $lm['dataSrc'] = 2; $lm['remark'] = '结算订单申请【'.$this->settlementNo.'】收入订单金额¥'.$settlementMoney."。"; $lm['moneyType'] = 1; $lm['money'] = $settlementMoney; $lm['payType'] = 0; $lm['createTime'] = date('Y-m-d H:i:s'); $lmarr[] = $lm; } if($commissionFee>0){ $lm = []; $lm['targetType'] = 1; $lm['targetId'] = $shopId; $lm['dataId'] = $this->settlementId; $lm['dataSrc'] = 2; $lm['remark'] = '结算订单申请【'.$this->settlementNo.'】收取订单佣金¥'.$commissionFee."。"; $lm['moneyType'] = 0; $lm['money'] = $commissionFee; $lm['payType'] = 0; $lm['createTime'] = date('Y-m-d H:i:s'); $lmarr[] = $lm; } if(count($lmarr)>0)model('LogMoneys')->saveAll($lmarr); Db::commit(); return WSTReturn('生成结算单成功',1); } }catch (\Exception $e) { Db::rollback();errLog($e); } return WSTReturn('生成结算单失败',-1); } /** * 导出 */ public function toExport(){ $name='结算申请表'; $settlementNo = input('settlementNo'); $shopName = input('shopName'); $settlementStatus = (int)input('settlementStatus',-1); $sort = input('sort'); $where = []; if($settlementNo!='')$where['settlementNo'] = ['like','%'.$settlementNo.'%']; if($shopName!='')$where['shopName|shopSn'] = ['like','%'.$shopName.'%']; if($settlementStatus>=0)$where['settlementStatus'] = $settlementStatus; $order = 'st.settlementId desc'; if($sort){ $sortArr = explode('.',$sort); $order = $sortArr[0].' '.$sortArr[1]; if($sortArr[0]=='settlementNo'){ $order = $sortArr[0].'+0 '.$sortArr[1]; } } $page=Db::name('settlements')->alias('st') ->join('__SHOPS__ s','s.shopId=st.shopId','left') ->join('__ORDERS__ o','o.settlementId=st.settlementId','left') ->join('__SHOPS_DEPOSIT_DETAIL__ sd','sd.orderId=o.orderId','left') ->join('__PAYMENTS__ p','p.payCode=o.payFrom','left') ->where($where)->field('s.shopName,settlementNo,sd.cashDeposit,st.settlementId,st.settlementMoney,st.commissionFee,st.backMoney,st.settlementStatus,st.settlementTime,st.createTime,payFrom,payName')->order($order) ->select(); foreach($page as &$v){ $order_list=db('orders')->where('settlementId',$v['settlementId'])->field('orderNo,realTotalMoney,scoreMoney')->select(); $v['order_number']=''; if(count($order_list)>0){ foreach($order_list as $val){ $v['order_number']=$v['order_number'].$val['orderNo'].',';// } //.$order_list['realTotalMoney'].$order_list['scoreMoney']; } } Loader::import('phpexcel.PHPExcel.IOFactory'); $objPHPExcel = new \PHPExcel(); // 设置excel文档的属性 $objPHPExcel->getProperties()->setCreator("WSTMart")//创建人 ->setLastModifiedBy("WSTMart")//最后修改人 ->setTitle($name)//标题 ->setSubject($name)//题目 ->setDescription($name)//描述 ->setKeywords("结算")//关键字 ->setCategory("Test result file");//种类 // 开始操作excel表 $objPHPExcel->setActiveSheetIndex(0); // 设置工作薄名称 $objPHPExcel->getActiveSheet()->setTitle(iconv('gbk', 'utf-8', 'Sheet')); // 设置默认字体和大小 $objPHPExcel->getDefaultStyle()->getFont()->setName(iconv('gbk', 'utf-8', '')); $objPHPExcel->getDefaultStyle()->getFont()->setSize(11); $styleArray = array( 'font' => array( 'bold' => true, 'color'=>array( 'argb' => 'ffffffff', ) ), 'borders' => array ( 'outline' => array ( 'style' => \PHPExcel_Style_Border::BORDER_THIN, //设置border样式 'color' => array ('argb' => 'FF000000'), //设置border颜色 ) ) ); //设置宽 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(25); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(12); $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(12); $objPHPExcel->getActiveSheet()->getStyle('A1:K1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getStyle('A1:K1')->getFill()->getStartColor()->setARGB('333399'); $objPHPExcel->getActiveSheet()->setCellValue('A1', '结算单号') ->setCellValue('B1', '申请店铺')->setCellValue('C1', '结算金额') ->setCellValue('D1', '结算佣金')->setCellValue('E1', '扣除质保金')->setCellValue('F1', '返还金额') ->setCellValue('G1', '申请时间')->setCellValue('H1', '状态') ->setCellValue('I1', '订单单号')->setCellValue('J1', '支付方式'); $objPHPExcel->getActiveSheet()->getStyle('A1:I1')->applyFromArray($styleArray); for ($row = 0; $row < count($page); $row++){ $i = $row+2; $objPHPExcel->getActiveSheet() ->setCellValue('A'.$i, $page[$row]['settlementNo']) ->setCellValue('B'.$i, $page[$row]['shopName']) ->setCellValue('C'.$i, '¥'.$page[$row]['settlementMoney']) ->setCellValue('D'.$i, '¥'.$page[$row]['commissionFee']) ->setCellValue('E'.$i, '¥'.(float)$page[$row]['cashDeposit']) ->setCellValue('F'.$i, '¥'.$page[$row]['backMoney']) ->setCellValue('G'.$i, $page[$row]['createTime']) ->setCellValue('H'.$i, $page[$row]['settlementStatus']==1?'已结算':'未结算') ->setCellValue('I'.$i, $page[$row]['order_number']) ->setCellValue('J'.$i, $page[$row]['payName']); } //输出EXCEL格式 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); // 从浏览器直接输出$filename header('Content-Type:application/csv;charset=UTF-8'); header("Pragma: public"); header("Expires: 0"); header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type:application/force-download"); header("Content-Type:application/vnd.ms-excel;"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download"); header('Content-Disposition: attachment;filename="'.$name.'.xls"'); header("Content-Transfer-Encoding:binary"); $objWriter->save('php://output'); } }