|
@@ -8,8 +8,10 @@ use app\controller\Curd;
|
|
|
use app\model\Member;
|
|
|
use app\model\MemberQuota;
|
|
|
use app\model\RuleAdded;
|
|
|
+use app\model\RuleAddedComponent;
|
|
|
use app\model\RulePricing;
|
|
|
use app\model\SysSerial;
|
|
|
+use support\Db;
|
|
|
use support\Redis;
|
|
|
use support\exception\BusinessException;
|
|
|
use support\Request;
|
|
@@ -26,26 +28,67 @@ class QuotaController extends Curd
|
|
|
|
|
|
public function select(Request $request): Response
|
|
|
{
|
|
|
+ $page = $request->get('page', 1);
|
|
|
+ $pageSize = $request->get('pageSize', 20);
|
|
|
+
|
|
|
$keywords = $request->get('keywords', '');
|
|
|
$memberIds = [];
|
|
|
if (!empty($keywords)) {
|
|
|
$memberIds = Member::leftJoin('member_cert', 'member_cert.join_cert_member_id', '=', 'member.member_id')
|
|
|
->where('member.member_mobile', 'like', '%' . $keywords . '%')
|
|
|
->orWhere('member_cert.member_cert_name', 'like', '%' . $keywords . '%')
|
|
|
- ->pluck('member.member_id')->toArray();
|
|
|
+ ->pluck('member.member_id')
|
|
|
+ ->toArray();
|
|
|
if (empty($memberIds)) {
|
|
|
return json_success('', []);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- [$where, $format, $limit, $field, $order] = $this->selectInput($request);
|
|
|
- if (!empty($memberIds)) {
|
|
|
- $where['join_quota_member_id'] = ['in', $memberIds];
|
|
|
+ $rows = MemberQuota::select('join_quota_member_id', 'join_member_rule_added_component_id', 'member_quota_addtimes')
|
|
|
+ ->when(!empty($memberIds), function ($query) use ($memberIds) {
|
|
|
+ $query->whereIn('join_quota_member_id', $memberIds);
|
|
|
+ })
|
|
|
+ ->groupBy('join_quota_member_id', 'join_member_rule_added_component_id', 'member_quota_addtimes');
|
|
|
+
|
|
|
+ $total = $rows->count();
|
|
|
+
|
|
|
+ $rows = $rows->orderBy('member_quota_addtimes', 'DESC')
|
|
|
+ ->forPage($page, $pageSize)
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+ foreach ($rows as &$row) {
|
|
|
+ $quota = MemberQuota::with([
|
|
|
+ 'member' => function ($query) {
|
|
|
+ $query->select('member_id', 'member_mobile');
|
|
|
+ },
|
|
|
+ 'cert' => function ($query) {
|
|
|
+ $query->select('join_cert_member_id', 'member_cert_name');
|
|
|
+ },
|
|
|
+ 'component' => function ($query) {
|
|
|
+ $query->select('rule_added_component_id', 'rule_added_component_name');
|
|
|
+ }
|
|
|
+ ])->where('join_quota_member_id', $row['join_quota_member_id'])
|
|
|
+ ->where('join_member_rule_added_component_id', $row['join_member_rule_added_component_id'])
|
|
|
+ ->first()
|
|
|
+ ->toArray();
|
|
|
+ $quotaTotal = MemberQuota::where('join_quota_member_id', $row['join_quota_member_id'])
|
|
|
+ ->where('join_member_rule_added_component_id', $row['join_member_rule_added_component_id'])
|
|
|
+ ->count();
|
|
|
+ $quotaUsed = MemberQuota::where('join_quota_member_id', $row['join_quota_member_id'])
|
|
|
+ ->where('join_member_rule_added_component_id', $row['join_member_rule_added_component_id'])
|
|
|
+ ->where('member_quota_status', 'USED')
|
|
|
+ ->count();
|
|
|
+ $quota['total'] = $quotaTotal;
|
|
|
+ $quota['used'] = $quotaUsed;
|
|
|
+ $quota['unused'] = $quotaTotal - $quotaUsed;
|
|
|
+
|
|
|
+ $addedId = RuleAddedComponent::where('rule_added_component_id', $row['join_member_rule_added_component_id'])->value('join_component_rule_added_id');
|
|
|
+ $addedName = RuleAdded::where('rule_added_id', $addedId)->value('rule_added_name');
|
|
|
+ $quota['added_name'] = $addedName;
|
|
|
+
|
|
|
+ $row = $quota;
|
|
|
}
|
|
|
- $order = $request->get('order', 'desc');
|
|
|
- $field = $field ?? 'member_quota_addtimes';
|
|
|
- $query = $this->doSelect($where, $field, $order);
|
|
|
- return $this->doFormat($query, $format, $limit);
|
|
|
+ return json_success('', compact('rows', 'page', 'pageSize', 'total'));
|
|
|
}
|
|
|
|
|
|
protected function doSelect(array $where, string $field = null, string $order = 'desc')
|
|
@@ -61,6 +104,7 @@ class QuotaController extends Curd
|
|
|
$query->select('rule_added_component_id', 'rule_added_component_name');
|
|
|
}
|
|
|
]);
|
|
|
+ $model = $model->groupBy('join_member_rule_added_component_id');
|
|
|
foreach ($where as $column => $value) {
|
|
|
if (is_array($value)) {
|
|
|
if ($value[0] === 'like' || $value[0] === 'not like') {
|
|
@@ -90,6 +134,7 @@ class QuotaController extends Curd
|
|
|
$model = $model->where($column, $value);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
if ($field) {
|
|
|
$model = $model->orderBy($field, $order);
|
|
|
}
|
|
@@ -122,6 +167,29 @@ class QuotaController extends Curd
|
|
|
return [$id, $data];
|
|
|
}
|
|
|
|
|
|
+ public function writeOffList(Request $request)
|
|
|
+ {
|
|
|
+ $memberId = $request->get('member_id', '');
|
|
|
+ $componentId = $request->get('component_id', '');
|
|
|
+
|
|
|
+ $quotas = MemberQuota::with([
|
|
|
+ 'member' => function ($query) {
|
|
|
+ $query->select('member_id', 'member_mobile');
|
|
|
+ },
|
|
|
+ 'cert' => function ($query) {
|
|
|
+ $query->select('join_cert_member_id', 'member_cert_name');
|
|
|
+ },
|
|
|
+ 'component' => function ($query) {
|
|
|
+ $query->select('rule_added_component_id', 'rule_added_component_name');
|
|
|
+ }
|
|
|
+ ])->where('join_quota_member_id', $memberId)
|
|
|
+ ->where('join_member_rule_added_component_id', $componentId)
|
|
|
+ ->where('member_quota_status', 'USED')
|
|
|
+ ->get();
|
|
|
+
|
|
|
+ return json_success('', $quotas);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @Desc 额度核销
|
|
|
* @Author Gorden
|
|
@@ -132,31 +200,52 @@ class QuotaController extends Curd
|
|
|
*/
|
|
|
public function writeOff(Request $request)
|
|
|
{
|
|
|
- $quotaIds = $request->post('quota_id', []);
|
|
|
+ $memberId = $request->post('member_id', []);
|
|
|
+ $componentId = $request->post('component_id', []);
|
|
|
+ $nbr = $request->post('nbr');
|
|
|
+ $times = $request->post('times', '');
|
|
|
$code = $request->post('sms_code', '');
|
|
|
|
|
|
- $quotas = MemberQuota::whereIn('member_quota_id', $quotaIds)->get()->toArray();
|
|
|
- $memberIds = array_column($quotas, 'join_quota_member_id');
|
|
|
-
|
|
|
- if (count(array_unique($memberIds)) > 1) {
|
|
|
- return json_fail("不可同时核销多个会员的权益");
|
|
|
+ if (!$memberId || !$componentId) {
|
|
|
+ return json_fail("参数异常");
|
|
|
}
|
|
|
|
|
|
- $status = array_column($quotas, 'member_quota_status');
|
|
|
- if (in_array('USED', $status) || in_array('CANCEL',$status)) {
|
|
|
- return json_fail('存在已核销 / 无效的权益,请重新选择');
|
|
|
+ $quotas = MemberQuota::where('join_quota_member_id', $memberId[0])
|
|
|
+ ->where('join_member_rule_added_component_id', $componentId[0])
|
|
|
+ ->where('member_quota_status', 'PENDING')
|
|
|
+ ->limit($nbr)
|
|
|
+ ->get()
|
|
|
+ ->toArray();
|
|
|
+ if (count($quotas) < intval($nbr)) {
|
|
|
+ return json_fail("可核销数量不足");
|
|
|
}
|
|
|
|
|
|
- $member = Member::find(current($memberIds));
|
|
|
+ $member = Member::find(current($memberId));
|
|
|
$mobile = $member->member_mobile;
|
|
|
$key = "SMS:CODE:QUOTA:" . $mobile;
|
|
|
$redisCode = Redis::get($key);
|
|
|
if ($redisCode != $code) {
|
|
|
return json_fail("验证码错误,请重新输入");
|
|
|
}
|
|
|
+ Redis::del($key);
|
|
|
+
|
|
|
+ if (!$times) {
|
|
|
+ $times = date('Y-m-d H:i:s');
|
|
|
+ } else {
|
|
|
+ $times = date('Y-m-d H:i:s', strtotime($times));
|
|
|
+ }
|
|
|
|
|
|
try {
|
|
|
- MemberQuota::whereIn('member_quota_id', $quotaIds)->update(['member_quota_status' => 'USED']);
|
|
|
+ foreach ($quotas as $quota) {
|
|
|
+ $extend = [];
|
|
|
+ if (!empty($quota['member_quota_extend_json'])) {
|
|
|
+ $extend = json_decode($quota['member_quota_extend_json'], true);
|
|
|
+ }
|
|
|
+ $extend['writeOffTime'] = $times;
|
|
|
+
|
|
|
+ MemberQuota::where('member_quota_id', $quota['member_quota_id'])->update(['member_quota_status' => 'USED', 'member_quota_extend_json' => $extend]);
|
|
|
+ }
|
|
|
+
|
|
|
} catch (\Exception $e) {
|
|
|
return json_fail("核销失败");
|
|
|
}
|