首页 > 代码库 > 项目笔记

项目笔记

最近做了一个直销的项目,写一下记录。

说一下“公司每月按团队销量的1%发放工资”功能的实现

1、数据查询:

在统计销量的时候使用了mysql聚合函数sum,日期函数FROM_UNIXTIME,因为订单表里的时间是int类型的时间戳,查询语句如下:

$thisMonth=strtotime(date(‘Y-m’));

$lastMonth=strtotime(‘-1 month’,$thisMonth);

$sql=’Select id, sum(num) as num ,FROM_UNIXTIME(creat_time,”%m”) as month from order where creat_time between ’. $lastMonth .’ and ’. $thisMonth .‘ group by month‘; (这里需要注意:数字在进行字符串连接时会报错,在数字前后加空格就好了)。这样就方便接下下来的使用了。

 

2、数组。之前做分销的项目还没有怎么用到数组,这个项目在计算代理提成、返全款、返差价(货款全部打到公司的账户)、确定月初的等级(代理可能被降级)时很多时候都得对订单做一下处理,方便使用。既然是团队销量,把代理表数据处理成

$team=[

  id=>[下级id]

]

把代理订单表处理成:

$salse=[

  $order[‘id’]=>sum(num),   //代理当月的销售总量

]

然后就可用递归从团队的最下级统计销量,最后得到最上级的团队销量:

static function teamSalse($team,$salse,&$teamSalse,$id){

  foreach($team[$id] as $v){

    //如果该代理还有下级

    if(array_key_exist($v,$team)){

      Self::teamSalse($team,$salse,$v);

    }

    //回溯,加上下级的团队销量

    $teamSalse[$id]+=$salse[$v];

  }

    $teamSalse[$id]+=$salse[$id]; //加上自己的销量

}

还有个问题就是不确定$team的第一个元素的键是什么,所以需要用each函数得到数组的第一个元素的键。另外在确定代理月初等级时用到了数组的排序的函数usort,因为要对数据按时间进行排序,排序函数用到了匿名函数:

usort($arr,$this->cmp(‘time’));

function cmp($key){

  return function($a,$b) use ($key){

    if($a[$key]==$v[$key]){

      return 0;

    }

    return $a[$key]>$b[$key]?1:-1;

  }

}

项目笔记