用户组定义

用户组定义的表是在

evo_central_config -> acl_aro_role, role_name

这个字段就是组的完整的名字

 

acl_user_role 把user和role对应起来

 

然后判断该用户是否是在这个组里的

stock batch change 记录

流程为操作(issue, transfer,)过后
1.判断stock快照是否变动 – is_voucehr_stock_batch_changed
     (1.     stock为created 直接查询voucher表 stock为created voucher的总数, 对比快照中的数额是否变动
     (2.     stock为inuse 查询create_request表 查询总共被创建的voucher的总数, 对比快照中数额是否变动(每次都不等)
     (3.     for other stocks, we will need to check the exact vouchers as there will be vouchers in and out.
                total vouchers maybe the same but the vouchers may changed.   
                关联stock_id, class_id 查询voucher表得出总数 对比是否变动
 
2.如果变动
     (1.     Stock为created 执行_update_voucher_stock_batch_created_vouchers($stock, $voucher_class_category)
                (1). we can get all the created batch, and then merge them together to one batch.
                (2). 创建新的batch_id,循环得出段创建新的batch_no_section记录
                (3). 更新新创建的batch_no_sectino记录 total_vouchers和total_value
                (4). _update_batch_id_by_stock_class 将stock和class_id对应的记录的batch_id全部改成新的batch_id,如果没有记录,插入新记录.
 
     (2.     Stock为inuse    执行_update_voucher_stock_batch_inuse_vouchers($stock, $voucher_class_category)
                 类似create的更新操作
 
       (3.     Stock为其他     执行_update_voucher_stock_batch_vouchers( $stock_id, $voucher_class_category );
                /**
                 * for normal stocks, like: finance / cd / csa / cse / expired etc. we will have to get all vouchers and range them one by one.
                 * //tenant vouchers will be different from csm vouchers, as the tenant voucher will have an extra field like 'expiry_date';
                 * @param integer $stock_id
                 * @param string $voucher_class_category
                 */
 
     
3.如果没有变动直接执行get_batch_id_by_stock_class($stock_id, $voucher_class_category); 从快照里直接拿数据
 
 
 
voucher_stocl_batch.php, function : update_voucher_stock_batch();

20140401 问题杂记

1.report的class按大类分之后,剩下的独立出来不以other的形式存在

2.通过分发的controller分发给不同report的controller
 
要站在更高的层面上去思考问题
做完之后再整体的层面上去考虑是否存在问题,比如这次ion的micro site
昨晚之后要清楚的记下来每一步的流程,其实我做完也是迷糊的要对着代码才能说出来准确流程
 
 
要了解公司每一块的工作是什么比如说ct不用看代码 但是要知道ct做什么,
在另一种角度上去思考gvms在公司整个环境中的作用和地位
 
 
gvms在应用的层面是给客户finace和marcom使用,ct是给Concierge使用的
但是在另一种层面看,gvms是以一个主体存在,ct以及其他第三方来调用gvms的api来操作实现他们的功能,所以gvms在这个角度上看就是一个主体
 
我自己的问题:
白天容易迷糊,做事情没有思路,常常做完了就忘了
原因:晚上睡的晚,导致白天没有精神工作
解决办法:今日起11点洗漱 12点准时睡觉
 
code之后会留下很多bug测试的步骤也没有直接交给客户给公司利益带来损失
原因:粗心大意,懒
解决办法:不明白的地方一定找hc确认,做完一定自检一遍确认无误
 
沟通上存在问题,抵触领导心里自卑自负
原因:心里问题
解决办法:每天都要有问题提出,每天至少一次不论是问题还是代确定自己拿不准的做法。 

campaign draw participants list

SELECT
  a.contact_id AS ContactID
 ,familyName AS FamilyName
 ,givenName AS GivenName
 ,NRIC
,mobilePhoneNumber AS Mobile
,email AS Email, gender AS Gender
, ROUND(a.amount,2) AS TotalSpending
,a.chance AS TotalChances
 , GROUP_CONCAT(CONCAT(a.purchase_time, ': ', c.storeName,': $', CAST(b.amount AS CHAR), ' (', paymentTypeName,')') SEPARATOR "") AS purchase_details
FROM
(
SELECT 
 a.contact_id
 ,b.purchase_id
 ,b.purchase_time
 , SUM(a.chance) AS chance 
 , SUM(b.amount) AS amount
FROM new_luckydraw_entry a,
  new_purchase b
WHERE a.related_id=b.purchase_id AND a.luckydraw_campaign_id=296 AND a.entry_time BETWEEN '2013-08-01 00:00:00' AND '2014-03-31 23:59:59'
GROUP BY a.contact_id
) a,
new_purchase_detail b,store c,paymentType d,contact e
WHERE a.purchase_id=b.purchase_id AND b.store_id=c.storeId AND b.payment_id=d.paymentTypeId AND a.contact_id=e.contactId
GROUP BY a.contact_id
ORDER BY a.purchase_time ASC

 

campaign_draw participants list 的sql

a.luckydraw_campaign_id=296 的296取的是再db_central里的luckdraw_campaign表,这个表是所有campaign的表所以类型是从这里取的很多次都在这个地方迷糊,记录一下。

 

 

 

邮件格式:

--------------------------------------------

Hi Mengchu,

Here with the conduct grand draw  link from 01 Aug 2013 to 31 March 2014:

https://hfc.icolumn.com/hfc/draw/909/index.php

​Login name: hfcmarcom

Password: harbourfc2013​

And attached is the participants list

json_decode

今天在操作json_decode之后的数组的时候发现结构是这样的

带有stdClass上网直接搜索stdClass说是什么zend的保留函数云云

没有给出实际的操作方法

 

然后查了一下手册发现json_decode的第二个参数设置为true时返回array而并非object

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

所以加上第二个参数就ok了

 

jQuery 总结

========================== 

为了简化js的开发,一些js库诞生了 

流行的有:jQuery, Moo Tools, Prototype, Dojo,YUI,EXT_JS,DWR 

 

========================== 

jQuery  — javascript query   

轻量级js库,兼容css3,兼容各种浏览器 

快速、简洁 

方便处理HTML documents、events、实现动画效果, 

方便的为网站提供ajax交互 

文档说明全,很多成熟插件可选择 

能够使html保持代码和html内容分离 

 

========================== 

什么是jquery对象 

就是通过jquery包装dom对象后产生的对象 

jquery对象是jquery独有的 

可以使用方法$("#test").html(); 

意思是:获取ID为test的元素内的html代码 

等同于用DOM实现: 

document。getelementById("test")[removed]; 

通过id直接输出 

alert($("#name").val()); 

注意!! DOM和JQUERY不能互相使用 

约定 jquery对象前面加上$ 

var $var = jquery对象 

var variable = DOM对象 

 

========================== 

DOM对象转成jquery对象 

吧DOM对象用$()包装起来 

jquery对象=$(dom对象) 

 

jquery对象转换成dom对象 

1)[index] 

jquery对象是一个数组对象 

var use = $use[0]; 

2).get(index) 

jquery本身提供的方法 

var use = $use.get(0); 

 

========================== 

jquery选择器 jquery的根基 

对事件处理,遍历dom和ajax操作都依赖选择器 

 

优点 

简介的写法 

$("#id") 等价document.getElementByid("id"); 

$("tagName")等价 document.getElementByTagName("tagName"); 

 

完善的时间处理机制 

 

基本选择器 

1.#id  

用法:$("#myDiv");  返回值 单个元素组成的集合 

说明:这个就是直接选择html中的id="myDiv"  匹配的第一个 

2.Element   

用法:$("div")   返回值 集合元素 

说明:element就是html已经定义的标签元素.如div,input,等 

3.class   

用法:$(".myClass") 返回值 集合元素 

说明:这个标签直接选择html代码中class="myClass"的元素或元素族 

4. * 

用法:$("*") 返回值 集合元素 

说明:匹配所有元素,多用于结合上下文来搜索 

5.selector1,selector2, selectorN 

用法:$("div.span.p.myClass") 返回值 几何元素 

说明: 将每一个选择器匹配到的元素合并后一起返回,可以指定任意多个选择器 

并将匹配到的元素合并到一个结果内,p.myClass表示匹配p class = "myClass" 

 

层次选择器 

通过DOM元素之间的层次关系,如后代,子,相邻,兄弟 

1.ancestor descendant 

用法:$("form input"); 返回值 集合元素 

说明 在给定的祖先元素下匹配所有后代元素 

2.parent > child 

用法:$("form>input") 返回值 集合元素 

说明给定的父元素下匹配所有的子元素 

!!注意 子元素和后代元素 

3.prev + next 

用法: $("label+input") 返回值 集合元素 

说明: 匹配所有紧接在prev元素后的next元素 

4.prev~siblings 

用法: $("form ~ input") 返回值 集合元素 

说明 匹配prev元素之后的所有 siblings同辈元素, 匹配的是和prev同辈的元素,后辈元素不被匹配 

siblings()方法匹配所有同辈 包括之前的 

 

 

 

过滤选择器 

通过特定的过滤规则筛选出所需的dom元素.以":"开头 

按不同的过滤规则.过滤选择器分为 

基本过滤,内容过滤,可见性过滤 

属性过滤,子元素过滤和表单对象属性过滤选择器 

 

基本过滤选择器 

1. :first 

用法 $("tr:first"); 返回值 单个元素组成的集合 

说明:匹配找到的第一个元素 

2. :last 

用法 $("tr:last"); 返回值 集合元素 

说明:匹配找到的最后一个元素,与:first相对应 

3. :not(selector) 

用法 $("input:not(:checked)"); 返回值 集合元素 

说明:去除所有与给定选择器匹配的元素,类似于“非” 

指没有被选中的input(当input的type为checkbox) 

4. :even 

用法 $("tr:even") 返回值  集合元素 

说明: 匹配所有索引值为偶数的元素.从0开始计数 

5.dd 

用法 $("tr:odd") 返回值  集合元素 

说明: 匹配所有索引值为奇数的元素.与even相应,从0开始计数 

6. :eq(index) 

用法 $("tr:eq(0)") 返回值  集合元素 

说明: 匹配一个给定索引值的元素。eq(0)就是获取第一个tr元素, 

注意括号内为索引值 不是元素排列数 

7. :gt(index) 

用法 $("tr:gt(0)") 返回值  集合元素 

说明: 匹配所有大于给定索引值得元素。 

8. :lt(index) 

用法 $("tr:lt(2)") 返回值  集合元素 

说明: 匹配所有小于给定索引值得元素。 

9. :header(固定写法) 

用法 $(":header").css("background","red") 返回值 集合元素 

说明: 匹配如h1,h2,h3之类的标题元素 

10. :animated(固定写法) 返回值  集合元素 

说明:匹配所有正在执行动画效果的元素 

内容过滤选择器 

1. :contains(text) 

用法:$("div:contains('John')") 返回值 集合元素 

说明 匹配包含给定文本的元素,查找被标签围起来的文本内容是否符合指定的内容 

2. :empty 

用法  $("td:empty") 返回值 集合元素 

说明:匹配所有不包含子元素或者文本的空元素 

3. :has(selector) 

用法  $("div:has(p)").addClass("test") 返回值 集合元素 

说明:匹配含有选择器所匹配的元素的元素,给包含P元素的div加上class=‘test’ 

4. :parent 

用法  $("td:parent") 返回值 集合元素 

说明:匹配含有子元素或者文本的元素 与empty相反 

可见度过滤选择器 

根据元素的可见和不可见状态来选择相应的元素 

1. :hidden    jquery的show()显示 

用法  $("tr:hidden") 返回值 集合元素 

说明:匹配所有的不可见元素  css中的display:none和input type="hidden" 

2. :visible 

用法  $("tr:visible") 返回值 集合元素 

说明:匹配所有的可见元素 

属性过滤选择器  【注意 是方括号不是冒号":"】 

通过元素的属性来获取相应的元素 

1.[attribute] 

用法:$("div[id]") 返回值 几何元素 

说明: 匹配包含给定属性的元素,   选取了带id属性的div标签 

2.[attribute=value] 

用法:$("input[name='newsletter']").attr("checked",true) 返回值 几何元素 

说明: 匹配包含给定属性是某个特定值的元素,   

选取了所有name属性是newsletter的input元素 

3.[attribute!=value] 

用法:$("input[nam!e='newsletter']").attr("checked",true) 返回值 几何元素 

说明: 匹配不含油给定属性,或者属性不等于某个特定值的元素, 

等价于not(attr=value), 

选取了所有name属性是newsletter的input元素 

4.[attribute^=value] 

用法:$("input[name^='news']") 返回值 几何元素 

说明: 匹配包含给定属性是以某些值开始的元素  

5.[attribute$=value] 

用法:$("input[name$='letter']") 返回值 几何元素 

说明: 匹配包含给定属性是以某些值结尾的元素 

6.[attribute*=value] 

用法:$("input[name*='man']") 返回值 几何元素 

说明: 匹配包含给定属性是以包含某些值的元素 

7.[attributeFilter1][attributeFilter2][attributeFilterN] 

用法:$("input[id][name$='man']") 返回值 几何元素 

说明:符合属性选择器,需要同时满足多个条件时使用 

子元素过滤选择器 

1 :nth-child(index/even/odd/equation) 

用法: $("ul li:nth-child(2)") 返回值 集合元素 

说明 匹配其父元素下的第几个子奇偶元素    索引从1开始 

2. :first-child 

用法: $("ul li:first-child(2)") 返回值 集合元素 

说明 为每个父元素匹配第一个子元素, 

3. :last-child 

用法: $("ul li:last-child(2)") 返回值 集合元素 

说明 为每个父元素匹配最后一个子元素, 

4.nly-child 

用法: $("ul li:only-child(2)") 返回值 集合元素 

说明 如果某个元素师父元素中唯一的子元素,那将会匹配 

表单对象属性过滤选择器 

对选择的表单元素进行过滤 

1. :enabled 

用法: $("input:enabled") 返回值 集合元素 

说明 匹配所有可用元素。 查找所有input中不带disable的input 

2. :disabled 

用法: $("input:disabled") 返回值 集合元素 

说明 匹配所有不可用元素。 查找所有input中带disable的input 

3. :checked 

用法: $("input:checked") 返回值 集合元素 

说明 匹配所有选中的被选中的元素(复选框,单选框,不包select中的option) 

4. :selected 

用法: $("input:selected") 返回值 集合元素 

说明 匹配所有选中的option元素 

表单选择器 

1. :input $(":input") 

2. :text $(":text") 

3. :password $(":password") 

4. :radio $(":radio") 

5: :checkbox $(":checkbox") 

6. :submit $(":submit") 

7. :image $(":image") 

8. :reset $(":reset") 

9. :button $(":button") 

10.:file $(":file") 

11.:hidden $("input:hidden") 

 

========================== 

遍历集合 

each(function(index,domEle)) 

参数 

index: 每次索引,从0开始 

domEle: 遍历集合的当前对象,是一个dom对象 

 

this对象的使用,当前遍历的对象 

 

jquery中的全局函数 

$.each(object,function(index,domEle));用来遍历数组及任何对象 

参数 

index: 对象成员或数组索引 

domEle: 对应变量和内容 

 

========================== 

jquery中的dom操作 

dom操作的分类 

dom core 

html dom 

使用js和dom为html编写脚本是。用的很多属性 

css-dom 

js中,主要用于获取和设置上腾娱乐对象的各种书新娘歌 

 

内部插入节点 

append(content) 

向每个匹配元素的内部的结尾处追加内容 

appendTo(content) 

将每个匹配的元素追加到指定的元素中的内部结尾处 

prepend(content) 

向每个匹配元素的内部的开始处追加内容 

prependTo(content) 

将每个匹配的元素追加到指定的元素中的内部开始处 

 

外部插入节点 

after(content) 

在每个匹配的元素之后插入内容 

before(content) 

在每个匹配的元素之前插入内容 

insertAfter(content) 

把所有匹配的元素插入到另一个、指定的元素元素集合的后面 

insertBefore(content) 

把所有匹配的元素插入到另一个、指定的元素元素集合的前面 

 

不但能将新创建的dom元素插入到文档中,也能对原有的dom元素进行移动 

 

查找节点 

查找属性节点 

jquery选择器 

查到后可调用jquery的attr()方法来获取各种属性值\ 

 

创建节点 

使用jquery的工厂函数$()    如 $(html) 

将传入的html标记字符串创建一个dom对象,并包装成一个jquery对ian 

注意 

动态创建的新元素节点不会被自动添加到文档 

创建单个元素时,注意闭合标签和使用标准的xhtml格式 

 

删除节点 

remove() 

从dom中删除所有匹配的元素,通过jquery表达式来筛选元素 

empty() 

清空节点- 清空元素中所有的后代节点(不包含属性节点) 

 

替换节点 

replaceWith() 

将所有匹配的元素替换为制定的html或dom元素 

replaceAll() 

颠倒了的replaceWith() 

注意:替换之前,元素上绑定的事件会随着替换一起消失 

 

复制节点 

clone() 

复制的新节点不具有任何行为 

clone(ture) 

连同事件一起复制 

 

属性操作 

attr() 

html() 

text() 

val() 

height() 

width() 

css() 

removeAttr() 

jquery按元素可见不可见状态来选择

根据元素的可见和不可见状态来选择相应的元素 

1. :hidden    jquery的show()显示 

用法  $("tr:hidden") 返回值 集合元素 

说明:匹配所有的不可见元素  css中的display:none和input type="hidden" 

2. :visible 

用法  $("tr:visible") 返回值 集合元素 

说明:匹配所有的可见元素 

     属性过滤选择器  【注意 是方括号不是冒号":"】 

通过元素的属性来获取相应的元素 

js中apply方法的使用

1、对象的继承,一般的做法是复制:Object.extend

 Object.extend = function(destination, source) { 
    for (property in source) { 
        destination[property] = source[property]; 
    } 
    return destination; 
}

除此之外,还有种方法,就是:Function.apply(当然使用Function.call也是可以的)

Function.apply(obj,args)方法能接收两个参数

    args:这个是数组,它将作为参数传给Function(args–>arguments)

 

<script> 
function Person(name,age){   //定义一个类,人类  
    this.name=name;     //名字  
    this.age=age;       //年龄 
    this.sayhello=function(){alert("hello")};

function Print(){            //显示类的属性 
    this.funcName="Print"; 
    this.show=function(){      
        var msg=[];
        for(var key in this){ 
            if(typeof(this[key])!="function"){
                msg.push([key,":",this[key]].join(""));
            }
        } 
        alert(msg.join(" "));
    };

function Student(name,age,grade,school){    //学生类 
    Print.apply(this,arguments);
    this.grade=grade;                //年级 
    this.school=school;                 //学校 

var p1=new Person("jake",10);
p1.sayhello();
var s1=new Student("tom",13,6,"清华小学");
s1.show();
s1.sayhello();
alert(s1.funcName);
</script>

学生类本来不具备任何方法,但是在Person.apply(this,arguments)后,

在Print.apply(this,arguments)后就自动得到了show()方法

2、利用Apply的参数数组化来提高

我们先从Math.max()函数说起,Math.max后面可以接任意个参数,最后返回所有参数中的最大值。

但是在很多情况下,我们需要找出数组中最大的元素。
var arr=[5,7,9,1]
alert(Math.max(arr))    // 这样却是不行的。一定要这样写

这样写麻烦而且低效。如果用 apply呢,看代码:
function getMax2(arr){
    return Math.max.apply(null,arr);
}
两段代码达到了同样的目的,但是getMax2却优雅,高效,简洁得多。

再比如数组的push方法。
var arr1=[1,3,4];
var arr2=[3,4,5];
如果我们要把 arr2展开,然后一个一个追加到arr1中去,最后让arr1=[1,3,4,3,4,5]
arr1.push(arr2)显然是不行的。 因为这样做会得到[1,3,4,[3,4,5]]

自从有了Apply,事情就变得如此简单
Array.prototype.push.apply(arr1,arr2)

 

<embed height=”0″ id=”xunlei_com_thunder_helper_plugin_d462f475-c18e-46be-bd10-327458d045bd” type=”application/thunder_download_plugin” width=”0″></embed>

数位补全

    总是忘掉这个函数然后每次都要查,记录一下

定义和用法

str_pad() 函数把字符串填充为指定的长度。

语法

str_pad(string,length,pad_string,pad_type)
参数 描述
string 必需。规定要填充的字符串。
length 必需。规定新字符串的长度。如果该值小于原始字符串的长度,则不进行任何操作。
pad_string 可选。规定供填充使用的字符串。默认是空白。
pad_type

可选。规定填充字符串的那边。

可能的值:

  • STR_PAD_BOTH – 填充到字符串的两头。如果不是偶数,则右侧获得额外的填充。
  • STR_PAD_LEFT – 填充到字符串的左侧。
  • STR_PAD_RIGHT – 填充到字符串的右侧。这是默认的。

例子

例子 1

<?php
$str = "Hello World";
echo str_pad($str,20,".");
?>

输出:

Hello World.........

例子 2

<?php
$str = "Hello World";
echo str_pad($str,20,".",STR_PAD_LEFT);
?>

输出:

.........Hello World

例子 3

<?php
$str = "Hello World";
echo str_pad($str,20,".:",STR_PAD_BOTH);
?>

输出:

.:.:Hello World.:.:.