model('order_labels'); $label_id = $data['label_id']; if ($label_id) { $labelInfo = $labelObj->dump(array('label_id' => $label_id), '*'); if ($labelInfo) { $data['label_id'] = $labelInfo['label_id']; unset($data['create_time']); } else { unset($data['label_id']); } } //check if (empty($data['label_code']) || empty($data['label_name']) || empty($data['label_color'])) { $error_msg = '标签代码、标签名称、标签颜色为必填写项'; return false; } if (strlen($data['label_code']) < 3) { $error_msg = '标签代码至少三个字符'; return false; } if (strlen($data['label_name']) < 3) { $error_msg = '标签名称至少三个字符'; return false; } $reg_code = "/^[a-zA-Z0-9_]*$/"; if (!preg_match($reg_code, $data['label_code'])) { $error_msg = '标签代码只能为英文字母或数字'; return false; } $reg_code = "/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/"; if (!preg_match($reg_code, $data['label_color'])) { $error_msg = '标签颜色值填写错误'; return false; } //label_code $filter = array('label_code' => $data['label_code']); if ($data['label_id']) { $filter['label_id|noequal'] = $data['label_id']; } $checkInfo = $labelObj->getList('label_id', $filter); if ($checkInfo) { $error_msg = '标签代码已经存在'; return false; } //label_name $filter = array('label_name' => $data['label_name']); if ($data['label_id']) { $filter['label_id|noequal'] = $data['label_id']; } $checkInfo = $labelObj->dump($filter, 'label_id'); if ($checkInfo) { $error_msg = '标签名称已经存在'; return false; } return true; } /** * 订单打标签 * * @param int $order_id * @param string $error_msg * @return boolean */ public function makeOrderLabel($order_id, &$error_msg = null) { $orderObj = app::get('ome')->model('orders'); $ruleObj = app::get('omeauto')->model('order_labelrule'); $ordLabelObj = app::get('ome')->model('bill_label'); $operLogObj = app::get('ome')->model('operation_log'); //订单标记规则(最多读取50条有效规则) $ruleList = $ruleObj->getList('*', array('disabled' => 'false'), 0, 50); if (empty($ruleList)) { //没有配置标记规则,直接返回true,不用记录log日志 $error_msg = '没有配置订单标记规则'; return true; } //检查已经打标,则跳过 /* $isCheck = $ordLabelObj->dump(array('bill_type' => 'order', 'bill_id' => $order_id), 'bill_id'); if ($isCheck) { $error_msg = '订单已经打过标签'; return true; } */ //订单信息 $orderInfo = $orderObj->dump(array('order_id'=>$order_id), '*', array('order_objects'=>array('*', array('order_items'=>array('*'))))); if (empty($orderInfo)) { $error_msg = '订单不存在'; return true; } //补发订单 if ($orderInfo['order_type'] == 'bufa') { $error_msg = '补发订单不需要打标签'; return true; } //操作人 $opinfo = kernel::single('ome_func')->get_system(); //订单标记规则 $succList = array(); $failList = array(); $succ_i = 0; $fail_i = 0; foreach ($ruleList as $key => $val) { if (empty($val['config']) || empty($val['select_label'])) { continue; } //标签 $labelList = json_decode($val['select_label'], true); if (empty($labelList)) { continue; } //验证归类规则 $isExec = false; $isFailed = false; $configList = $val['config']; foreach ($configList as $roleKey => $roleItem) { $role = json_decode($roleItem, true); if (empty($role['role']) || empty($role['content'])) { continue; } //执行验证标识 $isExec = true; //验证规则 $className = sprintf('omeauto_order_label_%s', $role['role']); $filter = new $className(); $filter->setRole($role['content']); $isVaild = $filter->vaild($orderInfo, $error_msg); if (!$isVaild) { //验证失败打标记 $isFailed = true; //跳出 break; } } //check if(!$isExec){ //没有配置有效的归类规则,则跳过 continue; } //只要有一个[归类规则]验证失败,则未通过 if($isFailed){ $fail_i++; $failList[] = sprintf('%s、标记规则:%s(%s),错误信息:%s', $fail_i, $val['name'], $val['id'], $error_msg); //不满足打标记,则跳过 continue; } //打标记 $lableNames = array(); foreach ($labelList as $laKey => $laVal) { $label_id = $laVal['label_id']; //label_name $lableNames[] = $laVal['label_name']; //check $isCheck = $ordLabelObj->dump(array('bill_type' => 'order', 'bill_id' => $order_id, 'label_id' => $label_id), 'bill_id'); if ($isCheck) { continue; //标记已存在,则跳过 } $saveData = array( 'bill_type' => 'order', 'bill_id' => $order_id, 'label_id' => $label_id, 'label_name' => $laVal['label_name'], 'create_time' => time(), ); $ordLabelObj->insert($saveData); } //succ $succ_i++; $succList[] = sprintf('%s、标记规则:%s(%s),打标记:%s', $succ_i, $val['name'], $val['id'], implode('、', $lableNames)); } //[logs]所有日志信息统一记录 if($failList || $succList){ $logMsg = ''; //succ if($succList){ $logMsg .= '验证通过的规则:
'; $logMsg .= implode('
', $succList); $logMsg .= '
'; } //fail if($failList){ $logMsg .= '检验失败的规则:
'; $logMsg .= implode('
', $failList); } $operLogObj->write_log('order_preprocess@ome', $order_id, $logMsg, time(), $opinfo); } //unset unset($ruleList, $orderInfo, $failList, $succList); return true; } /** * 删除订单赠品打标记 * @param $order_id * @param $error_msg * @return bool * ============已废弃,改用 markBillLabel 方法============ */ public function deleteOrderGiftLable($order_id, &$error_msg = null) { $labelObj = app::get('omeauto')->model('order_labels'); $ordLabelObj = app::get('ome')->model('bill_label'); //check if (empty($order_id)) { $error_msg = '无效的请求打标记数据!'; return false; } //标记信息 $label_code = 'deleteordergift'; $labelInfo = $labelObj->dump(array('label_code' => $label_code), '*'); if (empty($labelInfo)) { //自动添加标记 $labelInfo = array( 'label_code' => $label_code, 'label_name' => '退款删赠品失败', 'label_color' => '#ff0000', 'source' => 'system', 'create_time' => time(), 'last_modified' => time(), ); $labelObj->insert($labelInfo); } //check if (empty($labelInfo['label_id'])) { $error_msg = '删除订单赠品标签不存在'; return false; } //检查已经打标,则跳过 $isCheck = $ordLabelObj->dump(array('bill_type' => 'order', 'bill_id' => $order_id, 'label_id' => $labelInfo['label_id']), 'bill_id'); if ($isCheck) { $error_msg = '订单已经打过删除赠品的标签'; return false; } //打标记 $saveData = array( 'bill_type' => 'order', 'bill_id' => $order_id, 'label_id' => $labelInfo['label_id'], 'label_name' => $labelInfo['label_name'], 'create_time' => time(), ); $ordLabelObj->insert($saveData); // //操作人 // $opinfo = kernel::single('ome_func')->get_system(); // // //log // $operLogObj = app::get('ome')->model('operation_log'); // $operLogObj->write_log('order_preprocess@ome', $order_id, '订单退款后删除赠品失败', time(), $opinfo); return true; } /** * 价保订单打标记 * @param $order_id 订单ID * @param $oidList Oid列表 * @param $error_msg 错误信息 * @return false|void */ public function labelPriceProtectOrder($order_id, $oidList, &$error_msg = null) { /* $labelObj = app::get('omeauto')->model('order_labels'); $ordLabelObj = app::get('ome')->model('bill_label'); //check if (empty($order_id) || empty($oidList)) { $error_msg = '无效的请求打标记数据。'; return false; } //标记信息 $label_code = 'priceprotect'; $labelInfo = $labelObj->dump(array('label_code' => $label_code), '*'); if (empty($labelInfo)) { //自动添加标记 $labelInfo = array( 'label_code' => $label_code, 'label_name' => '价保订单', 'label_color' => '#ff6600', 'source' => 'system', 'create_time' => time(), 'last_modified' => time(), ); $labelObj->insert($labelInfo); } //check if (empty($labelInfo['label_id'])) { $error_msg = '价保订单标签不存在'; return false; } //检查已经打标,则跳过 $isCheck = $ordLabelObj->dump(array('bill_type' => 'order', 'bill_id' => $order_id, 'label_id' => $labelInfo['label_id']), 'bill_id'); if ($isCheck) { $error_msg = '订单已经打过价保的标签'; return false; } //订单打标记 $saveData = array( 'bill_type' => 'order', 'bill_id' => $order_id, 'label_id' => $labelInfo['label_id'], 'label_name' => $labelInfo['label_name'], 'create_time' => time(), ); $ordLabelObj->insert($saveData); */ kernel::single('ome_bill_label')->markBillLabel($order_id, '', 'priceprotect', 'order', $error_msg); $ordLabelObj = app::get('ome')->model('bill_label'); //订单object明细打标记 $object_bool_type = ome_order_bool_objecttype::__PRICE_PROTECT_CODE; $updateSql = "UPDATE sdb_ome_order_objects SET object_bool_type = object_bool_type | " . $object_bool_type; $updateSql .= " WHERE order_id=" . $order_id . " AND oid IN('" . implode("','", $oidList) . "')"; $ordLabelObj->db->exec($updateSql); //是否价保订单SKU商品 //kernel::single('ome_order_bool_objecttype')->isPriceProtect($objectVal['object_bool_type']) return true; } }