ListController.class.php 4.68 KB
<?php
/**
 * Created by PhpStorm.
 * User: tangxingguo
 * Date: 2017/4/27
 * Time: 10:59
 */
namespace Apicp\Controller\Award;

use Com\PackageValidate;
use Common\Common\Constant;
use Common\Common\Integral;
use Common\Service\AwardService;
use Common\Service\RightService;

class ListController extends \Apicp\Controller\AbstractController
{
    /**
     * List
     * @author tangxingguo
     * @desc 激励列表
     * @param Int page:1 当前页
     * @param Int limit:20 每页数据总数
     * @return array 激励列表
                array(
                    'page' => 1, // 当前页
                    'limit' => 20, // 当前页条数
                    'total' => 100, // 总条数
                    'list' => array( // 列表数据
                        'award_id' => 1, // 激励ID
                        'award_action' => '第一个激励', // 激励行为
                        'description' => '哈哈', // 描述
                        'medals' => array( // 勋章信息
                            'im_id' => 3, // 勋章ID
                            'icon' => 'http://qy.vchangyi.com/icon.jpg', // 勋章图标URL或者前端路径
                            'icon_type' => 1, // 勋章图标来源(1=用户上传;2=系统预设)
                            'name' => '勋章1', // 勋章名称
                            'desc' => '这是一个勋章', // 勋章描述
                        ),
                        'right_obj' => '店长;经理;主管', // 发放对象
                    ),
                );
     */
    public function Index_post()
    {
        // 验证规则
        $rules = [
            'page' => 'integer',
            'limit' => 'integer',
        ];

        // 验证数据
        $validate = new PackageValidate($rules, [], array_keys($rules));
        $postData = $validate->postData;

        // 分页默认值
        $postData['page'] = isset($postData['page']) ? $postData['page'] : Constant::PAGING_DEFAULT_PAGE;
        $postData['limit'] = isset($postData['limit']) ? $postData['limit'] : Constant::PAGING_DEFAULT_LIMIT;
        list($start, $perpage) = page_limit($postData['page'], $postData['limit']);

        // 排序
        $order_option = ['created' => 'DESC'];

        // 激励列表
        $awardServ = new AwardService();
        $awardList = $awardServ->list_by_conds([], [$start, $perpage], $order_option);
        if (!empty($awardList)) {
            // 勋章信息
            $integralServ = new Integral();
            $integralList = $integralServ->listMedal();

            if (!empty($integralList)) {

                $integralList = array_combine_by_key($integralList, 'im_id');
            }

            $rightServ = new RightService();
            foreach ($awardList as $k => $v) {

                $v['medals'] = isset($integralList[$v['medal_id']]) ? $integralList[$v['medal_id']] : [];
                $v['right_obj'] = $rightServ->getData(['award_id' => $v['award_id']]);
                $v['right_obj'] = $this->_formatRightData($v['right_obj']);

                $awardList[$k] = $v;
            }
        }

        $this->_result = [
            'page' => $postData['page'],
            'limit' => $postData['limit'],
            'total' => intval($awardServ->count_by_conds([])),
            'list' => $awardList,
        ];
    }

    /**
     * @desc 将发放对象转为字符串
     * @author tangxingguo
     * @param array $rightData 发放对象
     * @return string
     */
    private function _formatRightData($rightData)
    {
        $right_obj = '';
        $right_obj = $this->_implodeDate($rightData['dp_list'], 'dp_name', $right_obj);
        $right_obj = $this->_implodeDate($rightData['tag_list'], 'tag_name', $right_obj);
        $right_obj = $this->_implodeDate($rightData['user_list'], 'username', $right_obj);
        $right_obj = $this->_implodeDate($rightData['job_list'], 'job_name', $right_obj);
        $right_obj = $this->_implodeDate($rightData['role_list'], 'role_name', $right_obj);

        if (Constant::RIGHT_IS_ALL_TRUE == $rightData['is_all']) {

            $right_obj = '全公司';
        }

        return $right_obj;
    }

    /**
     * @desc 将权限数组转字符串
     * @author tangxingguo
     * @param array $data 权限数据
     * @param string $key 需要转字串的字段
     * @param string $right_obj 发放对象字串
     * @return string
     */
    private function _implodeDate($data, $key, $right_obj)
    {
        if (!empty($data)) {

            $role_names = array_column($data, $key);
            if (!empty($right_obj)) {

                $right_obj .= ';';
            }

            $right_obj .= implode(';', $role_names);
        }
        return $right_obj;
    }
}