基于SSM的个性化点餐配送系统

基于SSM的个性化点餐配送系统

功能需求

本个性化点餐配配送系统总体上分为前端模块与后端模块,前端模块按照使用者的不同分为用户模块、商户模块、配送员模块。用户模块分为注册登录功能、个人信息修改功能、点餐功能。商家模块分为注册登录功能、商家信息修改功能、接单功能、库存管理功能。配送员模块分为注册登录功能、配送员信息管理功能、配送功能。后端模块分为管理员注册管理功能、用户信息管理功能、商家信息管理功能、配送员信息管理功能以及订单信息管理功能。需要解决其中各个信息表直接的调用与依赖关系,尽可能的在系统上进行优化,提高用户的使用体验。

以下是各个模块大概所需功能的描述:

  1. 登录注册模块:这个需要满足不同用户(客户、商家、配送员、管理员)在注册登录后有不同的权限与功能,并且为了保障其使用的安全性,需要在输入正确的账号和密码后方可登录本系统。
  2. 信息管理模块:为了保障用户信息的安全性,这个模块也需要满足不同用户在自己的权限内,只能对自己信息的修改与管理,除了管理员拥有最高的权限可以统一管理其他三种用户的信息,其他用户不能跨越自己的权限查看修改他人权限。
  3. 点餐模块:为了满足客户点餐的需求,在点餐模块下,客户可以查看不同商家的产品信息,在选择需要的产品后可以进行下单与支付,并且最后还有订单是否送到的确认功能,如若订单有问题可以向管理员发起投诉。
  4. 投诉模块:为了防止用户在使用本系统的过程中出现问题或者差错,可以通过投诉模块描述出现的问题,管理员会在看到到第一时间去处理。
  5. 接单模块:只要是为了满足商家的需求,在客户点餐过后,对应的商家可以查看自家店铺的点餐信息,在核对信息无误后,确认接单。
  6. 配送模块:配送员可以在商家确认接单并指定配送员后,对应的配送员可以查看到配送信息,确认无误后进行商品配送。
  7. 库存模块:是配送员将商品送达后,会存放在相应的库房中,并记录此时库房还可以存放的信息。
  8. 管理员模块:管理员可以在自己的权限内查看与修改其他用户的信息,但是都需要在合法、合规的情况下使用权限,否则会对其私自行为进行处罚。

安全需求 

1.需要输入用户名与密码才能登陆本系统

2.输入的登陆密码需要以“*”显示

3.禁止非法数据写入

4.对于各种错误可以做到提醒或纠正

5.约束表格中部分属性的内容

6.防止数据库查询发生 SQL 注入的攻击

7.不同角色的用户权限不同

可行性分析

本个性化点餐配送系统经济方面是可行的。一方面,只要有能上网的电脑,系统的管理员在任何地方任何时候都可以管理,工作效率进一步提高从而节省人力、物力,只要会打字即可,不需要很高的学历;另一方面,系统的制作成本低,在现有的PC机上即可使用eclipse开发者工具进行开发。

本个性化点餐配送系统社会方面是可行的。个性化点餐配送系统具有良好的发展前景随着疫情的出现,无接触配送在保障疫情防控不受影响的情况下,即时的为居民解决日常饮食生活等需求,城镇化进程的不断深入使得外卖行业愈发重要。尤其是本系统是为医院、高校等人员密集场所的餐厅实现包餐服务,所以发展前景是完全没有问题的。

本个性化点餐配送系统技术方面是完全可行的。以Windows10为操作系统,基于java的jdk和tomcat,采用eclipse软件为开发后台管理,运用mysql进行数据库存储;后台管理系统硬件环境是PC机,用户使用任何能上网的电脑设置,使用浏览器即可访问在线外卖点餐系统。

部分代码

