当前位置:   article > 正文

Java项目:宠物医院预约管理系统设计和实现(java+springboot+mysql+ssm)_宠物服务预约管理的设计与实现

宠物服务预约管理的设计与实现

源码获取:博客首页 "资源" 里下载!

项目使用java SpringMVC、springboot mybatis、layui为核心技术编写


首页登录有可爱的小猫咪:

系统主页主要功能有会员信息、宠物管理、预约管理和统计分析等:

预约列表:

医院管理:

宠物档案管理:

 

监控标准医生和用户:

  1. /**
  2. * 监控标准
  3. */
  4. @Controller("UserStandardController")
  5. @RequestMapping("/user/standard")
  6. public class UserStandardController {
  7. @Autowired
  8. private StandardService standardService;
  9. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  10. /**
  11. * 医生列表页面user/standardListDoctor.html
  12. */
  13. @RequestMapping("/standardListDoctor")
  14. public String standardListDoctor() {
  15. return "user/standardListDoctor";
  16. }
  17. /**
  18. * 普通用户页面user/standardList.html
  19. */
  20. @RequestMapping("/standardList")
  21. public String standardList() {
  22. return "user/standardList";
  23. }
  24. /**
  25. * 普通用户返回查询数据
  26. */
  27. @RequestMapping("/getAllByLimit")
  28. @ResponseBody
  29. public Object getAllByLimit(Standard pojo) {
  30. return standardService.getAllByLimit(pojo);
  31. }
  32. /**
  33. * 医生返回查询数据
  34. */
  35. @RequestMapping("/getAllByLimitDoctor")
  36. @ResponseBody
  37. public Object getAllByLimitBaoJie(Standard pojo) {
  38. return standardService.getAllByLimit(pojo);
  39. }
  40. /**
  41. * 根据id删除
  42. */
  43. @RequestMapping(value = "/del")
  44. @ResponseBody
  45. @Transactional
  46. public String del(Long id) {
  47. try {
  48. standardService.deleteById(id);
  49. return "SUCCESS";
  50. } catch (Exception e) {
  51. logger.error("删除异常", e);
  52. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  53. return "ERROR";
  54. }
  55. }
  56. /**
  57. * 添加页面 user/standardAdd.html
  58. */
  59. @RequestMapping(value = "/add")
  60. public String add() {
  61. return "user/standardAdd";
  62. }
  63. /**
  64. * 插入数据库
  65. */
  66. @RequestMapping(value = "/doAdd")
  67. @ResponseBody
  68. @Transactional
  69. public String doAdd(Standard pojo) {
  70. try {
  71. standardService.add(pojo);
  72. return "SUCCESS";
  73. } catch (Exception e) {
  74. logger.error("添加异常", e);
  75. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  76. return "ERROR";
  77. }
  78. }
  79. }

