<?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; } }