加入redis,缓存验证码和菜品,并且使用Spring

master
sheng 2 years ago
parent 71d45e7026
commit 77045d23b3

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="take_out" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="take_out" options="-parameters" />
</option>
</component>
</project>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" />
</remote-repository>
</component>
</project>

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

@ -0,0 +1,575 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AutoImportSettings">
<option name="autoReloadType" value="SELECTIVE" />
</component>
<component name="ChangeListManager">
<list default="true" id="09a0ab93-8583-4cca-9183-2b28acbb0d2c" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/jarRepositories.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/uiDesigner.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/TakeOutApplication.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/common/CustomException.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/common/GlobalExceptionHandler.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/common/JacksonObjectMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/common/MyMetaObjectHandler.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/common/MyThreadLocalForEmployeeId.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/common/R.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/config/MybatisPlusConfig.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/config/WebMvcConfig.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/AddressBookController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/CategoryController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/CommonController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/DishController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/EmployeeController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/OrderDetailController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/OrdersController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/SetmealController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/ShoppingCartController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/cotroller/UserController.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/dto/DishDto.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/dto/SetmealDto.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/AddressBook.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/Category.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/Dish.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/DishFlavor.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/Employee.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/OrderDetail.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/Orders.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/Setmeal.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/SetmealDish.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/ShoppingCart.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/entity/User.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/filter/LoginCheckFilter.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/AddressBookMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/CategoryMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/DishFlavorMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/DishMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/EmployeeMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/OrderDetailMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/OrdersMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/SetmealDishMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/SetmealMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/ShoppingCartMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/mapper/UserMapper.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/AddressBookService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/CategoryService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/DishFlavorService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/DishService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/EmployeeService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/OrderDetailService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/OrdersService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/SetmealDishService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/SetmealService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/ShoppingCartService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/UserService.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/AddressBookServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/CategoryServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/DishFlavorServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/DishServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/EmployeeServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/OrderDetailServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/OrdersServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/SetmealDishServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/SetmealServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/ShoppingCartServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/UserServiceImpl.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/utils/SMSUtils.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/java/cn/edu/hactcm/utils/ValidateCodeUtils.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/application.yml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/api/category.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/api/combo.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/api/food.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/api/login.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/api/member.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/api/order.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/favicon.ico" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/404-images/404-cloud.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/404-images/404.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/icons/btn_back@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/icons/btn_clean@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/icons/btn_close@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/icons/icon_index.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/icons/icon_upload@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/icons/jine_m-2@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/icons/renshu@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/icons/xiangmujine@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/img_brand01@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/img_denglu_bj.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/login/login-l.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/login/login-logo.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/login/logo.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/logo.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/images/noImg.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/index.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/js/common.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/js/index.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/js/request.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/js/validate.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/category/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/combo/add.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/combo/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/demo/upload.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/food/add.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/food/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/login/login.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/member/add.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/member/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/page/order/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/plugins/axios/axios.min.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/plugins/element-ui/fonts/element-icons.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/plugins/element-ui/fonts/element-icons.woff" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/plugins/element-ui/index.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/plugins/element-ui/index.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/plugins/vue/vue.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/common.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/fonts/element-icons.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/fonts/element-icons.woff" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/icon/demo.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/icon/demo_index.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/icon/iconfont.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/icon/iconfont.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/icon/iconfont.json" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/icon/iconfont.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/icon/iconfont.woff" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/icon/iconfont.woff2" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/index.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/login.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/backend/styles/page.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/api/address.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/api/login.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/api/main.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/api/order.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/carData.json" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/fonts/DIN-Bold.otf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/fonts/DIN-Medium.otf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/fonts/PingFangSC-Medium.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/fonts/PingFangSC-Regular.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/fonts/PingFangSC-Semibold.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/add.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/cart.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/cart_active.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/checked_false.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/checked_true.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/close.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/demo1.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/demo2.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/demo3.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/demo4.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/edit.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/favico.ico" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/headPage.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/home.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/location.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/locations.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/logo.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/mainBg.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/money.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/noImg.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/no_order.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/no_wifi.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/orders.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/subtract.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/success.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/time.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/user.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/images/women.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/index.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/js/base.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/js/common.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/js/request.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/js/vant.min.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/page/add-order.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/page/address-edit.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/page/address.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/page/login.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/page/no-wify.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/page/order.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/page/pay-success.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/page/user.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/add-order.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/address-edit.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/address.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/index.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/login.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/main.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/no-wify.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/order.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/pay-success.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/user.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/front/styles/vant.min.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/test/java/cn/edu/hactcm/UploadFileTest.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/application.yml" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/TakeOutApplication.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/common/CustomException.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/common/GlobalExceptionHandler.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/common/JacksonObjectMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/common/MyMetaObjectHandler.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/common/MyThreadLocalForEmployeeId.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/common/R.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/config/MybatisPlusConfig.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/config/WebMvcConfig.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/AddressBookController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/CategoryController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/CommonController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/DishController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/EmployeeController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/OrderDetailController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/OrdersController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/SetmealController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/ShoppingCartController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/cotroller/UserController.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/dto/DishDto.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/dto/SetmealDto.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/AddressBook.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/Category.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/Dish.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/DishFlavor.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/Employee.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/OrderDetail.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/Orders.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/Setmeal.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/SetmealDish.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/ShoppingCart.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/entity/User.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/filter/LoginCheckFilter.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/AddressBookMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/CategoryMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/DishFlavorMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/DishMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/EmployeeMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/OrderDetailMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/OrdersMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/SetmealDishMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/SetmealMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/ShoppingCartMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/mapper/UserMapper.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/AddressBookService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/CategoryService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/DishFlavorService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/DishService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/EmployeeService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/OrderDetailService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/OrdersService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/SetmealDishService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/SetmealService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/ShoppingCartService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/UserService.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/AddressBookServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/CategoryServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/DishFlavorServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/DishServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/EmployeeServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/OrderDetailServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/OrdersServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/SetmealDishServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/SetmealServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/ShoppingCartServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/service/impl/UserServiceImpl.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/utils/SMSUtils.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/cn/edu/hactcm/utils/ValidateCodeUtils.class" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/api/category.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/api/combo.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/api/food.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/api/login.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/api/member.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/api/order.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/favicon.ico" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/404-images/404-cloud.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/404-images/404.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/icons/btn_back@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/icons/btn_clean@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/icons/btn_close@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/icons/icon_index.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/icons/icon_upload@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/icons/jine_m-2@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/icons/renshu@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/icons/xiangmujine@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/img_brand01@2x.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/img_denglu_bj.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/login/login-l.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/login/login-logo.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/login/logo.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/logo.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/images/noImg.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/index.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/js/common.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/js/index.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/js/request.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/js/validate.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/category/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/combo/add.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/combo/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/demo/upload.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/food/add.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/food/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/login/login.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/member/add.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/member/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/page/order/list.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/plugins/axios/axios.min.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/plugins/element-ui/fonts/element-icons.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/plugins/element-ui/fonts/element-icons.woff" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/plugins/element-ui/index.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/plugins/element-ui/index.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/plugins/vue/vue.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/common.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/fonts/element-icons.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/fonts/element-icons.woff" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/icon/demo.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/icon/demo_index.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/icon/iconfont.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/icon/iconfont.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/icon/iconfont.json" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/icon/iconfont.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/icon/iconfont.woff" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/icon/iconfont.woff2" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/index.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/login.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/backend/styles/page.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/api/address.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/api/login.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/api/main.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/api/order.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/carData.json" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/fonts/DIN-Bold.otf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/fonts/DIN-Medium.otf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/fonts/PingFangSC-Medium.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/fonts/PingFangSC-Regular.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/fonts/PingFangSC-Semibold.ttf" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/add.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/cart.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/cart_active.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/checked_false.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/checked_true.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/close.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/demo1.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/demo2.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/demo3.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/demo4.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/edit.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/favico.ico" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/headPage.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/home.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/location.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/locations.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/logo.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/mainBg.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/money.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/noImg.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/no_order.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/no_wifi.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/orders.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/subtract.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/success.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/time.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/user.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/images/women.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/index.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/js/base.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/js/common.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/js/request.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/js/vant.min.js" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/page/add-order.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/page/address-edit.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/page/address.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/page/login.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/page/no-wify.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/page/order.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/page/pay-success.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/page/user.html" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/add-order.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/address-edit.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/address.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/index.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/login.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/main.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/no-wify.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/order.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/pay-success.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/user.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/classes/static/front/styles/vant.min.css" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst" afterDir="false" />
<change afterPath="$PROJECT_DIR$/target/test-classes/cn/edu/hactcm/UploadFileTest.class" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Interface" />
<option value="Class" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="MavenImportPreferences">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="localRepository" value="D:\MavenWork\repository" />
<option name="mavenHome" value="$PROJECT_DIR$/../../../Program Files(x86)/Java/apache-maven-3.8.6" />
<option name="userSettingsFile" value="D:\Program Files(x86)\Java\apache-maven-3.8.6\conf\settings.xml" />
</MavenGeneralSettings>
</option>
</component>
<component name="MavenRunner">
<option name="jreName" value="1.8" />
<option name="vmOptions" value="-DachetypeCatalog=internal" />
</component>
<component name="ProjectId" id="2O2HtBuqQ1Ytwowwn7nuo7OVdgY" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RequestMappingsPanelOrder0": "0",
"RequestMappingsPanelOrder1": "1",
"RequestMappingsPanelWidth0": "75",
"RequestMappingsPanelWidth1": "75",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"WebServerToolWindowFactoryState": "false",
"last_opened_file_path": "D:/JavaWeb/project/take_out",
"project.structure.last.edited": "Project",
"project.structure.proportion": "0.0",
"project.structure.side.proportion": "0.0",
"settings.editor.selected.configurable": "configurable.group.tools",
"spring.configuration.checksum": "c52b1b9a69639134c64c20f35b444ef6"
}
}]]></component>
<component name="RecentsManager">
<key name="CreateClassDialog.RecentsKey">
<recent name="cn.edu.hactcm.service.impl" />
</key>
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\JavaWeb\project\take_out\src\main\java\cn\edu\hactcm\entity" />
<recent name="D:\JavaWeb\project\take_out\src\main\java\cn\edu\hactcm\common" />
<recent name="D:\JavaWeb\project\take_out\src\main\java\cn\edu\hactcm\cotroller" />
<recent name="D:\JavaWeb\project\take_out\src\main\java\cn\edu\hactcm\service\impl" />
<recent name="D:\JavaWeb\project\take_out\src\main\java\cn\edu\hactcm\service" />
</key>
</component>
<component name="RunManager" selected="Spring Boot.TakeOutApplication">
<configuration name="UploadFileTest.testRealPath" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="take_out" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="cn.edu.hactcm.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="cn.edu.hactcm" />
<option name="MAIN_CLASS_NAME" value="cn.edu.hactcm.UploadFileTest" />
<option name="METHOD_NAME" value="testRealPath(javax.servlet.http.HttpServletRequest)" />
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="UploadFileTest.testString" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="take_out" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="cn.edu.hactcm.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<option name="PACKAGE_NAME" value="cn.edu.hactcm" />
<option name="MAIN_CLASS_NAME" value="cn.edu.hactcm.UploadFileTest" />
<option name="METHOD_NAME" value="testString" />
<option name="TEST_OBJECT" value="method" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="TakeOutApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true">
<option name="ACTIVE_PROFILES" />
<module name="take_out" />
<option name="SPRING_BOOT_MAIN_CLASS" value="cn.edu.hactcm.TakeOutApplication" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="cn.edu.hactcm.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<list>
<item itemvalue="JUnit.UploadFileTest.testRealPath" />
<item itemvalue="JUnit.UploadFileTest.testString" />
<item itemvalue="Spring Boot.TakeOutApplication" />
</list>
<recent_temporary>
<list>
<item itemvalue="Spring Boot.TakeOutApplication" />
<item itemvalue="JUnit.UploadFileTest.testString" />
<item itemvalue="JUnit.UploadFileTest.testRealPath" />
</list>
</recent_temporary>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="09a0ab93-8583-4cca-9183-2b28acbb0d2c" name="Changes" comment="" />
<created>1680751970650</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1680751970650</updated>
<workItem from="1680751971961" duration="8741000" />
<workItem from="1680863241132" duration="9395000" />
<workItem from="1680932712004" duration="6004000" />
<workItem from="1681009666787" duration="16152000" />
<workItem from="1681109662508" duration="21391000" />
<workItem from="1681177264694" duration="21624000" />
<workItem from="1681263657814" duration="23672000" />
<workItem from="1681350936189" duration="16761000" />
<workItem from="1681437917713" duration="8618000" />
<workItem from="1681536930133" duration="12221000" />
<workItem from="1681617252929" duration="9061000" />
<workItem from="1681695089997" duration="825000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/cn/edu/hactcm/service/impl/OrdersServiceImpl.java</url>
<line>37</line>
<option name="timeStamp" value="4" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
</project>

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/>
</parent>
<groupId>cn.edu.hactcm</groupId>
<artifactId>take_out</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--阿里云短信服务-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.23</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.4.5</version>
</plugin>
</plugins>
</build>
</project>

