123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065 |
- <?php
- /**
- * 订单退货Model
- * Created by PhpStorm.
- * User: 小威
- * Date: 2019/11/1
- * Time: 15:50
- */
- namespace JinDouYun\Model\Order;
- use JinDouYun\Dao\Customer\DCustomer;
- use JinDouYun\Dao\Order\DOrderIndex;
- use JinDouYun\Model\System\MSystemPushMessage;
- use Mall\Framework\Core\ErrorCode;
- use Mall\Framework\Core\ResultWrapper;
- use Mall\Framework\Core\StatusCode;
- use JinDouYun\Model\MBaseModel;
- use JinDouYun\Model\Shop\MShop;
- use JinDouYun\Model\Stock\MInventoryIn;
- use JinDouYun\Model\System\MPrintNum;
- use JinDouYun\Model\Stock\MInventoryOut;
- use JinDouYun\Dao\Order\DOrderReturn;
- use JinDouYun\Dao\Order\DOrderReturnDetails;
- class MOrderReturn extends MBaseModel
- {
- private $objDOrderReturnDetails;
- private $objDOrderReturn;
- private $userCenterId;
- private $enterpriseId;
- public function __construct($enterpriseId, $userCenterId = false)
- {
- $this->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);
- }
- }
|