$param['master_worker_id'], 'worker_number' => $param['worker_number'], 'engineer_name' => $param['engineer_name'], 'original_balance' => $param['original_balance'], 'total_settlement_amount' => $param['total_settlement_amount'], 'deduction_amount' => $param['deduction_amount'], 'final_settlement_amount' => $param['final_settlement_amount'], 'settlement_time' => $param['settlement_time'], 'settlement_details_remarks' => $param['settlement_details_remarks'], ]); $masterWorker = MasterWorker::where('id', $param['master_worker_id'])->where('worker_number', $param['worker_number'])->find(); if($masterWorker && $masterWorker->user_money >= $param['total_settlement_amount']){ $masterWorker->user_money = $masterWorker->user_money - $param['total_settlement_amount']; $masterWorker->save(); MasterWorkerCaseOutLog::create([ 'sn' => generate_sn(MasterWorkerCaseOutLog::class,'sn'), 'worker_id' => $masterWorker->id, 'title' => '财务打款', 'change_amount' => $param['total_settlement_amount'], 'review_status' => 3, 'admin_id' => $adminId, 'remark' => '财务打款', 'create_time' => time(), 'update_time' => time(), ]); }else{ throw new \Exception('工程师不存在、余额不足'); } } Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 编辑 * @param array $params * @return bool * @author likeadmin * @date 2024/11/15 17:21 */ public static function edit(array $params): bool { Db::startTrans(); try { EngineerSettlement::where('id', $params['id'])->update([ 'master_worker_id' => $params['master_worker_id'], 'worker_number' => $params['worker_number'], 'engineer_name' => $params['engineer_name'], 'original_balance' => $params['original_balance'], 'total_settlement_amount' => $params['total_settlement_amount'], 'deduction_amount' => $params['deduction_amount'], 'final_settlement_amount' => $params['final_settlement_amount'], 'settlement_time' => $params['settlement_time'], 'settlement_details_remarks' => $params['settlement_details_remarks'], ]); Db::commit(); return true; } catch (\Exception $e) { Db::rollback(); self::setError($e->getMessage()); return false; } } /** * @notes 删除 * @param array $params * @return bool * @author likeadmin * @date 2024/11/15 17:21 */ public static function delete(array $params): bool { return EngineerSettlement::destroy($params['id']); } /** * @notes 获取详情 * @param $params * @return array * @author likeadmin * @date 2024/11/15 17:21 */ public static function detail($params): array { return EngineerSettlement::findOrEmpty($params['id'])->toArray(); } public static function downloadLists(): array { return EngineerSettlement::where('id','>',0) ->field(['id', 'master_worker_id', 'worker_number', 'engineer_name', 'original_balance', 'total_settlement_amount', 'deduction_amount', 'final_settlement_amount', 'settlement_time', 'settlement_details_remarks']) ->order(['id' => 'desc']) ->select() ->toArray(); } public static function engineerSettlementValidate($params) { try { if(empty($params)) throw new \Exception('表格数据为空'); foreach ($params as &$param) { //判断日期时间格式是否正确 2024/1/1 00:00:00 或 2024-1-1 00:00:00 if(!preg_match('/^[0-9]{4}\/[0-9]{1,2}\/[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $param['settlement_time']) && !preg_match('/^[0-9]{4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/', $param['settlement_time'])){ throw new \Exception('日期时间格式错误'); }else{ $param['settlement_time'] = date('Y-m-d H:i:s', strtotime($param['settlement_time'])); } if(!is_numeric($param['original_balance']) || !is_numeric($param['total_settlement_amount']) || !is_numeric($param['deduction_amount']) || !is_numeric($param['final_settlement_amount'])){ throw new \Exception('金额格式错误'); } if(!preg_match('/^[0-9]*$/', $param['worker_number'])){ throw new \Exception('工程师ID格式错误:'.$param['master_worker_id']); } if(!preg_match('/^[0-9]*$/', $param['master_worker_id'])){ throw new \Exception('工程师ID格式错误:'.$param['master_worker_id']); } $masterWorker = MasterWorker::where('id', $param['master_worker_id'])->where('worker_number', $param['worker_number'])->findOrEmpty(); if($masterWorker->isEmpty()) throw new \Exception('工程师不存在:'.$param['master_worker_id']); if($masterWorker->user_money < $param['total_settlement_amount']) throw new \Exception('余额不足'); } return $params; } catch (\Exception $e) { throw new \Exception($e->getMessage()); } } }