@ -0,0 +1,18 @@
package cn.edu.hactcm;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@Slf4j
@SpringBootApplication
@ServletComponentScan("cn.edu.hactcm.filter")
@MapperScan("cn.edu.hactcm.mapper")
public class TakeOutApplication {
public static void main(String[] args) {
SpringApplication.run(TakeOutApplication.class, args);
log.info("项目启动成功...");
}
}

@ -0,0 +1,7 @@
package cn.edu.hactcm.common;
public class CustomException extends RuntimeException{
public CustomException(String message) {
super(message);
}
}

@ -0,0 +1,27 @@
package cn.edu.hactcm.common;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.sql.SQLIntegrityConstraintViolationException;
@RestControllerAdvice(annotations = {Controller.class, RestController.class})
@Slf4j
public class GlobalExceptionHandler {
@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
public R<String> ExceptionHandler(SQLIntegrityConstraintViolationException exception){
if (exception.getMessage().contains("Duplicate entry")) {
String[] split = exception.getMessage().split(" ");
return R.error(split[2] + "已存在");
}
return R.error("用户已存在");
}
@ExceptionHandler(CustomException.class)
public R<String> ExceptionHandler(CustomException exception){
return R.error(exception.getMessage());
}
}

@ -0,0 +1,54 @@
package cn.edu.hactcm.common;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
/**
* :jacksonJavajsonjsonJava
* JSONJava [JSONJava]
* JavaJSON [JavaJSON]
*/
public class JacksonObjectMapper extends ObjectMapper {
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
public JacksonObjectMapper() {
super();
//收到未知属性时不报异常
this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
//反序列化时,属性不存在的兼容处理
this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
SimpleModule simpleModule = new SimpleModule()
.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
.addSerializer(BigInteger.class, ToStringSerializer.instance)
.addSerializer(Long.class, ToStringSerializer.instance)
.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
//注册功能模块 例如,可以添加自定义序列化器和反序列化器
this.registerModule(simpleModule);
}
}

@ -0,0 +1,27 @@
package cn.edu.hactcm.common;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
metaObject.setValue("createTime",LocalDateTime.now());
metaObject.setValue("createUser",MyThreadLocalForEmployeeId.getCurrentId());
metaObject.setValue("updateTime",LocalDateTime.now());
metaObject.setValue("updateUser",MyThreadLocalForEmployeeId.getCurrentId());
}
@Override
public void updateFill(MetaObject metaObject) {
metaObject.setValue("updateTime", LocalDateTime.now());
System.out.println(MyThreadLocalForEmployeeId.getCurrentId());
metaObject.setValue("updateUser",MyThreadLocalForEmployeeId.getCurrentId());
}
}

