1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517 |
- <?php
- namespace JinDouYun\Model\Cart;
- use JinDouYun\Dao\Cashier\DCashierCustomerPrice;
- use JinDouYun\Dao\System\DDeliveryRule;
- use JinDouYun\Model\Cashier\MCashierSettings;
- use JinDouYun\Model\Market\MComBinPackage;
- use Mall\Framework\Core\ErrorCode;
- use Mall\Framework\Core\ResultWrapper;
- use Mall\Framework\Core\StatusCode;
- use JinDouYun\Dao\Cart\DCart;
- use JinDouYun\Cache\ActivityLimitCache;
- use JinDouYun\Controller\Common\Logger;
- use JinDouYun\Model\Market\MVipCard;
- use JinDouYun\Model\System\MBasicSetup;
- use JinDouYun\Model\Market\MActivity;
- use JinDouYun\Model\Market\MUserCoupon;
- use JinDouYun\Model\System\MEnterpriseBindPayment;
- use JinDouYun\Model\Customer\MCustomer;
- use JinDouYun\Model\Customer\MShippingAddress;
- use JinDouYun\Model\GoodsManage\MSku;
- use JinDouYun\Model\Price\MPrice;
- use JinDouYun\Model\Stock\MInventory;
- use JinDouYun\Model\SysAreaChina\MSysAreaChina;
- use JinDouYun\Model\System\MDeliverySetting;
- use JinDouYun\Model\Goods\MGoods;
- use JinDouYun\Model\Shop\MShop;
- use JinDouYun\Cache\CustomerCache;
- use JinDouYun\Cache\GoodsBasicRelevant;
- use JinDouYun\Dao\Customer\DCustomer;
- use JinDouYun\Model\Cart\MPreferentialProcess;
- class MCart
- {
-
- private $objDCart;
-
- private $onlineUserId;
-
- private $onlineEnterpriseId;
-
- private $objMCustomer;
-
- private $objActivityLimitCache;
-
- private $isFront;
-
- private $customerId;
-
- private $objMActivity;
-
- private $invalidData = [];
-
- private static $type = [
- 'single' => 1,
- 'shop' => 2,
- 'all' => 3,
- ];
-
- private static $enabledLadder = [
- 'open' => 1,
- 'close' => 0,
- ];
-
- public static $sourceType = [
- 'comBin' => 1,
- 'goods' => 2,
- ];
-
- private $objMSku;
-
- private $objMGoods;
-
- private $objMBasicSetup;
-
- private $onlineUserDefaultDeliveryType = null;
-
- private $onlineUserAddressCode = null;
-
- private $freeExpressPrice = null;
-
- private $cashierUId;
-
- private $objDCustomer;
-
- private $objMCashierSettings;
-
- private $objDCashierCustomerPrice;
-
- private $isCashier;
-
- private $expressMoney = 0;
-
- private $expressShopMoney = [];
-
- private $selectStateMap = [];
-
- private $preSale;
-
- public function __construct($onlineUserId, $onlineEnterpriseId, $isFront = false, $areaCode = '', $cashierUId = '', $isCashier = false)
- {
- $this->isCashier = $isCashier;
- $this->cashierUId = $cashierUId;
- $this->isFront = $isFront;
- $this->onlineUserId = $onlineUserId;
- $this->onlineEnterpriseId = $onlineEnterpriseId;
- $this->objDCart = new DCart('default');
- $this->objDCart->setTable($this->objDCart->get_Table() . '_' . $onlineEnterpriseId);
- $this->objMCustomer = new MCustomer($this->onlineEnterpriseId, $this->onlineUserId);
- $this->objActivityLimitCache = new ActivityLimitCache($this->onlineEnterpriseId);
- $this->objMActivity = new MActivity($this->onlineUserId, $this->onlineEnterpriseId, $areaCode);
- $this->objMSku = new MSku($this->onlineUserId, $this->onlineEnterpriseId);
- $this->objMGoods = new MGoods($this->onlineEnterpriseId, $this->isFront, $this->onlineUserId);
- $this->objMBasicSetup = new MBasicSetup($this->onlineEnterpriseId);
- $this->objDCustomer = new DCustomer();
- $this->objDCustomer->setTable('qianniao_customer_' . $this->onlineEnterpriseId);
- $this->objMCashierSettings = new MCashierSettings($this->onlineUserId, $this->onlineEnterpriseId);
- $this->objDCashierCustomerPrice = new DCashierCustomerPrice();
- $this->objDCashierCustomerPrice->setTable('qianniao_cashier_customer_price_' . $this->onlineEnterpriseId);
- self::getCustomerInfo();
- }
-
- public function getPreSale(): ResultWrapper
- {
- $objMBasicSetup = new MBasicSetup($this->onlineEnterpriseId);
- $setResult = $objMBasicSetup->getBasicField('preSale');
- $this->preSale = StatusCode::$delete;
- if (!$setResult->isSuccess()) {
- return ResultWrapper::fail($setResult->getData(), $setResult->getErrorCode());
- }
- $set = (array)$setResult->getData();
- $this->preSale = getArrayItem($set, 'preSale', StatusCode::$delete);
- if (empty($this->preSale)) $this->preSale = StatusCode::$delete;
- return ResultWrapper::success($set);
- }
-
- private function getCustomerInfo()
- {
- if ($this->isFront === false) {
- $this->customerId = $this->onlineUserId;
- } else {
- $this->customerId = $this->objMCustomer->getCustomerIdByUserCenterId($this->onlineUserId);
- }
- }
-
- private function checkLimitGroup($data)
- {
- if (empty($data)) return $data;
- $allMapping = [];
- foreach ($data as &$goods) {
- if ($goods['isActivityPrice'] == StatusCode::$standard) {
- $userLimit = $this->objActivityLimitCache->getLimit($goods['activityId'], $goods['goodsId'], $goods['skuId'], $this->onlineUserId);
- $allowNum = $goods['limitNum'] - $userLimit;
- $buyNum = $goods['buyNum'];
- if ($buyNum >= $allowNum) {
-
- $goods['buyNum'] = $allowNum;
- $allMapping[] = $goods;
- $newGoods = $goods;
- if ($buyNum - $allowNum > 0) {
- $newGoods['buyNum'] = $buyNum - $allowNum;
- $newGoods['activityId'] = 0;
- $newGoods['isActivityPrice'] = StatusCode::$delete;
- $allMapping[] = $newGoods;
- }
- } else {
-
- $allMapping[] = $goods;
- }
- } else {
- $allMapping[] = $goods;
- }
- }
- return $allMapping;
- }
-
- public function addCartApi(array $params)
- {
- if (empty( $params['goodsData'] )) {
- return ResultWrapper::fail('加入购物车数据为空', ErrorCode::$paramError);
- }
-
- foreach ( $params['goodsData'] as $key => $data ){
-
- $goodsInfoResult = $this->objMGoods->getGoodsInfo($data['goodsId']);
- if (!$goodsInfoResult->isSuccess()) {
- return ResultWrapper::fail($goodsInfoResult->getData(), $goodsInfoResult->getErrorCode());
- }
- $goodsInfo = $goodsInfoResult->getData();
-
- $checkResult = self::checkGoods($goodsInfo, $data, 'add');
- unset($data);
- if (!$checkResult->isSuccess()) {
- return ResultWrapper::fail($checkResult->getData(), $checkResult->getErrorCode());
- }
- $data = $checkResult->getData();
-
- $addMap = [
- 'goodsBasicId' => $data['goodsBasicId'],
- 'goodsId' => $data['goodsId'],
- 'skuId' => $data['skuId'],
- 'buyNum' => $data['buyNum'],
- 'shopId' => $data['shopId'],
- 'source' => $data['source'],
- 'setNum' => $data['setNum'],
- 'activityId' => $data['activityId'],
- 'goodsCode' => $data['goodsCode'],
- 'warehouseId' => $data['warehouseId']
- ];
-
- $groupResult = self::existCartAndGroup([$addMap]);
- if (!$groupResult->isSuccess()) {
- return ResultWrapper::fail($groupResult->getData(), $groupResult->getErrorCode());
- }
- $groupData = $groupResult->getData();
- if (empty($groupData)) {
- return ResultWrapper::fail('数组分组失败', ErrorCode::$paramError);
- }
-
- $updates = isset($groupData['old']) ? $groupData['old'] : [];
-
- $inserts = isset($groupData['now']) ? $groupData['now'] : [];
-
-
- $this->objDCart->beginTransaction();
-
- if (!empty($updates)) {
- $update = array_shift($updates);
- $tableName = 'qianniao_cart_' . $this->onlineEnterpriseId;
- $sql = 'UPDATE ' . $tableName . ' SET buyNum = buyNum+' . $update['buyNum'] . '
- WHERE goodsId = ' . $update['goodsId'] . ' AND
- skuId = ' . $update['skuId'] . ' AND
- userCenterId = ' . $this->onlineUserId . ' AND
- activityId = ' . $update['activityId'];
- $updateRes = $this->objDCart->query($sql);
- if ($updateRes === false) {
- $this->objDCart->rollBack();
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- }
-
- if (!empty($inserts)) {
- $insert = array_shift($inserts);
- $insertMap = [
- 'userCenterId' => $this->onlineUserId,
- 'selection' => StatusCode::$standard,
- 'goodsBasicId' => $insert['goodsBasicId'],
- 'goodsId' => $insert['goodsId'],
- 'skuId' => $insert['skuId'],
- 'buyNum' => $insert['buyNum'],
- 'shopId' => $insert['shopId'],
- 'source' => $insert['source'],
- 'activityId' => $insert['activityId'],
- 'goodsCode' => $insert['goodsCode'],
- 'warehouseId' => $insert['warehouseId']
- ];
- $insertRes = $this->objDCart->insert($insertMap);
- if ($insertRes === false) {
- $this->objDCart->rollBack();
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- }
- }
- $this->objDCart->commit();
- return ResultWrapper::success('加入成功');
- }
-
- private function checkGoods(array $goodsData, array $addCart, $action = 'add')
- {
- if (empty($goodsData)) {
- return ResultWrapper::fail('商品信息为空', ErrorCode::$paramError);
- }
-
- if ($goodsData['enableStatus'] == StatusCode::$delete || $goodsData['deleteStatus'] == StatusCode::$delete) {
- return ResultWrapper::fail('商品已下架', ErrorCode::$paramError);
- }
- $specMultiple = $goodsData['specMultiple'];
- if (empty($specMultiple)) {
- return ResultWrapper::fail('商品规格信息获取失败', ErrorCode::$paramError);
- }
- $specMultipleMap = [];
- foreach ($specMultiple as $value) {
- $specMultipleMap[$value['id']] = $value;
- }
- if (!isset($specMultipleMap[$addCart['skuId']])) {
- return ResultWrapper::fail('规格信息不存在', ErrorCode::$paramError);
- }
- $subBuyNumResult = self::getCartBuyNumBySku($addCart['skuId'], $this->onlineUserId);
- if (!$subBuyNumResult->isSuccess()) {
- return ResultWrapper::fail($subBuyNumResult->getData(), $subBuyNumResult->getErrorCode());
- }
- $subBuyNum = floatval($subBuyNumResult->getData());
-
- switch ($action){
- case 'add':
- if ($goodsData['isDistribution'] == StatusCode::$delete){
- if ($specMultipleMap[$addCart['skuId']]['inventory'] < $addCart['buyNum'] + $subBuyNum) {
-
- $allowNum = bcsub($specMultipleMap[$addCart['skuId']]['inventory'], $subBuyNum);
- if ($allowNum <= 0) {
- $addCart['buyNum'] = 0;
- } else {
- $addCart['buyNum'] = $allowNum;
- }
-
- }
- }
- break;
- case 'update':
- if ($goodsData['isDistribution'] == StatusCode::$delete){
- if ($specMultipleMap[$addCart['skuId']]['inventory'] < $addCart['buyNum']) {
- return ResultWrapper::success($specMultipleMap[$addCart['skuId']]['inventory']);
- } else {
- return ResultWrapper::success($addCart['buyNum']);
- }
- }else{
- return ResultWrapper::success($addCart['buyNum']);
- }
- break;
- }
- $addCart['isActivity'] = $specMultipleMap[$addCart['skuId']]['isActivity'];
- $addCart['setNum'] = $specMultipleMap[$addCart['skuId']]['setNum'];
- $addCart['warehouseId'] =getArrayItem($goodsData,'warehouseId','');
- switch ($specMultipleMap[$addCart['skuId']]['isActivity']) {
- case StatusCode::$standard:
- $addCart['activityId'] = $specMultipleMap[$addCart['skuId']]['activity']['activityId'];
- $addCart['limitNum'] = $specMultipleMap[$addCart['skuId']]['activity']['limitNum'];
- break;
- case StatusCode::$delete:
- $addCart['activityId'] = 0;
- break;
- }
- return ResultWrapper::success($addCart);
- }
-
- public function addCart($params)
- {
- $this->objDCart->beginTransaction();
- $goodsData = $params['goodsData'];
- $dbResult = self::checkCart($goodsData);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), $dbResult->getErrorCode());
- }
- $checkData = $dbResult->getData();
-
- if ($this->isFront === true) {
-
- $checkData = self::checkLimitGroup($checkData);
- $dbResult = self::checkLimit($checkData);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), $dbResult->getErrorCode());
- }
- $dbResult = $dbResult->getData();
- $mapping = $dbResult['mapping'];
- $checkData = $dbResult['checkData'];
- }
- unset($dbResult);
- $dbResult = self::existCartAndGroup($checkData);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), $dbResult->getErrorCode());
- }
- $cartData = $dbResult->getData();
- unset($dbResult);
- $dbResult = true;
- $oldCart = $cartData['old'];
- $nowCart = $cartData['now'];
- if (!empty($oldCart)) {
- foreach ($oldCart as $key => $val) {
- $sql = "UPDATE qianniao_cart_{$this->onlineEnterpriseId} SET buyNum=buyNum+{$val['buyNum']} WHERE goodsId={$val['goodsId']} AND skuId={$val['skuId']} AND userCenterId={$this->onlineUserId} AND activityId={$val['activityId']}";
- $dbResult = $this->objDCart->query($sql);
- }
- if ($dbResult === false) {
- $this->objDCart->rollBack();
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- }
- if (!empty($nowCart)) {
- $insert = [];
- foreach ($nowCart as $key => $val) {
- $insert[] = [
- 'userCenterId' => $this->onlineUserId,
- 'selection' => StatusCode::$standard,
- 'skuId' => $val['skuId'],
- 'goodsCode' => $val['goodsCode'],
- 'goodsId' => $val['goodsId'],
- 'shopId' => $val['shopId'],
- 'buyNum' => $val['buyNum'],
- 'source' => $val['source'],
- 'goodsBasicId' => $val['goodsBasicId'],
- 'warehouseId' => $val['warehouseId'],
- 'activityId' => isset($val['activityId']) ? $val['activityId'] : 0,
- ];
- }
- $dbResult = $this->objDCart->insert($insert, true);
- if ($dbResult === false) {
- $this->objDCart->rollBack();
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- }
- $objCustomerCache = new CustomerCache();
- $objCustomerCache->incrInterestCustomer($this->customerId, $this->onlineEnterpriseId);
-
- if (!empty($mapping)) {
- self::userLimit($mapping);
- }
- $this->objDCart->commit();
- return ResultWrapper::success($dbResult);
- }
-
- public function manageAddCart($params)
- {
- $this->objDCart->beginTransaction();
- $goodsData = $params['goodsData'];
- $dbResult = self::checkCart($goodsData);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), $dbResult->getErrorCode());
- }
- $checkData = $dbResult->getData();
- $dbResult = $this->existCartAndGroup($checkData);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), $dbResult->getErrorCode());
- }
- $cartData = $dbResult->getData();
- unset($dbResult);
- $dbResult = true;
- $update = $cartData['old'];
- $insert = $cartData['now'];
-
- if (!empty($update)) {
- foreach ($update as $row) {
- $dbResult = $this->objDCart->set_inc(
- 'buyNum',
- [
- 'goodsId' => $row['goodsId'],
- 'skuId' => $row['skuId'],
- 'userCenterId' => $this->onlineUserId,
- 'activityId' => $row['activityId'],
- ],
- $row['buyNum']
- );
- if ($dbResult === false) {
- $this->objDCart->rollBack();
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- }
- }
-
- if (!empty($insert)) {
- $add = [];
- foreach ($insert as $row) {
- $add[] = [
- 'userCenterId' => $this->onlineUserId,
- 'selection' => StatusCode::$standard,
- 'skuId' => $row['skuId'],
- 'goodsCode' => $row['goodsCode'],
- 'goodsId' => $row['goodsId'],
- 'shopId' => $row['shopId'],
- 'buyNum' => $row['buyNum'],
- 'source' => $row['source'],
- 'goodsBasicId' => $row['goodsBasicId'],
- 'warehouseId' => $row['warehouseId'],
- 'activityId' => isset($val['activityId']) ? $row['activityId'] : 0,
- ];
- }
- $dbResult = $this->objDCart->insert($add, true);
- if ($dbResult === false) {
- $this->objDCart->rollBack();
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- }
- $objCustomerCache = new CustomerCache();
- $objCustomerCache->incrInterestCustomer($this->customerId, $this->onlineEnterpriseId);
- $this->objDCart->commit();
- return ResultWrapper::success($dbResult);
- }
-
- private function checkLimit($checkData, $adj = 1, $isUpdate = false, $step = null)
- {
- if (empty($checkData)) return ResultWrapper::success($checkData);
- $mapping = [];
- foreach ($checkData as $key => $goods) {
- $skuData = $goods['specMultiple'];
- $skuMapping = [];
- foreach ($skuData as $sku) {
- $skuMapping[$sku['id']] = $sku;
- }
- $thisSku = $skuMapping[$goods['skuId']];
- if (
- $goods['isActivityPrice'] == StatusCode::$delete ||
- ($thisSku['isActivity'] == StatusCode::$delete && $thisSku['activityId'] == 0)) {
-
- continue;
- }
- $activityId = $goods['activityId'];
- $activityDetails = $this->objActivityLimitCache->getActivity($activityId);
- if (empty($activityDetails)) {
- return ResultWrapper::fail('活动不存在', ErrorCode::$paramError);
- }
- if ($activityDetails['startTime'] > time()) {
- return ResultWrapper::fail($goods['title'] . '活动尚未开始', ErrorCode::$paramError);
- }
- if ($activityDetails['endTime'] < time()) {
- return ResultWrapper::fail($goods['title'] . '活动已结束', ErrorCode::$paramError);
- }
-
- $surplusNum = $this->objActivityLimitCache->getLen($activityId, $goods['goodsId'], $goods['skuId']);
- if ($surplusNum == 0) {
- return ResultWrapper::fail($goods['title'] . '抢光了', ErrorCode::$paramError);
- }
- if ($surplusNum < $goods['buyNum']) {
- return ResultWrapper::fail($goods['title'] . '活动剩余数量不足', ErrorCode::$paramError);
- }
-
- $userLimit = self::getLimitNum($activityDetails, $goods['goodsId'], $goods['skuId']);
- $userSurplusNum = $this->objActivityLimitCache->getLimit($activityId, $goods['goodsId'], $goods['skuId'], $this->onlineUserId);
- $buyNum = 0;
- if ($isUpdate) {
- if ($adj == 1) {
-
- if ($userLimit < ($userSurplusNum + $step)) {
- return ResultWrapper::fail($goods['title'] . '每人限购' . $userLimit . $thisSku['unitName'], ErrorCode::$paramError);
- }
- }
- $buyNum = $userSurplusNum + $step;
- } else {
-
- if ($userLimit < ($userSurplusNum + $goods['buyNum'])) {
- return ResultWrapper::fail($goods['title'] . '每人限购' . $userLimit . $thisSku['unitName'], ErrorCode::$paramError);
- }
- $buyNum = $userSurplusNum + $goods['buyNum'];
- }
- $mapping[] = [
- 'activityId' => $activityId,
- 'goodsId' => $goods['goodsId'],
- 'skuId' => $goods['skuId'],
- 'buyNum' => $buyNum,
- ];
- }
- $data = [
- 'checkData' => $checkData,
- 'mapping' => $mapping,
- ];
- return ResultWrapper::success($data);
- }
-
- private function userLimit($data)
- {
- $result = false;
- foreach ($data as $goods) {
- $result = $this->objActivityLimitCache->writeLimit($goods['activityId'], $goods['goodsId'], $goods['skuId'], $this->onlineUserId, $goods['buyNum']);
- }
- return $result;
- }
-
- private function getLimitNum($data, $goodsId, $skuId)
- {
- if (empty($data)) return $data;
- $goodsData = $data['activityGoods'];
- $mapping = [];
- foreach ($goodsData as $goods) {
- $mapping[$goods['goodsId'] . $goods['skuId']] = $goods;
- }
- return isset($mapping[$goodsId . $skuId]['limitNum']) ? $mapping[$goodsId . $skuId]['limitNum'] : 0;
- }
-
- public function checkCart($data)
- {
- if (empty($data)) return ResultWrapper::fail('购物车数据为空', ErrorCode::$paramError);
- $objMGoods = new MGoods($this->onlineEnterpriseId, $this->isFront, $this->onlineUserId);
-
- foreach ($data as $key => $val) {
-
- $details = $objMGoods->getGoodsInfo($val['goodsId']);
- if (!$details->isSuccess()) {
- return ResultWrapper::fail($details->getData(), $details->getErrorCode());
- }
- $goods = $details->getData();
- if (empty($details)) {
- return ResultWrapper::fail($val['goodsCode'] . '查询商品失败', ErrorCode::$paramError);
- }
-
- if ($goods['enableStatus'] == StatusCode::$delete || $goods['deleteStatus'] == StatusCode::$delete) {
- return ResultWrapper::fail($goods['title'] . ' 已下架', ErrorCode::$paramError);
- }
- $specMultiple = $goods['specMultiple'];
- $specMapping = [];
- foreach ($specMultiple as $spec) {
- $specMapping[$spec['id']] = $spec;
- }
- if (!isset($specMapping[$val['skuId']])) {
- Logger::logs(E_USER_ERROR, '规格获取失败', __CLASS__, __LINE__, $specMapping);
- return ResultWrapper::fail($goods['title'] . '规格获取失败', ErrorCode::$paramError);
- }
-
- if ($this->preSale == StatusCode::$delete) {
- if ($specMapping[$val['skuId']]['inventory'] < $val['buyNum']) {
- $specName = self::createSpecName($specMapping[$val['skuId']]);
- return ResultWrapper::fail($goods['title'] . $specName . ' 库存不足', ErrorCode::$paramError);
- }
- }
- $data[$key]['basicGoodsId'] = $val['goodsBasicId'];
- $data[$key]['skuData'] = [];
- $data[$key]['specMultiple'] = $specMultiple;
- $data[$key]['warehouseId'] = $goods['warehouseId'];
- $data[$key]['title'] = $goods['title'];
- $data[$key]['setNum'] = $specMapping[$val['skuId']]['setNum'];
- $data[$key]['activityId'] = 0;
-
- if ($specMapping[$val['skuId']]['isActivity'] == StatusCode::$standard) {
-
- $data[$key]['setNum'] = 1;
- }
- $data[$key]['inventory'] = $specMapping[$val['skuId']]['inventory'];
- $data[$key]['isActivityPrice'] = $specMapping[$val['skuId']]['isActivityPrice'];
- if ($specMapping[$val['skuId']]['isActivityPrice'] == StatusCode::$standard) {
- $data[$key]['activityId'] = $specMapping[$val['skuId']]['activity']['activityId'];
- }
- $data[$key]['limitNum'] = $specMapping[$val['skuId']]['limitNum'];
- }
- return ResultWrapper::success($data);
- }
-
- public static function createSpecName($data)
- {
- if (empty($data)) {
- return '';
- }
- $unitName = $data['unitName'];
- if (!empty($data['specGroup'])) {
- $arrSpecName = array_column($data['specGroup'], 'specValueName');
- $specName = rtrim(implode('_', $arrSpecName), '_');
- $unitName .= '_' . $specName;
- }
- return $unitName;
- }
-
- private function existCartAndGroup($nowData)
- {
-
- $dbResult = self::getCartByUid();
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail('获取购物车数据失败', ErrorCode::$dberror);
- }
- $oldCartData = $dbResult->getData();
-
- $allHash = [];
- foreach ($oldCartData as $key => $val) {
- $allHash[] = md5($val['goodsId'] . $val['shopId'] . $val['skuId'] . $val['activityId']);
- }
- $old = [];
- $now = [];
- foreach ($nowData as $key => &$val) {
- $md5 = md5($val['goodsId'] . $val['shopId'] . $val['skuId'] . $val['activityId']);
- if (in_array($md5, $allHash)) {
- $old[] = $val;
- } else {
-
- if ($val['setNum'] != 0) {
-
- if ($val['buyNum'] < $val['setNum']) {
- $val['buyNum'] = $val['setNum'];
- }
- }
- $now[] = $val;
- }
- }
- $groupData = [
- 'old' => $old,
- 'now' => $now
- ];
- return ResultWrapper::success($groupData);
- }
-
- public function updateBuyNumApi(array $params)
- {
-
- if (bccomp($params['buyNum'], 0, 0) === 0) {
- $dbResult = $this->objDCart->delete(['id' => $params['cartId']]);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success('操作成功');
- }
- $cart = $this->objDCart->get($params['cartId']);
- if ($cart === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- if (empty($cart)) {
- return ResultWrapper::success(true);
- }
- $goodsInfoResult = $this->objMGoods->getGoodsInfo($cart['goodsId']);
- if (!$goodsInfoResult->isSuccess()) {
- return ResultWrapper::fail($goodsInfoResult->getData(), $goodsInfoResult->getErrorCode());
- }
- $goodsInfo = $goodsInfoResult->getData();
- $checkResult = self::checkGoods($goodsInfo, [
- 'skuId' => $cart['skuId'],
- 'buyNum' => $params['buyNum'],
- ], 'update');
- unset($data);
- if (!$checkResult->isSuccess()) {
- return ResultWrapper::fail($checkResult->getData(), $checkResult->getErrorCode());
- }
- $allBuyNum = $checkResult->getData();
- $params['buyNum'] = $allBuyNum;
- $dbResult = $this->objDCart->update(['buyNum' => $params['buyNum']], $params['cartId']);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success('操作成功');
- }
-
- public function updateBuyNum($params)
- {
- if (bccomp($params['buyNum'], 0, 0) === 0) {
- $dbResult = $this->objDCart->delete(['id' => $params['cartId']]);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success('操作成功');
- } else {
- $goods = self::getCartInventory(['id' => $params['cartId']]);
- if (!$goods->isSuccess()) {
- return ResultWrapper::fail($goods->getData(), ErrorCode::$dberror);
- }
- $goods = $goods->getData();
- $inventoryNum = isset($goods[0]['inventory']) ? $goods[0]['inventory'] : 0;
- $setNum = isset($goods[0]['setNum']) ? $goods[0]['setNum'] : 0;
- $title = isset($goods[0]['title']) ? $goods[0]['title'] : '';
- if (bccomp($inventoryNum, $params['buyNum'], 8) === -1) {
- return ResultWrapper::fail('商品库存不足', ErrorCode::$paramError);
- }
- if (bccomp($params['buyNum'], $setNum, 0) === -1) {
- return ResultWrapper::fail($title . '最小起订数量' . $setNum, ErrorCode::$paramError);
- }
- if ($this->isFront) {
- $dbResult = $this->objDCart->get(['id' => $params['cartId']]);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- $step = bcsub($params['buyNum'], $dbResult['buyNum'], 0);
-
- if (bccomp($params['buyNum'], $dbResult['buyNum']) === 0) {
- return ResultWrapper::success('操作成功');
- } elseif (bccomp($params['buyNum'], $dbResult['buyNum'], 0) === -1) {
- $adj = 2;
- $result = $this->objDCart->update(['buyNum' => $params['buyNum']], ['id' => $params['cartId']]);
- if ($result === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success('操作成功');
- } elseif (bccomp($params['buyNum'], $dbResult['buyNum'], 0) === 1) {
- $adj = 1;
- $insert = [
- 'goodsId' => $dbResult['goodsId'],
- 'goodsBasicId' => $dbResult['goodsBasicId'],
- 'shopId' => $dbResult['shopId'],
- 'source' => $dbResult['source'],
- 'skuId' => $dbResult['skuId'],
- 'buyNum' => $step,
- 'goodsCode' => $dbResult['goodsCode']
- ];
- $result = self::addCart(['goodsData' => [$insert]]);
- if (!$result->isSuccess()) {
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- return ResultWrapper::success('操作成功');
- }
- } else {
- $dbResult = $this->objDCart->update(['buyNum' => $params['buyNum']], $params['cartId']);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success('操作成功');
- }
- }
- }
-
- public function getCartByUserCenterIdApi(): ResultWrapper
- {
-
- $sql = 'SELECT id,goodsId,goodsCode,buyNum,shopId,source,goodsBasicId,selection,skuId,warehouseId,activityId,cashierUid FROM qianniao_cart_'.$this->onlineEnterpriseId.' WHERE userCenterId = '.$this->onlineUserId.' FOR UPDATE';
- $cartList = $this->objDCart->query($sql);
- if ($cartList === false){
- return ResultWrapper::fail($this->objDCart->error(),ErrorCode::$dberror);
- }
- if (empty($cartList)) {
- return ResultWrapper::success(['data' => [], 'total' => 0]);
- }
-
- $activityIds = [];
- foreach ($cartList as $item){
- if(!empty($item['activityId']) && !in_array($item['activityId'],$activityIds)){
- $activityIds[] = $item['activityId'];
- }
- }
- if (!empty($activityIds)){
- $groupResult = self::cartGroupData($cartList);
- if (!$groupResult->isSuccess()) {
- return ResultWrapper::fail($groupResult->getData(), $groupResult->getErrorCode());
- }
- $cartList = $groupResult->getData();
- if (empty($cartList)) {
- return ResultWrapper::success(['data' => [], 'total' => 0]);
- }
- }
- $dataResult = self::formatGoodsAndShop($cartList);
- if (!$dataResult->isSuccess()) {
- return ResultWrapper::fail($dataResult->getData(), $dataResult->getErrorCode());
- }
- $data = $dataResult->getData();
- $return = [
- 'data' => $data,
- 'total' => empty($data) ? 0 : count($data),
- ];
- return ResultWrapper::success($return);
- }
-
- private function buildZero($data, $isZero)
- {
-
- $data['rem_money'] = '0.00';
- $settingResult = $this->objMCashierSettings->get();
- if (!$settingResult->isSuccess()) {
- return ResultWrapper::fail($settingResult->getData(), $settingResult->getErrorCode());
- }
- $setting = $settingResult->getData();
- if (!is_array($setting)) {
-
- return ResultWrapper::success($data);
- }
- if (!isset($setting['add_form'])) {
- return ResultWrapper::fail('收银台配置错误', ErrorCode::$paramError);
- }
- if (!isset($setting['add_form']['zero_set'])) {
- return ResultWrapper::fail('收银台参数配置错误', ErrorCode::$paramError);
- }
- $zeroSet = $setting['add_form']['zero_set'];
- if ($zeroSet['status'] == StatusCode::$delete) {
-
- return ResultWrapper::success($data);
- }
- $payMoney = $data['payMoney'];
- if ($zeroSet['auto_zero'] == StatusCode::$standard) {
-
- switch ($zeroSet['type']) {
- case 1:
-
- $newPatMoney = bcadd($payMoney, 0, 1);
- break;
- case 2:
-
- $newPatMoney = bcadd($payMoney, 0, 0);
- break;
- case 3:
-
- $newPatMoney = round($payMoney, 1);
- break;
- case 4:
-
- $newPatMoney = round($payMoney, 0);
- break;
- default:
- $newPatMoney = 0;
- break;
- }
- $rem_money = bcsub($payMoney, $newPatMoney, 2);
- $data['payMoney'] = $newPatMoney;
- $data['rem_money'] = $rem_money;
- } else {
- if ($isZero == StatusCode::$standard) {
-
- switch ($zeroSet['type']) {
- case 1:
-
- $newPatMoney = bcadd($payMoney, 0, 1);
- break;
- case 2:
-
- $newPatMoney = bcadd($payMoney, 0, 0);
- break;
- case 3:
-
- $newPatMoney = round($payMoney, 1);
- break;
- case 4:
-
- $newPatMoney = round($payMoney, 0);
- break;
- default:
- $newPatMoney = 0;
- break;
- }
- $rem_money = bcsub($payMoney, $newPatMoney, 2);
- $data['payMoney'] = $newPatMoney;
- $data['rem_money'] = $rem_money;
- }
- }
- return ResultWrapper::success($data);
- }
-
- private function cartGroupData(array $data)
- {
- if (empty($data)) {
- return ResultWrapper::success([]);
- }
-
- $BasicSetupResult = $this->objMBasicSetup->getBasicField('limitLevel');
- if (!$BasicSetupResult->isSuccess()) {
- return ResultWrapper::fail($BasicSetupResult->getData(), $BasicSetupResult->getErrorCode());
- }
- $BasicSetup = $BasicSetupResult->getData();
- $limitLevel = isset($BasicSetup['limitLevel']) ? $BasicSetup['limitLevel'] : StatusCode::$standard;
- $selectStateMap = [];
-
- $dataMap = [];
- $skuBuyMap = [];
- foreach ($data as $datum) {
- $selectStateMap[$datum['skuId'] . ':' . $datum['activityId']] = $datum['selection'];
- $dataMap[$datum['skuId']] = [
- 'id' => $datum['id'],
- 'goodsId' => $datum['goodsId'],
- 'goodsCode' => $datum['goodsCode'],
- 'shopId' => $datum['shopId'],
- 'source' => $datum['source'],
- 'goodsBasicId' => $datum['goodsBasicId'],
- 'selection' => $datum['selection'],
- 'skuId' => $datum['skuId'],
- 'warehouseId' => $datum['warehouseId'],
- 'activityId' => 0,
- ];
- $skuBuyMap[$datum['skuId']][] = $datum['buyNum'];
- }
- $this->selectStateMap = $selectStateMap;
- foreach ($dataMap as $skuId => $value) {
- $dataMap[$skuId]['buyNum'] = array_sum($skuBuyMap[$skuId]);
- }
- $data = array_values($dataMap);
-
- $customer = $this->objDCustomer->get(['userCenterId' => $this->onlineUserId], 'id,type');
- if ($customer === false) {
- return ResultWrapper::fail($this->objDCustomer->error(), ErrorCode::$dberror);
- }
- if (empty($customer)) {
- $customer = [];
- }
-
- $allSkuIds = [];
- foreach ($data as $datum) {
- $allSkuIds[] = $datum['skuId'];
- }
- $activityResult = $this->objMActivity->getActivity([
- 'skuIds' => implode(',', $allSkuIds),
- 'customerType' => isset($customer['type']) ? $customer['type'] : 0,
- ]);
- if (!$activityResult->isSuccess()) {
- return ResultWrapper::fail($activityResult->getData(), $activityResult->getErrorCode());
- }
- $activity = $activityResult->getData();
- $activityMap = [];
- foreach ($activity as $item) {
- $activityMap[$item['skuId']] = $item;
- }
- $update = [];
- foreach ($data as $item) {
- if (!isset($activityMap[$item['skuId']])) {
-
- $update[] = self::buildData($item, $item['buyNum'], 0, $this->onlineUserId);
- continue;
- }
-
-
- $len = $this->objActivityLimitCache->getLen($activityMap[$item['skuId']]['activityId'], $item['goodsId'], $item['skuId']);
- if ($len == 0) {
-
- $update[] = self::buildData($item, $item['buyNum'], 0, $this->onlineUserId);
- continue;
- }
-
-
- if ($len >= $item['buyNum']) {
-
- $userLimit = $this->objActivityLimitCache->getLimit($activityMap[$item['skuId']]['activityId'], $item['goodsId'], $item['skuId'], $this->onlineUserId);
-
- switch ($limitLevel) {
- case StatusCode::$standard:
- if ($activityMap[$item['skuId']]['limitNum'] == 0) {
- $update[] = self::buildData($item, $item['buyNum'], 0, $this->onlineUserId);
- continue 2;
- }
-
- if ($userLimit > $activityMap[$item['skuId']]['limitNum']) {
-
- $update[] = self::buildData($item, $item['buyNum'], 0, $this->onlineUserId);
- continue 2;
- }
- $allowBuyNum = $activityMap[$item['skuId']]['limitNum'] - $userLimit;
- if ($allowBuyNum == 0) {
- $update[] = self::buildData($item, $item['buyNum'], 0, $this->onlineUserId);
- continue 2;
- }
- if ($item['buyNum'] <= $allowBuyNum) {
- $update[] = self::buildData($item, $item['buyNum'], $activityMap[$item['skuId']]['activityId'], $this->onlineUserId);
- continue 2;
- }
- if ($item['buyNum'] > $allowBuyNum) {
-
- $update[] = self::buildData($item, $allowBuyNum, $activityMap[$item['skuId']]['activityId'], $this->onlineUserId);
- $update[] = self::buildData($item, $item['buyNum'] - $allowBuyNum, 0, $this->onlineUserId);
- continue 2;
- }
- break;
- case StatusCode::$delete:
-
- if ($activityMap[$item['skuId']]['limitNum'] < $item['buyNum']) {
-
- $update[] = self::buildData($item, $activityMap[$item['skuId']]['limitNum'], $activityMap[$item['skuId']]['activityId'], $this->onlineUserId);
- $update[] = self::buildData($item, $item['buyNum'] - $activityMap[$item['skuId']]['limitNum'], 0, $this->onlineUserId);
- continue 2;
- }
- if ($activityMap[$item['skuId']]['limitNum'] >= $item['buyNum']) {
-
- $update[] = self::buildData($item, $item['buyNum'], $activityMap[$item['skuId']]['activityId'], $this->onlineUserId);
- continue 2;
- }
- break;
- }
- } else {
-
- $update[] = self::buildData($item, $item['buyNum'], 0, $this->onlineUserId);
- continue;
- }
- }
- if (empty($update)) {
- return ResultWrapper::fail('获取购物车数据失败', ErrorCode::$paramError);
- }
- $this->objDCart->beginTransaction();
- $deleteRes = $this->objDCart->delete(['userCenterId' => $this->onlineUserId]);
- if ($deleteRes === false) {
- $this->objDCart->rollBack();
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- $insertRes = $this->objDCart->insert($update, true);
- if ($insertRes === false) {
- $this->objDCart->rollBack();
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- $this->objDCart->commit();
- $where['userCenterId'] = $this->onlineUserId;
- $cartList = $this->objDCart->select($where);
- if ($cartList === false) {
- $this->objDCart->rollBack();
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($cartList);
- }
-
- private function buildData(array $item, int $buyNum, int $activityId, int $userCenterId)
- {
- $data = [
- 'goodsId' => $item['goodsId'],
- 'goodsCode' => $item['goodsCode'],
- 'shopId' => $item['shopId'],
- 'source' => $item['source'],
- 'goodsBasicId' => $item['goodsBasicId'],
- 'selection' => isset($this->selectStateMap[$item['skuId'] . ':' . $activityId]) ? $this->selectStateMap[$item['skuId'] . ':' . $activityId] : StatusCode::$delete,
- 'skuId' => $item['skuId'],
- 'warehouseId' => $item['warehouseId'],
- 'activityId' => $activityId,
- 'buyNum' => $buyNum,
- 'userCenterId' => $userCenterId
- ];
- return $data;
- }
-
- public function getCartByUserCenterId()
- {
- $result = $this->objDCart->select(['userCenterId' => $this->onlineUserId], 'id,goodsId,goodsCode,buyNum,shopId,source,goodsBasicId,selection,skuId,warehouseId,activityId', 'createTime DESC');
- if ($result === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- $result = self::formatMerge($result);
- if (!$result->isSuccess()) {
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- $dataResult = self::formatGoodsAndShop($result->getData());
- if (!$dataResult->isSuccess()) {
- return ResultWrapper::fail($dataResult->getData(), $dataResult->getErrorCode());
- }
- $data = $dataResult->getData();
- $return = [
- 'data' => $data,
- 'total' => empty($data) ? 0 : count($data),
- ];
- return ResultWrapper::success($return);
- }
-
- public function getManageCartByUserCenterId()
- {
- $result = $this->objDCart->select(['userCenterId' => $this->onlineUserId], 'id,goodsId,goodsCode,buyNum,shopId,goodsBasicId,selection,skuId,warehouseId,activityId', 'createTime DESC');
- if ($result === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- $dataResult = self::formatGoodsAndShop($result);
- if (!$dataResult->isSuccess()) {
- return ResultWrapper::fail($dataResult->getData(), $dataResult->getErrorCode());
- }
- $data = $dataResult->getData();
- $return = [
- 'data' => $data,
- 'total' => empty($data) ? 0 : count($data),
- ];
- return ResultWrapper::success($return);
- }
-
- private function getCartByUid()
- {
- $result = $this->objDCart->select(['userCenterId' => $this->onlineUserId], 'id,goodsId,goodsCode,buyNum,shopId,goodsBasicId,selection,skuId,warehouseId,activityId,cashierUid', 'createTime DESC');
- if ($result === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($result);
- }
-
- public function updateSelection($params)
- {
- $dbResult = false;
- switch ($params['type']) {
- case self::$type['single']:
- if (empty($params['id'])) {
- return ResultWrapper::fail('缺少cartId', ErrorCode::$paramError);
- }
- $dbResult = $this->objDCart->update(['selection' => $params['selection']], $params['id']);
- break;
- case self::$type['shop']:
- if (empty($params['shopId'])) {
- return ResultWrapper::fail('缺少shopId', ErrorCode::$paramError);
- }
- $dbResult = $this->objDCart->update(['selection' => $params['selection']], ['shopId' => $params['shopId'], 'userCenterId' => $this->onlineUserId]);
- break;
- case self::$type['all']:
- $dbResult = $this->objDCart->update(['selection' => $params['selection']], ['userCenterId' => $this->onlineUserId]);
- break;
- }
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($dbResult);
- }
-
- public function delCart($ids, $order = false)
- {
- $dbResult = $this->objDCart->select($ids, 'id,goodsId,buyNum,skuId,activityId');
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
-
- if ($order === true) {
- foreach ($dbResult as $goods) {
- if ($goods['activityId'] != 0) {
- $userSurplusNum = $this->objActivityLimitCache->getLimit($goods['activityId'], $goods['goodsId'], $goods['skuId'], $this->onlineUserId);
- $mapping[] = [
- 'activityId' => $goods['activityId'],
- 'goodsId' => $goods['goodsId'],
- 'skuId' => $goods['skuId'],
- 'buyNum' => $userSurplusNum + $goods['buyNum'],
- ];
- self::userLimit($mapping);
- }
- }
- }
- $dbResult = $this->objDCart->delete($ids);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($dbResult);
- }
-
- private static function isInteger($num)
- {
- if ($num - floor($num) != 0) {
- return false;
- }
- return true;
- }
-
- private function formatGoodsAndShop($data, $userCouponId = null, $vipCardId = null)
- {
- foreach ($data as &$value) {
- $value['buyNum'] = self::isInteger($value['buyNum']) ? (int)$value['buyNum'] : $value['buyNum'];
- }
- unset($value);
- $result = self::formatShop($data);
- $result = self::formatGoods($result);
- if ($this->isFront === true) {
- $result = self::calExpress($result);
- if (!$result->isSuccess()) {
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- $result = $result->getData();
- }
-
- $priceResult = self::formatPrice($result);
- if (!$priceResult->isSuccess()) {
- return ResultWrapper::fail($priceResult->getData(), $priceResult->getErrorCode());
- }
- $result = $priceResult->getData();
- $inventoryResult = self::formatSkuInventory($result);
- if (!$inventoryResult->isSuccess()){
- return ResultWrapper::fail($inventoryResult->getData(),$inventoryResult->getErrorCode());
- }
- $result = $inventoryResult->getData();
- $result = self::formatGroup($result, $userCouponId, $vipCardId);
- if(!$result->isSuccess()){
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- return ResultWrapper::success($result->getData());
- }
-
- private function formatMerge($data)
- {
- if (empty($data)) return ResultWrapper::success($data);
- foreach ($data as $goods) {
- if ($goods['activityId'] == 0) {
- continue;
- }
-
- $activity = $this->objActivityLimitCache->getActivity($goods['activityId']);
- if ($activity['enableStatus'] == StatusCode::$delete
- || time() < $activity['startTime']
- || time() > $activity['endTime']) {
-
- $cartResult = $this->objDCart->get(['goodsId' => $goods['goodsId'], 'shopId' => $goods['shopId'], 'skuId' => $goods['skuId'], 'activityId' => 0, 'userCenterId' => $this->onlineUserId]);
- if (empty($cartResult)) {
-
- $insert = [
- 'userCenterId' => $this->onlineUserId,
- 'selection' => StatusCode::$standard,
- 'skuId' => $goods['skuId'],
- 'goodsCode' => $goods['goodsCode'],
- 'goodsId' => $goods['goodsId'],
- 'shopId' => $goods['shopId'],
- 'buyNum' => $goods['buyNum'],
- 'source' => $goods['source'],
- 'goodsBasicId' => $goods['goodsBasicId'],
- 'warehouseId' => $goods['warehouseId'],
- 'activityId' => 0,
- ];
- $dbResult = $this->objDCart->insert($insert);
- } else {
-
- $dbResult = $this->objDCart->set_inc('buyNum', ['id' => $cartResult['id']], $goods['buyNum']);
- }
- $delResult = $this->objDCart->delete(['id' => $goods['id']]);
-
- $userLimit = $this->objActivityLimitCache->getLimit($goods['activityId'], $goods['goodsId'], $goods['skuId'], $this->onlineUserId);
- $this->objActivityLimitCache->writeLimit($goods['activityId'], $goods['goodsId'], $goods['skuId'], $this->onlineUserId, $userLimit - $goods['buyNum']);
- if ($delResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- }
- }
- $result = $this->objDCart->select(['userCenterId' => $this->onlineUserId], 'id,goodsId,goodsCode,buyNum,shopId,goodsBasicId,selection,skuId,warehouseId,activityId', 'createTime DESC');
- if ($result === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($result);
- }
-
- private function formatShop($data)
- {
- if (empty($data)) return $data;
- $objMGoods = new MShop($this->onlineEnterpriseId, $this->onlineUserId);
- $shopData = $objMGoods->getShopName(array_unique(array_column($data, 'shopId')));
- if (!empty($shopData)) {
- foreach ($data as &$shop) {
- $shop['shopName'] = isset($shopData[$shop['shopId']]['name']) ? $shopData[$shop['shopId']]['name'] : '';
- $shop['shopLogo'] = isset($shopData[$shop['shopId']]['logo']) ? $shopData[$shop['shopId']]['logo'] : '';
- $shop['cartId'] =getArrayItem($shop,'id',0);
- }
- }
- return $data;
- }
-
- private function formatGoods($data)
- {
- if (empty($data)) return $data;
- $objGoodsBasicRelevantCache = new GoodsBasicRelevant($this->onlineEnterpriseId);
- $objMGoods = new MGoods($this->onlineEnterpriseId, false, $this->onlineUserId);
- $goodsData = $objMGoods->getGoodsNames(array_unique(array_column($data, 'goodsId')));
- if (!empty($goodsData)) {
- $dbResult = $objMGoods->getNameByGoodsIds(array_values(array_unique(array_column($goodsData, 'basicGoodsId'))));
- if ($dbResult->isSuccess()) {
- $basicData = $dbResult->getData();
- foreach ($goodsData as &$goods) {
- $goods['goodsName'] = isset($basicData[$goods['basicGoodsId']]['title']) ? $basicData[$goods['basicGoodsId']]['title'] : '';
- $goods['describe'] = isset($basicData[$goods['basicGoodsId']]['describe']) ? $basicData[$goods['basicGoodsId']]['describe'] : '';
- $goods['categoryId'] = isset($basicData[$goods['basicGoodsId']]['categoryId']) ? $basicData[$goods['basicGoodsId']]['categoryId'] : '';
- $goods['brandId'] = isset($basicData[$goods['basicGoodsId']]['brandId']) ? $basicData[$goods['basicGoodsId']]['brandId'] : '';
- $goods['categoryPath'] = isset($basicData[$goods['basicGoodsId']]['categoryPath']) ? $basicData[$goods['basicGoodsId']]['categoryPath'] : '';
- $goods['specType'] = isset($basicData[$goods['basicGoodsId']]['specType']) ? $basicData[$goods['basicGoodsId']]['specType'] : StatusCode::$specType['single'];
- $goods['storageCode'] = isset($basicData[$goods['basicGoodsId']]['storageCode']) ? $basicData[$goods['basicGoodsId']]['storageCode'] : '';
- $goods['categoryName'] = empty($goods['categoryId']) ? '' : $objGoodsBasicRelevantCache->getNameByCategoryId($goods['categoryId']);
- $goods['brandName'] = empty($goods['brandId']) ? '' : $objGoodsBasicRelevantCache->getNameByBrandId($goods['brandId']);
- $goods['images'] = isset($basicData[$goods['basicGoodsId']]['images']) ? $basicData[$goods['basicGoodsId']]['images'] : [];
- $goods['isEq'] = isset($basicData[$goods['basicGoodsId']]['isEq']) ? $basicData[$goods['basicGoodsId']]['isEq'] : StatusCode::$delete;
- }
- }
- }
- $objMSku = new MSku($this->onlineUserId, $this->onlineEnterpriseId);
- $specNameMapping = $objMSku->getSpecNameBySkuId(array_column($data, 'skuId'));
- if (!$specNameMapping->isSuccess()) {
- $specNameMapping = [];
- } else {
- $specNameMapping = $specNameMapping->getData();
- }
- foreach ($data as $key => &$val) {
- $val['goodsCode'] = createCode(StatusCode::$code['goodsBasic']['prefix'], $val['goodsBasicId'], StatusCode::$code['goodsBasic']['length']);
- $val['brandName'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['brandName'] : '';
- $val['categoryName'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['categoryName'] : '';
- $val['barCode'] = isset($specNameMapping[$val['skuId']]) ? $specNameMapping[$val['skuId']]['barCode'] : '';
- $val['storageCode'] = isset($goodsData[$val['goodsId']]['storageCode']) ? $goodsData[$val['goodsId']]['storageCode'] : '';
- $val['goodsName'] = isset($goodsData[$val['goodsId']]['goodsName']) ? $goodsData[$val['goodsId']]['goodsName'] : '';
- $images = isset($goodsData[$val['goodsId']]['images']) ? $goodsData[$val['goodsId']]['images'] : [];
- $val['goodsImages'] = empty($images) ? '' : $images[0];
- $val['isInvalid'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['enableStatus'] : StatusCode::$delete;
- $val['describe'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['describe'] : '';
- $val['categoryId'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['categoryId'] : '';
- $val['brandId'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['brandId'] : '';
- $val['categoryPath'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['categoryPath'] : '';
- $val['isActivity'] = empty($val['activityId']) ? StatusCode::$delete : StatusCode::$standard;
- $val['specType'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['specType'] : StatusCode::$specType['single'];
- $val['unitName'] = isset($specNameMapping[$val['skuId']]) ? $specNameMapping[$val['skuId']]['unitName'] : '';
- $val['specGroup'] = isset($specNameMapping[$val['skuId']]) ? $specNameMapping[$val['skuId']]['specGroup'] : [];
- $val['notExpress'] = StatusCode::$standard;
- $val['supplierId'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['supplierId'] : 0;
- $val['supplierName'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['supplierName'] : '';
- $val['isEq'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['isEq'] : StatusCode::$delete;
- $val['isDistribution'] = isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['isDistribution'] : StatusCode::$delete;
- $val['express'] = [
- 'weight' => isset($specNameMapping[$val['skuId']]) ? $specNameMapping[$val['skuId']]['weight'] : 0,
- 'expressType' => isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['expressType'] : 0,
- 'ruleId' => isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['ruleId'] : 0,
- 'expressFee' => isset($goodsData[$val['goodsId']]) ? $goodsData[$val['goodsId']]['expressFee'] : 0,
- ];
- if ($val['isEq'] == StatusCode::$standard){
- $isMaster = isset($specNameMapping[$val['skuId']]) ? $specNameMapping[$val['skuId']]['isMaster'] : StatusCode::$delete;
-
- if ($isMaster == StatusCode::$delete){
- $masterSkuResult = $this->objMSku->getMasterById($val['goodsBasicId']);
- if ($masterSkuResult->isSuccess()){
- $masterSku = $masterSkuResult->getData();
- $conversion = isset($specNameMapping[$val['skuId']]) ? $specNameMapping[$val['skuId']]['conversion'] : 0;
- $u = isset($masterSku['unitName']) ? $masterSku['unitName'] : '';
- $u_1 = $val['unitName'];
- $val['extends'] = ['uId' => $masterSku['id'], 'uId_1' => $val['skuId'], 'u' => $u, 'u_1' => $u_1, 'u_1_buy'=> $val['buyNum'],'conversion' => $conversion];
- }
- }
- }
- if (isset($goodsData[$val['goodsId']]) && ($goodsData[$val['goodsId']]['enableStatus'] == StatusCode::$delete || $goodsData[$val['goodsId']]['deleteStatus'] == StatusCode::$delete)) {
- $val['invalidMsg'] = '此商品已下架';
- $this->invalidData[] = $val;
- unset($data[$key]);
- }
- }
- return $data;
- }
-
- private function formatSku($data)
- {
- if (empty($data)) return $data;
- $objMSku = new MSku($this->onlineUserId, $this->onlineEnterpriseId);
- $skuData = $objMSku->getSku(array_unique(array_column($data, 'skuId')));
- if (!empty($skuData)) {
- foreach ($data as &$goods) {
- $goods['skuData'][] = isset($skuData[$goods['skuId']]) ? $skuData[$goods['skuId']] : [];
- $goods['unitName'] = isset($skuData[$goods['skuId']]['unitName']) ? $skuData[$goods['skuId']]['unitName'] : '';
- $goods['conversion'] = isset($skuData[$goods['skuId']]['conversion']) ? $skuData[$goods['skuId']]['conversion'] : '';
- }
- }
- return $data;
- }
-
- private function formatSkuInventory($data): ResultWrapper
- {
- $inventorySelectParams = [];
- $skuIds = [];
- foreach ($data as &$goods) {
- $skuIds[] = $goods['skuId'];
- $goods['inventory'] = 0;
- $inventorySelectParams[$goods['shopId']][] = $goods['skuId'];
- }
- unset($goods);
- $objMInventory = new MInventory($this->onlineEnterpriseId, $this->onlineUserId);
- $inventoryMap = [];
- foreach ($inventorySelectParams as $shopId => $skuIds){
- $inventoryResult = $objMInventory->getInventoryByShopIdAndSkuIds($shopId,$skuIds);
- if (!$inventoryResult->isSuccess()) {
- return ResultWrapper::fail($inventoryResult->getData(),$inventoryResult->getErrorCode());
- }
- $inventoryMap[$shopId] = $inventoryResult->getData();
- }
-
- $skuConversionResult = $this->objMSku->getConversion($skuIds);
- if (!$skuConversionResult->isSuccess()) {
- return ResultWrapper::fail($skuConversionResult->getData(),$skuConversionResult->getErrorCode());
- }
- $skuConversionMapping = $skuConversionResult->getData();
- foreach ($data as $key => &$goods) {
- if(isset($skuConversionMapping[$goods['skuId']])) {
- $thisSku = $skuConversionMapping[$goods['skuId']];
- if (!isset($inventoryMap[$goods['shopId']])) {
- return ResultWrapper::fail('未获取到库存信息', ErrorCode::$paramError);
- }
- $row = $inventoryMap[$goods['shopId']];
- $goods['inventoryNum'] = isset($row[$goods['skuId']]['num']) ? $row[$goods['skuId']]['num'] : 0;
- $goods['costPrice'] = 0;
- $goods['conversion'] = $thisSku['conversion'];
-
- if ($goods['isDistribution'] == StatusCode::$delete) {
-
- if ($goods['inventoryNum'] < $goods['buyNum']) {
- $goods['isInvalid'] = StatusCode::$delete;
- $goods['invalidMsg'] = '商品库存不足';
- $this->invalidData[] = $goods;
- unset($data[$key]);
- }
- }
- }
- }
- return ResultWrapper::success($data);
- }
-
- private function calExpress(array $data)
- {
- if (empty($data)) return ResultWrapper::success($data);
- if (empty($this->onlineUserDefaultDeliveryType)) {
- return ResultWrapper::success($data);
- }
-
- if ($this->onlineUserDefaultDeliveryType != StatusCode::$deliveryType['goodsDelivery']) {
- return ResultWrapper::success($data);
- }
- $map = [];
- foreach ($data as $val) {
- $map[$val['shopId']][] = $val;
- }
- unset($data);
-
- $data = [];
- foreach ($map as $shopId => $item) {
- $buildDataResult = self::buildExpressData($item, $shopId, $this->onlineUserAddressCode);
- if (!$buildDataResult->isSuccess()) {
- return ResultWrapper::fail($buildDataResult->getData(), $buildDataResult->getErrorCode());
- }
- $data = array_merge($data, $buildDataResult->getData());
- }
- return ResultWrapper::success($data);
- }
-
- private function buildExpressData(array $data, int $shopId, $code = null)
- {
-
- $allRuleIds = [];
- foreach ($data as $item) {
- if ($item['express']['expressType'] == StatusCode::$expressType['rule']) {
- $allRuleIds[] = $item['express']['ruleId'];
- continue;
- }
- }
- $allRuleIds = array_values(array_unique($allRuleIds));
- $roleMap = [];
- $objDDeliveryRule = new DDeliveryRule();
- $objDDeliveryRule->setTable('qianniao_delivery_rule_' . $this->onlineEnterpriseId);
- if (!empty($allRuleIds)) {
- $ruleLists = $objDDeliveryRule->select(['id' => $allRuleIds]);
- if ($ruleLists === false) {
- return ResultWrapper::fail($objDDeliveryRule->error(), ErrorCode::$dberror);
- }
- foreach ($ruleLists as $item) {
- $roleMap[$item['id']] = empty($item['setData']) ? [] : json_decode($item['setData'], true);
- }
- }
-
- $objMBasicSetup = new MBasicSetup($this->onlineEnterpriseId);
- $BasicSetupResult = $objMBasicSetup->getBasicField('calculateExpressType');
- if (!$BasicSetupResult->isSuccess()) {
- return ResultWrapper::fail($BasicSetupResult->getData(), $BasicSetupResult->getErrorCode());
- }
- $BasicSetup = $BasicSetupResult->getData();
- $calculateExpressType = isset($BasicSetup['calculateExpressType']) ? $BasicSetup['calculateExpressType'] : StatusCode::$standard;
- switch ($calculateExpressType) {
- case StatusCode::$delete:
- $calResult = self::ruleAdd($data, $roleMap, $code, $shopId);
- break;
- case StatusCode::$standard:
- $calResult = self::ruleGroup($data, $roleMap, $code, $shopId);
- break;
- default:
- $calResult = self::ruleGroup($data, $roleMap, $code, $shopId);
- break;
- }
- if (!$calResult->isSuccess()) {
- return ResultWrapper::fail($calResult->getData(), $calResult->getErrorCode());
- }
- $data = $calResult->getData();
- return ResultWrapper::success($data);
- }
-
- private function ruleAdd($data, $roleMap, $code, $shopId)
- {
-
- $freeExpressMoney = 0;
- $ruleExpressMoney = 0;
- $unifyExpressMoney = 0;
- $ruleIdRelGoodsMap = [];
- foreach ($data as &$item) {
-
- switch ($item['express']['expressType']) {
- case StatusCode::$expressType['free']:
-
- $freeExpressMoney = bcadd($freeExpressMoney, 0, 2);
- break;
- case StatusCode::$expressType['rule']:
- $ruleId = $item['express']['ruleId'];
-
- if (!isset($roleMap[$ruleId])) {
-
- continue 2;
- }
- if (!empty($code)) {
-
-
- $notDispatchAreas = $roleMap[$ruleId]['not_dispatch_areas'];
- $isExist = self::searchInArray($code, $notDispatchAreas);
- if ($isExist === true) {
- $item['notExpress'] = StatusCode::$delete;
- continue 2;
- }
- }
- $ruleIdRelGoodsMap[$ruleId]['num'] = (isset($ruleIdRelGoodsMap[$ruleId]['num']) ? $ruleIdRelGoodsMap[$ruleId]['num'] : 0) + $item['buyNum'];
- $ruleIdRelGoodsMap[$ruleId]['weight'] = (isset($ruleIdRelGoodsMap[$ruleId]['weight']) ? $ruleIdRelGoodsMap[$ruleId]['weight'] : 0) + bcmul($item['express']['weight'], $item['buyNum'], 2);
- break;
- case StatusCode::$expressType['unify']:
-
- if ($item['express']['expressFee'] > $unifyExpressMoney) {
-
- $unifyExpressMoney = $item['express']['expressFee'];
- }
- break;
- default:
-
- break;
- }
- }
- if (!empty($ruleIdRelGoodsMap)) {
-
- foreach ($ruleIdRelGoodsMap as $ruleId => $value) {
- $type = $roleMap[$ruleId]['type'];
- if (empty($code)) {
-
- $uniform = $roleMap[$ruleId]['uniform'];
- $expressMoney = self::calculateExpress($type, $uniform, $value);
- $ruleExpressMoney = bcadd($ruleExpressMoney, $expressMoney, 2);
- } else {
-
- $dispatchAreas = $roleMap[$ruleId]['areas'];
- $searchRow = self::searchRowByCode($code, $dispatchAreas);
- if ($searchRow === false) {
-
- $uniform = $roleMap[$ruleId]['uniform'];
- $expressMoney = self::calculateExpress($type, $uniform, $value);
- $ruleExpressMoney = bcadd($ruleExpressMoney, $expressMoney, 2);
- } else {
-
- $rule = [
- 'first_num' => $searchRow['first_num'],
- 'first_price' => $searchRow['first_price'],
- 'second_num' => $searchRow['second_num'],
- 'second_price' => $searchRow['second_price']
- ];
- $expressMoney = self::calculateExpress($type, $rule, $value);
- $ruleExpressMoney = bcadd($ruleExpressMoney, $expressMoney, 2);
- }
- }
- }
- }
- $this->expressShopMoney[$shopId] = bcadd($ruleExpressMoney, $unifyExpressMoney, 2);
- $this->expressMoney = bcadd($this->expressMoney, $this->expressShopMoney[$shopId], 2);
- return ResultWrapper::success($data);
- }
-
- private function ruleGroup($data, $roleMap, $code, $shopId)
- {
-
- $freeExpressMoney = 0;
- $ruleExpressMoney = 0;
- $unifyExpressMoney = 0;
- $ruleIdRelGoodsMap = [];
- foreach ($data as &$item) {
-
- switch ($item['express']['expressType']) {
- case StatusCode::$expressType['free']:
-
- $freeExpressMoney = bcadd($freeExpressMoney, 0, 2);
- break;
- case StatusCode::$expressType['rule']:
- $ruleId = $item['express']['ruleId'];
-
- if (!isset($roleMap[$ruleId])) {
-
- continue 2;
- }
- if (!empty($code)) {
-
-
- $notDispatchAreas = $roleMap[$ruleId]['not_dispatch_areas'];
- $isExist = self::searchInArray($code, $notDispatchAreas);
- if ($isExist === true) {
- $item['notExpress'] = StatusCode::$delete;
- continue 2;
- }
- }
- $ruleIdRelGoodsMap[$ruleId]['num'] = (isset($ruleIdRelGoodsMap[$ruleId]['num']) ? $ruleIdRelGoodsMap[$ruleId]['num'] : 0) + $item['buyNum'];
- $ruleIdRelGoodsMap[$ruleId]['weight'] = (isset($ruleIdRelGoodsMap[$ruleId]['weight']) ? $ruleIdRelGoodsMap[$ruleId]['weight'] : 0) + bcmul($item['express']['weight'], $item['buyNum'], 2);
- break;
- case StatusCode::$expressType['unify']:
-
- if ($item['express']['expressFee'] > $unifyExpressMoney) {
-
- $unifyExpressMoney = $item['express']['expressFee'];
- }
- break;
- default:
-
- break;
- }
- }
-
-
- if (!empty($ruleIdRelGoodsMap)) {
-
- foreach ($ruleIdRelGoodsMap as $ruleId => &$value) {
- $value['type'] = $roleMap[$ruleId]['type'];
- if (empty($code)) {
-
- $uniform = $roleMap[$ruleId]['uniform'];
- $value['rule'] = $uniform;
- } else {
-
- $dispatchAreas = $roleMap[$ruleId]['areas'];
- $searchRow = self::searchRowByCode($code, $dispatchAreas);
- if ($searchRow === false) {
-
- $uniform = $roleMap[$ruleId]['uniform'];
- $value['rule'] = $uniform;
- } else {
-
- $rule = [
- 'first_num' => $searchRow['first_num'],
- 'first_price' => $searchRow['first_price'],
- 'second_num' => $searchRow['second_num'],
- 'second_price' => $searchRow['second_price']
- ];
- $value['rule'] = $rule;
- }
- }
- }
-
- $ruleExpressMoney = self::calculateExpressGroup($ruleIdRelGoodsMap);
- }
- $this->expressShopMoney[$shopId] = bcadd($ruleExpressMoney, $unifyExpressMoney, 2);
- $this->expressMoney = bcadd($this->expressMoney, $this->expressShopMoney[$shopId], 2);
- return ResultWrapper::success($data);
- }
-
- private static function calculateExpressGroup($data)
- {
- $ruleExpressMoney = 0;
- $max_first_price = 0;
- $max_rule_id = 0;
- foreach ($data as $ruleId => $item) {
-
- if ($item['rule']['first_price'] > $max_first_price) {
- $max_first_price = $item['rule']['first_price'];
- $max_rule_id = $ruleId;
- }
- }
- unset($item);
- foreach ($data as $ruleId => &$item) {
- if ($ruleId != $max_rule_id) {
- continue;
- }
-
- switch ($item['type']) {
- case StatusCode::$delete:
-
- $num = bcsub($item['num'], $item['rule']['first_num'], 2);
- $item['num'] = ($num < 0) ? 0 : $num;
- break;
- case StatusCode::$standard:
-
- $weight = bcsub($item['weight'], $item['rule']['first_num'], 2);
- $item['weight'] = ($weight < 0) ? 0 : $weight;
- break;
- }
- }
- unset($item);
-
- foreach ($data as $ruleId => $item) {
- switch ($item['type']) {
- case StatusCode::$delete:
- $mod = ($item['rule']['second_num'] == 0) ? 0 : ceil($item['num'] / $item['rule']['second_num']);
- $expressMoney = bcmul($mod, $item['rule']['second_price'], 2);
- $ruleExpressMoney = bcadd($ruleExpressMoney, $expressMoney, 2);
- break;
- case StatusCode::$standard:
- $mod = ($item['rule']['second_num'] == 0) ? 0 : ceil($item['weight'] / $item['rule']['second_num']);
- $expressMoney = bcmul($mod, $item['rule']['second_price'], 2);
- $ruleExpressMoney = bcadd($ruleExpressMoney, $expressMoney, 2);
- break;
- }
- unset($expressMoney);
- unset($mod);
- }
-
- return bcadd($max_first_price, $ruleExpressMoney, 2);
- }
-
- private static function calculateExpress($type, $rule, $item)
- {
- switch ($type) {
- case StatusCode::$delete:
-
-
- if ($item['num'] <= $rule['first_num']) return $rule['first_price'];
- $mod = ($rule['second_num'] == 0) ? 0 : ceil(($item['num'] - $rule['first_num']) / $rule['second_num']);
- return bcadd($rule['first_price'], bcmul($mod, $rule['second_price'], 2), 2);
- break;
- case StatusCode::$standard:
-
- $thisWeight = bcmul($item['weight'], $item['num'], 2);
- if ($thisWeight <= $rule['first_num']) return $rule['first_price'];
- $mod = ($rule['second_num'] == 0) ? 0 : ceil(($thisWeight - $rule['first_num']) / $rule['second_num']);
- return bcadd($rule['first_price'], bcmul($mod, $rule['second_price'], 2), 2);
- break;
- default:
- break;
- }
- }
-
- public function searchRowByCode($code, $data)
- {
- $arr = explode('-', $code);
- $provinceCode = isset($arr[0]) ? $arr[0] : 0;
- $cityCode = isset($arr[1]) ? $arr[1] : 0;
- $areaCode = isset($arr[2]) ? $arr[2] : 0;
- foreach ($data as $item) {
- $allProvinces = isset($item['provinces']) ? $item['provinces'] : [];
- $allCitys = isset($item['citys']) ? $item['citys'] : [];
- $allAreas = isset($item['areas']) ? $item['areas'] : [];
-
- if (!in_array($provinceCode, $allProvinces)) {
- continue;
- }
-
- if (!in_array($cityCode, $allCitys)) {
- continue;
- }
- if (!in_array($areaCode, $allAreas)) {
- continue;
- }
-
- return $item;
- }
- return false;
- }
-
- public function searchInArray($code, $data)
- {
- $arr = explode('-', $code);
- $provinceCode = isset($arr[0]) ? $arr[0] : 0;
- $cityCode = isset($arr[1]) ? $arr[1] : 0;
- $areaCode = isset($arr[2]) ? $arr[2] : 0;
- $allProvinces = isset($data['provinces']) ? $data['provinces'] : [];
- $allCitys = isset($data['citys']) ? $data['citys'] : [];
- $allAreas = isset($data['areas']) ? $data['areas'] : [];
-
- if (!in_array($provinceCode, $allProvinces)) {
- return false;
- }
-
- if (!in_array($cityCode, $allCitys)) {
- return false;
- }
- if (!in_array($areaCode, $allAreas)) {
- return false;
- }
- return true;
- }
-
- private function formatPrice($data)
- {
- if (empty($data)) return ResultWrapper::success($data);
- $objMPrice = new MPrice($this->onlineUserId, $this->onlineEnterpriseId);
- $objMActivity = new MActivity($this->onlineUserId, $this->onlineEnterpriseId);
- $objMCustomer = new MCustomer($this->onlineEnterpriseId, $this->onlineUserId);
- $selectParam['material'] = [];
- $allGoodsId = [];
- foreach ($data as &$goods) {
- $allGoodsId[] = $goods['goodsId'];
- $selectParam['material'][$goods['shopId']][] = $goods['goodsId'];
- $goods['originPrice'] = 0;
- $goods['price'] = 0;
- $goods['preferential'] = 0;
- $goods['totalMoney'] = 0;
- $goods['activityMoney'] = 0;
- $goods['isMutex'] = StatusCode::$delete;
- }
- unset($goods);
-
- $selectParam['customerId'] = $this->customerId;
- $dbResult = $objMPrice->getPrice($selectParam);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), $dbResult->getErrorCode());
- }
- $priceResult = $dbResult->getData();
- unset($dbResult);
- $customerResult = $objMCustomer->getCustomerInfoByUserCenterId($this->onlineUserId);
- $activityArr = [];
- if ($customerResult->isSuccess()) {
- $customer = $customerResult->getData();
-
- $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;
- }
- }
-
- $goodsArr = [];
- foreach ($priceResult as $shopPriceArr) {
- foreach ($shopPriceArr as $goodsId => $goodsSkuArr) {
- $goodsArr[$goodsId] = $goodsSkuArr;
- }
- }
-
- $enableMemberPrice = false;
- $objMVipCard = new MVipCard($this->onlineEnterpriseId, $this->onlineUserId, true);
- $dbResult = $objMVipCard->getAllVipCardByCustomerId($this->customerId);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), ErrorCode::$dberror);
- }
- $vipCard = $dbResult->getData();
- if (!empty($vipCard)){
- foreach ($vipCard as $key => $value){
- if($value['memberSpecialPrice'] == StatusCode::$standard){
- $enableMemberPrice = true;
- }
- }
- }
- foreach ($data as &$goods) {
-
- if (isset($activityArr[$goods['goodsId'] . $goods['skuId']])) {
- $price = $goodsArr[$goods['goodsId']][$goods['skuId']]['salePrice'];
-
- if (isset($goods['activityId']) && !empty($goods['activityId'])) {
- $price = $activityArr[$goods['goodsId'] . $goods['skuId']]['price'];
- $activityDetail = $this->objActivityLimitCache->getActivity($goods['activityId']);
- if (!empty($activityDetail) && $activityDetail['isMutex'] == StatusCode::$standard) {
-
- $goods['activityMoney'] = bcmul($price, $goods['buyNum'], 2);
- $goods['isMutex'] = StatusCode::$standard;
- }
- }
- } else {
- if (isset($goodsArr[$goods['goodsId']][$goods['skuId']])) {
- $priceInfo = $goodsArr[$goods['goodsId']][$goods['skuId']];
- $price = isset($priceInfo['salePrice']) ? $priceInfo['salePrice'] : 0;
-
- $memberPrice = getArrayItem($priceInfo, 'memberPrice', 0);
- if($enableMemberPrice && $memberPrice){
- $price = $memberPrice;
- }else{
-
- if ($priceInfo['enabledLadder']) {
- foreach ($priceInfo['ladderPrice'] as $ladder) {
- $ladder['to'] = empty($ladder['to']) ? 9999 : $ladder['to'];
- if ($goods['buyNum'] >= $ladder['from'] && $goods['buyNum'] <= $ladder['to']) {
- $price = isset($ladder['price']) ? $ladder['price'] : 0;
- continue;
- }
- }
- }
- }
- }
- }
- if (!isset($price)) $price = 0;
- $price = floatval($price);
- $goods['price'] = sprintf("%.2f", $price);
- $goods['originPrice'] = sprintf("%.2f", $price);
- $goods['preferential'] = 0;
- $goods['totalMoney'] = bcmul($price, $goods['buyNum'], 2);
- $goods['vipDiscount'] = 0;
- $goods['setNum'] = isset( $goodsArr[$goods['goodsId']][$goods['skuId']]['setNum'] ) ? $goodsArr[$goods['goodsId']][$goods['skuId']]['setNum'] : 0;
- if (empty($goods['totalMoney'])) {
- return ResultWrapper::fail('计算商品价格时出现异常', ErrorCode::$paramError);
- }
- }
- return ResultWrapper::success($data);
- }
-
- private function formatGroup($data, $userCouponId = null, $vipCardId = null)
- {
- static $checkNum = 0;
- static $totalMoney = 0;
- static $payMoney = 0;
- static $preferential = 0;
- static $cartNum = 0;
- static $goodsNum = 0;
- static $vipDiscount = 0;
- static $vipDoubleDiscount = 0;
- static $activityMoney = 0;
- static $expressMoney = 0;
- $goodsData = [];
- foreach ($data as $key => $val) {
- if (!isset($val['expressMoney'])) {
- $val['expressMoney'] = '0.00';
- }
- $shopGoodsData[$val['shopId']][] = $val;
- if (!isset($goodsData[$val['shopId']]['totalMoney'])) {
- $goodsData[$val['shopId']]['totalMoney'] = '0.00';
- }
- if (!isset($goodsData[$val['shopId']]['preferential'])) {
- $goodsData[$val['shopId']]['preferential'] = '0.00';
- }
- if (!isset($goodsData[$val['shopId']]['expressMoney'])) {
- $goodsData[$val['shopId']]['expressMoney'] = '0.00';
- }
- $goodsData[$val['shopId']] = [
- 'shopId' => $val['shopId'],
- 'shopName' => $val['shopName'],
- 'shopLogo' => $val['shopLogo'],
- 'expressMoney' => isset($this->expressShopMoney[$val['shopId']]) ? $this->expressShopMoney[$val['shopId']] : 0,
- 'totalMoney' => bcadd($goodsData[$val['shopId']]['totalMoney'], $val['totalMoney'], 2),
- 'preferential' => bcadd($goodsData[$val['shopId']]['preferential'], bcmul($val['preferential'], $val['buyNum']), 2),
- 'payMoney' => bcadd((isset($this->expressShopMoney[$val['shopId']]) ? $this->expressShopMoney[$val['shopId']] : 0), bcsub(bcadd($goodsData[$val['shopId']]['totalMoney'], $val['totalMoney']), bcadd($goodsData[$val['shopId']]['preferential'], bcmul($val['preferential'], $val['buyNum'])), 2), 2),
- 'shopGoodsData' => $shopGoodsData[$val['shopId']],
- ];
-
- if ($val['selection'] == StatusCode::$standard) {
- $checkNum = bcadd($checkNum, 1);
- $totalMoney = bcadd($totalMoney, $val['totalMoney'], 2);
- $payMoney = bcadd(0, bcadd($payMoney, bcsub($val['totalMoney'], bcmul($val['buyNum'], $val['preferential'])), 2), 2);
- $preferential = bcadd($preferential, bcmul($val['buyNum'], $val['preferential']), 2);
- $activityMoney = bcadd($activityMoney, $val['activityMoney'], 2);
- }
- $cartNum = bcadd($cartNum, 1);
- $goodsNum = bcadd($goodsNum, $val['buyNum']);
- }
- $result = [
- 'totalMoney' => $totalMoney,
- 'payMoney' => $payMoney,
- 'preferential' => $preferential,
- 'vipDiscount' => $vipDiscount,
- 'vipDoubleDiscount' => $vipDoubleDiscount,
- 'activityMoney' => $activityMoney,
- 'expressMoney' => $this->expressMoney,
- 'checkNum' => (int)$checkNum,
- 'cartNum' => (int)$cartNum,
- 'goodsNum' => (int)$goodsNum,
- 'goodsData' => array_values($goodsData),
- 'invalidData' => array_values($this->invalidData)
- ];
- $objMPreferentialProcess = new MPreferentialProcess($this->onlineUserId, $this->onlineEnterpriseId);
- $result = $objMPreferentialProcess->Preferential($result, $vipCardId, $userCouponId);
- if(!$result->isSuccess()){
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- $result = $result->getData();
- if (
- (!empty($vipCardId) && $vipCardId != 0)
- || (!empty($userCouponId) && $userCouponId != 0)
- ) {
-
- $result = self::calAvg($result);
- }
-
- $result = self::freeExpressPrice($result);
- $result['expressMoney'] != 0 && $result['payMoney'] = bcadd($result['payMoney'], $result['expressMoney'], 2);
- return ResultWrapper::success($result);
- }
-
- private function freeExpressPrice($result)
- {
- $expressMoney = $result['expressMoney'];
- $payMoney = $result['payMoney'];
- $goodsData = $result['goodsData'];
- if ($expressMoney != 0 && $this->freeExpressPrice <= $payMoney && $this->freeExpressPrice != 0) {
- foreach ($goodsData as &$datum) {
- $shopExpressMoney = $datum['expressMoney'];
- $datum['expressMoney'] = '0.00';
- $datum['payMoney'] = bcsub($datum['payMoney'], $shopExpressMoney, 2);
- }
- $expressMoney = '0.00';
- }
- $result['goodsData'] = $goodsData;
- $result['expressMoney'] = $expressMoney;
- return $result;
- }
-
- private function calAvg($data)
- {
- $account = 0;
- foreach ($data['goodsData'] as &$shops) {
- $count = count($shops['shopGoodsData']);
- foreach ($shops['shopGoodsData'] as $key => &$goods) {
-
- if ($goods['isMutex'] == StatusCode::$delete) {
-
- if ($data['preferential'] != 0) {
-
- if ($key + 1 != $count) {
- $goods['preferential'] = bcmul($data['preferential'], bcdiv($goods['totalMoney'], $data['totalMoney'], 2), 2);
- $account = bcadd($account, $goods['preferential'], 2);
- } else {
-
- $goods['preferential'] = bcsub($data['preferential'], $account, 2);
- }
- }
- }
- if ($data['vipDiscount'] != 0) {
-
-
- $vipCardEndDiscountMoney = bcsub($data['totalMoney'],$data['vipDiscount'], 2);
-
- $goodsVipCardEndDiscountMoney = bcdiv(bcmul($goods['totalMoney'],$vipCardEndDiscountMoney,2), $data['totalMoney'],2);
-
- $goods['vipDiscount'] = bcsub($goods['totalMoney'], $goodsVipCardEndDiscountMoney, 2);
- }
- }
- }
- return $data;
- }
-
- public function clearCart()
- {
- $where['userCenterId'] = $this->onlineUserId;
- $dbResult = $this->objDCart->delete($where);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($dbResult);
- }
-
- public function clearCartByGoodsId($params)
- {
- $where['userCenterId'] = $this->onlineUserId;
- $where['goodsId'] = $params['goodsId'];
- $dbResult = $this->objDCart->delete($where);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($dbResult);
- }
-
- public function confirmationOfOrder($userCouponId = '', $vipCardId = '', $addressId = '', $deliveryId = '')
- {
-
- $objMCustomer = new MCustomer($this->onlineEnterpriseId, $this->onlineUserId);
- $result = $objMCustomer->getCustomerData(['userCenterId'=>$this->onlineUserId],'*', true);
- if(!$result->isSuccess()){
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- $customerData = $result->getData();
- if (empty($customerData)) {
- return ResultWrapper::fail('未找到客户信息', ErrorCode::$paramError);
- }
- $customerId = $customerData['id'];
-
- $objMShippingAddress = new MShippingAddress($this->onlineEnterpriseId);
- $selectParams = [
- 'deleteStatus' => StatusCode::$standard,
- 'defaultStatus' => StatusCode::$standard,
- 'customerId' => $customerId
- ];
- $dbResult = $objMShippingAddress->getShippingAddressInfo($selectParams);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), ErrorCode::$dberror);
- }
- $addRessData = $dbResult->getData();
- unset($dbResult);
-
- $objMDeliverySetting = new MDeliverySetting($this->onlineUserId, $this->onlineEnterpriseId);
- $selfExpressRuleResult = $objMDeliverySetting->getAllSelfExpressRule();
- if (!$selfExpressRuleResult->isSuccess()) {
- return ResultWrapper::fail($selfExpressRuleResult->getData(), $selfExpressRuleResult->getErrorCode());
- }
- $selfExpressRule = $selfExpressRuleResult->getData();
-
- $objMEnterpriseBindPayment = new MEnterpriseBindPayment($this->onlineUserId, $this->onlineEnterpriseId);
- $paymentData = $objMEnterpriseBindPayment->getPaymentType();
- if (!$paymentData->isSuccess()) {
- $paymentData = [];
- } else {
- $paymentData = $paymentData->getData();
- }
-
- $objMDeliverySetting = new MDeliverySetting($this->onlineUserId, $this->onlineEnterpriseId);
- $DeliveryData = $objMDeliverySetting->allDelivery();
- if (!$DeliveryData->isSuccess()) {
- $DeliveryData = [];
- } else {
- $DeliveryData = array_values($DeliveryData->getData()['data']);
- }
-
- if (!empty($deliveryId)) {
- $this->onlineUserDefaultDeliveryType = $deliveryId;
- } else {
- if (!empty($DeliveryData)) {
- foreach ($DeliveryData as $value) {
- if ($value['defaultStatus'] == StatusCode::$standard) {
- $this->onlineUserDefaultDeliveryType = $value['deliveryType'];
- break;
- }
- }
- }
- }
-
- if (!empty($addressId)) {
- $addressResult = $objMShippingAddress->getShippingAddressInfo(['id' => $addressId]);
- if (!$addressResult->isSuccess()) {
- return ResultWrapper::fail($addressResult->getData(), ErrorCode::$dberror);
- }
- $addressInfo = $addressResult->getData();
- if (!empty($addressInfo)) {
- $this->onlineUserAddressCode = $addressInfo['provinceCode'] . '-' . $addressInfo['cityCode'] . '-' . $addressInfo['districtCode'];
- }
- } else {
- if (!empty($addRessData)) {
- $this->onlineUserAddressCode = $addRessData['provinceCode'] . '-' . $addRessData['cityCode'] . '-' . $addRessData['districtCode'];
- }
- }
-
- $objMBasicSetup = new MBasicSetup($this->onlineEnterpriseId);
- $freeExpressPriceResult = $objMBasicSetup->getBasicField('freeExpressPrice');
- if (!$freeExpressPriceResult->isSuccess()) {
- return ResultWrapper::fail($freeExpressPriceResult->getData(), $freeExpressPriceResult->getData());
- }
- $freeExpressPrice = $freeExpressPriceResult->getData();
- $this->freeExpressPrice = (isset($freeExpressPrice['freeExpressPrice']) && !empty($freeExpressPrice['freeExpressPrice'])) ? $freeExpressPrice['freeExpressPrice'] : 0;
-
- $dbResult = $this->objDCart->select(['selection' => StatusCode::$standard, 'userCenterId' => $this->onlineUserId], 'id,goodsId,goodsCode,buyNum,shopId,goodsBasicId,selection,skuId,warehouseId,activityId', 'createTime DESC');
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- if (empty($dbResult)) {
- return ResultWrapper::fail('购物车中没有选定的商品', ErrorCode::$paramError);
- }
-
- $goodsIds = array_values(array_column($dbResult, 'goodsId'));
- $cartDataResult = self::formatGoodsAndShop($dbResult, $userCouponId, $vipCardId);
- if (!$cartDataResult->isSuccess()) {
- return ResultWrapper::fail($cartDataResult->getData(), $cartDataResult->getErrorCode());
- }
- $cartData = $cartDataResult->getData();
- if (empty($cartData['goodsData'])) {
- return ResultWrapper::fail('购物车中商品已失效,不能进行结算', ErrorCode::$paramError);
- }
- if (empty($addRessData)) {
- $cartData['address'] = (object)[];
- } else {
- $objMSysAreaChina = new MSysAreaChina();
- $areaName = $objMSysAreaChina->getNameByCode([
- $addRessData['provinceCode'],
- $addRessData['cityCode'],
- $addRessData['districtCode']
- ]);
- $cartData['address'] = [
- 'name' => isset($addRessData['name']) ? $addRessData['name'] : '',
- 'mobile' => isset($addRessData['mobile']) ? $addRessData['mobile'] : '',
- 'address' => isset($addRessData['address']) ? $addRessData['address'] : '',
- 'id' => isset($addRessData['id']) ? $addRessData['id'] : '',
- 'provinceName' => isset($areaName[$addRessData['provinceCode']]) ? $areaName[$addRessData['provinceCode']] : '',
- 'cityName' => isset($areaName[$addRessData['cityCode']]) ? $areaName[$addRessData['cityCode']] : '',
- 'districtName' => isset($areaName[$addRessData['districtCode']]) ? $areaName[$addRessData['districtCode']] : '',
- ];
- }
-
- $userCouponInfo = [];
- if (!empty($userCouponId)) {
- $objMUserCoupon = new MUserCoupon($this->onlineUserId, $this->onlineEnterpriseId);
- $dbResult = $objMUserCoupon->getUserCoupon(['id' => $userCouponId]);
- if ($dbResult->isSuccess()) $userCouponInfo = $dbResult->getData();
- $userCouponInfo = isset($userCouponInfo[0]) ? $userCouponInfo[0] : [];
- }
- $cartData['useCoupon'] = $userCouponInfo;
-
- if(!empty($paymentData)){
- foreach ($paymentData as $key => $value){
- if($value['id'] == StatusCode::$payType['bankLoans'] && $cartData['payMoney'] < $value['limit']){
- unset($paymentData[$key]);
- }
- }
- }
- $cartData['payment'] = array_values($paymentData);
- $cartData['delivery'] = $DeliveryData;
- $cartData['selfExpressRule'] = $selfExpressRule;
-
- $cartData = self::findCoupon($cartData);
-
- $vipCard = self::getVipCard($goodsIds);
- if ($vipCard->isSuccess()) {
- $vipCard = $vipCard->getData();
- } else {
- $vipCard = [];
- }
- $cartData['vipCard'][] = $vipCard;
-
- $cartData['balance'] = $customerData['money'];
-
- $cartData['memberBalance'] = $customerData['memberBalance'];
- return ResultWrapper::success($cartData);
- }
-
- public function getVipCard($goodsIds)
- {
- $objMVipCard = new MVipCard($this->onlineEnterpriseId, $this->onlineUserId, true);
- $pageParams = pageToOffset(1, 10);
- $selectParams['limit'] = $pageParams['limit'];
- $selectParams['offset'] = $pageParams['offset'];
- $dbResult = $objMVipCard->getMyVipCards($selectParams);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), ErrorCode::$dberror);
- }
- $vipCard = $dbResult->getData()['data'];
- if (empty($vipCard)) return ResultWrapper::success([]);
- if (!empty($goodsIds)) {
- foreach ($vipCard as $key => $card) {
- if ($card['mode'] == StatusCode::$delete) {
- $cardGoodsArr = explode(',', $card['goodsIds']);
- foreach ($goodsIds as $goodsId) {
- if (!in_array($goodsId, $cardGoodsArr)) {
- unset($vipCard[$key]);
- }
- }
- }
- }
- }
- $vipCard = empty($vipCard) ? [] : array_shift($vipCard);
- return ResultWrapper::success($vipCard);
- }
-
- private function findCoupon($data)
- {
- $objMUserCoupon = new MUserCoupon($this->onlineUserId, $this->onlineEnterpriseId);
- $objGoodsBasicRelevant = new GoodsBasicRelevant($this->onlineEnterpriseId);
- $payAmount = $data['payMoney'];
- if ($data['activityMoney'] != 0) {
- $payAmount = bcsub($payAmount, $data['activityMoney'], 2);
- }
- $dbResult = $objMUserCoupon->availableCoupon([
- 'payAmount' => $payAmount
- ]);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), ErrorCode::$dberror);
- }
- $coupon = $dbResult->getData();
- foreach ($coupon as $key => $val) {
- $useShop = explode(',', $val['useShop']);
- $applyRange = $val['applyRange'];
- $cart[$val['id']]['money'] = 0;
- foreach ($data['goodsData'] as $shopGoodsData) {
- foreach ($shopGoodsData['shopGoodsData'] as $goodsDetail) {
- $categoryId = $objGoodsBasicRelevant->getNameByBasicId($goodsDetail['goodsBasicId'], 'categoryId');
- $brandId = $objGoodsBasicRelevant->getNameByBasicId($goodsDetail['goodsBasicId'], 'brandId');
- if (in_array($shopGoodsData['shopId'], $useShop) &&
- ($applyRange == StatusCode::$applyRange['allGoods'] ||
- in_array($categoryId, explode(',', $val['categoryCollect'])) ||
- in_array($goodsDetail['goodsId'], explode(',', $val['goodsCollect'])) ||
- in_array($brandId, explode(',', $val['brandCollect'])))
- ) {
- $cart[$val['id']]['money'] = bcadd($cart[$val['id']]['money'], $goodsDetail['totalMoney']);
- }
- }
- }
- if ($val['minPrice'] != 0 && $cart[$val['id']]['money'] < $val['minPrice']) {
- unset($coupon[$key]);
- }
- }
- $data['coupon'] = array_values($coupon);
- return $data;
- }
-
- public function getCartNumByGoodsId($goodsIds)
- {
- $cartData = $this->objDCart->select(['goodsId' => $goodsIds, 'userCenterId' => $this->onlineUserId], 'buyNum,goodsId,skuId');
- if ($cartData === false) {
- return [];
- }
- $return = [];
- foreach ($cartData as $key => $val) {
- $return[$val['goodsId']][$val['skuId']] = $val['buyNum'];
- }
- return $return;
- }
-
- public function updateCartNum($params)
- {
- if ($params['buyNum'] == 0) {
- $dbResult = $this->objDCart->delete([
- 'goodsId' => $params['goodsId'],
- 'skuId' => $params['skuId'],
- 'userCenterId' => $this->onlineUserId
- ]);
- } else {
- $goods = self::getCartInventory([
- 'goodsId' => $params['goodsId'],
- 'skuId' => $params['skuId'],
- 'userCenterId' => $this->onlineUserId
- ]);
- if (!$goods->isSuccess()) {
- return ResultWrapper::fail($goods->getData(), ErrorCode::$dberror);
- }
- $goods = $goods->getData();
- $inventoryNum = isset($goods[0]['inventory']) ? $goods[0]['inventory'] : 0;
- $setNum = isset($goods[0]['setNum']) ? $goods[0]['setNum'] : 0;
- $title = isset($goods[0]['title']) ? $goods[0]['title'] : '';
- if ($inventoryNum < $params['buyNum']) {
- return ResultWrapper::fail('商品库存不足', ErrorCode::$paramError);
- }
- if ($params['buyNum'] < $setNum) {
- return ResultWrapper::fail($title . '最小起订数量' . $setNum, ErrorCode::$paramError);
- }
- $dbResult = $this->objDCart->update(
- [
- 'buyNum' => $params['buyNum']
- ],
- [
- 'goodsId' => $params['goodsId'],
- 'skuId' => $params['skuId'],
- 'userCenterId' => $this->onlineUserId
- ]
- );
- }
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- return ResultWrapper::success($dbResult);
- }
-
- private function getCartInventory($selectParams)
- {
- $dbResult = $this->objDCart->get($selectParams);
- if ($dbResult === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- if (empty($dbResult)) {
- return ResultWrapper::success([]);
- }
- $result = self::checkCart([$dbResult]);
- if (!$result->isSuccess()) {
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- return ResultWrapper::success($result->getData());
- }
-
- public function getCartBuyNumBySku(int $skuId, int $userId): ResultWrapper
- {
- $sql = 'SELECT SUM(`buyNum`) AS subBuyNum FROM qianniao_cart_' . $this->onlineEnterpriseId . ' WHERE skuId = ' . $skuId . ' AND userCenterId = ' . $userId;
- $sum = $this->objDCart->query($sql);
- if ($sum === false) {
- return ResultWrapper::fail($this->objDCart->error(), ErrorCode::$dberror);
- }
- $subBuyNum = isset($sum[0]['subBuyNum']) ? $sum[0]['subBuyNum'] : 0;
- return ResultWrapper::success($subBuyNum);
- }
-
- public function buyNow(array $lists, array $data): ResultWrapper
- {
- switch ($data['sourceType']) {
- case self::$sourceType['comBin']:
- $buyResult = self::buyComBin($lists, $data);
- break;
- }
- if (!$buyResult->isSuccess()) {
- return ResultWrapper::fail($buyResult->getData(), $buyResult->getErrorCode());
- }
- return ResultWrapper::success($buyResult->getData());
- }
-
- public function goodsBuyNow(array $goods, array $data)
- {
-
- $objMCustomer = new MCustomer($this->onlineEnterpriseId, $this->onlineUserId);
- $result = $objMCustomer->getCustomerData(['userCenterId'=>$this->onlineUserId],'*', true);
- if(!$result->isSuccess()){
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- $customerData = $result->getData();
- if (empty($customerData)) {
- return ResultWrapper::fail('未找到客户信息', ErrorCode::$paramError);
- }
- $customerId = $customerData['id'];
-
- $objMShippingAddress = new MShippingAddress($this->onlineEnterpriseId);
- $selectParams = [
- 'deleteStatus' => StatusCode::$standard,
- 'defaultStatus' => StatusCode::$standard,
- 'customerId' => $customerId
- ];
- $dbResult = $objMShippingAddress->getShippingAddressInfo($selectParams);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), ErrorCode::$dberror);
- }
- $addRessData = $dbResult->getData();
- unset($dbResult);
-
- $objMDeliverySetting = new MDeliverySetting($this->onlineUserId, $this->onlineEnterpriseId);
- $selfExpressRuleResult = $objMDeliverySetting->getAllSelfExpressRule();
- if (!$selfExpressRuleResult->isSuccess()) {
- return ResultWrapper::fail($selfExpressRuleResult->getData(), $selfExpressRuleResult->getErrorCode());
- }
- $selfExpressRule = $selfExpressRuleResult->getData();
-
- $objMEnterpriseBindPayment = new MEnterpriseBindPayment($this->onlineUserId, $this->onlineEnterpriseId);
- $paymentData = $objMEnterpriseBindPayment->getPaymentType();
- if (!$paymentData->isSuccess()) {
- $paymentData = [];
- } else {
- $paymentData = $paymentData->getData();
- }
-
- $objMDeliverySetting = new MDeliverySetting($this->onlineUserId, $this->onlineEnterpriseId);
- $DeliveryData = $objMDeliverySetting->allDelivery();
- if (!$DeliveryData->isSuccess()) {
- $DeliveryData = [];
- } else {
- $DeliveryData = array_values($DeliveryData->getData()['data']);
- }
-
- if (!empty($data['deliveryId'])) {
- $this->onlineUserDefaultDeliveryType = $data['deliveryId'];
- } else {
- if (!empty($DeliveryData)) {
- foreach ($DeliveryData as $value) {
- if ($value['defaultStatus'] == StatusCode::$standard) {
- $this->onlineUserDefaultDeliveryType = $value['deliveryType'];
- break;
- }
- }
- }
- }
-
- if (!empty($addressId)) {
- $addressResult = $objMShippingAddress->getShippingAddressInfo(['id' => $data['addressId']]);
- if (!$addressResult->isSuccess()) {
- return ResultWrapper::fail($addressResult->getData(), ErrorCode::$dberror);
- }
- $addressInfo = $addressResult->getData();
- if (!empty($addressInfo)) {
- $this->onlineUserAddressCode = $addressInfo['provinceCode'] . '-' . $addressInfo['cityCode'] . '-' . $addressInfo['districtCode'];
- }
- } else {
- if (!empty($addRessData)) {
- $this->onlineUserAddressCode = $addRessData['provinceCode'] . '-' . $addRessData['cityCode'] . '-' . $addRessData['districtCode'];
- }
- }
-
- $objMBasicSetup = new MBasicSetup($this->onlineEnterpriseId);
- $freeExpressPriceResult = $objMBasicSetup->getBasicField('freeExpressPrice');
- if (!$freeExpressPriceResult->isSuccess()) {
- return ResultWrapper::fail($freeExpressPriceResult->getData(), $freeExpressPriceResult->getData());
- }
- $freeExpressPrice = $freeExpressPriceResult->getData();
- $this->freeExpressPrice = (isset($freeExpressPrice['freeExpressPrice']) && !empty($freeExpressPrice['freeExpressPrice'])) ? $freeExpressPrice['freeExpressPrice'] : 0;
-
- $goodsIds = [$goods['goodsId']];
- $cartDataResult = self::formatGoodsAndShop([$goods], $data['couponId'], $data['vipCardId']);
- if (!$cartDataResult->isSuccess()) {
- return ResultWrapper::fail($cartDataResult->getData(), $cartDataResult->getErrorCode());
- }
- $cartData = $cartDataResult->getData();
- if (empty($cartData['goodsData'])) {
- return ResultWrapper::fail('商品已失效,不能进行结算', ErrorCode::$paramError);
- }
- if (empty($addRessData)) {
- $cartData['address'] = (object)[];
- } else {
- $objMSysAreaChina = new MSysAreaChina();
- $areaName = $objMSysAreaChina->getNameByCode([
- $addRessData['provinceCode'],
- $addRessData['cityCode'],
- $addRessData['districtCode']
- ]);
- $cartData['address'] = [
- 'name' => isset($addRessData['name']) ? $addRessData['name'] : '',
- 'mobile' => isset($addRessData['mobile']) ? $addRessData['mobile'] : '',
- 'address' => isset($addRessData['address']) ? $addRessData['address'] : '',
- 'id' => isset($addRessData['id']) ? $addRessData['id'] : '',
- 'provinceName' => isset($areaName[$addRessData['provinceCode']]) ? $areaName[$addRessData['provinceCode']] : '',
- 'cityName' => isset($areaName[$addRessData['cityCode']]) ? $areaName[$addRessData['cityCode']] : '',
- 'districtName' => isset($areaName[$addRessData['districtCode']]) ? $areaName[$addRessData['districtCode']] : '',
- ];
- }
-
- $userCouponInfo = [];
- if (!empty($data['couponId'])) {
- $objMUserCoupon = new MUserCoupon($this->onlineUserId, $this->onlineEnterpriseId);
- $dbResult = $objMUserCoupon->getUserCoupon(['id' => $data['couponId']]);
- if ($dbResult->isSuccess()) $userCouponInfo = $dbResult->getData();
- $userCouponInfo = isset($userCouponInfo[0]) ? $userCouponInfo[0] : [];
- }
-
- if(!empty($paymentData)){
- foreach ($paymentData as $key => $value){
- if($value['id'] == StatusCode::$payType['bankLoans'] && $cartData['payMoney'] <= $value['limit']){
- unset($paymentData[$key]);
- }
- }
- }
- $cartData['payment'] = array_values($paymentData);
- $cartData['useCoupon'] = $userCouponInfo;
- $cartData['delivery'] = $DeliveryData;
- $cartData['selfExpressRule'] = $selfExpressRule;
-
- $cartData = self::findCoupon($cartData);
-
- $vipCard = self::getVipCard($goodsIds);
- if ($vipCard->isSuccess()) {
- $vipCard = $vipCard->getData();
- } else {
- $vipCard = [];
- }
- $cartData['vipCard'][] = $vipCard;
-
- $cartData['balance'] = $customerData['money'];
-
- $cartData['memberBalance'] = $customerData['memberBalance'];
- return ResultWrapper::success($cartData);
- }
-
- private function buyComBin(array $lists, array $data): ResultWrapper
- {
- $objMCustomer = new MCustomer($this->onlineEnterpriseId,$this->onlineUserId);
- $customerId = $objMCustomer->getCustomerIdByUserCenterId($this->onlineUserId);
-
- if (empty($data['comBinId'])) {
- return ResultWrapper::fail('组合套餐错误', ErrorCode::$paramError);
- }
- $objMComBinPackage = new MComBinPackage($this->onlineEnterpriseId, $this->onlineUserId);
- $detailsResult = $objMComBinPackage->details($data['comBinId']);
- if (!$detailsResult->isSuccess()) {
- return ResultWrapper::fail($detailsResult->getData(), $detailsResult->getErrorCode());
- }
- $details = $detailsResult->getData();
- if (empty($details)) {
- return ResultWrapper::fail('未获取到指定的组合套餐', ErrorCode::$paramError);
- }
- $time = time();
- if ($details['isExpire'] == StatusCode::$standard) {
- if ($time < $details['startTime']) {
- return ResultWrapper::fail('组合套餐活动未开始', ErrorCode::$paramError);
- }
- if ($time > $details['endTime']) {
- return ResultWrapper::fail('组合套餐活动已结束', ErrorCode::$paramError);
- }
- }
- if ($details['isLimit'] == StatusCode::$standard) {
-
- $user_log_num = 0;
- if ($user_log_num >= $details['limitNum']) {
- return ResultWrapper::fail('你已经购买过此组合套餐了', ErrorCode::$paramError);
- }
- }
-
- $allowSkuArr = [];
- $goodsData = $details['goodsData'];
- $mapping = [];
- foreach ($goodsData as $goods) {
- $sku = $goods['joinSku'];
- $allowSkuArr = array_merge($sku, $allowSkuArr);
- $mapping[$goods['id']] = $goods;
- }
-
- $goodsIdArr = explode(',', $details['goodsIds']);
- $selectGoodsIdArr = [];
- foreach ($lists as $val) {
- if (!in_array($val['goodsId'], $selectGoodsIdArr)) {
- $selectGoodsIdArr[] = $val['goodsId'];
- }
- $thisRow = getArrayItem($mapping,$val['goodsId'],[]);
- if (isset($thisRow['joinSku']) && !empty($thisRow['joinSku'])){
- if (!in_array($val['skuId'], $allowSkuArr)) {
- return ResultWrapper::fail('商品规格选择异常', ErrorCode::$paramError);
- }
- }
- }
- $diffBool = array_diff($goodsIdArr, $selectGoodsIdArr);
- if (!empty($diffBool)) {
- return ResultWrapper::fail('你还没选择完组合商品', ErrorCode::$paramError);
- }
- unset($diffBool);
-
- $objMGoods = new MShop($this->onlineEnterpriseId, $this->onlineUserId);
- $shopResult = $objMGoods->getShopByIdd($details['shopId']);
- if (!$shopResult->isSuccess()) {
- return ResultWrapper::fail($shopResult->getData(), $shopResult->getErrorCode());
- }
- $shop = $shopResult->getData();
- $c_goods_Lists = [];
- foreach ($lists as $val) {
- if (!isset($mapping[$val['goodsId']])) {
- return ResultWrapper::fail('商品信息异常', ErrorCode::$paramError);
- }
- $row = getArrayItem($mapping, $val['goodsId'], []);
- $specMultiple = getArrayItem($row, 'specMultiple', []);
- $specMultipleMap = [];
- foreach ($specMultiple as $value) {
- $specMultipleMap[$value['id']] = $value;
- }
- if ($row['enableStatus'] == StatusCode::$delete) {
- return ResultWrapper::fail('组合套餐商品下架了', ErrorCode::$paramError);
- }
- $skuRow = getArrayItem($specMultipleMap, $val['skuId'], []);
- if ($this->preSale == StatusCode::$delete) {
- if ($skuRow['inventory'] < 1) {
- return ResultWrapper::fail('组合套餐库存不足', ErrorCode::$paramError);
- }
- }
- $c_goods_Lists[] = [
- 'goodsId' => getArrayItem($row, 'id', 0),
- 'goodsCode' => createCode(StatusCode::$code['goodsBasic']['prefix'], $row['basicGoodsId'], StatusCode::$code['goodsBasic']['length']),
- 'buyNum' => 1,
- 'shopId' => getArrayItem($row, 'shopId', 0),
- 'shopLogo' => getArrayItem($shop, 'logo', ''),
- 'goodsBasicId' => getArrayItem($row, 'basicGoodsId', 0),
- 'selection' => StatusCode::$standard,
- 'skuId' => $val['skuId'],
- 'warehouseId' => getArrayItem($row, 'warehouseId', 0),
- 'activityId' => 0,
- 'shopName' => getArrayItem($row, 'shopName', ''),
- 'brandName' => getArrayItem($row, 'brandName', ''),
- 'categoryName' => getArrayItem($row, 'categoryName', ''),
- 'barCode' => getArrayItem($skuRow, 'barCode', ''),
- 'storageCode' => getArrayItem($row, 'storageCode', ''),
- 'goodsName' => getArrayItem($row, 'title', ''),
- 'goodsImages' => array_shift($row['images']),
- 'isInvalid' => StatusCode::$standard,
- 'describe' => getArrayItem($row, 'describe', ''),
- 'categoryId' => getArrayItem($row, 'categoryId', 0),
- 'brandId' => getArrayItem($row, 'brandId', 0),
- 'categoryPath' => getArrayItem($row, 'categoryPath', ''),
- 'isActivity' => StatusCode::$delete,
- 'specType' => getArrayItem($row, 'specType', 0),
- 'unitName' => getArrayItem($skuRow, 'unitName', ''),
- 'specGroup' => getArrayItem($skuRow, 'specGroup', []),
- 'notExpress' => StatusCode::$standard,
- 'supplierId' => getArrayItem($row, 'supplierId', 0),
- 'express' => [
- "weight" => getArrayItem($skuRow, 'weight', 0),
- "expressType" => getArrayItem($row, 'expressType', 0),
- "ruleId" => getArrayItem($row, 'ruleId', 0),
- "expressFee" => getArrayItem($row, 'expressFee', 0),
- ],
- 'originPrice' => getArrayItem($skuRow, 'marketPrice', 0),
- 'price' => getArrayItem($skuRow, 'salePrice', 0),
- 'preferential' => 0,
- 'totalMoney' => getArrayItem($skuRow, 'salePrice', 0),
- 'activityMoney' => 0,
- 'isMutex' => StatusCode::$delete,
- 'costPrice' => getArrayItem($skuRow, 'costPrice', 0),
- 'inventoryNum' => getArrayItem($skuRow, 'inventory', 0),
- 'conversion' => getArrayItem($skuRow, 'conversion', 0),
- 'expressMoney' => 0,
- ];
- }
-
- $objMShippingAddress = new MShippingAddress($this->onlineEnterpriseId);
- $selectParams = [
- 'deleteStatus' => StatusCode::$standard,
- 'defaultStatus' => StatusCode::$standard,
- 'customerId' => $customerId
- ];
- $dbResult = $objMShippingAddress->getShippingAddressInfo($selectParams);
- if (!$dbResult->isSuccess()) {
- return ResultWrapper::fail($dbResult->getData(), ErrorCode::$dberror);
- }
- $addRessData = $dbResult->getData();
- unset($dbResult);
-
- $objMDeliverySetting = new MDeliverySetting($this->onlineUserId, $this->onlineEnterpriseId);
- $selfExpressRuleResult = $objMDeliverySetting->getAllSelfExpressRule();
- if (!$selfExpressRuleResult->isSuccess()) {
- return ResultWrapper::fail($selfExpressRuleResult->getData(), $selfExpressRuleResult->getErrorCode());
- }
- $selfExpressRule = $selfExpressRuleResult->getData();
-
- $objMEnterpriseBindPayment = new MEnterpriseBindPayment($this->onlineUserId, $this->onlineEnterpriseId);
- $paymentData = $objMEnterpriseBindPayment->getPaymentType();
- if (!$paymentData->isSuccess()) {
- return ResultWrapper::fail($paymentData->getData(),$paymentData->getErrorCode());
- }
- $paymentData = $paymentData->getData();
-
- $objMDeliverySetting = new MDeliverySetting($this->onlineUserId, $this->onlineEnterpriseId);
- $DeliveryData = $objMDeliverySetting->allDelivery();
- if (!$DeliveryData->isSuccess()) {
- return ResultWrapper::fail($DeliveryData->getData(),$DeliveryData->getErrorCode());
- }
- $DeliveryData = array_values($DeliveryData->getData()['data']);
- $deliveryId = getArrayItem($data,'deliveryId',0);
-
- if (!empty($deliveryId)) {
- $this->onlineUserDefaultDeliveryType = $deliveryId;
- } else {
- if (!empty($DeliveryData)) {
- foreach ($DeliveryData as $value) {
- if ($value['defaultStatus'] == StatusCode::$standard) {
- $this->onlineUserDefaultDeliveryType = $value['deliveryType'];
- break;
- }
- }
- }
- }
-
- $addressId = getArrayItem($data,'addressId',0);
- if (!empty($addressId)) {
- $addressResult = $objMShippingAddress->getShippingAddressInfo(['id' => $addressId]);
- if (!$addressResult->isSuccess()) {
- return ResultWrapper::fail($addressResult->getData(), ErrorCode::$dberror);
- }
- $addressInfo = $addressResult->getData();
- if (!empty($addressInfo)) {
- $this->onlineUserAddressCode = $addressInfo['provinceCode'] . '-' . $addressInfo['cityCode'] . '-' . $addressInfo['districtCode'];
- }
- } else {
- if (!empty($addRessData)) {
- $this->onlineUserAddressCode = $addRessData['provinceCode'] . '-' . $addRessData['cityCode'] . '-' . $addRessData['districtCode'];
- }
- }
- if (empty($addRessData)) {
- $address = (object)[];
- } else {
- $objMSysAreaChina = new MSysAreaChina();
- $areaName = $objMSysAreaChina->getNameByCode([
- $addRessData['provinceCode'],
- $addRessData['cityCode'],
- $addRessData['districtCode']
- ]);
- $address = [
- 'name' => isset($addRessData['name']) ? $addRessData['name'] : '',
- 'mobile' => isset($addRessData['mobile']) ? $addRessData['mobile'] : '',
- 'address' => isset($addRessData['address']) ? $addRessData['address'] : '',
- 'id' => isset($addRessData['id']) ? $addRessData['id'] : '',
- 'provinceName' => isset($areaName[$addRessData['provinceCode']]) ? $areaName[$addRessData['provinceCode']] : '',
- 'cityName' => isset($areaName[$addRessData['cityCode']]) ? $areaName[$addRessData['cityCode']] : '',
- 'districtName' => isset($areaName[$addRessData['districtCode']]) ? $areaName[$addRessData['districtCode']] : '',
- ];
- }
-
- $objMBasicSetup = new MBasicSetup($this->onlineEnterpriseId);
- $freeExpressPriceResult = $objMBasicSetup->getBasicField('freeExpressPrice');
- if (!$freeExpressPriceResult->isSuccess()) {
- return ResultWrapper::fail($freeExpressPriceResult->getData(), $freeExpressPriceResult->getData());
- }
- $freeExpressPrice = $freeExpressPriceResult->getData();
- $this->freeExpressPrice = (isset($freeExpressPrice['freeExpressPrice']) && !empty($freeExpressPrice['freeExpressPrice'])) ? $freeExpressPrice['freeExpressPrice'] : 0;
-
- if ($details['expressType'] = StatusCode::$delete){
-
- $result = self::calExpress($c_goods_Lists);
- if (!$result->isSuccess()) {
- return ResultWrapper::fail($result->getData(), $result->getErrorCode());
- }
- }
- $c_shop = [
- 'shopId' => getArrayItem($shop, 'id', 0),
- 'shopName' => getArrayItem($shop, 'name', ''),
- 'shopLogo' => getArrayItem($shop, 'logo', ''),
- 'expressMoney' => $this->expressMoney,
- 'totalMoney' => floatval($details['price']),
- 'preferential' => 0,
- 'payMoney' => bcadd(floatval($details['price']),$this->expressMoney,2),
- 'shopGoodsData' => $c_goods_Lists
- ];
- $ret = [
- 'goodsData' => [$c_shop],
- 'totalMoney' => floatval($details['price']),
- 'payMoney' => bcadd(floatval($details['price']),$this->expressMoney,2),
- 'preferential' => 0,
- 'vipDiscount' => 0,
- 'vipDoubleDiscount' => 0,
- 'activityMoney' => 0,
- 'expressMoney' => $this->expressMoney,
- 'checkNum' => 0,
- 'cartNum' => 0,
- 'goodsNum' => 0,
- 'invalidData' => [],
- 'address' => $address,
- 'useCoupon' => [],
- 'payment' => $paymentData,
- 'delivery' => $DeliveryData,
- 'selfExpressRule' => $selfExpressRule,
- 'coupon' => [],
- 'vipCard' => [],
- 'comBinId' => $data['comBinId']
- ];
- return ResultWrapper::success($ret);
- }
- }
|