hasRepeated($data)) { return false; } $columns = $this->getTableColumns(); $model = $this->getModel(); foreach ($data as $k => $v) { if (!in_array($k, $columns)) { continue; } $model->setAttribute($k, $v); } return $model->save(); } public function update($primaryKey, $data): bool { if ($this->hasRepeated($data, $primaryKey)) { return false; } $columns = $this->getTableColumns(); $model = $this->query()->whereKey($primaryKey)->first(); foreach ($data as $k => $v) { if (!in_array($k, $columns)) { continue; } $model->setAttribute($k, $v); } return $model->save(); } public function hasRepeated($data, $id = 0): bool { $query = $this->query()->when($id, fn($query) => $query->where('id', '<>', $id)); if ((clone $query)->where('card_no', $data['card_no'])->exists()) { $this->setError('该身份证号码已存在'); return true; } return false; } //计算金额 public function totalFee($feeArr){ $money = 0; if($feeArr){ foreach($feeArr as $k => $item){ switch($k){ case 'add_fee': foreach($item as $value){ if(isset($value['name'])){ $money = bcadd($money, $value['fee'], 2); } } break; case 'del_fee': foreach($item as $value){ if(isset($value['name'])){ $money = bcsub($money, $value['fee'], 2); } } break; default: foreach($item as $value){ $money = bcadd($money, $value, 2); } break; } } } return $money; } public function makeFeelist($type, $extends = []){ $rows = $addFee = $delFee =[]; $oldMan = Oldmen::find(Arr::get($extends, 'oldman_id', 0)); switch($type){ case ConstFlow::TYPE_EXIT: if($oldMan){ if(isset($extends['live_in_at']) && $extends['avliable_at']){ $startAt = $extends['live_in_at']; $endAt = $extends['avliable_at']; }else{ $startAt = $oldMan->live_in_at; $endAt = $oldMan->avliable_at; } $flowList = ConstFlow::where('oldman_id', $oldMan->id) ->whereIn('const_type', [ConstFlow::TYPE_IN, ConstFlow::TYPE_CONTINUE]) ->whereBetween('start_at', [$startAt, $endAt])//开始时间在用户这段时间内的清单 ->get(); foreach($flowList as $flow){ $rows[] = [ 'name' => '缴费记录', 'fee_name' => ConstFlow::typeMap()[$flow->const_type].'【'.$flow->created_at->format('m-d H:i:s').'】', 'fee_value' => $flow->money, ]; } } $addFee = Arr::get($extends, 'add_extends', []); if(!$addFee){ $addFee = Arr::get($extends, 'add_fee', []); } $delFee = Arr::get($extends, 'del_extends', []); if(!$delFee){ $delFee = Arr::get($extends, 'del_fee', []); } foreach($addFee as $item){ if(isset($item['name']) && isset($item['fee'])){ $rows[] = [ 'name' => '抵扣项', 'fee_name' => $item['name'], 'fee_value' => $item['fee'], ]; } } foreach($delFee as $item){ if(isset($item['name']) && isset($item['fee'])){ $rows[] = [ 'name' => '收费项', 'fee_name' => $item['name'], 'fee_value' => 0-$item['fee'], ]; } } break; default: unset($extends['oldman_id'], $extends['live_in_at'], $extends['avliable_at']); foreach($extends as $key => $value){ if(in_array($key, ['add_extends', 'add_fee'])){ if(is_array($value)){ $addFee = $value; } }elseif(in_array($key, ['del_extends', 'del_fee'])){ if(is_array($value)){ $delFee = $value; } }else{ if(is_array($value)){ foreach($value as $item =>$vv){ $_fee = Keyword::where('key', $item)->first(); $rows[] = [ 'name' => $_fee->parent?->name ?? '', 'fee_name' => $_fee->name, 'fee_value' => $vv, ]; } }else{ $_fee = Keyword::where('key', $key)->first(); $rows[] = [ 'name' => $_fee->parent?->name ?? '', 'fee_name' => $_fee->name, 'fee_value' => $value, ]; } } } foreach($addFee as $item){ if(isset($item['name']) && isset($item['fee'])){ $rows[] = [ 'name' => '收费项', 'fee_name' => $item['name'], 'fee_value' => $item['fee'], ]; } } foreach($delFee as $item){ if(isset($item['name']) && isset($item['fee'])){ $rows[] = [ 'name' => '抵扣项', 'fee_name' => $item['name'], 'fee_value' => 0-$item['fee'], ]; } } break; } return $rows; } /** * 删除 * * @param string $ids * * @return mixed */ public function delete(string $ids): mixed { //检查删除的记录中是否有记录已经有缴费记录;有,则无法删除 if(ConstFlow::whereIn('oldman_id', explode(',', $ids))->count()){ return $this->setError('数据存在关联信息,已无法删除,请联系开发者删除。'); }; return $this->query()->whereIn($this->primaryKey(), explode(',', $ids))->delete(); } }