12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619 |
- <?php
- /**
- * 商品管理模块
- * Created by PhpStorm.
- * User: wxj
- * Date: 2019/10/30
- * Time: 14:02
- */
- namespace JinDouYun\Model\Goods;
- use Exception;
- use JinDouYun\Cache\PageCache;
- use JinDouYun\Controller\GoodsManage\GoodsBasic;
- use JinDouYun\Dao\Stock\DInventoryWarehouse;
- use Mall\Framework\Core\ErrorCode;
- use Mall\Framework\Core\StatusCode;
- use Mall\Framework\Core\ResultWrapper;
- use Mall\Framework\Factory;
- use JinDouYun\Cache\PriceCache;
- use JinDouYun\Cache\ActivityLimitCache;
- use JinDouYun\Cache\SpecCache;
- use JinDouYun\Cache\GoodsBasicRelevant;
- use JinDouYun\Controller\Common\Logger;
- use JinDouYun\Model\Commission\MCommissionSetting;
- use JinDouYun\Model\Merchant\MMerchant;
- use JinDouYun\Model\Purchase\MPurchase;
- use JinDouYun\Model\Purchase\MSupplier;
- use JinDouYun\Model\System\MDeliverySetting;
- use JinDouYun\Model\GoodsManage\MSku;
- use JinDouYun\Model\GoodsManage\MGoodsBasic;
- use JinDouYun\Model\GoodsManage\MGoodsBrand;
- use JinDouYun\Model\GoodsCategory\MGoodsCategory;
- use JinDouYun\Model\Shop\MShop;
- use JinDouYun\Model\Stock\MInventory;
- use JinDouYun\Model\Price\MPrice;
- use JinDouYun\Model\Price\MPriceAdjustment;
- use JinDouYun\Model\MBaseModel;
- use JinDouYun\Model\Cart\MCart;
- use JinDouYun\Model\Customer\MCustomer;
- use JinDouYun\Model\Market\MActivity;
- use JinDouYun\Model\Customer\MCustomerVisitsLog;
- use JinDouYun\Model\Goods\MGoodsSupport;
- use JinDouYun\Model\Price\MCustomerTypePriceAdjustment;
- use JinDouYun\Dao\Enterprise\DEnterprise;
- use JinDouYun\Dao\GoodsManage\DSku;
- use JinDouYun\Dao\Shop\DShop;
- use JinDouYun\Dao\Goods\DGoods;
- use JinDouYun\Dao\GoodsManage\DGoodsBasic;
- use Util\Common\ChineseCharacter;
- class MGoods extends MBaseModel
- {
- /**
- * @var DGoods
- */
- private $objDGoods;
- /**
- * @var MGoodsBasic
- */
- private $objMGoodsBasic;
- /**
- * @var MGoodsCategory
- */
- private $objMGoodsCategory;
- /**
- * @var MGoodsBrand
- */
- private $objMGoodsBrand;
- /**
- * @var MShop
- */
- private $objMShop;
- /**
- * @var MInventory
- */
- private $objMInventory;
- /**
- * @var MPrice
- */
- private $objMPrice;
- /**
- * @var MPriceAdjustment
- */
- private $objMPriceAdjustment;
- /**
- * @var MGoodsCollect
- */
- private $objMGoodsCollect;
- /**
- * @var MCustomer
- */
- private $objMCustomer;
- /**
- * 客户ID
- * @var integer
- */
- private $useCustomerId = null;
- /**
- * 客户类型
- * @var integer
- */
- private $customerType = null;
- /**
- * @var int
- */
- private $cutTable = 1;//商品按照企业id分表
- /**
- * @var int
- */
- private $enterpriseId;
- /**
- * true=>app false=>manage
- * @var bool
- */
- public $isFront;//是否是前台调用此Model
- /**
- * @var
- */
- private $userCenterId;
- /**
- * @var null
- */
- private $selectUserCenterId = null;//选择的用户id
- /**
- * @var ActivityLimitCache
- */
- private $objActivityLimitCache;
- /**
- * @var SpecCache
- */
- private $objSpecCache;
- /**
- * @var MActivity
- */
- private $objMActivity;
- /**
- * 公共数据
- * @var array
- */
- private $commonMapping = [];
- /**
- * @var MSku
- */
- private $objMSku;
- /**
- * @var array
- */
- private $allMappingSpec = [];
- /**
- * @var DGoodsBasic
- */
- private $objDGoodsBasic;
- /**
- * @var MCommissionSetting
- */
- private $objMCommissionSetting;
- /**
- * @var DSku
- */
- private $objDSku;
- /**
- * @var DShop
- */
- private $objDShop;
- /**
- * MGoods constructor.
- * @param $enterpriseId
- * @param bool $isFront
- * @param $userCenterId
- * @throws Exception
- */
- public function __construct($enterpriseId, $isFront = false, $userCenterId)
- {
- $this->userCenterId = $userCenterId;
- $this->enterpriseId = $enterpriseId;
- $this->isFront = $isFront;
- parent::__construct($enterpriseId, $userCenterId);
- $this->objMGoodsBasic = new MGoodsBasic($userCenterId, $enterpriseId);
- $this->objMGoodsBrand = new MGoodsBrand($userCenterId, $enterpriseId);
- $this->objMGoodsCategory = new MGoodsCategory($userCenterId, $enterpriseId);
- $this->objMShop = new MShop($enterpriseId, $userCenterId);
- $this->objMPrice = new MPrice($this->userCenterId, $enterpriseId);
- $this->objMPriceAdjustment = new MPriceAdjustment($userCenterId, $enterpriseId);
- $this->objMGoodsCollect = new MGoodsCollect($enterpriseId, $userCenterId);
- $this->objMCustomer = new MCustomer($this->enterpriseId, $this->userCenterId);
- $this->objActivityLimitCache = new ActivityLimitCache($this->enterpriseId);
- $this->objMActivity = new MActivity($this->userCenterId, $this->enterpriseId);
- $this->objMSku = new MSku($this->userCenterId, $this->enterpriseId);
- $this->objSpecCache = new SpecCache($this->enterpriseId);
- $this->objMInventory = new MInventory($this->enterpriseId,$this->userCenterId);
- $this->objMCommissionSetting = new MCommissionSetting($this->enterpriseId,$this->userCenterId);
- $this->objDSku = new DSku();
- $this->objDShop = new DShop();
- $this->objDGoodsBasic = new DGoodsBasic();
- $this->objDGoods = new DGoods('default');
- $tableName = $this->objDGoods->getTableName('qianniao_goods_', $this->enterpriseId, $this->cutTable);
- $this->objDGoods->setTable($tableName);
- $this->objDGoods->setSearchIndex('goods_search')->setType('goods');
- $this->objDShop->setTable('qianniao_shop_1');
- $this->objDSku->setTable('qianniao_sku_'.$this->enterpriseId);
- if ($this->isFront && $this->userCenterId) {
- self::__initCustomer($this->userCenterId, $this->enterpriseId);
- }
- }
- /**
- * @param $userCenterId
- * @param $enterpriseId
- * @throws Exception
- */
- public function __initCustomer($userCenterId, $enterpriseId)
- {
- $objMCustomer = new MCustomer($enterpriseId, $userCenterId);
- $dbResult = $objMCustomer->getCustomerInfoByUserCenterId($userCenterId);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), $dbResult->getErrorCode());
- }
- $customer = $dbResult->getData();
- $this->customerType = isset($customer['type']) ? $customer['type'] : 0;
- $this->useCustomerId = $customer['id'];
- }
- /**
- * Doc: (des="")
- * User: XMing
- * Date: 2020/8/25
- * Time: 4:24 下午
- * @param array $rows
- * @param $v
- * @param $item
- * @param int $index
- */
- private function buildExportFinalData(&$rows, $v, $item, int $index)
- {
- $rows['id'] = '';
- $rows['goodsCode'] = '';
- $rows['goodsName'] = '';
- $rows['categoryName'] = '';
- $rows['brandName'] = '';
- $rows['expireTime'] = '';
- $rows['inventoryTotalNum'] = '';
- $rows['salesTotalNum'] = '';
- $rows['enableStatusMsg'] = '';
- $rows['shopName'] = '';
- $rows['tag'] = '';
- $rows['describe'] = '';
- $rows['storageCode'] = '';
- $rows['createTime'] = '';
- if ($index == 0){
- $rows['id'] = $v['id'];
- $rows['goodsCode'] = $v['goodsCode'];
- $rows['goodsName'] = $v['goodsName'];
- $rows['categoryName'] = $v['categoryName'];
- $rows['brandName'] = empty($v['brandName']) ? $v['brandName'] : '无';
- $rows['expireTime'] = $v['expireTime'];
- $rows['inventoryTotalNum'] = !empty($v['inventoryNum']) ?$v['inventoryNum']:0;
- $rows['salesTotalNum'] = $v['salesTotalNum'];
- $rows['enableStatusMsg'] = $v['enableStatusMsg'];
- $rows['shopName'] = $v['shopName'];
- $rows['tag'] = empty($v['tag']) ? $v['tag'] : '无';
- $rows['describe'] = $v['describe'];;
- $rows['storageCode'] = empty($v['storage']) ? $v['storage'] : '无';
- $rows['createTime'] = $v['createTime'];
- }
- $rows['unitName'] = $item['unitName'];
- $rows['specGroup'] = $item['specGroup'];
- $rows['marketPrice'] = $item['marketPrice'];
- $rows['salePrice'] = $item['salePrice'];
- $rows['ladderPriceMsg'] = $item['ladderPriceMsg'];
- $rows['barCode'] = $item['barCode'];
- $rows['skuMsg'] = $item['skuMsg'];
- $rows['conversion'] = $item['conversion'];
- }
- /**
- * Doc: (des="")
- * User: XMing
- * Date: 2020/8/25
- * Time: 4:17 下午
- * @param array $result
- *
- */
- private function exportCsv( $result)
- {
- // //导出到本地
- header("Content-type:application/vnd.ms-excel");
- header("Content-Disposition:filename=GoodsBasicCsv.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['specMultiple'] 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;
- }
-
- /**
- * 商品列表
- * @param array $result
- */
- private function exportGoodsList($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; //计数器
- foreach ($result as $v) { //循环数据
- $num++;
- if ($num == $limit) {
- ob_flush(); //释放内存
- flush();
- }
- $rows['id'] = isset($v['id']) ? $v['id'] : ''; //ID
- $rows['code'] = isset($v['code']) ? $v['code'] : ''; //商品编码
- $rows['title'] = isset($v['title']) ? $v['title'] : ''; //商品名称
- $rows['categoryName'] = isset($v['categoryName']) ? $v['categoryName'] : '无'; //商品分类
- $rows['brandName'] = isset($v['brandName']) ? $v['brandName'] : '无'; //商品品牌
- // $rows['materielName'] = isset($v['materielName']) ? $v['materielName'] : ''; //保质期
- $rows['inventorTotal'] = isset($v['inventorTotal']) ? $v['inventorTotal'] : 0; //总库存
- $rows['realSalesNum'] = isset($v['realSalesNum']) ? $v['realSalesNum'] : 0; //总销量
- $rows['enableStatus'] = isset($v['enableStatus']) && $v['enableStatus']== 5 ? '上架' : '下架'; //当前状态
- $rows['shopName'] = isset($v['shopName']) ? $v['shopName'] : ''; //所属店铺
- $rows['tag'] = empty($v['tag']) ? $v['tag'] : '无';; //关键词
- // $rows['materielName'] = isset($v['materielName']) ? $v['materielName'] : ''; //商品卖点
- // $rows['materielName'] = isset($v['materielName']) ? $v['materielName'] : ''; //货架编码
- $rows['createTime'] = date("Y-m-d H:i:s",$v['createTime']) ; //发布日期
- $rows['unitNameMaster'] = isset($v['unitNameMaster']) ? $v['unitNameMaster'] : ''; //计量单位
- $rows['specGroup'] = empty($v['specGroup']) ? '无' : self::createSpecName(json_decode($v['specGroup'],true));; //规格
- // $rows['materielName'] = isset($v['materielName']) ? $v['materielName'] : ''; //市场价格(元)
- // $rows['materielName'] = isset($v['materielName']) ? $v['materielName'] : ''; //销售价格(元)
- // $rows['materielName'] = isset($v['materielName']) ? $v['materielName'] : ''; //阶梯价格
- $rows['barCode'] = isset($v['barCode']) ? $v['barCode'] : '无'; //商品条码
- // $rows['materielName'] = isset($v['materielName']) ? $v['materielName'] : ''; //主单位(主/辅)
- // $rows['materielName'] = isset($v['materielName']) ? $v['materielName'] : ''; //主辅换算比率
-
- foreach ($rows as $kk => $vv) {
- $rs[$kk] = mb_convert_encoding($vv, 'GBK', 'utf-8'); //转译编码
- }
- fputcsv($fp, $rs);
-
- $rows = [];
- }
- }
- /**
- * 兼容原来的数据
- * 将sku转化为spec格式
- * @param $data
- * @return mixed
- */
- public function formatSkuTransSpecMapping($data)
- {
- if (empty($data)) {
- return $data;
- }
- foreach ($data as &$details) {
- if (!isset($details['specType'])) {
- $details['specType'] = StatusCode::$specType['single'];//之前es中没有
- }
- if ($details['specType'] == StatusCode::$specType['multiple']) {
- continue;
- }
- $skuData = $details['skuData'];
- if (empty($skuData)) {
- continue;
- }
- $params = [];
- $specMultiple = [];
- foreach ($skuData as $row) {
- $params[] = [
- 'name' => $row['unitName'],
- 'specValueId' => $this->objSpecCache->getIdBySpecName($row['unitName']),
- ];
- //规格明细
- $specMultiple[] = [
- 'id' => $row['skuId'],//skuid
- 'isMaster' => $row['isMaster'],
- 'conversion' => $row['conversion'],
- 'specGroup' => [
- [
- 'specId' => $this->objSpecCache->getIdBySpecName('计量单位'),
- 'specIdName' => '计量单位',
- 'specValueId' => $this->objSpecCache->getIdBySpecName($row['unitName']),
- 'specValueIdName' => $row['unitName'],
- ]
- ],
- 'specImage' => $details['images'],
- ];
- }
- //规格组
- $specGroup = [
- [
- 'groupSpec' => [
- 'name' => '计量单位',
- 'specId' => $this->objSpecCache->getIdBySpecName('计量单位'),
- ],
- 'params' => $params
- ]
- ];
- $details['specGroup'] = $specGroup;
- $details['specMultiple'] = $specMultiple;
- }
- return $data;
- }
- /**
- * Doc: (des="商品数据es写入")
- * User: XMing
- * Date: 2020/7/20
- * Time: 9:59 上午
- * @param int $goodsId
- * @return bool
- */
- public function updateEsData_1(int $goodsId)
- {
- $fields = 'g.*,
- s.warehouseId,
- b.title,b.categoryId,b.categoryPath,b.brandId,b.images,b.describe,b.tag,b.expireTime,b.noSalesShop,b.description';
- $sql = 'select '.$fields.' from qianniao_goods_'.$this->enterpriseId.' as g
- left join qianniao_goods_basic_'.$this->enterpriseId.' as b
- on b.id = g.basicGoodsId
- left join qianniao_shop_1 as s
- on g.shopId = s.id
- where g.id = '.$goodsId;
- $goods = $this->objDGoods->query($sql);
- if ($goods === false){
- return false;
- }
- $goods = isset($goods[0]) ? $goods[0] : [];
- if (empty($goods)){
- return false;
- }
- isset($goods['images']) && is_string($goods['images']) && $goods['images'] = json_decode($goods['images'],true);
- isset($goods['salesNum']) && is_string($goods['salesNum']) && $goods['salesNum'] = json_decode($goods['salesNum'],true);
- $goods['code'] = createCode(StatusCode::$code['goodsBasic']['prefix'], $goods['basicGoodsId'], StatusCode::$code['goodsBasic']['length']);//当前状态
- $_id = self::createEsDocumentId($goodsId);
- $result = $this->objDGoods->addUpSearchIndexDocument($goods,$_id);
- if (isset($result['_shards']) && isset($result['_shards']['successful']) && $result['_shards']['successful'] == 1) {
- return true;
- }
- return false;
- }
- /**
- * todo(这个方法需要更新掉)
- * @param $goodsId
- * @throws Exception
- */
- public function updateEsData($goodsId)
- {
- //每次查询一遍,避免商品在数据库存在,在ES中不存在的情况
- $goods = $this->objDGoods->get_by('id', $goodsId);
- if ($goods !== false) {
- //查出商铺对应的仓库id
- $shop = $this->objMShop->getShopName([$goods['shopId']]);
- $shop = !empty($shop) ? array_shift($shop) : [];
- $goods['warehouseId'] = isset($shop['warehouseId']) ? $shop['warehouseId'] : 0;
- $goods['enterpriseId'] = $this->enterpriseId;
- //$goods['specification'] = json_decode($goods['specification'], true);
- $goods['salesNum'] = empty($goods['salesNum']) ? $goods['salesNum'] : json_decode($goods['salesNum'], true);
- $_id = self::createEsDocumentId($goodsId);
- $result = $this->objDGoods->addUpSearchIndexDocument($goods, $_id);
- if (isset($result['_shards']) && isset($result['_shards']['successful']) && $result['_shards']['successful'] == 1) {
- //echo "es操作成功";die;
- } else {
- file_put_contents('/www/wwwroot/logs/api.junhailan.com/elasticsearch.log', date('Y-m-d H:i:s') . '操作商品es错误,错误原因' . var_export($result, true) . PHP_EOL, FILE_APPEND);
- }
- }
- }
- /**
- * Doc: (des="生成文档id")
- * User: XMing
- * Date: 2020/7/20
- * Time: 10:49 上午
- * @param $goodsId
- * @return string
- */
- private function createEsDocumentId($goodsId)
- {
- return 'EnterpriseId_' . $this->enterpriseId . '_GoodsId_' . $goodsId;
- }
- /**
- * 添加商品
- * @param $params
- * @return ResultWrapper
- * @throws Exception
- */
- public function addGoods($params)
- {
-
- $existResult = $this->existGoodsInShop($params['shopId'], $params['basicGoodsId']);
- if ($existResult->isSuccess() == false) {
- return ResultWrapper::fail($existResult->getData(), $existResult->getErrorCode());
- }
- $basic = $this->objMGoodsBasic->getBasicById($params['basicGoodsId']);
- if (empty($basic)){
- return ResultWrapper::fail('未获取到物料信息',ErrorCode::$paramError);
- }
- $params['merchantId'] = $basic['merchantId'];
- $params['supplierId'] = getArrayItem($basic,'supplierId',0);
- $priceData = $params['priceData'];
- unset($params['priceData']);
- $priceAdjustmentData['createUserName'] = $params['createUserName'];
- unset($params['createUserName']);
- $priceAdjustmentData['shopName'] = $params['shopName'];
- unset($params['shopName']);
- $priceAdjustmentData['goodsName'] = $params['goodsName'];
- unset($params['goodsName']);
- $commissionResult = $this->objMCommissionSetting->getSetting('goods');
- if (!$commissionResult->isSuccess()){
- return ResultWrapper::fail($commissionResult->getData(),$commissionResult->getErrorCode());
- }
- $params['isJoinCommission'] = !empty($commissionResult->getData()) ? $commissionResult->getData() : StatusCode::$delete;
- $this->objDGoods->beginTransaction();
- $params['staffId'] = $this->userCenterId;
- $goodsId = $this->objDGoods->insert($params);
- if ($goodsId === false) {
- $this->objDGoods->rollBack();
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- //self::updateEsData($goodsId);
- if (empty($priceData)) {
- $this->objDGoods->commit();
- return ResultWrapper::success($goodsId);
- }
- // 同步生成商品价格调价单
- $priceAdjustmentData = self::savePriceData($goodsId, $params, $priceData, $priceAdjustmentData, 'add');
- $effectiveParams = [
- 'createTime' => time(),
- 'effectiveUserName' => $priceAdjustmentData['createUserName'],
- 'effectiveUserId' => $this->userCenterId,
- ];
- $result = $this->objMPriceAdjustment->addAndEffective([$priceAdjustmentData], $effectiveParams);
- if (!$result->isSuccess()) {
- $this->objDGoods->rollBack();
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- $this->objDGoods->commit();
- // 每发布一件商品需要清除一下小程序商品首页的缓存;
- $objPageCache = new PageCache();
- $objPageCache->delPage();
- return ResultWrapper::success($goodsId);
- }
- public function existGoodsInShop($shopId, $basicGoodsId)
- {
- $where = [
- 'shopId' => $shopId,
- 'basicGoodsId' => $basicGoodsId,
- 'deleteStatus' => StatusCode::$standard
- ];
- $result = $this->objDGoods->select($where);
- if ($result === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- if (!empty($result)) {
- return ResultWrapper::fail('商铺下已存在相同商品', ErrorCode::$dberror);
- }
- return ResultWrapper::success('未添加此商品');
- }
- /**
- * 生效商品价格
- */
- public function savePriceData($goodsId, $params, $priceData, $priceAdjustmentData, $action)
- {
- $priceAdjustmentCommonData = [
- 'createUserId' => $this->userCenterId,
- 'goodsId' => $goodsId,
- 'saleType' => 1,
- 'salePriceType' => 1,
- 'salePriceAreaType' => 1,
- 'shopId' => $params['shopId'],
- 'createTime' => time(),
- 'updatetime' => time(),
- ];
- foreach ($priceData as $key => $value) {
- $savePriceData = [
- 'salePrice' => isset($value['salePrice']) ? floatval($value['salePrice']) : 0,
- 'memberPrice' => isset($value['memberPrice']) ? floatval($value['memberPrice']) : 0,
- 'marketPrice' => isset($value['marketPrice']) ? $value['marketPrice'] : 0,
- 'ladderPrice' => $value['ladderPrice'],
- 'unitName' => isset($value['unitName']) ? $value['unitName'] : '',
- 'unitId' => isset($value['unitId']) ? $value['unitId'] : 0,
- 'enabledLadder' => $value['enabledLadder'],
- 'setNum' => isset($value['setNum']) ? $value['setNum'] : 0,//起订数量
- 'isSale' => getArrayItem($value, 'isSale', StatusCode::$standard),
- 'minUnitPriceConvert' => getArrayItem($value, 'minUnitPriceConvert', 0),
- ];
- $priceAdjustmentData['salePrice'][$value['id']] = $savePriceData;
- }
- $priceAdjustmentData['salePrice'] = json_encode($priceAdjustmentData['salePrice']);
- $priceAdjustmentData = array_merge($priceAdjustmentData, $priceAdjustmentCommonData);
- return $priceAdjustmentData;
- }
- /**
- * 编辑商品
- * @param $params
- * @return ResultWrapper
- * @throws Exception
- */
- public function editGoods($params)
- {
- if (empty($params['id'])) {
- return ResultWrapper::fail('没有指定要修改的商品id', ErrorCode::$paramError);
- }
- $updateGoodsId = $params['id'];
- unset($params['id']);
- $priceData = $params['priceData'];
- unset($params['priceData']);
- $priceAdjustmentData['createUserName'] = $params['createUserName'];
- unset($params['createUserName']);
- $priceAdjustmentData['shopName'] = $params['shopName'];
- unset($params['shopName']);
- $priceAdjustmentData['goodsName'] = $params['goodsName'];
- unset($params['goodsName']);
- $beginTransactionStatus = $this->objDGoods->beginTransaction();
- $dbResult = $this->objDGoods->update($params, $updateGoodsId);
- if ($dbResult === false) {
- $this->objDGoods->rollBack();
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- // self::updateEsData($updateGoodsId);
- if (empty($priceData)) {
- return ResultWrapper::success($updateGoodsId);
- }
- // 同步生成商品价格调价单
- $priceAdjustmentData = self::savePriceData($updateGoodsId, $params, $priceData, $priceAdjustmentData, 'edit');
- $effectiveParams = [
- 'createTime' => time(),
- 'effectiveUserName' => $priceAdjustmentData['createUserName'],
- 'effectiveUserId' => $this->userCenterId,
- ];
- $result = $this->objMPriceAdjustment->addAndEffective([$priceAdjustmentData], $effectiveParams);
- if (!$result->isSuccess()) {
- $this->objDGoods->rollBack();
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- if($beginTransactionStatus){
- $this->objDGoods->commit();
- }
- return ResultWrapper::success($dbResult);
- }
- /**
- * 修改商品的销量
- * @param $goodsId
- * @param $skuId
- * @param $num 下单 加销量传正数,退货减销量传负数
- * @return bool
- */
- public function updateSalesNum($goodsId, $skuId, $num)
- {
- $goodsInfo = $this->objDGoods->get($goodsId);
- $salesNumInfo = empty($goodsInfo['salesNum']) ? [] : json_decode($goodsInfo['salesNum'], true);
- $exist = false;
- $realSalesNum = $goodsInfo['realSalesNum'];
- foreach ($salesNumInfo as &$salesNum) {
- if (isset($salesNum['skuId']) && $salesNum['skuId'] == $skuId) {
- $salesNum['salesNum'] = $salesNum['salesNum'] + $num;
- $exist = true;
- }
- }
- // if(!empty($salesNumInfo)){
- // $skuIds = array_column($salesNumInfo,'skuId');
- // var_dump(array_search($skuId, $skuIds));
- // var_dump($skuIds);
- // var_dump($skuId);
- // if(array_search($skuId, $skuIds) === false){
- // var_dump(111);
- // array_push($salesNumInfo, ['skuId' => $skuId, 'salesNum' => $num]);
- // }
- // }
- if (!$exist) {
- array_push($salesNumInfo, ['skuId' => $skuId, 'salesNum' => $num]);
- }
- //循环销量数据,更新真实销量
- $objDSku = new DSku();
- $objDSku->setTable('qianniao_sku_'.$this->enterpriseId);
- //查询sku表
- $skuResult = $objDSku->get(['id'=>$skuId]);
- if ($skuResult === false) {
- return false;
- }
- if(empty($skuResult)){
- return false;
- }
- if($skuResult['isMaster'] == StatusCode::$standard){//主单位直接累加
- $realSalesNum = $realSalesNum + $num;
- }
- if($skuResult['isMaster'] == StatusCode::$delete){ //副单位换算
- $realSalesNum = $realSalesNum + bcmul($num,$skuResult['conversion']);
- }
- $result = $this->objDGoods->update(['salesNum' => json_encode($salesNumInfo),'realSalesNum'=>$realSalesNum], $goodsId);
- if ($result) {
- //更新ES
- //$_id = self::createEsDocumentId($goodsId);
- //$this->objDGoods->esupdateTypeFieldVaule(['salesNum' => $salesNumInfo], $_id);
- return true;
- }
- return false;
- }
- /**
- * Doc: (des="审核商品")
- * User: XMing
- * Date: 2020/12/7
- * Time: 11:32 上午
- * @param int $id
- * @return ResultWrapper
- */
- public function audit(int $id): ResultWrapper
- {
- $dbResult = $this->objDGoods->update(['auditStatus' => StatusCode::$auditStatus['auditPass'] ,'updateTime' => time()], $id);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- /*
- //更新ES
- $_id = self::createEsDocumentId($id);
- $this->objDGoods->esupdateTypeFieldVaule(['auditStatus' => StatusCode::$auditStatus['auditPass'],'updateTime' => time()], $_id); */
- return ResultWrapper::success(true);
- }
- /**
- * 删除商品 只支持单个
- * @param $delGoodsIds
- * @return ResultWrapper
- * @throws Exception
- */
- public function delGoods($delGoodsIds)
- {
- if (empty($delGoodsIds)) {
- return ResultWrapper::fail('参数错误', ErrorCode::$paramError);
- }
- $this->objDGoods->beginTransaction();
- $dbResult = $this->objDGoods->update(['deleteStatus' => StatusCode::$delete], $delGoodsIds);
- if ($dbResult === false) {
- $this->objDGoods->rollBack();
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- } else {
- $result = self::delGoodsBasic($delGoodsIds);
- if (!$result->isSuccess()){
- $this->objDGoods->rollBack();
- return ResultWrapper::fail($result->getData(),$result->getErrorCode());
- }
- $this->objDGoods->commit();
- /*
- //在ES删除
- $_id = self::createEsDocumentId($delGoodsIds);
- $this->objDGoods->esdeleteTypeDocument($_id); */
- return ResultWrapper::success($dbResult);
- }
- }
- /**
- * 单店铺删除基础商品资料
- * @param int $id
- * @return ResultWrapper
- * @throws Exception
- */
- public function delGoodsBasic(int $id)
- {
- $objDEnterprise = new DEnterprise();
- $objDEnterprise->setTable('qianniao_enterprise_1');
- $field = $objDEnterprise->get_field('scope',['id'=>$this->enterpriseId]);
- if ($field === false){
- Logger::logs(E_USER_ERROR,'查询错误',__CLASS__,__LINE__,$objDEnterprise->error());
- return ResultWrapper::fail($objDEnterprise->error(),ErrorCode::$dberror);
- }
- if ($field == StatusCode::$standard){
- return ResultWrapper::success($id);
- }
- $basicGoodsId = $this->objDGoods->get_field('basicGoodsId',['id'=>$id]);
- if ($field === false){
- Logger::logs(E_USER_ERROR,'查询错误',__CLASS__,__LINE__,$this->objDGoods->error());
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- $result = $this->objMGoodsBasic->delGoodsBasic($basicGoodsId);
- if (!$result->isSuccess()){
- return ResultWrapper::fail($result->getData(),$result->getErrorCode());
- }
- return ResultWrapper::success('操作成功');
- }
- /**
- * Doc: (des="")
- * User: XMing
- * Date: 2020/12/24
- * Time: 2:56 下午
- * @param $selectParams
- * @return ResultWrapper
- * @throws Exception
- */
- private function getCustomerIdAndCustomerTypeByUserCenterId($selectParams): ResultWrapper
- {
- $customer = [];
- if (isset($selectParams['userCenterId']) && !empty($selectParams['userCenterId'])){
- $objMCustomer = new MCustomer($this->enterpriseId,$this->userCenterId);
- $customerResult = $objMCustomer->getCustomerDataByUserCenterIdAndEnterpriseId($selectParams['userCenterId']);
- if (!$customerResult->isSuccess()){
- return ResultWrapper::fail($customerResult->getData(),$customerResult->getErrorCode());
- }
- $customer = $customerResult->getData();
- $this->useCustomerId = getArrayItem($customer,'id',0);
- $this->customerType = getArrayItem($customer,'type',0);
- }
- return ResultWrapper::success($customer);
- }
- /**
- * 获取指定商品信息
- * @param $goodsId
- * @param int $userCenterId
- * @return ResultWrapper
- * @throws Exception
- */
- public function getGoodsInfo($goodsId,$userCenterId = null)
- {
- // 获取商品表数据
- $dbResult = $this->objDGoods->get_by('id', $goodsId);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- if( empty($dbResult) ){
- return ResultWrapper::fail('查询的商品数据为空', ErrorCode::$contentNotExists);
- }
- // 处理客户列表数据
- $formatGoodsResult = self::formatManageGoodsLists([$dbResult]);
- if (!$formatGoodsResult->isSuccess()){
- return ResultWrapper::fail($formatGoodsResult->getData(),$formatGoodsResult->getErrorCode());
- }
- $formatGoods = $formatGoodsResult->getData();
- $goodsData = array_shift($formatGoods);
- // 处理商品详情数据
- $formatDetailsResult = self::formatDetails($goodsData);
- if (!$formatDetailsResult->isSuccess()){
- return ResultWrapper::fail($formatDetailsResult->getData(),$formatDetailsResult->getErrorCode());
- }
- $goodsDetails = $formatDetailsResult->getData();
- // 格式化经营屏蔽数据
- $customerNotResult = self::formatNotCustomer($goodsDetails);
- if (!$customerNotResult->isSuccess()){
- return ResultWrapper::fail($customerNotResult->getData(),$customerNotResult->getErrorCode());
- }
- $dbResult = $customerNotResult->getData();
- return ResultWrapper::success($dbResult);
- }
- /**
- * Doc: (des="获取所有商品数据")
- * User: XMing
- * Date: 2020/11/30
- * Time: 10:29 上午
- * @param array $selectParams 查询条件
- * @param string $fields 查询字段
- * @param string $order 排序方式
- * @param bool $export 是否为导出 true=>导出
- * @return ResultWrapper
- * @throws Exception
- */
- public function getAllGoods(array $selectParams,string $fields = '*',string $order = 'topTime DESC, sort desc, createTime desc',bool $export = false): ResultWrapper
- {
- $limit = $selectParams['limit'];
- unset($selectParams['limit']);
- $offset = $selectParams['offset'];
- unset($selectParams['offset']);
- $returnData = [
- 'data' => [],
- 'total' => 0,
- ];
- $where = "deleteStatus =" . StatusCode::$standard;
- if (isset($selectParams['enableStatus'])) {
- $where .= " AND enableStatus = " . $selectParams['enableStatus'];
- }
- if (isset($selectParams['shopId'])) {
- if (is_array($selectParams['shopId'])) {
- $where .= " AND shopId in (" . implode(',', $selectParams['shopId']) . ')';
- } else {
- $where .= " AND shopId = " . $selectParams['shopId'];
- }
- }
- if (isset($selectParams['isOption']) && !empty($selectParams['isOption'])){
- $where .= " AND isOption = " . $selectParams['isOption'];
- }
- if (isset($selectParams['supplierId']) && !empty($selectParams['supplierId'])){
- $where .= ' AND supplierId = '.$selectParams['supplierId'];
- }
- if (isset($selectParams['auditStatus']) && !empty($selectParams['auditStatus'])){
- $where .= " AND auditStatus = " . $selectParams['auditStatus'];
- }
-
- if (isset($selectParams['inStock'])) {
- // 获取有无库存的基本资料id
- $goodsBasicIdResult = self::getInOrOutOfStockGoodsBasicId($selectParams['inStock']);
- if (!$goodsBasicIdResult->isSuccess()) {
- return ResultWrapper::fail($goodsBasicIdResult->getData(), $goodsBasicIdResult->getErrorCode());
- }
- $goodsBasicIds = $goodsBasicIdResult->getData();
- if (!empty($goodsBasicIds)) {
- $where .= " AND (";
- foreach ($goodsBasicIds as $key => $goodsBasicId) {
- $condition = $key ? " OR " : "";
- $where .= $condition . '(basicGoodsId = ' . $goodsBasicId['basicGoodsId'] . ' and shopId=' . $goodsBasicId['shopId'] . ')';
- }
- $where .= ")";
- }
- }
-
- if( isset($selectParams['merchantId']) ){
- $where .= ' AND merchantId = '.$selectParams['merchantId'];
- } else {
- if (isset($selectParams['ifMerchant']) ){
- if($selectParams['ifMerchant'] == StatusCode::$delete){
- $where .= ' AND merchantId = 0';
- } else {
- $where .= ' AND merchantId <> 0';
- }
- }
- }
- // 查询总条数
- $total = $this->objDGoods->count($where);
- if ($total === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- if(empty($total)){
- return ResultWrapper::success($returnData);
- }
-
- //数据域
- //$selectParams = parent::getStaffQueryParams($where, 'staffId');//商品不应该有数据域
- //$selectParams = parent::getShopIdQueryParams($selectParams);//店铺数据域
- // 导出
- if ($export === true){
- self::exportGoods($where,'db');
- exit;
- }
- $dbResult = $this->objDGoods->select($where, $fields, $order, $limit, $offset);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- // 格式化商品数据
- $formatResult = self::formatManageGoodsLists($dbResult);
- if (!$formatResult->isSuccess()){
- return ResultWrapper::fail($formatResult->getData(),$formatResult->getErrorCode());
- }
- $return = [
- 'data' => $formatResult->getData(),
- 'total' =>($total) ? intval($total) : 0,
- ];
- return ResultWrapper::success($return);
- }
-
- /**
- * 商品列表页
- */
- public function getAllGoodsList($selectParams,$export=0)
- {
- $goodsTab = 'qianniao_goods_'.$this->enterpriseId;
- $goodsBasicTab = 'qianniao_goods_basic_'.$this->enterpriseId;
- $inventoryWarehouse = 'qianniao_inventory_warehouse_'.$this->enterpriseId;
- $shopTab = 'qianniao_shop_1';
- // 初始化表
- $this->objDGoods->setTable($goodsTab);
- $objDGoodsBasic = new DGoodsBasic('default');
- $objDGoodsBasic->setTable($goodsBasicTab);
- $objDInventoryWarehouse = new DInventoryWarehouse('stock');
- $objDInventoryWarehouse->setTable($inventoryWarehouse);
- $stockDbName = Factory::config()->get('db.stock.dbname');
-
- // 组装检索sql
- $whereSql = '';
- if(isset($selectParams['keywordType']) && !empty($selectParams['keywordType'])){
- $whereSql .= self::assemblySql($selectParams['keywordType']);
- }
- // 商品关键字
-
- if (isset($selectParams['keyword']) && !empty($selectParams['keyword'])){
- $keywordId = 0;
- preg_match_all( '/\d+/' , $selectParams['keyword'] , $arr);
- if (isset($arr) && is_array($arr)){
- $arr = array_shift($arr);
- $keywordId = isset($arr[0]) ? (int)floatval($arr[0]) : 0;
- }
- $whereSql .= ' AND ( tmp.title like "%'.$selectParams['keyword'].'%" ';
- if (!empty($keywordId)){
- $whereSql .= ' OR tmp.basicId = '.$keywordId;
- }
- $whereSql .= ' ) ';
- }
- $where ='';
- if( isset($selectParams['merchantId']) && !empty($selectParams['merchantId']) ){
- $where .= ' AND g.merchantId = '.$selectParams['merchantId'];
- } else {
- if (isset($selectParams['ifMerchant']) && !empty($selectParams['ifMerchant'])){
- if($selectParams['ifMerchant'] == StatusCode::$delete){
- $where .= ' AND g.merchantId = 0 ';
- } else {
- $where .= ' AND g.merchantId <> 0 ';
- }
- }
- }
-
- //分类路径
- if (isset($selectParams['categoryPath']) && !empty($selectParams['categoryPath'])){
- if (is_string($selectParams['categoryPath']) || is_int($selectParams['categoryPath'])){
- $selectParams['categoryPath'] = explode(',',$selectParams['categoryPath']);
- }
- $endPathId = array_pop($selectParams['categoryPath']);
- if (!empty($endPathId)){
- $whereSql .= ' and (find_in_set('.$endPathId.',tmp.categoryPath) or find_in_set('.$endPathId.',tmp.categoryId)) ';
- }
- }
-
- // 商品品牌
- if(isset($selectParams['brandId']) && !empty($selectParams['brandId'])){
- $whereSql .=' and tmp.brandId ='.$selectParams['brandId'];
- }
- // 销售店铺
- if(isset($selectParams['shopId']) && !empty($selectParams['shopId'])){
- $whereSql .=' and tmp.shopId ='.$selectParams['shopId'];
- }
- // 上下架
- if(isset($selectParams['enableStatus']) && !empty($selectParams['enableStatus'])){
- $whereSql .=' and tmp.enableStatus ='.$selectParams['enableStatus'];
- }
-
- if (isset($selectParams['limit']) && isset($selectParams['offset'])) {
- $limit = ' limit ' . $selectParams['offset'] . ',' . $selectParams['limit'];
- }else{
- $limit = '';
- }
-
-
- $order = ' GROUP BY tmp.id ORDER BY tmp.topTime DESC, tmp.sort desc, tmp.createTime desc';
-
- $fields = 'b.id as basicId, g.merchantId,g.staffId,g.images,g.serviceInfo,g.specification,g.content,g.isRecommend,
- g.id,g.basicGoodsId,g.shopId,b.title,b.`code`,b.categoryPath,
- b.categoryId,b.brandId,g.enableStatus,g.topTime,g.sort,g.createTime,
- g.deleteStatus,g.updateTime,g.salesNum,g.specType,g.isJoinCommission,
- g.isDefine,g.virtualSalesNum,g.deliverySupIds,g.expressType,g.ruleId,g.expressFee,g.showExpress,
- g.auditStatus,g.isOption,g.supplierId,g.isShield,g.notArea,g.notCustomerType,g.notCustomer,g.isDistribution,
- g.support,g.retType,g.goodsGroups,g.realSalesNum';
- // 导出
- if ($export){
-
- $sql = 'select tmp.*,s.warehouseId,sum(i.inventoryNum) inventoryNum,FIND_IN_SET(i.warehouseId,s.warehouseId) from (
- select '.$fields.' from '.$goodsTab.' g left join '.$goodsBasicTab.' b on g.basicGoodsId = b.id
- where g.deleteStatus= '.StatusCode::$standard.' and b.deleteStatus ='.StatusCode::$standard.$where.') tmp LEFT JOIN '.$shopTab.' s on s.id = tmp.shopId left join `'.$stockDbName.'`.'.$inventoryWarehouse.' i on i.materielId = tmp.basicGoodsId
- where tmp.deleteStatus='.StatusCode::$standard.$whereSql.$order;
- $dbResult = $this->objDGoods->exportQuery($sql);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- //格式化导出数据
- $formatListsResult = self::formatExportLists($dbResult);
- if (!$formatListsResult->isSuccess()){
- return ResultWrapper::fail($formatListsResult->getData(),$formatListsResult->getErrorCode());
- }
- $formatLists = $formatListsResult->getData();
- self::exportCsv($formatLists);
- // // 格式化商品数据
- // $formatResult = self::formatManageGoodsLists($dbResult);
- // if (!$formatResult->isSuccess()){
- // return ResultWrapper::fail($formatResult->getData(),$formatResult->getErrorCode());
- // }
- // self::exportGoodsList($formatResult->getData());
- // exit;
- }
- $sqlTotal = 'select count(*) as total from (
- select '.$fields.' from '.$goodsTab.' g left join '.$goodsBasicTab.' b on g.basicGoodsId = b.id
- where g.deleteStatus= '.StatusCode::$standard.' and b.deleteStatus ='.StatusCode::$standard.$where.') tmp LEFT JOIN '.$shopTab.' s on s.id = tmp.shopId left join `'.$stockDbName.'`.'.$inventoryWarehouse.' i on i.materielId = tmp.basicGoodsId
- where tmp.deleteStatus='.StatusCode::$standard.$whereSql;
-
- $total = $this->objDGoods->query($sqlTotal);
- if ($total === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- if(empty($total[0]['total'])){
- $return = [
- 'data' => [],
- 'total' => 0,
- ];
- return ResultWrapper::success($return);
- }
- $sql = 'select tmp.*,s.warehouseId,sum(i.inventoryNum) inventoryNum,FIND_IN_SET(i.warehouseId,s.warehouseId) from (
- select '.$fields.' from '.$goodsTab.' g left join '.$goodsBasicTab.' b on g.basicGoodsId = b.id
- where g.deleteStatus= '.StatusCode::$standard.' and b.deleteStatus ='.StatusCode::$standard.$where.') tmp LEFT JOIN '.$shopTab.' s on s.id = tmp.shopId left join `'.$stockDbName.'`.'.$inventoryWarehouse.' i on i.materielId = tmp.basicGoodsId
- where tmp.deleteStatus='.StatusCode::$standard.$whereSql.$order.$limit;
- $dbResult = $this->objDGoods->query($sql);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- // 格式化商品数据
- $formatResult = self::formatManageGoodsLists($dbResult);
- if (!$formatResult->isSuccess()){
- return ResultWrapper::fail($formatResult->getData(),$formatResult->getErrorCode());
- }
-
-
- $return = [
- 'data' => $formatResult->getData(),
- 'total' => isset($total[0]['total']) ? $total[0]['total'] : 0,
- ];
-
- return ResultWrapper::success($return);
- }
-
- /**
- * 根据商品列表 keywordType 拼装sql
- * @param $keywordType
- */
- public function assemblySql($keywordType)
- {
- $whereSql = '';
- switch ($keywordType){
- case 1: // 全部商品 审核通过
- $whereSql .= '';
- break;
- case 2: // 销售中 上架且有库存 enableStatus 上下架(5上架 4下架)
- $whereSql .= ' and (FIND_IN_SET(i.warehouseId,s.warehouseId) OR tmp.isDistribution = '.StatusCode::$standard.') and tmp.enableStatus ='.StatusCode::$standard;
- break;
- case 3: // 已售罄 上架无库存
- $whereSql .= ' and ( FIND_IN_SET(i.warehouseId,s.warehouseId) =0 or FIND_IN_SET(i.warehouseId,s.warehouseId) is NUll ) and tmp.enableStatus ='.StatusCode::$standard;
- break;
- case 4: // 仓库中 下架
- $whereSql .= ' and FIND_IN_SET(i.warehouseId,s.warehouseId) and tmp.enableStatus ='.StatusCode::$delete;
- break;
- }
- return $whereSql;
- }
-
- /**
- * Doc: (des="查询数据")
- * User: XMing
- * Date: 2020/8/25
- * Time: 11:00 上午
- * @param $data
- * @param string $source
- * @return ResultWrapper
- */
- private function getExportDataBySelectParams($data,string $source)
- {
- switch ($source){
- case 'db':
- $selectParams = $data;
- break;
- case 'es':
- $allIds = [];
- foreach ($data as $value){
- $allIds[] = $value['id'];
- }
- if (empty($allIds)){
- return ResultWrapper::fail('导出数据为空',ErrorCode::$paramError);
- }
- $selectParams['id'] = $allIds;
- break;
- }
- $goodsLists = $this->objDGoods->exportSelect($selectParams,'*','createTime DESC');
- if ($goodsLists === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- $list = self::getGeneratorData($goodsLists);
- 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/25
- * Time: 10:57 上午
- * @param $data
- * @param string $source
- * @return ResultWrapper
- * @throws Exception
- */
- private function exportGoods($data,string $source)
- {
- $exportListsResult = self::getExportDataBySelectParams($data,$source);
- if (!$exportListsResult->isSuccess()){
- return ResultWrapper::fail($exportListsResult->getData(),$exportListsResult->getErrorCode());
- }
- $exportLists = $exportListsResult->getData();
- if (empty($exportLists)){
- return ResultWrapper::fail('导出数据为空',ErrorCode::$paramError);
- }
- //格式化导出数据
- $formatListsResult = self::formatExportLists($exportLists);
- if (!$formatListsResult->isSuccess()){
- return ResultWrapper::fail($formatListsResult->getData(),$formatListsResult->getErrorCode());
- }
- $formatLists = $formatListsResult->getData();
- self::exportCsv($formatLists);
- }
- /**git
- * Doc: (des="生成规格名字")
- * User: XMing
- * Date: 2020/8/22
- * Time: 2:47 下午
- * @param array $specGroup
- * @return string
- */
- private static function createSpecName(array $specGroup)
- {
- $str = '';
- foreach ($specGroup as $value){
- empty($str) && $str .= ' ';
- if (!empty($value['specName'])){
- $str .= $value['specName'].':';
- }
- if (!empty($value['specValueName'])){
- $str .= $value['specValueName'];
- }
- }
- return empty($str) ? '无' : $str;
- }
- /**
- * Doc: (des="格式化导出数据")
- * User: XMing
- * Date: 2020/8/25
- * Time: 11:26 上午
- * @param array $data
- * @return ResultWrapper
- * @throws Exception
- */
- private function formatExportLists(array $data)
- {
- if (empty($data)){
- return ResultWrapper::success([]);
- }
- $allGoodsBasicIds = [];
- $selectParam = [];
- $allShopIds = [];
- foreach ($data as $value){
- $allShopIds[] = $value['shopId'];
- $allGoodsBasicIds[] = $value['basicGoodsId'];
- $selectParam['material'][$value['shopId']][] = $value['id'];
- }
- $allShopIds = array_values(array_unique($allShopIds));
- $allGoodsBasicIds = array_values(array_unique($allGoodsBasicIds));
- if (empty($allGoodsBasicIds)){
- return ResultWrapper::fail('没有导出商品id',ErrorCode::$paramError);
- }
- $allGoodsBasicIdsStr = implode(',',$allGoodsBasicIds);
- $fields = ' b.*,c.title as categoryName,d.title as brandName ,b.expireTime';
- $sql = 'SELECT '.$fields.' FROM qianniao_goods_basic_'.$this->enterpriseId.' AS b
- LEFT JOIN qianniao_goods_category_'.$this->enterpriseId.' as c
- ON c.id = b.categoryId
- LEFT JOIN qianniao_goods_brand_'.$this->enterpriseId.' as d
- ON d.id = b.brandId
- WHERE b.id in ('.$allGoodsBasicIdsStr.')';
- $queryLists = $this->objDGoods->exportQuery($sql);
- if ($queryLists === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- $queryLists = self::getGeneratorData($queryLists);
- if (empty($queryLists)){
- return ResultWrapper::fail('查询导出商品基础资料数据为空',ErrorCode::$paramError);
- }
- $goodsBasicMap = [];
- foreach ($queryLists as $list){
- $goodsBasicMap[$list['id']] = $list;
- }
- //获取sku数据
- $skuMap = [];
- if (!empty($allGoodsBasicIds)){
- $skuLists = $this->objDSku->exportSelect(['goodsId' => $allGoodsBasicIds,'deleteStatus' => StatusCode::$standard],'id,goodsId,conversion,unitName,isMaster,specData,barCode');
- if ($skuLists === false){
- return ResultWrapper::fail($this->objDSku->error(),ErrorCode::$dberror);
- }
- $skuLists = self::getGeneratorData($skuLists);
- foreach ($skuLists as &$value){
- $value['skuMsg'] = $value['isMaster'] == StatusCode::$standard ? '主' : '辅';
- $value['specGroup'] = empty($value['specData']) ? '无' : self::createSpecName(json_decode($value['specData'],true));
- $value['inventoryNum'] = 0;
- $value['salePrice'] = 0;
- $value['marketPrice'] = 0;
- $value['ladderPrice'] = '';
- $skuMap[$value['goodsId']][] = $value;
- }
- unset($skuLists);
- unset($value);
- }
- //获取商铺数据
- //查询店铺
- $shopMap = [];
- if (!empty($allShopIds)){
- $shopLists = $this->objDShop->exportSelect(['id'=>$allShopIds],'id,name,warehouseId');
- if ($shopLists === false){
- return ResultWrapper::fail($this->objDShop->error(),ErrorCode::$dberror);
- }
- $shopLists = self::getGeneratorData($shopLists);
- foreach ($shopLists as $value){
- $shopMap[$value['id']] = $value;
- }
- unset($value);
- unset($shopLists);
- }
- //获取商品的价格
- $priceResult = $this->objMPrice->getPrice($selectParam);
- if (!$priceResult->isSuccess()){
- return ResultWrapper::fail($priceResult->getData(),$priceResult->getErrorCode());
- }
- $priceMap = $priceResult->getData();
- $inventorySelectParams = [];
- foreach ($data as &$datum){
- $datum['shopName'] = isset($shopMap[$datum['shopId']]) ? $shopMap[$datum['shopId']]['name'] : '无';
- $datum['warehouseId'] = isset($shopMap[$datum['shopId']]) ? $shopMap[$datum['shopId']]['warehouseId'] : '';
- $datum['specMultiple'] = isset($skuMap[$datum['basicGoodsId']]) ? $skuMap[$datum['basicGoodsId']] : [];
- foreach ($datum['specMultiple'] as $item){
- $inventorySelectParams[$datum['shopId']][] = $item['id'];
- }
- }
- unset($datum);
- $inventoryMap = [];
- foreach ($inventorySelectParams as $shopId => $skuIds){
- $inventoryResult = $this->objMInventory->getInventoryByShopIdAndSkuIds($shopId,$skuIds);
- if (!$inventoryResult->isSuccess()){
- return ResultWrapper::fail($inventoryResult->getData(),$inventoryResult->getErrorCode());
- }
- $inventoryMap[$shopId] = $inventoryResult->getData();
- }
- foreach ($data as &$value){
- $value['inventoryTotalNum'] = 0;
- if (!isset($inventoryMap[$value['shopId']])){
- return ResultWrapper::fail('库存获取异常',ErrorCode::$paramError);
- }
- $row = $inventoryMap[$value['shopId']];
- $value['inventoryTotalNum'] = 0;
- foreach ($value['specMultiple'] as &$item){
- $item['inventoryNum'] = isset($row[$item['id']]['num']) ? $row[$item['id']]['num'] : 0;
- $item['ladderPriceMsg'] = '';
- $thisPrice = isset($priceMap[$value['shopId']][$value['id']]) ? $priceMap[$value['shopId']][$value['id']] : [];
- if (!empty($thisPrice)){
- $item['salePrice'] = isset($thisPrice[$item['id']]) ? $thisPrice[$item['id']]['salePrice'] : '0.00';
- $item['marketPrice'] = isset($thisPrice[$item['id']]) ? $thisPrice[$item['id']]['marketPrice'] : '0.00';
- $item['ladderPrice'] = isset($thisPrice[$item['id']]) ? $thisPrice[$item['id']]['ladderPrice'] : [];
- }
- if (!empty($item['ladderPrice'])){
- $str = '';
- foreach ($item['ladderPrice'] as $v){
- !empty($str) && $str .= ' ';
- $str .= '('.$v['from'].'-'.$v['to'].')';
- $str .= $v['price'];
- }
- $item['ladderPriceMsg'] = $str;
- }
- }
- $value['categoryName'] = isset($goodsBasicMap[$value['basicGoodsId']]) ? $goodsBasicMap[$value['basicGoodsId']]['categoryName'] : '无';
- $value['brandName'] = isset($goodsBasicMap[$value['basicGoodsId']]) ? $goodsBasicMap[$value['basicGoodsId']]['brandName'] : '无';
- $value['goodsName'] = isset($goodsBasicMap[$value['basicGoodsId']]) ? $goodsBasicMap[$value['basicGoodsId']]['title'] : '无';
- $value['goodsCode'] = createCode(StatusCode::$code['goodsBasic']['prefix'], $value['basicGoodsId'], StatusCode::$code['goodsBasic']['length']);;
- $value['enableStatusMsg'] = $value['enableStatus'] == StatusCode::$standard ? '上架' : '下架';
- $value['createTime'] = date('Y-m-d H:i:s',$value['createTime']);
- $value['tag'] = isset($goodsBasicMap[$value['basicGoodsId']]) ? $goodsBasicMap[$value['basicGoodsId']]['tag'] : '无';
- $value['describe'] = isset($goodsBasicMap[$value['basicGoodsId']]) ? $goodsBasicMap[$value['basicGoodsId']]['describe'] : '无';
- $value['storage'] = '无';
- if (isset($goodsBasicMap[$value['basicGoodsId']])){
- if (empty($goodsBasicMap[$value['basicGoodsId']]['extends'])){
- $value['storage'] = empty($goodsBasicMap[$value['basicGoodsId']]['extends']) ? '' : json_decode($goodsBasicMap[$value['basicGoodsId']]['extends'],true)['storage'];
- }
- }
- $value['salesTotalNum'] = 0;
- if (!empty($value['salesNum'])){
- $salesNum = json_decode($value['salesNum'],true);
- $value['salesTotalNum'] = array_sum(array_column($salesNum,'salesNum'));
- }
- }
- return ResultWrapper::success($data);
- }
- /**
- * Doc: (des="")
- * User: XMing
- * Date: 2020/8/25
- * Time: 11:50 上午
- * @param $selectParams
- * @throws Exception
- */
- public function fixEsData($selectParams)
- {
- $limit = $selectParams['limit'];
- unset($selectParams['limit']);
- $offset = $selectParams['offset'];
- unset($selectParams['offset']);
- $selectParams['deleteStatus'] = StatusCode::$standard;
- $dbResult = $this->objDGoods->select($selectParams, 'id', null, $limit, $offset);
- foreach ($dbResult as $goods) {
- self::updateEsData($goods['id']);
- }
- print_r(count($dbResult) . '条数据');
- }
- /**
- * 通过goodsIds获取名称
- * 注意:本方法并不能获取到商品名称,可用此方法拿到BasicGoodsId,再通过getNameByGoodsIds方法拿到商品名称
- * @param array $goodsIds
- * @param string $field
- * @return array
- * @throws Exception
- */
- public function getGoodsNames($goodsIds = [], $field = "*")
- {
- $return = [];
- if (!$goodsIds) {
- return $return;
- }
- $sql = 'select g.*,b.images from qianniao_goods_'.$this->enterpriseId.' g left join qianniao_goods_basic_'.$this->enterpriseId.' b on g.basicGoodsId = b.id where g.id in ('.implode(',', $goodsIds).')';
- $goodsData = $this->objDGoods->query($sql);
- if ($goodsData === false) {
- return $return;
- }
- $supplierIds = [];
- foreach ($goodsData as $value){
- !empty($value['supplierId']) && $supplierIds[] = $value['supplierId'];
- }
- $supplierMap = [];
- $objMSupplier = new MSupplier($this->userCenterId,$this->enterpriseId);
- $supplierResult = $objMSupplier->getSupplierNameByIds($supplierIds);
- if ($supplierResult->isSuccess()){
- $supplier = $supplierResult->getData();
- $supplierMap = MSupplier::supplierMap($supplier);
- }
- foreach ($goodsData as &$goods) {
- $goods['supplierName'] = isset($supplierMap[$goods['supplierId']]['title']) ? $supplierMap[$goods['supplierId']]['title'] : '';
- $return[$goods['id']] = $goods;
- }
- return $return;
- }
- /**
- * 获取商品sku信息
- * @param $goodsBasic
- * @return array
- * @throws Exception
- */
- public function getGoodsBasicAndSkuInfo($goodsBasic)
- {
- $skuArray = [];//所有sku数组
- if (isset($goodsBasic['masterUnit']) && is_array($goodsBasic['masterUnit'])) {
- $goodsBasic['masterUnit']['skuId'] = $goodsBasic['masterUnit']['id'];
- unset($goodsBasic['masterUnit']['id']);
- $skuArray[] = $goodsBasic['masterUnit'];
- }
- if (isset($goodsBasic['branchUnit']) && is_array($goodsBasic['branchUnit'])) {
- $branchUnit = $goodsBasic['branchUnit'];
- foreach ($branchUnit as $branch) {
- $branch['skuId'] = $branch['id'];
- unset($branch['id']);
- $skuArray[] = $branch;
- }
- }
- return $skuArray;
- }
- /**
- * 处理销量
- * @param $goodsData
- * @param array $allGoodsIds
- * @return mixed
- * @throws Exception
- */
- public function getSalesNumBySku($goodsData, $allGoodsIds = [])
- {
- $cartData = [];
- if (!empty($allGoodsIds)) {
- $objMCart = new MCart($this->userCenterId, $this->enterpriseId);
- $cartData = $objMCart->getCartNumByGoodsId($allGoodsIds);
- }
- foreach ($goodsData as &$goods) {
- //[{"skuId":1,"salesNum":10},{"skuId":2,"salesNum":10}] salesNum
- $salesNumArr = [];
- if (!empty($goods['salesNum'])) {
- $salesNumData = is_array($goods['salesNum']) ? $goods['salesNum'] : json_decode($goods['salesNum'], true);
- if ($salesNumData) {
- foreach ($salesNumData as $salesNum) {
- $salesNumArr[$salesNum['skuId']] = $salesNum['salesNum'];
- }
- }
- }
- $goods['oldSalesNum'] = $goods['salesNum'];//复制原数据
- if(empty($goods['salesNum'])){
- $goods['salesNum'] = 0;
- }else{
- if(is_array($goods['salesNum'])){
- $goods['salesNum'] = array_sum(array_column($goods['salesNum'],'salesNum'));
- }else{
- $goods['salesNum'] = array_sum(array_column(json_decode($goods['salesNum'],true),'salesNum'));
- }
- }
- if (isset($goods['skuData'])) {
- foreach ($goods['skuData'] as &$goodsSku) {
- $goodsSku['salesNum'] = isset($salesNumArr[$goodsSku['skuId']]) ? $salesNumArr[$goodsSku['skuId']] : 0;
- //$goods['salesNum'] += $goodsSku['salesNum'];
- $goodsSku['cartNum'] = isset($cartData[$goods['id']][$goodsSku['skuId']]) ? $cartData[$goods['id']][$goodsSku['skuId']] : 0;
- }
- }
- }
- return $goodsData;
- }
- /**
- * 处理价格
- * isActivityPrice 是否满足活动价 5:满足 4:不满足
- * salePrice 销售价格 小程序上展示的价格
- * marketPrice 市场价格
- * @param $goodsData
- * @return mixed
- * @throws Exception
- */
- public function getPriceBySku($goodsData)
- {
- foreach ($goodsData as &$goods) {
- foreach ($goods['skuData'] as &$goodsSku) {
- $goodsSku["salePrice"] = '';
- $goodsSku["ladderPrice"] = [];
- $goodsSku["marketPrice"] = '';
- $goodsSku["enabledLadder"] = '';
- $goodsSku['setNum'] = 0;//起订数量
- $goodsSku['isActivityPrice'] = StatusCode::$delete;//初始化,是否满足活动价
- $goodsSku['limitNum'] = 0;//活动商品限购数量
- }
- }
- unset($goods);
- //获取价格
- $selectParam['material'] = [];
- foreach ($goodsData as $goods) {
- $selectParam['material'][$goods['shopId']][] = $goods['id'];
- }
- if($this->userCenterId){
- $selectParam['customerId'] = $this->useCustomerId;//客户有特殊调价
- }
- $priceResult = $this->objMPrice->getPrice($selectParam);
- if (!$priceResult->isSuccess()) {
- return $goodsData;
- }
- $goodsArr = [];
- $priceResult = $priceResult->getData();
- foreach ($priceResult as $shopPriceArr) {
- foreach ($shopPriceArr as $goodsId => $goodsSkuArr) {
- $goodsArr[$goodsId] = $goodsSkuArr;
- }
- }
- //是否有营销活动价
- $objMCustomer = new MCustomer($this->enterpriseId, $this->userCenterId);
- $customerResult = $objMCustomer->getCustomerInfoByUserCenterId($this->userCenterId);
- $activityArr = [];
- if ($customerResult->isSuccess()) {
- $customer = $customerResult->getData();
- $objMActivity = new MActivity($this->userCenterId, $this->enterpriseId);
- //获取促销活动价格
- $dbResult = $objMActivity->getActivity([
- 'goodsId' => implode(',', array_column($goodsData, 'id')),
- 'customerType' => isset($customer['type']) ? $customer['type'] : 0,
- ]);//TODO
- $activityResult = $dbResult->getData();
- unset($dbResult);
- foreach ($activityResult as $activity) {
- $activityArr[$activity['goodsId'] . $activity['skuId']] = $activity;
- }
- }
- foreach ($goodsData as &$goods) {
- if (isset($goodsArr[$goods['id']])) {
- $skuInfo = $goodsArr[$goods['id']];
- foreach ($goods['skuData'] as &$skuData) {
- if (isset($skuInfo[$skuData['skuId']])) {
- if (isset($activityArr[$goods['id'] . $skuData['skuId']])) {
- //存在活动价格
- $skuData["salePrice"] = $activityArr[$goods['id'] . $skuData['skuId']]['price'];
- $skuData["activityId"] = $activityArr[$goods['id'] . $skuData['skuId']]['activityId'];//活动id
- $skuData['isActivity'] = StatusCode::$standard;//活动价格
- //如果用户登录,检测用户是否达到限购,商品是否枪光(是: 添加标识)
- //获取用户活动购买数量
- if (!empty($this->userCenterId)) {
- $userLimit = (int)$this->objActivityLimitCache->getLimit($skuData["activityId"], $goods['id'], $skuData['skuId'], $this->userCenterId);
- //活动商品用户限购数
- $goodsLimit = (int)$activityArr[$goods['id'] . $skuData['skuId']]['limitNum'];
- if ($userLimit < $goodsLimit) {
- //此商品相对用户,满足活动价
- $skuData['isActivityPrice'] = StatusCode::$standard;//满足活动价
- }
- $skuData['limitNum'] = $goodsLimit;
- }
- } else {
- $skuData["salePrice"] = $skuInfo[$skuData['skuId']]['salePrice'];
- $skuData["activityId"] = 0;//不存在活动
- }
- $skuData["isActivity"] = isset($skuData['isActivity']) ? $skuData['isActivity'] : StatusCode::$delete;
- $skuData["originPrice"] = $skuInfo[$skuData['skuId']]['salePrice'];//原价(促销活动时价格有差异)
- $skuData["ladderPrice"] = $skuInfo[$skuData['skuId']]['ladderPrice'];
- $skuData["marketPrice"] = isset($skuInfo[$skuData['skuId']]['marketPrice']) ? $skuInfo[$skuData['skuId']]['marketPrice'] : bcadd($skuInfo[$skuData['skuId']]['salePrice'], mt_rand(1, 3), 2);
- $skuData["enabledLadder"] = $skuInfo[$skuData['skuId']]['enabledLadder'];
- if (isset($skuData['isActivity']) && $skuData['isActivity'] == StatusCode::$delete) {
- $skuData["setNum"] = isset($skuInfo[$skuData['skuId']]['setNum']) ? $skuInfo[$skuData['skuId']]['setNum'] : 0;//起订数量
- }
- }
- }
- }
- }
- return $goodsData;
- }
- /**
- * Doc: (des="搜索的where条件拼接")
- * User: XMing
- * Date: 2020/11/30
- * Time: 10:53 上午
- * @param $selectParams
- * @param bool $export
- * @return array|ResultWrapper
- * @throws Exception
- */
- public function setWhere($selectParams,$export = false)
- {
- $defaultDSL = [];
- if($export === false){
- $defaultDSL = [
- 'from' => $selectParams['offset'],
- 'size' => $selectParams['limit'],
- 'sort' => [
- 'topTime' => [
- 'order' => 'desc'
- ]
- ],
- ];
- }
- $dsl = [];
- $dsl['query']['bool']['must'][] = [
- 'term' => ['enterpriseId' => $this->enterpriseId],
- ];
- if (isset($selectParams['enableStatus'])) {
- if (!empty($selectParams['enableStatus'])) {
- $dsl['query']['bool']['filter'][] =
- ['term' => ['enableStatus' => $selectParams['enableStatus']]];
- }
- }
- if (isset($selectParams['auditStatus'])) {
- if (!empty($selectParams['auditStatus'])) {
- $dsl['query']['bool']['filter'][] =
- ['term' => ['auditStatus' => $selectParams['auditStatus']]];
- }
- }
- $selectParams = parent::getStaffQueryParams($selectParams, 'staffId');
- //个人数据域
- if (isset($selectParams['staffId'])) {
- $dsl['query']['bool']['filter'][] =
- ['terms' => ['staffId' => $selectParams['staffId']]];
- }
- //按商品ids进行搜索
- if (isset($selectParams['goodsIds'])) {
- $dsl['query']['bool']['filter'][] =
- ['terms' => ['id' => $selectParams['goodsIds']]];
- }
- //去ES的basic类型下查找匹配的basicIds
- if (!empty($selectParams['keyword'])
- || !empty($selectParams['categoryId'])
- || !empty($selectParams['brandId'])
- || !empty($selectParams['categoryPath'])
- ) {
- $basicSearchParams = [
- 'keyword' => isset($selectParams['keyword']) ? $selectParams['keyword'] : '',
- 'categoryPath' => isset($selectParams['categoryPath']) ? $selectParams['categoryPath'] : '',
- 'categoryId' => isset($selectParams['categoryId']) ? $selectParams['categoryId'] : '',
- 'brandId' => isset($selectParams['brandId']) ? $selectParams['brandId'] : '',
- 'limit' => 1000
- ];
- $goodsBasics = $this->objMGoodsBasic->searchGoodsBasics($basicSearchParams);
- $goodsBasicLists = [];
- if (!$goodsBasics->isSuccess()) {
- Logger::logs(E_USER_ERROR,'es-查询错误',__CLASS__,__LINE__,$goodsBasics->getData());
- return ResultWrapper::fail($goodsBasics->getData(),$goodsBasics->getErrorCode());
- } else {
- $goodsBasicData = $goodsBasics->getData();
- foreach ($goodsBasicData as $goodsBasic) {
- $goodsBasicLists[$goodsBasic['id']] = $goodsBasic;
- }
- }
- $goodsBasicIds = array_keys($goodsBasicLists);
- $dsl['query']['bool']['must'][] = [
- 'terms' => [
- 'basicGoodsId' => $goodsBasicIds
- ]
- ];
- }
- //后台按商铺搜索
- if (!empty($selectParams['shopId'])) {
- if (is_array($selectParams['shopId'])) {
- $dsl['query']['bool']['must'][] = [
- 'terms' => [
- 'shopId' => $selectParams['shopId']
- ]
- ];
- } else {
- $dsl['query']['bool']['must'][] = [
- 'term' => [
- 'shopId' => $selectParams['shopId']
- ],
- ];
- }
- }
- //前台按销售区域筛选
- if ($this->isFront) {
- $dsl['query']['bool']['must'][] = [
- 'term' => ['enableStatus' => StatusCode::$standard],
- ];
- $areaCode = isset($selectParams['areaCode']) ? $selectParams['areaCode'] : '';
- $shopIdResult = $this->objMShop->getShopIdsByArea($selectParams['userCenterId'], $areaCode);
- if (!$shopIdResult->isSuccess()) {
- Logger::logs(E_USER_ERROR,'es-查询错误',__CLASS__,__LINE__,$shopIdResult->getData());
- return ResultWrapper::fail($shopIdResult->getData(),$shopIdResult->getErrorCode());
- }
- $shopIds = $shopIdResult->getData();
- /*$dsl['query']['bool']['must'][] = [
- 'terms' => [
- 'shopId' => $shopIds
- ]
- ];*/
- } else {
- //数据域
- /*parent::getAccessShopIds();
- if (!empty(parent::$shopIds)) {
- $dsl['query']['bool']['filter'][] = [
- 'terms' => ['shopId' => parent::$shopIds]
- ];
- }*/
- }
- if (isset($selectParams['inStock'])) {
- $goodsBasicIdResult = self::getInOrOutOfStockGoodsBasicId($selectParams['inStock']);
- if (!$goodsBasicIdResult->isSuccess()) {
- Logger::logs(E_USER_ERROR,'es-查询错误',__CLASS__,__LINE__,$goodsBasicIdResult->getData());
- return ResultWrapper::fail($goodsBasicIdResult->getData(),$goodsBasicIdResult->getErrorCode());
- }
- }
- $dsl = array_merge($defaultDSL, $dsl);
- return ResultWrapper::success($dsl);
- }
- /**
- *
- * 废弃
- * @param $inStock
- * @return ResultWrapper
- */
- //获取有无库存的基本资料id
- public function getInOrOutOfStockGoodsBasicId($inStock)
- {
- //查询所有商品获取库存
- $lists = $this->objDGoods->query('SELECT `id`,`shopId`,`basicGoodsId` FROM qianniao_goods_'.$this->enterpriseId.' WHERE `deleteStatus` = '.StatusCode::$standard);
- if ($lists === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- if (empty($lists)){
- return ResultWrapper::success([]);
- }
- $selectParams = [];
- foreach ($lists as $list){
- $selectParams[$list['shopId']][] = $list['basicGoodsId'];
- }
- //查询库存
- $inventoryMap = [];
- $objMInventory = new MInventory($this->enterpriseId,$this->userCenterId);
- foreach ($selectParams as $shopId => $materielIds){
- // 根据商铺id和物料ids获取库存信息
- $inventoryResult = $objMInventory->getInventoryByShopIdAndMaterielIds($shopId,$materielIds);
- if (!$inventoryResult->isSuccess()){
- return ResultWrapper::fail($inventoryResult->getData(),$inventoryResult->getErrorCode());
- }
- $inventory = $inventoryResult->getData();
- foreach ($inventory as $id => $item){
- if ($inStock == StatusCode::$standard){
- $item['num'] > 0 && $inventoryMap[] = [
- 'shopId' => $shopId,
- 'basicGoodsId' => $id
- ];
- }else{
- $item['num'] == 0 && $inventoryMap[] = [
- 'shopId' => $shopId,
- 'basicGoodsId' => $id
- ];
- }
- }
- }
- return ResultWrapper::success($inventoryMap);
- }
- /**
- * 创建订单搜索商品 首字母搜索
- * @param $data
- * @param bool $type
- * @return ResultWrapper
- */
- public function getGoodsByCondition($data, $type = false)
- {
- $Condition = isset($data['condition']) && !empty($data['condition']) ? $data['condition'] : '';
- if (empty($Condition)) return ResultWrapper::success([]);
- $objChineseCharacter = new ChineseCharacter();
- $Condition = $objChineseCharacter->getInitials($Condition);
- $objDGoodsBasic = new DGoodsBasic();
- //判断是否上架 没有参数默认查询所有
- $whereSql = '';
- if (isset($data['enableStatus']) && !empty($data['enableStatus'])) {
- $whereSql .= ' and g.enableStatus = ' . $data['enableStatus'];
- }
- //判断是否有商铺检索
- if(isset($data['shopId']) && !empty($data['shopId'])){
- if(is_array($data['shopId'])){
- $str = 'in('.rtrim(implode(',',$data['shopId']),',').')';
- }else{
- $str = '= '.$data['shopId'];
- }
- $whereSql .= ' and g.shopId '.$str;
- }
- //查询商品sql
- $sql = 'select g.id,b.title from ' . $this->objDGoods->get_Table() . ' g left join ' . $objDGoodsBasic->get_Table() . '_' . $this->enterpriseId . ' b on g.basicGoodsId = b.id where b.condition like "%' . $Condition . '%" and g.deleteStatus = ' . StatusCode::$standard . $whereSql . ' order by g.id desc';
- //判断来源 false查询商品 true查询基础资料
- if ($type) {
- //查询基础资料sql
- $sql = 'select id,title from ' . $objDGoodsBasic->get_Table() . '_' . $this->enterpriseId . ' where `condition` like "%' . $Condition . '%" and deleteStatus = ' . StatusCode::$standard . ' order by id desc';
- }
- $dbResult = $this->objDGoods->query($sql);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($dbResult);
- }
- /**
- * 格式化所有商品搜索条件
- * @param $enterpriseId
- * @return ResultWrapper
- * @throws Exception
- */
- public function formatGoodsCondition($enterpriseId)
- {
- $objDGoodsBasic = new DGoodsBasic();
- $objDGoodsBasic->setTable($objDGoodsBasic->get_Table() . '_' . $enterpriseId);
- $sql = 'select id,title from ' . $objDGoodsBasic->get_Table();
- $dbResult = $objDGoodsBasic->query($sql);
- if ($dbResult === false) {
- return ResultWrapper::fail($objDGoodsBasic->error(), ErrorCode::$dberror);
- }
- $objChineseCharacter = new ChineseCharacter();
- foreach ($dbResult as $value) {
- $Condition = $objChineseCharacter->getInitials(trim($value['title']));
- $midDbResult = $objDGoodsBasic->update(['condition' => $Condition], ['id' => $value['id']]);
- if ($midDbResult === false) {
- return ResultWrapper::fail($objDGoodsBasic->error(), ErrorCode::$dberror);
- }
- }
- return ResultWrapper::success('格式化成功');
- }
- /**
- * Doc: (des="根据条件查询商品")
- * User: XMing
- * Date: 2020/11/30
- * Time: 11:00 上午
- * @param string $keyword
- * @return ResultWrapper
- * @throws Exception
- */
- private function searchByKeyword(string $keyword)
- {
- //如果是关键词搜索,尝试从es中检索商品
- $dslResult = $this->setWhere(['keyword'=>$keyword,'offset' => 0,'limit' => 10,'userCenterId' => $this->userCenterId]);
- if (!$dslResult->isSuccess()){
- return ResultWrapper::fail($dslResult->getData(),$dslResult->getErrorCode());
- }
- $dsl = $dslResult->getData();
- $result = $this->objDGoods->getSearchQueryDsl($dsl);
- if (isset($result['status']) && $result['status'] == 400) {
- if ($result['error']['reason'] == 'all shards failed') {
- return ResultWrapper::success([
- 'data' => [],
- 'total' => 0
- ]);
- }
- }
- if (!isset($result['hits']) || $result['hits']['total'] == 0) {
- return ResultWrapper::success([
- 'data' => [],
- 'total' => 0
- ]);
- }
- $esLists = $result['hits']['hits'];
- $allGoodsIds = [];
- foreach ($esLists as $key => &$value) {
- //$data['id'] = $value['_id'];
- $allGoodsIds[] = $value['_source']['id'];
- }
- $goodsResult = self::getGoodsBySelectParams(['goodsIds' => $allGoodsIds,'offset' => 0,'limit' => 10],true);
- if (!$goodsResult->isSuccess()){
- return ResultWrapper::fail($goodsResult->getData(),$goodsResult->getErrorCode());
- }
- $goodsResult = $goodsResult->getData();
- $total = $goodsResult['total'];
- $goodsData = $goodsResult['data'];
- return ResultWrapper::success(['data'=>$goodsData,'total' => $total]);
- }
- /**
- * Doc: (des="根据条件查询过滤商品id")
- * User: XMing
- * Date: 2021/1/18
- * Time: 10:27 上午
- * @param array $selectParams
- * @return ResultWrapper
- * @throws Exception
- */
- public function getFilterIdsBySelectParams(array $selectParams): ResultWrapper
- {
- $retIds = [];
- if (isset($selectParams['userCenterId']) && !empty($selectParams['userCenterId'])){
- //通过userCenterId获取客户id以及客户类型
- $customerResult = $this->objMCustomer->getCustomerInfoByUserCenterId($selectParams['userCenterId']);
- if (!$customerResult->isSuccess()){
- return ResultWrapper::fail($customerResult->getData(),$customerResult->getErrorCode());
- }
- $customerInfo = $customerResult->getData();
- $customerId = getArrayItem($customerInfo,'id',0);
- $customerType = getArrayItem($customerInfo,'type',0);
- $filter = '';
- if (isset($customerId) && !empty($customerId)){
- $filter .= ' FIND_IN_SET('.$customerId.',`notCustomer`) ';
- if (isset($customerType) && !empty($customerType)){
- $filter .= ' OR FIND_IN_SET('.$customerType.',`notCustomerType`) ';
- }
- }
- if (isset($selectParams['areaCode']) && !empty($selectParams['areaCode'])){
- $areaCode = $selectParams['areaCode'];
- if (!empty($filter)){
- $filter .= ' OR ';
- }
- $filter .= " (JSON_CONTAINS(notArea->'$[*]', '\"".$areaCode."\"', '$') OR JSON_CONTAINS(notArea->'$[*]','\"0-0-0\"','$')) ";
- }
- $fields = 'id';
- $sql = 'SELECT '.$fields.' FROM qianniao_goods_'.$this->enterpriseId.' WHERE isShield = '.StatusCode::$standard.' AND ( '.$filter.')';
- $ids = $this->objDGoods->query($sql);
- if ($ids === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- foreach ($ids as $val){
- $retIds[] = $val['id'];
- }
- }
- return ResultWrapper::success($retIds);
- }
- /**
- * Doc: (des="商品检索 商城、后台")
- * User: XMing
- * Date: 2021/3/3
- * Time: 3:21 下午
- * @param array $selectParams
- * @param bool $export
- * @return ResultWrapper
- * @version 1.0.1
- */
- public function search_new(array $selectParams,bool $export = false): ResultWrapper
- {
- switch ($this->isFront){
- case true:
- //mini app
- //1.获取当前范围内的店铺
- $shopResult = self::getShopIdsByArea($selectParams['areaCode']);
- if (!$shopResult->isSuccess()){
- return ResultWrapper::fail($shopResult->getData(),ErrorCode::$dberror);
- }
- $shopData = $shopResult->getData();
- if (empty($shopData)){
- return ResultWrapper::success(['data' => [], 'total' => 0]);
- }
- $shopIds = isset($shopData['shopIds']) ? $shopData['shopIds'] : [];
- //商品查询参数
- $condition = [
- 'shopId' => isset($selectParams['shopId']) ? $selectParams['shopId'] : 0,
- 'shopIds' => $shopIds,
- 'categoryId' => isset($selectParams['categoryId']) ? $selectParams['categoryId'] : '',
- 'keyword' => isset($selectParams['keyword']) ? $selectParams['keyword'] : '',
- 'goodsIds' => isset($selectParams['goodsIds']) ? $selectParams['goodsIds'] : [],
- 'categoryPath' => isset($selectParams['categoryPath']) ? $selectParams['categoryPath'] : [],
- 'offset' => $selectParams['offset'],
- 'limit' => $selectParams['limit']
- ];
- //查询店铺下经营屏蔽的商品Id
- $filterIdsResult = self::getFilterIdsBySelectParams($selectParams);
- if (!$filterIdsResult->isSuccess()){
- return ResultWrapper::fail($filterIdsResult->getData(),$filterIdsResult->getErrorCode());
- }
- //过滤商品ids
- $filterIds = $filterIdsResult->getData();
- $condition['notGoodsIds'] = $filterIds;
- break;
- case false:
- //manage
- break;
- }
- }
- /**
- * Doc: (des="es-搜索商品")
- * User: XMing
- * Date: 2020/11/30
- * Time: 10:40 上午
- * @param array $selectParams 搜索条件
- * @param bool $export 是否导出
- * @return ResultWrapper
- * @throws Exception
- */
- public function search(array $selectParams,$export = false)
- {
- if($this->isFront){
- $shopResult = self::getShopIdsByArea($selectParams['areaCode']);
- if (!$shopResult->isSuccess()){
- return ResultWrapper::fail($shopResult->getData(),ErrorCode::$dberror);
- }
- $shopData = $shopResult->getData();//销售区域店铺数据
- if (empty($shopData)){
- return ResultWrapper::success(['data' => [], 'total' => 0]);
- }
- $shopIds = isset($shopData['shopIds']) ? $shopData['shopIds'] : [];
- //条件
- $condition = [
- 'shopId' => isset($selectParams['shopId']) ? $selectParams['shopId'] : 0,
- 'shopIds' => $shopIds,
- 'categoryId'=> isset($selectParams['categoryId']) ? $selectParams['categoryId'] : '',
- 'keyword' => isset($selectParams['keyword']) ? $selectParams['keyword'] : '',
- 'goodsIds' => isset($selectParams['goodsIds']) ? $selectParams['goodsIds'] : [],
- 'categoryPath' => isset($selectParams['categoryPath']) ? $selectParams['categoryPath'] : [],
- 'offset' => $selectParams['offset'],
- 'limit' => $selectParams['limit'],
- 'brandId' => isset($selectParams['brandId']) ? $selectParams['brandId'] : [],//商品品牌
- 'sort' => isset($selectParams['sort']) ? $selectParams['sort'] : '', //销售排序
- 'priceSort' => isset($selectParams['priceSort']) ? $selectParams['priceSort'] : '', //价格排序
- 'support' => isset($selectParams['support']) ? $selectParams['support'] : [], //商品服务
- 'goodsGroups' => isset($selectParams['goodsGroups']) ? $selectParams['goodsGroups'] : '', //商品分组
- 'enableStatus' => getArrayItem($selectParams, 'enableStatus', 5),
- ];
- // 通过区域获取销售店铺
- $filterIdsResult = self::getFilterIdsBySelectParams($selectParams);
- if (!$filterIdsResult->isSuccess()){
- return ResultWrapper::fail($filterIdsResult->getData(),$filterIdsResult->getErrorCode());
- }
- $filterIds = $filterIdsResult->getData();
- $condition['notGoodsIds'] = $filterIds;//过滤商品id
- $goodsResult = self::getGoodsBySelectParams($condition,true);
- if (!$goodsResult->isSuccess()){
- return ResultWrapper::fail($goodsResult->getData(),$goodsResult->getErrorCode());
- }
- $goodsResult = $goodsResult->getData();
- $total = $goodsResult['total'];
- $goodsData = $goodsResult['data'];
- if (empty($total)){
- if (isset($condition['keyword']) && !empty($condition['keyword'])){
- $searchResult = self::searchByKeyword($condition['keyword']);
- if (!$searchResult->isSuccess()){
- return ResultWrapper::fail($searchResult->getData(),$searchResult->getErrorCode());
- }
- $searchData = $searchResult->getData();
- $total = $searchData['total'];
- $goodsData = $searchData['data'];
- if (empty($goodsData)){
- return ResultWrapper::success(['data' => [], 'total' => 0]);
- }
- }
- }
- // 商品数据/最高最低价格
- $formatGoodsRes = self::formatGoodsData($goodsData,$shopData['shopIdBindWarehouseId']);
- if (!$formatGoodsRes->isSuccess()){
- return ResultWrapper::fail($formatGoodsRes->getData(),$formatGoodsRes->getErrorCode());
- }
- $goodsData = $formatGoodsRes->getData();
- $return = [
- 'data' => self::formatJsonGoods($goodsData),
- 'total' => $total,
- ];
- }else{
- $searchResult = self::searchManage($selectParams,$export);
- if (!$searchResult->isSuccess()){
- return ResultWrapper::fail($searchResult->getData(),$searchResult->getErrorCode());
- }
- $return = $searchResult->getData();
- }
- return ResultWrapper::success($return);
- }
- /**
- * Doc: (des="")
- * User: XMing
- * Date: 2021/1/23
- * Time: 3:57 下午
- * @param array $selectParams
- * @param bool $export
- * @return ResultWrapper
- * @throws Exception
- */
- public function searchManage(array $selectParams,$export = false): ResultWrapper
- {
- $goodsResult = self::getGoodsBySelectParams($selectParams,true);
- if (!$goodsResult->isSuccess()){
- return ResultWrapper::fail($goodsResult->getData(),$goodsResult->getErrorCode());
- }
- $goodsResult = $goodsResult->getData();
- $total = $goodsResult['total'];
- $goodsData = $goodsResult['data'];
- if($export === true){
- $result = self::exportGoods($selectParams,'db');
- if(!$result->isSuccess()){
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- die;
- }
- if (empty($goodsData)){
- return ResultWrapper::success(['data' => [], 'total' => 0]);
- }
- $formatResult = self::formatManageGoodsLists($goodsData);
- if (!$formatResult->isSuccess()){
- return ResultWrapper::fail($formatResult->getData(),$formatResult->getErrorCode());
- }
- $return = [
- 'data' => $formatResult->getData(),
- 'total' => ($total) ? intval($total) : 0,
- ];
- return ResultWrapper::success($return);
- }
- /**
- * 统一的格式化商品列表数据
- * @param array $goodsData 商品主数据
- * @return ResultWrapper
- */
- private function formatManageGoodsLists(array $goodsData)
- {
- if (empty($goodsData)){
- return ResultWrapper::success([]);
- }
- $basicGoodsIds = []; // 所有商品资料ids
- $shopIds = []; // 店铺ids
- $merchantIds = []; // 商户ids
- $selectInventorParams = []; // 查询库存
- foreach($goodsData as $key => $value){
- $basicGoodsIds[] = $value['basicGoodsId'];
- $shopIds[] = $value['shopId'];
- $merchantIds[] = $value['merchantId'];
- $selectInventorParams[$value['shopId']][] = $value['basicGoodsId'];
- }
- // 获取商品库数据
- $basicGodsBind = [];
- $materielResult = $this->objMGoodsBasic->getGoodsBasicNames(array_unique($basicGoodsIds));
- if (!$materielResult->isSuccess()){
- return ResultWrapper::fail($materielResult->getData(),$materielResult->getErrorCode());
- }
- $materielMap = $materielResult->getData();
- if(!empty($materielMap)){
- $materielMapResult = $this->objMGoodsBasic->formatMaterielLists($materielMap);
- if (!$materielMapResult->isSuccess()){
- return ResultWrapper::fail($materielMapResult->getData(),$materielMapResult->getErrorCode());
- }
- $materielMap = $materielMapResult->getData();
- foreach($materielMap as $key => $value){
- $basicGodsBind[$value['id']] = $value;
- }
- }
- // 店铺数据映射
- $shopMap = [];
- if (!empty($shopIds)){
- $shopResult = $this->objMShop->getShopByIds(array_unique($shopIds));
- if (!$shopResult->isSuccess()){
- return ResultWrapper::fail($shopResult->getData(),$shopResult->getErrorCode());
- }
- $shopData = $shopResult->getData();
- if(!empty($shopData)){
- foreach($shopData as $key => $value){
- $shopMap[$value['id']] = $value;
- }
- }
- }
- // 商户数据映射
- $merchantIds = array_filter($merchantIds);
- if(!empty($merchantIds)){
- $objMMerchant = new MMerchant($this->enterpriseId);
- $merchantData = $objMMerchant->getMerchant($merchantIds);
- }
- //查询库存
- $inventoryMap = [];
- foreach ($selectInventorParams as $shopId => $materielIds){
- $inventoryResult = $this->objMInventory->getInventoryByShopIdAndMaterielIds($shopId,$materielIds);
- if (!$inventoryResult->isSuccess()){
- return ResultWrapper::fail($inventoryResult->getData(),$inventoryResult->getErrorCode());
- }
- $inventoryMap[$shopId] = $inventoryResult->getData();
- }
- $objGoodsBasicRelevantCache = new GoodsBasicRelevant($this->enterpriseId);
- // 统一拿商品资料数据去覆盖商品列表的字段
- foreach($goodsData as $key => $value){
- $goodsData[$key]['code'] = createCode(StatusCode::$code['goodsBasic']['prefix'], $value['basicGoodsId'], StatusCode::$code['goodsBasic']['length']);
- $goodsData[$key]['images'] = isset($basicGodsBind[$value['basicGoodsId']]['images']) ? json_decode($basicGodsBind[$value['basicGoodsId']]['images'], true) : [];
- $goodsData[$key]['title'] = $basicGodsBind[$value['basicGoodsId']]['title'];
- $goodsData[$key]['barCode'] = $basicGodsBind[$value['basicGoodsId']]['barCode'];
- $goodsData[$key]['unitNameMaster'] = $basicGodsBind[$value['basicGoodsId']]['unitNameMaster'];
- $goodsData[$key]['isEq'] = $basicGodsBind[$value['basicGoodsId']]['isEq'];
- $goodsData[$key]['specType'] = $basicGodsBind[$value['basicGoodsId']]['specType'];
- $goodsData[$key]['specGroup'] = $basicGodsBind[$value['basicGoodsId']]['specGroup'];
- $goodsData[$key]['specTotal'] = $basicGodsBind[$value['basicGoodsId']]['specTotal'];
- $goodsData[$key]['categoryName'] = $basicGodsBind[$value['basicGoodsId']]['categoryTitle'];
- $goodsData[$key]['categoryId'] = $basicGodsBind[$value['basicGoodsId']]['categoryId'];
- $goodsData[$key]['categoryPath'] = $basicGodsBind[$value['basicGoodsId']]['categoryPath'];
- $goodsData[$key]['assistCategoryName'] = $basicGodsBind[$value['basicGoodsId']]['assistCategoryTitle'];
- $goodsData[$key]['assistCategoryId'] = $basicGodsBind[$value['basicGoodsId']]['assistCategoryId'];
- $goodsData[$key]['assistCategoryPath'] = $basicGodsBind[$value['basicGoodsId']]['assistCategoryPath'];
- $goodsData[$key]['tag'] = explode(',', getArrayItem($basicGodsBind[$value['basicGoodsId']],'tag',''));
- $goodsData[$key]['brandId'] = $basicGodsBind[$value['basicGoodsId']]['brandId'];
- $goodsData[$key]['brandName'] = $basicGodsBind[$value['basicGoodsId']]['brandTitle'];
- $goodsData[$key]['shopName'] = isset($shopMap[$value['shopId']]) ? $shopMap[$value['shopId']]['name'] : '';
- $goodsData[$key]['inventorTotal'] = isset($inventoryMap[$value['shopId']][$value['basicGoodsId']]['num']) ? $inventoryMap[$value['shopId']][$value['basicGoodsId']]['num'] : 0;
- $goodsData[$key]['goodsGroups'] = !empty($value['goodsGroups']) ? explode(',',$value['goodsGroups']) : [];
- $goodsData[$key]['support'] = !empty($value['support']) ? explode(',',$value['support']) : [];
- if(isset($value['merchantId'])){
- $goodsData[$key]['merchantName'] = isset($merchantData[$value['merchantId']]) ? $merchantData[$value['merchantId']]['name'] : '';
- }
- // 对详情反转义
- if (isset($value['content'])) {
- $goodsData[$key]['content'] = htmlspecialchars_decode($value['content'], ENT_QUOTES);
- }
- $goodsData[$key]['oldSalesNum'] = getArrayItem($value,'salesNum',[]);
- $salesNumArray = (array)json_decode(getArrayItem($value,'salesNum',''),true);
- $goodsData[$key]['salesNum'] = array_sum(array_column($salesNumArray,'salesNum'));
- }
-
- return ResultWrapper::success($goodsData);
- }
- /**
- * 商品详情拼接数据
- * @param $data
- * @return mixed
- * @throws Exception
- */
- public function formatDetails(array $data): ResultWrapper
- {
- if (empty($data)) {
- return ResultWrapper::success([]);
- }
- $formatMultipleResult = self::formatMultipleSkuMapping($data, StatusCode::$standard);//处理属性
- if (!$formatMultipleResult->isSuccess()){
- return ResultWrapper::fail($formatMultipleResult->getData(),$formatMultipleResult->getErrorCode());
- }
- $formatMultiple = $formatMultipleResult->getData();
- $initDetails = self::formatInitSpec($formatMultiple);//初始化数据
- $formatInventoryResult = self::formatInventorySpec($initDetails);//查询库存
- if (!$formatInventoryResult->isSuccess()){
- return ResultWrapper::fail($formatInventoryResult->getData(),$formatInventoryResult->getErrorCode());
- }
- $formatInventory = $formatInventoryResult->getData();
- // 处理价格
- $priceResult = self::getPriceBySkuSpec([$formatInventory]);
- if (!$priceResult->isSuccess()){
- return ResultWrapper::fail($priceResult->getData(),$priceResult->getErrorCode());
- }
- $priceData = $priceResult->getData();
- $data = self::getSalesNumDetails($priceData);//拼接销量(详情)
- $data = self::formatGoodsSpec($data);//提取字段
- $data = array_shift($data);
- return ResultWrapper::success($data);
- }
- /**
- * Doc: (des="格式化客户屏蔽列表")
- * User: XMing
- * Date: 2021/1/15
- * Time: 5:07 下午
- * @return ResultWrapper
- * @throws Exception
- */
- public function formatNotCustomer($data): ResultWrapper
- {
- if (empty($data)){
- return ResultWrapper::success($data);
- }
- $data['notCustomerLists'] = [];
- if ($data['isShield'] == StatusCode::$standard){
- $notCustomer = getArrayItem($data,'notCustomer','');
- if (empty($notCustomer)){
- $data['notCustomerLists'] = [];
- return ResultWrapper::success($data);
- }
- $notCustomerArr = explode(',',$notCustomer);
- $objMCustomer = new MCustomer($this->enterpriseId,$this->userCenterId);
- $customerListsResult = $objMCustomer->getCustomerByIds($notCustomerArr);
- if (!$customerListsResult->isSuccess()){
- return ResultWrapper::fail($customerListsResult->getData(),$customerListsResult->getErrorCode());
- }
- $customerLists = $customerListsResult->getData();
- foreach ($customerLists as $val){
- $data['notCustomerLists'][] = [
- 'id' => $val['id'],
- 'code' => $val['code'],
- 'customerType' => $val['customerType'],
- 'mobile' => $val['mobile'],
- 'name' => $val['name'],
- 'status' => $val['status'],
- 'shopName' => $val['shopName']
- ];
- }
- }
- return ResultWrapper::success($data);
- }
- /**
- * Doc: (des="")
- * User: XMing
- * Date: 2020/9/10
- * Time: 11:55 上午
- * @throws Exception
- */
- private function formatGoodsExpress(array $data)
- {
- $data['express'] = [
- 'expressType' => $data['expressType'],
- 'ruleId' => $data['ruleId'],
- 'expressFee' => $data['expressFee'],
- 'showExpress' => $data['showExpress'],
- 'ruleData' => [
- 'not_dispatch_areas' => (object)[]
- ],
- ];
- $ruleInfo = [];
- if ($data['expressType'] == StatusCode::$expressType['rule']){
- $objMDeliverySetting = new MDeliverySetting($this->userCenterId,$this->enterpriseId);
- $ruleInfoResult = $objMDeliverySetting->getRuleInfo($data['express']['ruleId']);
- if (!$ruleInfoResult->isSuccess()){
- return ResultWrapper::fail($ruleInfoResult->getData(),$ruleInfoResult->getErrorCode());
- }
- $ruleInfo = $ruleInfoResult->getData();
- }
- $data['express']['ruleData']['not_dispatch_areas'] = isset($ruleInfo['setData']) ? $ruleInfo['setData']['not_dispatch_areas'] : (object)[];
- return ResultWrapper::success($data);
- }
- /**
- * @param $data
- * @param $isAddGoods
- * @return mixed
- * @throws \Exception
- */
- public function formatMultipleSkuMapping($data, $isAddGoods = 4): ResultWrapper
- {
- switch ($isAddGoods) {
- case StatusCode::$standard:
- $sql = "SELECT id,unitId,unitName,conversion,isDefault,isMaster,specGroupHash,specImage,specData,barCode,weight,isNew FROM qianniao_sku_" . $this->enterpriseId . " WHERE goodsId=" . $data['basicGoodsId'] . " AND deleteStatus=" . StatusCode::$standard;
- break;
- case StatusCode::$delete:
- $sql = "SELECT id,unitId,unitName,conversion,isDefault,isMaster,specGroupHash,specImage,specData,barCode,weight,isNew FROM qianniao_sku_" . $this->enterpriseId . " WHERE goodsId=" . $data['basicGoodsId'] . " AND deleteStatus=" . StatusCode::$standard . " AND isMaster=" . StatusCode::$standard . " GROUP BY specGroupHash";
- break;
- }
- $skuResult = $this->objMSku->getQuery($sql);
- if (!$skuResult->isSuccess()){
- return ResultWrapper::fail($skuResult->getData(),$skuResult->getErrorCode());
- }
- $skuData = $skuResult->getData();
- $specMultiple = [];
- foreach ($skuData as $spec) {
- $specGroup = json_decode($spec['specData'], true);
- $specMultiple[] = [
- 'id' => $spec['id'],
- 'unitId' => $spec['unitId'],
- 'unitName' => $spec['unitName'],
- 'isMaster' => $spec['isMaster'],
- 'conversion' => $spec['conversion'],
- 'specGroup' => empty($specGroup) ? [] : $specGroup,
- 'specGroupHash' => $spec['specGroupHash'],
- 'specImage' => empty(json_decode($spec['specImage'], true)) ? '' : json_decode($spec['specImage'], true),
- 'barCode' => empty($spec['barCode']) ? '' : $spec['barCode'],
- 'isDefault' => $spec['isDefault'],
- 'weight' => $spec['weight'],
- 'isNew' => $spec['isNew']
- ];
- }
- $data['specMultiple'] = $specMultiple;
- return ResultWrapper::success($data);
- }
- /**
- * 查询基础商品对应规格数量
- * @param $data
- * @return array
- */
- public function getSpecTotal(array $data): ResultWrapper
- {
- $goodsIds = array_values(array_unique(array_column($data, 'basicGoodsId')));
- $goodsIds = trim(implode(',', $goodsIds), ',');
- if (empty($goodsIds)){
- return ResultWrapper::success([]);
- }
- $sql = 'SELECT COUNT(id) as total,goodsId FROM qianniao_sku_' . $this->enterpriseId . ' WHERE deleteStatus = ' . StatusCode::$standard . ' AND goodsId IN(' . $goodsIds . ') GROUP BY goodsId;';
- $dbResult = $this->objMSku->getQuery($sql);
- if (!$dbResult->isSuccess()) {
- Logger::logs(E_USER_ERROR,'sql error',__CLASS__,__LINE__,$dbResult->getData());
- }
- $allSpec = $dbResult->getData();
- $mapping = [];
- foreach ($allSpec as $spec) {
- $mapping[$spec['goodsId']] = $spec['total'];
- }
- return ResultWrapper::success($mapping);
- }
- /**
- * @param $data
- * @return mixed
- */
- public function formatGoodsSpec($data)
- {
- if (empty($data)) {
- return $data;
- }
- $objMSku = new MSku($this->userCenterId,$this->enterpriseId);
- foreach ($data as &$details) {
- $details['minSalePrice'] = empty($this->commonMapping[$details['id']]) ? 0 : min($this->commonMapping[$details['id']]);
- $details['maxSalePrice'] = empty($this->commonMapping[$details['id']]) ? 0 : max($this->commonMapping[$details['id']]);
- unset($details['oldSalesNum']);
- if (isset($details['specGroup']) && !empty($details['specGroup'])) {
- $details['specGroup'] = is_array($details['specGroup']) ? $details['specGroup'] : json_decode($details['specGroup'], true);
- }
- //生成规格唯一索引
- $specMultiple = $details['specMultiple'];
- if (empty($specMultiple)) {
- continue;
- }
- if (!isset($details['salesNum']) || !is_numeric($details['salesNum'])){
- $details['salesNum'] = 0;
- }
- $details['salePrice'] = isset($specMultiple[0]['salePrice']) ? $specMultiple[0]['salePrice'] : 0;
- $details['setNum'] = isset($specMultiple[0]['setNum']) ? $specMultiple[0]['setNum'] : 0;
- $details['inventory'] = isset($specMultiple[0]['inventory']) ? $specMultiple[0]['inventory'] : 0;
- $details['unitName'] = isset($specMultiple[0]['unitName']) ? $specMultiple[0]['unitName'] : 0;
- if(!isset($details['marketPrice'])){
- $details['marketPrice'] = isset($specMultiple[0]['marketPrice']) ? $specMultiple[0]['marketPrice'] : 0;
- }
- foreach ($specMultiple as &$spec) {
- $index = $details['id'] . ':' . $spec['unitId'];//商品ID
- //$subName = '';
- if (!empty($spec['specGroup'])) {
- foreach ($spec['specGroup'] as $row) {
- $index .= empty($index) ? $row['specValueId'] : ':' . $row['specValueId'];
- }
- }
- $spec['index'] = $index;
- $spec['indexGroup'] = explode(':', $index);
- //$spec['subName'] = $subName;
- }
- $details['specMultiple'] = $specMultiple;
- $details['notArea'] = empty($details['notArea']) ? [] : json_decode($details['notArea'],true);
- $sql = "SELECT id,barCode,unitId,unitName,conversion,isMaster,barCode,specType,isDefault,`weight`,isNew FROM qianniao_sku_" . $this->enterpriseId . " WHERE goodsId=" . $details['basicGoodsId'] . " AND deleteStatus=" . StatusCode::$standard . " ORDER BY isMaster DESC";
- $skuResult = $objMSku->getQuery($sql);
- $skuData = [];
- if ($skuResult->isSuccess()) {
- $skuData = $skuResult->getData();
- $haveMaster = 0;
- $newSkuData = [];
- $noMasterUnidIds = [];
- foreach ($skuData as $key => &$value) {
- if ($value['specType'] == StatusCode::$specType['multiple']) {
- $value['barCode'] = '';
- }
- if ($value['isMaster'] == StatusCode::$standard && $haveMaster == 0) {
- $newSkuData[] = $value;
- $haveMaster = 1;
- }
- if ($value['isMaster'] == StatusCode::$delete && !in_array($value['unitId'], $noMasterUnidIds)) {
- $newSkuData[] = $value;
- $noMasterUnidIds[] = $value['unitId'];
- }
- }
- unset($skuData);
- $skuData = $newSkuData;
- }
- $details['unitData'] = $skuData;
- }
- return $data;
- }
- /**
- * Doc: (des="初始化规格数据")
- * User: XMing
- * Date: 2021/3/4
- * Time: 5:24 下午
- * @param $data
- * @return mixed
- */
- public static function formatInitSpec($data)
- {
- if (empty($data)) {
- return $data;
- }
- $specMultiple = $data['specMultiple'];
- if (empty($specMultiple)){
- return $data;
- }
- //初始化
- $data['minSalePrice'] = 0;//最低价格
- $data['maxSalePrice'] = 0;//最高价
- foreach ($specMultiple as &$spec) {
- $spec['index'] = '';//唯一索引
- $spec['salePrice'] = 0;//销售价格
- $spec['inventory'] = 0;//库存
- $spec['ladderPrice'] = [];//阶梯价格
- $spec['marketPrice'] = 0;//市场价格
- $spec['enabledLadder'] = '';//是否开启阶梯价格
- $spec['setNum'] = 0;//起定数量
- $spec['isActivityPrice'] = StatusCode::$delete;//初始化,是否享受活动价格
- $spec['limitNum'] = 0;//活动商品限购数量
- $spec['originPrice'] = 0;//商品原价
- $spec['costPrice'] = 0;//商品原价
- $spec['salesNum'] = 0;//规格销售量
- $spec['activity'] = [];//活动信息
- }
- $data['specMultiple'] = $specMultiple;
- return $data;
- }
- /**
- * Doc: (des="获取库存")
- * User: XMing
- * Date: 2021/3/4
- * Time: 5:36 下午
- * @param array $data
- * @return ResultWrapper
- * @throws Exception
- */
- private function formatInventorySpec(array $data): ResultWrapper
- {
- if (empty($data)){
- return ResultWrapper::success($data);
- }
- $shopId = getArrayItem($data,'shopId',0);
- $specMultiple = getArrayItem($data,'specMultiple',[]);
- $skuIds = [];
- foreach ($specMultiple as $item){
- if (!in_array($item['id'],$skuIds)){
- $skuIds[] = $item['id'];
- }
- }
- $this->objMInventory = new MInventory($this->enterpriseId, $this->userCenterId);
- $inventoryResult = $this->objMInventory->getInventoryByShopIdAndSkuIds($shopId,$skuIds);
- if (!$inventoryResult->isSuccess()){
- return ResultWrapper::fail($inventoryResult->getData(),$inventoryResult->getErrorCode());
- }
- $inventoryMap = $inventoryResult->getData();
- foreach ($specMultiple as &$item){
- $row = getArrayItem($inventoryMap,$item['id'],[]);
- $item['inventory'] = getArrayItem($row,'num',0);
- $item['otherNum'] = getArrayItem($row,'otherNum',0);
- }
- $data['specMultiple'] = $specMultiple;
- return ResultWrapper::success($data);
- }
- /**
- * @param $data
- * @return mixed
- * @throws Exception
- */
- public function getSkuInventorySpec($data): ResultWrapper
- {
- if (empty($data)) {
- return ResultWrapper::success($data);
- }
- $selectParams = [];
- foreach ($data as $item){
- $selectParams[$item['shopId']][] = $item['basicGoodsId'];
- }
- $this->objMInventory = new MInventory($this->enterpriseId, '');
- $inventoryMap = [];
- foreach ($selectParams as $shopId => $materielIds){
- $inventoryResult = $this->objMInventory->getInventoryByShopIdAndMaterielIds($shopId,$materielIds);
- if (!$inventoryResult->isSuccess()) {
- return ResultWrapper::fail($inventoryResult->getData(),$inventoryResult->getErrorCode());
- }
- $inventoryMap[$shopId] = $inventoryResult->getData();//库存数据
- }
- foreach ($data as &$goods) {
- if (!isset($goods['specType'])){
- //老数据es中可能没有
- $goods['specType'] = StatusCode::$specType['single'];
- }
- $goods['inventorTotal'] = isset($inventoryMap[$goods['shopId']][$goods['basicGoodsId']]['num']) ? $inventoryMap[$goods['shopId']][$goods['basicGoodsId']]['num'] : 0;//当前商品规格总库存
- $goods['inventorTotal'] = floatval($goods['inventorTotal']);
- if (!isset($goods['specMultiple'])) {
- continue;
- }
- $specMultiple = $goods['specMultiple'];
- $skuIds = [];
- foreach ($specMultiple as $spec) {
- $skuIds[] = $spec['skuId'];
- }
- unset($spec);
- $inventoryResult = $this->objMInventory->getInventoryByShopIdAndSkuIds($goods['shopId'],$skuIds);
- if (!$inventoryResult->isSuccess()){
- return ResultWrapper::fail($inventoryResult->getData(),$inventoryResult->getErrorCode());
- }
- $inventoryData = $inventoryResult->getData();
- foreach ($specMultiple as &$spec) {
- $spec['inventory'] = isset($inventoryData[$spec['skuId']]) ? $inventoryData[$spec['skuId']]['num'] : 0;
- }
- $goods['specMultiple'] = $specMultiple;
- }
- return ResultWrapper::success($data);
- }
- /**
- * 单位属性换算
- * @param $spec
- * @param $specType
- * @param $inventoryMapping
- * @param $goods
- * @return mixed
- */
- public function formatConversion($spec, $specType, $inventoryMapping, $goods)
- {
- if (empty($spec)) {
- return $spec;
- }
- //当权商品库存数据
- $thisSpec = isset($inventoryMapping[$goods['basicGoodsId']]['skuData']) ? $inventoryMapping[$goods['basicGoodsId']]['skuData'] : [];
- switch ($specType) {
- case StatusCode::$specType['single']:
- //取出主单位skuId
- $masterSkuId = '';
- foreach ($goods['unitData'] as $value){
- if ($value['isMaster'] == StatusCode::$standard){
- $masterSkuId = $value['id'];
- }
- }
- if ($spec['isNew'] == StatusCode::$standard){
- //新
- //主换辅 除
- //无属性的主单位有采购记录不可编辑,辅助单位可比编辑 4=>有记录 5=>无记录
- if ($spec['isMaster'] == StatusCode::$standard) {
- $spec['isEditSpec'] = isset($thisSpec[$masterSkuId]) ? StatusCode::$delete : StatusCode::$standard;
- $spec['inventory'] = isset($thisSpec[$masterSkuId]) ? $thisSpec[$masterSkuId]['inventoryNum'] : 0;//库存
- } else {
- $spec['isEditSpec'] = StatusCode::$delete;
- $spec['inventory'] = isset($thisSpec[$masterSkuId]) ? bcdiv($thisSpec[$masterSkuId]['inventoryNum'], $spec['conversion'], 8) : 0;//转换库存
- }
- }else{
- //旧
- //主换辅 乘
- if ($spec['isMaster'] == StatusCode::$standard) {
- $spec['isEditSpec'] = isset($thisSpec[$masterSkuId]) ? StatusCode::$delete : StatusCode::$standard;
- $spec['inventory'] = isset($thisSpec[$masterSkuId]) ? $thisSpec[$masterSkuId]['inventoryNum'] : 0;//库存
- } else {
- $spec['isEditSpec'] = StatusCode::$delete;
- $spec['inventory'] = isset($thisSpec[$masterSkuId]) ? bcmul($thisSpec[$masterSkuId]['inventoryNum'], $spec['conversion'], 8) : 0;//转换库存
- }
- }
- $spec['costPrice'] = isset($thisSpec[$spec['id']]['costPrice']) ? $thisSpec[$spec['id']]['costPrice'] : 0;//成本单价
- break;
- case StatusCode::$specType['multiple']:
- //有属性 同属性主辅换算
- //有属性,主 4=>有记录 5=>无记录
- if ($spec['isNew'] == StatusCode::$standard){
- //新
- //主换辅 除
- if ($spec['isMaster'] == StatusCode::$standard) {
- $spec['isEditSpec'] = isset($thisSpec[$spec['id']]) ? StatusCode::$delete : StatusCode::$standard;
- $spec['inventory'] = isset($thisSpec[$spec['id']]) ? $thisSpec[$spec['id']]['inventoryNum'] : 0;//库存
- $this->allMappingSpec[$spec['specGroupHash']] = $spec;//保存属性组
- } else {
- $spec['isEditSpec'] = isset($this->allMappingSpec[$spec['specGroupHash']]) ? $this->allMappingSpec[$spec['specGroupHash']]['isEditSpec'] : StatusCode::$delete;
- $spec['inventory'] = isset($this->allMappingSpec[$spec['specGroupHash']]) ? bcdiv($this->allMappingSpec[$spec['specGroupHash']]['inventory'], $spec['conversion'], 8) : 0;
- }
- }else{
- if ($spec['isMaster'] == StatusCode::$standard) {
- $spec['isEditSpec'] = isset($thisSpec[$spec['id']]) ? StatusCode::$delete : StatusCode::$standard;
- $spec['inventory'] = isset($thisSpec[$spec['id']]) ? $thisSpec[$spec['id']]['inventoryNum'] : 0;//库存
- $this->allMappingSpec[$spec['specGroupHash']] = $spec;//保存属性组
- } else {
- $spec['isEditSpec'] = isset($this->allMappingSpec[$spec['specGroupHash']]) ? $this->allMappingSpec[$spec['specGroupHash']]['isEditSpec'] : StatusCode::$delete;
- $spec['inventory'] = isset($this->allMappingSpec[$spec['specGroupHash']]) ? bcmul($this->allMappingSpec[$spec['specGroupHash']]['inventory'], $spec['conversion'], 8) : 0;
- }
- }
- $spec['costPrice'] = isset($thisSpec[$spec['id']]['costPrice']) ? $thisSpec[$spec['id']]['costPrice'] : 0;//成本单价
- break;
- }
- $spec['inventory'] = floor($spec['inventory']);
- return $spec;
- }
- /**
- * spec salesNum
- * @param $data
- * @param array $allGoodsIds
- * @return mixed
- * @throws Exception
- */
- public function getSalesNumBySkuSpec($data, $allGoodsIds = [])
- {
- $cartData = [];
- if (!empty($allGoodsIds)) {
- $objMCart = new MCart($this->userCenterId, $this->enterpriseId);
- $cartData = $objMCart->getCartNumByGoodsId($allGoodsIds);
- }
- foreach ($data as &$goods) {
- //[{"skuId":1,"salesNum":10},{"skuId":2,"salesNum":10}] salesNum
- $salesNumArr = [];
- if (!empty($goods['salesNum'])) {
- $salesNumData = is_string($goods['salesNum']) ? json_decode($goods['salesNum'], true) : $goods['salesNum'];
- $goods['oldSalesNum'] = $salesNumData;//复制旧数据
- $goods['salesNum'] = array_sum(array_column($salesNumData, 'salesNum'));
- if ($salesNumData) {
- foreach ($salesNumData as $salesNum) {
- $salesNumArr[$salesNum['skuId']] = $salesNum['salesNum'];
- }
- }
- } else {
- $goods['salesNum'] = 0;
- }
- if (isset($goods['specMultiple']) && !empty($goods['specMultiple'])) {
- foreach ($goods['specMultiple'] as &$spec) {
- $spec['salesNum'] = isset($salesNumArr[$spec['id']]) ? $salesNumArr[$spec['id']] : 0;//销量
- $spec['cartNum'] = isset($cartData[$goods['id']][$spec['id']]) ? $cartData[$goods['id']][$spec['id']] : 0;//购物车数量
- }
- }
- }
- return $data;
- }
- /**
- * Doc: (des="")
- * User: XMing
- * Date: 2021/3/4
- * Time: 7:13 下午
- * @param array $data
- * @return ResultWrapper
- */
- public function getSalesNumDetails_new(array $data): ResultWrapper
- {
- if (empty($data)){
- return ResultWrapper::success([]);
- }
- }
- /**
- * 格式化详情数据,销量
- * @param $data
- * @param array $allGoodsIds
- * @return mixed
- * @throws Exception
- */
- public function getSalesNumDetails($data, $allGoodsIds = [])
- {
- $cartData = [];
- if (!empty($allGoodsIds)) {
- $objMCart = new MCart($this->userCenterId, $this->enterpriseId);
- $cartData = $objMCart->getCartNumByGoodsId($allGoodsIds);
- }
- foreach ($data as &$goods) {
- $salesNumArr = [];
- if (!empty($goods['oldSalesNum'])) {
- $salesNumData = $goods['oldSalesNum'];
- if (is_string($salesNumData)){
- $salesNumData = json_decode($salesNumData,true);
- }
- unset($goods['oldSalesNum']);
- if (is_array($salesNumData)) {
- foreach ($salesNumData as $salesNum) {
- $salesNumArr[$salesNum['skuId']] = $salesNum['salesNum'];
- }
- }
- }
- if (!empty($goods['salesNum'])){
- $salesNumData = $goods['salesNum'];
- if (is_string($salesNumData)){
- $salesNumData = json_decode($salesNumData,true);
- }
- if (is_array($salesNumData)){
- $goods['salesNum'] = array_sum(array_column($salesNumData,'salesNum'));
- }else{
- $goods['salesNum'] = 0;
- }
- if (is_array($salesNumData)) {
- foreach ($salesNumData as $salesNum) {
- $salesNumArr[$salesNum['skuId']] = $salesNum['salesNum'];
- }
- }
- }
- if (isset($goods['specMultiple']) && !empty($goods['specMultiple'])) {
- foreach ($goods['specMultiple'] as &$spec) {
- $spec['salesNum'] = isset($salesNumArr[$spec['id']]) ? $salesNumArr[$spec['id']] : 0;//销量
- $spec['cartNum'] = isset($cartData[$goods['id']][$spec['id']]) ? $cartData[$goods['id']][$spec['id']] : 0;//购物车数量
- }
- }
- if ($this->isFront){
- $goods['salesNum'] = isset($goods['virtualSalesNum']) ? $goods['virtualSalesNum'] : 0;
- }
- }
- return $data;
- }
- /**
- * @param $data
- * @return mixed
- * @throws Exception
- */
- public function getPriceBySkuSpec($data): ResultWrapper
- {
- if (empty($data)) {
- return ResultWrapper::success($data);
- }
- //查询价格参数
- $allGoodsId = [];
- $selectParam['material'] = [];
- foreach ($data as $goods) {
- $allGoodsId[] = $goods['id'];
- $selectParam['material'][$goods['shopId']][] = $goods['id'];
- }
- if (!empty($this->useCustomerId)){
- $selectParam['customerId'] = $this->useCustomerId;//客户有特殊调价
- }
- $priceResult = $this->objMPrice->getPrice($selectParam);
- if (!$priceResult->isSuccess()) {
- return ResultWrapper::fail($priceResult->getData(),$priceResult->getErrorCode());
- }
- $priceResult = $priceResult->getData();
- $goodsPriceMapping = [];
- foreach ($priceResult as $shopPriceArr) {
- foreach ($shopPriceArr as $goodsId => $goodsSkuArr) {
- $goodsPriceMapping[$goodsId] = $goodsSkuArr;
- }
- }
- switch ($this->isFront) {
- case true: // 前台
- $objMCustomer = new MCustomer($this->enterpriseId, $this->userCenterId);
- $objMActivity = new MActivity($this->userCenterId, $this->enterpriseId);
- if (!empty($this->userCenterId)){
- $customerResult = $objMCustomer->getCustomerInfoByUserCenterId($this->userCenterId);
- if (!$customerResult->isSuccess()){
- return ResultWrapper::fail($customerResult->getData(),$customerResult->getErrorCode());
- }
- $customer = $customerResult->getData();
- }
- $activityArr = [];
- //获取促销活动价格
- $dbResult = $objMActivity->getActivity([
- 'goodsId' => implode(',', $allGoodsId),
- 'customerType' => isset($customer['type']) ? $customer['type'] : 0,
- ]);
- $activityResult = $dbResult->getData();
- unset($dbResult);
- foreach ($activityResult as $activity) {
- $activityArr[$activity['goodsId'] . $activity['skuId']] = $activity;
- }
- foreach ($data as &$goods) {
- if (!isset($goodsPriceMapping[$goods['id']])) {
- //当前商品的价格信息不存在
- continue;
- }
- $goodsPriceInfo = $goodsPriceMapping[$goods['id']];//当前商品价格信息
- $specMultiple = $goods['specMultiple'];//规格组
- foreach ($specMultiple as &$spec) {
- $bool = isset($activityArr[$goods['id'] . $spec['id']]);//是否具有活动价格
- $spec["marketPrice"] = isset($goodsPriceInfo[$spec['id']]) ? $goodsPriceInfo[$spec['id']]['marketPrice'] : 0;//市场价格
- $spec["originPrice"] = isset($goodsPriceInfo[$spec['id']]) ? $goodsPriceInfo[$spec['id']]['salePrice'] : 0;//原价
- // 计算属性最小单位展示价格
- if(isset($goodsPriceInfo[$spec['id']]['minUnitPriceConvert']) && !empty($goodsPriceInfo[$spec['id']]['minUnitPriceConvert'])){
- $goodsPriceInfo[$spec['id']]['minUnitPrice'] = bcdiv($goodsPriceInfo[$spec['id']]['salePrice'], $goodsPriceInfo[$spec['id']]['minUnitPriceConvert'], 2);
- }else{
- $goodsPriceInfo[$spec['id']]['minUnitPrice'] = '0.00';
- }
- if ($bool) {
- $activityDetails = $activityArr[$goods['id'] . $spec['id']];//活动详情
- $spec['isActivity'] = StatusCode::$standard;//活动价格
- //获取用户活动购买数量
- if (!empty($this->userCenterId)) {
- $userLimit = (int)$this->objActivityLimitCache->getLimit($activityDetails["activityId"], $goods['id'], $spec['id'], $this->userCenterId);
- //活动商品用户限购数
- $goodsLimit = (int)$activityDetails['limitNum'];
- if ($userLimit < $goodsLimit) {
- //此商品相对用户,满足活动价
- $spec['isActivityPrice'] = StatusCode::$standard;//满足活动价
- }
- $spec['limitNum'] = $goodsLimit;
- }
- //具有活动价格
- $spec["salePrice"] = $activityDetails['price'];//销售价格
- $spec["minUnitPrice"] = $goodsPriceInfo[$spec['id']]['minUnitPrice'];//属性最小单位展示价
- $spec["ladderPrice"] = [];//阶梯价格
- $spec["enabledLadder"] = 0;//是否开启阶梯价阶梯
- $spec["setNum"] = isset($goodsPriceInfo[$spec['id']]['setNum']) ? $goodsPriceInfo[$spec['id']]['setNum'] : 0;//起定数量
- $spec["isSale"] = isset($goodsPriceInfo[$spec['id']]['isSale']) ? $goodsPriceInfo[$spec['id']]['isSale'] : 5;//起定数量
- $spec['minUnitPriceConvert'] = getArrayItem($goodsPriceInfo[$spec['id']], 'minUnitPriceConvert', 0);
- $spec['activity'] = [
- 'activityId' => $activityDetails['activityId'],//活动ID
- 'images' => empty($activityDetails['images']) ? [] : json_decode($activityDetails['images'],true),//活动图片
- 'title' => $activityDetails['title'],//活动标题
- 'startTime' => $activityDetails['startTime'],
- 'endTime' => $activityDetails['endTime'],
- 'activityType' => $activityDetails['activityType'],//活动类型
- 'activityNum' => $activityDetails['activityNum'],//活动总数量
- 'limitNum' => $activityDetails['limitNum'],//用户限购数量
- 'salesPrice' => $activityDetails['price'],//活动价格
- 'originPrice' => $spec['originPrice'],//商品原价
- 'goodsActivityId' => $activityDetails['goodsActivityId'],//活动商品表id
- ];//活动详情
- } else {
- if (!isset($goodsPriceInfo[$spec['id']])) {
- //当前商品sku价格信息不存在
- continue;
- }
- $spec["salePrice"] = $goodsPriceInfo[$spec['id']]['salePrice'];//销售价格
- $spec["minUnitPrice"] = $goodsPriceInfo[$spec['id']]['minUnitPrice'];// 属性最小单位展示价
- $spec["memberPrice"] = getArrayItem($goodsPriceInfo[$spec['id']], 'memberPrice', 0); // 会员价格
- $spec["marketPrice"] = $goodsPriceInfo[$spec['id']]['marketPrice'];//市场价格
- $spec["ladderPrice"] = $goodsPriceInfo[$spec['id']]['ladderPrice'];//阶梯价格
- $spec["enabledLadder"] = $goodsPriceInfo[$spec['id']]['enabledLadder'];//是否开启阶梯价阶梯
- $spec["setNum"] = isset($goodsPriceInfo[$spec['id']]['setNum']) ? $goodsPriceInfo[$spec['id']]['setNum'] : 0;//起定数量
- $spec["isSale"] = isset($goodsPriceInfo[$spec['id']]['isSale']) ? $goodsPriceInfo[$spec['id']]['isSale'] : 5;//起定数量
- $spec['minUnitPriceConvert'] = getArrayItem($goodsPriceInfo[$spec['id']], 'minUnitPriceConvert', 0);
- $spec["isActivity"] = StatusCode::$delete;
- }
- $this->commonMapping[$goods['id']][] = $spec["salePrice"];//商品价格集合
- }
- $goods['specMultiple'] = $specMultiple;
- }
- break;
- case false;
- //后台
- foreach ($data as &$goods) {
- if (!isset($goodsPriceMapping[$goods['id']])) {
- //当前商品的价格信息不存在
- continue;
- }
- $goodsPriceInfo = $goodsPriceMapping[$goods['id']];//当前商品价格信息
- $specMultiple = $goods['specMultiple'];//规格组
- foreach ($specMultiple as &$spec) {
- if (!isset($goodsPriceInfo[$spec['id']])) {
- //当前商品sku价格信息不存在
- continue;
- }
- $spec["salePrice"] = $goodsPriceInfo[$spec['id']]['salePrice'];//销售价格
- $spec["memberPrice"] = getArrayItem($goodsPriceInfo[$spec['id']], 'memberPrice', 0); // 会员价格
- $spec["marketPrice"] = $goodsPriceInfo[$spec['id']]['marketPrice'];//市场价格
- $spec["originPrice"] = $goodsPriceInfo[$spec['id']]['salePrice'];//原价
- $spec["ladderPrice"] = $goodsPriceInfo[$spec['id']]['ladderPrice'];//阶梯价格
- $spec["enabledLadder"] = $goodsPriceInfo[$spec['id']]['enabledLadder'];//是否开启阶梯价阶梯
- $spec["setNum"] = isset($goodsPriceInfo[$spec['id']]['setNum']) ? $goodsPriceInfo[$spec['id']]['setNum'] : 0;//起定数量
- $spec["isSale"] = isset($goodsPriceInfo[$spec['id']]['isSale']) ? $goodsPriceInfo[$spec['id']]['isSale'] : 5;//起定数量
- $spec['minUnitPriceConvert'] = getArrayItem($goodsPriceInfo[$spec['id']], 'minUnitPriceConvert', 0);
- $spec["isActivity"] = StatusCode::$delete;
- $this->commonMapping[$goods['id']][] = $spec["salePrice"];//商品价格集合
- }
- $goods['specMultiple'] = $specMultiple;
- }
- break;
- }
- return ResultWrapper::success($data);
- }
- /**
- * @param $data
- * @return mixed
- */
- public function getActivityPrice($data)
- {
- if (empty($data)) {
- return [];
- }
- if (empty($this->customerType)) {
- return [];
- }
- //获取促销活动价格
- $dbResult = $this->objMActivity->getActivity([
- 'goodsId' => implode(',', array_column($data, 'id')),
- 'customerType' => $this->customerType,
- ]);
- $activityResult = $dbResult->getData();
- unset($dbResult);
- foreach ($activityResult as $activity) {
- $activityArr[$activity['goodsId'] . $activity['skuId']] = $activity;
- }
- }
- /**
- * 拼接活动
- * @param $goodsData
- * @return mixed
- * @throws Exception
- */
- private function getActivity($goodsData)
- {
- if (empty($goodsData)) return $goodsData;
- $objMActivity = new MActivity($this->userCenterId, $this->enterpriseId);
- $objMCustomer = new MCustomer($this->enterpriseId, $this->userCenterId);
- $customer = $objMCustomer->getCustomerInfoByUserCenterId($this->userCenterId);
- if (!$customer->isSuccess()) {
- return $goodsData;
- }
- $customerType = $customer->getData()['type'];
- $dbResult = $objMActivity->getActivity(['goodsId' => $goodsData['id'], 'customerType' => $customerType]);
- if (!$dbResult->isSuccess()) {
- return $goodsData;
- }
- $allActivity = [];
- foreach ($dbResult->getData() as $activity) {
- $allActivity[$activity['skuId']][] = $activity;
- }
- if (isset($goodsData['skuData'])){
- foreach ($goodsData['skuData'] as &$sku) {
- if (!isset($sku['skuId'])){
- $sku['activity'] = (object)[];
- continue;
- }
- $sku['activity'] = isset($allActivity[$sku['skuId']]) ? $allActivity[$sku['skuId']] : (object)[];
- }
- }
- return $goodsData;
- }
- /**
- * 通过区域获取销售店铺
- * @param ?string $areaCode
- * @return ResultWrapper
- */
- public function getShopIdsByArea(?string $areaCode = '')
- {
- $fields = 'id,warehouseId';
- $sql = 'select '.$fields.' from qianniao_shop_1 where
- enterpriseId = '.$this->enterpriseId;
- if (!empty($areaCode)){
- $sql .= " and (JSON_CONTAINS(salesArea->'$[*]', '\"".$areaCode."\"', '$') OR JSON_CONTAINS(salesArea->'$[*]','\"0-0-0\"','$'))";
- }
- $sql .= ' and warehouseId IS NOT NULL';
- $result = $this->objDGoods->query($sql);
- if ($result === false){
- Logger::logs(E_USER_ERROR,'店铺查询失败',__CLASS__,__LINE__,$this->objDGoods->error());
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- //返回数据为空
- if (empty($result)){
- return ResultWrapper::success([]);
- }
- $shopIds = [];
- $shopIdBindWarehouseId = [];
- foreach ($result as $value){
- $shopIds[] = $value['id'];
- $shopIdBindWarehouseId[$value['id']] = $value['warehouseId'];
- }
- $map = [
- 'shopIds' => $shopIds,
- 'shopIdBindWarehouseId' => $shopIdBindWarehouseId
- ];
- return ResultWrapper::success($map);
- }
- /**
- * 查询商品
- * @param array $condition
- * shopIds array 店铺ids
- * keyword string 商品名称
- * goodsId int 商品id
- * categoryId int 分类id
- * orderBy string 排序
- * @param bool $getTotal
- * @return ResultWrapper
- */
- public function getGoodsBySelectParams(array $condition = [],bool $getTotal = false): ResultWrapper
- {
- //数据总条数
- $total = 0;
- $fields = "g.*,(g.realSalesNum) as realSalesNum,
- b.title,b.description,b.images,b.categoryId,b.brandId,b.specType,b.categoryPath,b.isEq,
- b.describe,b.categoryPath,b.specGroup,
- c.title as categoryName,
- d.title as brandName";
- $sql = 'select '.$fields.' from qianniao_goods_'.$this->enterpriseId.' as g
- left join qianniao_goods_basic_'.$this->enterpriseId.' as b
- on g.basicGoodsId = b.id
- left join qianniao_goods_category_'.$this->enterpriseId.' as c
- on c.id = b.categoryId
- left join qianniao_goods_brand_'.$this->enterpriseId.' as d
- on d.id = b.brandId
- where
- g.deleteStatus = '.StatusCode::$standard;
- if (isset($condition['enableStatus']) && !empty($condition['enableStatus'])){
- $sql .= ' AND g.enableStatus = '.$condition['enableStatus'];
- }
- //品牌Id
- if ( isset($condition['brandId']) && !empty($condition['brandId']) ){
- $sql .= ' AND ';
- if (is_array($condition['brandId'])){
- foreach($condition['brandId'] as $brandIdKey => $brandIdValue){
- if($brandIdValue == end($condition['brandId'])){//是最后一个
- $sql .= ' FIND_IN_SET('.$brandIdValue.',b.brandId'.')';
- }else{
- $sql .= ' FIND_IN_SET('.$brandIdValue.',b.brandId'.') or ';
- }
- }
- }else{
- $sql .= ' b.brandId = '.$condition['brandId'];
- }
- }
- //商品服务
- if (isset($condition['support']) && !empty($condition['support'])){
- $sql .= ' AND ';
- if (is_array($condition['support'])) {
- foreach ($condition['support'] as $supportKey => $supportValue) {
- if ($supportValue == end($condition['support'])) {//是最后一个
- $sql .= ' FIND_IN_SET(' . $supportValue . ',g.support' . ')';
- } else {
- $sql .= ' FIND_IN_SET(' . $supportValue . ',g.support' . ') or ';
- }
- }
- }else{
- $sql .= ' FIND_IN_SET('.$condition['support'].',g.support'.')';
- }
- }
- //商品分组
- if (isset($condition['goodsGroups']) && !empty($condition['goodsGroups'])){
- // $sql .= ' AND ';
- // foreach($condition['goodsGroups'] as $supportKey => $supportValue){
- // if($supportValue == end($condition['goodsGroups'])){//是最后一个
- // $sql .= ' FIND_IN_SET('.$supportValue.',g.goodsGroups'.')';
- // }else{
- // $sql .= ' FIND_IN_SET('.$supportValue.',g.goodsGroups'.') or ';
- // }
- // }
- $sql .= ' AND FIND_IN_SET('.$condition['goodsGroups'].',g.goodsGroups'.')';
- }
- //商品id
- if (isset($condition['goodsId']) && !empty($condition['goodsId'])){
- $sql .= ' and g.id = '.$condition['goodsId'];
- }
- //过滤商品id
- if (isset($condition['notGoodsIds']) && !empty($condition['notGoodsIds'])){
- $notGoodsIdsStr = implode(',',$condition['notGoodsIds']);
- $sql .= ' and g.id not in('.$notGoodsIdsStr.') ';
- }
- //查询的商品id
- if (isset($condition['goodsIds']) && !empty($condition['goodsIds'])){
- $goodsIdsStr = implode(',',$condition['goodsIds']);
- $sql .= ' and g.id in('.$goodsIdsStr.') ';
- }
-
- if( isset($condition['merchantId']) && !empty($condition['merchantId'])){
- $sql .= ' AND g.merchantId = '.$condition['merchantId'];
- } else {
- if (isset($condition['ifMerchant']) ){
- if($condition['ifMerchant'] == StatusCode::$delete){
- $sql .= ' AND g.merchantId = 0';
- } else {
- $sql .= ' AND g.merchantId <> 0';
- }
- }
- }
- //店铺ids array
- if(isset($condition['shopId']) && !empty($condition['shopId'])){
- if (is_array($condition['shopId'])){
- $str = implode(',',$condition['shopId']);
- $sql .= ' and g.shopId in('.$str.')';
- }else{
- $sql .= ' and g.shopId = '.(int)$condition['shopId'];
- }
- }else{
- if (isset($condition['shopIds']) && !empty($condition['shopIds'])){
- $str = implode(',',$condition['shopIds']);
- $sql .= ' and g.shopId in('.$str.')';
- }
- }
- //商品关键字
- if (isset($condition['keyword']) && !empty($condition['keyword'])){
- $keywordId = 0;
- preg_match_all( '/\d+/' , $condition['keyword'] , $arr);
- if (isset($arr) && is_array($arr)){
- $arr = array_shift($arr);
- $keywordId = isset($arr[0]) ? (int)floatval($arr[0]) : 0;
- }
- $sql .= ' AND ( b.title like "%'.$condition['keyword'].'%" ';
- if (!empty($keywordId)){
- $sql .= ' OR b.id = '.$keywordId;
- }
- $sql .= ' ) ';
- }
- //分类路径
- if (isset($condition['categoryPath']) && !empty($condition['categoryPath'])){
- if (is_string($condition['categoryPath']) || is_int($condition['categoryPath'])){
- $condition['categoryPath'] = explode(',',$condition['categoryPath']);
- }
- $endPathId = array_pop($condition['categoryPath']);
- if (!empty($endPathId)){
- $sql .= ' and (find_in_set('.$endPathId.',b.categoryPath) or find_in_set('.$endPathId.',b.assistCategoryId)) ';
- }
- }
- //分类id
- if (isset($condition['categoryId']) && !empty($condition['categoryId'])){
- $sql .= ' and (find_in_set('.$condition['categoryId'].',b.categoryPath) or find_in_set('.$condition['categoryId'].',b.assistCategoryId)) ';
- }
- if (isset($condition['inStock'])) {
- $goodsBasicIdResult = self::getInOrOutOfStockGoodsBasicId($condition['inStock']);
- if (!$goodsBasicIdResult->isSuccess()) {
- return ResultWrapper::fail($goodsBasicIdResult->getData(), $goodsBasicIdResult->getErrorCode());
- }
- $goodsBasicIds = $goodsBasicIdResult->getData();
- $where = '';
- if (!empty($goodsBasicIds)) {
- $where .= " AND (";
- foreach ($goodsBasicIds as $key => $goodsBasicId) {
- $cond = $key ? " OR " : "";
- $where .= $cond . '(g.basicGoodsId = ' . $goodsBasicId['basicGoodsId'] . ' and g.shopId=' . $goodsBasicId['shopId'] . ')';
- }
- $where .= ") ";
- }
- $sql .= $where;
- }
- //查询数据总条数
- if ($getTotal === true){
- $total = count((array)$this->objDGoods->query($sql));
- }
- //排序
- // if (isset($condition['orderBy']) && !empty($condition['orderBy'])){
- // $sql .= ' order by '.$condition['orderBy'];
- // }else{
- // $sql .= ' order by g.topTime DESC,g.createTime DESC ';
- // }
- //销售排序
- if ( isset($condition['sort']) && !empty($condition['sort']) ){
- if ($condition['sort'] == 1){//倒序
- $sql .= ' order by g.topTime DESC,realSalesNum DESC,g.createTime DESC';
- }else{
- $sql .= ' order by g.topTime DESC,realSalesNum ASC,g.createTime DESC';
- }
- }else{
- $sql .= ' order by g.topTime DESC,g.createTime DESC';
- }
-
- // if ( isset($condition['priceSort']) && !empty($condition['priceSort']) ){
- // $sql .= ',g. DESC';
- // }
- //分页
- if (isset($condition['offset']) && isset($condition['limit']) && !empty($condition['limit'])){
- $sql .= ' limit '.$condition['offset'].','.$condition['limit'];
- }
- $dbResult = $this->objDGoods->query($sql);
- if ($dbResult === false){
- Logger::logs(E_USER_ERROR,'查询商品失败',__CLASS__,__LINE__,$this->objDGoods->error());
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- //销量放进去
- // V($dbResult);
- // $salesNumArray = (array)json_decode(getArrayItem($goods,'salesNum',''),true);
- // unset($goods['salesNum']);
- // $goods['salesNum'] = array_sum(array_column($salesNumArray,'salesNum'));
- $map = [
- 'total' => $total,
- 'data' => $dbResult
- ];
- return ResultWrapper::success($map);
- }
- /**
- * 商品数据/最高最低价格
- * @param array $data
- * @param array $shopIdBindWarehouseId
- * @return ResultWrapper
- * @throws Exception
- */
- private function formatGoodsData(array $data,array $shopIdBindWarehouseId)
- {
- if(empty($data)){
- return ResultWrapper::success($data);
- }
- // 最高最低价格
- $priceResult = $this->objMPrice->getPolePrice(array_column($data,'id'),$this->useCustomerId);
- if (!$priceResult->isSuccess()){
- return ResultWrapper::fail($priceResult->getData(),$priceResult->getErrorCode());
- }
- $allRangePriceData = $priceResult->getData();
- //unitData
- $condition = ['basicGoodsIds'=> array_column($data,'basicGoodsId')];
- $unitDataResult = self::getUnitDataBySelectParams($condition);
- if (!$unitDataResult->isSuccess()){
- return ResultWrapper::fail($unitDataResult->getData(),$unitDataResult->getErrorCode());
- }
- $allUnitData = $unitDataResult->getData();
- foreach ($data as $key => &$value){
- $value['unitData'] = isset($allUnitData[$value['basicGoodsId']]) ? $allUnitData[$value['basicGoodsId']] : [];
- $value['images'] = empty(json_decode($value['images'], true)) ? [] : json_decode($value['images'], true);
- $value['specGroup'] = empty(json_decode($value['specGroup'], true)) ? [] : json_decode($value['specGroup'], true);
- $value['title'] = htmlspecialchars_decode($value['title'], ENT_QUOTES);
- $description = htmlspecialchars_decode($value['description'], ENT_QUOTES);
- $description = str_replace('?imageView2/2/w/750/h/750','',$description);
- $description = str_replace('?imageView2/2/w/750','',$description);
- $value['content'] = $description;
- $value['description'] = $description;
- $value['warehouseId'] = isset($shopIdBindWarehouseId[$value['shopId']]) ? $shopIdBindWarehouseId[$value['shopId']] : null;
- $value['minSalePrice'] = isset($allRangePriceData[$value['id']]) ? $allRangePriceData[$value['id']]['minSalePrice'] : 0;
- $value['maxSalePrice'] = isset($allRangePriceData[$value['id']]) ? $allRangePriceData[$value['id']]['maxSalePrice'] : 0;
- $value['minMarketPrice'] = isset($allRangePriceData[$value['id']]) ? $allRangePriceData[$value['id']]['minMarketPrice'] : 0;
- $value['maxMarketPrice'] = isset($allRangePriceData[$value['id']]) ? $allRangePriceData[$value['id']]['maxMarketPrice'] : 0;
- $value['minMemberPrice'] = isset($allRangePriceData[$value['id']]) ? $allRangePriceData[$value['id']]['minMemberPrice'] : 0;
- $value['maxMemberPrice'] = isset($allRangePriceData[$value['id']]) ? $allRangePriceData[$value['id']]['maxMemberPrice'] : 0;
- $value['marketPrice'] = isset($allRangePriceData[$value['id']]) ? $allRangePriceData[$value['id']]['minMarketPrice'] : 0;
- $value['minMinUnitPrice'] = isset($allRangePriceData[$value['id']]) ? $allRangePriceData[$value['id']]['minMinUnitPrice'] : 0;
- $value['maxMinUnitPrice'] = isset($allRangePriceData[$value['id']]) ? $allRangePriceData[$value['id']]['maxMinUnitPrice'] : 0;
- }
- $inventoryResult = self::getSkuInventorySpec($data);
- if (!$inventoryResult->isSuccess()){
- return ResultWrapper::fail($inventoryResult->getData(),$inventoryResult->getErrorCode());
- }
- $data = $inventoryResult->getData();
- return ResultWrapper::success($data);
- }
- /**
- * Doc: (des="格式化json数据以及销量")
- * User: XMing
- * Date: 2020/7/14
- * Time: 11:08 上午
- * @param array $data
- * @return array
- */
- public static function formatJsonGoods(array $data)
- {
- if (empty($data)){
- return $data;
- }
- foreach ($data as &$item){
- if (!isset($item['virtualSalesNum'])){
- $item['salesNum'] = 0;
- continue;
- }
- $item['salesNum'] = (int) $item['virtualSalesNum'];
- }
- return $data;
- }
- /**
- * @param array $condition
- * @return ResultWrapper
- */
- private function getUnitDataBySelectParams(array $condition = [])
- {
- $fields = 'id,unitId,unitName,conversion,goodsId,isMaster,barCode,specType';
- $sql = 'SELECT '.$fields.' FROM qianniao_sku_' . $this->enterpriseId . '
- WHERE deleteStatus=' . StatusCode::$standard;
- if (isset($condition['basicGoodsIds']) && !empty($condition['basicGoodsIds'])){
- $str = implode(',',$condition['basicGoodsIds']);
- $sql .= ' and goodsId in('.$str.')';
- }
- $dbResult = $this->objDGoods->query($sql);
- if ($dbResult === false){
- Logger::logs(E_USER_ERROR,'获取单位出错',__CLASS__,__LINE__,$this->objDGoods->error());
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- $haveMaster = [];
- $noMasterUnitIds = [];
- foreach ($dbResult as $key => $item){
- $haveMaster[$item['goodsId']] = 0;
- $noMasterUnitIds[$item['goodsId']] = [];
- }
- $newSkuData = [];
- foreach ($dbResult as $key => &$value) {
- if ($value['specType'] == StatusCode::$specType['multiple']) {
- $value['barCode'] = '';
- }
- if ($value['isMaster'] == StatusCode::$standard && $haveMaster[$value['goodsId']] == 0) {
- $newSkuData[$value['goodsId']][] = $value;
- $haveMaster[$value['goodsId']] = 1;
- }
- if ($value['isMaster'] == StatusCode::$delete && !in_array($value['unitId'], $noMasterUnitIds[$value['goodsId']])) {
- $newSkuData[$value['goodsId']][] = $value;
- $noMasterUnitIds[$value['goodsId']][] = $value['unitId'];
- }
- }
- return ResultWrapper::success($newSkuData);
- }
- /**
- * 前台获取商品详情
- * @param $goodsId
- * @param $areaCode
- * @return ResultWrapper
- * @throws Exception
- */
- public function getApiGoodsInfo($goodsId, $areaCode = ''): ResultWrapper
- {
- $shopResult = self::getShopIdsByArea($areaCode);
- if (!$shopResult->isSuccess()){
- return ResultWrapper::fail($shopResult->getData(),ErrorCode::$dberror);
- }
- $shopData = $shopResult->getData();//销售区域店铺数据
- if (empty($shopData)){
- return ResultWrapper::fail('商品不再此区域销售', ErrorCode::$notAllowAccess);
- }
- // 查询商品数据
- $condition = [
- 'goodsId' => $goodsId,
- 'shopIds' => $shopData['shopIds']
- ];
- $goodsResult = self::getGoodsBySelectParams($condition,false);
- if (!$goodsResult->isSuccess()){
- return ResultWrapper::fail($goodsResult->getData(),$goodsResult->getErrorCode());
- }
- $goodsData = $goodsResult->getData()['data'];
- if (empty($goodsData)){
- return ResultWrapper::fail('商品不在此区域销售',ErrorCode::$paramError);
- }
- //获取客户id
- !empty($this->userCenterId) && $this->useCustomerId = $this->objMCustomer->getCustomerIdByUserCenterId($this->userCenterId);
- // 格式化商品数据
- $formatGoodsRes = self::formatGoodsData($goodsData,$shopData['shopIdBindWarehouseId']);
- if (!$formatGoodsRes->isSuccess()){
- return ResultWrapper::fail($formatGoodsRes->getData(),$formatGoodsRes->getErrorCode());
- }
- $goodsData = $formatGoodsRes->getData();
- $goodsData = array_shift($goodsData);
- $goodsDataResult = self::formatDetails($goodsData);
- if (!$goodsDataResult->isSuccess()){
- return ResultWrapper::fail($goodsDataResult->getData(),$goodsDataResult->getErrorCode());
- }
- $goodsData = $goodsDataResult->getData();
- $goodsDataResult = self::formatGoodsExpress($goodsData);
- if (!$goodsDataResult->isSuccess()){
- return ResultWrapper::fail($goodsDataResult->getData(),$goodsDataResult->getErrorCode());
- }
- $goodsData = $goodsDataResult->getData();
- $goodsData = self::ruleSalePrice($goodsData);//按固定规则获取价格
- $goodsData = self::getActivity($goodsData);
- $goodsData['isCollect'] = $this->objMGoodsCollect->hasCollect($goodsData['id']);
-
- // 写入客户浏览商品记录数
- $objMCustomerVisitsLog = new MCustomerVisitsLog($this->enterpriseId, $this->userCenterId);
- $customerVisitsData = [
- 'usercenterid' => $this->userCenterId,
- 'customerid' => $this->useCustomerId,
- 'shopid' => $goodsData['shopId'],
- 'goodsid' => $goodsData['basicGoodsId'],
- 'createTime' => time(),
- ];
- $objMCustomerVisitsLog->addCustomerVisitsLog($customerVisitsData);
- // 展示商品服务信息
- $objMGoodsSupport = new MGoodsSupport($this->enterpriseId, $this->userCenterId);
- $supportId = $goodsData['support'];
- $supportresult = $objMGoodsSupport->getGoodsSupport($supportId);
- if(!$supportresult->isSuccess()){
- return ResultWrapper::fail($supportresult->getData(),$supportresult->getErrorCode());
- }
- $goodsData['support'] = $supportresult->getData();
-
- return ResultWrapper::success($goodsData);
- }
- /**
- * Doc: (des="根据规则处理商品详情默认显示的价格")
- * User: XMing
- * Date: 2020/8/14
- * Time: 5:32 下午
- * @param array $data
- * @return array
- */
- private function ruleSalePrice(array $data)
- {
- if (empty($data)){
- return $data;
- }
- if (!isset($data['specMultiple'])){
- return $data;
- }
- $specMultiple = $data['specMultiple'];
- foreach ($specMultiple as &$value){
- if (isset($value['salePrice']) && empty($value['salePrice'])){
- $value['salePrice'] = '0.00';
- }
- }
- $data['specMultiple'] = $specMultiple;
- unset($value);
- $salePrice = 0;
- foreach ($specMultiple as $value){
- if (isset($value['isDefault']) && $value['isDefault'] == StatusCode::$standard){
- $salePrice = $value['salePrice'];//默认规格的价格
- break;
- }
- }
- if ($salePrice != 0){
- //1。如果默认规格价格不为0,用默认价格
- $data['salePrice'] = $salePrice;
- return $data;
- }
- //2。默认价格没有,用最低价格
- $salePrice = $data['minSalePrice'];//最低价格
- if($salePrice != 0){
- $data['salePrice'] = $salePrice;
- return $data;
- }
- //3.取谷歌中有价格的
- foreach ($specMultiple as $value){
- if (isset($value['salePrice']) && $value['salePrice'] != 0){
- $salePrice = $value['salePrice'];
- break;
- }
- }
- $data['salePrice'] = $salePrice;
- return $data;
- }
- /**
- * 根据商品ids数组获取商品names
- * @param $ids
- * @return array|ResultWrapper
- * @throws Exception
- */
- public function getNameByGoodsIds($ids)
- {
- if (empty($ids)){
- return ResultWrapper::success([]);
- }
- $objDGoodsBasic = new DGoodsBasic();
- $objDGoodsBasic->setTable($objDGoodsBasic->get_Table() . '_' . $this->enterpriseId);
- $GoodsBasic = $objDGoodsBasic->select($ids, 'title,extends,specType,isEq,categoryId,categoryPath,brandId,id,images,`describe`');
- if ($GoodsBasic === false) {
- return ResultWrapper::fail($objDGoodsBasic->error(), ErrorCode::$dberror);
- }
- $returnData = [];
- foreach ($GoodsBasic as $value) {
- $extJson = empty($value['extends']) ? [] : json_decode($value['extends'],true);
- $returnData[$value['id']]['storageCode'] = isset($extJson['storage']) ? $extJson['storage'] : '';
- $returnData[$value['id']]['title'] = $value['title'];
- $returnData[$value['id']]['describe'] = htmlspecialchars_decode($value['describe']);
- $returnData[$value['id']]['images'] = json_decode($value['images']);
- $returnData[$value['id']]['categoryId'] = $value['categoryId'];
- $returnData[$value['id']]['brandId'] = $value['brandId'];
- $returnData[$value['id']]['categoryPath'] = $value['categoryPath'];
- $returnData[$value['id']]['specType'] = $value['specType'];
- $returnData[$value['id']]['isEq'] = $value['isEq'];
- }
- return ResultWrapper::success($returnData);
- }
- /**
- * 商品上下架
- * @param array $params
- * @return ResultWrapper
- * @throws Exception
- * @throws Exception
- */
- public function updateEnableStatus($params)
- {
- if (!empty($params['deleteStatus'])){
- $is_status['deleteStatus'] = $params['deleteStatus'];
- }else{
- $is_status['enableStatus'] = $params['enableStatus'];
- }
- $dbResult = $this->objDGoods->update($is_status, $params['id']);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- } else {
- /*if (is_array($params['id'])) {
- foreach ($params['id'] as $id) {
- $_id = self::createEsDocumentId($id);
- $this->objDGoods->esupdateTypeFieldVaule(['enableStatus' => $params['enableStatus']], $_id);
- }
- } else {
- $_id = self::createEsDocumentId($params['id']);
- $this->objDGoods->esupdateTypeFieldVaule(['enableStatus' => $params['enableStatus']], $_id);
- }*/
- return ResultWrapper::success($dbResult);
- }
- }
- /**
- * 商品库存为0自动下架
- * @param $updateData
- * @param $where
- * @return ResultWrapper
- */
- public function updateGoodsData($updateData, $where)
- {
- $goods = $this->objDGoods->get($where);
- if ($goods === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- if (empty($goods)) {
- return ResultWrapper::fail('该商品不存在', ErrorCode::$dberror);
- }
- $dbResult = $this->objDGoods->update($updateData, $where);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- /*
- $_id = self::createEsDocumentId($goods['id']);
- $this->objDGoods->esupdateTypeFieldVaule($updateData, $_id);*/
- return ResultWrapper::success($dbResult);
- }
- /**
- * @param string $barcode
- * @return ResultWrapper
- * @throws Exception
- */
- public function getGoodsByBarCode(string $barcode)
- {
- $sql = "SELECT g.id as goodsId,g.enableStatus,g.deleteStatus,
- s.id as skuId,s.unitName,s.specData,s.unitId
- FROM qianniao_goods_".$this->enterpriseId." as g
- LEFT JOIN qianniao_sku_".$this->enterpriseId." as s ON s.goodsId=g.basicGoodsId
- WHERE s.barCode='".$barcode."' AND g.deleteStatus = ".StatusCode::$standard." AND s.deleteStatus = ".StatusCode::$standard;
- $dbResult = $this->objDGoodsBasic->query($sql);
- if ($dbResult === false){
- return ResultWrapper::fail($this->objDGoodsBasic->error(),ErrorCode::$dberror);
- }
- $dbResult = (array) $dbResult;
- if (empty($dbResult) || empty($dbResult[0]['goodsId'])){
- return ResultWrapper::fail("没有找到对应商品",ErrorCode::$paramError);
- }
- //搜索出商品可能不唯一
- $goods = array_shift($dbResult);
- if ($goods['enableStatus'] == StatusCode::$delete){
- return ResultWrapper::fail('商品已下架',ErrorCode::$paramError);
- }
- $goods = self::createIndex($goods);
- $goodsDetail = self::formatGoodsDetail($goods);
- if (!$goodsDetail->isSuccess()){
- return ResultWrapper::fail($goodsDetail->getData(),$goodsDetail->getErrorCode());
- }
- $goods['detail'] = $goodsDetail->getData();
- return ResultWrapper::success($goods);
- }
- /**
- * @param array $goods
- * @throws Exception
- */
- public function formatGoodsDetail(array $goods)
- {
- $goodsDetail = self::getGoodsInfo($goods['goodsId']);
- if (!$goodsDetail->isSuccess()){
- return ResultWrapper::fail($goodsDetail->getData(),$goodsDetail->getErrorCode());
- }
- $goodsDetail = $goodsDetail->getData();
- return ResultWrapper::success($goodsDetail);
- }
- /**
- * @param array $goods
- * @return array
- */
- public static function createIndex(array $goods)
- {
- $map = [
- 'goodsId' => '',
- 'index' => '',
- 'skuId' => '',
- ];
- if (empty($goods)){
- return $map;
- }
- $specData = empty($goods['specData']) ? [] : json_decode($goods['specData'],true);
- $map['goodsId'] = $goods['goodsId'];
- $map['skuId'] = $goods['skuId'];
- $index = $goods['goodsId'].':'.$goods['unitId'];
- if (!empty($specData)){
- foreach ($specData as $row) {
- $index .= empty($index) ? $row['specValueId'] : ':' . $row['specValueId'];
- }
- }
- $map['index'] = $index;
- return $map;
- }
- /**
- * @param array $selectParams
- * @return ResultWrapper
- * @throws Exception
- */
- public function getAllGoodsBySku(array $selectParams)
- {
- $customerResult = self::getCustomerIdAndCustomerTypeByUserCenterId($selectParams);
- if (!$customerResult->isSuccess()){
- return ResultWrapper::fail($customerResult->getData(),$customerResult->getErrorCode());
- }
- $fields = 's.id as skuId,s.conversion,s.unitName,s.isMaster,s.unitId,s.specData as specGroup,s.isNew,s.barCode,
- b.title,b.images,b.id as basicGoodsId,b.specType,b.brandId,b.categoryPath,b.extends,b.supplierId,b.isEq,g.isDistribution,
- c.title as categoryName,
- g.shopId,g.id as id,
- p.name as shopName,p.warehouseId,
- d.title AS brandName,b.merchantId';
- $sql = 'SELECT '.$fields.' FROM qianniao_sku_'.$this->enterpriseId.' as s
- LEFT JOIN qianniao_goods_basic_'.$this->enterpriseId.' as b ON s.goodsId=b.id
- LEFT JOIN qianniao_goods_'.$this->enterpriseId.' as g ON b.id=g.basicGoodsId
- LEFT JOIN qianniao_goods_category_'.$this->enterpriseId.' as c ON c.id=b.categoryId
- LEFT JOIN qianniao_shop_1 as p ON p.id = g.shopId
- LEFT JOIN qianniao_goods_brand_'.$this->enterpriseId.' AS d ON b.brandId = d.id
- WHERE s.deleteStatus= '.StatusCode::$standard.'
- AND g.deleteStatus = '.StatusCode::$standard.'
- AND g.enableStatus= '.StatusCode::$standard.'';
- //店铺id
- if (isset($selectParams['shopId']) && !empty($selectParams['shopId'])){
- $shopStr = is_array($selectParams['shopId']) ? rtrim(implode(',',$selectParams['shopId']),',') : $selectParams['shopId'];
- $sql .= ' AND g.shopId In ('.$shopStr.')';
- }
- if (isset($selectParams['isRevealSku']) && !empty($selectParams['isRevealSku']) && $selectParams['isRevealSku'] == StatusCode::$standard){
- $sql .= ' AND s.isMaster = '.StatusCode::$standard;
- }
- //筛选分类
- if (isset($selectParams['categoryId']) && !empty($selectParams['categoryId'])){
- $sql .= ' and find_in_set('.$selectParams['categoryId'].',b.categoryPath) ';
- }
- //商品名称,字母
- if (isset($selectParams['keyword']) && !empty($selectParams['keyword'])){
- $keyword = '%'.$selectParams['keyword'].'%';
- $sql .= ' AND (b.title LIKE "'.$keyword.'" OR b.condition LIKE "'.$keyword.'" OR s.barCode LIKE "'.$keyword.'")';
- }
- $total = count((array)$this->objDGoodsBasic->query($sql));
- $sql .= ' ORDER BY g.createTime DESC LIMIT '.$selectParams['offset'].','.$selectParams['limit'].'';
- $dbResult = $this->objDGoodsBasic->query($sql);
- if ($dbResult === false){
- return ResultWrapper::fail($this->objDGoodsBasic->error(),ErrorCode::$dberror);
- }
- //抄码商品支持主单位购买
- /*foreach ($dbResult as $key => $item){
- if ($item['isEq'] == StatusCode::$standard && $item['isMaster'] == StatusCode::$standard){
- unset($dbResult[$key]);
- }
- }*/
- $dbResult = array_values($dbResult);
- $dbResult = self::formatList($dbResult);
- if (!$dbResult->isSuccess()){
- return ResultWrapper::fail($dbResult->getData(),$dbResult->getErrorCode());
- }
- $return = [
- 'data' => $dbResult->getData(),
- 'total' => $total,
- ];
- return ResultWrapper::success($return);
- }
- /**
- * 获取所有sku
- */
- public function getAllSku($params)
- {
- $where['goodsId'] = $params['id'];
- $dbResult = $this->objDSku->select($where);
- if($dbResult === false){
- return ResultWrapper::fail($this->objDSku->error(), ErrorCode::$dberror);
- }
- $return = [];
- if(!empty($dbResult)){
- foreach($dbResult as $value){
- $value['specData'] = json_decode($value['specData'], true);
- $return[$value['goodsId']][] = $value;
- }
- }
- return ResultWrapper::success($return);
- }
- /**
- * @param $data
- * @return ResultWrapper
- * @throws Exception
- */
- public function formatList(array $data): ResultWrapper
- {
- if (empty($data)){
- return ResultWrapper::success($data);
- }
- //获取库存
- $inventorySelectParams = [];
- $selectParam['material'] = [];
- $supplierIds = [];
- foreach ($data as $goods){
- $selectParam['material'][$goods['shopId']][] = $goods['id'];
- !empty($goods['supplierId']) && $supplierIds[] = $goods['supplierId'];
- $inventorySelectParams[$goods['shopId']][] = $goods['skuId'];
- }
- if (!empty($this->useCustomerId)){
- $selectParam['customerId'] = $this->useCustomerId;//客户有特殊调价
- }
- $this->objMInventory = new MInventory($this->enterpriseId, $this->userCenterId);
- $inventoryMapping = [];
- foreach ($inventorySelectParams as $shopId => $skuIds){
- $inventorySkuResult = $this->objMInventory->getInventoryByShopIdAndSkuIds($shopId,$skuIds);
- if (!$inventorySkuResult->isSuccess()){
- return ResultWrapper::fail($inventorySkuResult->getData(),$inventorySkuResult->getErrorCode());
- }
- $inventoryMapping[$shopId] = $inventorySkuResult->getData();
- }
- $priceResult = $this->objMPrice->getPrice($selectParam);
- if (!$priceResult->isSuccess()) {
- return ResultWrapper::fail($priceResult->getData(),$priceResult->getErrorCode());
- }
- $goodsPriceMapping = [];
- $priceResult = $priceResult->getData();
- foreach ($priceResult as $shopPriceArr) {
- foreach ($shopPriceArr as $goodsId => $goodsSkuArr) {
- $goodsPriceMapping[$goodsId] = $goodsSkuArr;
- }
- }
- $objMSupplier = new MSupplier($this->userCenterId,$this->enterpriseId);
- $supplierResult = $objMSupplier->getSupplierNameByIds($supplierIds);
- if (!$supplierResult->isSuccess()){
- return ResultWrapper::fail($supplierResult->getData(),$supplierResult->getErrorCode());
- }
- $supplierMap = MSupplier::supplierMap($supplierResult->getData());
- foreach ($data as &$value){
- $extends = (isset($value['extends']) && !empty($value['extends'])) ? json_decode($value['extends'],true) : [];
- unset($value['extends']);
- $value['brandName'] = is_null($value['brandName']) ? '' : $value['brandName'];
- $value['storageCode'] = isset($extends['storage']) ? $extends['storage'] : '';
- $value['specGroup'] = empty($value['specGroup']) ? [] : json_decode($value['specGroup'],true);
- $value['images'] = empty($value['images']) ? [] : json_decode($value['images'],true);
- $value['conversion'] = empty($value['conversion']) ? 0 : $value['conversion'];
- $value['code'] = createCode(StatusCode::$code['goodsBasic']['prefix'], $value['basicGoodsId'], StatusCode::$code['goodsBasic']['length']);
- $value['salePrice'] = isset($goodsPriceMapping[$value['id']][$value['skuId']]['salePrice']) ? $goodsPriceMapping[$value['id']][$value['skuId']]['salePrice'] : 0;
- $value['originPrice'] = $value['salePrice'];
- $value['enabledLadder'] = isset($goodsPriceMapping[$value['id']][$value['skuId']]['enabledLadder']) ? $goodsPriceMapping[$value['id']][$value['skuId']]['enabledLadder'] : 0;
- $value['ladderPrice'] = isset($goodsPriceMapping[$value['id']][$value['skuId']]['ladderPrice']) ? $goodsPriceMapping[$value['id']][$value['skuId']]['ladderPrice'] : [];
- $value['supplierName'] = isset($supplierMap[$value['supplierId']]) ? $supplierMap[$value['supplierId']]['title'] : '';
- $value['enabledLadder'] = isset($goodsPriceMapping[$value['id']][$value['skuId']]['enabledLadder']) ? $goodsPriceMapping[$value['id']][$value['skuId']]['enabledLadder'] : 0;
- if (!isset($inventoryMapping[$value['shopId']])){
- return ResultWrapper::fail('店铺库存查询异常',ErrorCode::$paramError);
- }
- $row = $inventoryMapping[$value['shopId']];
- $value['inventory'] = isset($row[$value['skuId']]) ? $row[$value['skuId']]['num'] : 0;
- $value['inventory'] = floor($value['inventory']);
- }
- return ResultWrapper::success($data);
- }
- /**
- * Doc: (des="设置商品置顶/取消商品置顶")
- * User: XMing
- * Date: 2020/8/28
- * Time: 11:07 上午
- * @param int $goodsId
- * @return ResultWrapper
- */
- public function setTop(int $goodsId)
- {
- $goodsInfo = $this->objDGoods->get(['id' => $goodsId],'*');
- if ($goodsInfo === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- if (empty($goodsInfo)){
- return ResultWrapper::fail('未查询到指定商品',ErrorCode::$paramError);
- }
- if (empty($goodsInfo['topTime'])){
- $topTime = time();
- }else{
- $topTime = 0;
- }
- $updateTime = time();
- $updateResult = $this->objDGoods->update(['topTime' => $topTime,'updateTime' => $updateTime],['id' => $goodsId]);
- if ($updateResult === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- /*
- $_id = self::createEsDocumentId($goodsId);
- $this->objDGoods->esupdateTypeFieldVaule(['topTime' => $topTime,'updateTime' => $updateTime], $_id);*/
- return ResultWrapper::success('操作成功');
- }
-
-
- /**
- * Doc: (des="修改排序字段")
- */
- public function setSort($params)
- {
-
- $goodsInfo = $this->objDGoods->get(['id' => $params['id']]);
- if ($goodsInfo === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- if (empty($goodsInfo)){
- return ResultWrapper::fail('未查询到指定商品',ErrorCode::$paramError);
- }
- $updateTime = time();
- $updateResult = $this->objDGoods->update(['sort' => $params['sort'],'updateTime' => $updateTime],['id' => $params['id']]);
- if ($updateResult === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- return ResultWrapper::success('操作成功');
- }
-
- /**
- * Doc: (des="批量设置虚拟销量")
- * User: XMing
- * Date: 2020/9/3
- * Time: 9:35 上午
- * @param array $data
- * @return ResultWrapper
- * @throws Exception
- */
- public function setSalesNumBatch(array $data)
- {
- $beginTransactionStatus = $this->objDGoods->beginTransaction();
- foreach ($data['ids'] as $id){
- $tmpSalesNum = 0;
- $rand = random_int($data['minVal'],$data['maxVal']);
- $updateResult = $this->objDGoods->update(['virtualSalesNum' => $rand],['id' => $id]);
- if ($updateResult === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- // 同步更新真实销量
- $dbResult = $this->objDGoods->get($id);
- if ($dbResult === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- if(empty($dbResult)){
- return ResultWrapper::fail('当前操作的商品不存在。id='.$id,ErrorCode::$notAllowAccess);
- }
- if(isset($dbResult['salesNum']) && !empty($dbResult['salesNum']) ){
- $salesNumInfo = json_decode($dbResult['salesNum'],true);
- }
- foreach ($salesNumInfo as $key => $value){
- $tmpSalesNum = bcadd($value['salesNum'],$tmpSalesNum);
- }
- //更新真实销量
- $update = $this->objDGoods->update(['realSalesNum' => $tmpSalesNum],['id' => $id]);
- if ($update === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- //
- /*
- $_id = self::createEsDocumentId($id);
- $this->objDGoods->esupdateTypeFieldVaule(['virtualSalesNum' => $rand], $_id);*/
- }
- if($beginTransactionStatus){
- $this->objDGoods->commit();
- }
- return ResultWrapper::success(true);
- }
- /**
- * Doc: (des="设置虚拟销量")
- * User: XMing
- * Date: 2020/9/3
- * Time: 10:43 上午
- * @param array $data
- * @return ResultWrapper
- */
- public function setSalesNum(array $data)
- {
- $updateResult = $this->objDGoods->update(['virtualSalesNum' => $data['val']],['id' => $data['id']]);
- if ($updateResult === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- /*
- $_id = self::createEsDocumentId($data['id']);
- $this->objDGoods->esupdateTypeFieldVaule(['virtualSalesNum' => $data['val']], $_id);*/
- return ResultWrapper::success(true);
- }
- /**
- * Doc: (des="批量设置运费")
- * User: XMing
- * Date: 2020/9/10
- * Time: 3:16 下午
- * @param array $params
- * @return ResultWrapper
- */
- public function batchGoodsExpress(array $params)
- {
- $ids = $params['ids'];
- $params['updateTime'] = time();
- unset($params['ids']);
- $updateResult = $this->objDGoods->update($params,['id'=>$ids]);
- if ($updateResult === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- foreach ($ids as $id){
- $_id = self::createEsDocumentId($id);
- $this->objDGoods->esupdateTypeFieldVaule($params, $_id);
- }
- return ResultWrapper::success(true);
- }
- /**
- * Doc: (des="根据商品ids获取所有商品")
- * User: XMing
- * Date: 2020/12/17
- * Time: 11:07 上午
- * @param array $goodsIds
- * @return ResultWrapper
- */
- public function getGoodsByGoodsIds(array $goodsIds,$shopId = 0): ResultWrapper
- {
- if (empty($goodsIds)){
- return ResultWrapper::success([]);
- }
- $goodsIdStr = implode(',',$goodsIds);
- if (empty($goodsIdStr)){
- return ResultWrapper::success([]);
- }
- $fields = ' g.id,g.enableStatus,b.title,b.images,b.id as materielId ';
- $sql = 'SELECT '.$fields.' FROM qianniao_goods_'.$this->enterpriseId.' AS g
- LEFT JOIN qianniao_goods_basic_'.$this->enterpriseId.' AS b
- ON b.id = g.basicGoodsId
- WHERE b.deleteStatus = '.StatusCode::$standard.' AND g.deleteStatus = '.StatusCode::$standard.' AND
- g.id IN('.$goodsIdStr.')';
- if (!empty($shopId)){
- $sql .= ' AND g.shopId = '.$shopId;
- }
- $lists = $this->objDGoods->query($sql);
- if ($lists === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- $map = [];
- foreach ($lists as $list){
- $list['images'] = !empty($list['images']) ? json_decode($list['images'],true) : [];
- $map[$list['id']] = $list;
- }
- return ResultWrapper::success($map);
- }
- /**
- * Doc: (des="根据基础物料id及店铺id,获取物料id对应商品id")
- * User: XMing
- * Date: 2020/12/25
- * Time: 4:03 下午
- * @param array $params
- * @return ResultWrapper
- */
- public function getRelMap(array $params): ResultWrapper
- {
- $materielStr = implode(',', $params['materielIds']);
- $fields = ' id AS goodsId,basicGoodsId AS materielId,shopId ';
- $sql = 'SELECT '.$fields.' FROM qianniao_goods_'.$this->enterpriseId.'
- WHERE shopId = '.$params['shopId'].'
- AND basicGoodsId IN ( '.$materielStr.') ';
- $lists = $this->objDGoods->query($sql);
- if ($lists === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- $map = [];
- foreach ($lists as $list){
- $map[$list['materielId']] = $list['goodsId'];
- }
- return ResultWrapper::success($map);
- }
- /**
- * Doc: (des="")
- * User: XMing
- * Date: 2021/1/29
- * Time: 11:26 上午
- * @param int $shopId
- * @return ResultWrapper
- */
- public function getInSaleNum(int $shopId): ResultWrapper
- {
- $where = [
- 'shopId' => $shopId,
- 'enableStatus' => StatusCode::$standard,
- 'deleteStatus' => StatusCode::$standard
- ];
- $count = $this->objDGoods->count($where);
- if($count === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- return ResultWrapper::success($count);
- }
- /**
- * Doc: (des="获取负库存销售状态")
- * User: XMing
- * Date: 2021/3/10
- * Time: 9:38 上午
- * @param int $shopId
- * @param array $materielIds
- * @return ResultWrapper
- */
- public function getDistributionByShopIdRelMaterielIds(int $shopId,array $materielIds): ResultWrapper
- {
- if (empty($shopId)){
- return ResultWrapper::fail('shopId参数异常',ErrorCode::$paramError);
- }
- if (empty($materielIds)){
- return ResultWrapper::fail('materielIds参数异常',ErrorCode::$paramError);
- }
- $fields = ' b.id,g.isDistribution ';
- $materielIdsStr = trim(implode(',',$materielIds),',');
- $sql = 'SELECT '.$fields.' FROM qianniao_goods_basic_'.$this->enterpriseId.' AS b
- LEFT JOIN qianniao_goods_'.$this->enterpriseId.' AS g
- ON g.basicGoodsId = b.id
- WHERE g.basicGoodsId IN ('.$materielIdsStr.') AND g.shopId = '.$shopId;
- $lists = $this->objDGoods->query($sql);
- if ($lists === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- if (empty($lists)){
- return ResultWrapper::success([]);
- }
- $mapping = [];
- foreach ($lists as $item){
- $mapping[$item['id']] = $item['isDistribution'];
- }
- return ResultWrapper::success($mapping);
- }
- /**
- * Doc: (des="获取价格走势")
- * User: XMing
- * Date: 2021/3/10
- * Time: 6:48 下午
- * @param int $goodsId
- * @param array $params
- * @return ResultWrapper
- * @throws Exception
- */
- public function getPriceTrend(int $goodsId,array $params): ResultWrapper
- {
- $info = $this->objDGoods->get($goodsId);
- if ($info === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- if (empty($info)){
- return ResultWrapper::fail('未获取到指定的商品信息',ErrorCode::$paramError);
- }
- $objPriceCache = new PriceCache($this->enterpriseId);
- $objMPurchase = new MPurchase($this->userCenterId,$this->enterpriseId);
- $mapping = $objPriceCache->getPriceTrend($goodsId);
- if (!empty($mapping)){
- return ResultWrapper::success($mapping);
- }
- $skuLists = $this->objDSku->select(['goodsId' => $info['basicGoodsId'],'deleteStatus' => StatusCode::$standard],'id');
- if ($skuLists === false){
- return ResultWrapper::fail($this->objDSku->error(),ErrorCode::$dberror);
- }
- $skuIds = [];
- foreach ($skuLists as $item){
- $skuIds[] = $item['id'];
- }
- $mapping = [];
- $day = ceil(($params['endTime'] - $params['startTime']) / 86400);
- for($i = $day; $i>=0; $i--) {
- $date = strtotime(date('Y-m-d 23:59:59',strtotime("-$i days")));
- $sheetListsResult = $this->objMPrice->getPriceSheetByShopIdRelGoodsId($info['shopId'],$info['id'],$date);
- if (!$sheetListsResult->isSuccess()){
- return ResultWrapper::fail($sheetListsResult->getData(),$sheetListsResult->getErrorCode());
- }
- $sheetList = $sheetListsResult->getData();
- $costPriceSheetResult = $objMPurchase->getCostPriceSheetByMaterielId($info['basicGoodsId'],$date);
- if (!$costPriceSheetResult->isSuccess()){
- return ResultWrapper::fail($costPriceSheetResult->getData(),$costPriceSheetResult->getErrorCode());
- }
- $costPriceSheet = $costPriceSheetResult->getData();
- foreach ($skuIds as $skuId){
- $mapping['saleTrend'][$skuId][] = [
- 'salePrice' => isset($sheetList['salePrice'][$skuId]['salePrice']) ? $sheetList['salePrice'][$skuId]['salePrice'] : 0,
- 'createTime' => date('Y-m-d',$date),
- ];
- $mapping['costTrend'][$skuId][] = [
- 'costPrice' => isset($costPriceSheet[$skuId][0]['costPrice']) ? $costPriceSheet[$skuId][0]['costPrice'] : 0,
- 'createTime' => date('Y-m-d',$date)
- ];
- }
- }
- return ResultWrapper::success($mapping);
- }
- /**
- * Doc: (des="")
- * User: XMing
- * Date: 2021/3/13
- * Time: 10:13 上午
- * @param array $data
- * @return ResultWrapper
- */
- public function batchSetDistribution(array $data): ResultWrapper
- {
- if (!in_array($data['isDistribution'],[ StatusCode::$delete,StatusCode::$standard ])){
- return ResultWrapper::fail('isDistribution参数非法',ErrorCode::$paramError);
- }
- $result = $this->objDGoods->update(['isDistribution' => $data['isDistribution'],'updateTime'=>time()],['id' => $data['ids']]);
- if ($result === false){
- return ResultWrapper::fail($this->objDGoods->error(),ErrorCode::$dberror);
- }
- return ResultWrapper::success(true);
- }
- /**
- * 获取商品数据
- * @param $where
- * @return ResultWrapper
- */
- public function getGoodsData($where)
- {
- $dbResult = $this->objDGoods->select($where);
- if($dbResult === false){
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($dbResult);
- }
- /**
- * getAllBrandByCategory
- * 根据商品分类加载商品品牌
- * (1) select b1.categoryId,b1.categoryPath,b1.brandId,b2.* from qianniao_goods_basic_64 as b1 LEFT JOIN qianniao_goods_brand_64 as b2 on b1.brandId=b2.id where FIND_IN_SET(categoryPath,1)
- * (2) SELECT * from qianniao_goods_brand_64 where id in (SELECT brandId from qianniao_goods_basic_64 where FIND_IN_SET(categoryPath,1))
- */
- public function getAllBrandByCategory($categoryId)
- {
- $goodsBasic = new DGoodsBasic();
- $this->objDGoodsBasic->setTable($this->objDGoodsBasic->get_Table() . '_' . $this->enterpriseId);
- // 查询所有的该分类所有的商品品牌
- $sql = 'select * from qianniao_goods_brand_'.$this->enterpriseId.' where id in (SELECT brandId from qianniao_goods_basic_'.$this->enterpriseId.' where FIND_IN_SET(categoryPath,'.$categoryId.'))';
- $result = $goodsBasic->query($sql);
- if($result === false){
- return ResultWrapper::fail($goodsBasic->error(), ErrorCode::$dberror);
- }
- $countSql = 'select count(1) as count from qianniao_goods_brand_'.$this->enterpriseId.' where id in (SELECT brandId from qianniao_goods_basic_'.$this->enterpriseId.' where FIND_IN_SET(categoryPath,'.$categoryId.'))';
- $resultCount = $goodsBasic->query($countSql);
- if($resultCount === false){
- return ResultWrapper::fail($goodsBasic->error(), ErrorCode::$dberror);
- }
- if(empty($resultCount)){
- return ResultWrapper::success([]);
- }
- $data = [
- 'data' => $result,
- 'total' => $resultCount[0]['count'],
- ];
- return ResultWrapper::success($data);
- }
- /**
- * 商品真实销量
- */
- public function getAllRealSalesNum($params)
- {
- if( !isset($params['number'])&& empty($params['number'])){
- $params['number'] = 10;
- }
- $dbResult = $this->objDGoods->query('select * from '.$this->objDGoods->get_Table().' where enableStatus='.StatusCode::$standard.' and deleteStatus='.StatusCode::$standard.' order by realSalesNum desc limit 1,'.$params['number']);
- if($dbResult === false){
- return ResultWrapper::fail($this->objDGoods->error(), ErrorCode::$dberror);
- }
- if(!empty($dbResult)){
- foreach ($dbResult as $key => $value){
- if(isset($value['images'])&&!empty($value['images'])){
- $dbResult[$key]['images'] = json_decode($value['images'],true);
- }
- }
- }
- $data = [
- 'data' => $dbResult
- ];
- return ResultWrapper::success($data);
- }
- }
|