@ -0,0 +1,21 @@
package cn.edu.hactcm.common;
public class MyThreadLocalForEmployeeId {
private static ThreadLocal<Long> threadLocal = new ThreadLocal();
/**
*
* @param id
*/
public static void setCurrentId(Long id){
threadLocal.set(id);
}
/**
*
* @return
*/
public static Long getCurrentId(){
return threadLocal.get();
}
}

@ -0,0 +1,41 @@
package cn.edu.hactcm.common;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
/**
*
* @param <T>
*/
@Data
public class R<T> {
private Integer code; //编码1成功0和其它数字为失败
private String msg; //错误信息
private T data; //数据
private Map map = new HashMap(); //动态数据
public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1;
return r;
}
public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;
return r;
}
public R<T> add(String key, Object value) {
this.map.put(key, value);
return this;
}
}

@ -0,0 +1,17 @@
package cn.edu.hactcm.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}

@ -0,0 +1,33 @@
package cn.edu.hactcm.config;
import cn.edu.hactcm.common.JacksonObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@Slf4j
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
*mvc
* @param converters
*/
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
//创建消息转换器对象
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
//设置对象转换器底层使用Jackson,将java对象转成Json
mappingJackson2HttpMessageConverter.setObjectMapper(new JacksonObjectMapper());
//将上面的对象转换器追加到mvc框架集合中
converters.add(0,mappingJackson2HttpMessageConverter);
}
}

@ -0,0 +1,102 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.common.MyThreadLocalForEmployeeId;
import cn.edu.hactcm.common.R;
import cn.edu.hactcm.entity.AddressBook;
import cn.edu.hactcm.service.AddressBookService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 簿
*/
@Slf4j
@RestController
@RequestMapping("/addressBook")
public class AddressBookController {
@Autowired
private AddressBookService addressBookService;
/**
*
*/
@PostMapping
public R<AddressBook> save(@RequestBody AddressBook addressBook) {
addressBook.setUserId(MyThreadLocalForEmployeeId.getCurrentId());
log.info("addressBook:{}", addressBook);
addressBookService.save(addressBook);
return R.success(addressBook);
}
/**
*
*/
@PutMapping("default")
public R<AddressBook> setDefault(@RequestBody AddressBook addressBook) {
log.info("addressBook:{}", addressBook);
LambdaUpdateWrapper<AddressBook> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(AddressBook::getUserId, MyThreadLocalForEmployeeId.getCurrentId());
wrapper.set(AddressBook::getIsDefault, 0);
//SQL:update address_book set is_default = 0 where user_id = ?
addressBookService.update(wrapper);
addressBook.setIsDefault(1);
//SQL:update address_book set is_default = 1 where id = ?
addressBookService.updateById(addressBook);
return R.success(addressBook);
}
/**
* id
*/
@GetMapping("/{id}")
public R get(@PathVariable Long id) {
AddressBook addressBook = addressBookService.getById(id);
if (addressBook != null) {
return R.success(addressBook);
} else {
return R.error("没有找到该对象");
}
}
/**
*
*/
@GetMapping("default")
public R<AddressBook> getDefault() {
LambdaQueryWrapper<AddressBook> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AddressBook::getUserId, MyThreadLocalForEmployeeId.getCurrentId());
queryWrapper.eq(AddressBook::getIsDefault, 1);
//SQL:select * from address_book where user_id = ? and is_default = 1
AddressBook addressBook = addressBookService.getOne(queryWrapper);
if (null == addressBook) {
return R.error("没有找到该对象");
} else {
return R.success(addressBook);
}
}
/**
*
*/
@GetMapping("/list")
public R<List<AddressBook>> list(AddressBook addressBook) {
addressBook.setUserId(MyThreadLocalForEmployeeId.getCurrentId());
log.info("addressBook:{}", addressBook);
//条件构造器
LambdaQueryWrapper<AddressBook> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(null != addressBook.getUserId(), AddressBook::getUserId, addressBook.getUserId());
queryWrapper.orderByDesc(AddressBook::getUpdateTime);
//SQL:select * from address_book where user_id = ? order by update_time desc
return R.success(addressBookService.list(queryWrapper));
}
}

@ -0,0 +1,96 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.common.R;
import cn.edu.hactcm.entity.Category;
import cn.edu.hactcm.service.CategoryService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@Slf4j
@RequestMapping("/category")
public class CategoryController {
@Autowired
private CategoryService categoryService;
/**
*
* @param category
* @return
*/
@PostMapping
public R<String> save(@RequestBody Category category){
boolean flag = categoryService.save(category);
if (flag) {
return R.success("新增分类成功");
}
return R.error("新增分类失败!");
}
/**
*
* @param page
* @param pageSize
* @return
*/
@GetMapping("/page")
public R<Page> getPage(int page,int pageSize){
Page<Category> pageInfo = new Page<>(page,pageSize);
LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByAsc(Category::getSort);
pageInfo = categoryService.page(pageInfo,queryWrapper);
return R.success(pageInfo);
}
/**
*
* @param ids
* @return
*/
@DeleteMapping
public R<String> deleteById(@RequestParam Long ids){
//remove方法已重写检查是否关联了其他表格数据
return categoryService.remove(ids) ? R.success("删除成功") : R.error("删除失败");
// boolean flag = categoryService.removeById(ids);
/*boolean flag = categoryService.remove(ids);
if (flag) {
return R.success("删除成功");
}
return R.error("删除失败");*/
}
/**
*
* @param category
* @return
*/
@PutMapping
public R<String> updateById(@RequestBody Category category){
log.info(category.toString());
return categoryService.updateById(category) ? R.success("修改成功") : R.error("修改失败");
}
/**
*
* @param category
* @return
*/
@GetMapping("/list")
public R<List<Category>> getList(Category category){
LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(category.getType() != null,Category::getType,category.getType())
.orderByAsc(Category::getSort).orderByDesc(Category::getCreateTime);
List<Category> list = categoryService.list(queryWrapper);
return R.success(list);
}
}

