/** * Event: * -> emit updateProductEvent * -> paramHandler * -> updateHandler * -> logHandler * -> imgHandler * -> desimgHandler * * GenParamPool, UpdateService, MetaService,ImgService, DesImgService * * @Route("/edit/{id}/v2/update", requirements={"id" = "\d+"}, name="goods_update_v2", options={"expose"=true}) * @ParamConverter("goods", class="WoojinGoodsBundle:GoodsPassport") * @Template() * @Method("POST") */ public function updateV2Action(Request $request, GoodsPassport $goods) { $em = $this->getDoctrine()->getManager(); $em->getConnection()->beginTransaction(); try { /** * 商品成本 * * @var integer */ $cost = (int) $request->request->get('goods_cost', $goods->getCost()); /** * 商品售價 * * @var integer */ $price = (int) $request->request->get('goods_price', $goods->getPrice()); $isPriceDiff = (int) $cost !== (int) $goods->getCost() || (int) $price !== (int) $goods->getPrice(); /** * 目前登入的使用者實體 * * @var \Woojin\UserBundle\Entity\User */ $user = $this->get('security.token_storage')->getToken()->getUser(); if ($isPriceDiff) { $clue = new AvenueClue(); $clue->setUser($user); $sculp = $this->get('sculper.clue'); $sculp->initProductModify()->setBefore($goods); } /** * 目前使用者的所屬店家 * * @var \Woojin\UserBundle\Entity\Store */ $store = $user->getStore(); /** * 貨幣符號 * * @var string */ $sym = $this->get('base_method')->getSymbol(); /** * 產編換算使用位數 * * @var integer */ $minDigit = $sym == 'NT' ? self::SN_RATE : 10; /** * 商品id * * @var integer */ $id = $goods->getId(); /** * 產編是否會有更動 * * @var boolean */ $isSnDiff = $goods->getCost() !== $cost || $goods->getPrice() !== $price; /** * 網路售價 * * @var integer */ $webPrice = $request->request->get('web_price', $goods->getWebPrice()); //$webPrice = ($webPrice > $price) ? $price : $webPrice; //echo $webPrice; exit(); /** * 型號 * * @var string */ $model = $request->request->get('model', $goods->getModel()); /** * 品名 * * @var string */ $name = $request->request->get('goods_name', $goods->getName()); /** * 品牌序號 * * @var string */ $colorSn = $request->request->get('color_sn', $goods->getColorSn()); /** * 自定義品牌內碼 * * @var string */ $customSn = $request->request->get('custom_sn', $goods->getCustomSn()); /** * 品牌序號 * * @var string */ $orgSn = $request->request->get('org_sn', $goods->getOrgSn()); /** * 商品備註 * * @var string */ $memo = $request->request->get('goods_memo', $goods->getMemo()); /** * 進貨時間 * * @var datetime */ $createAt = is_null($goods->getCreatedAt()) ? null : $goods->getCreatedAt()->format('Y-m-d'); /** * 商品新舊實體 * * @var \Woojin\GoodsBundle\Entity\GoodsLevel */ $level = $em->find('WoojinGoodsBundle:GoodsLevel', $request->request->get('level')); /** * 商品材質實體 * * @var \Woojin\GoodsBundle\Entity\GoodsMT */ $mt = $em->find('WoojinGoodsBundle:GoodsMT', $request->request->get('mt')); /** * 商品來源實體 * * @var \Woojin\GoodsBundle\Entity\GoodsSource */ if ($goods->getSource()) { $source = $em->find('WoojinGoodsBundle:GoodsSource', $request->request->get('source', $goods->getSource()->getId())); } else { if (!$request->request->get('source')) { $source = null; } } /** * 顏色實體 * * @var \Woojin\GoodsBundle\Entity\Color */ $color = $em->find('WoojinGoodsBundle:Color', $request->request->get('color')); /** * 款式實體 * * @var \Woojin\GoodsBundle\Entity\Pattern */ $pattern = $em->find('WoojinGoodsBundle:Pattern', $request->request->get('pattern')); /** * 品牌實體 * * @var \Woojin\GoodsBundle\Entity\Brand */ $brand = $em->find('WoojinGoodsBundle:Brand', $request->request->get('brand')); /** * 圖片實體 * * @var \Woojin\GoodsBundle\Entity\Img */ $img = $goods->getImg(); /** * 副圖實體 * * @var \Woojin\GoodsBundle\Entity\Img */ $desimg = $goods->getDesimg(); /** * 是否允許官網上架 * * @var boolean */ $isAllowWeb = $request->request->get('isAllowWeb', null) == 1 ? true : false; /** * 是否允許刷卡付費 * * @var boolean */ $isAllowCreditCard = $request->request->get('isAllowCreditCard', null) == 1 ? true : false; /** * 是否允許競拍 * * @var boolean */ $isAllowAuction = $request->request->get('isAllowAuction', null) == 1 ? true : false; /** * 是否為Alan進貨 * * @var boolean */ $isAlanIn = $request->request->get('isAlanIn', null) == 1 ? true : false; /** * 上傳的圖片檔案 * * @var \Symfony\Component\HttpFoundation\File\UploadedFile */ $files = $request->files->get('img'); /** * 上傳的副圖片檔案 * * @var \Symfony\Component\HttpFoundation\File\UploadedFile */ $desFiles = $request->files->get('desimg'); /** * 商品描述 * @var [text/html] */ $_description = $request->request->get('description', '<p>待補</p>'); if (!($description = $goods->getDescription())) { $description = new Description($_description); $goods->setDescription($description); } $description->setContent($_description); $em->persist($description); /** * 賣點 * @var [string] */ $_brief = trim($request->request->get('brief', '<p>待補</p>')); if (!($brief = $goods->getBrief())) { $brief = new Brief($_brief); $goods->setBrief($brief); } $brief->setContent($_brief); $em->persist($brief); /** * POST 過來的category ids * * @var [array] */ $postCategoryIds = $request->request->get('category', array()); $goodsCategorys = $goods->getCategorys(); $postCategorys = array(); foreach ($goodsCategorys as $category) { if (!in_array($category->getId(), $postCategoryIds)) { $goods->removeCategory($category); } } if (!empty($postCategoryIds)) { $qb = $em->createQueryBuilder(); $postCategorys = $qb->select('c')->from('WoojinGoodsBundle:Category', 'c')->where($qb->expr()->in('c.id', $postCategoryIds))->getQuery()->getResult(); } foreach ($postCategorys as $category) { if (!$goods->hasCategory($category)) { $goods->addCategory($category); } } $isDiffMoney = false; if ($price != $goods->getPrice() || $cost != $goods->getCost()) { $isDiffMoney = true; } // 更改商品屬性 $goods->setSeoSlogan($em->find('WoojinGoodsBundle:SeoSlogan', $request->request->get('seoSlogan_id')))->setSeoSlogan2($em->find('WoojinGoodsBundle:SeoSlogan', $request->request->get('seoSlogan2_id')))->setSeoWord($request->request->get('seoWord'))->setColor($color)->setPattern($pattern)->setColorSn($colorSn)->setCustomSn($customSn)->setModel($model)->setBrand($brand)->setLevel($level)->setSource($source)->setName($name)->setOrgSn($orgSn)->setCost($cost)->setPrice($price)->setMt($mt)->setCreatedAt(new \DateTime($createAt))->setMemo($memo)->setIsAllowWeb($isAllowWeb)->setIsAllowCreditCard($isAllowCreditCard)->setWebPrice($webPrice); if (in_array($goods->getStatus()->getId(), array(constant('Woojin\\Utility\\Avenue\\Avenue::GS_ONSALE'), constant('Woojin\\Utility\\Avenue\\Avenue::GS_ACTIVITY')))) { $goods->setIsAllowAuction($isAllowAuction)->setIsAlanIn($isAlanIn)->setBsoCustomPercentage($request->request->get('bso_custom_percentage', Auction::DEFAULT_CUSTOM_PERCENTAGE)); } /** * 商品產編 * * @var string */ $sn = $goods->genSn(substr($goods->getSn(), 0, 1)); if ($isDiffMoney) { $goods->setSn($sn); } /** * 商品變更記錄儲存 * * @var [object] */ $metaRecorder = $this->get('my_meta_record_method'); $metaRecorder->recordMeta($this->createGoodsUpdateMsg($goods, $sn, $cost, $price, $model, $createAt)); $rootDir = $request->server->get('DOCUMENT_ROOT'); $sepDir = $goods->getImgRelDir($user); $comDir = $rootDir . $sepDir; //--- 圖片路徑更動 ---// if (!is_dir($comDir)) { mkdir($comDir, 0777, true); } //--- 新的圖片蓋掉舊的圖片 ---// // 如果有上傳主圖 if (is_object($files)) { /** * 根據上傳檔案取得圖片名稱 * * @var string */ $fileName = $goods->getImgName($files); /** * 存放的圖片路徑 * * @var string */ $srcPath = $sepDir . '/' . $fileName; /** * 如果原本沒有圖片,新增一個圖片實體 */ if (!$img) { $goods->setImg($img = new Img()); $inherits = $goods->getInherits(); foreach ($inherits as $inherit) { $inherit->setImg($img); $em->persist($inherit); } if ($files->move($comDir, $fileName)) { $img->setPath($srcPath); $em->persist($img); } } else { if (file_exists($request->server->get('DOCUMENT_ROOT') . $img->getPath())) { unlink($request->server->get('DOCUMENT_ROOT') . $img->getPath()); $files->move($request->server->get('DOCUMENT_ROOT') . $img->getPurePath(), $img->getName()); } else { if ($files->move($comDir, $fileName)) { $img->setPath($srcPath); $em->persist($img); } } } $imgFactory = $this->get('factory.img'); $imgFactory->createRemoveBorder($img); } if (is_object($desFiles)) { $fileName = $goods->getImgName($desFiles, 'des'); $srcPath = $sepDir . '/' . $fileName; if (!$desimg) { $goods->setDesimg($desimg = new Desimg()); $inherits = $goods->getInherits(); foreach ($inherits as $inherit) { $inherit->setDesimg($desimg); $em->persist($inherit); } if ($desFiles->move($comDir, $fileName)) { $desimg->setPath($srcPath); $em->persist($desimg); } } else { if (file_exists($request->server->get('DOCUMENT_ROOT') . $desimg->getPath())) { unlink($request->server->get('DOCUMENT_ROOT') . $desimg->getPath()); $desFiles->move($request->server->get('DOCUMENT_ROOT') . $desimg->getPurePath(), $desimg->getName()); } else { if ($desFiles->move($comDir, $fileName)) { $desimg->setPath($srcPath); $em->persist($desimg); } } } } //--- End 新的圖片蓋掉舊的圖片 ---// if ($isPriceDiff) { $sculp->setAfter($goods); $clue->setContent($sculp->getContent()); $em->persist($clue); } $em->persist($goods); $em->flush(); $em->getConnection()->commit(); } catch (Exception $e) { $em->getConnection()->rollback(); throw $e; } // 若產編有更動,同步更新yahoo商城資訊 if ($isSnDiff && $goods->getYahooId()) { $apiClient = $this->get('yahoo.api.client'); $apiClient->updateMain($apiClient->getProvider()->genR($goods)->getR($goods)); } $this->get('passport.syncer')->sync($goods); return $this->redirect($this->generateUrl('goods_edit_v2', array('id' => $id))); }