├── .DS_Store
├── .gitattributes
├── src
├── main
│ ├── resources
│ │ ├── static
│ │ │ ├── preImg
│ │ │ │ ├── tea
│ │ │ │ │ ├── tea01.png
│ │ │ │ │ ├── tea02.png
│ │ │ │ │ ├── tea03.png
│ │ │ │ │ ├── tea04.png
│ │ │ │ │ └── tea05.png
│ │ │ │ └── background.jpg
│ │ │ └── front
│ │ │ │ ├── images
│ │ │ │ ├── date.png
│ │ │ │ ├── img1.jpg
│ │ │ │ ├── img2.jpg
│ │ │ │ ├── img3.jpg
│ │ │ │ ├── img4.jpg
│ │ │ │ ├── img5.jpg
│ │ │ │ ├── img6.jpg
│ │ │ │ ├── loader.gif
│ │ │ │ ├── logo.png
│ │ │ │ ├── user
│ │ │ │ │ ├── 1.jpg
│ │ │ │ │ ├── 01.jpg
│ │ │ │ │ ├── 02.jpg
│ │ │ │ │ ├── 03.jpg
│ │ │ │ │ ├── 04.jpg
│ │ │ │ │ ├── 05.jpg
│ │ │ │ │ ├── 06.jpg
│ │ │ │ │ ├── 07.jpg
│ │ │ │ │ ├── 08.jpg
│ │ │ │ │ ├── 09.jpg
│ │ │ │ │ ├── 10.jpg
│ │ │ │ │ ├── 11.png
│ │ │ │ │ ├── 12.jpg
│ │ │ │ │ ├── 13.jpg
│ │ │ │ │ ├── 14.jpg
│ │ │ │ │ ├── 15.jpg
│ │ │ │ │ ├── 16.jpg
│ │ │ │ │ ├── 17.jpg
│ │ │ │ │ └── 18.jpg
│ │ │ │ ├── user1.jpg
│ │ │ │ ├── user2.jpg
│ │ │ │ ├── user3.jpg
│ │ │ │ ├── error
│ │ │ │ │ └── 02.png
│ │ │ │ └── login
│ │ │ │ │ ├── 1.png
│ │ │ │ │ ├── 2.png
│ │ │ │ │ └── 3.png
│ │ │ │ ├── fonts
│ │ │ │ └── remixicon.woff2
│ │ │ │ ├── laydate
│ │ │ │ └── theme
│ │ │ │ │ └── default
│ │ │ │ │ ├── font
│ │ │ │ │ ├── iconfont.eot
│ │ │ │ │ ├── iconfont.ttf
│ │ │ │ │ ├── iconfont.woff
│ │ │ │ │ └── iconfont.svg
│ │ │ │ │ └── laydate.css
│ │ │ │ └── css
│ │ │ │ ├── style.css
│ │ │ │ ├── owl.carousel.min.css
│ │ │ │ └── style-responsive.css
│ │ ├── application.properties
│ │ └── templates
│ │ │ ├── index.html
│ │ │ ├── activity.html
│ │ │ ├── collection.html
│ │ │ ├── login_page.html
│ │ │ ├── order_admin.html
│ │ │ ├── group.html
│ │ │ ├── cart.html
│ │ │ ├── mine_admin.html
│ │ │ ├── index_admin.html
│ │ │ ├── mine.html
│ │ │ ├── user.html
│ │ │ ├── admin.html
│ │ │ └── order.html
│ └── java
│ │ └── com
│ │ └── example
│ │ ├── exception
│ │ ├── CustomException.java
│ │ └── GlobleExceptionHandler.java
│ │ ├── mapper
│ │ ├── UsersMapper.java
│ │ ├── OrderProductUserMapper.java
│ │ ├── ActivityMapper.java
│ │ ├── ProductsMapper.java
│ │ └── OrdersMapper.java
│ │ ├── service
│ │ ├── ActivityService.java
│ │ ├── OrderProductUserService.java
│ │ ├── ProductsService.java
│ │ ├── UsersService.java
│ │ ├── impl
│ │ │ ├── ActivityServiceImpl.java
│ │ │ ├── OrderProductUserServiceImpl.java
│ │ │ ├── UsersServiceImpl.java
│ │ │ ├── ProductsServiceImpl.java
│ │ │ └── OrdersServiceImpl.java
│ │ └── OrdersService.java
│ │ ├── TeaWebApplication.java
│ │ ├── config
│ │ ├── BeanConfig.java
│ │ ├── WebConfig.java
│ │ └── WebSecurityConfig.java
│ │ ├── utils
│ │ ├── ReplaceBackground.java
│ │ ├── StringUtil.java
│ │ └── ImageBase64Converter.java
│ │ ├── entity
│ │ ├── Activity.java
│ │ ├── OrderProductUser.java
│ │ ├── vo
│ │ │ ├── Products.java
│ │ │ └── Orders.java
│ │ ├── Orders.java
│ │ ├── Users.java
│ │ └── Products.java
│ │ ├── result
│ │ └── Result.java
│ │ └── controller
│ │ └── LoginController.java
└── test
│ └── java
│ └── com
│ └── example
│ └── TeaWebApplicationTests.java
├── README.md
└── pom.xml
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/.DS_Store
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.js linguist-language=java
2 | *.css linguist-language=java
3 | *.html linguist-language=java
4 | *.vue linguist-language=java
--------------------------------------------------------------------------------
/src/main/resources/static/preImg/tea/tea01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/preImg/tea/tea01.png
--------------------------------------------------------------------------------
/src/main/resources/static/preImg/tea/tea02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/preImg/tea/tea02.png
--------------------------------------------------------------------------------
/src/main/resources/static/preImg/tea/tea03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/preImg/tea/tea03.png
--------------------------------------------------------------------------------
/src/main/resources/static/preImg/tea/tea04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/preImg/tea/tea04.png
--------------------------------------------------------------------------------
/src/main/resources/static/preImg/tea/tea05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/preImg/tea/tea05.png
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/date.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/date.png
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/img1.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/img2.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/img3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/img3.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/img4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/img4.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/img5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/img5.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/img6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/img6.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/loader.gif
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/logo.png
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/1.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user1.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user2.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user3.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/preImg/background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/preImg/background.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/error/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/error/02.png
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/login/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/login/1.png
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/login/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/login/2.png
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/login/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/login/3.png
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/01.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/02.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/03.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/04.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/05.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/06.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/07.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/07.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/08.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/08.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/09.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/09.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/10.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/11.png
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/12.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/13.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/14.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/15.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/16.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/17.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/images/user/18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/images/user/18.jpg
--------------------------------------------------------------------------------
/src/main/resources/static/front/fonts/remixicon.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/fonts/remixicon.woff2
--------------------------------------------------------------------------------
/src/main/resources/static/front/laydate/theme/default/font/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/laydate/theme/default/font/iconfont.eot
--------------------------------------------------------------------------------
/src/main/resources/static/front/laydate/theme/default/font/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/laydate/theme/default/font/iconfont.ttf
--------------------------------------------------------------------------------
/src/main/resources/static/front/laydate/theme/default/font/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/PetSuppliesSalesManagementSystem/HEAD/src/main/resources/static/front/laydate/theme/default/font/iconfont.woff
--------------------------------------------------------------------------------
/src/main/resources/static/front/css/style.css:
--------------------------------------------------------------------------------
1 | @import url("owl.carousel.min.css");
2 | @import url("remixicon.css");
3 | @import url("bootstrap.min.css");
4 | @import url("css.css");
5 | @import url("responsive.css");
6 | @import url("typography.css");
7 |
8 |
--------------------------------------------------------------------------------
/src/main/java/com/example/exception/CustomException.java:
--------------------------------------------------------------------------------
1 | package com.example.exception;
2 |
3 | public class CustomException extends RuntimeException{
4 |
5 | public CustomException() {
6 | }
7 |
8 | public CustomException(String message) {
9 | super(message);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/example/mapper/UsersMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.mapper;
2 |
3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 | import com.example.entity.Users;
5 | import org.apache.ibatis.annotations.Mapper;
6 |
7 | @Mapper
8 | public interface UsersMapper extends BaseMapper {
9 | }
10 |
--------------------------------------------------------------------------------
/src/test/java/com/example/TeaWebApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.example;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class TeaWebApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/example/mapper/OrderProductUserMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.mapper;
2 |
3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 | import com.example.entity.OrderProductUser;
5 | import org.apache.ibatis.annotations.Mapper;
6 |
7 | @Mapper
8 | public interface OrderProductUserMapper extends BaseMapper {
9 |
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/example/service/ActivityService.java:
--------------------------------------------------------------------------------
1 | package com.example.service;
2 |
3 | import com.baomidou.mybatisplus.extension.service.IService;
4 | import com.example.entity.Activity;
5 | import java.util.List;
6 |
7 | /**
8 | * (Activity)表服务接口
9 | *
10 | * @author oceans
11 | * @since 2022-04-17 19:19:43
12 | */
13 | public interface ActivityService extends IService {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/example/TeaWebApplication.java:
--------------------------------------------------------------------------------
1 | package com.example;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class TeaWebApplication {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(TeaWebApplication.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/example/mapper/ActivityMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.mapper;
2 |
3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 | import com.example.entity.Activity;
5 | import org.apache.ibatis.annotations.Mapper;
6 |
7 | /**
8 | * (Activity)表数据库访问层
9 | *
10 | * @author oceans
11 | * @since 2022-04-17 19:19:43
12 | */
13 | @Mapper
14 | public interface ActivityMapper extends BaseMapper {
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/example/service/OrderProductUserService.java:
--------------------------------------------------------------------------------
1 | package com.example.service;
2 |
3 | import com.baomidou.mybatisplus.extension.service.IService;
4 | import com.example.entity.OrderProductUser;
5 | import java.util.List;
6 |
7 | /**
8 | * (OrderProductUser)表服务接口
9 | *
10 | * @author makejava
11 | * @since 2022-03-24 16:55:10
12 | */
13 | public interface OrderProductUserService extends IService {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/example/config/BeanConfig.java:
--------------------------------------------------------------------------------
1 | package com.example.config;
2 |
3 | import org.springframework.context.annotation.Bean;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
6 | import org.springframework.security.crypto.password.PasswordEncoder;
7 |
8 | @Configuration
9 | public class BeanConfig {
10 |
11 | @Bean
12 | public PasswordEncoder passwordEncoder(){
13 | return new BCryptPasswordEncoder();
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/example/service/ProductsService.java:
--------------------------------------------------------------------------------
1 | package com.example.service;
2 |
3 | import com.baomidou.mybatisplus.extension.service.IService;
4 | import com.example.entity.Products;
5 | import java.util.List;
6 | import java.util.Map;
7 |
8 | /**
9 | * (Products)表服务接口
10 | *
11 | * @author makejava
12 | * @since 2022-03-24 14:11:47
13 | */
14 | public interface ProductsService extends IService {
15 |
16 | Boolean deleteProductById(String productId);
17 |
18 | Map getEchartsData(String searchYear, String searchMonth);
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/example/service/UsersService.java:
--------------------------------------------------------------------------------
1 | package com.example.service;
2 |
3 | import com.baomidou.mybatisplus.extension.service.IService;
4 | import com.example.entity.Users;
5 | import java.util.List;
6 |
7 | /**
8 | * (Users)表服务接口
9 | *
10 | * @author makejava
11 | * @since 2022-03-24 13:55:55
12 | */
13 | public interface UsersService extends IService {
14 |
15 | void deleteCartByUsernameAndPid(String username, String productId);
16 |
17 | void deleteCartByUserIdAndPid(String userId, String productId);
18 |
19 | void clearCart(String username);
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/example/utils/ReplaceBackground.java:
--------------------------------------------------------------------------------
1 | package com.example.utils;
2 |
3 | import static com.example.utils.ImageBase64Converter.getImgBase64Str;
4 |
5 | public class ReplaceBackground {
6 |
7 | //TODO 更换背景图片
8 | public static String replaceImg() {
9 | String path = System.getProperty("user.dir");
10 | String imgBase64Str = getImgBase64Str(path + "/src/main/resources/static/preImg/background.jpg");
11 | return "background-repeat:no-repeat ;background-size:100% 100%;background-attachment: fixed;background-image: url(data:image/png;base64," + imgBase64Str + ")";
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/example/service/impl/ActivityServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.example.service.impl;
2 |
3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4 | import com.example.entity.Activity;
5 | import com.example.mapper.ActivityMapper;
6 | import com.example.service.ActivityService;
7 | import org.springframework.stereotype.Service;
8 |
9 | import javax.annotation.Resource;
10 | import java.util.List;
11 |
12 | /**
13 | * (Activity)表服务实现类
14 | *
15 | * @author oceans
16 | * @since 2022-04-17 19:19:43
17 | */
18 | @Service("activityService")
19 | public class ActivityServiceImpl extends ServiceImpl implements ActivityService {
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/example/entity/Activity.java:
--------------------------------------------------------------------------------
1 | package com.example.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.TableId;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * (Activity)实体类
12 | *
13 | * @author oceans
14 | * @since 2022-04-17 19:19:43
15 | */
16 | @Data
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class Activity implements Serializable {
20 | private static final long serialVersionUID = -68250454628050808L;
21 |
22 | @TableId
23 | private Integer id;
24 |
25 | private String info;
26 |
27 | private Boolean isDelete;
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/com/example/service/impl/OrderProductUserServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.example.service.impl;
2 |
3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
4 | import com.example.entity.OrderProductUser;
5 | import com.example.mapper.OrderProductUserMapper;
6 | import com.example.service.OrderProductUserService;
7 | import org.springframework.stereotype.Service;
8 |
9 | /**
10 | * (OrderProductUser)表服务实现类
11 | *
12 | * @author makejava
13 | * @since 2022-03-24 16:55:10
14 | */
15 | @Service("orderProductUserService")
16 | public class OrderProductUserServiceImpl extends ServiceImpl implements OrderProductUserService {
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/example/entity/OrderProductUser.java:
--------------------------------------------------------------------------------
1 | package com.example.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.TableId;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.io.Serializable;
9 |
10 | /**
11 | * (OrderProductUser)实体类
12 | *
13 | * @author makejava
14 | * @since 2022-03-24 16:55:10
15 | */
16 | @Data
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class OrderProductUser implements Serializable {
20 | private static final long serialVersionUID = 200513105756834730L;
21 | /**
22 | * 订单id
23 | */
24 | @TableId
25 | private Integer orderId;
26 | /**
27 | * 产品id
28 | */
29 | private Integer productId;
30 | /**
31 | * 用户id
32 | */
33 | private Integer userId;
34 |
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=8080
2 | server.servlet.session.timeout=600s
3 |
4 | spring.datasource.driver-class-name=com.mysql.jdbc.Driver
5 | spring.datasource.url=jdbc:mysql://localhost:3306/graduation_291_pet_shop_web?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
6 | spring.datasource.username=root
7 | spring.datasource.password=123456
8 |
9 | spring.servlet.multipart.max-request-size=1024MB
10 | spring.servlet.multipart.max-file-size=1024MB
11 |
12 | mybatis-plus.mapper-locations=classpath:/mapper/*.xml
13 | mybatis-plus.configuration.map-underscore-to-camel-case=true
14 |
15 | spring.thymeleaf.enabled=true
16 | spring.thymeleaf.prefix=classpath:/templates/
17 | spring.thymeleaf.suffix=.html
18 | spring.thymeleaf.mode=HTML
19 | spring.thymeleaf.encoding=utf-8
20 | spring.thymeleaf.cache=false
21 |
22 | spring.jpa.show-sql=true
23 | spring.jpa.hibernate.ddl-auto=update
24 |
25 | spring.web.resources.static-locations=classpath:/static/
26 | spring.mvc.static-path-pattern=/static/**
27 |
--------------------------------------------------------------------------------
/src/main/java/com/example/config/WebConfig.java:
--------------------------------------------------------------------------------
1 | package com.example.config;
2 |
3 | import org.springframework.context.annotation.Configuration;
4 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
6 |
7 | @Configuration
8 | public class WebConfig implements WebMvcConfigurer {
9 |
10 | private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
11 | "classpath:/META-INF/resources/", "classpath:/resources/",
12 | "classpath:/static/", "classpath:/public/" };
13 |
14 |
15 | @Override
16 | public void addResourceHandlers(ResourceHandlerRegistry registry) {
17 | if (!registry.hasMappingForPattern("/webjars/**")) {
18 | registry.addResourceHandler("/webjars/**").addResourceLocations(
19 | "classpath:/META-INF/resources/webjars/");
20 | }
21 | if (!registry.hasMappingForPattern("/**")) {
22 | registry.addResourceHandler("/**").addResourceLocations(
23 | CLASSPATH_RESOURCE_LOCATIONS);
24 | }
25 |
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/com/example/mapper/ProductsMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.mapper;
2 |
3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 | import com.example.entity.Products;
5 | import com.example.entity.vo.Orders;
6 | import org.apache.ibatis.annotations.Mapper;
7 | import org.apache.ibatis.annotations.Select;
8 | import org.apache.ibatis.annotations.Update;
9 |
10 | import java.util.Date;
11 | import java.util.List;
12 | import java.util.Set;
13 |
14 | @Mapper
15 | public interface ProductsMapper extends BaseMapper {
16 |
17 | @Update("update products set product_is_delete = true where product_id = #{productId}")
18 | Boolean deleteProductBy(Integer productId);
19 |
20 | @Select("select product_name,product_price,order_amount from products natural join order_product_user natural join orders " +
21 | " where product_category = #{productCategory} and order_create_time between #{startDate} and #{endDate}")
22 | List getAboutOrderInformation(Date startDate, Date endDate, String productCategory);
23 |
24 | @Select("SELECT order_valuation from products NATURAL join order_product_user NATURAL join orders where product_id = #{productId}")
25 | Set getOrderValuationByProductId(Integer productId);
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/example/result/Result.java:
--------------------------------------------------------------------------------
1 | package com.example.result;
2 |
3 | import lombok.Data;
4 |
5 | import java.io.Serializable;
6 |
7 | @Data
8 | public class Result implements Serializable {
9 |
10 | private static final long serialVersionUID = 2L;
11 |
12 | private Integer code;
13 | private String message;
14 | private T data;
15 |
16 |
17 | public Result setCode(Integer code) {
18 | this.code = code;
19 | return this;
20 | }
21 |
22 | public Result setMessage(String message) {
23 | this.message = message;
24 | return this;
25 | }
26 |
27 | public Result setData(T data) {
28 | this.data = data;
29 | return this;
30 | }
31 |
32 | public static Result build(){
33 | return new Result();
34 | }
35 |
36 | public static Result buildSuccess() {
37 | return build().setCode(200).setMessage("操作成功");
38 | }
39 |
40 | public static Result buildSuccess(String message) {
41 | return build().setCode(200).setMessage(message);
42 | }
43 |
44 | public static Result buildFail() {
45 | return build().setCode(400).setMessage("操作失败");
46 | }
47 |
48 | public static Result buildFail(String message) {
49 | return build().setCode(400).setMessage(message);
50 | }
51 |
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/src/main/java/com/example/entity/vo/Products.java:
--------------------------------------------------------------------------------
1 | package com.example.entity.vo;
2 |
3 | import com.baomidou.mybatisplus.annotation.TableField;
4 | import com.baomidou.mybatisplus.annotation.TableId;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 | import org.hibernate.validator.constraints.Length;
9 |
10 | import javax.validation.constraints.NotNull;
11 | import javax.validation.constraints.Positive;
12 | import java.io.Serializable;
13 | import java.util.Date;
14 |
15 | /**
16 | * (Products)实体类
17 | *
18 | * @author makejava
19 | * @since 2022-03-24 14:11:47
20 | */
21 | @Data
22 | @AllArgsConstructor
23 | @NoArgsConstructor
24 | public class Products implements Serializable {
25 |
26 | private Integer productId;
27 |
28 | private String productName;
29 |
30 | private String productStyle;
31 |
32 | private String productDescribe;
33 |
34 | private Double productPrice;
35 |
36 | private String productNumber;
37 |
38 | private Integer productAmount;
39 |
40 | private String productCategory;
41 |
42 | private Date productCreateTime;
43 |
44 | private Date productUpdateTime;
45 |
46 | private Boolean productIsDelete;
47 |
48 | private byte[] productImg;
49 |
50 | private String url;
51 |
52 | private String orderValuation;
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/com/example/service/OrdersService.java:
--------------------------------------------------------------------------------
1 | package com.example.service;
2 |
3 | import com.baomidou.mybatisplus.extension.service.IService;
4 | import com.example.entity.Orders;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * (Orders)表服务接口
10 | *
11 | * @author makejava
12 | * @since 2022-03-24 16:55:10
13 | */
14 | public interface OrdersService extends IService {
15 |
16 | Orders generateOrder(Integer productId, Integer productAmount_m, Boolean isGroup, Integer userId, Boolean isCart);
17 |
18 | Orders paymentByOrderNumber(String orderNumber);
19 |
20 | List getAllGrouping(Integer userId, String searchCon);
21 |
22 | Orders addGenerateOrder(Integer productId, Integer productAmount, Integer userId);
23 |
24 | Boolean updateOrderByOrderNumber(String orderNumber);
25 |
26 | List getAllOrderByUserId(Integer userId, String searchCon);
27 |
28 | Boolean valuationOrderByOrderNumber(String orderNumber, String orderValuation);
29 |
30 | Boolean sendProductByOrderNumber(String orderNumber);
31 |
32 | Boolean receiptProductByOrderNumber(String orderNumber);
33 |
34 | Boolean deleteOrdersByOrderNumber(String orderNumber);
35 |
36 | List getAllOrder(String searchCon);
37 |
38 | String getOrderValuationByProductId(Integer productId);
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/src/main/java/com/example/entity/Orders.java:
--------------------------------------------------------------------------------
1 | package com.example.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.TableId;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | import java.util.Date;
9 | import java.io.Serializable;
10 |
11 | /**
12 | * (Orders)实体类
13 | *
14 | * @author makejava
15 | * @since 2022-03-24 16:55:10
16 | */
17 | @Data
18 | @AllArgsConstructor
19 | @NoArgsConstructor
20 | public class Orders implements Serializable {
21 | private static final long serialVersionUID = 676710221565364428L;
22 |
23 | @TableId
24 | private Integer orderId;
25 | /**
26 | * 评价
27 | */
28 | private String orderValuation;
29 | /**
30 | * 订单编号
31 | */
32 | private String orderNumber;
33 | /**
34 | * 订单数量
35 | */
36 | private Integer orderAmount;
37 | /**
38 | * 是否付款
39 | */
40 | private Boolean orderIsPay;
41 | /**
42 | * 收货状态
43 | */
44 | private String orderIsReceipt;
45 | /**
46 | * 是否结束组团
47 | */
48 | private Boolean orderIsGroupEnd;
49 | /**
50 | * 是否组团
51 | */
52 | private Boolean orderIsGroup;
53 | /**
54 | * 是否评价
55 | */
56 | private Boolean orderIsEvaluate;
57 |
58 | private Date orderCreateTime;
59 |
60 | private Date orderUpdateTime;
61 |
62 | private Boolean orderIsDelete;
63 |
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/src/main/java/com/example/utils/StringUtil.java:
--------------------------------------------------------------------------------
1 | package com.example.utils;
2 |
3 | import org.apache.commons.lang3.StringUtils;
4 | import org.springframework.util.DigestUtils;
5 |
6 | import java.text.SimpleDateFormat;
7 | import java.util.UUID;
8 |
9 |
10 | /**
11 | * @author 何进业
12 | */
13 | public class StringUtil {
14 | /**
15 | * 生成随机字符串
16 | */
17 | public static String generateUUID(){
18 | return UUID.randomUUID().toString().replaceAll("-","");
19 | }
20 |
21 | /**
22 | * MD5加密
23 | */
24 | public static String md5(String key){
25 | if (StringUtils.isBlank(key)){
26 | return null;
27 | }
28 | return DigestUtils.md5DigestAsHex(key.getBytes());
29 | }
30 |
31 | /**
32 | * 日期格式字符串转换成时间戳
33 | * @param date_str 字符串日期
34 | * @param format 如:yyyy-MM-dd HH:mm:ss
35 | * @return
36 | */
37 | public static String date2TimeStamp(String date_str,String format){
38 | try {
39 | SimpleDateFormat sdf = new SimpleDateFormat(format);
40 | return String.valueOf(sdf.parse(date_str).getTime()/1000);
41 | } catch (Exception e) {
42 | e.printStackTrace();
43 | }
44 | return "";
45 | }
46 |
47 | public static Integer changeString(String string){
48 | if (string != null && !StringUtils.isBlank(string)) {
49 | return Integer.valueOf(string);
50 | }else {
51 | return null;
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/src/main/java/com/example/exception/GlobleExceptionHandler.java:
--------------------------------------------------------------------------------
1 | package com.example.exception;
2 |
3 | import com.example.result.Result;
4 | import org.springframework.ui.Model;
5 | import org.springframework.validation.BindException;
6 | import org.springframework.validation.BindingResult;
7 | import org.springframework.validation.FieldError;
8 | import org.springframework.web.bind.annotation.ControllerAdvice;
9 | import org.springframework.web.bind.annotation.ExceptionHandler;
10 | import org.springframework.web.bind.annotation.ResponseBody;
11 |
12 | @ControllerAdvice
13 | public class GlobleExceptionHandler {
14 |
15 | @ExceptionHandler(CustomException.class)
16 | @ResponseBody
17 | public Result CustomException(CustomException e){
18 | return Result.buildFail(e.getMessage());
19 | }
20 |
21 | @ExceptionHandler(BindException.class)
22 | @ResponseBody
23 | public Result BindException(BindException e, Model model){
24 | model.addAttribute("error", e.getMessage());
25 | BindingResult bindingResult = e.getBindingResult();
26 | String errorMessage = "";
27 | for (FieldError fieldError : bindingResult.getFieldErrors()) {
28 | errorMessage += fieldError.getDefaultMessage()+";";
29 | }
30 | return Result.buildFail(errorMessage);
31 | }
32 |
33 | @ExceptionHandler(Exception.class)
34 | public String handlerException(Exception e, Model model){
35 | model.addAttribute("error", e.getMessage());
36 | return "error";
37 | }
38 |
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/com/example/entity/vo/Orders.java:
--------------------------------------------------------------------------------
1 | package com.example.entity.vo;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Data;
5 | import lombok.NoArgsConstructor;
6 | import org.hibernate.validator.constraints.Length;
7 |
8 | import javax.validation.constraints.NotNull;
9 | import javax.validation.constraints.Positive;
10 | import java.util.Date;
11 |
12 | @Data
13 | @AllArgsConstructor
14 | @NoArgsConstructor
15 | public class Orders {
16 |
17 | private Integer productId;
18 | /**
19 | * 产品名称
20 | */
21 | private String productName;
22 | /**
23 | * 产品类型
24 | */
25 | private String productStyle;
26 | /**
27 | * 产品描述
28 | */
29 | private String productDescribe;
30 | /**
31 | * 产品价格
32 | */
33 | private Double productPrice;
34 | /**
35 | * 产品数量
36 | */
37 | private Integer productAmount;
38 |
39 | private Date productCreateTime;
40 |
41 | private Integer orderId;
42 | /**
43 | * 订单编号
44 | */
45 | private String orderNumber;
46 |
47 | private Date orderCreateTime;
48 |
49 | private Double totalMoney;
50 | /**
51 | * 是否付款
52 | */
53 | private Boolean orderIsPay;
54 | /**
55 | * 收货状态
56 | */
57 | private String orderIsReceipt;
58 | /**
59 | * 是否评价
60 | */
61 | private Boolean orderIsEvaluate;
62 | /**
63 | * 评价
64 | */
65 | private String orderValuation;
66 | /**
67 | * 订单数量
68 | */
69 | private Integer orderAmount;
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/src/main/java/com/example/entity/Users.java:
--------------------------------------------------------------------------------
1 | package com.example.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.TableId;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 | import org.hibernate.validator.constraints.Length;
8 |
9 | import javax.validation.constraints.*;
10 | import java.util.Date;
11 | import java.io.Serializable;
12 |
13 | /**
14 | * (Users)实体类
15 | *
16 | * @author makejava
17 | * @since 2022-03-24 13:55:55
18 | */
19 | @Data
20 | @AllArgsConstructor
21 | @NoArgsConstructor
22 | public class Users implements Serializable {
23 | private static final long serialVersionUID = 225599958036921154L;
24 |
25 | @TableId
26 | private Integer userId;
27 |
28 | @NotNull
29 | @Length(min = 1,max = 15,message = "用户名长度不符合要求")
30 | private String username;
31 |
32 | @NotNull
33 | @Length(min = 1,max = 100,message = "收货地址长度不符合要求")
34 | private String address;
35 |
36 | @Email(message = "邮箱不符合要求")
37 | private String email;
38 |
39 | @NotNull
40 | @Positive(message = "电话号码必须是11位")
41 | @Length(min = 11,max = 11,message = "电话号码必须是11位")
42 | private String phone;
43 |
44 | @NotNull
45 | @Length(min = 6,max = 18,message = "由数字和26个英文字母组成长度在6到18位的字符串")
46 | @Pattern(regexp = "^[A-Za-z0-9]+$", message = "由数字和26个英文字母组成长度在6到18位的字符串")
47 | private String password;
48 |
49 | private Date userCreateTime;
50 |
51 | private Date userUpdateTime;
52 |
53 | private String role;
54 |
55 | private String collection;
56 |
57 | private String cart;
58 |
59 | private Boolean isDelete;
60 |
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 全目录
2 |
3 | [更多系统、论文,供君选择 ~~>](https://www.yuque.com/wisebit/blog)
4 |
5 | # 291.PetSuppliesSalesManagementSystem
6 |
7 | 群: 983063232(入群获取sql文件)
8 | QQ: 206157502(加好友获取sql文件)
9 |
10 | 291.宠物用品销售管理系统
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | # 简介
22 |
23 | > 本代码来源于网络,仅供学习参考使用,请入群(983063232)后联系群主索要sql文件!
24 | >
25 | > 提供1.远程部署/2.修改代码/3.设计文档指导/4.框架代码讲解等服务
26 | >
27 | > 登录地址:http://localhost:8080/
28 | >
29 | > 用户名: user 密码: 123456
30 | >
31 | > 管理员用户名: admin 密码: 123456
32 | >
33 |
34 |
35 | # 环境
36 |
37 | - IntelliJ IDEA 2021.3
38 |
39 | - Mysql 5.7.26
40 |
41 | - Tomcat 7.0.73
42 |
43 | - JDK 1.8
44 |
45 |
46 |
47 |
48 |
49 | ## 缩略图
50 |
51 | 
52 | 
53 | 
54 | 
55 | 
56 | 
57 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/src/main/java/com/example/entity/Products.java:
--------------------------------------------------------------------------------
1 | package com.example.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.TableField;
4 | import com.baomidou.mybatisplus.annotation.TableId;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 | import org.hibernate.validator.constraints.Length;
9 |
10 | import javax.validation.constraints.DecimalMax;
11 | import javax.validation.constraints.DecimalMin;
12 | import javax.validation.constraints.NotNull;
13 | import javax.validation.constraints.Positive;
14 | import java.util.Date;
15 | import java.io.Serializable;
16 |
17 | /**
18 | * (Products)实体类
19 | *
20 | * @author makejava
21 | * @since 2022-03-24 14:11:47
22 | */
23 | @Data
24 | @AllArgsConstructor
25 | @NoArgsConstructor
26 | public class Products implements Serializable {
27 | private static final long serialVersionUID = 771421129548508894L;
28 |
29 | @TableId
30 | private Integer productId;
31 | /**
32 | * 产品名称
33 | */
34 | @NotNull(message = "产品名称不能为空")
35 | @Length(min = 1,max = 45,message = "产品名称长度不符合要求")
36 | private String productName;
37 | /**
38 | * 产品类型
39 | */
40 | @NotNull(message = "产品类型不能为空")
41 | @Length(min = 1,max = 45,message = "产品类型长度不符合要求")
42 | private String productStyle;
43 | /**
44 | * 产品描述
45 | */
46 | @NotNull(message = "产品描述不能为空")
47 | @Length(min = 1,max = 255,message = "产品描述长度不符合要求")
48 | private String productDescribe;
49 | /**
50 | * 产品价格
51 | */
52 | @NotNull(message = "产品价格不能为空")
53 | private Double productPrice;
54 | /**
55 | * 产品编号
56 | */
57 | private String productNumber;
58 | /**
59 | * 产品数量
60 | */
61 | @NotNull(message = "产品数量不能为空")
62 | @Positive(message = "产品数量必须是数字")
63 | private Integer productAmount;
64 | /**
65 | * 产品类别
66 | */
67 | private String productCategory;
68 | /**
69 | * 上架时间
70 | */
71 | private Date productCreateTime;
72 | /**
73 | * 修改时间
74 | */
75 | private Date productUpdateTime;
76 | /**
77 | * 产品是否删除
78 | */
79 | private Boolean productIsDelete;
80 |
81 | private byte[] productImg;
82 |
83 | }
84 |
--------------------------------------------------------------------------------
/src/main/java/com/example/config/WebSecurityConfig.java:
--------------------------------------------------------------------------------
1 | package com.example.config;
2 |
3 | import com.example.service.impl.UsersServiceImpl;
4 | import org.springframework.beans.factory.annotation.Autowired;
5 | import org.springframework.context.annotation.Configuration;
6 | import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
7 | import org.springframework.security.config.annotation.web.builders.HttpSecurity;
8 | import org.springframework.security.config.annotation.web.builders.WebSecurity;
9 | import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
10 | import org.springframework.security.crypto.password.PasswordEncoder;
11 |
12 | @Configuration
13 | public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
14 |
15 | @Autowired
16 | private UsersServiceImpl usersService;
17 |
18 | @Autowired
19 | private PasswordEncoder passwordEncoder;
20 |
21 | @Override
22 | protected void configure(AuthenticationManagerBuilder auth) throws Exception {
23 | auth.userDetailsService(usersService).passwordEncoder(passwordEncoder);
24 | }
25 |
26 | @Override
27 | protected void configure(HttpSecurity http) throws Exception {
28 | http.authorizeRequests()
29 | .mvcMatchers("/login/**", "/", "/login/registration", "/login.html", "/").permitAll()
30 | .antMatchers("/user/**").hasRole("1")
31 | .antMatchers("/admin/**").hasRole("2")
32 | .anyRequest().permitAll().and()
33 | .formLogin().loginPage("/login_page").usernameParameter("username")//设置登录账号参数,与表单参数一致
34 | .passwordParameter("password")//设置登录密码参数,与表单参数一致
35 | .loginProcessingUrl("/login/login").defaultSuccessUrl("/login/login")//登录成功后默认的跳转页面路径
36 | .failureUrl("/").and()
37 | .logout().logoutUrl("/logout").permitAll().and()
38 | .sessionManagement().invalidSessionUrl("/") //失效后跳转到登陆页面
39 | .and().csrf().disable();
40 | }
41 |
42 | @Override
43 | public void configure(WebSecurity web) throws Exception {
44 | web.ignoring().antMatchers("/static/front/**");
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/com/example/mapper/OrdersMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.mapper;
2 |
3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4 | import com.example.entity.Orders;
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Select;
7 | import org.apache.ibatis.annotations.Update;
8 |
9 | import java.util.List;
10 |
11 | @Mapper
12 | public interface OrdersMapper extends BaseMapper {
13 |
14 | @Update("update orders set order_is_pay = true where order_number = #{orderNumber}")
15 | Boolean paymentByOrderNumber(String orderNumber);
16 |
17 | @Select("select product_id,order_create_time,product_name,product_style,product_describe,product_price,product_amount,product_create_time,order_id,order_number " +
18 | " from orders natural join order_product_user natural join products " +
19 | " where order_is_group = true and order_is_group_end = false and user_id != #{userId} and product_name like #{searchCon}")
20 | List getAllGrouping(Integer userId, String searchCon);
21 |
22 | @Update("update orders set order_is_group_end = true where order_number = #{orderNumber}")
23 | Boolean updateOrderByOrderNumber(String orderNumber);
24 |
25 | @Select("select order_valuation,order_is_evaluate,order_is_receipt,order_is_pay,product_id,order_create_time,product_name,product_style,product_describe,product_price,product_amount,product_create_time,order_id,order_number,order_amount " +
26 | " from orders natural join order_product_user natural join products " +
27 | " where user_id = #{userId} and product_name like #{searchCon} and order_is_delete = false order by order_create_time desc")
28 | List getAllOrderByUserId(Integer userId, String searchCon);
29 |
30 | @Update("update orders set order_valuation = #{orderValuation} where order_number = #{orderNumber}")
31 | Boolean valuationOrderByOrderNumber(String orderNumber, String orderValuation);
32 |
33 | @Update("update orders set order_is_receipt = '2' where order_number = #{orderNumber}")
34 | Boolean sendProductByOrderNumber(String orderNumber);
35 |
36 | @Update("update orders set order_is_receipt = '3' where order_number = #{orderNumber}")
37 | Boolean receiptProductByOrderNumber(String orderNumber);
38 |
39 | @Update("update orders set order_is_delete = true where order_number = #{orderNumber}")
40 | Boolean deleteOrdersByOrderNumber(String orderNumber);
41 |
42 | @Select("select order_valuation,order_is_evaluate,order_is_receipt,order_is_pay,product_id,order_create_time,product_name,product_style,product_describe,product_price,product_amount,product_create_time,order_id,order_number,order_amount " +
43 | " from orders natural join order_product_user natural join products " +
44 | " where product_name like #{searchCon} and order_is_delete = false")
45 | List getAllOrder(String searchCon);
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/resources/static/front/laydate/theme/default/font/iconfont.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
46 |
--------------------------------------------------------------------------------
/src/main/java/com/example/service/impl/UsersServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.example.service.impl;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5 | import com.example.entity.Users;
6 | import com.example.mapper.UsersMapper;
7 | import com.example.service.UsersService;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.security.core.authority.SimpleGrantedAuthority;
10 | import org.springframework.security.core.userdetails.User;
11 | import org.springframework.security.core.userdetails.UserDetails;
12 | import org.springframework.security.core.userdetails.UserDetailsService;
13 | import org.springframework.security.core.userdetails.UsernameNotFoundException;
14 | import org.springframework.stereotype.Service;
15 |
16 | import java.util.LinkedList;
17 | import java.util.List;
18 |
19 | /**
20 | * (Users)表服务实现类
21 | *
22 | * @author makejava
23 | * @since 2022-03-24 13:55:55
24 | */
25 | @Service("usersService")
26 | public class UsersServiceImpl extends ServiceImpl implements UsersService, UserDetailsService {
27 |
28 | @Autowired
29 | private UsersMapper usersMapper;
30 |
31 | @Override
32 | public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
33 | //根据账号查询用户信息
34 | List usersList = usersMapper.selectList(new QueryWrapper().eq("username", username).eq("is_delete", false));
35 | if (usersList != null && usersList.size() > 0) {
36 | Users users = usersList.get(0);
37 | if (users != null) {
38 | SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority("ROLE_" + users.getRole());
39 | List authorities = new LinkedList<>();
40 | authorities.add(simpleGrantedAuthority);
41 | return new User(users.getUsername(), users.getPassword(), authorities);
42 | }
43 | }
44 | return null;
45 | }
46 |
47 | @Override
48 | public void deleteCartByUsernameAndPid(String username, String productId) {
49 | Users users = getOne(new QueryWrapper().eq("username", username));
50 | deleteCartByUserAndPid(users, productId);
51 | }
52 |
53 | @Override
54 | public void deleteCartByUserIdAndPid(String userId, String productId) {
55 | Users users = getOne(new QueryWrapper().eq("user_id", userId));
56 | deleteCartByUserAndPid(users, productId);
57 | }
58 |
59 | @Override
60 | public void clearCart(String username) {
61 | Users users = getOne(new QueryWrapper().eq("username", username));
62 | users.setCart("");
63 | updateById(users);
64 | }
65 |
66 | private void deleteCartByUserAndPid(Users users, String productId){
67 | String[] strList = users.getCart().split(",");
68 | String str = "";
69 | for (int i = 0; i < strList.length; i++) {
70 | if (!productId.equals(strList[i])) {
71 | str += strList[i] + ",";
72 | }
73 | }
74 | str = str.substring(0, str.length() - 1);
75 | users.setCart(str);
76 | updateById(users);
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/src/main/resources/static/front/css/owl.carousel.min.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Owl Carousel v2.3.4
3 | * Copyright 2013-2018 David Deutsch
4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE
5 | */
6 | .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 2.6.4
9 |
10 |
11 | com.example
12 | tea-web
13 | 0.0.1-SNAPSHOT
14 | tea-web
15 | tea-web
16 |
17 | 1.8
18 |
19 |
20 |
21 |
22 | org.springframework.boot
23 | spring-boot-starter-thymeleaf
24 |
25 |
26 |
27 | org.springframework.boot
28 | spring-boot-starter-web
29 |
30 |
31 |
32 | org.springframework.boot
33 | spring-boot-devtools
34 |
35 |
36 |
37 | org.springframework.boot
38 | spring-boot-starter-validation
39 |
40 |
41 |
42 | org.springframework.boot
43 | spring-boot-starter-data-jpa
44 |
45 |
46 |
47 | commons-fileupload
48 | commons-fileupload
49 | 1.3
50 |
51 |
52 |
53 | mysql
54 | mysql-connector-java
55 |
56 |
57 |
58 | com.baomidou
59 | mybatis-plus-boot-starter
60 | 3.5.0
61 |
62 |
63 |
64 | org.springframework.boot
65 | spring-boot-starter-security
66 |
67 |
68 |
69 | org.thymeleaf.extras
70 | thymeleaf-extras-springsecurity5
71 |
72 |
73 |
74 | org.projectlombok
75 | lombok
76 |
77 |
78 |
79 | cn.hutool
80 | hutool-all
81 | 5.7.19
82 |
83 |
84 |
85 | com.alibaba
86 | fastjson
87 | 1.2.74
88 |
89 |
90 | org.apache.commons
91 | commons-lang3
92 |
93 |
94 | org.springframework.boot
95 | spring-boot-starter-test
96 | test
97 |
98 |
99 |
100 |
101 |
102 |
103 | org.springframework.boot
104 | spring-boot-maven-plugin
105 |
106 |
107 |
108 | org.projectlombok
109 | lombok
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/src/main/java/com/example/utils/ImageBase64Converter.java:
--------------------------------------------------------------------------------
1 | package com.example.utils;
2 |
3 | import org.apache.tomcat.util.codec.binary.Base64;
4 | import org.springframework.util.FileCopyUtils;
5 | import org.springframework.web.multipart.MultipartFile;
6 |
7 | import java.io.*;
8 |
9 | public class ImageBase64Converter {
10 |
11 | public static String getImgBase64Str(String imgFile) {
12 | // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
13 | InputStream in = null;
14 | byte[] data = null;
15 | // 读取图片字节数组
16 | try {
17 | in = new FileInputStream(imgFile);
18 | data = new byte[in.available()];
19 | in.read(data);
20 | in.close();
21 | } catch (IOException e) {
22 | e.printStackTrace();
23 | }
24 | return Base64.encodeBase64String(data);
25 | }
26 |
27 | //TODO 获取文件
28 | public static String saveFile(MultipartFile file) {
29 | //创建输入输出流
30 | InputStream inputStream = null;
31 | OutputStream outputStream = null;
32 | String path;
33 | String fileName;
34 | try {
35 | //获取项目路径(project)
36 | path = System.getProperty("user.dir");
37 | //获取文件的输入流
38 | inputStream = file.getInputStream();
39 | //获取上传时的文件名
40 | fileName = file.getOriginalFilename();
41 | // String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
42 | //注意是路径+文件名
43 | File targetFile = new File(path + "/wedding" + "/src" + "/main" + "/resources" + "/static" + "/scene/" + fileName);
44 | //如果之前的 String path = "d:/upload/" 没有在最后加 / ,那就要在 path 后面 + "/"
45 | //判断文件父目录是否存在
46 | if (!targetFile.getParentFile().exists()) {
47 | //不存在就创建一个
48 | targetFile.getParentFile().mkdir();
49 | }
50 | //获取文件的输出流
51 | outputStream = new FileOutputStream(targetFile);
52 | //最后使用资源访问器FileCopyUtils的copy方法拷贝文件
53 | FileCopyUtils.copy(inputStream, outputStream);
54 | } catch (
55 | IOException e) {
56 | //出现异常,则告诉页面失败
57 | return "";
58 | } finally {
59 | //无论成功与否,都有关闭输入输出流
60 | if (inputStream != null) {
61 | try {
62 | inputStream.close();
63 | } catch (IOException e) {
64 | e.printStackTrace();
65 | }
66 | }
67 | if (outputStream != null) {
68 | try {
69 | outputStream.close();
70 | } catch (IOException e) {
71 | e.printStackTrace();
72 | }
73 | }
74 | }
75 | return path + "/wedding" + "/src" + "/main" + "/resources" + "/static" + "/scene/" + fileName;
76 | }
77 |
78 |
79 | /**
80 | * 本地文件(图片、excel等)转换成Base64字符串
81 | *
82 | * @param imgPath
83 | */
84 | // public static String convertFileToBase64(String imgPath) {
85 | // byte[] data = null;
86 | // // 读取图片字节数组
87 | // try {
88 | // InputStream in = new FileInputStream(imgPath);
89 | // System.out.println("文件大小(字节)="+in.available());
90 | // data = new byte[in.available()];
91 | // in.read(data);
92 | // in.close();
93 | // } catch (IOException e) {
94 | // e.printStackTrace();
95 | // }
96 | // // 对字节数组进行Base64编码,得到Base64编码的字符串
97 | // BASE64Encoder encoder = new BASE64Encoder();
98 | // String base64Str = encoder.encode(data);
99 | // return base64Str;
100 | // }
101 | //
102 | // /**
103 | // * 将base64字符串,生成文件
104 | // */
105 | // public static File convertBase64ToFile(String fileBase64String, String filePath, String fileName) {
106 | //
107 | // BufferedOutputStream bos = null;
108 | // FileOutputStream fos = null;
109 | // File file = null;
110 | // try {
111 | // File dir = new File(filePath);
112 | // if (!dir.exists() && dir.isDirectory()) {//判断文件目录是否存在
113 | // dir.mkdirs();
114 | // }
115 | //
116 | // BASE64Decoder decoder = new BASE64Decoder();
117 | // byte[] bfile = decoder.decodeBuffer(fileBase64String);
118 | //
119 | // file = new File(filePath + File.separator + fileName);
120 | // fos = new FileOutputStream(file);
121 | // bos = new BufferedOutputStream(fos);
122 | // bos.write(bfile);
123 | // return file;
124 | // } catch (Exception e) {
125 | // e.printStackTrace();
126 | // return null;
127 | // } finally {
128 | // if (bos != null) {
129 | // try {
130 | // bos.close();
131 | // } catch (IOException e1) {
132 | // e1.printStackTrace();
133 | // }
134 | // }
135 | // if (fos != null) {
136 | // try {
137 | // fos.close();
138 | // } catch (IOException e1) {
139 | // e1.printStackTrace();
140 | // }
141 | // }
142 | // }
143 | // }
144 |
145 | }
146 |
--------------------------------------------------------------------------------
/src/main/java/com/example/service/impl/ProductsServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.example.service.impl;
2 |
3 | import cn.hutool.core.date.DateUtil;
4 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5 | import com.example.entity.Products;
6 | import com.example.entity.vo.Orders;
7 | import com.example.mapper.ProductsMapper;
8 | import com.example.service.ProductsService;
9 | import com.example.utils.StringUtil;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.stereotype.Service;
12 |
13 | import java.math.BigDecimal;
14 | import java.util.*;
15 |
16 | /**
17 | * (Products)表服务实现类
18 | *
19 | * @author makejava
20 | * @since 2022-03-24 14:11:47
21 | */
22 | @Service("productsService")
23 | public class ProductsServiceImpl extends ServiceImpl implements ProductsService {
24 |
25 | @Autowired
26 | private ProductsMapper productsMapper;
27 |
28 | @Override
29 | public Boolean deleteProductById(String productId) {
30 | Integer productId_m = StringUtil.changeString(productId);
31 | return productsMapper.deleteProductBy(productId_m);
32 | }
33 |
34 | @Override
35 | public Map getEchartsData(String searchYear, String searchMonth) {
36 | Calendar calendar = Calendar.getInstance();
37 | int year = calendar.get(Calendar.YEAR);
38 | int month = calendar.get(Calendar.MONTH) + 1;
39 | String startTime = "";
40 | String endTime = "";
41 | if (!"".equals(searchYear) && searchYear != null && !"".equals(searchMonth) && searchMonth != null) {
42 | Integer searchMonth_m = StringUtil.changeString(searchMonth);
43 | if (searchMonth_m >= 10) {
44 | startTime = searchYear + "-" + searchMonth + "-" + "01";
45 | } else {
46 | startTime = searchYear + "-" + "0" + searchMonth + "-" + "01";
47 | }
48 | int mon = Integer.parseInt(searchMonth) + 1;
49 | if (13 == mon) {
50 | endTime = (Integer.parseInt(searchYear) + 1) + "-" + "01-01";
51 | } else if (mon >= 10) {
52 | endTime = searchYear + "-" + mon + "-" + "01";
53 | } else {
54 | endTime = searchYear + "-" + "0" + mon + "-" + "01";
55 | }
56 | } else {
57 | if (month >= 10) {
58 | startTime = year + "-" + month + "-" + "01";
59 | } else {
60 | startTime = year + "-" + "0" + month + "-" + "01";
61 | }
62 | int mon = month + 1;
63 | if (13 == mon) {
64 | endTime = (year + 1) + "-" + "01-01";
65 | } else if (mon >= 10) {
66 | endTime = year + "-" + mon + "-" + "01";
67 | } else {
68 | endTime = year + "-" + "0" + mon + "-" + "01";
69 | }
70 | searchYear = String.valueOf(year);
71 | searchMonth = String.valueOf(month);
72 | }
73 | Date startDate = DateUtil.parse(startTime);
74 | Date endDate = DateUtil.parse(endTime);
75 | List list1 = productsMapper.getAboutOrderInformation(startDate, endDate, "1");
76 | Integer totalAmount1 = 0;
77 | BigDecimal totalMoney1 = new BigDecimal(0);
78 | for (Orders orders : list1) {
79 | totalAmount1 += orders.getOrderAmount();
80 | totalMoney1 = new BigDecimal(orders.getProductPrice().toString()).multiply(new BigDecimal(orders.getOrderAmount())).add(totalMoney1);
81 | }
82 | List list2 = productsMapper.getAboutOrderInformation(startDate, endDate, "2");
83 | Integer totalAmount2 = 0;
84 | BigDecimal totalMoney2 = new BigDecimal(0);
85 | for (Orders orders : list2) {
86 | totalAmount2 += orders.getOrderAmount();
87 | totalMoney2 = new BigDecimal(orders.getProductPrice().toString()).multiply(new BigDecimal(orders.getOrderAmount())).add(totalMoney2);
88 | }
89 | List list3 = productsMapper.getAboutOrderInformation(startDate, endDate, "3");
90 | Integer totalAmount3 = 0;
91 | BigDecimal totalMoney3 = new BigDecimal(0);
92 | for (Orders orders : list3) {
93 | totalAmount3 += orders.getOrderAmount();
94 | totalMoney3 = new BigDecimal(orders.getProductPrice().toString()).multiply(new BigDecimal(orders.getOrderAmount())).add(totalMoney3);
95 | }
96 | Integer totalAmount = totalAmount1 + totalAmount2 + totalAmount3;
97 | Double totalMoney = totalMoney1.add(totalMoney2).add(totalMoney3).doubleValue();
98 | Map map = new HashMap<>();
99 | map.put("totalAmount", totalAmount);
100 | map.put("totalAmount1", totalAmount1);
101 | map.put("totalAmount2", totalAmount2);
102 | map.put("totalAmount3", totalAmount3);
103 | map.put("totalMoney", totalMoney);
104 | map.put("totalMoney1", totalMoney1.doubleValue());
105 | map.put("totalMoney2", totalMoney2.doubleValue());
106 | map.put("totalMoney3", totalMoney3.doubleValue());
107 | map.put("searchYear", searchYear);
108 | map.put("searchMonth", searchMonth);
109 | return map;
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/src/main/resources/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 萌多宠物用品网上销售系统
15 |
16 |
17 |
18 |
19 |
20 |
21 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
45 |
46 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 | -
65 |
![]()
66 |
67 | 名称:
68 | 价格:
69 | 描述:
70 | 评价:
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/src/main/resources/templates/activity.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 萌多宠物用品网上销售系统
15 |
16 |
17 |
18 |
19 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
39 |
40 |
41 |
42 |
43 | 暂无活动
44 |
45 |
46 |
49 |
删除活动
51 |
52 |
53 |
54 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
118 |
119 |
120 |
--------------------------------------------------------------------------------
/src/main/resources/templates/collection.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
12 |
13 | 萌多宠物用品网上销售系统
14 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
37 |
38 |
39 |
40 |
41 |
42 | | 序号 |
43 | 商品名称 |
44 | 商品类型 |
45 | 商品价格 |
46 | 商品图片 |
47 | 上架日期 |
48 | 操作 |
49 |
50 |
51 |
52 |
53 | |
54 | |
55 | |
56 | |
57 | ![]() |
58 |
60 | |
61 |
62 | 查看
64 |
67 | 移除
69 | |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/src/main/java/com/example/controller/LoginController.java:
--------------------------------------------------------------------------------
1 | package com.example.controller;
2 |
3 | import com.alibaba.fastjson.JSON;
4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5 | import com.example.entity.Activity;
6 | import com.example.entity.Users;
7 | import com.example.exception.CustomException;
8 | import com.example.mapper.ActivityMapper;
9 | import com.example.result.Result;
10 | import com.example.service.ActivityService;
11 | import com.example.service.UsersService;
12 | import com.example.utils.ReplaceBackground;
13 | import org.springframework.beans.factory.annotation.Autowired;
14 | import org.springframework.security.core.annotation.AuthenticationPrincipal;
15 | import org.springframework.security.core.userdetails.UserDetails;
16 | import org.springframework.security.crypto.password.PasswordEncoder;
17 | import org.springframework.stereotype.Controller;
18 | import org.springframework.ui.Model;
19 | import org.springframework.validation.annotation.Validated;
20 | import org.springframework.web.bind.annotation.PostMapping;
21 | import org.springframework.web.bind.annotation.RequestMapping;
22 | import org.springframework.web.bind.annotation.ResponseBody;
23 |
24 | import javax.servlet.http.HttpServletRequest;
25 | import java.util.Date;
26 | import java.util.List;
27 | import java.util.Objects;
28 |
29 |
30 | @Controller
31 | public class LoginController {
32 |
33 | @Autowired
34 | private PasswordEncoder passwordEncoder;
35 |
36 | @Autowired
37 | private UsersService usersService;
38 | @Autowired
39 | private ActivityService activityService;
40 |
41 | //TODO 登录页
42 | @RequestMapping("/login_page")
43 | public String login(Model model) {
44 | List list = usersService.list(new QueryWrapper().eq("username", "admin"));
45 | List list1 = activityService.list(new QueryWrapper().eq("id", 1));
46 | if (list1.size() == 0){
47 | Activity activity = new Activity();
48 | activity.setId(1);
49 | activity.setIsDelete(false);
50 | activityService.save(activity);
51 | }
52 | if (!(list.size() > 0)) {
53 | Users users = new Users();
54 | users.setUsername("admin");
55 | users.setPassword(passwordEncoder.encode("123456"));
56 | users.setAddress("");
57 | users.setIsDelete(false);
58 | users.setPhone("12312341234");
59 | users.setEmail("153131@qq.com");
60 | users.setCollection("");
61 | users.setCart("");
62 | users.setUserCreateTime(new Date());
63 | users.setRole("2");
64 | users.setIsDelete(false);
65 | usersService.save(users);
66 | }
67 | String imgBase64Str = ReplaceBackground.replaceImg();
68 | model.addAttribute("imgBase64Str", imgBase64Str);
69 | return "login_page";
70 | }
71 |
72 | //TODO 登录页
73 | @RequestMapping("/")
74 | public String nullPath(Model model) {
75 | List list = usersService.list(new QueryWrapper().eq("username", "admin"));
76 | List list1 = activityService.list(new QueryWrapper().eq("id", 1));
77 | if (list1.size() == 0){
78 | Activity activity = new Activity();
79 | activity.setId(1);
80 | activity.setIsDelete(false);
81 | activityService.save(activity);
82 | }
83 | if (!(list.size() > 0)) {
84 | Users users = new Users();
85 | users.setUsername("admin");
86 | users.setPassword(passwordEncoder.encode("123456"));
87 | users.setAddress("");
88 | users.setIsDelete(false);
89 | users.setPhone("12312341234");
90 | users.setEmail("153131@qq.com");
91 | users.setCollection("");
92 | users.setCart("");
93 | users.setUserCreateTime(new Date());
94 | users.setRole("2");
95 | users.setIsDelete(false);
96 | usersService.save(users);
97 | }
98 | String imgBase64Str = ReplaceBackground.replaceImg();
99 | model.addAttribute("imgBase64Str", imgBase64Str);
100 | return "login_page";
101 | }
102 |
103 | //TODO 登录系统后根据用户角色导航到管理端或者用户端
104 | @RequestMapping("/login/login")
105 | public String loginLogin(HttpServletRequest request, @AuthenticationPrincipal UserDetails userDetails) {
106 | Users one = usersService.getOne(new QueryWrapper().eq("username", userDetails.getUsername()));
107 | if ("1".equals(one.getRole())) {
108 | return "redirect:/user/index";
109 | } else if ("2".equals(one.getRole())) {
110 | return "redirect:/admin/index";
111 | } else {
112 | return "redirect:/logout";
113 | }
114 | }
115 |
116 | //TODO 注册用户
117 | @PostMapping("/login/registration")
118 | @ResponseBody
119 | public String registration(@Validated Users users, String password_2) throws CustomException {
120 | System.out.println(users);
121 | users.setRole("1");
122 | users.setCart("");
123 | users.setCollection("");
124 | users.setIsDelete(false);
125 | if (users.getPassword().equals(password_2)) {
126 | users.setPassword(passwordEncoder.encode(users.getPassword()));
127 | List list = usersService.list(new QueryWrapper().eq("username", users.getUsername()));
128 | if (list.size() > 0) {
129 | return JSON.toJSONString(Result.buildFail("该用户名已存在"));
130 | }
131 | users.setUserCreateTime(new Date());
132 | usersService.save(users);
133 | return JSON.toJSONString(Result.buildSuccess("注册成功"));
134 | }
135 | return JSON.toJSONString(Result.buildFail("密码和确认密码不一致"));
136 | }
137 |
138 | }
139 |
--------------------------------------------------------------------------------
/src/main/resources/templates/login_page.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 萌多宠物用品网上销售系统
11 |
12 |
13 |
14 |
15 |
16 |
17 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
32 |
萌多宠物用品网上销售系统
33 |
34 |
56 |
57 |
58 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
--------------------------------------------------------------------------------
/src/main/resources/static/front/css/style-responsive.css:
--------------------------------------------------------------------------------
1 | /* MEDIA QUERIES */
2 |
3 | @media screen and (max-width: 800px) {
4 |
5 | body {
6 | position: relative;
7 | }
8 |
9 | .left-side {
10 | display: none;
11 | }
12 |
13 | .main-content {
14 | margin-left: 0;
15 | width: 100%;
16 | }
17 |
18 | .left-side-collapsed .left-side {
19 | display: none;
20 | }
21 |
22 | .left-side-collapsed .main-content {
23 | margin-left: 0;
24 | }
25 |
26 | .left-side-collapsed .header-section {
27 | margin-left: 0;
28 | }
29 |
30 | .left-side-show section {
31 | overflow-x: hidden;
32 | }
33 |
34 | .left-side-show .left-side {
35 | display: block;
36 | }
37 |
38 | .left-side-show .main-content {
39 | margin-left: 240px;
40 | }
41 |
42 | .btn-demo {
43 | margin-bottom: 20px;
44 | }
45 |
46 | .left-sideinner {
47 | padding: 5px 10px;
48 | }
49 |
50 | .left-sideinner .searchform input {
51 | background: #fff;
52 | border: 0;
53 | }
54 |
55 | .sticky-header .header-section, .sticky-header.left-side-collapsed .header-section {
56 | left: 0;
57 | }
58 |
59 | .sticky-header.left-side-show .header-section {
60 | left: 240px;
61 | }
62 |
63 | .sticky-header .menu-right {
64 | margin-right: 15px;
65 | }
66 |
67 | .sticky-header .left-side {
68 | top: 60px;
69 | }
70 |
71 | .lock-wrapper {
72 | margin: 25% auto;
73 | }
74 |
75 | .sticky-left-side .custom-nav {
76 | margin-top: -5px;
77 | }
78 | .stepy-error {
79 | bottom: 50px;
80 | }
81 |
82 | /*----------*/
83 |
84 | .left-side-collapsed .left-side {
85 | left: 0;
86 | top: 50px;
87 | width: 240px;
88 | }
89 |
90 | .sticky-header.left-side-collapsed .menu-right {
91 | margin-right: 15px;
92 | }
93 |
94 | .left-side-collapsed .logo-icon {
95 | display: none;
96 | }
97 | .left-side-collapsed .logo {
98 | display: block;
99 | }
100 |
101 | .left-side-collapsed .left-side .searchform input {
102 | margin: 5px 0 20px 12px;
103 | }
104 |
105 | /*----------*/
106 | .wdgt-profile, ul.iconic-list {
107 | margin-bottom: 20px;
108 | }
109 | }
110 |
111 |
112 | @media screen and (max-width: 767px) {
113 |
114 | .searchform {
115 | position: relative;
116 | }
117 |
118 | .searchform input {
119 | background:#fff;
120 | }
121 |
122 | .notification-menu li:nth-child(4) {
123 | display: none;
124 | }
125 |
126 | .left-side .searchform,
127 | .left-side .logged-user {
128 | display: block;
129 | }
130 |
131 | .breadcrumb-wrapper {
132 | display: none;
133 | }
134 |
135 | .notification-menu .dropdown-menu:after {
136 | display: none;
137 | }
138 |
139 | /*calendar*/
140 | .fc-button-inner {
141 | padding: 0;
142 | }
143 |
144 | /*media gallery*/
145 | .media-gal .item {
146 | width: 100%;
147 | }
148 | .media-filter {
149 | margin: 25px 0;
150 | }
151 |
152 | .media-filter + .pull-right, .media-filter + .pull-right + .btn {
153 | float: left !important;
154 | }
155 |
156 | /*state info*/
157 | .state-info {
158 | position: static;
159 | width: 100%;
160 | margin-top: 15px;
161 | }
162 |
163 | .state-info .panel {
164 | width: 100%;
165 | }
166 |
167 | .lock-wrapper {
168 | margin: 40% auto;
169 | }
170 |
171 | .pricing-table {
172 | width: 100%;
173 | margin-left: 0;
174 | }
175 |
176 | .mail-box > aside, .mail-box > section {
177 | display: block;
178 | margin-bottom: 10px;
179 | width: 100%;
180 | }
181 |
182 | .mail-list {
183 | height: auto;
184 | }
185 |
186 | }
187 |
188 | @media screen and (max-width: 640px) {
189 |
190 | }
191 |
192 | @media screen and (max-width: 480px) {
193 | /*form wizard steps*/
194 | .widget-container .stepy-titles li , .stepy-titles li{
195 | width: 100%;
196 | }
197 | .directory-list li {
198 | display: inline-block;
199 | float: left;
200 | width: auto;
201 | }
202 |
203 | .directory-list li a {
204 | display: block;
205 | padding:5px 10px;
206 | margin-bottom: 1px;
207 | }
208 | }
209 |
210 |
211 | @media screen and (max-width: 479px) {
212 | /*calendar*/
213 | .fc-button-inner, .fc-button-content {
214 | padding: 0;
215 | }
216 | .fc-header-title h2 {
217 | font-size: 12px!important;
218 | }
219 | .fc .fc-header-space {
220 | padding-left: 0;
221 | }
222 | .fc-state-active, .fc-state-active .fc-button-inner, .fc-state-active, .fc-button-today .fc-button-inner, .fc-state-hover, .fc-state-hover .fc-button-inner {
223 | background: none repeat scroll 0 0 #FFFFFF !important;
224 | color: #32323A !important;
225 | }
226 | .fc-state-default, .fc-state-default .fc-button-inner {
227 | background: none repeat scroll 0 0 #FFFFFF !important;
228 | }
229 |
230 | .error-wrapper h1 img {
231 | width: 100%;
232 | }
233 | /*form wizard steps*/
234 | .widget-container .stepy-titles li , .stepy-titles li{
235 | width: 100%;
236 | }
237 |
238 |
239 | .directory-list li {
240 | display: inline-block;
241 | float: left;
242 | width: auto;
243 | }
244 |
245 | .directory-list li a {
246 | display: block;
247 | padding:5px 10px;
248 | margin-bottom: 1px;
249 | }
250 | }
251 |
252 | @media screen and (max-width: 360px) {
253 |
254 |
255 |
256 | .notification-menu li:first-child .dropdown-menu {
257 | margin-right: -90px;
258 | }
259 |
260 | .notification-menu li:nth-child(2) .dropdown-menu {
261 | margin-right: -45px;
262 | }
263 |
264 | .notification-menu li:nth-child(3) .dropdown-menu {
265 | margin-right: 0px;
266 | }
267 |
268 | .nav-tabs.nav-justified.nav-profile > li {
269 | float: none;
270 | display: block;
271 | width: auto;
272 | }
273 | .lock-wrapper {
274 | margin: 40% auto;
275 | max-width: 300px;
276 | }
277 | .lock-wrapper input, .lock-wrapper input:focus {
278 | width: 80% !important;
279 | }
280 | .lock-wrapper .locked {
281 | right: 70px;
282 | }
283 |
284 |
285 | }
286 |
287 | @media screen and (max-width: 320px) {
288 |
289 | .lock-wrapper {
290 | margin: 40% auto;
291 | max-width: 300px;
292 | }
293 |
294 | .lock-wrapper input, .lock-wrapper input:focus {
295 | width: 80% !important;
296 | }
297 | .lock-wrapper .locked {
298 | right: 70px;
299 | }
300 |
301 | .media-filter li {
302 | margin-bottom: 10px;
303 | display: inline-block;
304 | }
305 |
306 | .media-filter + .btn-group .btn {
307 | margin-bottom: 5px;
308 | }
309 |
310 |
311 | }
312 |
--------------------------------------------------------------------------------
/src/main/resources/static/front/laydate/theme/default/laydate.css:
--------------------------------------------------------------------------------
1 | /*! laydate-v5.0.9 日期与时间组件 MIT License http://www.layui.com/laydate/ By 贤心 */
2 | .laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}@font-face{font-family:laydate-icon;src:url(font/iconfont.eot);src:url(font/iconfont.eot#iefix) format('embedded-opentype'),url(font/iconfont.svg#iconfont) format('svg'),url(font/iconfont.woff) format('woff'),url(font/iconfont.ttf) format('truetype')}.laydate-icon{font-family:laydate-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
--------------------------------------------------------------------------------
/src/main/java/com/example/service/impl/OrdersServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.example.service.impl;
2 |
3 | import cn.hutool.core.date.DateTime;
4 | import cn.hutool.core.date.DateUtil;
5 | import cn.hutool.core.util.IdUtil;
6 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
7 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 | import com.example.entity.OrderProductUser;
9 | import com.example.entity.Orders;
10 | import com.example.entity.Products;
11 | import com.example.exception.CustomException;
12 | import com.example.mapper.OrderProductUserMapper;
13 | import com.example.mapper.OrdersMapper;
14 | import com.example.mapper.ProductsMapper;
15 | import com.example.service.OrdersService;
16 | import com.example.service.ProductsService;
17 | import com.example.service.UsersService;
18 | import org.springframework.beans.factory.annotation.Autowired;
19 | import org.springframework.stereotype.Service;
20 |
21 | import java.util.*;
22 |
23 | /**
24 | * (Orders)表服务实现类
25 | *
26 | * @author makejava
27 | * @since 2022-03-24 16:55:10
28 | */
29 | @Service("ordersService")
30 | public class OrdersServiceImpl extends ServiceImpl implements OrdersService {
31 |
32 | @Autowired
33 | private OrdersMapper ordersMapper;
34 | @Autowired
35 | private OrderProductUserMapper orderProductUserMapper;
36 | @Autowired
37 | private ProductsMapper productsMapper;
38 | @Autowired
39 | private UsersService usersService;
40 |
41 | @Override
42 | public Orders generateOrder(Integer productId, Integer productAmount_m, Boolean isGroup, Integer userId, Boolean isCart) {
43 | Orders order = new Orders();
44 | String orderNumber = IdUtil.simpleUUID();
45 | order.setOrderNumber(orderNumber);
46 | order.setOrderAmount(productAmount_m);
47 | order.setOrderIsPay(false);
48 | order.setOrderIsReceipt("1");
49 | order.setOrderIsGroup(false);
50 | order.setOrderIsGroupEnd(true);
51 | order.setOrderIsEvaluate(false);
52 | order.setOrderCreateTime(new Date());
53 | order.setOrderIsGroup(isGroup);
54 | order.setOrderIsGroupEnd(false);
55 | order.setOrderIsDelete(false);
56 | int insert = ordersMapper.insert(order);
57 | if (insert <= 0) {
58 | throw new CustomException("生成订单失败");
59 | }
60 | Orders selectOne = ordersMapper.selectOne(new QueryWrapper().eq("order_number", orderNumber));
61 | OrderProductUser orderProductUser = new OrderProductUser();
62 | orderProductUser.setOrderId(selectOne.getOrderId());
63 | orderProductUser.setProductId(productId);
64 | orderProductUser.setUserId(userId);
65 | int insert1 = orderProductUserMapper.insert(orderProductUser);
66 | if (insert1 <= 0) {
67 | throw new CustomException("生成订单失败");
68 | }
69 | //删除购物车
70 | if (isCart !=null && isCart) {
71 | usersService.deleteCartByUserIdAndPid(userId.toString(), productId.toString());
72 | }
73 | return selectOne;
74 | }
75 |
76 | @Override
77 | public Orders paymentByOrderNumber(String orderNumber) {
78 | ordersMapper.paymentByOrderNumber(orderNumber);
79 | Orders one = ordersMapper.selectOne(new QueryWrapper().eq("order_number", orderNumber));
80 | OrderProductUser orderProductUser = orderProductUserMapper.selectOne(new QueryWrapper().eq("order_id", one.getOrderId()));
81 | Products products = productsMapper.selectById(orderProductUser.getProductId());
82 | products.setProductAmount(products.getProductAmount() - one.getOrderAmount());
83 | productsMapper.updateById(products);
84 | return one;
85 | }
86 |
87 | @Override
88 | public List getAllGrouping(Integer userId, String searchCon) {
89 | return ordersMapper.getAllGrouping(userId, searchCon);
90 | }
91 |
92 | @Override
93 | public Orders addGenerateOrder(Integer productId, Integer productAmount, Integer userId) {
94 | Orders order = new Orders();
95 | String orderNumber = IdUtil.simpleUUID();
96 | order.setOrderNumber(orderNumber);
97 | order.setOrderAmount(productAmount);
98 | order.setOrderIsPay(false);
99 | order.setOrderIsReceipt("1");
100 | order.setOrderIsGroup(false);
101 | order.setOrderIsGroupEnd(false);
102 | order.setOrderIsEvaluate(false);
103 | order.setOrderCreateTime(new Date());
104 | order.setOrderIsGroup(true);
105 | order.setOrderIsGroupEnd(true);
106 | order.setOrderIsDelete(false);
107 | int insert = ordersMapper.insert(order);
108 | if (insert <= 0) {
109 | throw new CustomException("生成订单失败");
110 | }
111 | Orders selectOne = ordersMapper.selectOne(new QueryWrapper().eq("order_number", orderNumber));
112 | OrderProductUser orderProductUser = new OrderProductUser();
113 | orderProductUser.setOrderId(selectOne.getOrderId());
114 | orderProductUser.setProductId(productId);
115 | orderProductUser.setUserId(userId);
116 | int insert1 = orderProductUserMapper.insert(orderProductUser);
117 | if (insert1 <= 0) {
118 | throw new CustomException("生成订单失败");
119 | }
120 | return selectOne;
121 | }
122 |
123 | @Override
124 | public Boolean updateOrderByOrderNumber(String orderNumber) {
125 | return ordersMapper.updateOrderByOrderNumber(orderNumber);
126 | }
127 |
128 | @Override
129 | public List getAllOrderByUserId(Integer userId, String searchCon) {
130 | List orders = ordersMapper.getAllOrderByUserId(userId, searchCon);
131 | for (com.example.entity.vo.Orders order : orders) {
132 | order.setTotalMoney(order.getProductPrice() * order.getOrderAmount());
133 | }
134 | return orders;
135 | }
136 |
137 | @Override
138 | public Boolean valuationOrderByOrderNumber(String orderNumber, String orderValuation) {
139 | return ordersMapper.valuationOrderByOrderNumber(orderNumber, orderValuation);
140 | }
141 |
142 | @Override
143 | public Boolean sendProductByOrderNumber(String orderNumber) {
144 | Orders order = ordersMapper.selectOne(new QueryWrapper().eq("order_number", orderNumber));
145 | if (order.getOrderIsGroup()) {
146 | if (!order.getOrderIsGroupEnd()) {
147 | DateTime newDate = DateUtil.offsetHour(order.getOrderCreateTime(), 3);
148 | if (newDate.isAfter(new Date())) {
149 | throw new CustomException("拼单未结束");
150 | }
151 | }
152 | }
153 | return ordersMapper.sendProductByOrderNumber(orderNumber);
154 | }
155 |
156 | @Override
157 | public Boolean receiptProductByOrderNumber(String orderNumber) {
158 | return ordersMapper.receiptProductByOrderNumber(orderNumber);
159 | }
160 |
161 | @Override
162 | public Boolean deleteOrdersByOrderNumber(String orderNumber) {
163 | return ordersMapper.deleteOrdersByOrderNumber(orderNumber);
164 | }
165 |
166 | @Override
167 | public List getAllOrder(String searchCon) {
168 | List orders = ordersMapper.getAllOrder(searchCon);
169 | for (com.example.entity.vo.Orders order : orders) {
170 | order.setTotalMoney(order.getProductPrice() * order.getOrderAmount());
171 | }
172 | return orders;
173 | }
174 |
175 | @Override
176 | public String getOrderValuationByProductId(Integer productId) {
177 | Set set = productsMapper.getOrderValuationByProductId(productId);
178 | if (!set.isEmpty()) {
179 | // Iterator iterator = set.iterator();
180 | // while (iterator.hasNext()) {
181 | // String next = iterator().next();
182 | // if (!Objects.isNull(next)) {
183 | // return next;
184 | // }
185 | // }
186 | for (String next : set) {
187 | if (!Objects.isNull(next)) {
188 | return next;
189 | }
190 | }
191 | }
192 | return null;
193 | }
194 | }
195 |
--------------------------------------------------------------------------------
/src/main/resources/templates/order_admin.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 萌多宠物用品网上销售系统
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
53 |
54 |
55 |
56 |
57 | | 序号 |
58 | 商品名称 |
59 | 商品价格 |
60 | 商品数量 |
61 | 总价(¥) |
62 | 订单状态 |
63 | 下单时间 |
64 | 评价 |
65 | 操作 |
66 |
67 |
68 |
69 |
70 | |
71 | |
72 | |
73 | |
74 | |
75 |
76 |
77 | 未付款
78 |
79 |
80 | 等待发货
81 | 未收货
82 | 已完成
83 |
84 |
85 |
86 | |
87 | |
89 |
90 | |
91 |
92 | 未付款
95 |
100 |
102 | 已发货
103 |
104 | 已完成
106 |
108 | 删除
109 |
110 | |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
159 |
160 |
161 |
--------------------------------------------------------------------------------
/src/main/resources/templates/group.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 萌多宠物用品网上销售系统
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
53 |
54 |
55 |
56 |
57 | | 序号 |
58 | 名称 |
59 | 类型 |
60 | 特点 |
61 | 价格 |
62 | 数量 |
63 | 开团时间 |
64 | 操作 |
65 |
66 |
67 |
68 |
69 | |
70 | |
71 | |
72 | |
73 | [[${result.productPrice}]] |
74 | [[${result.productAmount}]] |
75 | |
77 |
78 |
79 | 查看
81 |
85 | |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
197 |
198 |
199 |
--------------------------------------------------------------------------------
/src/main/resources/templates/cart.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 萌多宠物用品网上销售系统
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
49 |
50 |
51 |
52 |
53 | | 序号 |
54 | 商品名称 |
55 | 商品类型 |
56 | 商品价格 |
57 | 商品图片 |
58 | 上架日期 |
59 | 操作 |
60 |
61 |
62 |
63 |
64 | |
65 | |
66 | |
67 | |
68 | ![]() |
69 |
71 | |
72 |
73 | 查看
75 |
79 | 移除
81 | |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
206 |
207 |
208 |
--------------------------------------------------------------------------------
/src/main/resources/templates/mine_admin.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 萌多宠物用品网上销售系统
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
193 |
194 |
195 |
--------------------------------------------------------------------------------
/src/main/resources/templates/index_admin.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 萌多宠物用品网上销售系统
15 |
16 |
17 |
18 |
19 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
39 |
40 |
76 |
77 |
78 |
79 |
销量(数量:[[${result.totalAmount}]])
80 |
81 |
82 |
83 |
营业额(总计:[[${result.totalMoney}]] 元)
84 |
85 |
86 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
192 |
193 |
194 |
--------------------------------------------------------------------------------
/src/main/resources/templates/mine.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 萌多宠物用品网上销售系统
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
83 |
84 |
88 |
89 |
90 |
91 |
92 |
93 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
197 |
198 |
199 |
--------------------------------------------------------------------------------
/src/main/resources/templates/user.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
12 |
13 | 萌多宠物用品网上销售系统
14 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
37 |
38 |
54 |
55 |
56 |
57 |
58 | | 序号 |
59 | 用户名 |
60 | 电话 |
61 | 邮箱 |
62 | 地址 |
63 | 创建时间 |
64 | 操作 |
65 |
66 |
67 |
68 |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 |
76 |
77 |
78 | 删除
80 | |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
204 |
205 |
206 |
--------------------------------------------------------------------------------
/src/main/resources/templates/admin.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
12 |
13 | 萌多宠物用品网上销售系统
14 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
37 |
38 |
54 |
55 |
56 |
57 |
58 | | 序号 |
59 | 用户名 |
60 | 电话 |
61 | 邮箱 |
62 | 地址 |
63 | 创建时间 |
64 | 操作 |
65 |
66 |
67 |
68 |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 |
76 |
77 |
78 | 删除
80 | |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
205 |
206 |
207 |
--------------------------------------------------------------------------------
/src/main/resources/templates/order.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
13 |
14 | 萌多宠物用品网上销售系统
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
53 |
54 |
55 |
56 |
57 | | 序号 |
58 | 商品名称 |
59 | 商品价格 |
60 | 商品数量 |
61 | 总价(¥) |
62 | 订单状态 |
63 | 下单时间 |
64 | 评价 |
65 | 操作 |
66 |
67 |
68 |
69 |
70 | |
71 | |
72 | |
73 | |
74 | |
75 |
76 |
77 | 未付款
78 |
79 |
80 | 等待发货
81 | 未收货
82 | 已完成
83 |
84 |
85 |
86 | |
87 | |
89 |
90 | |
91 |
92 | 查看
94 | 付 款
96 |
98 | 待收货
99 |
100 |
102 | 收 货
103 |
104 | 已完成
106 |
110 | |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
209 |
210 |
211 |
--------------------------------------------------------------------------------