EditController.class.php 5.16 KB
<?php
/**
 * 【积分抽奖-后台】编辑活动接口
 * User: yingcai
 * Date: 2018/3/23
 * Time: 下午3:39
 */

namespace Apicp\Controller\Activity;

use Common\Common\AttachOperation;
use Common\Common\Constant;
use Common\Service\ActivityService;
use Common\Service\PrizeService;
use Common\Service\RightService;
use Think\Exception;

class EditController extends \Apicp\Controller\AbstractController
{

    public function Index_post()
    {
        $activity = I('post.');

        $ac_id = $activity['ac_id'];

        if (!$ac_id) {

            E('_EMPTY_ACTIVITY_ID');
        }

        $activityServ = new ActivityService();
        // 获取活动详情
        $activity_detail = $activityServ->get($ac_id);

        if (empty($activity_detail)) {

            E('_ERR_ACTIVITY_DATA');
        }

        // 转换活动状态
        $activity_status = $activityServ->activity_status(
            $activity_detail['activity_status'],
            $activity_detail['start_time'],
            $activity_detail['end_time']
        );


        // 已终止、已结束的活动不允许编辑
        if (in_array($activity_status, [Constant::STATUS_STOP, Constant::STATUS_END])) {

            E('_ERR_ACTIVITY_NOT_ALLOW_EDIT');
        }

        // 验证数据
        $activityServ->validate_for_data($activity, $activity_status);

        // 已发布的不能编辑保存成草稿
        if (Constant::ACTIVITY_PUBLISH == $activity_detail['activity_status'] &&
            Constant::ACTIVITY_DRAFT == $activity['activity_status']) {

            E('_ERR_ACTIVITY_STATUS');
        }

        $activity['last_time'] = MILLI_TIME;

        // 用户提交的新的权限数据
        $right = $activity['right'];
        // 奖品列表
        $prize_list = $activity['prize_list'];

        unset($activity['right'], $activity['prize_list']);

        $rightServ = new RightService();
        $prizeServ = new PrizeService();

        try {

            $activityServ->start_trans();

            // 草稿、未开始的活动可以编辑全部数据
            if (in_array($activity_status, [Constant::STATUS_DRAFT, Constant::STATUS_NOT_START])) {

                // 判断是否有删除的奖品
                $delete_prize_ids = $activity['delete_prize'];

                if (!empty($delete_prize_ids)) {

                    $prizeServ->delete_by_conds(['lp_id' => $delete_prize_ids]);
                    unset($activity['delete_prize']);
                }

                $activityServ->update($ac_id, $activity);

                // 更新奖品列表
                foreach ($prize_list as $prize) {
                    unset($prize['cover_url']);

                    if ($prize['lp_id']) {

                        $prizeServ->update($prize['lp_id'], $prize);
                    } else {

                        $prize['ac_id'] = $ac_id;
                        $prizeServ->insert($prize);
                    }
                }

                // 附件操作处理
                $attach_serv = new AttachOperation();
                $attach_ids = array_column($prize_list, 'cover_id');
                $attach_serv->update_attach(
                    APP_DIR,
                    'activity',
                    $ac_id,
                    ['attach_ids' => $attach_ids]
                );
            }

            // 进行中的活动,只可以编辑标题和参与范围
            if ($activity_status == Constant::STATUS_ING) {

                $activityServ->update(
                    $activity['ac_id'],
                    [
                        'title' => $activity['title'],
                        'is_all' => $activity['is_all'],
                        'rule' => $activity['rule'],
                        'prize_intro' => $activity['prize_intro'],
                    ]
                );
            }

            // 获取已有权限
            $old_right = $rightServ->list_by_conds(['ac_id' => $ac_id]);

            // 除数据库已有的权限
            if (Constant::IS_ALL_TRUE == $activity['is_all'] && !empty($old_right)) {

                $rightServ->delete_by_conds(['ac_id' => $ac_id]);
            }

            // 新的权限数据入库
            if ($activity['is_all'] != Constant::IS_ALL_TRUE) {

                $rightServ->update_right_data(['ac_id' => $ac_id], $right);
            }

            $activityServ->commit();
        } catch (Exception $e) {

            $activityServ->rollback();
            E('_ERR_ACTIVITY_ADD_FAILED');
        }

        // 开启发送消息 && 状态为发布状态 && 原状态为草稿
        if (Constant::PUSH_MSG_TRUE == $activity['is_push_msg'] && Constant::ACTIVITY_PUBLISH == $activity['activity_status'] && $activity_detail['activity_status'] == Constant::ACTIVITY_DRAFT) {

            // 组装发送消息的数据
            $activity['right'] = $right;
            $params = $activityServ->assemble_msg_params($ac_id, $activity);
            // 发送消息
            $activityServ->send_msg($params, Constant::MSG_ACTIVITY_PUBLISH);
        }

        $this->_result = [
            'ac_id' => $ac_id,
            'link' => 'Lottery/Frontend/Index/Index/Index/ac_id/' . $ac_id,
        ];

        return true;
    }

}