@ -0,0 +1,90 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.print.DocFlavor;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;
@RestController
@Slf4j
@RequestMapping("/common")
public class CommonController {
@Value("${takeout.path}")
private String basePath;
/**
*
* @param file
* @param request
* @return
*/
@RequestMapping("/upload")
public R<String> upload(MultipartFile file, HttpServletRequest request){
//获取文件的格式后缀
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
//uuid
String fileName = UUID.randomUUID().toString()+suffix;
//如果路径不存在创建路径
File dir = new File(basePath);
if (!dir.exists()) {
dir.mkdir();
}
//转存
try {
file.transferTo(new File(basePath+fileName));
} catch (IOException e) {
throw new RuntimeException(e);
}
//将文件名返回浏览器,后面用户新增信息时随表单数据提交到服务器,写入数据库
return R.success(fileName);
}
/**
*
* @param name
* @param response
*/
@GetMapping("/download")
public void download(String name, HttpServletResponse response){
try {
//输入流,通过输入流读取文件内容
FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
//输出流,通过输出流将文件写回浏览器
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("image/jpeg");
int len = 0;
byte[] bytes = new byte[1024];
while ((len = fileInputStream.read(bytes)) != -1){
outputStream.write(bytes,0,len);
outputStream.flush();
}
//关闭资源
outputStream.close();
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,179 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.common.R;
import cn.edu.hactcm.dto.DishDto;
import cn.edu.hactcm.entity.Category;
import cn.edu.hactcm.entity.Dish;
import cn.edu.hactcm.entity.DishFlavor;
import cn.edu.hactcm.service.CategoryService;
import cn.edu.hactcm.service.DishFlavorService;
import cn.edu.hactcm.service.DishService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@Slf4j
@RequestMapping("/dish")
public class DishController {
@Autowired
private DishService dishService;
@Autowired
private CategoryService categoryService;
@Autowired
private DishFlavorService dishFlavorService;
/**
* Dto
* @param dishDto
* @return
*/
@PostMapping
public R<String> save(@RequestBody DishDto dishDto){
dishService.saveWithFlavor(dishDto);
return R.success("添加菜品成功!");
}
/**
* dishid,
* @param page
* @param pageSize
* @param name
* @return
*/
@GetMapping("/page")
public R<Page<DishDto>> page(int page,int pageSize,String name){
//准备好数据模型
Page<Dish> pageInfo = new Page<>(page, pageSize);
Page<DishDto> dishDtoPage = new Page<>(page, pageSize);
//将结果集查询出来并封装给pageInfo对象
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(name != null,Dish::getName,name)
.orderByDesc(Dish::getUpdateTime);
pageInfo = dishService.page(pageInfo, queryWrapper);
//拷贝属性排除records属性因为要对该属性进行处理。records是一个List<dish>集合,要增加其中对象的数据<DishDto>
BeanUtils.copyProperties(pageInfo,dishDtoPage,"records");
//对List集合进行处理List<Dish>-->List<DishDto>
List<DishDto> listRecords = new ArrayList<>();
for (Dish record : pageInfo.getRecords()) {
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(record,dishDto);
Category category = categoryService.getById(record.getCategoryId());
//这里留了个小bug,有些category列数据删除了导致根据id查找不到记录导致对象为空。后期解决
if (category != null) dishDto.setCategoryName(category.getName());
listRecords.add(dishDto);
}
//完整封装为Page<DishDto>对象
dishDtoPage.setRecords(listRecords);
return R.success(dishDtoPage);
}
/**
*id
* @param id
* @return
*/
@GetMapping("/{id}")
public R<DishDto> get(@PathVariable Long id){
//查询菜品基本信息
Dish dish = dishService.getById(id);
//查询菜品口味信息<List>
LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DishFlavor::getDishId,id);
List<DishFlavor> dishFlavors = dishFlavorService.list(queryWrapper);
// 将相关信息封装为DishDto类返回给浏览器。
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(dish,dishDto);
dishDto.setFlavors(dishFlavors);
return R.success(dishDto);
}
/**
*
* @param dishDto
* @return
*/
@Transactional
@PutMapping
public R<String> update(@RequestBody DishDto dishDto){
//对dish表进行更新
dishService.updateById(dishDto);
//对dishFlavor表进行刚更新的时候先根据dishId进行删除操作将有关数据进行删除因为不确定是要添加还是要删除所以直接删除重新添加。
LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DishFlavor::getDishId,dishDto.getId());
////对dishFlavor表进行删除
dishFlavorService.remove(queryWrapper);
for (DishFlavor flavor : dishDto.getFlavors()) {
flavor.setDishId(dishDto.getId());
}
//对dishFlavor表进行添加
dishFlavorService.saveBatch(dishDto.getFlavors());
return R.success("修改成功");
}
/**
*
* @param dish
* @return
*/
/*@GetMapping("/list")
public R<List<Dish>> list(Dish dish){
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(dish.getCategoryId() != null,Dish::getCategoryId,dish.getCategoryId())
.orderByAsc(Dish::getSort)
.orderByDesc(Dish::getUpdateTime)
.eq(Dish::getStatus,1);
List<Dish> list = dishService.list(queryWrapper);
return R.success(list);
}*/
/**
* &
* @param dish
* @return
*/
@GetMapping("/list")
public R<List<DishDto>> list(Dish dish){
//封装条件:
LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(dish.getCategoryId() != null,Dish::getCategoryId,dish.getCategoryId())
.eq(dish.getStatus() != null,Dish::getStatus,dish.getStatus())
.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime);
//根据category_id查询该分类对应的所有菜品信息
List<Dish> dishes = dishService.list(queryWrapper);
//由于还要向移动端展示菜品的备选口味所以此处需要查询dish_flavor表将flavor一并返回给前端故此封装为DishDto对象。
List<DishDto> dishDtos = new ArrayList<DishDto>();
for (Dish dishInfo : dishes) {
// 对象属性值拷贝
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(dishInfo,dishDto);
// 根据菜品ID查询对应的口味信息
LambdaQueryWrapper<DishFlavor> dishFlavorLambdaQueryWrapper = new LambdaQueryWrapper<>();
dishFlavorLambdaQueryWrapper.eq(DishFlavor::getDishId,dishInfo.getId());
List<DishFlavor> dishFlavors = dishFlavorService.list(dishFlavorLambdaQueryWrapper);
// 为DishDto对象的flavors属性赋值
dishDto.setFlavors(dishFlavors);
dishDtos.add(dishDto);
}
return R.success(dishDtos);
}
}

@ -0,0 +1,150 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.common.R;
import cn.edu.hactcm.entity.Employee;
import cn.edu.hactcm.service.EmployeeService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("/employee")
@Slf4j
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
/**
*
* @param employee
* @param request
* @return
*/
@PostMapping("/login")
public R<Employee> Login(@RequestBody Employee employee, HttpServletRequest request){
//封装条件,根据用户名查询并返回对象
LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Employee::getUsername,employee.getUsername());
Employee emp = employeeService.getOne(queryWrapper);
//取出密码
String passWord = DigestUtils.md5DigestAsHex(employee.getPassword().getBytes());
//对用户名是否存在进行校验
if (emp == null) return R.error("该账号不存在!");
//用户存在对密码进行校验
if (!emp.getPassword().equals(passWord)) return R.error("用户名或密码错误,请重试!");
//对用户状态进行验证
if (emp.getStatus() == 0) return R.error("该账号已禁用,如有疑问,请联系管理员!");
//登录成功将用户ID存入session
HttpSession session = request.getSession();
session.setAttribute("employee",emp.getId());
return R.success(emp);
}
/**
*
* @param request
* @return
*/
@PostMapping("/logout")
public R<String> logout(HttpServletRequest request){
HttpSession session = request.getSession();
session.removeAttribute("employee");
return R.success("退出成功!");
}
/**
*
* @param employee
* @param request
* @return
*/
@PostMapping
public R addEmployee(@RequestBody Employee employee,HttpServletRequest request){
String username = employee.getUsername();
LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Employee::getUsername,username);
//:添加用户时如果用户名重复的处理方式一
/*Employee employee1 = employeeService.getOne(queryWrapper);
if (employee1 != null) {
return R.error("用户名已存在!");
}*/
//添加用户时如果用户名重复的处理方式二设置全局异常处理controller,对SQLIntegrityConstraintViolationException该异常进行捕获
employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));
/*employee.setCreateTime(LocalDateTime.now());
employee.setUpdateTime(LocalDateTime.now());
employee.setCreateUser((Long) request.getSession().getAttribute("employee"));
employee.setUpdateUser((Long) request.getSession().getAttribute("employee"));*/
boolean flag = employeeService.save(employee);
if (flag) return R.success(null);
return R.error("操作失败!");
}
/**
*
* @param page
* @param pageSize
* @return
*/
@GetMapping("/page")
public R<Page> getPage(int page,int pageSize,String name){
Page<Employee> pageInfo = new Page<>(page,pageSize);
LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(name),Employee::getName,name);
pageInfo = employeeService.page(pageInfo, queryWrapper);
return R.success(pageInfo);
}
/**
*
* @param employee
* @param request
* @return
*/
@PutMapping
public R<String> updateStatus(@RequestBody Employee employee,HttpServletRequest request){
/*employee.setUpdateTime(LocalDateTime.now());
employee.setUpdateUser((Long) request.getSession().getAttribute("employee"));*/
boolean flag = employeeService.updateById(employee);
if (flag == true) {
return R.success("员工id修改成功");
}
return R.error("修改失败,请重试!");
}
/**
*
* @param id
* @return
*/
@GetMapping("/{id}")
public R<Employee> getById(@PathVariable Long id){
Employee employee = employeeService.getById(id);
if (employee != null) {
return R.success(employee);
}
return R.error("未知原因,请重试!");
}
}

@ -0,0 +1,14 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.service.OrderDetailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/orderDetail")
public class OrderDetailController {
@Autowired
private OrderDetailService orderDetailService;
}