宠物日志业务操作:

  1. /**
  2. * 宠物日志
  3. */
  4. @Controller("UserPetDailyController")
  5. @RequestMapping("/user/petDaily")
  6. public class UserPetDailyController {
  7. @Autowired
  8. private PetDailyService petDailyService;
  9. @Autowired
  10. private PetService petService;
  11. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  12. /**
  13. * 医生宠物日志页面user/petDailyListDoctor.html
  14. */
  15. @RequestMapping("/petDailyListDoctor")
  16. public String petListDoctor(Long petId, Model model) {
  17. if (petId!=null){
  18. model.addAttribute("petId", petId);
  19. }else {
  20. model.addAttribute("petId", "petId");
  21. }
  22. return "user/petDailyListDoctor";
  23. }
  24. /**
  25. * 普通用户宠物日志页面user/petDailyList.html
  26. */
  27. @RequestMapping("/petDailyList")
  28. public String petDailyList(Long petId, Model model) {
  29. if (petId!=null){
  30. model.addAttribute("petId", petId);
  31. }else {
  32. model.addAttribute("petId", "petId");
  33. }
  34. return "user/petDailyList";
  35. }
  36. /**
  37. * 普通用户返回查询数据
  38. */
  39. @RequestMapping("/getAllByLimit")
  40. @ResponseBody
  41. public Object getAllByLimit(PetDaily pojo) {
  42. Subject subject = SecurityUtils.getSubject();
  43. User user = (User) subject.getPrincipal();
  44. pojo.setUserId(user.getId());
  45. return petDailyService.getAllByLimit(pojo);
  46. }
  47. /**
  48. * 医生返回查询数据
  49. */
  50. @RequestMapping("/getAllByLimitDoctor")
  51. @ResponseBody
  52. public Object getAllByLimitDoctor(PetDaily pojo) {
  53. return petDailyService.getAllByLimit(pojo);
  54. }
  55. /**
  56. * 删除
  57. */
  58. @RequestMapping(value = "/del")
  59. @ResponseBody
  60. @Transactional
  61. public String del(Long id) {
  62. try {
  63. petDailyService.deleteById(id);
  64. return "SUCCESS";
  65. } catch (Exception e) {
  66. logger.error("删除异常", e);
  67. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  68. return "ERROR";
  69. }
  70. }
  71. /**
  72. * 添加页面user/petDailyAdd.html
  73. */
  74. @RequestMapping(value = "/add")
  75. public String add(Model model) {
  76. Subject subject = SecurityUtils.getSubject();
  77. User user = (User) subject.getPrincipal();
  78. Pet pet = new Pet();
  79. pet.setUserId(user.getId());
  80. pet.setPage(1);
  81. pet.setLimit(100);
  82. MMGridPageVoBean<Pet> voBean = (MMGridPageVoBean<Pet>) petService.getAllByLimit(pet);
  83. List<Pet> rows = voBean.getRows();
  84. // 获取到该用户下所有的宠物
  85. model.addAttribute("pets", rows);
  86. return "user/petDailyAdd";
  87. }
  88. /**
  89. * 插入数据库
  90. */
  91. @RequestMapping(value = "/doAdd")
  92. @ResponseBody
  93. @Transactional
  94. public String doAdd(PetDaily pojo) {
  95. Subject subject = SecurityUtils.getSubject();
  96. User user = (User) subject.getPrincipal();
  97. try {
  98. pojo.setUserId(user.getId());
  99. pojo.setCreateTime(new Date());
  100. petDailyService.add(pojo);
  101. return "SUCCESS";
  102. } catch (Exception e) {
  103. logger.error("添加异常", e);
  104. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  105. return "ERROR";
  106. }
  107. }
  108. }

用户控制器:

  1. /**
  2. * 用户控制
  3. */
  4. @Controller("User")
  5. @RequestMapping("/user")
  6. public class UserController {
  7. private final Logger logger = LoggerFactory.getLogger(UserController.class);
  8. private final ResultMap resultMap;
  9. @Autowired
  10. private UserService userService;
  11. @Autowired
  12. private UserRoleService userRoleService;
  13. @Autowired
  14. public UserController(ResultMap resultMap) {
  15. this.resultMap = resultMap;
  16. }
  17. /**
  18. * 返回有权限信息
  19. */
  20. @RequestMapping(value = "/getMessage", method = RequestMethod.GET)
  21. public ResultMap getMessage() {
  22. return resultMap.success().message("您拥有用户权限,可以获得该接口的信息!");
  23. }
  24. /**
  25. * 修改用户信息页面user/userEdit.html
  26. */
  27. @RequestMapping(value = "/editUserPage")
  28. public String editUserPage(Long userId, Model model) {
  29. model.addAttribute("manageUser", userId);
  30. if (null != userId) {
  31. User user = userService.selectByPrimaryKey(userId);
  32. model.addAttribute("manageUser", user);
  33. }
  34. return "user/userEdit";
  35. }
  36. /**
  37. * 更新数据库
  38. */
  39. @ResponseBody
  40. @RequestMapping("/updateUser")
  41. public String updateUser(User user) {
  42. return userService.updateUser(user);
  43. }
  44. }

