where($this->getFilter($param)) ->order(['audit_status'=>'asc','id'=>'desc']) ->paginate(); } /** * 获取查询条件 * @param array $param * @return array */ private function getFilter(array $param = []) { // 默认查询参数 $params = $this->setQueryDefaultValue($param, [ 'number' => '', 'betweenTime' => [], // 起止时间 'type' => 0, 'auditStatus' => -1, ]); // 检索查询条件 $filter = []; //扣减单号 if(isset($params['number']) && !empty($params['number'])){ $filter[] = ['number', 'like', "%{$params['number']}%"]; } //申请时间 if (!empty($params['betweenTime'])) { $times = between_time_format($params['betweenTime']); $filter[] = ['create_time', '>=', $times['start_time']]; $filter[] = ['create_time', '<', $times['end_time']]; } //申请类型 1新增会员价商品 2修改会员折扣 if(isset($params['type']) && $params['type']>0){ $filter[] = ['type', '=', $params['type']]; } //审核状态 if(isset($params['auditStatus']) && $params['auditStatus']>-1){ $filter[] = ['audit_status', '=', $params['auditStatus']]; } return $filter; } /** * 新增记录 * @param array $data * @return false|int */ public function add(array $data) { $goodIds = helper::getArrayColumn($data['goods'],'goods_id');//获取商品ID集合 if($data['type']==1){ if(MemberGoodsModel::whereIn('goods_id',$goodIds)->count()){ $this->error = '存在审核通过的会员价商品'; return false; } }else{ $memberGoodsIds = MemberGoodsModel::column('goods_id'); $memberGoodsIds = array_unique($memberGoodsIds); if(count(array_diff($goodIds,$memberGoodsIds))>0){ $this->error = '存在未审核通过的会员价商品'; return false; } } $applyGoodsIds = $this->goodIds(); if(count(array_intersect($goodIds,$applyGoodsIds))>0){ $this->error = '存在审核中的会员价商品'; return false; } //事物处理 $this->transaction(function () use ($data) { //新增手工扣减记录 $this->save($data); // 新增操作行为日志 $actionData = [ 'target_type' => Action::MEMBER_APPLY, 'audit_status' => AuditStatus::AUDIT_WAIT, 'audit_reason' => $data['audit_reason']??'', 'audit_user' => $data['audit_user'], 'audit_admin_id' => $data['audit_admin_id'], ]; MemberCardsActionModel::add($this['id'], $actionData); //申请快照表写商品记录 $appWhere = []; foreach ($data['goods'] as $good){ $goodWhere['goods_id'] = $good['goods_id']; $goodWhere['discount'] = $good['discount']; $goodWhere['apply_id'] = $this->id; $goodWhere['create_time'] = time(); $goodWhere['update_time'] = time(); $appWhere[] = $goodWhere; } ApplyGoodsModel::insertAll($appWhere); }); return true; } /** * 更新记录 * @param array $data * @return bool|int */ public function edit(array $data) { $goodIds = helper::getArrayColumn($data['goods'],'goods_id');//获取商品ID集合 if(MemberGoodsModel::whereIn('goods_id',$goodIds)->where('audit_status',AuditStatus::AUDIT_WAIT)->count()!=count($goodIds)){ $this->error = '存在未审核通过的会员价商品'; return false; } //事物处理 $this->transaction(function () use ($data) { //新增手工扣减记录 $this->save($data); // 新增操作行为日志 $actionData = [ 'target_type' => Action::MEMBER_APPLY, 'audit_status' => $data['audit_status'], 'audit_reason' => $data['audit_reason']??'', 'audit_user' => $data['audit_user'], 'audit_admin_id' => $data['audit_admin_id'], ]; MemberCardsActionModel::add($data['id'], $actionData); //申请快照表写商品记录 foreach ($data['goods'] as $good){ $goodWhere['goods_id'] = $good['goods_id']; $goodWhere['discount'] = $good['discount']; $goodWhere['apply_id'] = $this->id; $appWhere[] = $goodWhere; } ApplyGoodsModel::insertAll($appWhere); }); return true; } /** * 审核记录 * @param array $data * @return bool|int */ public function audit(array $data) { //申请不处于待审核 if($this->audit_status!=AuditStatus::AUDIT_WAIT){ $this->error = '当前状态不能审核'; return false; } //事物处理 $this->transaction(function () use ($data) { //新增手工扣减记录 $this->save($data); // 新增操作行为日志 $actionData = [ 'target_type' => Action::MEMBER_APPLY, 'audit_status' => $data['audit_status'], 'audit_reason' => $data['audit_reason']??'', 'audit_user' => $data['audit_user'], 'audit_admin_id' => $data['audit_admin_id'], ]; MemberCardsActionModel::add($data['id'], $actionData); if($data['audit_status']==AuditStatus::AUDIT_PASS){//审核通过 //往会员价商品表添加记录 $goods = ApplyGoodsModel::where('apply_id',$this->id)->select(); if($this['type']==1){ $appWhere = []; foreach ($goods as $good){ $goodWhere['goods_id'] = $good['goods_id']; $goodWhere['discount'] = $good['discount']; $appWhere[] = $goodWhere; } (new MemberGoodsModel())->saveAll($appWhere); }else{ foreach ($goods as $good){ MemberGoodsModel::updateBase(['discount'=>$good['discount']], ['goods_id'=>$good['goods_id']]); } } } }); return true; } //获取审核中的商品ID集合 public function goodIds(){ $applyIds = self::where('audit_status',AuditStatus::AUDIT_WAIT)->column('id'); $applyGoodsIds = ApplyGoodsModel::whereIn('apply_id',$applyIds)->column('goods_id'); $applyGoodsIds = array_unique($applyGoodsIds); return $applyGoodsIds; } }