DemoController.java 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. package com.hr.controller;
  2. import com.alibaba.fastjson2.JSONObject;
  3. import com.hr.dto.*;
  4. import com.hr.fegin.dto.MyDemoDto;
  5. import com.hr.repository.jpa.TestJpa;
  6. import com.hr.repository.domain.TestEntity;
  7. import com.hr.repository.service.DemoService;
  8. import com.hr.repository.service.TransServer;
  9. import com.github.pagehelper.PageHelper;
  10. import com.hr.system.api.domain.SysDictData;
  11. import com.yy.basedevelop.common.data.BasePageResult;
  12. import com.yy.basedevelop.common.data.BaseReturnDto;
  13. import com.yy.basedevelop.common.http.config.RedisService;
  14. import com.yy.basedevelop.common.util.DictUtil;
  15. import com.yy.basedevelop.common.util.ExcelUtil;
  16. import com.yy.basedevelop.common.util.HttpClientUtils;
  17. import com.yy.basedevelop.common.util.OSSUtil;
  18. import jakarta.servlet.http.HttpServletResponse;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.http.codec.multipart.FilePart;
  22. import org.springframework.http.server.reactive.ServerHttpResponse;
  23. import org.springframework.web.bind.annotation.*;
  24. import org.springframework.web.server.ServerWebExchange;
  25. import reactor.core.publisher.Mono;
  26. import java.util.ArrayList;
  27. import java.util.Date;
  28. import java.util.List;
  29. import java.util.Map;
  30. import java.util.concurrent.TimeUnit;
  31. import java.util.random.RandomGenerator;
  32. @Slf4j
  33. @RestController
  34. @RequestMapping("/test")
  35. public class DemoController {
  36. @Autowired
  37. private TestJpa testJpa;
  38. @Autowired
  39. private DemoService sv;
  40. @Autowired
  41. private TransServer transServer;
  42. @Autowired
  43. private DemoService demoService;
  44. @Autowired
  45. private RedisService redisService;
  46. @Autowired
  47. private OSSUtil oSSUtil;
  48. /**
  49. * 测试字典
  50. * @param dto
  51. * @return
  52. */
  53. @PostMapping("listdict")
  54. public Mono<TestDemoDto> listdict(@RequestBody TestDemoDto dto) {
  55. log.info("listdict=:{}", dto);
  56. TestDemoDto dto1 = new TestDemoDto();
  57. //将中文的 字典类型,字典标签转换为字典的value
  58. //比如 用户性别,男 转换为 1
  59. dto1.setDictValue(DictUtil.getDictCodeStr(dto.getDictTypeNameCn(),dto.getDictNameCn()));
  60. Integer val=DictUtil.getDictCodeInt(dto.getDictTypeNameCn(),dto.getDictNameCn());
  61. log.info("val=:{}", val);
  62. return Mono.just(dto1);
  63. }
  64. /**
  65. * 测试Oss
  66. * @param filePart
  67. * @param description
  68. * @param path
  69. * @return
  70. */
  71. @PostMapping("ossTest")
  72. public Mono<TestDemoDto> ossTest(@RequestPart("file") FilePart filePart,
  73. @RequestPart("description") String description,
  74. @RequestPart("path") String path) {
  75. log.info("接收的listoss=:{},path={}", description,path);
  76. String ossstr=oSSUtil.upLoadInputStream(filePart, "esgin" + path);
  77. TestDemoDto dto1 = new TestDemoDto();
  78. dto1.setName("返回名字oss");
  79. dto1.setAge(25);
  80. dto1.setOssUrl(ossstr);
  81. return Mono.just(dto1);
  82. }
  83. /**
  84. * 测试Mono
  85. * @param dto
  86. * @return
  87. */
  88. @PostMapping("MonoTest")
  89. public Mono<TestDemoDto> MonoTest(@RequestBody TestDemoDto dto) {
  90. log.info("接收的DTO777=:{}", dto);
  91. TestDemoDto dto1 = new TestDemoDto();
  92. dto1.setName("返回的名字1");
  93. dto1.setAge(18);
  94. return Mono.just(dto1);
  95. }
  96. /**
  97. * 测试redis
  98. * @param dto
  99. * @return
  100. */
  101. @PostMapping("redisTest")
  102. public Mono<TestDemoDto> list5668(@RequestBody TestDemoDto dto) {
  103. log.info("接收的DTO8=:{}", dto);
  104. Boolean baaa=redisService.hasKey("aaa");
  105. log.info("在redis中aaa的key是否存在={}", baaa);
  106. TestDemoDto dto1 = new TestDemoDto();
  107. dto1.setName("直接返回Dto");
  108. dto1.setAge(26);
  109. return Mono.just(dto1);
  110. }
  111. /***
  112. * 通过http请求访问,一定要使用封装的HttpClientUtils,因为日志中同步了TraceId过去的,在日志追踪非常有用
  113. * @param response
  114. * @return
  115. */
  116. @GetMapping("httpClientDemo")
  117. public Mono<TestDemoDto> listname6(ServerHttpResponse response) {
  118. JSONObject json = new JSONObject();
  119. json.put("name", "传输名字");
  120. json.put("age", "20");
  121. Mono<TestDemoDto> js=HttpClientUtils.post("http://localhost:9700/test/listname7",json,TestDemoDto.class);
  122. js.subscribe(js1->{
  123. log.info("当前返回的Dto:{}",js1);
  124. });
  125. TestDemoDto d=js.block();
  126. log.info("在Mono外部打印日志,返回值:{}",d);
  127. String returnstr=HttpClientUtils.post("http://localhost:9700/test/listname8",json);
  128. log.info("直接返回String:{}",returnstr);
  129. return js;
  130. }
  131. /**
  132. * 测试Excel导出
  133. * @param response
  134. * @return
  135. */
  136. @GetMapping("exportExcel")
  137. public Mono<Void> exportExcel(ServerHttpResponse response) {
  138. ExcelUtil<DemoExcelDto> util = new ExcelUtil<DemoExcelDto>(DemoExcelDto.class);
  139. List<DemoExcelDto> list = new ArrayList<>();
  140. DemoExcelDto d1 = new DemoExcelDto();
  141. d1.setName("名字1");
  142. d1.setTestCode("test1");
  143. d1.setMydate(new Date());
  144. d1.setSex("1");
  145. list.add(d1);
  146. DemoExcelDto d2 = new DemoExcelDto();
  147. d2.setName("名字2");
  148. d2.setTestCode("test2");
  149. d2.setMydate(new Date());
  150. d2.setSex("2");
  151. list.add(d2);
  152. DemoExcelDto d3 = new DemoExcelDto();
  153. d3.setName("名字3");
  154. d3.setTestCode("test3");
  155. d3.setMydate(new Date());
  156. d3.setSex("2");
  157. list.add(d3);
  158. DemoExcelDto d4 = new DemoExcelDto();
  159. d4.setName("名字4");
  160. d4.setTestCode("test4");//没有值则导出来是空白
  161. d4.setMydate(new Date());
  162. d4.setSex("2");
  163. list.add(d4);
  164. return util.exportExcel(response, list, "字典数据");
  165. }
  166. /**
  167. * 返回标准Dto数据
  168. * @param sysDictData
  169. * @return
  170. */
  171. @PostMapping("normReturn")
  172. public Mono<BaseReturnDto> normReturn(@RequestBody SysDictData sysDictData) {
  173. List<SysDictData> list=DictUtil.getSysDictDataByKey(sysDictData.getDictType());
  174. return Mono.just(BaseReturnDto.success(list));
  175. }
  176. /***
  177. * 查询例子
  178. * sql写在Jpa中
  179. * @param dto
  180. * @return
  181. */
  182. @PostMapping("listPage")
  183. public Mono<BasePageResult<MyDemoDto>> listPage(@RequestBody QueryDto dto) {
  184. BasePageResult<MyDemoDto> lst=demoService.qyeryList(dto);
  185. return Mono.just(lst.success());
  186. }
  187. /***
  188. * 查询例子,直接传Dto查询
  189. * sql写在mapper.xml中
  190. * @param dto
  191. * @return
  192. */
  193. @PostMapping("listpage2")
  194. public Mono<BasePageResult<MyDemoDto>> listpage2(@RequestBody QueryDto dto) {
  195. BasePageResult<MyDemoDto> lst=demoService.qyeryList3(dto);
  196. return Mono.just(lst.success());
  197. }
  198. /**
  199. * 分页查询
  200. * @param name
  201. * @return
  202. */
  203. @GetMapping("listname2")
  204. public Mono<BasePageResult<MyDemoDto>> select1(@RequestParam("name") String name) {
  205. PageHelper.startPage(2, 10);
  206. return Mono.just(demoService.selectList1(name));
  207. }
  208. /**
  209. * 多线程测试1,子线程中的TraceId和主线程日志的TraceId保持一直,这样便于追踪日志
  210. * @return
  211. */
  212. @GetMapping("threadTest1")
  213. public Mono<MyDto> threadTest1() {
  214. log.info("当前访问了threadTest1");
  215. transServer.testsubThread();
  216. return Mono.just(MyDto.success());
  217. }
  218. /**
  219. * 返回自定义Json
  220. * @return
  221. */
  222. @GetMapping("retunJson")
  223. public Mono<MyDto<JSONObject>> retunJson() {
  224. log.info("list1");
  225. return Mono.just(MyDto.success(JSONObject.parseObject("{\"a\":1}")));
  226. }
  227. /**
  228. * 多线程测试
  229. * @param dto
  230. * @return
  231. */
  232. @PostMapping("/mothod1")
  233. public Mono<MyDto> threadTest(@RequestBody MyParmDto dto) {
  234. log.info("当前访问了mothod1");
  235. transServer.threadTest1(dto.getName());
  236. return Mono.just(MyDto.success());
  237. }
  238. /**
  239. * 接收参数
  240. * @param name
  241. * @return
  242. */
  243. @GetMapping("username")
  244. public Mono<MyDto> username(@RequestParam(value = "name", required = false) String name) {
  245. if (name == null || name.trim().isEmpty()) {
  246. JSONObject error = new JSONObject();
  247. error.put("error", "Name parameter is required and cannot be empty");
  248. MyDto d= MyDto.success(error);
  249. return Mono.just(d);
  250. }
  251. JSONObject response = new JSONObject();
  252. response.put("name", name);
  253. MyDto d= MyDto.error(response);
  254. return Mono.just(d);
  255. }
  256. /**
  257. * 返回JSON对象
  258. * @return
  259. */
  260. @GetMapping("returnJson")
  261. public Mono<BaseReturnDto<JSONObject>> anniu1(){
  262. JSONObject response = new JSONObject();
  263. response.put("name", "按钮1,编辑权限");
  264. return Mono.just(BaseReturnDto.success(response));
  265. }
  266. /**
  267. * 分布式事务测试,注意要在service方法上面加@GlobalTransactional
  268. * 如果只是本地事务那么只加@Transactional
  269. * @return
  270. */
  271. @GetMapping("remotCall")
  272. public Mono<BaseReturnDto<JSONObject>> remotCall(){
  273. JSONObject response = new JSONObject();
  274. transServer.remotCall();
  275. return Mono.just(BaseReturnDto.success(response));
  276. }
  277. }