package com.controller;import java.io.File;
import java.io.IOException;import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.PrintWriter;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;import com.entity.Caipinxinxi;
import com.server.CaipinxinxiServer;
import com.util.PageBean;
import net.sf.json.JSONObject;
import com.util.db;
import java.sql.SQLException;
import java.sql.*;
@Controller
public class CaipinxinxiController {@Resourceprivate CaipinxinxiServer caipinxinxiService;@RequestMapping("addCaipinxinxi.do")public String addCaipinxinxi(HttpServletRequest request,Caipinxinxi caipinxinxi,HttpSession session) throws SQLException{Timestamp time=new Timestamp(System.currentTimeMillis());caipinxinxi.setAddtime(time.toString().substring(0, 19));caipinxinxiService.add(caipinxinxi);db dbo = new db();//kuabiaogaizhisession.setAttribute("backxx", "添加成功");session.setAttribute("backurl", request.getHeader("Referer"));return "redirect:postback.jsp";}@RequestMapping("addCaipinxinxiqt.do")public String addCaipinxinxiqt(HttpServletRequest request,Caipinxinxi caipinxinxi,HttpSession session) throws SQLException{Timestamp time=new Timestamp(System.currentTimeMillis());caipinxinxi.setAddtime(time.toString().substring(0, 19));caipinxinxiService.add(caipinxinxi);db dbo = new db();//kuabiaogaizhisession.setAttribute("backxx", "添加成功");session.setAttribute("backurl", request.getHeader("Referer"));return "redirect:postback.jsp";}//	处理编辑@RequestMapping("doUpdateCaipinxinxi.do")public String doUpdateCaipinxinxi(int id,ModelMap map,Caipinxinxi caipinxinxi){caipinxinxi=caipinxinxiService.getById(id);map.put("caipinxinxi", caipinxinxi);return "caipinxinxi_updt";}//	后台详细@RequestMapping("caipinxinxiDetail.do")public String caipinxinxiDetail(int id,ModelMap map,Caipinxinxi caipinxinxi){caipinxinxi=caipinxinxiService.getById(id);map.put("caipinxinxi", caipinxinxi);return "caipinxinxi_detail";}
//	前台详细@RequestMapping("cpxxDetail.do")public String cpxxDetail(int id,ModelMap map,Caipinxinxi caipinxinxi){caipinxinxi=caipinxinxiService.getById(id);map.put("caipinxinxi", caipinxinxi);return "caipinxinxidetail";}
//	@RequestMapping("updateCaipinxinxi.do")public String updateCaipinxinxi(int id,ModelMap map,Caipinxinxi caipinxinxi,HttpServletRequest request,HttpSession session){caipinxinxiService.update(caipinxinxi);session.setAttribute("backxx", "修改成功");session.setAttribute("backurl", request.getHeader("Referer"));return "redirect:postback.jsp";}//	分页查询@RequestMapping("caipinxinxiList.do")public String caipinxinxiList(@RequestParam(value="page",required=false)String page,ModelMap map,HttpSession session,Caipinxinxi caipinxinxi, String caipinmingcheng, String caipinleibie, String caipinzhaopian, String caipinjiage, String caipinjianjie, String shangjiazhanghao, String shangjiamingcheng, String shangjiadizhi, String shangjiadianhua){if(page==null||page.equals("")){page="1";}PageBean pageBean=new PageBean(Integer.parseInt(page), 5);Map<String, Object> pmap=new HashMap<String,Object>();pmap.put("pageno", pageBean.getStart());pmap.put("pageSize", 5);if(caipinmingcheng==null||caipinmingcheng.equals("")){pmap.put("caipinmingcheng", null);}else{pmap.put("caipinmingcheng", caipinmingcheng);}if(caipinleibie==null||caipinleibie.equals("")){pmap.put("caipinleibie", null);}else{pmap.put("caipinleibie", caipinleibie);}if(caipinzhaopian==null||caipinzhaopian.equals("")){pmap.put("caipinzhaopian", null);}else{pmap.put("caipinzhaopian", caipinzhaopian);}if(caipinjiage==null||caipinjiage.equals("")){pmap.put("caipinjiage", null);}else{pmap.put("caipinjiage", caipinjiage);}if(caipinjianjie==null||caipinjianjie.equals("")){pmap.put("caipinjianjie", null);}else{pmap.put("caipinjianjie", caipinjianjie);}if(shangjiazhanghao==null||shangjiazhanghao.equals("")){pmap.put("shangjiazhanghao", null);}else{pmap.put("shangjiazhanghao", shangjiazhanghao);}if(shangjiamingcheng==null||shangjiamingcheng.equals("")){pmap.put("shangjiamingcheng", null);}else{pmap.put("shangjiamingcheng", shangjiamingcheng);}if(shangjiadizhi==null||shangjiadizhi.equals("")){pmap.put("shangjiadizhi", null);}else{pmap.put("shangjiadizhi", shangjiadizhi);}if(shangjiadianhua==null||shangjiadianhua.equals("")){pmap.put("shangjiadianhua", null);}else{pmap.put("shangjiadianhua", shangjiadianhua);}int total=caipinxinxiService.getCount(pmap);pageBean.setTotal(total);List<Caipinxinxi> list=caipinxinxiService.getByPage(pmap);map.put("page", pageBean);map.put("list", list);session.setAttribute("p", 1);return "caipinxinxi_list";}@RequestMapping("caipinxinxiList2.do")public String caipinxinxiList2(@RequestParam(value="page",required=false)String page,ModelMap map,HttpSession session,Caipinxinxi caipinxinxi, String caipinmingcheng, String caipinleibie, String caipinzhaopian, String caipinjiage, String caipinjianjie, String shangjiazhanghao, String shangjiamingcheng, String shangjiadizhi, String shangjiadianhua,HttpServletRequest request){/*if(session.getAttribute("user")==null){return "login";}*/if(page==null||page.equals("")){page="1";}PageBean pageBean=new PageBean(Integer.parseInt(page), 15);Map<String, Object> pmap=new HashMap<String,Object>();pmap.put("pageno", pageBean.getStart());pmap.put("pageSize", 15);pmap.put("shangjiazhanghao", (String)request.getSession().getAttribute("username"));if(caipinmingcheng==null||caipinmingcheng.equals("")){pmap.put("caipinmingcheng", null);}else{pmap.put("caipinmingcheng", caipinmingcheng);}if(caipinleibie==null||caipinleibie.equals("")){pmap.put("caipinleibie", null);}else{pmap.put("caipinleibie", caipinleibie);}if(caipinzhaopian==null||caipinzhaopian.equals("")){pmap.put("caipinzhaopian", null);}else{pmap.put("caipinzhaopian", caipinzhaopian);}if(caipinjiage==null||caipinjiage.equals("")){pmap.put("caipinjiage", null);}else{pmap.put("caipinjiage", caipinjiage);}if(caipinjianjie==null||caipinjianjie.equals("")){pmap.put("caipinjianjie", null);}else{pmap.put("caipinjianjie", caipinjianjie);}if(shangjiamingcheng==null||shangjiamingcheng.equals("")){pmap.put("shangjiamingcheng", null);}else{pmap.put("shangjiamingcheng", shangjiamingcheng);}if(shangjiadizhi==null||shangjiadizhi.equals("")){pmap.put("shangjiadizhi", null);}else{pmap.put("shangjiadizhi", shangjiadizhi);}if(shangjiadianhua==null||shangjiadianhua.equals("")){pmap.put("shangjiadianhua", null);}else{pmap.put("shangjiadianhua", shangjiadianhua);}int total=caipinxinxiService.getCount(pmap);pageBean.setTotal(total);List<Caipinxinxi> list=caipinxinxiService.getByPage(pmap);map.put("page", pageBean);map.put("list", list);session.setAttribute("p", 1);return "caipinxinxi_list2";}@RequestMapping("cpxxList.do")public String cpxxList(@RequestParam(value="page",required=false)String page,ModelMap map,HttpSession session,Caipinxinxi caipinxinxi, String caipinmingcheng, String caipinleibie, String caipinzhaopian, String caipinjiage, String caipinjianjie, String shangjiazhanghao, String shangjiamingcheng, String shangjiadizhi, String shangjiadianhua){if(page==null||page.equals("")){page="1";}PageBean pageBean=new PageBean(Integer.parseInt(page), 5);Map<String, Object> pmap=new HashMap<String,Object>();pmap.put("pageno", pageBean.getStart());pmap.put("pageSize", 5);if(caipinmingcheng==null||caipinmingcheng.equals("")){pmap.put("caipinmingcheng", null);}else{pmap.put("caipinmingcheng", caipinmingcheng);}if(caipinleibie==null||caipinleibie.equals("")){pmap.put("caipinleibie", null);}else{pmap.put("caipinleibie", caipinleibie);}if(caipinzhaopian==null||caipinzhaopian.equals("")){pmap.put("caipinzhaopian", null);}else{pmap.put("caipinzhaopian", caipinzhaopian);}if(caipinjiage==null||caipinjiage.equals("")){pmap.put("caipinjiage", null);}else{pmap.put("caipinjiage", caipinjiage);}if(caipinjianjie==null||caipinjianjie.equals("")){pmap.put("caipinjianjie", null);}else{pmap.put("caipinjianjie", caipinjianjie);}if(shangjiazhanghao==null||shangjiazhanghao.equals("")){pmap.put("shangjiazhanghao", null);}else{pmap.put("shangjiazhanghao", shangjiazhanghao);}if(shangjiamingcheng==null||shangjiamingcheng.equals("")){pmap.put("shangjiamingcheng", null);}else{pmap.put("shangjiamingcheng", shangjiamingcheng);}if(shangjiadizhi==null||shangjiadizhi.equals("")){pmap.put("shangjiadizhi", null);}else{pmap.put("shangjiadizhi", shangjiadizhi);}if(shangjiadianhua==null||shangjiadianhua.equals("")){pmap.put("shangjiadianhua", null);}else{pmap.put("shangjiadianhua", shangjiadianhua);}int total=caipinxinxiService.getCount(pmap);pageBean.setTotal(total);List<Caipinxinxi> list=caipinxinxiService.getByPage(pmap);map.put("page", pageBean);map.put("list", list);session.setAttribute("p", 1);return "caipinxinxilist";}@RequestMapping("cpxxListtp.do")public String cpxxListtp(@RequestParam(value="page",required=false)String page,ModelMap map,HttpSession session,Caipinxinxi caipinxinxi, String caipinmingcheng, String caipinleibie, String caipinzhaopian, String caipinjiage, String caipinjianjie, String shangjiazhanghao, String shangjiamingcheng, String shangjiadizhi, String shangjiadianhua){if(page==null||page.equals("")){page="1";}PageBean pageBean=new PageBean(Integer.parseInt(page), 8);Map<String, Object> pmap=new HashMap<String,Object>();pmap.put("pageno", pageBean.getStart());pmap.put("pageSize", 8);if(caipinmingcheng==null||caipinmingcheng.equals("")){pmap.put("caipinmingcheng", null);}else{pmap.put("caipinmingcheng", caipinmingcheng);}if(caipinleibie==null||caipinleibie.equals("")){pmap.put("caipinleibie", null);}else{pmap.put("caipinleibie", caipinleibie);}if(caipinzhaopian==null||caipinzhaopian.equals("")){pmap.put("caipinzhaopian", null);}else{pmap.put("caipinzhaopian", caipinzhaopian);}if(caipinjiage==null||caipinjiage.equals("")){pmap.put("caipinjiage", null);}else{pmap.put("caipinjiage", caipinjiage);}if(caipinjianjie==null||caipinjianjie.equals("")){pmap.put("caipinjianjie", null);}else{pmap.put("caipinjianjie", caipinjianjie);}if(shangjiazhanghao==null||shangjiazhanghao.equals("")){pmap.put("shangjiazhanghao", null);}else{pmap.put("shangjiazhanghao", shangjiazhanghao);}if(shangjiamingcheng==null||shangjiamingcheng.equals("")){pmap.put("shangjiamingcheng", null);}else{pmap.put("shangjiamingcheng", shangjiamingcheng);}if(shangjiadizhi==null||shangjiadizhi.equals("")){pmap.put("shangjiadizhi", null);}else{pmap.put("shangjiadizhi", shangjiadizhi);}if(shangjiadianhua==null||shangjiadianhua.equals("")){pmap.put("shangjiadianhua", null);}else{pmap.put("shangjiadianhua", shangjiadianhua);}int total=caipinxinxiService.getCount(pmap);pageBean.setTotal(total);List<Caipinxinxi> list=caipinxinxiService.getByPage(pmap);map.put("page", pageBean);map.put("list", list);session.setAttribute("p", 1);return "caipinxinxilisttp";}@RequestMapping("deleteCaipinxinxi.do")public String deleteCaipinxinxi(int id,HttpServletRequest request,HttpSession session){caipinxinxiService.delete(id);session.setAttribute("backxx", "删除成功");session.setAttribute("backurl", request.getHeader("Referer"));return "redirect:postback.jsp";}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastAPI Web框架教程 第11章 请求响应的进阶用法

11-1 直接使用Request对象 关于请求的操作&#xff0c;比如从URL中提取路径参数&#xff0c;获取查询参数&#xff0c;获取请求头&#xff0c;获取Cookie&#xff0c;获取请求体中的数据&#xff1b;这些参数和值的获取非常方便&#xff0c;这是因为FastAPI帮我们创造便利。 F…

iOS系统文件路径解析:探索苹果手机中各类重要文件的存储位置

​ 目录 引言 用户登录工具和连接设备 查看设备信息&#xff0c;电池信息 查看硬盘信息 硬件信息 查看 基带信息 销售信息 电脑可对手机应用程序批量操作 运行APP和查看APP日志 IPA包安装测试 注意事项 引言 苹果手机与安卓手机不同&#xff0c;无法直接访问系统文件…

从《布瓦尔与佩库歇》实践中学习社会科学概论

从《布瓦尔与佩库歇》实践中学习社会科学概论 前情提要《布瓦尔与佩库歇》实践笔记云藏山鹰社会科学概论报告核心--信息形数身知™意合™意气实体过程意气实体过程宇宙学诠释™ 社会科学概论花间流风版导读&#xff0c;马斯克风格演讲[ 一尚韬竹团队供稿&#xff1b;] 内容展开…

音乐家马常旭当选为中华名人库委员会副主席

4月2日&#xff0c;据中华名人库官网显示&#xff0c;马常旭已当选为中华名人库委员会副主席。此前马常旭是一名音乐家、中国内地著名男歌手。 马常旭资料 马常旭&#xff0c;男&#xff0c;汉族&#xff0c;2002年10月生&#xff0c;辽宁大连人。现任中华名人库委员会副主席&…

数据结构第二版-陈越 第1章 概论

定义&#xff1a; 题或例子&#xff1a; 循环和递归两种方法 循环体不同

neutron 运维命令

OpenStack Neutron是OpenStack云计算平台的网络组件&#xff0c;负责管理和连接虚拟机&#xff08;VM&#xff09;和其他计算资源之间的网络。Neutron提供了一组API和插件&#xff0c;以便实现各种网络拓扑和服务&#xff0c;支持虚拟网络和物理网络的管理、配置和调度&#xf…

AtCoder Beginner Contest 347 (B,C,D,E)

B - Substring (atcoder.jp) 问题陈述 您将得到一个由小写英文字母组成的字符串 S 。 S 有多少不同的非空子字符串? 子字符串是一个连续子序列。例如&#xff0c; xxx 是 yxxx 的子字符串&#xff0c;但不是 xxyxx 的子字符串。 解析&#xff1a; 对于数据范围不超过100&…

vk-unicloud 框架 H5 浏览器无法登录访问 Client platform is h5, but web was found in config

最开始出现的bug 进入云函数查看日志 Client platform is h5, but web was found in config 把这个问题扔到百度是没有答案的&#xff0c;但是找到一个类似问题 &#xff1a;Client platform is app, but app-plus was found in config. 顺藤摸瓜到uniCloud的官方文档 关于pr…

MNN介绍安装编译详解

MNN是一个高效、轻量的深度学习框架&#xff0c;它支持深度模型的推理与训练&#xff0c;尤其在端侧的推理与训练性能在业界处于领先地位。MNN已经在阿里巴巴的多个App中使用&#xff0c;覆盖多个场景&#xff0c;同时在IoT等场景下也有若干应用。它支持TensorFlow、Caffe、ONN…

python coding with ChatGPT 专题2| 全解递归算法

文章目录 递归与栈的关系如何思考递归汉诺塔 经典题目入门&#xff1a;斐波那契数列分治法&#xff1a;归并排序树的递归遍历组合问题&#xff1a;子集搜索问题&#xff1a;N皇后 拓展阶乘的迭代法斐波那契数列迭代法青蛙跳 参考文献 掌握递归是解决许多编程问题的关键&#xf…

isaacgym 渲染黑屏

问题描述&#xff1a; isaacgym安装完IsaacGym_Preview_4_Package.tar.gz之后&#xff0c;运行python joint_monkey.py没有任何内容现实&#xff0c;但是终端还是正常输出信息。 环境是ubuntu22服务器&#xff0c;python3.8&#xff0c;nvidia Driver Version: 515.65.01 CUDA…

Google HTML/CSS 风格指南

1、Background 背景 本文档定义了 HTML 和 CSS 的格式和样式规则。它旨在 改善协作、代码质量并启用支持基础设施。 它适用于使用 HTML 和 CSS 的原始工作文件&#xff0c;包括 GSS 文件。 工具可以自由地混淆、缩小和编译&#xff0c;只要通用代码 保持质量。 2、常规 2.1、…

【JavaSE】解密 继承和多态(下)

前言 紧接着上篇 解密继承和多态&#xff08;上&#xff09;~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 protected关键字 在同一包下同一类可以访问 代码理解 在同一包下不同类可以访问 代码理解 …

HarmonyOS 应用开发之LifecycleForm接口切换LifecycleApp接口切换 LifecycleApp接口切换

LifecycleForm接口切换 FA模型接口Stage模型接口对应d.ts文件Stage模型对应接口onCreate?(want: Want): formBindingData.FormBindingData;ohos.app.form.FormExtensionAbility.d.tsonAddForm(want: Want): formBindingData.FormBindingData;onCastToNormal?(formId: string…

蓝桥杯每日一题:壁画(前缀和)

题目描述&#xff1a; Thanh 想在一面被均分为 N 段的墙上画一幅精美的壁画。 每段墙面都有一个美观评分&#xff0c;这表示它的美观程度&#xff08;如果它的上面有画的话&#xff09;。 不幸的是&#xff0c;由于洪水泛滥&#xff0c;墙体开始崩溃&#xff0c;所以他需要加…

Octavia Venture 成立,打造数十亿美元规模的 AI 价值体系

​随着 OpenAI 相继发布 ChatGPT、Sora 等 AIGC 大模型后&#xff0c;AI 赛道的发展迎来了一轮又一轮的热潮&#xff0c;这也让极具想象力的 AI 赛道涌入大量资金&#xff0c;比如英伟达股票市值短时间内从 1 万亿美元暴涨至 2 万亿美元&#xff0c;就是最好的佐证。当然&#…

Linux ssh免密登录配置

步骤 在本地机器上生成公钥和私钥对。将本地公钥复制到远程机器的~/.ssh/authorized_keys文件中。 实现1 在服务器上生成SSH密钥对 ssh-keygen -t rsa -f /home/id_rsa1ssh-keygen: 这是一个用于生成、管理和转换 SSH 密钥的 OpenSSH 工具。-t rsa: 用于指定要生成的密钥类…

Memcached 教程之 Memcached replace 命令(七)

Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。 如果 key 不存在&#xff0c;则替换失败&#xff0c;并且您将获得响应 NOT_STORED。 语法&#xff1a; replace 命令的基本语法格式如下&#xff1a; replace key flags exptime bytes [noreply] value…

Python学习:面相对象

面向对象 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实…

【AI绘画/作图】风景背景类关键词模板参考

因为ds官网被墙,所以翻了IDE的源码整理了下stablestudio里的官方模板&#xff0c;顺便每个模板生成了一份…不知道怎么写关键词的可以参考 Stunning sunset over a futuristic city, with towering skyscrapers and flying vehicles, golden hour lighting and dramatic cloud…