@ -0,0 +1,26 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.common.R;
import cn.edu.hactcm.entity.Orders;
import cn.edu.hactcm.service.OrdersService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/order")
@Slf4j
public class OrdersController {
@Autowired
private OrdersService ordersService;
@PostMapping("/submit")
public R<String> submit(@RequestBody Orders orders){
ordersService.submit(orders);
return R.success("支付成功!");
}
}

@ -0,0 +1,106 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.common.R;
import cn.edu.hactcm.dto.SetmealDto;
import cn.edu.hactcm.entity.Category;
import cn.edu.hactcm.entity.Setmeal;
import cn.edu.hactcm.service.CategoryService;
import cn.edu.hactcm.service.SetmealDishService;
import cn.edu.hactcm.service.SetmealService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/setmeal")
@Slf4j
public class SetmealController {
@Autowired
private SetmealService setmealService;
@Autowired
private SetmealDishService setmealDishService;
@Autowired
private CategoryService categoryService;
/**
*
* @param setmealDto
* @return
*/
@PostMapping
@Transactional
public R<String> saveMealDish(@RequestBody SetmealDto setmealDto){
setmealService.saveWithDish(setmealDto);
return R.success("添加成功!");
}
/**
* /dish/page
* @param page
* @param pageSize
* @param name
* @return
*/
@GetMapping("/page")
public R<Page<SetmealDto>> page(int page,int pageSize,String name){
Page<Setmeal> setmealPage = new Page<>(page, pageSize);
Page<SetmealDto> setmealDtoPage = new Page<>(page, pageSize);
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(name != null,Setmeal::getName,name).orderByDesc(Setmeal::getUpdateTime);
setmealService.page(setmealPage);
BeanUtils.copyProperties(setmealPage,setmealDtoPage,"records");
List<SetmealDto> list = new ArrayList<>();
for (Setmeal setmeal : setmealPage.getRecords()) {
SetmealDto setmealDto = new SetmealDto();
BeanUtils.copyProperties(setmeal,setmealDto);
Category category = categoryService.getById(setmeal.getCategoryId());
setmealDto.setCategoryName(category.getName());
list.add(setmealDto);
}
setmealDtoPage.setRecords(list);
return R.success(setmealDtoPage);
}
/**
*
* @param ids
* @return
*/
@DeleteMapping
public R<String> deleteWithDish(@RequestParam List<Long> ids){
setmealService.removeWithDish(ids);
return R.success("删除成功");
}
/**
*
* @param setmeal
* @return
*/
@GetMapping("/list")
public R<List<Setmeal>> get(Setmeal setmeal){
Long categoryId = setmeal.getCategoryId();
Integer status = setmeal.getStatus();
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(categoryId != null,Setmeal::getCategoryId,categoryId)
.eq(status != null,Setmeal::getStatus,status)
.orderByDesc(Setmeal::getCreateTime);
List<Setmeal> setmeals = setmealService.list(queryWrapper);
return R.success(setmeals);
}
}

@ -0,0 +1,72 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.common.MyThreadLocalForEmployeeId;
import cn.edu.hactcm.common.R;
import cn.edu.hactcm.entity.ShoppingCart;
import cn.edu.hactcm.service.ShoppingCartService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.List;
@RestController
@RequestMapping("/shoppingCart")
@Slf4j
public class ShoppingCartController {
@Autowired
private ShoppingCartService shoppingCartService;
/**
*
* @param shoppingCart
* @return
*/
@PostMapping("/add")
public R<ShoppingCart> add(@RequestBody ShoppingCart shoppingCart){
//将购物车数据持久化到数据库时肯定是将菜品与用户ID相关联准备用户ID
Long userId = MyThreadLocalForEmployeeId.getCurrentId();
shoppingCart.setUserId(userId);
//根据用户ID及菜品/套餐ID查看购物车中是否已经有相关数据如果有将number属性值加一update否则将该信息写入数据库中(save)
//拼接查询条件并查询是否已有相关数据
LambdaQueryWrapper<ShoppingCart> queryWrapper = new LambdaQueryWrapper<ShoppingCart>();
queryWrapper.eq(ShoppingCart::getUserId,userId);
if (shoppingCart.getDishId() != null) {
queryWrapper.eq(ShoppingCart::getDishId,shoppingCart.getDishId());
}else {
queryWrapper.eq(ShoppingCart::getSetmealId,shoppingCart.getSetmealId());
}
ShoppingCart shoppingCartInfo = shoppingCartService.getOne(queryWrapper);
if (shoppingCartInfo != null) {
//如果已存在,update
shoppingCartInfo.setNumber(shoppingCartInfo.getNumber()+1);
shoppingCartService.updateById(shoppingCartInfo);
}else {
//如果不存在,save
shoppingCart.setCreateTime(LocalDateTime.now());
shoppingCartService.save(shoppingCart);
}
return R.success(shoppingCart);
}
@GetMapping("/list")
public R<List<ShoppingCart>> CartList(){
LambdaQueryWrapper<ShoppingCart> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ShoppingCart::getUserId,MyThreadLocalForEmployeeId.getCurrentId()).orderByAsc(ShoppingCart::getCreateTime);
List<ShoppingCart> shoppingCarts = shoppingCartService.list(queryWrapper);
return R.success(shoppingCarts);
}
@DeleteMapping("/clean")
public R<String> clean(){
LambdaQueryWrapper<ShoppingCart> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ShoppingCart::getUserId,MyThreadLocalForEmployeeId.getCurrentId());
boolean flag = shoppingCartService.remove(queryWrapper);
return R.success("删除成功!");
}
}

@ -0,0 +1,65 @@
package cn.edu.hactcm.cotroller;
import cn.edu.hactcm.common.R;
import cn.edu.hactcm.entity.User;
import cn.edu.hactcm.service.UserService;
import cn.edu.hactcm.utils.ValidateCodeUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;
import java.util.Map;
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
@Autowired
private UserService userService;
/**
*
* @param user
* @param session
* @return
*/
@PostMapping("/sendMsg")
public R<String> getMsg(@RequestBody User user, HttpSession session){
if (user.getPhone() != null) {
String code = ValidateCodeUtils.generateValidateCode(4).toString();
log.info(code);
//模拟发送短信
//SMSUtils.sendMessage("汉马外卖","","1111111111",code);
session.setAttribute(user.getPhone(),code);
return R.success("发送成功");
}
return R.error("发送失败");
}
@PostMapping("/login")
public R<User> login(@RequestBody Map map, HttpSession session){
String code = (String) map.get("code");
String phone = (String) map.get("phone");
if (code != null && code.equals(session.getAttribute(phone))) {
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getPhone,phone);
User user = userService.getOne(queryWrapper);
if (user == null) {
user = new User();
user.setPhone(phone);
user.setStatus(1);
userService.save(user);
}
session.setAttribute("user",user.getId());
return R.success(user);
}
return R.error("登陆失败");
}
}

@ -0,0 +1,16 @@
package cn.edu.hactcm.dto;
import cn.edu.hactcm.entity.Dish;
import cn.edu.hactcm.entity.DishFlavor;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class DishDto extends Dish {
private List<DishFlavor> flavors = new ArrayList<>();
private String categoryName;
private Integer copies;
}

@ -0,0 +1,15 @@
package cn.edu.hactcm.dto;
import cn.edu.hactcm.entity.Setmeal;
import cn.edu.hactcm.entity.SetmealDish;
import lombok.Data;
import java.util.List;
@Data
public class SetmealDto extends Setmeal {
private List<SetmealDish> setmealDishes;
private String categoryName;
}

@ -0,0 +1,92 @@
package cn.edu.hactcm.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 簿
*/
@Data
public class AddressBook implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//用户id
private Long userId;
//收货人
private String consignee;
//手机号
private String phone;
//性别 0 女 1 男
private String sex;
//省级区划编号
private String provinceCode;
//省级名称
private String provinceName;
//市级区划编号
private String cityCode;
//市级名称
private String cityName;
//区级区划编号
private String districtCode;
//区级名称
private String districtName;
//详细地址
private String detail;
//标签
private String label;
//是否默认 0 否 1是
private Integer isDefault;
//创建时间
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
//更新时间
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
//创建人
@TableField(fill = FieldFill.INSERT)
private Long createUser;
//修改人
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
//是否删除
private Integer isDeleted;
}

