FormService.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <?php
  2. namespace App\JsonRpc;
  3. use Hyperf\RpcServer\Annotation\RpcService;
  4. use App\Tools\Result;
  5. use App\Model\GlobalTable;
  6. use Hyperf\DbConnection\Db;
  7. use App\Model\GlobalTableField;
  8. #[RpcService(name: "FormService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
  9. class FormService implements FormServiceInterface
  10. {
  11. /**
  12. * 添加全局表单
  13. * @param array $data
  14. * @return array|mixed
  15. */
  16. public function addGlobalTable(array $data): array
  17. {
  18. // 过滤掉空值
  19. $data = array_filter($data, function($value) {
  20. return !empty($value);
  21. });
  22. // 检查是否已存在相同名称的记录
  23. $globalTable = GlobalTable::on('global')->where(['table'=> $data['table'],'website_id'=>$data['website_id']])->first();
  24. if (empty($globalTable)) {
  25. $id = GlobalTable::on('global')->insertGetId($data);
  26. //给global库创建表 表名为$data['table'] 的值,并初始化一个字段id,类型为int,自增,主键,再初始化一个字段title,类型为varchar,长度为255
  27. Db::connection('global')->statement("CREATE TABLE IF NOT EXISTS `{$data['table']}` (
  28. `id` int(11) NOT NULL AUTO_INCREMENT,
  29. `title` varchar(255) DEFAULT NULL,
  30. PRIMARY KEY (`id`)
  31. )");
  32. //给GlobalTableField表初始化一条数据,表table_id为$id,field_name为title字符串,title为标题,field_type为varchar,length为255,is_required为1,is_unique为0,is_primary为0,is_index为0,is_foreign为0,is_auto_increment为1,is_default为0,default_value为'',description为'',website_id为$data['website_id']
  33. GlobalTableField::on('global')->insert([
  34. 'table_id' => $id,
  35. 'field_name' => 'title',
  36. 'title' => '标题',
  37. 'field_type' => '1',
  38. 'length' => 255,
  39. 'sort' => 0,
  40. 'is_check' => 1,
  41. 'admin_display' => 1,
  42. 'home_display' => 1,
  43. 'disable_del' => 1,
  44. ]);
  45. return Result::success('添加成功');
  46. }
  47. return Result::error('表单已存在');
  48. }
  49. /**
  50. * 获取全局表单列表
  51. * @param array $data
  52. * @return array
  53. */
  54. public function getGlobalTableList(array $data): array
  55. {
  56. try {
  57. // 构建查询
  58. $query = GlobalTable::query()
  59. ->when(!empty($data['website_id']), fn($q) => $q->where('website_id', $data['website_id']))
  60. ->when(!empty($data['name']), fn($q) => $q->where('name', 'like', '%' . $data['name'] . '%'));
  61. // 分页参数
  62. $page = (int)($data['page'] ?? 1);
  63. $pageSize = (int)($data['pageSize'] ?? 10);
  64. // 获取数据
  65. $list = $query->orderBy('updated_at', 'desc')
  66. ->offset(($page - 1) * $pageSize)
  67. ->limit($pageSize)
  68. ->get();
  69. // 如果没有数据,直接返回空结果
  70. if ($list->isEmpty()) {
  71. return Result::success([
  72. 'list' => [],
  73. 'total' => 0,
  74. 'page' => $page,
  75. 'pageSize' => $pageSize
  76. ]);
  77. }
  78. // 获取并合并 website 数据
  79. $websites = Db::connection('secondary')
  80. ->table('website')
  81. ->whereIn('id', $list->pluck('website_id'))
  82. ->pluck('website_name', 'id');
  83. // 合并数据并返回
  84. return Result::success([
  85. 'list' => $list->map(function($item) use ($websites) {
  86. $item->website_name = $websites[$item->website_id] ?? '';
  87. return $item;
  88. }),
  89. 'total' => $query->count(),
  90. 'page' => $page,
  91. 'pageSize' => $pageSize
  92. ]);
  93. } catch (\Throwable $e) {
  94. return Result::error('查询失败:' . $e->getMessage());
  95. }
  96. }
  97. /**
  98. * 获取全局表单
  99. * @param array $data
  100. * @return array
  101. */
  102. public function getGlobalTable(array $data): array
  103. {
  104. $globalTable = GlobalTable::where('id',$data['id'])->first();
  105. return Result::success($globalTable);
  106. }
  107. /**
  108. * 修改全局表单
  109. * @param array $data
  110. * @return array
  111. */
  112. public function upGlobalTable(array $data): array
  113. {
  114. var_dump($data);
  115. $globalTable = GlobalTable::where('id',$data['id'])->first();
  116. if(empty($globalTable)){
  117. return Result::error('表单不存在');
  118. }
  119. $data = array_filter($data,function($value){
  120. return !empty($value);
  121. });
  122. GlobalTable::where(['id'=>$data['id']])->update($data);
  123. return Result::success('修改成功');
  124. }
  125. /**
  126. * 删除全局表单
  127. * @param array $data
  128. * @return array
  129. */
  130. public function delGlobalTable(array $data): array
  131. {
  132. $globalTable = GlobalTable::where('id', $data['id'])->first();
  133. if(empty($globalTable)){
  134. return Result::error('表单不存在');
  135. }
  136. //删除global库的表
  137. Db::connection('global')->statement("DROP TABLE IF EXISTS `{$globalTable->table}`");
  138. //删除GlobalTableField表中table_id为$data['id']的数据
  139. GlobalTableField::where('table_id', $data['id'])->delete();
  140. GlobalTable::where('id', $data['id'])->delete();
  141. return Result::success('删除成功');
  142. }
  143. /**
  144. * 获取表单字段列表
  145. * @param array $data
  146. * @return array
  147. */
  148. public function getGlobalTableFieldList(array $data): array
  149. {
  150. $globalTableField = GlobalTableField::where('table_id',$data['table_id'])->orderBy("sort","asc")->get();
  151. return Result::success($globalTableField);
  152. }
  153. /**
  154. * 获取表单字段
  155. * @param array $data
  156. * @return array
  157. */
  158. public function getGlobalTableField(array $data): array
  159. {
  160. $globalTableField = GlobalTableField::where('id',$data['id'])->first();
  161. return Result::success($globalTableField);
  162. }
  163. /**
  164. * 添加表单字段
  165. * @param array $data
  166. * @return array
  167. * @throws \Throwable
  168. */
  169. public function addGlobalTableField(array $data): array
  170. {
  171. $globalTable = GlobalTable::where('id',$data['table_id'])->first();
  172. if(empty($globalTable)){
  173. return Result::error('表单不存在');
  174. }
  175. //检查是否已存在相同名称的记录
  176. $globalTableField = GlobalTableField::where(['table_id'=>$data['table_id'],'field_name'=>$data['field_name']])->first();
  177. if(!empty($globalTableField)){
  178. return Result::error('字段已存在');
  179. }
  180. //给global库的表添加字段
  181. Db::connection('global')->statement("ALTER TABLE `{$globalTable->table}` ADD COLUMN `{$data['field_name']}` {$data['field_type']}({$data['length']})");
  182. //给GlobalTableField表添加数据
  183. GlobalTableField::create($data);
  184. return Result::success('添加成功');
  185. }
  186. /**
  187. * 修改表单字段
  188. * @param array $data
  189. * @return array
  190. * @throws \Throwable
  191. */
  192. public function upGlobalTableField(array $data): array
  193. {
  194. $globalTable = GlobalTable::where('id',$data['table_id'])->first();
  195. if(empty($globalTable)){
  196. return Result::error('表单不存在');
  197. }
  198. //检查是否已存在相同名称的记录
  199. $globalTableField = GlobalTableField::where(['table_id'=>$data['table_id'],'field_name'=>$data['field_name']])->first();
  200. if(!empty($globalTableField) && $globalTableField->id != $data['id']){
  201. return Result::error('字段已存在');
  202. }
  203. //给global库的表修改字段
  204. Db::connection('global')->statement("ALTER TABLE `{$globalTable->table}` CHANGE COLUMN `{$data['field_name']}` {$data['field_type']}({$data['length']})");
  205. //给GlobalTableField表修改数据
  206. GlobalTableField::where('id',$data['id'])->update($data);
  207. return Result::success('修改成功');
  208. }
  209. /**
  210. * 删除表单字段
  211. * @param array $data
  212. * @return array
  213. * @throws \Throwable
  214. */
  215. public function delGlobalTableField(array $data): array
  216. {
  217. $globalTable = GlobalTable::where('id',$data['table_id'])->first();
  218. if(empty($globalTable)){
  219. return Result::error('表单不存在');
  220. }
  221. //给global库的表删除字段
  222. Db::connection('global')->statement("ALTER TABLE `{$globalTable->table}` DROP COLUMN `{$data['field_name']}`");
  223. //给GlobalTableField表删除数据
  224. GlobalTableField::where('id',$data['id'])->delete();
  225. return Result::success('删除成功');
  226. }
  227. /**
  228. * 获取自定义生成表里面的数据
  229. */
  230. public function getCustomTableData(array $data): array
  231. {
  232. $globalTable = GlobalTable::where('id',$data['table_id'])->first();
  233. if(empty($globalTable)){
  234. return Result::error('表单不存在');
  235. }
  236. //根据返回的table名称,查询这个表的数据
  237. $data = Db::connection('global')->table($globalTable->table)->get();
  238. return Result::success($data);
  239. }
  240. }