onlineUserId = $onlineUserId; $this->onlineEnterpriseId = $onlineEnterpriseId; $this->objDSpec = new DSpec('default'); $this->objDSpec->setTable($this->objDSpec->get_Table() . '_' . $onlineEnterpriseId); $this->objSpecCache = new SpecCache($this->onlineEnterpriseId); } /** * 获取所有规格 * @param $selectParams * @return ResultWrapper */ public function getAll($selectParams) { $limit = $selectParams['limit']; unset($selectParams['limit']); $offset = $selectParams['offset']; unset($selectParams['offset']); $selectParams['deleteStatus'] = StatusCode::$standard; $selectParams['pid'] = 0;//属性名 //$selectParams['hidden'] = StatusCode::$standard;//正常显示的 $dbResult = $this->objDSpec->select($selectParams, 'id,specName', 'createTime DESC', $limit, $offset); if ($dbResult === false) return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); $total = $this->objDSpec->count($selectParams); $formatRes = self::formatChild($dbResult); if (!$formatRes->isSuccess()) { return ResultWrapper::fail($formatRes->getData(), $formatRes->getErrorCode()); } $return = [ 'data' => $formatRes->getData(), 'total' => ($total) ? intval($total) : 0, ]; return ResultWrapper::success($return); } /** * 格式化规格属性值 * @param $data * @return ResultWrapper */ public function formatChild($data) { if (empty($data)) return ResultWrapper::success($data); $dbResult = $this->objDSpec->select( ['pid' => array_column($data, 'id'), 'deleteStatus' => StatusCode::$standard], 'id,specName,pid', 'createTime DESC' ); if ($dbResult === false) { return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); } $mapping = []; foreach ($dbResult as $value) { $value['type'] = StatusCode::$delete;//属性值 $mapping[$value['pid']][] = $value; } foreach ($data as &$spec) { $spec['type'] = StatusCode::$standard;//属性名 $spec['child'] = isset($mapping[$spec['id']]) ? $mapping[$spec['id']] : []; } return ResultWrapper::success($data); } /** * 添加规格 * @param $data * @return ResultWrapper */ public function add($data) { /**$cache = $this->objSpecCache->getIdBySpecName($data['specName']); * if ($cache > 0) { * return ResultWrapper::fail('名称已存在', ErrorCode::$paramError); * }**/ // 查询新增的属性是否已经存在 $dbResult = $this->objDSpec->get([ 'specName' => $data['specName'], 'pid' => $data['pid'], 'deleteStatus' => StatusCode::$standard, ]); if ($dbResult === false) { return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); } if (!empty($dbResult)){ return ResultWrapper::fail('名称已存在',ErrorCode::$dberror); } $dbResult = $this->objDSpec->insert([ 'specName' => $data['specName'], 'pid' => $data['pid'] ]); if ($dbResult === false) { return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); } //写缓存 $cacheResult = $this->objSpecCache->cacheSpecNameRelId($data['specName'], $dbResult); if ($cacheResult === false) { return ResultWrapper::fail('属性写入redis失败', ErrorCode::$redisWriteError); } return ResultWrapper::success($dbResult); } /** * 编辑 * @param $data * @return ResultWrapper */ public function edit($data) { $dbResult = $this->objDSpec->update(['specName' => $data['specName'], 'updateTime' => time()], ['id' => $data['id']]); if ($dbResult === false) { return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); } //改缓存 $this->objSpecCache->delSpecNameRelId($data['id']); $this->objSpecCache->cacheSpecNameRelId($data['specName'], $data['id']); return ResultWrapper::success($dbResult); } /** * 删除 * @param $id * @return ResultWrapper */ public function del($id) { $pid = $this->objDSpec->get_field('pid', ['id' => $id]); if ($pid === false) { return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); } if ($pid == 0) { //是属性名 $count = $this->objDSpec->count(['pid' => $id, 'deleteStatus' => StatusCode::$standard]); if ($count > 0) { return ResultWrapper::fail('请先删除属性值', ErrorCode::$paramError); } } $dbResult = $this->objDSpec->update(['deleteStatus' => StatusCode::$delete], $id); if ($dbResult === false) return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); $this->objSpecCache->delSpecNameRelId($id); return ResultWrapper::success($dbResult); } /** * 详情 * @param $id * @return ResultWrapper */ public function info($id) { $dbResult = $this->objDSpec->get_by('id', $id, 'id,specName,pid'); if ($dbResult === false) return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); return ResultWrapper::success($dbResult); } /** * 获取属性名 * @param $selectParams * @return ResultWrapper */ public function getAllSpecName($selectParams) { $limit = $selectParams['limit']; unset($selectParams['limit']); $offset = $selectParams['offset']; unset($selectParams['offset']); $where = [ 'pid' => 0, 'hidden' => StatusCode::$standard,//正常的 ]; $dbResult = $this->objDSpec->select( $where, 'id,specName', 'createTime DESC', $limit, $offset); if ($dbResult === false) return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); $total = $this->objDSpec->count($where); $return = [ 'data' => $dbResult, 'total' => ($total) ? intval($total) : 0, ]; return ResultWrapper::success($return); } /* * pid => specValue * @param $selectParams * @return ResultWrapper */ public function getAllSpecValByPid($selectParams) { $limit = $selectParams['limit']; unset($selectParams['limit']); $offset = $selectParams['offset']; unset($selectParams['offset']); $selectParams['hidden'] = StatusCode::$standard; $dbResult = $this->objDSpec->select($selectParams, 'id,specName', 'createTime DESC', $limit, $offset); if ($dbResult === false) return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); $total = $this->objDSpec->count($selectParams); $return = [ 'data' => $dbResult, 'total' => ($total) ? intval($total) : 0, ]; return ResultWrapper::success($return); } /** * 添加自定义属性 * @param $data * @return ResultWrapper */ public function defineSpec($data) { $dbResult = $this->objDSpec->get(['pid' => $data['pid'], 'specName' => $data['specName']]); if ($dbResult === false) { return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); } if (!empty($dbResult)) { //数据库中存在 return ResultWrapper::success([ 'specName' => $dbResult['specName'], 'id' => (string)$dbResult['id'], 'isHave' => true ]); } $id = $this->objDSpec->insert([ 'specName' => $data['specName'], 'pid' => $data['pid'], 'hidden' => $data['hidden'] ]); if ($id === false) { return ResultWrapper::fail($this->objDSpec->error(), ErrorCode::$dberror); } $this->objSpecCache->cacheSpecNameRelId($data['specName'], $id); return ResultWrapper::success(['specName' => $data['specName'], 'id' => $id,'isHave'=>false]); } }