@ -0,0 +1,59 @@
package cn.edu.hactcm.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
*
*/
@Data
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//类型 1 菜品分类 2 套餐分类
private Integer type;
//分类名称
private String name;
//顺序
private Integer sort;
//创建时间
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
//更新时间
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
//创建人
@TableField(fill = FieldFill.INSERT)
private Long createUser;
//修改人
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
//是否删除
// private Integer isDeleted;
}

@ -0,0 +1,72 @@
package cn.edu.hactcm.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
*/
@Data
public class Dish implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//菜品名称
private String name;
//菜品分类id
private Long categoryId;
//菜品价格
private BigDecimal price;
//商品码
private String code;
//图片
private String image;
//描述信息
private String description;
//0 停售 1 起售
private Integer status;
//顺序
private Integer sort;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
//是否删除
private Integer isDeleted;
}

@ -0,0 +1,53 @@
package cn.edu.hactcm.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
*/
@Data
public class DishFlavor implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//菜品id
private Long dishId;
//口味名称
private String name;
//口味数据list
private String value;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
//是否删除
private Integer isDeleted;
}

@ -0,0 +1,45 @@
package cn.edu.hactcm.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
*
*/
@Data
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String username;
private String name;
private String password;
private String phone;
private String sex;
private String idNumber;//身份证号码
private Integer status;
@TableField(fill = FieldFill.INSERT) //插入时填充字段
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //插入和更新时填充字段
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT) //插入时填充字段
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE) //插入和更新时填充字段
private Long updateUser;
}

@ -0,0 +1,46 @@
package cn.edu.hactcm.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
*
*/
@Data
public class OrderDetail implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//名称
private String name;
//订单id
private Long orderId;
//菜品id
private Long dishId;
//套餐id
private Long setmealId;
//口味
private String dishFlavor;
//数量
private Integer number;
//金额
private BigDecimal amount;
//图片
private String image;
}

@ -0,0 +1,61 @@
package cn.edu.hactcm.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
*
*/
@Data
public class Orders implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//订单号
private String number;
//订单状态 1待付款2待派送3已派送4已完成5已取消
private Integer status;
//下单用户id
private Long userId;
//地址id
private Long addressBookId;
//下单时间
private LocalDateTime orderTime;
//结账时间
private LocalDateTime checkoutTime;
//支付方式 1微信2支付宝
private Integer payMethod;
//实收金额
private BigDecimal amount;
//备注
private String remark;
//用户名
private String userName;
//手机号
private String phone;
//地址
private String address;
//收货人
private String consignee;
}

@ -0,0 +1,68 @@
package cn.edu.hactcm.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
*
*/
@Data
public class Setmeal implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//分类id
private Long categoryId;
//套餐名称
private String name;
//套餐价格
private BigDecimal price;
//状态 0:停用 1:启用
private Integer status;
//编码
private String code;
//描述信息
private String description;
//图片
private String image;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
//是否删除
private Integer isDeleted;
}

@ -0,0 +1,61 @@
package cn.edu.hactcm.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
*
*/
@Data
public class SetmealDish implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//套餐id
private Long setmealId;
//菜品id
private Long dishId;
//菜品名称 (冗余字段)
private String name;
//菜品原价
private BigDecimal price;
//份数
private Integer copies;
//排序
private Integer sort;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
//是否删除
private Integer isDeleted;
}

@ -0,0 +1,43 @@
package cn.edu.hactcm.entity;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
*
*/
@Data
public class ShoppingCart implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//名称
private String name;
//用户id
private Long userId;
//菜品id
private Long dishId;
//套餐id
private Long setmealId;
//口味
private String dishFlavor;
//数量
private Integer number;
//金额
private BigDecimal amount;
//图片
private String image;
private LocalDateTime createTime;
}

@ -0,0 +1,43 @@
package cn.edu.hactcm.entity;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
/**
*
*/
@Data
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//姓名
private String name;
//手机号
private String phone;
//性别 0 女 1 男
private String sex;
//身份证号
private String idNumber;
//头像
private String avatar;
//状态 0:禁用1:正常
private Integer status;
}

@ -0,0 +1,74 @@
package cn.edu.hactcm.filter;
import cn.edu.hactcm.common.MyThreadLocalForEmployeeId;
import cn.edu.hactcm.common.R;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebFilter("/*")
@Slf4j
public class LoginCheckFilter implements Filter {
//AntPathMatcher匹配请求路径
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response= (HttpServletResponse) servletResponse;
//定义哪些请求不被拦截
String[] uris = {
"/backend/**",
"/front/**",
"/employee/login",
"/employee/logout",
"/user/login",
"/user/sendMsg"};
//对请求uri和uris进行匹配检验进而判定是否拦截
boolean check = check(uris, request.getRequestURI());
log.info("拦截到请求:{}",request.getRequestURI());
if (check) {
chain.doFilter(request,response);
return;
}
//管理端判断是否登录
if (request.getSession().getAttribute("employee") != null) {
Long id = (Long) request.getSession().getAttribute("employee");
MyThreadLocalForEmployeeId.setCurrentId(id);
chain.doFilter(request,response);
return;
}
//用户端判断是否登录
if (request.getSession().getAttribute("user") != null) {
Long id = (Long) request.getSession().getAttribute("user");
MyThreadLocalForEmployeeId.setCurrentId(id);
chain.doFilter(request,response);
return;
}
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
}
/**
*
* @param uris
* @param requestUri
* @return
*/
public boolean check(String[] uris,String requestUri){
for (String uri : uris) {
boolean match = PATH_MATCHER.match(uri, requestUri);
if (match) return true;
}
return false;
}
}

@ -0,0 +1,10 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.AddressBook;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface AddressBookMapper extends BaseMapper<AddressBook> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.Category;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface CategoryMapper extends BaseMapper<Category> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.DishFlavor;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface DishFlavorMapper extends BaseMapper<DishFlavor> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.Dish;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface DishMapper extends BaseMapper<Dish> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.Employee;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeMapper extends BaseMapper<Employee> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.OrderDetail;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface OrderDetailMapper extends BaseMapper<OrderDetail> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.Orders;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface OrdersMapper extends BaseMapper<Orders> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.SetmealDish;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface SetmealDishMapper extends BaseMapper<SetmealDish> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.Setmeal;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface SetmealMapper extends BaseMapper<Setmeal> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.ShoppingCart;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface ShoppingCartMapper extends BaseMapper<ShoppingCart> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.mapper;
import cn.edu.hactcm.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends BaseMapper<User> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.entity.AddressBook;
import com.baomidou.mybatisplus.extension.service.IService;
public interface AddressBookService extends IService<AddressBook> {
}

@ -0,0 +1,10 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.entity.Category;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.service.IService;
public interface CategoryService extends IService<Category> {
boolean remove(Long id);
}

@ -0,0 +1,7 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.entity.DishFlavor;
import com.baomidou.mybatisplus.extension.service.IService;
public interface DishFlavorService extends IService<DishFlavor> {
}

@ -0,0 +1,9 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.dto.DishDto;
import cn.edu.hactcm.entity.Dish;
import com.baomidou.mybatisplus.extension.service.IService;
public interface DishService extends IService<Dish> {
void saveWithFlavor(DishDto dishDto);
}

@ -0,0 +1,7 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.entity.Employee;
import com.baomidou.mybatisplus.extension.service.IService;
public interface EmployeeService extends IService<Employee> {
}

@ -0,0 +1,7 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.entity.OrderDetail;
import com.baomidou.mybatisplus.extension.service.IService;
public interface OrderDetailService extends IService<OrderDetail> {
}

@ -0,0 +1,8 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.entity.Orders;
import com.baomidou.mybatisplus.extension.service.IService;
public interface OrdersService extends IService<Orders> {
void submit(Orders orders);
}

