/** * 属性值保存 * * @param int $relid 活动产品ID * @param int $uid 用户ID * @param int $attrid 属性ID * @param int $attrval 属性值 * @param str $actiConfig 活动配置 * @param int $isCompleted 是否完成 * * @return boolean */ public function save($relid, $uid, $attrid, $attrval, $actiConfig = false, $isCompleted = ActivityProductAttrVal::STATUS_UNFINISHED) { $mActiProd = new ActivityProduct(); $dActiProd = []; if (!($dActiProd = $mActiProd->getByPkAndUid($relid, $uid))) { return FALSE; } $mAttrBase = new ActivityAttrBase(); $attr = $mAttrBase->pk($attrid); if (!$attr) { return FALSE; } $dataType = $attr['data_type']; $type = $attr['type']; $data = ['rel_id' => $dActiProd['id'], 'acti_id' => $dActiProd['acti_id'], 'product_id' => $dActiProd['product_id'], 'attr_id' => $attrid]; if ($type == ActivityAttrBase::DATA_TYPE_MODEL) { $data['attr_val'] = $attrval; $data['finish_status'] = $isCompleted; //ActivityProductAttrVal::STATUS_FINISHED; // $data['finish_status'] = ActivityProductAttrVal::STATUS_FINISHED; } else { //if ($attr['type'] != 'cumbie') { //$attrval = $attrval['price']; //} $attrval = $this->parse(['ap_id' => $dActiProd['id'], 'type' => $attr['type'], 'data_type' => $attr['data_type'], 'attr_customid' => $attr['custom_id'], 'attr_val' => $attrval], self::PARSE_MODE_INPUT); if ($attrval === FALSE) { return $attrval; } $data['attr_val'] = $attrval; //$data['finish_status'] = $data['attr_val'] ? // ActivityProductAttrVal::STATUS_FINISHED : ActivityProductAttrVal::STATUS_UNFINISHED; $data['finish_status'] = $isCompleted; //ActivityProductAttrVal::STATUS_FINISHED; } $mAttrVal = new ActivityProductAttrVal(); // 保存后 if ($mAttrVal->store($data)) { if (!$actiConfig) { return TRUE; } $customid = $attr['custom_id']; if (isset($actiConfig['rel_attrs']) && isset($actiConfig['rel_attrs'][$customid]) && isset($actiConfig['rel_attrs'][$customid]['custom_id'])) { $itemConfig = $actiConfig['rel_attrs'][$customid]; $attr = $mAttrBase->getByCustomID($itemConfig['custom_id']); if (isset($itemConfig['is_use_baseval']) && isset($itemConfig['op_type'])) { // XXX: 1. 考虑调整类常量 2. 提供统一处理方法 // TODO: 能够根据数据类型自动选择操作 switch ($itemConfig['op_type']) { case 'incr': $attrval = $attrval + $itemConfig['val']; break; default: } } $data['attr_id'] = $attr['id']; $data['attr_val'] = $attrval; unset($mAttrVal['id']); $mAttrVal->isNewRecord = TRUE; // TODO: 需要进行代码"解耦" $attrval = $this->parse(['ap_id' => $dActiProd['id'], 'type' => $attr['type'], 'data_type' => $attr['data_type'], 'attr_customid' => $attr['custom_id'], 'attr_val' => $attrval], self::PARSE_MODE_INPUT); return $mAttrVal->store($data); } else { return TRUE; } } else { return FALSE; } }