健康评估控制器:

  1. /**
  2. * 健康评估
  3. */
  4. @Controller("HealthController")
  5. @RequestMapping("/health")
  6. public class HealthController {
  7. @Autowired
  8. private DiagnosisService diagnosisService;
  9. @Autowired
  10. private AppointmentService appointmentService;
  11. @Autowired
  12. private PetService petService;
  13. @Autowired
  14. private PetDailyService petDailyService;
  15. @Autowired
  16. private UserService userService;
  17. @Autowired
  18. private StandardService standardService;
  19. /**
  20. * 分析页面
  21. */
  22. @RequestMapping("/assess")
  23. public String applyListDoctor(Model model) {
  24. Subject subject = SecurityUtils.getSubject();
  25. User user = (User) subject.getPrincipal();
  26. Pet pet = new Pet();
  27. pet.setUserId(user.getId());
  28. pet.setPage(1);
  29. pet.setLimit(100);
  30. MMGridPageVoBean<Pet> voBean = (MMGridPageVoBean<Pet>) petService.getAllByLimit(pet);
  31. List<Pet> rows = voBean.getRows();
  32. // 获取到该用户下所有的宠物
  33. model.addAttribute("pets", rows);
  34. List<Long> applyCount = new ArrayList<>();
  35. List<String> dsCount = new ArrayList<>();
  36. List<String> tsCount = new ArrayList<>();
  37. List<String> wsCount = new ArrayList<>();
  38. List<String> hsCount = new ArrayList<>();
  39. List<String> asCount = new ArrayList<>();
  40. List<Double> pt = new ArrayList<>();
  41. List<Double> pw = new ArrayList<>();
  42. List<Double> ph = new ArrayList<>();
  43. List<Double> pa = new ArrayList<>();
  44. List<Double> mt = new ArrayList<>();
  45. List<Double> mw = new ArrayList<>();
  46. List<Double> mh = new ArrayList<>();
  47. List<Double> ma = new ArrayList<>();
  48. for(Pet p: rows){
  49. // 获取预约次数
  50. Appointment appointment = new Appointment();
  51. appointment.setPetId(p.getId());
  52. appointment.setPage(1);
  53. appointment.setLimit(1000);
  54. MMGridPageVoBean<Appointment> as = (MMGridPageVoBean<Appointment>) appointmentService.getAllByLimit(appointment);
  55. applyCount.add(as==null? 0L : as.getTotal());
  56. // 获取就诊记录
  57. Diagnosis diagnosis = new Diagnosis();
  58. diagnosis.setPetId(p.getId());
  59. diagnosis.setPage(1);
  60. diagnosis.setLimit(10);
  61. MMGridPageVoBean<Diagnosis> ds = (MMGridPageVoBean<Diagnosis>) diagnosisService.getAllByLimit(diagnosis);
  62. List<Diagnosis> dsRows = ds.getRows();
  63. int diagnosisStatus = 0;
  64. for (Diagnosis d: dsRows){
  65. diagnosisStatus += d.getStatus();
  66. }
  67. int sw = diagnosisStatus / dsRows.size();
  68. switch (sw){
  69. case 1:dsCount.add(p.getName() + " 宠物健康,请继续保持");break;
  70. case 2:dsCount.add(p.getName() + " 宠物异常请及时就诊!");break;
  71. case 3:dsCount.add(p.getName() + " 宠物病情比较严重,请及时就医!");break;
  72. case 4:dsCount.add(p.getName() + " 很抱歉宠物已无法治疗!");break;
  73. default:dsCount.add(p.getName() + " 宠物基本健康,请继续保持");break;
  74. }
  75. // 获取宠物日志
  76. PetDaily petDaily = new PetDaily();
  77. petDaily.setPetId(p.getId());
  78. petDaily.setPage(1);
  79. petDaily.setLimit(10);
  80. MMGridPageVoBean<PetDaily> ps = (MMGridPageVoBean<PetDaily>) petDailyService.getAllByLimit(petDaily);
  81. List<PetDaily> psRows = ps.getRows();
  82. double t = 0;
  83. double w = 0;
  84. double h = 0;
  85. double a = 0;
  86. for (PetDaily petDaily1 : psRows){
  87. t+=petDaily1.getTemperature();
  88. w+=petDaily1.getWeight();
  89. h+=petDaily1.getHeight();
  90. a+=petDaily1.getAppetite();
  91. }
  92. t = t/psRows.size();
  93. w = w/psRows.size();
  94. h = h/psRows.size();
  95. a = a/psRows.size();
  96. pt.add(t);
  97. pw.add(w);
  98. ph.add(h);
  99. pa.add(a);
  100. // 获取标准
  101. Standard standard = new Standard();
  102. // 对应宠物类型
  103. standard.setType(p.getType());
  104. // 健康标准
  105. standard.setStatus(1);
  106. int petAge = MyUtils.get2DateDay(MyUtils.getDate2String(p.getBirthday(), "yyyy-MM-dd"), MyUtils.getDate2String(new Date(), "yyyy-MM-dd"));
  107. petAge = (petAge<0? -petAge : petAge)/365;
  108. // 年龄
  109. standard.setAgeMax(petAge);
  110. standard.setPage(1);
  111. standard.setLimit(100);
  112. MMGridPageVoBean<Standard> ss = (MMGridPageVoBean<Standard>) standardService.getAllByLimit(standard);
  113. List<Standard> ssRows = ss.getRows();
  114. double tsMin = 0;
  115. double tsMax = 0;
  116. double wsMin = 0;
  117. double wsMax = 0;
  118. double hsMin = 0;
  119. double hsMax = 0;
  120. double asMin = 0;
  121. double asMax = 0;
  122. for (Standard s : ssRows){
  123. tsMin+=s.getTempMin();
  124. tsMax+=s.getTempMax();
  125. wsMin+=s.getWeightMin();
  126. wsMax+=s.getWeightMax();
  127. hsMin+=s.getHeightMin();
  128. hsMax+=s.getHeightMax();
  129. asMin+=s.getAppetiteMin();
  130. asMax+=s.getAppetiteMax();
  131. }
  132. tsMin = tsMin / ssRows.size();
  133. tsMax = tsMax / ssRows.size();
  134. wsMin = wsMin / ssRows.size();
  135. wsMax = wsMax / ssRows.size();
  136. hsMin = hsMin / ssRows.size();
  137. hsMax = hsMax / ssRows.size();
  138. asMin = asMin / ssRows.size();
  139. asMax = asMax / ssRows.size();
  140. mt.add(tsMax);
  141. mw.add(wsMax);
  142. mh.add(hsMax);
  143. ma.add(asMax);
  144. if (t>=tsMin && t<=tsMax){
  145. tsCount.add(" 体温正常");
  146. }else if (t<tsMin){
  147. tsCount.add( " 体温偏低");
  148. }else if (t>tsMax){
  149. tsCount.add( " 体温偏高");
  150. }
  151. if (w>=wsMin && w<=wsMax){
  152. wsCount.add( " 体重正常");
  153. }else if (w<wsMin){
  154. wsCount.add(" 体重偏低");
  155. }else if (w>wsMax){
  156. wsCount.add(" 体重偏高");
  157. }
  158. if (h>=hsMin && h<=hsMax){
  159. hsCount.add(" 身高正常");
  160. }else if (h<hsMin){
  161. hsCount.add( " 身高偏低");
  162. }else if (h>hsMax){
  163. hsCount.add(" 身高偏高");
  164. }
  165. if (a>=asMin && a<=asMax){
  166. asCount.add( " 饭量正常");
  167. }else if (a<asMin){
  168. asCount.add(" 饭量偏低");
  169. }else if (a>asMax){
  170. asCount.add(" 饭量偏高");
  171. }
  172. }
  173. model.addAttribute("pets", rows);
  174. model.addAttribute("tsCount", tsCount);
  175. model.addAttribute("wsCount", wsCount);
  176. model.addAttribute("hsCount", hsCount);
  177. model.addAttribute("asCount", asCount);
  178. model.addAttribute("dsCount", dsCount);
  179. System.out.println(pt);
  180. model.addAttribute("pt", pt);
  181. model.addAttribute("ph", ph);
  182. model.addAttribute("pw", pw);
  183. model.addAttribute("pa", pa);
  184. model.addAttribute("mt", mt);
  185. model.addAttribute("mh", mh);
  186. model.addAttribute("mw", mw);
  187. model.addAttribute("ma", ma);
  188. return "tj/assess";
  189. }
  190. /**
  191. * 普通用户预约统计
  192. */
  193. @RequestMapping("/tjApply")
  194. public String tjApply(Model model) {
  195. Subject subject = SecurityUtils.getSubject();
  196. User user = (User) subject.getPrincipal();
  197. Appointment appointment = new Appointment();
  198. appointment.setUserId(user.getId());
  199. appointment.setPage(1);
  200. appointment.setLimit(99999);
  201. MMGridPageVoBean<Appointment> voBean = (MMGridPageVoBean<Appointment>) appointmentService.getAllByLimit(appointment);
  202. List<Appointment> rows = voBean.getRows();
  203. Integer a1 = 0;
  204. Integer a2 = 0;
  205. Integer a3 = 0;
  206. Integer a4 = 0;
  207. for (Appointment a: rows){
  208. switch (a.getStatus()){
  209. case 1: a1++;break;
  210. case 2: a2++;break;
  211. case 3: a3++;break;
  212. case 4: a4++;break;
  213. }
  214. }
  215. model.addAttribute("a1", a1);
  216. model.addAttribute("a2", a2);
  217. model.addAttribute("a3", a3);
  218. model.addAttribute("a4", a4);
  219. return "tj/tjApply";
  220. }
  221. /**
  222. * 医生预约统计
  223. */
  224. @RequestMapping("/tjApplyDoctor")
  225. public String tjApplyDoctor(Model model) {
  226. Appointment appointment = new Appointment();
  227. appointment.setPage(1);
  228. appointment.setLimit(99999);
  229. MMGridPageVoBean<Appointment> voBean = (MMGridPageVoBean<Appointment>) appointmentService.getAllByLimit(appointment);
  230. List<Appointment> rows = voBean.getRows();
  231. Integer a1 = 0;
  232. Integer a2 = 0;
  233. Integer a3 = 0;
  234. Integer a4 = 0;
  235. for (Appointment a: rows){
  236. switch (a.getStatus()){
  237. case 1: a1++;break;
  238. case 2: a2++;break;
  239. case 3: a3++;break;
  240. case 4: a4++;break;
  241. }
  242. }
  243. model.addAttribute("a1", a1);
  244. model.addAttribute("a2", a2);
  245. model.addAttribute("a3", a3);
  246. model.addAttribute("a4", a4);
  247. return "tj/tjApplyDoctor";
  248. }
  249. /**
  250. * 普通用户宠物日志统计
  251. */
  252. @RequestMapping("/tjDaily")
  253. public String tjDaily(Model model) {
  254. Subject subject = SecurityUtils.getSubject();
  255. User user = (User) subject.getPrincipal();
  256. Pet pet = new Pet();
  257. pet.setUserId(user.getId());
  258. pet.setPage(1);
  259. pet.setLimit(99999);
  260. MMGridPageVoBean<Pet> voBean = (MMGridPageVoBean<Pet>) petService.getAllByLimit(pet);
  261. List<Pet> rows = voBean.getRows();
  262. model.addAttribute("pets", rows);
  263. if (rows.size()>0){
  264. pet = rows.get(0);
  265. PetDaily daily = new PetDaily();
  266. daily.setPetId(pet.getId());
  267. daily.setPage(1);
  268. daily.setLimit(99999);
  269. MMGridPageVoBean<PetDaily> ppp = (MMGridPageVoBean<PetDaily>) petDailyService.getAllByLimit(daily);
  270. List<PetDaily> list = ppp.getRows();
  271. for (PetDaily p : list){
  272. p.setDateTime(MyUtils.getDate2String(p.getCreateTime(), "yyyy-MM-dd"));
  273. }
  274. model.addAttribute("dailys", list);
  275. }
  276. return "tj/tjDaily";
  277. }
  278. /**
  279. * 医生宠物日志统计
  280. */
  281. @RequestMapping("/tjDailyDoctor")
  282. public String tjDailyDoctor(Model model) {
  283. Pet pet = new Pet();
  284. pet.setPage(1);
  285. pet.setLimit(99999);
  286. MMGridPageVoBean<Pet> voBean = (MMGridPageVoBean<Pet>) petService.getAllByLimit(pet);
  287. List<Pet> rows = voBean.getRows();
  288. model.addAttribute("pets", rows);
  289. if (rows.size()>0){
  290. pet = rows.get(0);
  291. PetDaily daily = new PetDaily();
  292. daily.setPetId(pet.getId());
  293. daily.setPage(1);
  294. daily.setLimit(99999);
  295. MMGridPageVoBean<PetDaily> ppp = (MMGridPageVoBean<PetDaily>) petDailyService.getAllByLimit(daily);
  296. List<PetDaily> list = ppp.getRows();
  297. for (PetDaily p : list){
  298. p.setDateTime(MyUtils.getDate2String(p.getCreateTime(), "yyyy-MM-dd"));
  299. }
  300. model.addAttribute("dailys", list);
  301. }
  302. return "tj/tjDailyDoctor";
  303. }
  304. /**
  305. * 普通用户查询条件数据返回宠物日志
  306. */
  307. @RequestMapping("/tjDailyData")
  308. @ResponseBody
  309. public Object tjDailyData(Long id){
  310. PetDaily daily = new PetDaily();
  311. daily.setPetId(id);
  312. daily.setPage(1);
  313. daily.setLimit(99999);
  314. MMGridPageVoBean<PetDaily> ppp = (MMGridPageVoBean<PetDaily>) petDailyService.getAllByLimit(daily);
  315. List<PetDaily> list = ppp.getRows();
  316. for (PetDaily p : list){
  317. p.setDateTime(MyUtils.getDate2String(p.getCreateTime(), "yyyy-MM-dd"));
  318. }
  319. return list;
  320. }
  321. /**
  322. * 医生查询条件数据返回宠物日志
  323. */
  324. @RequestMapping("/tjDailyDataDoctor")
  325. @ResponseBody
  326. public Object tjDailyDataDoctor(Long id){
  327. PetDaily daily = new PetDaily();
  328. daily.setPetId(id);
  329. daily.setPage(1);
  330. daily.setLimit(99999);
  331. MMGridPageVoBean<PetDaily> ppp = (MMGridPageVoBean<PetDaily>) petDailyService.getAllByLimit(daily);
  332. List<PetDaily> list = ppp.getRows();
  333. for (PetDaily p : list){
  334. p.setDateTime(MyUtils.getDate2String(p.getCreateTime(), "yyyy-MM-dd"));
  335. }
  336. return list;
  337. }
  338. /**
  339. * 用户查看医生空闲时间
  340. */
  341. @RequestMapping(value = "/freeTime")
  342. public String freeTime(Model model) {
  343. List<User> doctors = userService.listDoctor();
  344. model.addAttribute("doctors", doctors);
  345. Long docId = doctors.get(0).getId();
  346. model.addAttribute("docName", doctors.get(0).getName());
  347. String nowDateYMD = MyUtils.getNowDateYMD();
  348. List<Map<String, Object>> map = appointmentService.getFreeTimeById(docId, nowDateYMD+MyUtils.START_HOUR);
  349. List<String> time = new ArrayList<>();
  350. List<Long> value = new ArrayList<>();
  351. for (Map<String, Object> m : map){
  352. String df = (String) m.get("df");
  353. time.add(df);
  354. Long v = (Long) m.get("c");
  355. if (v == null) {
  356. value.add(0L);
  357. }else {
  358. value.add(v);
  359. }
  360. }
  361. model.addAttribute("time", time);
  362. model.addAttribute("value", value);
  363. return "tj/freeTime";
  364. }
  365. @RequestMapping(value = "/getFreeTime")
  366. @ResponseBody
  367. public Object getFreeTime(Long id, String date) {
  368. User doctors = userService.selectByPrimaryKey(id);
  369. Map<String, Object> result = new HashMap<>();
  370. result.put("n", doctors.getName());
  371. List<Map<String, Object>> map = appointmentService.getFreeTimeById(id, date+MyUtils.START_HOUR);
  372. List<String> time = new ArrayList<>();
  373. List<Long> value = new ArrayList<>();
  374. for (Map<String, Object> m : map){
  375. String df = (String) m.get("df");
  376. time.add(df+"点");
  377. Long v = (Long) m.get("c");
  378. if (v == null) {
  379. value.add(0L);
  380. }else {
  381. value.add(v);
  382. }
  383. }
  384. result.put("t", time);
  385. result.put("v", value);
  386. return result;
  387. }
  388. }

源码获取:博客首页 "资源" 里下载!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/377555
推荐阅读
相关标签
  

闽ICP备14008679号