@ -0,0 +1,7 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.entity.SetmealDish;
import com.baomidou.mybatisplus.extension.service.IService;
public interface SetmealDishService extends IService<SetmealDish> {
}

@ -0,0 +1,13 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.dto.SetmealDto;
import cn.edu.hactcm.entity.Setmeal;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
public interface SetmealService extends IService<Setmeal> {
void saveWithDish(SetmealDto setmealDto);
void removeWithDish(List<Long> list);
}

@ -0,0 +1,7 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.entity.ShoppingCart;
import com.baomidou.mybatisplus.extension.service.IService;
public interface ShoppingCartService extends IService<ShoppingCart> {
}

@ -0,0 +1,7 @@
package cn.edu.hactcm.service;
import cn.edu.hactcm.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
}

@ -0,0 +1,13 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.entity.AddressBook;
import cn.edu.hactcm.mapper.AddressBookMapper;
import cn.edu.hactcm.service.AddressBookService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class AddressBookServiceImpl extends ServiceImpl<AddressBookMapper, AddressBook> implements AddressBookService {
}

@ -0,0 +1,52 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.common.CustomException;
import cn.edu.hactcm.entity.Category;
import cn.edu.hactcm.entity.Dish;
import cn.edu.hactcm.entity.Setmeal;
import cn.edu.hactcm.mapper.CategoryMapper;
import cn.edu.hactcm.mapper.DishMapper;
import cn.edu.hactcm.mapper.SetmealMapper;
import cn.edu.hactcm.service.CategoryService;
import cn.edu.hactcm.service.SetmealService;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
@Autowired
private SetmealMapper setmealMapper;
@Autowired
private DishMapper dishMapper;
/**
*
* @param id
* @return
*/
public boolean remove(Long id) {
LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);
Integer meaCount = setmealMapper.selectCount(setmealLambdaQueryWrapper);
if (meaCount > 0) {
throw new CustomException("当前分类下关联了套餐,不能删除");
}
LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);
Integer dishCount = dishMapper.selectCount(dishLambdaQueryWrapper);
if (dishCount > 0) {
throw new CustomException("当前分类下关联了菜品,不能删除");
}
boolean flag = super.removeById(id);
return flag;
}
}

@ -0,0 +1,11 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.entity.DishFlavor;
import cn.edu.hactcm.mapper.DishFlavorMapper;
import cn.edu.hactcm.service.DishFlavorService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class DishFlavorServiceImpl extends ServiceImpl<DishFlavorMapper, DishFlavor> implements DishFlavorService {
}

@ -0,0 +1,51 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.dto.DishDto;
import cn.edu.hactcm.entity.Dish;
import cn.edu.hactcm.entity.DishFlavor;
import cn.edu.hactcm.mapper.DishMapper;
import cn.edu.hactcm.service.DishFlavorService;
import cn.edu.hactcm.service.DishService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Slf4j
public class DishServiceImpl extends ServiceImpl<DishMapper, Dish> implements DishService {
@Autowired
private DishFlavorService dishFlavorService;
/**
*
* @param dishDto
*/
@Override
@Transactional
public void saveWithFlavor(DishDto dishDto) {
//保存菜品的基本信息dish表保存操作完成后框架会自动将dishDto的id回填
boolean savaWithDish = this.save(dishDto);
//DishFlavor表中含有dishId属性而前端提交数据后在DishController的save方法参数上通过DishDto类型接收参数时
// 没有给dishFlavor对象的dishId属性赋值所以需要在这里手动赋值
List<DishFlavor> flavors = dishDto.getFlavors();
for (DishFlavor flavor : flavors) {
//这里可以取出回填的id
flavor.setDishId(dishDto.getId());
}
// log.info(flavors.toString());
//保存菜品口味配置dish_flavor表
boolean saveBatchWithFlavor = dishFlavorService.saveBatch(dishDto.getFlavors());
}
}

@ -0,0 +1,12 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.entity.Employee;
import cn.edu.hactcm.mapper.EmployeeMapper;
import cn.edu.hactcm.service.EmployeeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
}

@ -0,0 +1,13 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.entity.OrderDetail;
import cn.edu.hactcm.mapper.OrderDetailMapper;
import cn.edu.hactcm.service.OrderDetailService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class OrderDetailServiceImpl extends ServiceImpl<OrderDetailMapper, OrderDetail> implements OrderDetailService {
}

@ -0,0 +1,101 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.common.CustomException;
import cn.edu.hactcm.common.MyThreadLocalForEmployeeId;
import cn.edu.hactcm.entity.*;
import cn.edu.hactcm.mapper.OrdersMapper;
import cn.edu.hactcm.service.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@Service
@Slf4j
public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements OrdersService {
@Autowired
private ShoppingCartService shoppingCartService;
@Autowired
private UserService userService;
@Autowired
private AddressBookService addressBookService;
@Autowired
private OrderDetailService orderDetailService;
@Override
public void submit(Orders orders) {
//获得当前用户id
Long userId = MyThreadLocalForEmployeeId.getCurrentId();
//查询当前用户的购物车数据
LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ShoppingCart::getUserId,userId);
List<ShoppingCart> shoppingCarts = shoppingCartService.list(wrapper);
if(shoppingCarts == null || shoppingCarts.size() == 0){
throw new CustomException("购物车为空,不能下单");
}
//查询用户数据
User user = userService.getById(userId);
//查询地址数据
Long addressBookId = orders.getAddressBookId();
AddressBook addressBook = addressBookService.getById(addressBookId);
if(addressBook == null){
throw new CustomException("用户地址信息有误,不能下单");
}
long orderId = IdWorker.getId();//订单号
AtomicInteger amount = new AtomicInteger(0);
List<OrderDetail> orderDetails = shoppingCarts.stream().map((item) -> {
OrderDetail orderDetail = new OrderDetail();
orderDetail.setOrderId(orderId);
orderDetail.setNumber(item.getNumber());
orderDetail.setDishFlavor(item.getDishFlavor());
orderDetail.setDishId(item.getDishId());
orderDetail.setSetmealId(item.getSetmealId());
orderDetail.setName(item.getName());
orderDetail.setImage(item.getImage());
orderDetail.setAmount(item.getAmount());
amount.addAndGet(item.getAmount().multiply(new BigDecimal(item.getNumber())).intValue());
return orderDetail;
}).collect(Collectors.toList());
orders.setId(orderId);
orders.setOrderTime(LocalDateTime.now());
orders.setCheckoutTime(LocalDateTime.now());
orders.setStatus(2);
orders.setAmount(new BigDecimal(amount.get()));//总金额
orders.setUserId(userId);
orders.setNumber(String.valueOf(orderId));
orders.setUserName(user.getName());
orders.setConsignee(addressBook.getConsignee());
orders.setPhone(addressBook.getPhone());
orders.setAddress((addressBook.getProvinceName() == null ? "" : addressBook.getProvinceName())
+ (addressBook.getCityName() == null ? "" : addressBook.getCityName())
+ (addressBook.getDistrictName() == null ? "" : addressBook.getDistrictName())
+ (addressBook.getDetail() == null ? "" : addressBook.getDetail()));
//向订单表插入数据,一条数据
this.save(orders);
//向订单明细表插入数据,多条数据
orderDetailService.saveBatch(orderDetails);
//清空购物车数据
shoppingCartService.remove(wrapper);
}
}

@ -0,0 +1,13 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.entity.SetmealDish;
import cn.edu.hactcm.mapper.SetmealDishMapper;
import cn.edu.hactcm.service.SetmealDishService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class SetmealDishServiceImpl extends ServiceImpl<SetmealDishMapper, SetmealDish> implements SetmealDishService {
}

