enterpriseId = $enterpriseId; $this->userCenterId = $userCenterId; parent::__construct($this->enterpriseId,$this->userCenterId); $this->objDOrderReturn = new DOrderReturn('default'); $this->objDOrderReturnDetails = new DOrderReturnDetails('default'); $this->objDOrderReturnDetails->setTable($this->objDOrderReturnDetails->get_Table() . '_' . $enterpriseId); $this->objDOrderReturn->setTable($this->objDOrderReturn->get_Table() . '_' . $enterpriseId); $this->objDOrderReturnDetails->setSearchIndex('order_out_search')->setType('order_out'); } /** * 订单退货添加 * @param $params * @return ResultWrapper * @throws \Exception */ public function addOrderReturn($params) { $details = $params['details']; unset($params['details']); $deleteArray = $params['deleteArray']; unset($params['deleteArray']); // 生成编号 $dbResult = $this->objDOrderReturn->get('createTime >='.strtotime(date('Ymd'.'0:0:0')), 'no', 'createTime desc'); if ($dbResult === false) { return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } if(empty($dbResult)){ $params['no'] = createSerialNumberByDate(''); }else{ $params['no'] = createSerialNumberByDate($dbResult['no']); } //$params['no'] = createOrderSn(StatusCode::$source['manage'], StatusCode::$orderType['saleReturn'], $this->enterpriseId); $params['inStatus'] = StatusCode::$delete; $beginStatus = $this->objDOrderReturn->beginTransaction(); $dbResult = $this->objDOrderReturn->insert($params); if ($dbResult === false) { $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } $returnData = $dbResult; unset($dbResult); $updateOrderDetailsIds = []; foreach($details as &$value){ $value['deleteStatus'] = StatusCode::$standard; $value['linkId'] = $returnData; $value['linkNo'] = $params['no']; if(isset($value['id']) && !empty($value['id'])) $updateOrderDetailsIds[] = $value['id']; unset($value['id']); } unset($value); $dbResult = $this->objDOrderReturnDetails->insert($details, true); if ($dbResult === false) { $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($this->objDOrderReturnDetails->error(), ErrorCode::$dberror); } //修改订单状态 $objMOrder = new MOrder($this->userCenterId, $this->enterpriseId); $sql = 'select g.orderId,g.goodsName,g.skuId,g.outNum from qianniao_order_goods_'.$this->enterpriseId.'_1 g left join qianniao_order_'.$this->enterpriseId.'_1 o on o.id = g.orderId where g.orderId = '.$params['originId'].' and g.deleteStatus = '.StatusCode::$standard.' and o.outStatus in ( '.StatusCode::$outStatus['allOut'].','.StatusCode::$outStatus['notAllOut'].')'; $dbResult = $this->objDOrderReturn->query($sql); if($dbResult === false){ return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } $orderGoodsData = $dbResult; unset($dbResult); if(empty($orderGoodsData)){ return ResultWrapper::fail('未查询可退订单数据', ErrorCode::$paramError); } $sql = 'select d.skuId as skuId,sum(d.num) as num from qianniao_order_return_details_'.$this->enterpriseId.' d left join qianniao_order_return_'.$this->enterpriseId.' r on r.id = d.linkId where r.originId = '.$params['originId'].' and r.deleteStatus = '.StatusCode::$standard.' and d.deleteStatus = '.StatusCode::$standard.' group by d.skuId'; $dbResult = $this->objDOrderReturn->query($sql); if($dbResult === false){ return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } $returnGoodsData = []; foreach($dbResult as $value){ $returnGoodsData[$value['skuId']] = $value; } unset($dbResult); $returnStatus = 2;//全部退货 foreach($orderGoodsData as $value){ if($returnGoodsData[$value['skuId']]['num'] > $value['outNum']){ //退货总数量大于出库数量 return ResultWrapper::fail($value['goodsName'].' 可退数量不足', ErrorCode::$paramError); } if($returnGoodsData[$value['skuId']]['num'] < $value['outNum']){ //退货总数量小于出库数量 $returnStatus = 1;//部分退货 } } $updateData = [ 'returnStatus' => $returnStatus, 'updateTime' => time(), 'id' => $params['originId'] ]; $modelResult = $objMOrder->editOrder($updateData); if(!$modelResult->isSuccess()){ $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($modelResult->getData(),$modelResult->getErrorCode()); } unset($modelResult); //修改订单详情状态 $objMOderGoods = new MOrderGoods($this->userCenterId, $this->enterpriseId); $modelResult = $objMOderGoods->updateDetails(['returnStatus' => StatusCode::$orderReturn['allReturn'], 'updateTime' => time()], ['id'=>$updateOrderDetailsIds]); if(!$modelResult->isSuccess()){ $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } // 增加es数据 /*$modelResult = self::addEsData($details, $params, $dbResult); if(!$modelResult->isSuccess()){ $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); }*/ $beginStatus && $this->objDOrderReturn->commit(); return ResultWrapper::success($returnData); } /** * 销售退货删除 * @param $params * @return ResultWrapper */ public function deleteOrderOut($params) { $updateData['deleteStatus'] = StatusCode::$delete; $updateData['updateTime'] = time(); $dbResult = $this->objDOrderReturn->update($updateData, ['id'=>$params]); if ($dbResult === false) { return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } return ResultWrapper::success($dbResult); } /** * 销售退货审核 * @param $params * @return ResultWrapper * @throws \Exception */ public function auditOrderOut($params) { $id = $params['id']; unset($params['id']); // 查询退货单数据 $dbResult = $this->objDOrderReturn->get($id); if($dbResult === false){ return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } $orderOutData = $dbResult; if( empty($orderOutData) ){ return ResultWrapper::fail('退货单不存在', ErrorCode::$contentNotExists); } if( $orderOutData['auditPass'] == StatusCode::$auditStatus['auditPass'] ){ return ResultWrapper::fail('退货单已经审核过了', ErrorCode::$notAllowAccess); } $updateData = $params; $updateData['auditStatus'] = StatusCode::$auditStatus['auditPass']; $updateData['auditTime'] = time(); $updateData['updateTime'] = time(); $beginStatus = $this->objDOrderReturn->beginTransaction(); //修改退货单审核状态 $dbResult = $this->objDOrderReturn->update($updateData, ['id'=>$id]); if ($dbResult === false) { $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } $returnData = $dbResult; unset($dbResult); //查询商铺绑定仓库 $objMShop = new MShop($this->enterpriseId,$this->userCenterId); $modelResult = $objMShop->getShopBindWarehouse($orderOutData['shopId']); if(!$modelResult->isSuccess()){ return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } $shop = $modelResult->getData(); unset($modelResult); if(empty($shop)){ return ResultWrapper::fail('商铺查询失败', ErrorCode::$dberror); } $warehouseData = $shop['warehouseData']; //查询详情 $dbResult = $this->objDOrderReturnDetails->select(['linkId' => $id]); if($dbResult === false){ return ResultWrapper::fail($this->objDOrderReturnDetails->error(), ErrorCode::$dberror); } $details = $dbResult; unset($dbResult); //查询每个商品出库数量 $objMInventoryOut = new MInventoryOut($this->enterpriseId, $this->userCenterId); $modelResult = $objMInventoryOut->getInventoryOutByOriginId($orderOutData['originId'], StatusCode::$orderType['saleOrder']); if(!$modelResult->isSuccess()){ return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } $inventoryOut = $modelResult->getData(); unset($modelResult); unset($modelResult); $inInventoryData = [ 'sourceId' => $orderOutData['id'], 'sourceNo' => $orderOutData['no'], 'originId' => $orderOutData['originId'], 'originNo' => $orderOutData['originNo'], 'shopId' => $orderOutData['shopId'], 'shopName' => $orderOutData['shopName'], 'warehouseId' => '', 'warehouseName' => '', 'operatorId' => $this->userCenterId, 'operatorName' => $params['auditName'], 'remark' => $orderOutData['remark'], 'source' => StatusCode::$orderType['saleReturn'], 'type' => StatusCode::$orderType['saleReturnIn'] ]; $inInventoryData['materielNum'] = 0; $inInventoryData['amount'] = 0; $inInventoryData['orderGoodsData'] = []; $inWarehouseData = []; $ids = []; foreach($details as $key => $value){ $ids[] = $value['id']; $inInventoryData['materielNum']++; // 入库总数量 $inInventoryData['amount'] += bcmul($value['returnUnitPrice'], $value['num']); // 入库总金额 $returnNum = $value['num']; foreach($inventoryOut[$value['skuId']]['outWarehouse'] as $outWarehouse){ if($returnNum <= 0){ break; } $inInventoryDetails = [ 'materielId' => $value['goodsBasicId'], 'materielName' => $value['goodsName'], 'materielCode' => $value['goodsCode'], 'skuId' => $value['skuId'], 'unitName' => isset($value['unitName']) ? $value['unitName'] : '', 'skuName' => isset($value['skuName']) ? $value['skuName'] : '', 'unitPrice' => $value['returnUnitPrice'], 'totalPrice' => bcmul($value['returnUnitPrice'], $value['num']), ]; if($returnNum > $outWarehouse['num']){ //多个仓退 $inInventoryDetails['num'] = $outWarehouse['num']; $inInventoryDetails['otherNum'] = $outWarehouse['otherNum']; $returnNum = bcsub($returnNum, $outWarehouse['num'], 8); }else{ //一个仓退 $inInventoryDetails['num'] = $returnNum; $inInventoryDetails['otherNum'] = $value['otherNum']; $returnNum = 0; } $inWarehouseData[$outWarehouse['warehouseId']][] = $inInventoryDetails; } } $objMInventoryIn = new MInventoryIn($this->enterpriseId, $this->userCenterId); foreach($inWarehouseData as $warehouseId => $value){ $inInventoryData['warehouseId'] = $warehouseId; $inInventoryData['warehouseName'] = $warehouseData[$outWarehouse['warehouseId']]['warehouseName']; $inInventoryData['orderGoodsData'] = $value; $modelResult = $objMInventoryIn->addInventoryIn($inInventoryData); if(!$modelResult->isSuccess()){ $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } } $beginStatus && $this->objDOrderReturn->commit(); return ResultWrapper::success($returnData); } /** * 销售退货修改 * @param $params * @return ResultWrapper */ public function updateOrderOut($params) { $id = $params['id']; unset($params['id']); $details = $params['details']; unset($params['details']); $deleteArray = $params['deleteArray']; unset($params['deleteArray']); unset($params['no']); $this->objDOrderReturn->beginTransaction(); $dbResult = $this->objDOrderReturn->update($params,['id'=>$id]); if ($dbResult === false) { $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } $returnData = $dbResult; unset($dbResult); //修改或新增 $addDetailsData = []; $updateDetailsIds = []; $updateDetailsData = []; foreach($details as &$value){ if(isset($value['id'])){ $detailsId = $value['id']; $updateDetailsIds[] = $value['id']; unset($value['id']); //修改 $dbResult = $this->objDOrderReturnDetails->update($value, ['id'=>$detailsId]); if ($dbResult === false) { $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($this->objDOrderReturnDetails->error(), ErrorCode::$dberror); } $updateDetailsData[] = $value; unset($dbResult); }else{ //新增 $addDetailsData[] = [ 'linkId' => $id, 'linkNo' => $params['no'], 'goodsId' => $value['goodsId'], 'goodsName' => $value['goodsName'], 'goodsCode' => $value['goodsCode'], 'goodsBasicId' => $value['goodsBasicId'], 'skuId' => $value['skuId'], 'num' => $value['num'], 'otherNum' => $value['otherNum'], 'returnUnitPrice' => $value['returnUnitPrice'], 'saleUnitPrice' => $value['saleUnitPrice'], 'returnTotalPrice' => $value['returnTotalPrice'], 'saleTotalPrice' => $value['saleTotalPrice'], 'deleteStatus' => StatusCode::$standard, 'createTime' => time(), 'updateTime' => time(), ]; } } //添加 $addDetailsIds = []; if(!empty($addDetailsData)){ $dbResult = $this->objDOrderReturnDetails->insert($addDetailsData, true); if($dbResult === false){ $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($this->objDOrderReturnDetails->error(), ErrorCode::$dberror); } $addDetailsIds = $dbResult; unset($dbResult); } unset($dbResult); //删除 if(!empty($deleteArray)){ $deleteData = [ 'deleteStatus' => StatusCode::$delete, 'updateTime' => time(), ]; $dbResult = $this->objDOrderReturnDetails->update($deleteData, ['id' => 3, 'linkId' => $id]); if($dbResult === false){ $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($this->objDOrderReturnDetails->error(), ErrorCode::$dberror); } unset($dbResult); } //es操作 //修改es /*$modelResult = self::addEsData($updateDetailsData, $params, $updateDetailsIds); if(!$modelResult->isSuccess()){ $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } //添加es $modelResult = self::addEsData($addDetailsData, $params, $addDetailsIds); if(!$modelResult->isSuccess()){ $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } //删除es $modelResult = self::delEsData([], $params, $deleteArray); if(!$modelResult->isSuccess()){ $this->objDOrderReturn->rollBack(); return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); }*/ $this->objDOrderReturn->commit(); return ResultWrapper::success($returnData); } /** * 修改销售退货 * @param $updateData * @param $where * @return ResultWrapper */ public function updateOrderReturnData($updateData, $where) { $orderReturnData = $this->objDOrderReturn->get($where); if($orderReturnData === false){ return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } if(empty($orderReturnData)){ return ResultWrapper::fail('要修改的退货单不存在', ErrorCode::$contentNotExists); } $dbResult = $this->objDOrderReturn->update($updateData, $where); if($dbResult === false){ return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } // 退货单驳回,订单退货状态回退 if(isset($updateData['auditStatus']) && $updateData['auditStatus'] == StatusCode::$auditStatus['auditNotPass']){ //修改订单状态 $objMOrder = new MOrder($this->userCenterId, $this->enterpriseId); $updateData = [ 'returnStatus' => 0, 'updateTime' => time(), 'id' => $orderReturnData['originId'] ]; $modelResult = $objMOrder->editOrder($updateData); if(!$modelResult->isSuccess()){ return ResultWrapper::fail($modelResult->getData(),$modelResult->getErrorCode()); } unset($modelResult); //修改订单详情状态 $objMOderGoods = new MOrderGoods($this->userCenterId, $this->enterpriseId); $modelResult = $objMOderGoods->updateDetails(['returnStatus' => 0, 'updateTime' => time()], ['orderId'=>$orderReturnData['originId']]); if(!$modelResult->isSuccess()){ return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } /* 暂时不做作废操作 $deleteOrderOut = self::deleteOrderOut($orderReturnData['id']); if(!$deleteOrderOut->isSuccess()){ return ResultWrapper::fail($deleteOrderOut->getData(), $deleteOrderOut->getErrorCode()); }*/ } return ResultWrapper::success($dbResult); } /** * Doc: (des="") * User: XMing * Date: 2020/8/24 * Time: 11:41 上午 * @param $selectParams * @param $export * @return ResultWrapper * @throws \Exception */ public function getAllOrderOut($selectParams, $export = false) { $limit = $selectParams['limit']; unset($selectParams['limit']); $offset = $selectParams['offset']; unset($selectParams['offset']); if ($export == 1) self::exportOrderReturn(true,'db'); $where = ''; if( isset($selectParams['userCenterId']) && !empty($selectParams['userCenterId'])){ $where = ' and a.userCenterId = '.$selectParams['userCenterId']; } $sql = "select a.*, d.goodsId,d.goodsName,d.goodsCode,d.goodsBasicId,d.skuId,d.num as goodsNum,d.returnUnitPrice,d.saleUnitPrice,d.returnTotalPrice,d.saleTotalPrice from ".$this->objDOrderReturn->get_Table()." a left join ".$this->objDOrderReturnDetails->get_Table()." d on a.id = d.linkId where a.deleteStatus = ".StatusCode::$standard." and d.deleteStatus = ".StatusCode::$standard.$where; if (isset($selectParams['shopId']) && !empty($selectParams['shopId'])){ $sql .= ' AND a.shopId = '.$selectParams['shopId']; } $sql .= ' ORDER BY a.createTime desc '; $sql .= " limit " . $offset . "," . $limit; $dbResult = $this->objDOrderReturn->query($sql); if ($dbResult === false) { return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } unset($sql); $sql = "select count(d.id) as num from ".$this->objDOrderReturn->get_Table()." a left join ".$this->objDOrderReturnDetails->get_Table()." d on a.id = d.linkId where a.deleteStatus = ".StatusCode::$standard." and d.deleteStatus = ".StatusCode::$standard.$where; if (isset($selectParams['shopId']) && !empty($selectParams['shopId'])){ $sql .= ' AND a.shopId = '.$selectParams['shopId']; } $dbDAllocateResult = $this->objDOrderReturn->query($sql); if($dbDAllocateResult === false){ return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } $DAllocate = array_shift($dbDAllocateResult); $total = $DAllocate['num']; $formatData = parent::formatOrderMan($this->enterpriseId, $dbResult, StatusCode::$orderType['saleReturn']); $return = [ 'data' => $formatData, 'total' => ($total) ? intval($total) : 0, ]; return ResultWrapper::success($return); } /** * 销售退货搜索 * @param $params * @param $export * @return ResultWrapper * @throws \Exception */ public function searchAllOrderOut($params, $export) { $defaultDSL = []; if ($export != 1){ $defaultDSL = ['from' => $params['offset'],'size' => $params['limit'],'sort' => ['createTime' => ['order' => 'desc']]]; } $selectParams = []; //店铺id parent::getAccessShopIds(); if (parent::$shopIds) { $dsl['query']['bool']['filter'][] = [ 'terms' => ['shopId' => parent::$shopIds] ]; } !empty($params['shopId']) && $selectParams[] = ['term' => ['shopId' => $params['shopId']]]; !empty($params['operatorId']) && $selectParams[] = ['term' => ['source' => $params['operatorId']]]; !empty($params['auditStatus']) && $selectParams[] = ['term' => ['auditStatus' => $params['auditStatus']]]; (!empty($params['start']) && !empty($params['end'])) && $selectParams[] = ['range' => ['createTime' => ['gte' => $params['start'],'lte' => $params['end']]]]; !empty($params['search']) && $selectParams[] = ['multi_match' => ['fields' => ['no','sourceNo', 'goodsName'],'query' => $params['search'],'fuzziness' => 'AUTO']]; $dsl = []; !empty($selectParams) && $dsl['query']['bool']['must'][] = $selectParams; $dsl = array_merge($defaultDSL, $dsl); $dbResult = $this->objDOrderReturnDetails->getSearchQueryDsl($dsl); if(isset($dbResult['error'])){ return ResultWrapper::fail($dbResult, ErrorCode::$dberror); } if (isset($dbResult['status']) && $dbResult['status'] == 400) { return ResultWrapper::fail('获取数据失败' . $dbResult['error']['reason'], ErrorCode::$apiNotResult); } if($export == 1){ $list = []; $esData = isset($dbResult['hits']['hits']) ? $dbResult['hits']['hits'] : []; foreach ($esData as $key => &$value) { $data = []; $data = $value['_source']; $list[] = $data; } self::exportOrderReturn($list,'es'); } $returnData = parent::formatEsSelectData($dbResult, $this->enterpriseId); return ResultWrapper::success($returnData); } /** * Doc: (des="退货单导出") * User: XMing * Date: 2020/8/24 * Time: 10:31 上午 * @param $data * @param string $source * @return ResultWrapper */ private function exportOrderReturn($data,string $source) { if (empty($data)){ return ResultWrapper::success([]); } $exportListsResult = self::buildDataBySelection($data,$source); if (!$exportListsResult->isSuccess()){ return ResultWrapper::fail($exportListsResult->getData(),$exportListsResult->getErrorCode()); } $exportList = $exportListsResult->getData(); if (empty($exportList)){ return ResultWrapper::fail('导出数据构建失败',ErrorCode::$paramError); } $exportData = self::buildExportData($exportList); self::exportCsv($exportData); } /** * Doc: (des="") * User: XMing * Date: 2020/8/24 * Time: 11:23 上午 * @param array $data * @return array */ private static function buildExportData(array $data) { //print_r($exportList);die; $mapping = []; $mappingGoods = []; foreach ($data as $value){ $mapping[$value['id']] = [ 'id' => $value['id'], 'no' => $value['no'], 'customerName' => $value['customerName'], 'originNo' => $value['originNo'], 'shopName' => $value['shopName'], 'operatorName' => $value['operatorName'], 'updateTime' => date('Y-m-d H:i:s',$value['updateTime']), 'auditStatusMsg' => isset(StatusCode::$auditStatus[$value['auditStatus']]) ? StatusCode::$auditStatus[$value['auditStatus']] : '', 'orderReturnMsg' => $value['inStatus'] == StatusCode::$standard ? '已入库' : '未入库', ]; $mappingGoods[$value['id']][] = [ 'goodsCode' => $value['goodsCode'], 'goodsName' => $value['goodsName'], 'unitName' => $value['unitName'], 'specName' => (empty($value['skuName']) || $value['skuName'] == ' ') ? '无' : $value['skuName'], 'num' => $value['goodsNum'], 'saleUnitPrice' => $value['saleUnitPrice'], 'saleTotalPrice' => $value['saleTotalPrice'], 'returnUnitPrice' => $value['returnUnitPrice'], 'returnTotalPrice' => $value['returnTotalPrice'] ]; } unset($value); unset($exportList); foreach ($mapping as &$value){ $value['details'] = isset($mappingGoods[$value['id']]) ? $mappingGoods[$value['id']] : []; } $mapping = array_values($mapping); return $mapping; } /** * Doc: (des="构建导出数据") * User: XMing * Date: 2020/8/24 * Time: 10:33 上午 * @param $data * @param string $source * @return ResultWrapper */ private function buildDataBySelection($data,string $source) { $fields = 'a.*, d.goodsId,d.goodsName,d.goodsCode,d.goodsBasicId,d.skuId,d.num as goodsNum,d.returnUnitPrice,d.saleUnitPrice,d.returnTotalPrice,d.saleTotalPrice,d.skuName,d.unitName'; $sql = 'select '.$fields.' FROM '.$this->objDOrderReturn->get_Table().' a left join '.$this->objDOrderReturnDetails->get_Table().' d on a.id = d.linkId where a.deleteStatus = '.StatusCode::$standard.' and d.deleteStatus = '.StatusCode::$standard; switch ($source){ case 'db': //数据库 break; case 'es': $allIds = []; foreach ($data as $value){ $allIds[] = $value['linkId']; } $allIds = array_values(array_unique($allIds)); if (empty($allIds)){ return ResultWrapper::fail('导出数据为空',ErrorCode::$paramError); } $allIdsStr = implode(',',$allIds); $sql .= ' AND a.id in('.$allIdsStr.') '; break; } $sql .= ' ORDER BY a.createTime DESC'; $result = $this->objDOrderReturn->exportQuery($sql); if ($result === false){ return ResultWrapper::fail($this->objDOrderReturn->error(),ErrorCode::$dberror); } $list = self::getGeneratorData($result); return ResultWrapper::success($list); } /** * Doc: (des="获取export查询方法返回的数据集合") * User: XMing * Date: 2020/8/22 * Time: 11:42 上午 * @param $object * @return array */ private static function getGeneratorData($object) { $arrayList = []; foreach ($object as $value){ $arrayList[] = $value; } return $arrayList; } /** * Doc: (des="退货单导出") * User: XMing * Date: 2020/8/24 * Time: 10:03 上午 * @param array $result * */ private function exportCsv(array $result) { //导出到本地 header ( "Content-type:application/vnd.ms-excel" ); header ( "Content-Disposition:filename=销售退货记录表.csv" ); header ('Cache-Control: max-age=0'); $fp = fopen('php://output', 'a'); $head = ['ID','退货单号','源销售订单号','客户名称','商铺','单据人','审核时间','审核状态', '单据状态', '商品编码','商品名称','单位','属性','数量','销售单价','销售金额','退货单价','退货金额']; //定义标题 foreach ($head as $i => $v) { $head[$i] = mb_convert_encoding($v, 'GBK', 'utf-8'); //将中文标题转换编码,否则乱码 } fputcsv($fp, $head); $limit = 10000; $num = 0; $rows = []; foreach ($result as $v) { $num++; if($num == $limit){ ob_flush(); //释放内存 flush(); } foreach ($v['details'] as $index => $item){ self::buildExportFinalData($rows,$v,$item,$index); foreach ($rows as $kk => $vv) { $rs[$kk] = mb_convert_encoding($vv, 'GBK', 'utf-8'); //转译编码 } fputcsv($fp, $rs); $rows = []; } } exit; } /** * Doc: (des="映射导出数据") * User: XMing * Date: 2020/8/24 * Time: 11:36 上午 * @param $rows * @param array $v * @param array $item * @param int $index */ private static function buildExportFinalData(&$rows,array $v,array $item,int $index) { $rows['id'] = ''; $rows['no'] = ''; $rows['customerName'] = ''; $rows['originNo'] = ''; $rows['shopName'] = ''; $rows['operatorName'] = ''; $rows['updateTime'] = ''; $rows['auditStatusMsg'] = ''; $rows['orderReturnMsg'] = ''; if ($index == 0){ $rows['id'] = $v['id']; $rows['no'] = $v['no']; $rows['customerName'] = $v['customerName']; $rows['originNo'] = $v['originNo']; $rows['shopName'] = $v['shopName']; $rows['operatorName'] = $v['operatorName']; $rows['updateTime'] = $v['updateTime']; $rows['auditStatusMsg'] = $v['auditStatusMsg']; $rows['orderReturnMsg'] = $v['orderReturnMsg']; } $rows['goodsCode'] = $item['goodsCode']; $rows['goodsName'] = $item['goodsName']; $rows['unitName'] = $item['unitName']; $rows['specName'] = $item['specName']; $rows['num'] = $item['num']; $rows['saleUnitPrice'] = $item['saleUnitPrice']; $rows['saleTotalPrice'] = $item['saleTotalPrice']; $rows['returnUnitPrice'] = $item['returnUnitPrice']; $rows['returnTotalPrice'] = $item['returnTotalPrice']; } /** * 销售退货导出方法 * @param $result * @return void */ public function export($result) { //导出到本地 header ( "Content-type:application/vnd.ms-excel" ); header ( "Content-Disposition:filename=销售退货记录表.csv" ); header ('Cache-Control: max-age=0'); $fp = fopen('php://output', 'a'); $head = ['序号','商品名称','退货单号','单位','商铺','数量','销售单价','销售金额','退货单价','退货金额','单据人','源销售订单号','审核时间', '审核状态', '单据状态']; //定义标题 foreach ($head as $i => $v) { $head[$i] = mb_convert_encoding($v, 'GBK', 'utf-8'); //将中文标题转换编码,否则乱码 } fputcsv($fp, $head); $limit = 10000; $num = 0; //计数器 foreach ( $result as $v ) { //循环数据 $num++; if($num == $limit){ ob_flush(); //释放内存 flush(); } $rows['id'] = isset($v['id']) ? $v['id'] : null; $rows['goodsName'] = isset($v['goodsName']) ? $v['goodsName'] : null; $rows['no'] = isset($v['no']) ? $v['no'] : null; $rows['skuName'] = isset($v['skuName']) ? $v['skuName'] : null; $rows['shopName'] = isset($v['shopName']) ? $v['shopName'] : null; $rows['num'] = isset($v['num']) ? $v['num'] : null; $rows['saleUnitPrice'] = isset($v['saleUnitPrice']) ? $v['saleUnitPrice'] : null; $rows['saleTotalPrice'] = isset($v['saleTotalPrice']) ? $v['saleTotalPrice'] : null; $rows['returnUnitPrice'] = isset($v['returnUnitPrice']) ? $v['returnUnitPrice'] : null; $rows['returnTotalPrice'] = isset($v['returnTotalPrice']) ? $v['returnTotalPrice'] : null; $rows['customerName'] = isset($v['customerName']) ? $v['customerName'] : null; $rows['originNo'] = isset($v['originNo']) ? $v['originNo'] : null; $rows['auditTime'] = date('Y-m-d H:i:s', $v['auditTime']); $rows['auditStatus'] = $v['auditStatus'] == StatusCode::$auditStatus['auditPass'] ? '已审核' : '未审核'; $rows['inStatus'] = $v['inStatus'] == StatusCode::$standard ? '已入库' : '未入库'; foreach ( $rows as $kk => $vv){ $rs[$kk] = mb_convert_encoding($vv, 'GBK', 'utf-8'); //转译编码 } fputcsv($fp, $rs); $rows = []; } } /** * 销售退货详情 * @param $params * @return ResultWrapper * @throws \Exception */ public function getOrderOut($params) { $dbResult = $this->objDOrderReturn->get($params); if($dbResult === false){ return ResultWrapper::fail($this->objDOrderReturn->error(), ErrorCode::$dberror); } $returnData = $dbResult; unset($dbResult); //查询单据信息 $objMOrder = new MOrder($this->userCenterId, $this->enterpriseId); $modelResult = $objMOrder->getOrderInfoById($returnData['originId']); if(!$modelResult->isSuccess()){ return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } $orderData = $modelResult->getData(); unset($modelResult); //组装收货人信息 $returnData['realName'] = $orderData['receiveData']['realName']; $returnData['mobile'] = $orderData['receiveData']['mobile']; $returnData['address'] = $orderData['receiveData']['address']; $returnData['area'] = $orderData['receiveData']['area']; $returnData['type'] = StatusCode::$orderType['saleReturn']; //查询打印次数 $objMPrintNum = new MPrintNum($this->enterpriseId); $returnData['printNum'] = $objMPrintNum->getObjectPrintNum($returnData['no'],StatusCode::$orderType['saleReturn']); //查询商品信息 $dbResult = $this->objDOrderReturnDetails->select(['linkId' => $params['id'], 'deleteStatus' => StatusCode::$standard]); if($dbResult === false){ return ResultWrapper::fail($this->objDOrderReturnDetails->error(), ErrorCode::$dberror); } foreach($dbResult as &$value){ if(!empty($value['extend'])){ $value['extend'] = json_decode($value['extend'], true); } } unset($value); $returnData['details'] = $dbResult; $formatData = parent::formatOrderMan($this->enterpriseId, $returnData); return ResultWrapper::success($formatData); } /** * 增加详情es数据 * @param $data * @param $params * @param $ids * @return ResultWrapper */ public function addEsData($data, $params, $ids) { if(empty($data) && empty($ids)) return ResultWrapper::success($data); foreach($data as $key => $value){ $modelResult = self::updateEsData($value,$params, $ids[$key]); if(!$modelResult->isSuccess()){ return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } } return ResultWrapper::success(true); } /** * 删除详情es数据 * @param $data * @param $params * @param $ids * @return ResultWrapper */ public function delEsData($data, $params, $ids){ foreach($ids as $key => $value){ if(empty($data)) $data = ['deleteStatus' => StatusCode::$delete, 'updateTime' => time()]; $modelResult = self::updateEsData($data,$params, $value); if(!$modelResult->isSuccess()){ return ResultWrapper::fail($modelResult->getData(), $modelResult->getErrorCode()); } } return ResultWrapper::success(true); } /** * 添加详情es * @param $data * @param $params * @param $id * @return ResultWrapper */ public function updateEsData($data, $params, $id) { $addEsData = [ 'id' => $id, 'enterpriseId' => $this->enterpriseId, 'no' => isset($params['no']) ? $params['no'] : false, 'sourceId' => isset($params['sourceId']) ? $params['sourceId'] : false, 'sourceNo' => isset($params['sourceNo']) ? $params['sourceNo'] : false, 'shopId' => isset($params['shopId']) ? $params['shopId'] : false, 'operatorId' => isset($params['operatorId']) ? $params['operatorId'] : false, 'operatorName' => isset($params['operatorName']) ? $params['operatorName'] : false, 'auditId' => isset($params['auditId']) ? $params['auditId'] : false, 'auditName' => isset($params['auditName']) ? $params['auditName'] : false, 'remark' => isset($params['remark']) ? $params['remark'] : false, 'auditTime' => isset($params['auditTime']) ? $params['auditTime'] : false, 'auditStatus' => isset($params['auditStatus']) ? $params['auditStatus'] : false, 'deleteStatus' => isset($params['deleteStatus']) ? $params['deleteStatus'] : false, 'linkId' => isset($data['linkId']) ? $data['linkId'] : false, 'goodsId' => isset($data['goodsId']) ? $data['goodsId'] : false, 'goodsName' => isset($data['goodsName']) ? $data['goodsName'] : false, 'goodsCode' => isset($data['goodsCode']) ? $data['goodsCode'] : false, 'goodsBasicId' => isset($data['goodsBasicId']) ? $data['goodsBasicId'] : false, 'skuId' => isset($data['skuId']) ? $data['skuId'] : false, 'unitName' => isset($data['unitName']) ? $data['unitName'] : false, 'skuName' => isset($data['skuName']) ? $data['skuName'] : false, 'num' => isset($data['num']) ? $data['num'] : false, 'returnUnitPrice' => isset($data['costUnitPrice']) ? $data['costUnitPrice'] : false, 'saleUnitPrice' => isset($data['costUnitPrice']) ? $data['costUnitPrice'] : false, 'returnTotalPrice' => isset($data['costUnitPrice']) ? $data['costUnitPrice'] : false, 'saleTotalPrice' => isset($data['saleUnitPrice']) ? $data['saleUnitPrice'] : false, 'createTime' => isset($data['createTime']) ? $data['createTime'] : false, 'updateTime' => isset($data['updateTime']) ? $data['updateTime'] : false, ]; foreach($addEsData as $key => $value){ if($value == false){ unset($addEsData[$key]); } } //创建es id $esId = self::esId($id); $result = $this->objDOrderReturnDetails->addUpSearchIndexDocument($addEsData, $esId); if (isset($result['_shards']) && isset($result['_shards']['successful']) && $result['_shards']['successful'] == 1) { return ResultWrapper::success(isset($result['_id']) ? $result['_id'] : false); } return ResultWrapper::fail($result['error']['reason'], ErrorCode::$paramError); } /** * 拼接详情es id * @param $id * @return string */ public function esId($id) { return 'EnterpriseId_' . $this->enterpriseId . '_OrderOutId_' . $id; } /** * Doc: (des="") * User: XMing * Date: 2021/1/20 * Time: 11:47 上午 * @param $selectParams * @return ResultWrapper */ public function getSubRetMoneyToday(array $selectParams = []): ResultWrapper { $todayStart = strtotime(date('Y-m-d 00:00:00', time())); $todayEnd = strtotime(date('Y-m-d 23:59:59', time())); $fields = ' SUM(`returnTotalPrice`) as subRetMoney '; $sql = 'SELECT '.$fields.' FROM qianniao_order_return_details_'.$this->enterpriseId.' as d LEFT JOIN qianniao_order_return_'.$this->enterpriseId.' as o ON o.id = d.linkId WHERE d.deleteStatus = '.StatusCode::$standard.' AND o.auditStatus = '.StatusCode::$auditStatus['auditPass'].' AND o.createTime BETWEEN '.$todayStart.' AND '.$todayEnd; if (isset($selectParams['shopId']) && !empty($selectParams['shopId'])){ $sql .= ' AND o.shopId = '.$selectParams['shopId']; } $sum = $this->objDOrderReturn->query($sql); if ($sum === false){ return ResultWrapper::fail($this->objDOrderReturn->error(),ErrorCode::$dberror); } $sum = isset($sum[0]['subRetMoney']) ? $sum[0]['subRetMoney'] : 0; return ResultWrapper::success($sum); } /** * 获取指定脱货单的审核状态 * @return ResultWrapper */ public function getAuditStatusByOrderId($orderReturnId) { $dbResult = $this->objDOrderReturn->get_field('auditStatus', ['originId'=>$orderReturnId]); if ($dbResult === false){ return ResultWrapper::fail($this->objDOrderReturn->error(),ErrorCode::$dberror); } return ResultWrapper::success($dbResult); } }