EditController.class.php
5.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<?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;
}
}