@ -0,0 +1,59 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.common.CustomException;
import cn.edu.hactcm.dto.SetmealDto;
import cn.edu.hactcm.entity.Setmeal;
import cn.edu.hactcm.entity.SetmealDish;
import cn.edu.hactcm.mapper.SetmealMapper;
import cn.edu.hactcm.service.SetmealDishService;
import cn.edu.hactcm.service.SetmealService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class SetmealServiceImpl extends ServiceImpl<SetmealMapper, Setmeal> implements SetmealService {
@Autowired
private SetmealDishService setmealDishService;
@Autowired
private SetmealService setmealService;
/**
*
* @param setmealDto
*/
@Override
@Transactional
public void saveWithDish(SetmealDto setmealDto) {
this.save(setmealDto);
for (SetmealDish setmealDish : setmealDto.getSetmealDishes()) {
setmealDish.setSetmealId(setmealDto.getId());
}
setmealDishService.saveBatch(setmealDto.getSetmealDishes());
}
@Override
@Transactional
public void removeWithDish(List<Long> list) {
LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(Setmeal::getId,list).eq(Setmeal::getStatus,1);
int count = setmealService.count(queryWrapper);
if (count > 0) {
throw new CustomException("有套餐正在售卖中,不可删除!");
}
this.removeByIds(list);
LambdaQueryWrapper<SetmealDish> setmealDishLambdaQueryWrapperLambdaQueryWrapper = new LambdaQueryWrapper<>();
setmealDishLambdaQueryWrapperLambdaQueryWrapper.in(SetmealDish::getSetmealId,list);
setmealDishService.remove(setmealDishLambdaQueryWrapperLambdaQueryWrapper);
}
}

@ -0,0 +1,13 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.entity.ShoppingCart;
import cn.edu.hactcm.mapper.ShoppingCartMapper;
import cn.edu.hactcm.service.ShoppingCartService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, ShoppingCart> implements ShoppingCartService {
}

@ -0,0 +1,11 @@
package cn.edu.hactcm.service.impl;
import cn.edu.hactcm.entity.User;
import cn.edu.hactcm.mapper.UserMapper;
import cn.edu.hactcm.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

@ -0,0 +1,40 @@
package cn.edu.hactcm.utils;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
/**
*
*/
public class SMSUtils {
/**
*
* @param signName
* @param templateCode
* @param phoneNumbers
* @param param
*/
public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");
IAcsClient client = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setSysRegionId("cn-hangzhou");
request.setPhoneNumbers(phoneNumbers);
request.setSignName(signName);
request.setTemplateCode(templateCode);
request.setTemplateParam("{\"code\":\""+param+"\"}");
try {
SendSmsResponse response = client.getAcsResponse(request);
System.out.println("短信发送成功");
}catch (ClientException e) {
e.printStackTrace();
}
}
}

@ -0,0 +1,43 @@
package cn.edu.hactcm.utils;
import java.util.Random;
/**
*
*/
public class ValidateCodeUtils {
/**
*
* @param length 46
* @return
*/
public static Integer generateValidateCode(int length){
Integer code =null;
if(length == 4){
code = new Random().nextInt(9999);//生成随机数最大为9999
if(code < 1000){
code = code + 1000;//保证随机数为4位数字
}
}else if(length == 6){
code = new Random().nextInt(999999);//生成随机数最大为999999
if(code < 100000){
code = code + 100000;//保证随机数为6位数字
}
}else{
throw new RuntimeException("只能生成4位或6位数字验证码");
}
return code;
}
/**
*
* @param length
* @return
*/
public static String generateValidateCode4String(int length){
Random rdm = new Random();
String hash1 = Integer.toHexString(rdm.nextInt());
String capstr = hash1.substring(0, length);
return capstr;
}
}

@ -0,0 +1,22 @@
server:
port: 8080
spring:
application:
#应用的名称,可选
name: reggie_take_out
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: yjx062711.
mybatis-plus:
configuration:
#在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: ASSIGN_ID
takeout:
path: D:\img\

@ -0,0 +1,43 @@
// 查询列表接口
const getCategoryPage = (params) => {
return $axios({
url: '/category/page',
method: 'get',
params
})
}
// 编辑页面反查详情接口
const queryCategoryById = (id) => {
return $axios({
url: `/category/${id}`,
method: 'get'
})
}
// 删除当前列的接口
const deleCategory = (ids) => {
return $axios({
url: '/category',
method: 'delete',
params: { ids }
})
}
// 修改接口
const editCategory = (params) => {
return $axios({
url: '/category',
method: 'put',
data: { ...params }
})
}
// 新增接口
const addCategory = (params) => {
return $axios({
url: '/category',
method: 'post',
data: { ...params }
})
}

@ -0,0 +1,52 @@
// 查询列表数据
const getSetmealPage = (params) => {
return $axios({
url: '/setmeal/page',
method: 'get',
params
})
}
// 删除数据接口
const deleteSetmeal = (ids) => {
return $axios({
url: '/setmeal',
method: 'delete',
params: { ids }
})
}
// 修改数据接口
const editSetmeal = (params) => {
return $axios({
url: '/setmeal',
method: 'put',
data: { ...params }
})
}
// 新增数据接口
const addSetmeal = (params) => {
return $axios({
url: '/setmeal',
method: 'post',
data: { ...params }
})
}
// 查询详情接口
const querySetmealById = (id) => {
return $axios({
url: `/setmeal/${id}`,
method: 'get'
})
}
// 批量起售禁售
const setmealStatusByStatus = (params) => {
return $axios({
url: `/setmeal/status/${params.status}`,
method: 'post',
params: { ids: params.ids }
})
}

@ -0,0 +1,82 @@
// 查询列表接口
const getDishPage = (params) => {
return $axios({
url: '/dish/page',
method: 'get',
params
})
}
// 删除接口
const deleteDish = (ids) => {
return $axios({
url: '/dish',
method: 'delete',
params: { ids }
})
}
// 修改接口
const editDish = (params) => {
return $axios({
url: '/dish',
method: 'put',
data: { ...params }
})
}
// 新增接口
const addDish = (params) => {
return $axios({
url: '/dish',
method: 'post',
data: { ...params }
})
}
// 查询详情
const queryDishById = (id) => {
return $axios({
url: `/dish/${id}`,
method: 'get'
})
}
// 获取菜品分类列表
const getCategoryList = (params) => {
return $axios({
url: '/category/list',
method: 'get',
params
})
}
// 查菜品列表的接口
const queryDishList = (params) => {
return $axios({
url: '/dish/list',
method: 'get',
params
})
}
// 文件down预览
const commonDownload = (params) => {
return $axios({
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
url: '/common/download',
method: 'get',
params
})
}
// 起售停售---批量起售停售接口
const dishStatusByStatus = (params) => {
return $axios({
url: `/dish/status/${params.status}`,
method: 'post',
params: { ids: params.id }
})
}

@ -0,0 +1,14 @@
function loginApi(data) {
return $axios({
'url': '/employee/login',
'method': 'post',
data
})
}
function logoutApi(){
return $axios({
'url': '/employee/logout',
'method': 'post',
})
}

@ -0,0 +1,42 @@
function getMemberList (params) {
return $axios({
url: '/employee/page',
method: 'get',
params
})
}
// 修改---启用禁用接口
function enableOrDisableEmployee (params) {
return $axios({
url: '/employee',
method: 'put',
data: { ...params }
})
}
// 新增---添加员工
function addEmployee (params) {
return $axios({
url: '/employee',
method: 'post',
data: { ...params }
})
}
// 修改---添加员工
function editEmployee (params) {
return $axios({
url: '/employee',
method: 'put',
data: { ...params }
})
}
// 修改页面反查详情接口
function queryEmployeeById (id) {
return $axios({
url: `/employee/${id}`,
method: 'get'
})
}

@ -0,0 +1,25 @@
// 查询列表页接口
const getOrderDetailPage = (params) => {
return $axios({
url: '/order/page',
method: 'get',
params
})
}
// 查看接口
const queryOrderDetailById = (id) => {
return $axios({
url: `/orderDetail/${id}`,
method: 'get'
})
}
// 取消,派送,完成接口
const editOrderDetail = (params) => {
return $axios({
url: '/order',
method: 'put',
data: { ...params }
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 938 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save