diff --git a/superMarket-backend/superMarket-backend/.gitignore b/superMarket-backend/superMarket-backend/.gitignore new file mode 100644 index 0000000..24062a7 --- /dev/null +++ b/superMarket-backend/superMarket-backend/.gitignore @@ -0,0 +1,37 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target +/.mvn/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +*.log +*.jar + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + + +### VS Code ### +.vscode/ diff --git a/superMarket-backend/superMarket-backend/doc/db_market.sql b/superMarket-backend/superMarket-backend/doc/db_market.sql new file mode 100644 index 0000000..0ed766a --- /dev/null +++ b/superMarket-backend/superMarket-backend/doc/db_market.sql @@ -0,0 +1,554 @@ +/* + Navicat Premium Data Transfer + + Source Server : local + Source Server Type : MySQL + Source Server Version : 80029 (8.0.29) + Source Host : localhost:3306 + Source Schema : db_market + + Target Server Type : MySQL + Target Server Version : 80029 (8.0.29) + File Encoding : 65001 + + Date: 09/09/2024 08:11:51 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for department +-- ---------------------------- +DROP TABLE IF EXISTS `department`; +CREATE TABLE `department` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '部门名称', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of department +-- ---------------------------- +BEGIN; +INSERT INTO `department` (`id`, `name`, `info`, `state`) VALUES (8, '销售部', '销售部门', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for detail_sale_records +-- ---------------------------- +DROP TABLE IF EXISTS `detail_sale_records`; +CREATE TABLE `detail_sale_records` ( + `sell_cn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '销售订单号', + `goods_id` bigint NOT NULL COMMENT '商品编号', + `goods_num` bigint NOT NULL COMMENT '商品数量', + `goods_price` double(10,2) NOT NULL COMMENT '销售单价', + `goods_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '商品名' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of detail_sale_records +-- ---------------------------- +BEGIN; +INSERT INTO `detail_sale_records` (`sell_cn`, `goods_id`, `goods_num`, `goods_price`, `goods_name`) VALUES ('1701213155180429314', 7, 1, 120.00, '运动鞋'); +INSERT INTO `detail_sale_records` (`sell_cn`, `goods_id`, `goods_num`, `goods_price`, `goods_name`) VALUES ('1701220094014722049', 9, 1, 350.00, '桌椅套装'); +COMMIT; + +-- ---------------------------- +-- Table structure for employee +-- ---------------------------- +DROP TABLE IF EXISTS `employee`; +CREATE TABLE `employee` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `phone` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '用户名', + `email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '邮箱', + `address` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '住址', + `sex` char(1) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '性别', + `password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '密码', + `nick_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '昵称', + `head_img` longtext CHARACTER SET utf8mb3 COLLATE utf8_bin COMMENT '头像', + `state` varchar(1) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态 0:在职 1:离职', + `isAdmin` bit(1) DEFAULT NULL COMMENT '是否是超管 1:是 0不是', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `createby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `age` int DEFAULT NULL COMMENT '年龄', + `deptId` bigint DEFAULT NULL COMMENT '部门主键', + `id_card` varchar(18) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '身份证号', + `leave_time` datetime DEFAULT NULL COMMENT '离职时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of employee +-- ---------------------------- +BEGIN; +INSERT INTO `employee` (`id`, `phone`, `email`, `address`, `sex`, `password`, `nick_name`, `head_img`, `state`, `isAdmin`, `info`, `createby`, `create_time`, `age`, `deptId`, `id_card`, `leave_time`) VALUES (1, '13333333333', '123@qq.com', '杭州市余杭区水果摊', '1', '123456', '杭州水果捞', '/files/1725801956845_1.jpg', '0', b'1', '系统管理员', '张三', '2024-09-08 13:26:31', 29, NULL, '411111199905089999', NULL); +INSERT INTO `employee` (`id`, `phone`, `email`, `address`, `sex`, `password`, `nick_name`, `head_img`, `state`, `isAdmin`, `info`, `createby`, `create_time`, `age`, `deptId`, `id_card`, `leave_time`) VALUES (15, '14788888888', NULL, '北京市海淀区', '1', '123456', '李四', '/files/1694434162457_07.jpg', '0', b'0', '销售人员', '杭州水果捞', '2024-09-09 00:06:51', 18, 8, '411111199501019999', NULL); +INSERT INTO `employee` (`id`, `phone`, `email`, `address`, `sex`, `password`, `nick_name`, `head_img`, `state`, `isAdmin`, `info`, `createby`, `create_time`, `age`, `deptId`, `id_card`, `leave_time`) VALUES (16, '15455555555', NULL, NULL, '1', '123456', '叶子', '/files/1694434162457_07.jpg', '0', b'0', '仓库管理员', '张三', '2023-09-11 13:06:52', 18, 8, '511111199501015555', NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for exchange_point_products_records +-- ---------------------------- +DROP TABLE IF EXISTS `exchange_point_products_records`; +CREATE TABLE `exchange_point_products_records` ( + `cn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '订单号', + `goods_id` bigint DEFAULT NULL COMMENT '商品编号', + `member_id` bigint DEFAULT NULL COMMENT '会员编号', + `integral` bigint DEFAULT NULL COMMENT '积分', + `update_time` datetime DEFAULT NULL COMMENT '最近操作时间', + `updateby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '操作者', + `update_id` bigint DEFAULT NULL COMMENT '操作者编号', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态', + PRIMARY KEY (`cn`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of exchange_point_products_records +-- ---------------------------- +BEGIN; +INSERT INTO `exchange_point_products_records` (`cn`, `goods_id`, `member_id`, `integral`, `update_time`, `updateby`, `update_id`, `state`) VALUES ('1701220420541288450', 10, 5, 60, '2023-09-11 13:05:30', '张三', 1, '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for goods +-- ---------------------------- +DROP TABLE IF EXISTS `goods`; +CREATE TABLE `goods` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '商品名', + `createby` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '创建者', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `category_id` bigint DEFAULT NULL COMMENT '商品分类id', + `sell_price` double(10,2) DEFAULT NULL COMMENT '销售价格', + `purchash_price` double(10,2) DEFAULT NULL COMMENT '进货价格', + `update_time` datetime DEFAULT NULL COMMENT '更改时间', + `updateby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '更改者', + `category_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_czech_ci DEFAULT NULL COMMENT '分类名', + `cover_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '商品封面', + `state` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '状态', + `residue_num` bigint DEFAULT NULL COMMENT '剩余数量', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '备注', + `sales_volume` bigint DEFAULT NULL COMMENT '销量', + `inventory` bigint DEFAULT NULL COMMENT '需库存量', + `shelves` bigint DEFAULT NULL COMMENT '货架上需摆放的数量', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of goods +-- ---------------------------- +BEGIN; +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (7, '运动鞋', '张三', '2023-09-11 12:20:02', 9, 150.00, 120.00, '2023-09-11 12:20:02', '张三', '服装', '/files/1694434783850_04.jpg', '0', 19, '适合打球跑步的运动鞋', 1, 100, 10); +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (8, '《PASLMS》英文版', '张三', '2023-09-11 12:21:11', 11, 55.00, 50.00, '2023-09-11 12:21:11', '张三', '书籍', '/files/1694434840737_05.jpg', '0', 60, '著名书籍《PASLMS》英文版', NULL, 200, 50); +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (9, '桌椅套装', '张三', '2023-09-11 12:21:43', 13, 400.00, 350.00, '2023-09-11 12:22:00', '张三', '办公用具', '/files/1694434883855_03.jpg', '0', 9, '桌子加椅子', 1, 300, 20); +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (10, '短袖', '张三', '2023-09-11 12:22:50', 9, 60.00, 40.00, '2023-09-11 12:22:50', '张三', '服装', '/files/1694434945440_02.jpg', '0', 60, '夏季短袖', NULL, NULL, NULL); +INSERT INTO `goods` (`id`, `name`, `createby`, `create_time`, `category_id`, `sell_price`, `purchash_price`, `update_time`, `updateby`, `category_name`, `cover_url`, `state`, `residue_num`, `info`, `sales_volume`, `inventory`, `shelves`) VALUES (11, '变形金刚玩具套装', '张三', '2023-09-11 12:30:45', 13, 165.00, 140.00, '2023-09-11 12:30:45', '张三', '办公用具', '/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg', '0', 20, '变形金刚玩具套装', NULL, NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for goods_category +-- ---------------------------- +DROP TABLE IF EXISTS `goods_category`; +CREATE TABLE `goods_category` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '分类名', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '备注', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of goods_category +-- ---------------------------- +BEGIN; +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (9, '服装', '衣服鞋袜', '0'); +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (10, '零食', '饭后零食', '0'); +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (11, '书籍', NULL, '0'); +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (12, '饮料酒水', '饮料酒水类别', '0'); +INSERT INTO `goods_category` (`id`, `name`, `info`, `state`) VALUES (13, '办公用具', '办公用具', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for point_products +-- ---------------------------- +DROP TABLE IF EXISTS `point_products`; +CREATE TABLE `point_products` ( + `goods_id` bigint DEFAULT NULL, + `goods_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `integral` bigint DEFAULT NULL, + `updateby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + `update_id` bigint DEFAULT NULL, + `cover_url` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of point_products +-- ---------------------------- +BEGIN; +INSERT INTO `point_products` (`goods_id`, `goods_name`, `integral`, `updateby`, `update_time`, `update_id`, `cover_url`, `state`) VALUES (11, '变形金刚玩具套装', 50, '张三', '2023-09-11 12:59:48', 1, '/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg', '0'); +INSERT INTO `point_products` (`goods_id`, `goods_name`, `integral`, `updateby`, `update_time`, `update_id`, `cover_url`, `state`) VALUES (10, '短袖', 60, '张三', '2023-09-11 12:59:57', 1, '/files/1694434945440_02.jpg', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for store +-- ---------------------------- +DROP TABLE IF EXISTS `store`; +CREATE TABLE `store` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '仓库名称', + `address` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '仓库地址', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '状态', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of store +-- ---------------------------- +BEGIN; +INSERT INTO `store` (`id`, `name`, `address`, `state`, `info`) VALUES (5, '一号仓库', '北京市海淀区', '0', '超市一号仓库'); +COMMIT; + +-- ---------------------------- +-- Table structure for supplier +-- ---------------------------- +DROP TABLE IF EXISTS `supplier`; +CREATE TABLE `supplier` ( + `cn` bigint NOT NULL AUTO_INCREMENT COMMENT '编号', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '名称', + `address` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '地址', + `tel` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '联系电话', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '备注', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`cn`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of supplier +-- ---------------------------- +BEGIN; +INSERT INTO `supplier` (`cn`, `name`, `address`, `tel`, `info`, `state`) VALUES (7, '阿里巴巴', '浙江省杭州市', '19955555555', '1688商家供货商', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for t_detail_store_goods +-- ---------------------------- +DROP TABLE IF EXISTS `t_detail_store_goods`; +CREATE TABLE `t_detail_store_goods` ( + `cn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `goods_id` bigint NOT NULL, + `goods_num` int DEFAULT NULL, + `goods_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `goods_price` double DEFAULT NULL COMMENT '0:入库 1:出库', + `type` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `createid` bigint NOT NULL, + `create_time` datetime NOT NULL, + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '0:正常 1:过期 2:下架', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `expiry_time` datetime DEFAULT NULL COMMENT '过期时间', + `createby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `birth_time` datetime DEFAULT NULL COMMENT '生产时间', + `state1` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '0:正常 1:删除 2:待处理', + `store_id` bigint DEFAULT NULL, + `supplier_id` bigint DEFAULT NULL COMMENT '供货商编号', + `supplier_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '供货商名称', + `untreated_num` bigint DEFAULT NULL COMMENT '待处理数量', + PRIMARY KEY (`cn`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_detail_store_goods +-- ---------------------------- +BEGIN; +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212006578667522', 7, 200, '运动鞋', 120, '0', 1, '2023-09-11 12:32:04', '0', '运动鞋入库', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212043736006658', 8, 200, '《PASLMS》英文版', 50, '0', 1, '2023-09-11 12:32:13', '0', '', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212067161194498', 9, 200, '桌椅套装', 350, '0', 1, '2023-09-11 12:32:18', '0', '', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212086803120129', 10, 200, '短袖', 40, '0', 1, '2023-09-11 12:32:23', '0', '', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212102829555713', 11, 200, '变形金刚玩具套装', 140, '0', 1, '2023-09-11 12:32:27', '0', '', '2029-06-25 16:00:00', '张三', '2023-09-10 16:00:00', '0', 5, 7, '阿里巴巴', NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701212176804495361', 7, 20, '运动鞋', NULL, '1', 1, '2023-09-11 12:32:45', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701218295690104833', 8, 50, '《PASLMS》英文版', NULL, '1', 1, '2023-09-11 12:57:03', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701218352346763266', 9, 10, '桌椅套装', NULL, '1', 1, '2023-09-11 12:57:17', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701218386224156674', 10, 60, '短袖', NULL, '1', 1, '2023-09-11 12:57:25', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701218444214603778', 11, 20, '变形金刚玩具套装', NULL, '1', 1, '2023-09-11 12:57:39', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +INSERT INTO `t_detail_store_goods` (`cn`, `goods_id`, `goods_num`, `goods_name`, `goods_price`, `type`, `createid`, `create_time`, `state`, `info`, `expiry_time`, `createby`, `birth_time`, `state1`, `store_id`, `supplier_id`, `supplier_name`, `untreated_num`) VALUES ('1701219991275245570', 8, 10, '《PASLMS》英文版', NULL, '1', 1, '2023-09-11 13:03:48', '0', '', NULL, '张三', NULL, '0', 5, NULL, NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for t_emp_role +-- ---------------------------- +DROP TABLE IF EXISTS `t_emp_role`; +CREATE TABLE `t_emp_role` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `eid` bigint NOT NULL COMMENT '用户id', + `rid` bigint NOT NULL COMMENT '角色id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_emp_role +-- ---------------------------- +BEGIN; +INSERT INTO `t_emp_role` (`id`, `eid`, `rid`) VALUES (1, 1, 2); +INSERT INTO `t_emp_role` (`id`, `eid`, `rid`) VALUES (20, 15, 3); +INSERT INTO `t_emp_role` (`id`, `eid`, `rid`) VALUES (21, 16, 4); +INSERT INTO `t_emp_role` (`id`, `eid`, `rid`) VALUES (22, 16, 5); +COMMIT; + +-- ---------------------------- +-- Table structure for t_goods_store +-- ---------------------------- +DROP TABLE IF EXISTS `t_goods_store`; +CREATE TABLE `t_goods_store` ( + `goods_id` bigint NOT NULL COMMENT '商品编号', + `store_id` bigint NOT NULL COMMENT '仓库编号', + `in_num` bigint NOT NULL COMMENT '入库数数量', + `residue_num` bigint NOT NULL COMMENT '剩余数量', + `store_name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '仓库名' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_goods_store +-- ---------------------------- +BEGIN; +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (7, 5, 200, 180, '一号仓库'); +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (8, 5, 200, 140, '一号仓库'); +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (9, 5, 200, 190, '一号仓库'); +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (10, 5, 200, 140, '一号仓库'); +INSERT INTO `t_goods_store` (`goods_id`, `store_id`, `in_num`, `residue_num`, `store_name`) VALUES (11, 5, 200, 180, '一号仓库'); +COMMIT; + +-- ---------------------------- +-- Table structure for t_member +-- ---------------------------- +DROP TABLE IF EXISTS `t_member`; +CREATE TABLE `t_member` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '姓名', + `phone` varchar(11) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '手机号', + `password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '密码', + `email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '邮箱', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '状态', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `integral` bigint DEFAULT NULL COMMENT '会员积分', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_member +-- ---------------------------- +BEGIN; +INSERT INTO `t_member` (`id`, `name`, `phone`, `password`, `email`, `state`, `info`, `integral`) VALUES (5, '陈小明', '19955555555', '123456', '123@qq.com', '0', '新会员', 2622); +COMMIT; + +-- ---------------------------- +-- Table structure for t_menu +-- ---------------------------- +DROP TABLE IF EXISTS `t_menu`; +CREATE TABLE `t_menu` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `label` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '名称', + `purl` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '地址', + `type` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '类型 0:目录 1 菜单 2 按钮', + `parent_id` bigint DEFAULT NULL COMMENT '父id', + `parent_label` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '父名称', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `state` varchar(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '状态', + `flag` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '权限的唯一标识', + `icon` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '图标', + `component` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '组件路径', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_menu +-- ---------------------------- +BEGIN; +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (1, '销售管理', NULL, '0', NULL, NULL, NULL, '0', 'sale_management', 'iconfont icon-r-shield', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (2, '人事管理', NULL, '0', NULL, NULL, NULL, '0', 'personnel_management', 'iconfont icon-r-team', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (3, '个人中心', NULL, '0', NULL, NULL, NULL, '0', 'personal', 'iconfont icon-r-user2', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (4, '库存管理', NULL, '0', NULL, NULL, NULL, '0', 'inventory_management', 'iconfont icon-r-building', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (5, '会员管理', NULL, '0', NULL, NULL, NULL, '0', 'member_management', 'iconfont icon-r-mark1', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (6, '系统管理', NULL, '0', NULL, NULL, NULL, '0', 'system', 'iconfont icon-r-setting', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (7, '密码修改', '/personal/edit_pwd', '1', 3, '个人中心', NULL, '0', 'personal:edit_pwd', 'iconfont icon-r-lock', 'views/personal/Edit_pwd'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (8, '角色管理', '/system/role/list', '1', 6, '系统管理', NULL, '0', 'system:role:list', 'iconfont icon-r-user3', 'views/system/role/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (9, '创建角色', NULL, '2', 8, '角色管理', NULL, '0', 'system:role:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (10, '修改角色', NULL, '2', 8, '角色管理', NULL, '0', 'system:role:edit_role', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (11, '停用角色', NULL, '2', 8, '角色管理', NULL, '0', 'system:role:forbiddenRole', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (12, '角色授权', NULL, '2', 8, '角色管理', NULL, '0', 'system:role:saveRolePermissons', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (14, '菜单管理', '/system/menu/list', '1', 6, '系统管理', NULL, '0', 'system:menu:list', 'iconfont icon-r-list', 'views/system/menu/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (15, '仓库管理', '/inventory_management/store/list', '1', 4, '库存管理', NULL, '0', 'inventory_management:store:list', 'iconfont icon-r-building', 'views/inventory_management/store/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (16, '新创仓库', '', '2', 15, '仓库管理', NULL, '0', 'inventory_management:store:save', NULL, ''); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (17, '修改仓库', '', '2', 15, '仓库管理', NULL, '0', 'inventory_management:store:update', NULL, ''); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (18, '停用仓库', '', '2', 15, '仓库管理', NULL, '0', 'inventory_management:store:deactivate', NULL, ''); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (19, '商品管理', NULL, '0', NULL, NULL, NULL, '0', 'goods_management:goods_category', 'iconfont icon-r-mark2', NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (20, '分类管理', '/goods_management/goods_category/list', '1', 19, '商品管理', NULL, '0', 'goods_management:goods_category:list', 'iconfont icon-r-list', 'views/goods_management/goods_category/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (21, '创建商品分类', '', '2', 20, '商品分类管理', NULL, '0', 'goods_management:goods_category:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (22, '修改商品分类', '', '2', 20, '商品分类管理', NULL, '0', 'goods_management:goods_category:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (23, '停用商品分类', '', '2', 20, '商品分类管理', NULL, '0', 'goods_management:goods_category:deactivate', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (24, '部门管理', '/personnel_management/dept/list', '1', 2, '人事管理', NULL, '0', 'personnel_management:dept:list', 'iconfont icon-r-team', 'views/personnel_management/dept/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (25, '创建部门', NULL, '2', 24, '部门管理', NULL, '0', 'personnel_management:dept:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (26, '修改部门', NULL, '2', 24, '部门管理', NULL, '0', 'personnel_management:dept:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (27, '停用部门', NULL, '2', 24, '部门管理', NULL, '0', 'personnel_management:dept:deactivate', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (28, '员工管理', '/personnel_management/employee/list', '1', 2, '人事管理', NULL, '0', 'personnel_management:employee:list', 'iconfont icon-r-user2', 'views/personnel_management/employee/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (29, '商品信息', '/goods_management/goods/list', '1', 19, '商品管理', NULL, '0', 'goods_management:goods:list', 'iconfont icon-r-shield', 'views/goods_management/goods/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (31, '会员信息', '/member_management/member/list', '1', 5, '会员管理', NULL, '0', 'member_management:member:list', 'iconfont icon-r-mark1', 'views/member_management/member/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (32, '个人资料', '/personal/information', '1', 3, '个人中心', NULL, '0', 'personnel_management:employee:update', 'iconfont icon-r-paper', 'views/personal/Information'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (33, '出库明细', '/inventory_management/detail_store_goods_out/list', '1', 4, '库存管理', NULL, '0', 'inventory_management:detail_store_goods_out:list', 'iconfont icon-r-left', 'views/inventory_management/detail_store_goods_out/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (34, '入库明细', '/inventory_management/detail_store_goods_in/list', '1', 4, '库存管理', NULL, '0', 'inventory_management:detail_store_goods_in:list', 'iconfont icon-r-right', 'views/inventory_management/detail_store_goods_in/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (35, '销售主页', '/sale_management/sale_cmd/list', '1', 1, '销售管理', NULL, '0', 'sale_management:sale_cmd:list', 'iconfont icon-r-home', 'views/sale_management/sale_cmd/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (36, '销售记录', '/sale_management/sale_records/list', '1', 1, '销售管理', NULL, '0', 'sale_management:sale_records:list', 'iconfont icon-r-paper', 'views/sale_management/sale_records/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (37, '供货商信息', '/inventory_management/supplier/list', '1', 4, '库存管理', NULL, '0', 'inventory_management:supplier:list', 'iconfont icon-r-mark3', 'views/inventory_management/supplier/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (41, '积分商品', '/goods_management/point_products/list', '1', 19, '商品管理', NULL, '0', 'goods_management:point_products:list', 'iconfont icon-r-mark1', 'views/goods_management/point_products/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (42, '销售统计', '/goods_management/statistic_sale/list', '1', 19, '商品管理', NULL, '0', 'goods_management:statistic_sale:list', 'iconfont icon-r-add', 'views/goods_management/statistic_sale/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (43, '库存统计', '/inventory_management/store/storage_situation', '1', 4, '库存管理', NULL, '0', 'inventory_management:store:storage_situation', 'iconfont icon-r-add', 'views/inventory_management/store/StorageSituation'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (44, '积分兑换记录', '/sale_management/exchange_point_products_records/list', '1', 1, '销售管理', NULL, '0', 'sale_management:exchange_point_products_records:list', 'iconfont icon-r-paper', 'views//sale_management/exchange_point_products_records/List'); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (45, '员工创建', NULL, '2', 28, '员工管理', NULL, '0', 'personnel_management:employee:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (46, '员工修改', NULL, '2', 28, '员工管理', NULL, '0', 'personnel_management:employee:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (47, '员工分配职务', NULL, '2', 28, '员工管理', NULL, '0', 'personnel_management:employee:queryRoleIdsByEid', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (48, '重置员工密码', NULL, '2', 28, '员工管理', NULL, '0', 'personnel_management:employee:resetPwd', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (49, '商品入库', NULL, '2', 34, '入库明细', NULL, '0', 'inventory_management:detail_store_goods_in:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (50, '入库记录删除', NULL, '2', 34, '入库明细', NULL, '0', 'inventory_management:detail_store_goods_in:delIn', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (51, '商品出库', NULL, '2', 33, '出库明细', NULL, '0', 'inventory_management:detail_store_goods_out:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (52, '出库记录删除', NULL, '2', 33, '出库明细', NULL, '0', 'inventory_management:detail_store_goods_out:delOut', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (53, '创建', NULL, '2', 37, '供货商信息', NULL, '0', 'inventory_management:supplier:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (54, '修改', NULL, '2', 37, '供货商信息', NULL, '0', 'inventory_management:supplier:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (55, '删除', NULL, '2', 37, '供货商信息', NULL, '0', 'inventory_management:supplier:deactivate', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (56, '商品上架处理', NULL, '2', 40, '出库通知', NULL, '0', 'inventory_management:detail_store_goods_out:notice:saveOut_shelves', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (57, '商品过期/下架处理', NULL, '2', 40, '出库通知', NULL, '0', 'inventory_management:detail_store_goods_out:notice:resolveOutUntreatedForm', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (58, '创建', NULL, '2', 31, '会员信息管理', NULL, '0', 'member_management:member:save', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (59, '兑换商品', NULL, '2', 31, '会员信息管理', NULL, '0', 'sale_management:exchange_point_products_records:saveExchangePointProductRecords', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (60, '修改', NULL, '2', 31, '会员信息管理', NULL, '0', 'member_management:member:update', NULL, NULL); +INSERT INTO `t_menu` (`id`, `label`, `purl`, `type`, `parent_id`, `parent_label`, `info`, `state`, `flag`, `icon`, `component`) VALUES (61, '删除', NULL, '2', 31, '会员信息管理', NULL, '0', 'member_management:member:delMember', NULL, NULL); +COMMIT; + +-- ---------------------------- +-- Table structure for t_role +-- ---------------------------- +DROP TABLE IF EXISTS `t_role`; +CREATE TABLE `t_role` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', + `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '角色名', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '描述', + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '状态 0: 正常 -1:停用', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_role +-- ---------------------------- +BEGIN; +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (1, '系统管理员', '系统拥有者', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (2, '超级系统拥有者', '超级系统拥有者', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (3, '收银员', '负责销售收钱', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (4, '仓库管理员', '负责管理库存', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (5, '商品管理员', '负责商品货架的商品数量、通知仓库管理员入库和出库', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (6, '人事主管', '负责管理部门信息和员工信息', '0'); +INSERT INTO `t_role` (`id`, `name`, `info`, `state`) VALUES (7, '员工', '超市工作人员', '0'); +COMMIT; + +-- ---------------------------- +-- Table structure for t_role_menu +-- ---------------------------- +DROP TABLE IF EXISTS `t_role_menu`; +CREATE TABLE `t_role_menu` ( + `id` int NOT NULL AUTO_INCREMENT, + `rid` bigint NOT NULL COMMENT '角色id', + `mid` bigint NOT NULL COMMENT '菜单id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=134 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_role_menu +-- ---------------------------- +BEGIN; +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (64, 4, 32); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (65, 4, 33); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (66, 4, 34); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (67, 4, 3); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (68, 4, 4); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (69, 4, 37); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (70, 4, 7); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (73, 4, 43); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (74, 4, 15); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (75, 4, 16); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (76, 4, 17); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (77, 4, 49); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (78, 4, 18); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (79, 4, 50); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (80, 4, 51); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (81, 4, 52); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (82, 4, 53); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (83, 4, 54); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (84, 4, 55); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (85, 4, 56); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (86, 4, 57); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (87, 5, 19); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (88, 5, 20); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (89, 5, 21); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (90, 5, 22); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (92, 5, 23); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (93, 5, 41); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (94, 5, 42); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (95, 5, 29); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (96, 6, 48); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (97, 6, 2); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (98, 6, 24); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (99, 6, 25); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (100, 6, 26); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (101, 6, 27); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (102, 6, 28); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (103, 6, 45); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (104, 6, 46); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (105, 6, 47); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (109, 7, 32); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (110, 7, 3); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (111, 7, 7); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (121, 3, 32); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (122, 3, 1); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (123, 3, 3); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (124, 3, 35); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (125, 3, 36); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (126, 3, 5); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (127, 3, 7); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (128, 3, 44); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (129, 3, 58); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (130, 3, 59); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (131, 3, 60); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (132, 3, 61); +INSERT INTO `t_role_menu` (`id`, `rid`, `mid`) VALUES (133, 3, 31); +COMMIT; + +-- ---------------------------- +-- Table structure for t_sale_records +-- ---------------------------- +DROP TABLE IF EXISTS `t_sale_records`; +CREATE TABLE `t_sale_records` ( + `cn` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `eid` bigint NOT NULL, + `sellway` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL, + `sell_time` datetime NOT NULL, + `state` char(2) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '0:正常 1:删除', + `info` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '备注', + `sellby` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL, + `sell_total` bigint NOT NULL COMMENT '销售总数量', + `sell_totalmoney` double NOT NULL COMMENT '销售总金额', + `type` char(1) CHARACTER SET utf8mb3 COLLATE utf8_bin NOT NULL COMMENT '0:非会员消费 1:会员消费', + `member_phone` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8_bin DEFAULT NULL COMMENT '顾客会员号码', + PRIMARY KEY (`cn`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Records of t_sale_records +-- ---------------------------- +BEGIN; +INSERT INTO `t_sale_records` (`cn`, `eid`, `sellway`, `sell_time`, `state`, `info`, `sellby`, `sell_total`, `sell_totalmoney`, `type`, `member_phone`) VALUES ('1701213155180429314', 15, '0', '2023-09-11 12:37:16', '0', '', '李四', 1, 120, '0', NULL); +INSERT INTO `t_sale_records` (`cn`, `eid`, `sellway`, `sell_time`, `state`, `info`, `sellby`, `sell_total`, `sell_totalmoney`, `type`, `member_phone`) VALUES ('1701220094014722049', 1, '1', '2023-09-11 13:04:45', '0', '', '张三', 1, 315, '1', '19955555555'); +COMMIT; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/superMarket-backend/superMarket-backend/pom.xml b/superMarket-backend/superMarket-backend/pom.xml new file mode 100644 index 0000000..60613fe --- /dev/null +++ b/superMarket-backend/superMarket-backend/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + com.shasnzhu + superMarket-backend + 1.0.0 + + + + org.springframework.boot + spring-boot-starter-parent + 2.3.2.RELEASE + + + + + + mysql + mysql-connector-java + + + + com.alibaba + druid-spring-boot-starter + 1.2.11 + + + + com.baomidou + mybatis-plus-boot-starter + 3.5.2 + + + + org.springframework.boot + spring-boot-starter-web + + + + com.alibaba + fastjson + 1.2.71 + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + org.mindrot + jbcrypt + 0.4 + + + commons-io + commons-io + 2.6 + + + + org.projectlombok + lombok + 1.18.10 + provided + + + \ No newline at end of file diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/BackendApplication.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/BackendApplication.java new file mode 100644 index 0000000..f87776b --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/BackendApplication.java @@ -0,0 +1,28 @@ +package com.shanzhu.market; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * SpringBoot 启动类 + * 项目启动入口(点击右键 选择 "run BackendApplication" 启动项目) + * + * 什么是SpringBoot?(https://www.php.cn/faq/498384.html) + * + * @author: ShanZhu + * @date: 2024-08-16 + */ +@Slf4j +@SpringBootApplication +public class BackendApplication { + + public static void main(String[] args) { + + //SpringBoot 执行启动 + SpringApplication.run(BackendApplication.class, args); + + log.info("=====================项目后端启动成功============================"); + } + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/advice/ExceptionControllerAdvice.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/advice/ExceptionControllerAdvice.java new file mode 100644 index 0000000..e3455e7 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/advice/ExceptionControllerAdvice.java @@ -0,0 +1,35 @@ +package com.shanzhu.market.common.advice; + +import com.shanzhu.market.common.constants.HttpStatus; // 导入HTTP状态码常量类 +import com.shanzhu.market.common.exception.BusinessException; // 导入业务异常类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import org.springframework.web.bind.annotation.ExceptionHandler; // 导入异常处理器注解 +import org.springframework.web.bind.annotation.RestControllerAdvice; // 导入REST控制器增强注解 + +/** + * 统一异常处理类的基类 + */ +@RestControllerAdvice // 标记该类为REST控制器的全局异常处理器 +public class ExceptionControllerAdvice { + + /** + * 处理所有运行时异常 + * @param ex 运行时异常对象 + * @return 包含错误信息的JSON结果 + */ + @ExceptionHandler(RuntimeException.class) // 指定处理的异常类型为RuntimeException + public JsonResult commonExceptionHandler(RuntimeException ex){ + ex.printStackTrace(); // 打印异常堆栈信息到控制台 + return JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, ex.getMessage()); // 返回错误的JSON结果 + } + + /** + * 处理业务异常 + * @param ex 业务异常对象 + * @return 包含错误信息的JSON结果 + */ + @ExceptionHandler(BusinessException.class) // 指定处理的异常类型为BusinessException + public JsonResult businessHanler(BusinessException ex){ + return JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, ex.getMessage()); // 返回错误的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/config/BaseWebConfig.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/config/BaseWebConfig.java new file mode 100644 index 0000000..923b665 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/config/BaseWebConfig.java @@ -0,0 +1,80 @@ +package com.shanzhu.market.common.config; + +import com.shanzhu.market.common.sercurity.interceptor.EmpLoginInterceptor; // 导入员工登录拦截器类 +import com.shanzhu.market.common.util.PathUtils; // 导入路径工具类 +import org.springframework.context.annotation.Bean; // 导入Bean注解 +import org.springframework.context.annotation.Configuration; // 导入配置注解 +import org.springframework.web.servlet.config.annotation.CorsRegistry; // 导入跨域注册类 +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; // 导入拦截器注册类 +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; // 导入资源处理器注册类 +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; // 导入Web MVC配置接口 + +/** + * 解决:1.跨域问题 + */ +@Configuration // 标记该类为Spring配置类 +public class BaseWebConfig implements WebMvcConfigurer { + + /** + * 创建并返回EmpLoginInterceptor实例 + * @return EmpLoginInterceptor实例 + */ + @Bean // 标记该方法返回的对象为Spring管理的Bean + public EmpLoginInterceptor empLoginInterceptor(){ + return new EmpLoginInterceptor(); // 创建并返回EmpLoginInterceptor实例 + } + + /** + * 添加拦截器 + * @param registry 拦截器注册器 + */ + @Override + public void addInterceptors(InterceptorRegistry registry) { + // 注册EmpLoginInterceptor拦截器,并设置拦截路径和排除路径 +// registry.addInterceptor(empLoginInterceptor()) +// .addPathPatterns("/**") // 拦截所有路径 +// .excludePathPatterns("/","/login") // 排除根路径和登录路径 +// .excludePathPatterns("/files/**") // 排除文件路径 +// .excludePathPatterns("/static/**"); // 排除静态资源路径 + } + + /** + * 配置跨域访问 + * @return WebMvcConfigurer实例 + */ + @Bean // 标记该方法返回的对象为Spring管理的Bean + public WebMvcConfigurer corsConfigurer() { + return new WebMvcConfigurer() { // 创建并返回WebMvcConfigurer实例 + @Override + // 重写父类提供的跨域请求处理的接口 + public void addCorsMappings(CorsRegistry registry) { + // 添加映射路径 + registry.addMapping("/**") + // 放行哪些原始域 + .allowedOrigins("*") + // 是否发送Cookie信息 + .allowCredentials(true) + // 放行哪些原始域(请求方式) + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + // 放行哪些原始域(头部信息) + .allowedHeaders("*") + // 暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息) + .exposedHeaders("Header1", "Header2"); + } + }; + } + + /** + * 添加资源处理器 + * @param registry 资源处理器注册器 + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + String winPath = PathUtils.getClassLoadRootPath() + "/src/main/resources/static/files/"; // 获取静态文件路径 + + // 第一个方法设置访问路径前缀,第二个方法设置资源路径 + registry.addResourceHandler("/files/**") // 设置访问路径前缀为/files/** + .addResourceLocations("file:" + winPath); // 设置资源路径为静态文件路径 + WebMvcConfigurer.super.addResourceHandlers(registry); // 调用父类的addResourceHandlers方法 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/config/MpConfig.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/config/MpConfig.java new file mode 100644 index 0000000..0a98209 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/config/MpConfig.java @@ -0,0 +1,27 @@ +package com.shanzhu.market.common.config; + +import com.baomidou.mybatisplus.annotation.DbType; // 导入数据库类型枚举类 +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; // 导入MyBatis Plus拦截器类 +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; // 导入分页拦截器类 +import org.springframework.context.annotation.Bean; // 导入Bean注解 +import org.springframework.context.annotation.Configuration; // 导入配置注解 + +/** + * MyBatis Plus配置类 + */ +@Configuration // 标记该类为Spring配置类 +public class MpConfig { + + /** + * 配置MyBatis Plus分页插件 + * @return MybatisPlusInterceptor实例 + */ + @Bean // 标记该方法返回的对象为Spring管理的Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 创建MybatisPlusInterceptor实例 + PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); // 创建分页拦截器实例,并指定数据库类型为MySQL + paginationInnerInterceptor.setOverflow(true); // 启用合理化分页,避免页码超出范围 + interceptor.addInnerInterceptor(paginationInnerInterceptor); // 将分页拦截器添加到MybatisPlusInterceptor中 + return interceptor; // 返回配置好的MybatisPlusInterceptor实例 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/constants/HttpStatus.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/constants/HttpStatus.java new file mode 100644 index 0000000..220724c --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/constants/HttpStatus.java @@ -0,0 +1,24 @@ +package com.shanzhu.market.common.constants; + +public interface HttpStatus { + /** + * 操作成功 + */ + Integer CODE_SUCCESS = 200; + /** + * 请先登录 + */ + Integer CODE_NOLOGIN = 401; + /** + * 系统异常,请联系管理员 + */ + Integer CODE_ERROR = 500; + /** + * 参数异常 + */ + Integer CODE_ERROR_PARAM = 400; + + /**业务异常*/ + Integer CODE_BUSINESS_ERROR=50000; + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/BusinessException.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/BusinessException.java new file mode 100644 index 0000000..17e9707 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/BusinessException.java @@ -0,0 +1,26 @@ +package com.shanzhu.market.common.exception; + +import com.shanzhu.market.common.constants.HttpStatus; // 导入HTTP状态码常量类 + +/** + * 自定义业务异常类 + */ +public class BusinessException extends SysException { + + /** + * 构造函数,使用自定义消息和状态码 + * @param message 异常消息 + * @param code 状态码 + */ + public BusinessException(String message, Integer code) { + super(message, code); // 调用父类构造函数,传递消息和状态码 + } + + /** + * 构造函数,使用自定义消息,默认状态码为业务错误 + * @param msg 异常消息 + */ + public BusinessException(String msg) { + super(msg, HttpStatus.CODE_BUSINESS_ERROR); // 调用父类构造函数,传递消息和默认业务错误状态码 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/SysException.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/SysException.java new file mode 100644 index 0000000..bc52b70 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/exception/SysException.java @@ -0,0 +1,46 @@ +package com.shanzhu.market.common.exception; + +import com.shanzhu.market.common.constants.HttpStatus; // 导入HTTP状态码常量类 + +/** + * 自定义系统异常类 + */ +public class SysException extends RuntimeException { + + private Integer code; // 定义状态码字段 + + /** + * 构造函数,使用自定义消息和状态码 + * @param message 异常消息 + * @param code 状态码 + */ + public SysException(String message, Integer code) { + super(message); // 调用父类构造函数,传递消息 + this.code = code; // 设置状态码 + } + + /** + * 构造函数,使用自定义消息,默认状态码为系统错误 + * @param msg 异常消息 + */ + public SysException(String msg) { + super(msg); // 调用父类构造函数,传递消息 + this.code = HttpStatus.CODE_ERROR; // 设置默认系统错误状态码 + } + + /** + * 获取状态码 + * @return 状态码 + */ + public Integer getCode() { + return code; // 返回状态码 + } + + /** + * 设置状态码 + * @param code 状态码 + */ + public void setCode(Integer code) { + this.code = code; // 设置状态码 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/config/RedisConfig.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/config/RedisConfig.java new file mode 100644 index 0000000..a10d7d1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/config/RedisConfig.java @@ -0,0 +1,31 @@ +package com.shanzhu.market.common.redis.config; + +import org.springframework.context.annotation.Bean; // 导入Bean注解 +import org.springframework.context.annotation.Configuration; // 导入配置注解 +import org.springframework.data.redis.connection.RedisConnectionFactory; // 导入Redis连接工厂接口 +import org.springframework.data.redis.core.RedisTemplate; // 导入Redis模板类 +import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; // 导入Jackson序列化器 +import org.springframework.data.redis.serializer.StringRedisSerializer; // 导入字符串序列化器 + +/** + * Redis配置类 + */ +@Configuration // 标记该类为Spring配置类 +public class RedisConfig { + + /** + * 配置RedisTemplate实例 + * @param connectionFactory Redis连接工厂 + * @return 配置好的RedisTemplate实例 + */ + @Bean // 标记该方法返回的对象为Spring管理的Bean + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate<>(); // 创建RedisTemplate实例 + template.setConnectionFactory(connectionFactory); // 设置Redis连接工厂 + template.setKeySerializer(new StringRedisSerializer()); // 设置Redis键的序列化方式为String + template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // 设置值的序列化方式为Jackson方式,默认的序列化方式是JDK的序列化 + template.setHashKeySerializer(new StringRedisSerializer()); // 设置哈希键的序列化方式为String + template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); // 设置哈希值的序列化方式为Jackson方式 + return template; // 返回配置好的RedisTemplate实例 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/constants/RedisKeys.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/constants/RedisKeys.java new file mode 100644 index 0000000..39cefbf --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/constants/RedisKeys.java @@ -0,0 +1,123 @@ +package com.shanzhu.market.common.redis.constants; + +import java.util.concurrent.TimeUnit; // 导入时间单位类 + +/** + * Redis键常量枚举类 + */ +public enum RedisKeys { + + // 用户注册 + LOGIN_USER("LOGIN_USER", 1440L, TimeUnit.MINUTES), // 用户登录信息,有效期1440分钟(24小时) + // 登录密码错误次数 + LOGIN_ERRO_PWDNUM("LOGIN_ERRO_PWDNUM", 1L, TimeUnit.DAYS), // 登录密码错误次数,有效期1天 + // 商品分类信息的缓存 + GOODS_CATEGORY("GOODS_CATEGORY", 24L, TimeUnit.HOURS), // 商品分类信息,有效期24小时 + // 账户冻结6小时 + DISABLEUSER("DISABLEUSER", 6L, TimeUnit.HOURS); // 账户冻结状态,有效期6小时 + + private String prefix; // 键前缀 + private Long timeout; // 失效时间 + private TimeUnit timeUnit; // 时间单位 + + private final String SEP = ":"; // key分隔符 + + /** + * 构造函数,初始化前缀、失效时间和时间单位 + * @param prefix 键前缀 + * @param timeout 失效时间 + * @param timeUnit 时间单位 + */ + RedisKeys(String prefix, Long timeout, TimeUnit timeUnit) { + this.prefix = prefix; // 设置键前缀 + this.timeout = timeout; // 设置失效时间 + this.timeUnit = timeUnit; // 设置时间单位 + } + + /** + * 构造函数,初始化前缀和失效时间,默认时间单位为分钟 + * @param prefix 键前缀 + * @param timeout 失效时间 + */ + RedisKeys(String prefix, Long timeout) { + this(prefix, timeout, TimeUnit.MINUTES); // 调用另一个构造函数,设置默认时间单位为分钟 + } + + /** + * 构造函数,初始化前缀,默认失效时间为30分钟,默认时间单位为分钟 + * @param prefix 键前缀 + */ + RedisKeys(String prefix) { + this(prefix, 30L, TimeUnit.MINUTES); // 调用另一个构造函数,设置默认失效时间和时间单位 + } + + /** + * 生成完整的Redis键 + * @param suffix 后缀数组 + * @return 完整的Redis键 + */ + public String join(String... suffix) { + StringBuilder sb = new StringBuilder(80); // 创建StringBuilder实例,初始容量为80 + sb.append(this.prefix); // 添加键前缀 + for (String s : suffix) { + sb.append(getSEP()).append(s); // 添加分隔符和后缀 + } + return sb.toString(); // 返回完整的Redis键 + } + + /** + * 获取键前缀 + * @return 键前缀 + */ + public String getPrefix() { + return prefix; // 返回键前缀 + } + + /** + * 设置键前缀 + * @param prefix 键前缀 + */ + public void setPrefix(String prefix) { + this.prefix = prefix; // 设置键前缀 + } + + /** + * 获取失效时间 + * @return 失效时间 + */ + public Long getTimeout() { + return timeout; // 返回失效时间 + } + + /** + * 设置失效时间 + * @param timeout 失效时间 + */ + public void setTimeout(Long timeout) { + this.timeout = timeout; // 设置失效时间 + } + + /** + * 获取时间单位 + * @return 时间单位 + */ + public TimeUnit getTimeUnit() { + return timeUnit; // 返回时间单位 + } + + /** + * 设置时间单位 + * @param timeUnit 时间单位 + */ + public void setTimeUnit(TimeUnit timeUnit) { + this.timeUnit = timeUnit; // 设置时间单位 + } + + /** + * 获取键分隔符 + * @return 键分隔符 + */ + public String getSEP() { + return SEP; // 返回键分隔符 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/service/RedisTemplateService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/service/RedisTemplateService.java new file mode 100644 index 0000000..6f10cea --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/redis/service/RedisTemplateService.java @@ -0,0 +1,343 @@ +package com.shanzhu.market.common.redis.service; + +import org.springframework.beans.factory.annotation.Autowired; // 导入自动装配注解 +import org.springframework.data.redis.core.BoundSetOperations; // 导入绑定Set操作类 +import org.springframework.data.redis.core.HashOperations; // 导入Hash操作类 +import org.springframework.data.redis.core.RedisTemplate; // 导入Redis模板类 +import org.springframework.data.redis.core.ValueOperations; // 导入值操作类 +import org.springframework.stereotype.Service; // 导入服务注解 + +import java.util.*; // 导入集合类 +import java.util.concurrent.TimeUnit; // 导入时间单位类 + +/** + * RedisTemplate服务类 + */ +@Service // 标记该类为Spring服务类 +public class RedisTemplateService { + + @Autowired // 自动装配RedisTemplate实例 + public RedisTemplate redisTemplate; + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setCacheObject(final String key, final T value) { + redisTemplate.opsForValue().set(key, value); // 设置键值对 + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * 如果key不存在,缓存, 如果存在不做任何操作 + * + * @param key 缓存的键值 + * @param value 缓存的值 + */ + public void setnxCacheObject(final String key, final T value) { + redisTemplate.opsForValue().setIfAbsent(key, value); // 设置键值对,如果键不存在 + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * 如果key不存在,缓存, 如果存在不做任何操作 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); // 设置键值对并设置过期时间 + } + + /** + * 缓存基本的对象,Integer、String、实体类等 + * + * @param key 缓存的键值 + * @param value 缓存的值 + * @param timeout 时间 + * @param timeUnit 时间颗粒度 + */ + public void setnxCacheObject(final String key, final T value, final Long timeout, final TimeUnit timeUnit) { + redisTemplate.opsForValue().setIfAbsent(key, value, timeout, timeUnit); // 设置键值对并设置过期时间,如果键不存在 + } + + /** + * 给指定key值减delta + * + * @param key 键 + * @param delta 减少的值 + * @return 减少后的值 + */ + public Long decrementCacheObjectValue(final String key, final long delta) { + return redisTemplate.opsForValue().decrement(key, delta); // 减少指定键的值 + } + + /** + * 给指定key值减一 + * + * @param key 键 + * @return 减少后的值 + */ + public Long decrementCacheObjectValue(final String key) { + return redisTemplate.opsForValue().decrement(key); // 减少指定键的值 + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout) { + return expire(key, timeout, TimeUnit.SECONDS); // 设置键的过期时间为秒 + } + + /** + * 设置有效时间 + * + * @param key Redis键 + * @param timeout 超时时间 + * @param unit 时间单位 + * @return true=设置成功;false=设置失败 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) { + return redisTemplate.expire(key, timeout, unit); // 设置键的过期时间 + } + + /** + * 获取有效时间 + * + * @param key Redis键 + * @return 有效时间 + */ + public long getExpire(final String key) { + return redisTemplate.getExpire(key); // 获取键的剩余过期时间 + } + + /** + * 判断 key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public Boolean hasKey(String key) { + return redisTemplate.hasKey(key); // 判断键是否存在 + } + + /** + * 获得缓存的基本对象。 + * + * @param key 缓存键值 + * @return 缓存键值对应的数据 + */ + public T getCacheObject(final String key) { + ValueOperations operation = redisTemplate.opsForValue(); // 获取值操作对象 + return operation.get(key); // 获取键对应的值 + } + + /** + * 删除单个对象 + * + * @param key 键 + * @return 是否删除成功 + */ + public boolean deleteObject(final String key) { + return redisTemplate.delete(key); // 删除指定键 + } + + /** + * 删除集合对象 + * + * @param collection 多个对象 + * @return 是否删除成功 + */ + public boolean deleteObject(final Collection collection) { + return redisTemplate.delete(collection) > 0; // 删除指定集合中的键 + } + + /** + * 缓存List数据 + * + * @param key 缓存的键值 + * @param dataList 待缓存的List数据 + * @return 缓存的对象数量 + */ + public long setCacheList(final String key, final List dataList) { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); // 将列表数据添加到键中 + return count == null ? 0 : count; // 返回添加的数据数量 + } + + /** + * 获得缓存的list对象 + * + * @param key 缓存的键值 + * @return 缓存键值对应的数据列表 + */ + public List getCacheList(final String key) { + return redisTemplate.opsForList().range(key, 0, -1); // 获取键对应的列表数据 + } + + /** + * 缓存Set + * + * @param key 缓存键值 + * @param dataSet 缓存的数据 + * @return 缓存数据的对象 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); // 获取绑定的Set操作对象 + Iterator it = dataSet.iterator(); + while (it.hasNext()) { + setOperation.add(it.next()); // 将数据添加到Set中 + } + return setOperation; // 返回绑定的Set操作对象 + } + + /** + * 获得缓存的set + * + * @param key 键 + * @return 缓存键值对应的Set数据 + */ + public Set getCacheSet(final String key) { + return redisTemplate.opsForSet().members(key); // 获取键对应的Set数据 + } + + /** + * 指定的value是否包含在缓存set中 + * + * @param key 键 + * @param value 值 + * @param + * @return + */ + /** + * 指定的value是否包含在缓存set中 + * + * @param key 缓存键 + * @param value 要检查的值 + * @param 值的类型 + * @return 如果值存在于set中,返回true;否则返回false + */ + public boolean isCacheSetContains(final String key, final T value) { + return redisTemplate.opsForSet().isMember(key, value); // 检查指定的值是否存在于set中 + } + + /** + * 从缓存set 中删除value值 + * + * @param key 缓存键 + * @param value 要删除的值 + * @param 值的类型 + * @return 删除的元素数量 + */ + public Long deleteCacheSetValue(final String key, final T value) { + return redisTemplate.opsForSet().remove(key, value); // 从set中删除指定的值 + } + + /** + * 往缓存set中添加value值 + * + * @param key 缓存键 + * @param value 要添加的值 + * @param 值的类型 + * @return 添加的元素数量 + */ + public Long addCacheSetValue(final String key, final T value) { + return redisTemplate.opsForSet().add(key, value); // 向set中添加指定的值 + } + + /** + * 缓存Map + * + * @param key 缓存键 + * @param dataMap 要缓存的Map数据 + */ + public void setCacheMap(final String key, final Map dataMap) { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); // 将Map数据存入缓存 + } + } + + /** + * 获得缓存的Map + * + * @param key 缓存键 + * @return 缓存中的Map数据 + */ + public Map getCacheMap(final String key) { + return redisTemplate.opsForHash().entries(key); // 获取缓存中的Map数据 + } + + /** + * 往Hash中存入数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @param value 值 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) { + redisTemplate.opsForHash().put(key, hKey, value); // 向Hash中存入数据 + } + + /** + * 获取Hash中的数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return Hash中的对象 + */ + public T getCacheMapValue(final String key, final String hKey) { + HashOperations opsForHash = redisTemplate.opsForHash(); // 获取Hash操作对象 + return opsForHash.get(key, hKey); // 获取Hash中的数据 + } + + /** + * 获取多个Hash中的数据 + * + * @param key Redis键 + * @param hKeys Hash键集合 + * @return Hash对象集合 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) { + return redisTemplate.opsForHash().multiGet(key, hKeys); // 获取多个Hash中的数据 + } + + /** + * 删除Hash中的某条数据 + * + * @param key Redis键 + * @param hKey Hash键 + * @return 是否成功删除 + */ + public boolean deleteCacheMapValue(final String key, final String hKey) { + return redisTemplate.opsForHash().delete(key, hKey) > 0; // 删除Hash中的某条数据 + } + + /** + * 给hash中hk 值 + increment + * + * @param key Redis键 + * @param hk Hash键 + * @param increment 增加的值 + * @return 增加后的值 + */ + public Long incrementCacheMapValue(final String key, final Object hk, final long increment) { + return redisTemplate.opsForHash().increment(key, hk, increment); // 增加Hash中hk的值 + } + + /** + * 获得缓存的基本对象列表 + * + * @param pattern 字符串前缀 + * @return 对象列表 + */ + public Collection keys(final String pattern) { + return redisTemplate.keys(pattern); // 获取匹配指定模式的所有键 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/HasPermisson.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/HasPermisson.java new file mode 100644 index 0000000..096fa63 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/HasPermisson.java @@ -0,0 +1,19 @@ +package com.shanzhu.market.common.sercurity.annotation; + +import java.lang.annotation.ElementType; // 导入元素类型注解 +import java.lang.annotation.Retention; // 导入保留策略注解 +import java.lang.annotation.RetentionPolicy; // 导入保留策略枚举类 +import java.lang.annotation.Target; // 导入目标注解 + +/** + * 判断是否有权限 + */ +@Target({ElementType.METHOD}) // 指定该注解可以应用于方法 +@Retention(RetentionPolicy.RUNTIME) // 指定该注解在运行时保留 +public @interface HasPermisson { + /** + * 权限值 + * @return 权限字符串 + */ + String value(); // 定义权限值属性 +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/NoRequireLogin.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/NoRequireLogin.java new file mode 100644 index 0000000..2605c0c --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/annotation/NoRequireLogin.java @@ -0,0 +1,16 @@ +package com.shanzhu.market.common.sercurity.annotation; + +import java.lang.annotation.ElementType; // 导入元素类型注解 +import java.lang.annotation.Retention; // 导入保留策略注解 +import java.lang.annotation.RetentionPolicy; // 导入保留策略枚举类 +import java.lang.annotation.Target; // 导入目标注解 + +/** + * 登录检查注解: + * 贴有该注解的方法不需要进行登录检查 + */ +@Target({ElementType.METHOD}) // 指定该注解可以应用于方法 +@Retention(RetentionPolicy.RUNTIME) // 指定该注解在运行时保留 +public @interface NoRequireLogin { + // 该注解不包含任何属性 +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/interceptor/EmpLoginInterceptor.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/interceptor/EmpLoginInterceptor.java new file mode 100644 index 0000000..4fbdaf6 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/interceptor/EmpLoginInterceptor.java @@ -0,0 +1,117 @@ +package com.shanzhu.market.common.sercurity.interceptor; + +import com.alibaba.fastjson.JSONObject; // 导入FastJSON库 +import com.shanzhu.market.common.constants.HttpStatus; // 导入HTTP状态码常量类 +import com.shanzhu.market.common.redis.constants.RedisKeys; // 导入Redis键常量类 +import com.shanzhu.market.common.redis.service.RedisTemplateService; // 导入Redis模板服务类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.sercurity.annotation.NoRequireLogin; // 导入不需要登录注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.Employee; // 导入员工实体类 +import org.springframework.beans.factory.annotation.Autowired; // 导入自动装配注解 +import org.springframework.util.StringUtils; // 导入字符串工具类 +import org.springframework.web.method.HandlerMethod; // 导入处理器方法类 +import org.springframework.web.servlet.HandlerInterceptor; // 导入处理器拦截器接口 + +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import javax.servlet.http.HttpServletResponse; // 导入HTTP响应类 + +/** + * 员工登录拦截器 + */ +public class EmpLoginInterceptor implements HandlerInterceptor { + + @Autowired + private RedisTemplateService redisTemplateService; // 自动装配Redis模板服务 + + /** + * 在请求处理之前进行拦截 + * + * @param request HTTP请求 + * @param response HTTP响应 + * @param handler 处理器对象 + * @return 是否继续处理请求 + * @throws Exception 可能抛出的异常 + */ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (!(handler instanceof HandlerMethod)) { + // 如果处理器不是HandlerMethod类型,直接返回true,继续处理 + return true; + } + + response.setHeader("Access-Control-Allow-Origin", "*"); // 设置跨域允许的源 + response.setHeader("Cache-Control", "no-cache"); // 设置缓存控制 + response.setCharacterEncoding("UTF-8"); // 设置字符编码 + response.setContentType("application/json"); // 设置内容类型为JSON + + // 获取请求头中的token + String token = request.getHeader("token"); + + // 获取处理器方法 + HandlerMethod handler1 = (HandlerMethod) handler; + + // 检查方法是否贴有NoRequireLogin注解 + NoRequireLogin noRequireLogin = handler1.getMethodAnnotation(NoRequireLogin.class); + if (noRequireLogin != null) { + // 如果贴有注解,直接返回true,继续处理 + return true; + } else { + if (StringUtils.hasText(token)) { + // 如果token不为空,从Redis中获取缓存值 + String value2 = redisTemplateService.getCacheObject(token); + if (!StringUtils.hasText(value2)) { + // 如果缓存值为空,返回未登录错误信息 + JsonResult res = JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, "请先登录"); + String result = JSONObject.toJSONString(res); + response.getWriter().println(result); + response.getWriter().flush(); + return false; + } else { + // 如果缓存有值,延长存储时间 + redisTemplateService.expire(token, RedisKeys.LOGIN_USER.getTimeout(), RedisKeys.LOGIN_USER.getTimeUnit()); + } + } else { + // 如果没有token,返回未登录错误信息 + JsonResult res = JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, "请先登录"); + String result = JSONObject.toJSONString(res); + response.getWriter().println(result); + response.getWriter().flush(); + return false; + } + } + + // 检查方法是否贴有HasPermisson注解 + HasPermisson hasPermisson = handler1.getMethodAnnotation(HasPermisson.class); + if (hasPermisson != null) { + if (!StringUtils.hasText(token)) { + // 如果没有token,返回未登录错误信息 + JsonResult res = JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, "请先登录"); + String result = JSONObject.toJSONString(res); + response.getWriter().println(result); + response.getWriter().flush(); + return false; + } + // 从Redis中获取员工信息 + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + // 判断是否是系统管理员 + if (employee.getIsAdmin()) { + return true; + } + // 获取权限值 + String value = hasPermisson.value(); + // 检查员工权限是否包含指定权限 + boolean contains = employee.getFlags().contains(value); + if (!contains) { + // 如果不包含权限,返回权限不足错误信息 + JsonResult res = JsonResult.error(HttpStatus.CODE_BUSINESS_ERROR, "您没有权限操作"); + String result = JSONObject.toJSONString(res); + response.getWriter().println(result); + response.getWriter().flush(); + return false; + } + } + + return true; // 继续处理请求 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserInfoArgumentResolver.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserInfoArgumentResolver.java new file mode 100644 index 0000000..000ce9c --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserInfoArgumentResolver.java @@ -0,0 +1,66 @@ +package com.shanzhu.market.common.sercurity.resolver; + +import com.alibaba.fastjson.JSON; // 导入FastJSON库 +import com.shanzhu.market.common.redis.service.RedisTemplateService; // 导入Redis模板服务类 +import com.shanzhu.market.entity.domain.Employee; // 导入员工实体类 +import org.springframework.beans.factory.annotation.Autowired; // 导入自动装配注解 +import org.springframework.core.MethodParameter; // 导入方法参数类 +import org.springframework.util.StringUtils; // 导入字符串工具类 +import org.springframework.web.bind.support.WebDataBinderFactory; // 导入Web数据绑定工厂类 +import org.springframework.web.context.request.NativeWebRequest; // 导入本地Web请求类 +import org.springframework.web.method.support.HandlerMethodArgumentResolver; // 导入处理器方法参数解析器接口 +import org.springframework.web.method.support.ModelAndViewContainer; // 导入模型和视图容器类 + +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 + +/** + * 自定义参数解析器 + * 作用:将请求映射方法(接口)中声明Employee类型的参数解析成当前登录用户对象 + */ +public class UserInfoArgumentResolver implements HandlerMethodArgumentResolver { + + @Autowired + private RedisTemplateService redisService; // 自动装配Redis模板服务 + + /** + * 判断当前解析器是否支持解析指定的方法参数 + * + * @param methodParameter 方法参数 + * @return 如果支持解析,返回true;否则返回false + */ + @Override + public boolean supportsParameter(MethodParameter methodParameter) { + // 检查参数类型是否为Employee类,并且参数上有UserParam注解 + return methodParameter.getParameterType() == Employee.class + && methodParameter.hasParameterAnnotation(UserParam.class); + } + + /** + * 解析支持的参数 + * + * @param methodParameter 方法参数 + * @param modelAndViewContainer 模型和视图容器 + * @param nativeWebRequest 本地Web请求 + * @param webDataBinderFactory Web数据绑定工厂 + * @return 解析后的参数对象 + * @throws Exception 可能抛出的异常 + */ + @Override + public Object resolveArgument(MethodParameter methodParameter, + ModelAndViewContainer modelAndViewContainer, + NativeWebRequest nativeWebRequest, + WebDataBinderFactory webDataBinderFactory) throws Exception { + // 获取HTTP请求对象 + HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class); + // 从请求头中获取token + String token = request.getHeader("token"); + // 从Redis中获取用户信息字符串 + String userStr = redisService.getCacheObject(token); + if (!StringUtils.hasText(userStr)) { + // 如果用户信息字符串为空,返回null + return null; + } + // 将用户信息字符串解析为Employee对象并返回 + return JSON.parseObject(userStr, Employee.class); + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserParam.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserParam.java new file mode 100644 index 0000000..a62a949 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/sercurity/resolver/UserParam.java @@ -0,0 +1,16 @@ +package com.shanzhu.market.common.sercurity.resolver; + +import java.lang.annotation.ElementType; // 导入元素类型注解 +import java.lang.annotation.Retention; // 导入保留策略注解 +import java.lang.annotation.RetentionPolicy; // 导入保留策略枚举类 +import java.lang.annotation.Target; // 导入目标注解 + +/** + * 定义userInfo 参数注入注解 + * 贴有该注解Employee类型的参数使用自定义参数解析器 + */ +@Target({ElementType.PARAMETER}) // 指定该注解可以应用于方法参数 +@Retention(RetentionPolicy.RUNTIME) // 指定该注解在运行时保留 +public @interface UserParam { + // 该注解不包含任何属性 +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/util/DateUtil.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/util/DateUtil.java new file mode 100644 index 0000000..a62a949 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/util/DateUtil.java @@ -0,0 +1,16 @@ +package com.shanzhu.market.common.sercurity.resolver; + +import java.lang.annotation.ElementType; // 导入元素类型注解 +import java.lang.annotation.Retention; // 导入保留策略注解 +import java.lang.annotation.RetentionPolicy; // 导入保留策略枚举类 +import java.lang.annotation.Target; // 导入目标注解 + +/** + * 定义userInfo 参数注入注解 + * 贴有该注解Employee类型的参数使用自定义参数解析器 + */ +@Target({ElementType.PARAMETER}) // 指定该注解可以应用于方法参数 +@Retention(RetentionPolicy.RUNTIME) // 指定该注解在运行时保留 +public @interface UserParam { + // 该注解不包含任何属性 +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/util/PathUtils.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/util/PathUtils.java new file mode 100644 index 0000000..bae9a0a --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/util/PathUtils.java @@ -0,0 +1,80 @@ +package com.shanzhu.market.common.util; + +import org.springframework.web.multipart.MultipartFile; // 导入MultipartFile类 + +import java.io.File; // 导入File类 +import java.io.FileOutputStream; // 导入FileOutputStream类 +import java.io.UnsupportedEncodingException; // 导入UnsupportedEncodingException类 +import java.net.URLDecoder; // 导入URLDecoder类 + +/** + * 路径工具类 + */ +public class PathUtils { + + /** + * 获取类加载器的根路径 + * + * @return 类加载器的根路径 + */ + public static String getClassLoadRootPath() { + String path = ""; // 初始化路径字符串 + try { + // 获取类加载器的资源路径并解码 + String prePath = URLDecoder.decode(PathUtils.class.getClassLoader().getResource("").getPath(), "utf-8").replace("/target/classes", ""); + String osName = System.getProperty("os.name"); // 获取操作系统名称 + if (osName.toLowerCase().startsWith("mac")) { + // 如果是苹果系统 + path = prePath.substring(0, prePath.length() - 1); // 去掉末尾斜杠 + } else if (osName.toLowerCase().startsWith("windows")) { + // 如果是Windows系统 + path = prePath.substring(1, prePath.length() - 1); // 去掉开头的斜杠和末尾斜杠 + } else if (osName.toLowerCase().startsWith("linux") || osName.toLowerCase().startsWith("unix")) { + // 如果是Linux或Unix系统 + path = prePath.substring(0, prePath.length() - 1); // 去掉末尾斜杠 + } else { + path = prePath.substring(1, prePath.length() - 1); // 默认处理,去掉开头的斜杠和末尾斜杠 + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); // 打印异常堆栈信息 + } + return path; // 返回处理后的路径 + } + + /** + * 上传文件到指定目录 + * + * @param multipartFile 要上传的文件 + * @return 文件的网络路径 + */ + public static String upload(MultipartFile multipartFile) { + String res = null; // 初始化返回的网络路径 + try { + // 获取静态文件目录路径 + String staticDir = PathUtils.getClassLoadRootPath() + "/src/main/resources/static/files/"; + // 如果结果目录不存在,则创建目录 + File resDirFile = new File(staticDir); + if (!resDirFile.exists()) { + boolean flag = resDirFile.mkdirs(); // 创建目录 + if (!flag) throw new RuntimeException("创建结果目录失败"); // 如果创建失败,抛出异常 + } + // 获取MultipartFile的字节数组 + byte[] fileBytes = multipartFile.getBytes(); + + // 加个时间戳防止重名 + String newFileName = System.currentTimeMillis() + "_" + multipartFile.getOriginalFilename(); + res = "/files/" + newFileName; // 构建文件的网络路径 + + // 写文件 + File file = new File(staticDir + newFileName); + + // 将字节数组写入文件 + FileOutputStream fos = new FileOutputStream(file); + fos.write(fileBytes); // 写入文件 + fos.close(); // 关闭文件输出流 + } catch (Exception e) { + e.printStackTrace(); // 打印异常堆栈信息 + } + return res; // 返回文件的网络路径 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/util/UploadUtil.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/util/UploadUtil.java new file mode 100644 index 0000000..8252b57 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/util/UploadUtil.java @@ -0,0 +1,36 @@ +package com.shanzhu.market.common.util; + +/** + * 文件上传工具类 + */ +public class UploadUtil { + // 阿里云OSS域名 + private static final String ALI_DOMAIN = "https://zyl-9.oss-cn-chengdu.aliyuncs.com/"; + // 阿里云OSS端点 + private static final String ENDPOINT = "http://oss-cn-chengdu.aliyuncs.com"; + // 阿里云OSS存储桶名称 + private static final String BUCKET_NAME = "zyl-9"; + + // 阿里云OSS访问密钥ID + private static final String ACCESS_KEY_ID = "LTAI5tGxrbz4oXKzQ63LZzQn"; + // 阿里云OSS访问密钥密钥 + private static final String ACCESS_KEY_SECRET = "Do4mpXNQ4bOTzpNqrUhTeQSSwrXfHe"; + // 文件存储路径前缀 + private static final String path = "wolf2w-70"; + + // MultipartFile 对象 + // public static String uploadAli(MultipartFile file, String path_suffix) throws Exception { + // // 生成文件名称 + // String uuid = UUID.randomUUID().toString(); + // String orgFileName = file.getOriginalFilename(); // 获取真实文件名称 xxx.jpg + // String ext = "." + FilenameUtils.getExtension(orgFileName); // 获取扩展名 .jpg + // String fileName = path + path_suffix + "/" + uuid + ext; // 生成文件名 xxxxsfsasa.jpg + // // 创建OSSClient实例。 + // OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET); + // // 上传文件流。 + // ossClient.putObject(BUCKET_NAME, fileName, file.getInputStream()); + // // 关闭OSSClient。 + // ossClient.shutdown(); + // return ALI_DOMAIN + fileName; + // } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/web/response/JsonResult.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/web/response/JsonResult.java new file mode 100644 index 0000000..d69bbf8 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/common/web/response/JsonResult.java @@ -0,0 +1,172 @@ +package com.shanzhu.market.common.web.response; + +import com.shanzhu.market.common.constants.HttpStatus; // 导入HTTP状态码常量类 + +/** + * JSON结果封装类 + */ +public class JsonResult { + + // 成功状态码 + public static final int CODE_SUCCESS = HttpStatus.CODE_SUCCESS; + // 成功消息 + public static final String MSG_SUCCESS = "操作成功"; + // 未登录状态码 + public static final int CODE_NOLOGIN = HttpStatus.CODE_NOLOGIN; + // 未登录消息 + public static final String MSG_NOLOGIN = "请先登录"; + // 系统错误状态码 + public static final int CODE_ERROR = HttpStatus.CODE_ERROR; + // 系统错误消息 + public static final String MSG_ERROR = "系统异常,请联系管理员"; + // 参数异常状态码 + public static final int CODE_ERROR_PARAM = HttpStatus.CODE_ERROR_PARAM; // 参数异常 + + private int code; // 区分不同结果, 而不再是true或者false + private String msg; // 消息 + private T data; // 除了操作结果之外, 还可以携带数据返回 + + /** + * 构造函数,初始化code、msg和data + * + * @param code 状态码 + * @param msg 消息 + * @param data 数据 + */ + public JsonResult(int code, String msg, T data) { + this.code = code; // 设置状态码 + this.msg = msg; // 设置消息 + this.data = data; // 设置数据 + } + + /** + * 无参构造函数 + */ + public JsonResult() { + } + + /** + * 获取状态码 + * + * @return 状态码 + */ + public int getCode() { + return code; // 返回状态码 + } + + /** + * 设置状态码 + * + * @param code 状态码 + */ + public void setCode(int code) { + this.code = code; // 设置状态码 + } + + /** + * 获取消息 + * + * @return 消息 + */ + public String getMsg() { + return msg; // 返回消息 + } + + /** + * 设置消息 + * + * @param msg 消息 + */ + public void setMsg(String msg) { + this.msg = msg; // 设置消息 + } + + /** + * 获取数据 + * + * @return 数据 + */ + public T getData() { + return data; // 返回数据 + } + + /** + * 设置数据 + * + * @param data 数据 + */ + public void setData(T data) { + this.data = data; // 设置数据 + } + + /** + * 创建成功的JSON结果,包含数据 + * + * @param data 数据 + * @param 数据类型 + * @return 成功的JSON结果 + */ + public static JsonResult success(T data) { + return new JsonResult(CODE_SUCCESS, MSG_SUCCESS, data); // 返回成功的JSON结果 + } + + /** + * 创建成功的JSON结果,不包含数据 + * + * @return 成功的JSON结果 + */ + public static JsonResult success() { + return new JsonResult(CODE_SUCCESS, MSG_SUCCESS, null); // 返回成功的JSON结果 + } + + /** + * 创建错误的JSON结果,包含数据 + * + * @param code 状态码 + * @param msg 消息 + * @param data 数据 + * @param 数据类型 + * @return 错误的JSON结果 + */ + public static JsonResult error(int code, String msg, T data) { + return new JsonResult(code, msg, data); // 返回错误的JSON结果 + } + + /** + * 创建错误的JSON结果,不包含数据 + * + * @param code 状态码 + * @param msg 消息 + * @return 错误的JSON结果 + */ + public static JsonResult error(int code, String msg) { + return new JsonResult(code, msg, null); // 返回错误的JSON结果 + } + + /** + * 创建默认的错误JSON结果 + * + * @return 默认的错误JSON结果 + */ + public static JsonResult defaultError() { + return new JsonResult(CODE_ERROR, MSG_ERROR, null); // 返回默认的错误JSON结果 + } + + /** + * 创建未登录的JSON结果 + * + * @return 未登录的JSON结果 + */ + public static JsonResult noLogin() { + return new JsonResult(CODE_NOLOGIN, MSG_NOLOGIN, null); // 返回未登录的JSON结果 + } + + /** + * 创建无权限的JSON结果 + * + * @return 无权限的JSON结果 + */ + public static JsonResult noPermission() { + return new JsonResult(403, "非法访问", null); // 返回无权限的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/DeptController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/DeptController.java new file mode 100644 index 0000000..0c883f3 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/DeptController.java @@ -0,0 +1,76 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.Dept; // 导入部门实体类 +import com.shanzhu.market.entity.query.QueryDept; // 导入部门查询条件类 +import com.shanzhu.market.service.IDeptService; // 导入部门服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求映射注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 + +/** + * 部门控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/personnel_management/dept") // 设置请求路径前缀 +public class DeptController { + + @Resource + private IDeptService deptService; // 自动装配部门服务 + + /** + * 保存部门信息接口 + * + * @param dept 部门对象 + * @return 成功的JSON结果 + */ + @HasPermisson("personnel_management:dept:save") // 需要权限 "personnel_management:dept:save" + @PostMapping("/save") // 处理POST请求,路径为/save + public JsonResult saveDept(Dept dept) { + deptService.saveDept(dept); // 调用服务保存部门信息 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 修改部门信息接口 + * + * @param dept 部门对象 + * @return 成功的JSON结果 + */ + @HasPermisson("personnel_management:dept:update") // 需要权限 "personnel_management:dept:update" + @PostMapping("/update") // 处理POST请求,路径为/update + public JsonResult updateDept(Dept dept) { + deptService.updateDept(dept); // 调用服务更新部门信息 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 停用部门接口 + * + * @param id 部门ID + * @return 成功的JSON结果 + */ + @HasPermisson("personnel_management:dept:deactivate") // 需要权限 "personnel_management:dept:deactivate" + @PostMapping("/deactivate") // 处理POST请求,路径为/deactivate + public JsonResult deactivate(Long id) { + deptService.forbiddenRole(id); // 调用服务停用部门 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 查询部门信息接口 + * + * @param qo 查询条件对象 + * @return 包含查询结果的JSON结果 + */ + @GetMapping("/list") // 处理GET请求,路径为/list + public JsonResult listByQo(QueryDept qo) { + return JsonResult.success(deptService.listByQo(qo)); // 调用服务查询部门信息并返回结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/EmployeeController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/EmployeeController.java new file mode 100644 index 0000000..d8fb3c1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/EmployeeController.java @@ -0,0 +1,159 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.sercurity.annotation.NoRequireLogin; // 导入不需要登录注解类 +import com.shanzhu.market.common.util.PathUtils; // 导入路径工具类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.Employee; // 导入员工实体类 +import com.shanzhu.market.entity.query.QueryEmp; // 导入员工查询条件类 +import com.shanzhu.market.entity.vo.DetailEmpVo; // 导入员工详情视图对象类 +import com.shanzhu.market.entity.vo.EditEmpVo; // 导入员工编辑视图对象类 +import com.shanzhu.market.service.IEmployeeService; // 导入员工服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.*; // 导入请求映射注解 +import org.springframework.web.multipart.MultipartFile; // 导入文件上传类 + +import javax.annotation.Resource; // 导入资源注解 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import java.util.HashMap; // 导入HashMap类 +import java.util.Map; // 导入Map接口 + +/** + * 员工控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/personnel_management/employee") // 设置请求路径前缀 +public class EmployeeController { + + @Resource + private IEmployeeService employeeService; // 自动装配员工服务 + + /** + * 分页查询员工信息接口 + * + * @param qo 查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("personnel_management:employee:list") // 需要权限 "personnel_management:employee:list" + @PostMapping("/list") // 处理POST请求,路径为/list + public JsonResult pageByQo(QueryEmp qo) { + Page page = employeeService.pageByQo(qo); // 调用服务分页查询员工信息 + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 查询员工详情接口 + * + * @param uid 员工ID + * @return 包含员工详情的JSON结果 + */ + @HasPermisson("personnel_management:employee:list") // 需要权限 "personnel_management:employee:list" + @GetMapping("/detail") // 处理GET请求,路径为/detail + public JsonResult detail(Long uid) { + DetailEmpVo vo = employeeService.detail(uid); // 调用服务查询员工详情 + return JsonResult.success(vo); // 返回成功的JSON结果 + } + + /** + * 上传图片到阿里云OSS + * 返回网络图片地址, uploaded: 1 表示成功,0 表示失败 + * + * @param upload 上传的文件 + * @return 包含上传结果的Map + */ + @NoRequireLogin // 不需要登录即可访问 + @PostMapping("/uploadImg") // 处理POST请求,路径为/uploadImg + public Map uploadImg(@RequestParam("file") MultipartFile upload) { + Map map = new HashMap<>(); // 创建结果Map + if (upload != null && upload.getSize() > 0) { + String path; + try { + path = PathUtils.upload(upload); // 调用工具类上传文件 + map.put("uploaded", 1); // 上传成功 + map.put("url", path); // 返回文件路径 + } catch (Exception e) { + e.printStackTrace(); // 打印异常堆栈信息 + map.put("uploaded", 0); // 上传失败 + Map errorMap = new HashMap<>(); // 创建错误信息Map + errorMap.put("message", e.getMessage()); // 设置错误消息 + map.put("error", errorMap); // 返回错误信息 + } + } else { + map.put("uploaded", 0); // 上传失败 + Map errorMap = new HashMap<>(); // 创建错误信息Map + errorMap.put("message", "上传失败,图片文件异常"); // 设置错误消息 + map.put("error", errorMap); // 返回错误信息 + } + return map; // 返回结果Map + } + + /** + * 保存员工信息接口 + * + * @param employee 员工对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @HasPermisson("personnel_management:employee:save") // 需要权限 "personnel_management:employee:save" + @PostMapping("/save") // 处理POST请求,路径为/save + public JsonResult saveEmp(Employee employee, HttpServletRequest request) { + employeeService.saveEmp(employee, (String) request.getHeader("token")); // 调用服务保存员工信息 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 获取员工编辑信息接口 + * + * @param uid 员工ID + * @return 包含员工编辑信息的JSON结果 + */ + @HasPermisson("personnel_management:employee:update") // 需要权限 "personnel_management:employee:update" + @GetMapping("/editbtn") // 处理GET请求,路径为/editbtn + public JsonResult editbtn(Long uid) { + EditEmpVo vo = employeeService.editbtn(uid); // 调用服务获取员工编辑信息 + return JsonResult.success(vo); // 返回成功的JSON结果 + } + + /** + * 修改员工信息接口 + * + * @param employee 员工对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @HasPermisson("personnel_management:employee:update") // 需要权限 "personnel_management:employee:update" + @PostMapping("/update") // 处理POST请求,路径为/update + public JsonResult updateEmp(Employee employee, HttpServletRequest request) { + employeeService.updateEmp(employee, (String) request.getHeader("token")); // 调用服务更新员工信息 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 离职员工接口 + * + * @param id 员工ID + * @return 成功的JSON结果 + */ + @HasPermisson("personnel_management:employee:update") // 需要权限 "personnel_management:employee:update" + @PostMapping("/deactivate") // 处理POST请求,路径为/deactivate + public JsonResult deactivate(Long id) { + employeeService.deactivate(id); // 调用服务处理员工离职 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 重置员工密码接口 + * + * @param eid 员工ID + * @param code 验证码 + * @return 成功的JSON结果 + */ + @HasPermisson("personnel_management:employee:resetPwd") // 需要权限 "personnel_management:employee:resetPwd" + @PostMapping("/resetPwd") // 处理POST请求,路径为/resetPwd + public JsonResult resetPwd(Long eid, String code) { + employeeService.resetPwd(eid, code); // 调用服务重置员工密码 + return JsonResult.success(); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/ExchangePointProductsRecordsController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/ExchangePointProductsRecordsController.java new file mode 100644 index 0000000..1704ea2 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/ExchangePointProductsRecordsController.java @@ -0,0 +1,138 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.ExchangePointProducts; // 导入兑换积分商品记录实体类 +import com.shanzhu.market.entity.domain.PointProducts; // 导入积分商品实体类 +import com.shanzhu.market.entity.query.QueryExchangePointProductsRecords; // 导入兑换积分商品记录查询条件类 +import com.shanzhu.market.service.IExchangePointProductsService; // 导入兑换积分商品记录服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求映射注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import java.util.List; // 导入List接口 +import java.util.Map; // 导入Map接口 + +/** + * 兑换积分商品记录控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/sale_management/exchange_point_products_records") // 设置请求路径前缀 +public class ExchangePointProductsRecordsController { + + @Resource + private IExchangePointProductsService exchangePointProductsService; // 自动装配兑换积分商品记录服务 + + /** + * 根据会员ID查询兑换积分商品记录 + * + * @param memberId 会员ID + * @return 包含兑换积分商品记录的JSON结果 + */ + @GetMapping("/queryPointProductBymemberId") // 处理GET请求,路径为/queryPointProductBymemberId + public JsonResult queryPointProductBymemberId(Long memberId) { + List> list = exchangePointProductsService.queryPointProductBymemberId(memberId); // 调用服务查询兑换积分商品记录 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 根据商品ID查询会员信息 + * + * @param goodsId 商品ID + * @return 包含会员信息的JSON结果 + */ + @GetMapping("/queryMemberByGoodsId") // 处理GET请求,路径为/queryMemberByGoodsId + public JsonResult queryMemberByGoodsId(Long goodsId) { + List> list = exchangePointProductsService.queryMemberByGoodsId(goodsId); // 调用服务查询会员信息 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 根据商品ID查询积分商品信息 + * + * @param goodsId 商品ID + * @return 包含积分商品信息的JSON结果 + */ + @GetMapping("/queryPointProductByGoodsId") // 处理GET请求,路径为/queryPointProductByGoodsId + public JsonResult queryPointProductByGoodsId(Long goodsId) { + PointProducts pointProducts = exchangePointProductsService.queryPointProductByGoodsId(goodsId); // 调用服务查询积分商品信息 + return JsonResult.success(pointProducts); // 返回成功的JSON结果 + } + + /** + * 保存兑换积分商品记录 + * + * @param exchangePointProducts 兑换积分商品记录对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @PostMapping("/saveExchangePointProductRecords") // 处理POST请求,路径为/saveExchangePointProductRecords + public JsonResult saveExchangePointProductRecords(ExchangePointProducts exchangePointProducts, HttpServletRequest request) { + exchangePointProductsService.saveExchangePointProductRecords(exchangePointProducts, (String) request.getHeader("token")); // 调用服务保存兑换积分商品记录 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 查询所有会员的电话选项 + * + * @return 包含会员电话选项的JSON结果 + */ + @GetMapping("/queryOptionsMemberPhone") // 处理GET请求,路径为/queryOptionsMemberPhone + public JsonResult queryOptionsMemberPhone() { + List> list = exchangePointProductsService.queryOptionsMemberPhone(); // 调用服务查询会员电话选项 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 删除兑换积分商品记录 + * + * @param cn 兑换积分商品记录编号 + * @return 成功的JSON结果 + */ + @GetMapping("/delExchangePointProducts") // 处理GET请求,路径为/delExchangePointProducts + public JsonResult delExchangePointProducts(String cn) { + exchangePointProductsService.delExchangePointProducts(cn); // 调用服务删除兑换积分商品记录 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 分页查询兑换积分商品记录 + * + * @param qo 查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("sale_management:exchange_point_products_records:list") // 需要权限 "sale_management:exchange_point_products_records:list" + @PostMapping("/queryPageByQoExchangePointProducts") // 处理POST请求,路径为/queryPageByQoExchangePointProducts + public JsonResult queryPageByQoExchangePointProducts(QueryExchangePointProductsRecords qo) { + Page page = exchangePointProductsService.queryPageByQoExchangePointProducts(qo); // 调用服务分页查询兑换积分商品记录 + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 查询所有积分商品选项 + * + * @return 包含积分商品选项的JSON结果 + */ + @GetMapping("/queryOptionsPointProducts") // 处理GET请求,路径为/queryOptionsPointProducts + public JsonResult queryOptionsPointProducts() { + List> list = exchangePointProductsService.queryOptionsPointProducts(); // 调用服务查询积分商品选项 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 查询所有会员选项 + * + * @return 包含会员选项的JSON结果 + */ + @GetMapping("/queryOptionsMember") // 处理GET请求,路径为/queryOptionsMember + public JsonResult queryOptionsMember() { + List> list = exchangePointProductsService.queryOptionsMember(); // 调用服务查询会员选项 + return JsonResult.success(list); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsCategoryController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsCategoryController.java new file mode 100644 index 0000000..41dd18d --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsCategoryController.java @@ -0,0 +1,138 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.ExchangePointProducts; // 导入积分兑换商品记录实体类 +import com.shanzhu.market.entity.domain.PointProducts; // 导入积分商品实体类 +import com.shanzhu.market.entity.query.QueryExchangePointProductsRecords; // 导入积分兑换商品记录查询条件类 +import com.shanzhu.market.service.IExchangePointProductsService; // 导入积分兑换商品服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求映射注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import java.util.List; // 导入List接口 +import java.util.Map; // 导入Map接口 + +/** + * 积分兑换商品记录控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/sale_management/exchange_point_products_records") // 设置请求路径前缀 +public class ExchangePointProductsRecordsController { + + @Resource + private IExchangePointProductsService exchangePointProductsService; // 自动装配积分兑换商品服务 + + /** + * 根据会员ID查询积分商品 + * + * @param memberId 会员ID + * @return 包含查询结果的JSON结果 + */ + @GetMapping("/queryPointProductBymemberId") // 处理GET请求,路径为/queryPointProductBymemberId + public JsonResult queryPointProductBymemberId(Long memberId) { + List> list = exchangePointProductsService.queryPointProductBymemberId(memberId); // 调用服务查询积分商品 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 根据商品ID查询会员 + * + * @param goodsId 商品ID + * @return 包含查询结果的JSON结果 + */ + @GetMapping("/queryMemberByGoodsId") // 处理GET请求,路径为/queryMemberByGoodsId + public JsonResult queryMemberByGoodsId(Long goodsId) { + List> list = exchangePointProductsService.queryMemberByGoodsId(goodsId); // 调用服务查询会员 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 根据商品ID查询积分商品 + * + * @param goodsId 商品ID + * @return 包含查询结果的JSON结果 + */ + @GetMapping("/queryPointProductByGoodsId") // 处理GET请求,路径为/queryPointProductByGoodsId + public JsonResult queryPointProductByGoodsId(Long goodsId) { + PointProducts pointProducts = exchangePointProductsService.queryPointProductByGoodsId(goodsId); // 调用服务查询积分商品 + return JsonResult.success(pointProducts); // 返回成功的JSON结果 + } + + /** + * 保存积分兑换商品记录 + * + * @param exchangePointProducts 积分兑换商品记录对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @PostMapping("/saveExchangePointProductRecords") // 处理POST请求,路径为/saveExchangePointProductRecords + public JsonResult saveExchangePointProductRecords(ExchangePointProducts exchangePointProducts, HttpServletRequest request) { + exchangePointProductsService.saveExchangePointProductRecords(exchangePointProducts, (String) request.getHeader("token")); // 调用服务保存积分兑换商品记录 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 查询会员手机号选项 + * + * @return 包含查询结果的JSON结果 + */ + @GetMapping("/queryOptionsMemberPhone") // 处理GET请求,路径为/queryOptionsMemberPhone + public JsonResult queryOptionsMemberPhone() { + List> list = exchangePointProductsService.queryOptionsMemberPhone(); // 调用服务查询会员手机号选项 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 删除积分兑换商品记录 + * + * @param cn 记录编号 + * @return 成功的JSON结果 + */ + @GetMapping("/delExchangePointProducts") // 处理GET请求,路径为/delExchangePointProducts + public JsonResult delExchangePointProducts(String cn) { + exchangePointProductsService.delExchangePointProducts(cn); // 调用服务删除积分兑换商品记录 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 分页查询积分兑换商品记录 + * + * @param qo 查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("sale_management:exchange_point_products_records:list") // 需要权限 "sale_management:exchange_point_products_records:list" + @PostMapping("/queryPageByQoExchangePointProducts") // 处理POST请求,路径为/queryPageByQoExchangePointProducts + public JsonResult queryPageByQoExchangePointProducts(QueryExchangePointProductsRecords qo) { + Page page = exchangePointProductsService.queryPageByQoExchangePointProducts(qo); // 调用服务分页查询积分兑换商品记录 + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 查询积分商品选项 + * + * @return 包含查询结果的JSON结果 + */ + @GetMapping("/queryOptionsPointProducts") // 处理GET请求,路径为/queryOptionsPointProducts + public JsonResult queryOptionsPointProducts() { + List> list = exchangePointProductsService.queryOptionsPointProducts(); // 调用服务查询积分商品选项 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 查询会员选项 + * + * @return 包含查询结果的JSON结果 + */ + @GetMapping("/queryOptionsMember") // 处理GET请求,路径为/queryOptionsMember + public JsonResult queryOptionsMember() { + List> list = exchangePointProductsService.queryOptionsMember(); // 调用服务查询会员选项 + return JsonResult.success(list); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsController.java new file mode 100644 index 0000000..279cb1c --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsController.java @@ -0,0 +1,164 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.NoRequireLogin; // 导入不需要登录注解类 +import com.shanzhu.market.common.util.PathUtils; // 导入路径工具类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.DetailStoreGoods; // 导入详细库存商品实体类 +import com.shanzhu.market.entity.domain.Goods; // 导入商品实体类 +import com.shanzhu.market.entity.query.QueryGoods; // 导入商品查询条件类 +import com.shanzhu.market.entity.vo.GoodsListVo; // 导入商品列表视图对象类 +import com.shanzhu.market.service.IGoodsService; // 导入商品服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.*; // 导入请求映射注解 +import org.springframework.web.multipart.MultipartFile; // 导入文件上传类 + +import javax.annotation.Resource; // 导入资源注解 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import javax.validation.constraints.NotNull; // 导入非空约束注解 +import java.util.HashMap; // 导入HashMap类 +import java.util.List; // 导入List接口 +import java.util.Map; // 导入Map接口 + +/** + * 商品控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/goods_management/goods") // 设置请求路径前缀 +public class GoodsController { + + @Resource + private IGoodsService goodsService; // 自动装配商品服务 + + /** + * 分页查询商品信息 + * + * @param qo 查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @PostMapping("/queryPageByQo") // 处理POST请求,路径为/queryPageByQo + public JsonResult queryPageByQo(QueryGoods qo) { + Page page = goodsService.queryPageByQo(qo); // 调用服务分页查询商品信息 + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 上传图片到阿里云OSS + * 返回网络图片地址, uploaded: 1 表示成功,0 表示失败 + * + * @param upload 上传的文件 + * @return 包含上传结果的Map + */ + @NoRequireLogin // 不需要登录即可访问 + @PostMapping("/uploadImg") // 处理POST请求,路径为/uploadImg + public Map uploadImg(@RequestParam("file") MultipartFile upload) { + Map map = new HashMap<>(); // 创建结果Map + if (upload != null && upload.getSize() > 0) { + String path = ""; + try { + path = PathUtils.upload(upload); // 调用工具类上传文件 + map.put("uploaded", 1); // 上传成功 + map.put("url", path); // 返回文件路径 + } catch (Exception e) { + e.printStackTrace(); // 打印异常堆栈信息 + map.put("uploaded", 0); // 上传失败 + Map errorMap = new HashMap<>(); // 创建错误信息Map + errorMap.put("message", e.getMessage()); // 设置错误消息 + map.put("error", errorMap); // 返回错误信息 + } + } else { + map.put("uploaded", 0); // 上传失败 + Map errorMap = new HashMap<>(); // 创建错误信息Map + errorMap.put("message", "上传失败,图片文件异常"); // 设置错误消息 + map.put("error", errorMap); // 返回错误信息 + } + return map; // 返回结果Map + } + + /** + * 保存商品信息 + * + * @param goods 商品对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @PostMapping("/save") // 处理POST请求,路径为/save + public JsonResult saveGoods(Goods goods, HttpServletRequest request) { + goodsService.saveGoods(goods, (String) request.getHeader("token")); // 调用服务保存商品信息 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 上/下架商品 + * + * @param gid 商品编号 + * @param state 上/下架状态 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @PostMapping("/upOrdown") // 处理POST请求,路径为/upOrdown + public JsonResult upOrdown(@NotNull(message = "商品编号不能为空") Long gid, String state, HttpServletRequest request) { + goodsService.upOrdown(gid, state, (String) request.getHeader("token")); // 调用服务上/下架商品 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 根据商品编号查询商品信息 + * + * @param id 商品编号 + * @return 包含商品信息的JSON结果 + */ + @GetMapping("/queryGoodsById") // 处理GET请求,路径为/queryGoodsById + public JsonResult queryGoodsById(@NotNull(message = "商品编号不能为空") Long id) { + return JsonResult.success(goodsService.getById(id)); // 调用服务查询商品信息并返回结果 + } + + /** + * 更新商品信息 + * + * @param goods 商品对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @PostMapping("/update") // 处理POST请求,路径为/update + public JsonResult update(Goods goods, HttpServletRequest request) { + goodsService.updateGoods(goods, (String) request.getHeader("token")); // 调用服务更新商品信息 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 查询所有商品 + * + * @return 包含所有商品的JSON结果 + */ + @GetMapping("/selected_goodsAll") // 处理GET请求,路径为/selected_goodsAll + public JsonResult selected_goodsAll() { + List> list = goodsService.selected_goodsAll(); // 调用服务查询所有商品 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 查询所有仓库 + * + * @return 包含所有仓库的JSON结果 + */ + @GetMapping("/selected_storeAll") // 处理GET请求,路径为/selected_storeAll + public JsonResult selected_storeAll() { + List> list = goodsService.selected_storeAll(); // 调用服务查询所有仓库 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 退还商品入库 + * + * @param detailStoreGoods 详细库存商品对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @PostMapping("/returnGoods") // 处理POST请求,路径为/returnGoods + public JsonResult returnGoods(DetailStoreGoods detailStoreGoods, HttpServletRequest request) { + goodsService.returnGoods(detailStoreGoods, (String) request.getHeader("token")); // 调用服务退还商品入库 + return JsonResult.success(); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsStoreController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsStoreController.java new file mode 100644 index 0000000..e69a86c --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/GoodsStoreController.java @@ -0,0 +1,64 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.query.QueryGoodsStore; // 导入商品库存查询条件类 +import com.shanzhu.market.entity.vo.GoodsStoreVo; // 导入商品库存视图对象类 +import com.shanzhu.market.service.IGoodsService; // 导入商品服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求映射注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 + +/** + * 商品库存控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/goods_management/goods_store") // 设置请求路径前缀 +public class GoodsStoreController { + + @Resource + private IGoodsService goodsService; // 自动装配商品服务 + + /** + * 分页查询商品库存信息 + * + * @param qo 查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("goods_management:goods_store:list") // 需要权限 "goods_management:goods_store:list" + @PostMapping("/queryPageByQo") // 处理POST请求,路径为/queryPageByQo + public JsonResult queryPageByQo(QueryGoodsStore qo) { + Page page = goodsService.queryPageGoodsStore(qo); // 调用服务分页查询商品库存信息 + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 根据ID查询商品库存信息 + * + * @param id 商品库存ID + * @return 包含商品库存信息的JSON结果 + */ + @GetMapping("/queryGoodsStoreById") // 处理GET请求,路径为/queryGoodsStoreById + public JsonResult queryGoodsStoreById(Long id) { + GoodsStoreVo vo = goodsService.queryGoodsStoreById(id); // 调用服务查询商品库存信息 + return JsonResult.success(vo); // 返回成功的JSON结果 + } + + /** + * 更新商品库存 + * + * @param vo 商品库存视图对象 + * @return 成功的JSON结果 + */ + @PostMapping("/updateInventory") // 处理POST请求,路径为/updateInventory + public JsonResult updateInventory(GoodsStoreVo vo) { + goodsService.updateInventory(vo); // 调用服务更新商品库存 + return JsonResult.success(); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/LoginEmpController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/LoginEmpController.java new file mode 100644 index 0000000..cf00609 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/LoginEmpController.java @@ -0,0 +1,96 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.NoRequireLogin; // 导入不需要登录注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.Menu; // 导入菜单实体类 +import com.shanzhu.market.service.ILoginService; // 导入登录服务接口 +import org.springframework.util.StringUtils; // 导入字符串工具类 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import javax.validation.constraints.NotEmpty; // 导入非空约束注解 +import java.util.List; // 导入List接口 +import java.util.Map; // 导入Map接口 + +/** + * 登录控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +public class LoginEmpController { + + @Resource + private ILoginService loginService; // 自动装配登录服务 + + /** + * 登录功能 + * + * @param username 用户名 + * @param password 密码 + * @return 包含登录结果的JSON结果 + */ + @NoRequireLogin // 不需要登录即可访问 + @PostMapping("/login") // 处理POST请求,路径为/login + public JsonResult login(@NotEmpty(message = "账号不能为空") String username, @NotEmpty(message = "密码不能为空") String password) { + Map map = loginService.login(username, password); // 调用服务进行登录 + return JsonResult.success(map); // 返回成功的JSON结果 + } + + /** + * 退出功能 + * + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @NoRequireLogin // 不需要登录即可访问 + @GetMapping("/exit") // 处理GET请求,路径为/exit + public JsonResult exit(HttpServletRequest request) { + String token = request.getHeader("token"); // 从请求头中获取token + if (StringUtils.hasLength(token)) { + loginService.exit(token); // 调用服务进行退出操作 + } + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 注销功能 + * + * @param content 内容 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @PostMapping("/logout") // 处理POST请求,路径为/logout + public JsonResult logout(@NotEmpty(message = "内容不能为空") String content, HttpServletRequest request) { + loginService.logout(request.getHeader("token"), content); // 调用服务进行注销操作 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 查询登录者的拥有的菜单 + * + * @param request HTTP请求对象 + * @return 包含菜单列表的JSON结果 + */ + @GetMapping("/empMenu") // 处理GET请求,路径为/empMenu + public JsonResult empMenu(HttpServletRequest request) { + List menus = loginService.empMenu((String) request.getHeader("token")); // 调用服务查询菜单 + return JsonResult.success(menus); // 返回成功的JSON结果 + } + + /** + * 检查token是否有效 + * + * @param token token字符串 + * @return 包含检查结果的JSON结果 + */ + @NoRequireLogin // 不需要登录即可访问 + @GetMapping("/checkedToken") // 处理GET请求,路径为/checkedToken + public JsonResult checkedToken(String token) { + Map map = loginService.checkedToken(token); // 调用服务检查token + return JsonResult.success(map); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/MemberController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/MemberController.java new file mode 100644 index 0000000..66eee2b --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/MemberController.java @@ -0,0 +1,103 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.Member; // 导入会员实体类 +import com.shanzhu.market.entity.query.QueryMember; // 导入会员查询条件类 +import com.shanzhu.market.service.IMemberService; // 导入会员服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求映射注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 + +/** + * 会员控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/member_management/member") // 设置请求路径前缀 +public class MemberController { + + @Resource + private IMemberService memberService; // 自动装配会员服务 + + /** + * 分页查询会员信息 + * + * @param qo 查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("member_management:member:list") // 需要权限 "member_management:member:list" + @PostMapping("/queryPageByQo") // 处理POST请求,路径为/queryPageByQo + public JsonResult queryPageByQo(QueryMember qo) { + Page page = memberService.queryPageByQo(qo); // 调用服务分页查询会员信息 + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 删除会员 + * + * @param id 会员ID + * @return 成功的JSON结果 + */ + @HasPermisson("member_management:member:delMember") // 需要权限 "member_management:member:delMember" + @PostMapping("/delMember") // 处理POST请求,路径为/delMember + public JsonResult delMember(Long id) { + memberService.delMember(id); // 调用服务删除会员 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 保存会员信息 + * + * @param member 会员对象 + * @return 成功的JSON结果 + */ + @HasPermisson("member_management:member:save") // 需要权限 "member_management:member:save" + @PostMapping("/save") // 处理POST请求,路径为/save + public JsonResult save(Member member) { + memberService.saveMember(member); // 调用服务保存会员信息 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 根据ID查询会员信息 + * + * @param id 会员ID + * @return 包含会员信息的JSON结果 + */ + @GetMapping("/queryMemberById") // 处理GET请求,路径为/queryMemberById + public JsonResult queryMemberById(Long id) { + Member member = memberService.queryMemberById(id); // 调用服务查询会员信息 + return JsonResult.success(member); // 返回成功的JSON结果 + } + + /** + * 更新会员信息 + * + * @param member 会员对象 + * @return 成功的JSON结果 + */ + @HasPermisson("member_management:member:update") // 需要权限 "member_management:member:update" + @PostMapping("/update") // 处理POST请求,路径为/update + public JsonResult updateMember(Member member) { + memberService.updateMember(member); // 调用服务更新会员信息 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 根据电话查询会员信息 + * + * @param phone 会员电话 + * @return 包含会员信息的JSON结果 + */ + @GetMapping("/queryMemberByPhone") // 处理GET请求,路径为/queryMemberByPhone + public JsonResult queryMemberByPhone(String phone) { + Member member = memberService.queryMemberByPhone(phone); // 调用服务查询会员信息 + return JsonResult.success(member); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/MenuController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/MenuController.java new file mode 100644 index 0000000..fda8a3a --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/MenuController.java @@ -0,0 +1,37 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.Menu; // 导入菜单实体类 +import com.shanzhu.market.entity.query.MenuQuery; // 导入菜单查询条件类 +import com.shanzhu.market.service.IMenuService; // 导入菜单服务接口 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求映射注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 + +/** + * 菜单控制器 + */ +@RestController // 标记该类为REST控制器 +@RequestMapping("/system/menu") // 设置请求路径前缀 +public class MenuController { + + @Resource + private IMenuService menuService; // 自动装配菜单服务 + + /** + * 条件分页查询菜单的信息 + * + * @param qo 菜单查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("system:menu:list") // 需要权限 "system:menu:list" + @PostMapping("/queryPageByQo") // 处理POST请求,路径为/queryPageByQo + public JsonResult queryPageByQo(MenuQuery qo) { + Page page = menuService.queryPageByQo(qo); // 调用服务分页查询菜单信息 + return JsonResult.success(page); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/NoticeController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/NoticeController.java new file mode 100644 index 0000000..d3a9c79 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/NoticeController.java @@ -0,0 +1,98 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.DetailStoreGoods; // 导入详细库存商品实体类 +import com.shanzhu.market.entity.domain.NoticeIn; // 导入入库通知实体类 +import com.shanzhu.market.entity.domain.NoticeOut; // 导出入库通知实体类 +import com.shanzhu.market.entity.query.QueryNoticeIn; // 导入入库通知查询条件类 +import com.shanzhu.market.entity.query.QueryNoticeOut; // 导出入库通知查询条件类 +import com.shanzhu.market.entity.vo.NoticeInNotNormalVo; // 导入入库通知非正常视图对象类 +import com.shanzhu.market.service.IGoodsService; // 导入商品服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求映射注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 + +/** + * 通知控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/inventory_management/detail_store_goods/notice") // 设置请求路径前缀 +public class NoticeController { + + @Resource + private IGoodsService goodsService; // 自动装配商品服务 + + /** + * 分页查询入库通知信息 + * + * @param qo 入库通知查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("inventory_management:detail_store_goods_in:notice:list") // 需要权限 "inventory_management:detail_store_goods_in:notice:list" + @PostMapping("/queryPageNoticeIn") // 处理POST请求,路径为/queryPageNoticeIn + public JsonResult queryPageNoticeIn(QueryNoticeIn qo) { + Page page = goodsService.queryPageNoticeIn(qo); // 调用服务分页查询入库通知信息 + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 分页查询出库通知信息(已上架) + * + * @param qo 出库通知查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("inventory_management:detail_store_goods_out:notice:list") // 需要权限 "inventory_management:detail_store_goods_out:notice:list" + @PostMapping("/queryPageNoticeOut_shelves") // 处理POST请求,路径为/queryPageNoticeOut_shelves + public JsonResult queryPageNoticeOut_shelves(QueryNoticeOut qo) { + Page page = goodsService.queryPageNoticeOut_shelves(qo); // 调用服务分页查询出库通知信息(已上架) + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 保存出库通知(上架) + * + * @param detailStoreGoods 详细库存商品对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @HasPermisson("inventory_management:detail_store_goods_out:notice:saveOut_shelves") // 需要权限 "inventory_management:detail_store_goods_out:notice:saveOut_shelves" + @PostMapping("/saveOut_shelves") // 处理POST请求,路径为/saveOut_shelves + public JsonResult saveOut_shelves(DetailStoreGoods detailStoreGoods, HttpServletRequest request) { + goodsService.saveOut_shelves(detailStoreGoods, (String) request.getHeader("token")); // 调用服务保存出库通知(上架) + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 分页查询出库通知信息(未处理) + * + * @param qo 出库通知查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("inventory_management:detail_store_goods_out:notice:list") // 需要权限 "inventory_management:detail_store_goods_out:notice:list" + @PostMapping("/queryPageNoticeOut_untreated") // 处理POST请求,路径为/queryPageNoticeOut_untreated + public JsonResult queryPageNoticeOut_untreated(QueryNoticeOut qo) { + Page page = goodsService.queryPageNoticeOut_untreated(qo); // 调用服务分页查询出库通知信息(未处理) + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 处理解库通知(未处理) + * + * @param vo 入库通知非正常视图对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @HasPermisson("inventory_management:detail_store_goods_out:notice:resolveOutUntreatedForm") // 需要权限 "inventory_management:detail_store_goods_out:notice:resolveOutUntreatedForm" + @PostMapping("/resolveOutUntreatedForm") // 处理POST请求,路径为/resolveOutUntreatedForm + public JsonResult resolveOutUntreatedForm(NoticeInNotNormalVo vo, HttpServletRequest request) { + goodsService.resolveOutUntreatedForm(vo, (String) request.getHeader("token")); // 调用服务处理出库通知(未处理) + return JsonResult.success(); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/PersonalController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/PersonalController.java new file mode 100644 index 0000000..916f771 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/PersonalController.java @@ -0,0 +1,56 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.query.QueryEditPwd; // 导入修改密码查询条件类 +import com.shanzhu.market.entity.vo.InformationVo; // 导入个人信息视图对象类 +import com.shanzhu.market.service.IEmployeeService; // 导入员工服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求映射注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 + +/** + * 个人中心控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/personal") // 设置请求路径前缀 +public class PersonalController { + + @Resource + private IEmployeeService employeeService; // 自动装配员工服务 + + /** + * 修改个人的密码 + * + * @param request HTTP请求对象 + * @param editPwd 修改密码查询条件对象 + * @return 成功的JSON结果 + */ + @HasPermisson("personal:edit_pwd") // 需要权限 "personal:edit_pwd" + @PostMapping("/edit_pwd") // 处理POST请求,路径为/edit_pwd + public JsonResult edit_pwd(HttpServletRequest request, QueryEditPwd editPwd) { + String token = request.getHeader("token"); // 从请求头中获取token + employeeService.edit_pwd(editPwd, token); // 调用服务修改密码 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 获取个人的详细信息 + * + * @param request HTTP请求对象 + * @return 包含个人信息的JSON结果 + */ + @HasPermisson("personnel_management:employee:update") // 需要权限 "personnel_management:employee:update" + @GetMapping("/information") // 处理GET请求,路径为/information + public JsonResult information(HttpServletRequest request) { + String token = request.getHeader("token"); // 从请求头中获取token + InformationVo vo = employeeService.information(token); // 调用服务获取个人信息 + return JsonResult.success(vo); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/PointProductController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/PointProductController.java new file mode 100644 index 0000000..7519cf2 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/PointProductController.java @@ -0,0 +1,105 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; // 导入查询条件包装类 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果封装类 +import com.shanzhu.market.entity.domain.PointProducts; // 导入积分商品实体类 +import com.shanzhu.market.entity.query.QueryPointProducts; // 导入积分商品查询条件类 +import com.shanzhu.market.service.IPointProductsService; // 导入积分商品服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求映射注解 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解 + +import javax.annotation.Resource; // 导入资源注解 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import java.util.List; // 导入List接口 +import java.util.Map; // 导入Map接口 + +/** + * 积分商品控制器 + */ +@RestController // 标记该类为REST控制器 +@Validated // 启用方法参数验证 +@RequestMapping("/goods_management/point_products") // 设置请求路径前缀 +public class PointProductController { + + @Resource + private IPointProductsService pointProductsService; // 自动装配积分商品服务 + + /** + * 分页查询积分商品信息 + * + * @param qo 积分商品查询条件对象 + * @return 包含分页结果的JSON结果 + */ + @HasPermisson("goods_management:point_products:list") // 需要权限 "goods_management:point_products:list" + @PostMapping("/queryPageByQo") // 处理POST请求,路径为/queryPageByQo + public JsonResult queryPageByQo(QueryPointProducts qo) { + Page page = pointProductsService.queryPageByQo(qo); // 调用服务分页查询积分商品信息 + return JsonResult.success(page); // 返回成功的JSON结果 + } + + /** + * 删除积分商品 + * + * @param id 积分商品ID + * @return 成功的JSON结果 + */ + @GetMapping("/del") // 处理GET请求,路径为/del + public JsonResult del(Long id) { + pointProductsService.del(id); // 调用服务删除积分商品 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 查询所有商品选项 + * + * @return 包含商品选项的JSON结果 + */ + @GetMapping("/queryOptionGoods") // 处理GET请求,路径为/queryOptionGoods + public JsonResult queryOptionGoods() { + List> list = pointProductsService.queryOptionGoods(); // 调用服务查询所有商品选项 + return JsonResult.success(list); // 返回成功的JSON结果 + } + + /** + * 保存积分商品 + * + * @param pointProducts 积分商品对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @PostMapping("/savePointGoods") // 处理POST请求,路径为/savePointGoods + public JsonResult savePointGoods(PointProducts pointProducts, HttpServletRequest request) { + pointProductsService.savePointGoods(pointProducts, (String) request.getHeader("token")); // 调用服务保存积分商品 + return JsonResult.success(); // 返回成功的JSON结果 + } + + /** + * 根据商品ID查询积分商品信息 + * + * @param goodsId 商品ID + * @return 包含积分商品信息的JSON结果 + */ + @GetMapping("/queryPointGoodsById") // 处理GET请求,路径为/queryPointGoodsById + public JsonResult queryPointGoodsById(Long goodsId) { + PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper().eq("goods_id", goodsId)); // 调用服务查询积分商品信息 + return JsonResult.success(pointProducts); // 返回成功的JSON结果 + } + + /** + * 更新积分商品信息 + * + * @param pointProducts 积分商品对象 + * @param request HTTP请求对象 + * @return 成功的JSON结果 + */ + @PostMapping("/updatePointGoods") // 处理POST请求,路径为/updatePointGoods + public JsonResult updatePointGoods(PointProducts pointProducts, HttpServletRequest request) { + pointProductsService.updatePointGoods(pointProducts, (String) request.getHeader("token")); // 调用服务更新积分商品信息 + return JsonResult.success(); // 返回成功的JSON结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/RoleController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/RoleController.java new file mode 100644 index 0000000..78b304f --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/RoleController.java @@ -0,0 +1,115 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.exception.BusinessException; // 导入业务异常类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果类 +import com.shanzhu.market.entity.domain.Role; // 导入角色实体类 +import com.shanzhu.market.entity.query.RoleQuery; // 导入角色查询对象类 +import com.shanzhu.market.entity.vo.RolePermissonVo; // 导入角色权限视图对象类 +import com.shanzhu.market.service.IRoleService; // 导入角色服务接口 +import org.springframework.util.StringUtils; // 导入Spring工具类 +import org.springframework.validation.annotation.Validated; // 导入验证注解类 +import org.springframework.web.bind.annotation.*; // 导入Spring Web注解类 + +import javax.annotation.Resource; // 导入资源注解类 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import javax.validation.constraints.NotNull; // 导入非空注解类 +import java.util.List; // 导入列表类 +import java.util.Map; // 导入映射类 + +@RestController // 标记为REST控制器 +@Validated // 启用方法级别的验证 +@RequestMapping("/system/role") // 设置请求路径前缀 +public class RoleController { + + @Resource // 注入角色服务 + private IRoleService roleService; + + /** + * 查询角色所有的信息 + * + * @return 返回包含所有角色信息的JSON结果 + */ + @HasPermisson("system:role:list") // 需要system:role:list权限 + @PostMapping("/list") // 处理POST请求,路径为/list + public JsonResult list(RoleQuery qo) { + List roles = roleService.listByQo(qo); // 调用服务查询角色列表 + return JsonResult.success(roles); // 返回成功结果,包含角色列表 + } + + /** + * 停用角色 + */ + @HasPermisson("system:role:forbiddenRole") // 需要system:role:forbiddenRole权限 + @PostMapping("/forbiddenRole") // 处理POST请求,路径为/forbiddenRole + public JsonResult forbiddenRole(Long rid) { + roleService.forbiddenRole(rid); // 调用服务停用角色 + return JsonResult.success(); // 返回成功结果 + } + + /** + * 修改角色信息 + */ + @HasPermisson("system:role:edit_role") // 需要system:role:edit_role权限 + @PostMapping("/edit_role") // 处理POST请求,路径为/edit_role + public JsonResult edit_role(Role role) { + if (Role.SYS_ID == role.getId() || 2L == role.getId()) { // 检查是否为系统角色 + throw new BusinessException("不能停用系统拥有者"); // 抛出业务异常 + } + if (role != null && StringUtils.hasText(role.getInfo())) { // 检查角色信息是否为空 + roleService.updateById(role); // 调用服务更新角色信息 + } + return JsonResult.success(); // 返回成功结果 + } + + /** + * 保存角色信息 + */ + @HasPermisson("system:role:save") // 需要system:role:save权限 + @PostMapping("/save") // 处理POST请求,路径为/save + public JsonResult save(Role role) { + roleService.saveRole(role); // 调用服务保存角色信息 + return JsonResult.success(); // 返回成功结果 + } + + /** + * 查询角色拥有的权限 + */ + @HasPermisson("system:role:saveRolePermissons") // 需要system:role:saveRolePermissons权限 + @GetMapping("/checkPermissons") // 处理GET请求,路径为/checkPermissons + public JsonResult checkPermissons(@NotNull(message = "角色不能为空") Long rid) { + RolePermissonVo vo = roleService.checkPermissons(rid); // 调用服务查询角色权限 + return JsonResult.success(vo); // 返回成功结果,包含角色权限信息 + } + + /** + * 保存角色-菜单的关系 + */ + @HasPermisson("system:role:saveRolePermissons") // 需要system:role:saveRolePermissons权限 + @PostMapping("/saveRolePermissons") // 处理POST请求,路径为/saveRolePermissons + public JsonResult saveRolePermissons(@NotNull(message = "角色不能为空") @RequestParam("rid") Long rid, @RequestParam("menuIds") Long[] menuIds) { + roleService.saveRolePermissons(rid, menuIds); // 调用服务保存角色-菜单关系 + return JsonResult.success(); // 返回成功结果 + } + + @GetMapping("/all") // 处理GET请求,路径为/all + public JsonResult getRoleAll() { + List> list = roleService.getRoleAll(); // 调用服务获取所有角色信息 + return JsonResult.success(list); // 返回成功结果,包含所有角色信息 + } + + @HasPermisson("personnel_management:employee:queryRoleIdsByEid") // 需要personnel_management:employee:queryRoleIdsByEid权限 + @GetMapping("/queryRoleIdsByEid") // 处理GET请求,路径为/queryRoleIdsByEid + public JsonResult queryRoleIdsByEid(Long eid) { + List list = roleService.queryRoleIdsByEid(eid); // 调用服务查询员工角色ID列表 + return JsonResult.success(list); // 返回成功结果,包含员工角色ID列表 + } + + @HasPermisson("personnel_management:employee:queryRoleIdsByEid") // 需要personnel_management:employee:queryRoleIdsByEid权限 + @PostMapping("/saveRoleEmp") // 处理POST请求,路径为/saveRoleEmp + public JsonResult saveRoleEmp(Long eid, Long[] empRoleIds, HttpServletRequest request) { + String token = request.getHeader("token"); // 从请求头获取token + roleService.saveRoleEmp(eid, empRoleIds, token); // 调用服务保存员工角色信息 + return JsonResult.success(); // 返回成功结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/SaleRecordController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/SaleRecordController.java new file mode 100644 index 0000000..bd4616a --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/SaleRecordController.java @@ -0,0 +1,55 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; // 导入ID生成工具类 +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果类 +import com.shanzhu.market.entity.domain.SaleRecords; // 导入销售记录实体类 +import com.shanzhu.market.entity.query.QuerySaleRecords; // 导入销售记录查询对象类 +import com.shanzhu.market.service.ISaleRecordsService; // 导入销售记录服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解类 +import org.springframework.web.bind.annotation.*; // 导入Spring Web注解类 + +import javax.annotation.Resource; // 导入资源注解类 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import java.util.List; // 导入列表类 +import java.util.Map; // 导入映射类 + +@RestController // 标记为REST控制器 +@Validated // 启用方法级别的验证 +@RequestMapping("/sale_management/sale_record") // 设置请求路径前缀 +public class SaleRecordController { + + @Resource // 注入销售记录服务 + private ISaleRecordsService saleRecordsService; + + @GetMapping("/getCn") // 处理GET请求,路径为/getCn + public JsonResult getCn(){ + return JsonResult.success(IdWorker.getIdStr()); // 生成并返回唯一ID + } + + @GetMapping("/getOptionSaleRecordsGoods") // 处理GET请求,路径为/getOptionSaleRecordsGoods + public JsonResult getOptionSaleRecordsGoods(){ + List> list=saleRecordsService.getOptionSaleRecordsGoods(); // 调用服务获取销售记录商品选项 + return JsonResult.success(list); // 返回成功结果,包含商品选项列表 + } + + @PostMapping("/saveSaleRecords") // 处理POST请求,路径为/saveSaleRecords + public JsonResult saveSaleRecords(@RequestBody SaleRecords saleRecords, HttpServletRequest request){ + saleRecords=saleRecordsService.saveSaleRecords(saleRecords,(String) request.getHeader("token")); // 调用服务保存销售记录 + return JsonResult.success(saleRecords); // 返回成功结果,包含保存后的销售记录 + } + + @HasPermisson("sale_management:sale_records:list") // 需要sale_management:sale_records:list权限 + @PostMapping("/queryPageByQoSaleRecords") // 处理POST请求,路径为/queryPageByQoSaleRecords + public JsonResult queryPageByQoSaleRecords(QuerySaleRecords qo){ + Page page=saleRecordsService.queryPageByQoSaleRecords(qo); // 调用服务分页查询销售记录 + return JsonResult.success(page); // 返回成功结果,包含分页后的销售记录 + } + + @GetMapping("/delSaleRecords") // 处理GET请求,路径为/delSaleRecords + public JsonResult delSaleRecords(String cn){ + saleRecordsService.delSaleRecords(cn); // 调用服务删除销售记录 + return JsonResult.success(); // 返回成功结果 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StatisticSaleController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StatisticSaleController.java new file mode 100644 index 0000000..a40cff9 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StatisticSaleController.java @@ -0,0 +1,30 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果类 +import com.shanzhu.market.entity.query.QueryStatisticSale; // 导入销售统计查询对象类 +import com.shanzhu.market.entity.vo.SalesStatisticsVo; // 导入销售统计视图对象类 +import com.shanzhu.market.service.IGoodsService; // 导入商品服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解类 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解类 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求路径注解类 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解类 + +import javax.annotation.Resource; // 导入资源注解类 + +@RestController // 标记为REST控制器 +@Validated // 启用方法级别的验证 +@RequestMapping("/goods_management/statistic_sale") // 设置请求路径前缀 +public class StatisticSaleController { + + @Resource // 注入商品服务 + private IGoodsService goodsService; + + @HasPermisson("goods_management:statistic_sale:list") // 需要goods_management:statistic_sale:list权限 + @PostMapping("/queryPageByQo") // 处理POST请求,路径为/queryPageByQo + public JsonResult queryPageByQo(QueryStatisticSale qo) { + SalesStatisticsVo vo = goodsService.queryPageStatisticSaleByQo(qo); // 调用服务查询分页销售统计信息 + return JsonResult.success(vo); // 返回成功结果,包含销售统计信息 + } + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StorageSituationController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StorageSituationController.java new file mode 100644 index 0000000..636fc73 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StorageSituationController.java @@ -0,0 +1,38 @@ +package com.shanzhu.market.controller; + +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果类 +import com.shanzhu.market.entity.query.QueryDetailStorageSituation; // 导入详细库存情况查询对象类 +import com.shanzhu.market.entity.query.QueryStorageSituation; // 导入库存情况查询对象类 +import com.shanzhu.market.service.IGoodsStoreService; // 导入商品库存服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解类 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解类 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求路径注解类 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解类 + +import javax.annotation.Resource; // 导入资源注解类 +import java.util.Map; // 导入映射类 + +@RestController // 标记为REST控制器 +@Validated // 启用方法级别的验证 +@RequestMapping("/inventory_management/store/storage_situation") // 设置请求路径前缀 +public class StorageSituationController { + + @Resource // 注入商品库存服务 + private IGoodsStoreService goodsStoreService; + + @HasPermisson("inventory_management:store:storage_situation") // 需要inventory_management:store:storage_situation权限 + @PostMapping("/queryPageByQo") // 处理POST请求,路径为/queryPageByQo + public JsonResult queryPageByQo(QueryStorageSituation qo) { + Map map = goodsStoreService.queryPageStorageSituationByQo(qo); // 调用服务查询分页库存情况 + return JsonResult.success(map); // 返回成功结果,包含分页库存情况 + } + + @HasPermisson("inventory_management:store:storage_situation") // 需要inventory_management:store:storage_situation权限 + @PostMapping("/queryStoreGoodsByStoreId") // 处理POST请求,路径为/queryStoreGoodsByStoreId + public JsonResult queryStoreGoodsByStoreId(QueryDetailStorageSituation qo) { + Map map = goodsStoreService.queryStoreGoodsByStoreId(qo); // 调用服务查询指定仓库的商品库存情况 + return JsonResult.success(map); // 返回成功结果,包含指定仓库的商品库存情况 + } + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreController.java new file mode 100644 index 0000000..83c33d7 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreController.java @@ -0,0 +1,59 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; // 导入MyBatis-Plus查询包装器类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果类 +import com.shanzhu.market.entity.domain.Store; // 导入仓库实体类 +import com.shanzhu.market.entity.query.QueryStore; // 导入仓库查询对象类 +import com.shanzhu.market.service.IStoreService; // 导入仓库服务接口 +import org.springframework.util.StringUtils; // 导入Spring工具类 +import org.springframework.validation.annotation.Validated; // 导入验证注解类 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解类 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求路径注解类 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解类 + +import javax.annotation.Resource; // 导入资源注解类 + +@RestController // 标记为REST控制器 +@Validated // 启用方法级别的验证 +@RequestMapping("/inventory_management/store") // 设置请求路径前缀 +public class StoreController { + + @Resource // 注入仓库服务 + private IStoreService storeService; + + /*保存仓库信息接口*/ + @HasPermisson("inventory_management:store:save") // 需要inventory_management:store:save权限 + @PostMapping("/save") // 处理POST请求,路径为/save + public JsonResult saveStore(Store store){ + storeService.saveStore(store); // 调用服务保存仓库信息 + return JsonResult.success(); // 返回成功结果 + } + + /*修改仓库接口*/ + @HasPermisson("inventory_management:store:update") // 需要inventory_management:store:update权限 + @PostMapping("/update") // 处理POST请求,路径为/update + public JsonResult updateStore(Store store){ + storeService.updateStore(store); // 调用服务更新仓库信息 + return JsonResult.success(); // 返回成功结果 + } + + /*停用仓库*/ + @HasPermisson("inventory_management:store:deactivate") // 需要inventory_management:store:deactivate权限 + @PostMapping("/deactivate") // 处理POST请求,路径为/deactivate + public JsonResult deactivate(Long sid){ + storeService.deactivate(sid); // 调用服务停用仓库 + return JsonResult.success(); // 返回成功结果 + } + + /*查询仓库信息*/ + @HasPermisson("inventory_management:store:list") // 需要inventory_management:store:list权限 + @PostMapping("/list") // 处理POST请求,路径为/list + public JsonResult list(QueryStore qo){ + return JsonResult.success(storeService.list( new QueryWrapper() // 调用服务查询仓库信息 + .like(StringUtils.hasText(qo.getName()),"name",qo.getName()) // 根据名称模糊查询 + .eq(StringUtils.hasText(qo.getState()),"state",qo.getState()) // 根据状态精确查询 + )); + } + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreInController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreInController.java new file mode 100644 index 0000000..15cb0c6 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreInController.java @@ -0,0 +1,61 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果类 +import com.shanzhu.market.entity.domain.DetailStoreGoods; // 导入仓库商品详情实体类 +import com.shanzhu.market.entity.query.QueryDetailStoreGoods; // 导入仓库商品详情查询对象类 +import com.shanzhu.market.entity.vo.DetailStoreGoodsVo; // 导入仓库商品详情视图对象类 +import com.shanzhu.market.service.IDetailStoreGoodsService; // 导入仓库商品详情服务接口 +import com.shanzhu.market.service.ISupplierService; // 导入供应商服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解类 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解类 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解类 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求路径注解类 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解类 + +import javax.annotation.Resource; // 导入资源注解类 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import javax.validation.constraints.NotEmpty; // 导入非空注解类 +import java.util.List; // 导入列表类 +import java.util.Map; // 导入映射类 + +@RestController // 标记为REST控制器 +@Validated // 启用方法级别的验证 +@RequestMapping("/inventory_management/detail_store_goods_in") // 设置请求路径前缀 +public class StoreInController { + + @Resource // 注入仓库商品详情服务 + private IDetailStoreGoodsService detailStoreGoodsService; + + @Resource // 注入供应商服务 + private ISupplierService supplierService; + + @HasPermisson("inventory_management:detail_store_goods_in:save") // 需要inventory_management:detail_store_goods_in:save权限 + @PostMapping("/save") // 处理POST请求,路径为/save + public JsonResult saveIn(DetailStoreGoods detailStoreGoods, HttpServletRequest request) { + detailStoreGoodsService.saveIn(detailStoreGoods, (String) request.getHeader("token")); // 调用服务保存入库信息 + return JsonResult.success(); // 返回成功结果 + } + + @HasPermisson("inventory_management:detail_store_goods_in:list") // 需要inventory_management:detail_store_goods_in:list权限 + @PostMapping("/queryPageByQo") // 处理POST请求,路径为/queryPageByQo + public JsonResult queryPageByQo(QueryDetailStoreGoods qo) { + Page page = detailStoreGoodsService.queryPageByQoIn(qo); // 调用服务分页查询入库信息 + return JsonResult.success(page); // 返回成功结果,包含分页后的入库信息 + } + + @HasPermisson("inventory_management:detail_store_goods_in:delIn") // 需要inventory_management:detail_store_goods_in:delIn权限 + @PostMapping("/delIn") // 处理POST请求,路径为/delIn + public JsonResult delIn(@NotEmpty(message = "系统编号不能为空") String cn) { + detailStoreGoodsService.delIn(cn); // 调用服务删除入库信息 + return JsonResult.success(); // 返回成功结果 + } + + @HasPermisson("inventory_management:detail_store_goods_in:save") // 需要inventory_management:detail_store_goods_in:save权限 + @GetMapping("/queryOptionsSuppliers") // 处理GET请求,路径为/queryOptionsSuppliers + public JsonResult queryOptionsSuppliers() { + List> list = supplierService.queryOptionsSuppliers(); // 调用服务查询供应商选项 + return JsonResult.success(list); // 返回成功结果,包含供应商选项列表 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreOutController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreOutController.java new file mode 100644 index 0000000..95dec76 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/StoreOutController.java @@ -0,0 +1,73 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果类 +import com.shanzhu.market.entity.domain.DetailStoreGoods; // 导入仓库商品详情实体类 +import com.shanzhu.market.entity.query.QueryDetailStoreGoodsOut; // 导入仓库商品出库查询对象类 +import com.shanzhu.market.entity.vo.DetailStoreGoodsOutVo; // 导入仓库商品出库视图对象类 +import com.shanzhu.market.service.IDetailStoreGoodsService; // 导入仓库商品详情服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解类 +import org.springframework.web.bind.annotation.*; // 导入Spring Web注解类 + +import javax.annotation.Resource; // 导入资源注解类 +import javax.servlet.http.HttpServletRequest; // 导入HTTP请求类 +import javax.validation.constraints.NotEmpty; // 导入非空注解类 +import java.util.Map; // 导入映射类 + +@RestController // 标记为REST控制器 +@Validated // 启用方法级别的验证 +@RequestMapping("/inventory_management/detail_store_goods_out") // 设置请求路径前缀 +public class StoreOutController { + + @Resource // 注入仓库商品详情服务 + private IDetailStoreGoodsService detailStoreGoodsService; + + @HasPermisson("inventory_management:detail_store_goods_out:list") // 需要inventory_management:detail_store_goods_out:list权限 + @PostMapping("/queryPageByQoOut") // 处理POST请求,路径为/queryPageByQoOut + public JsonResult queryPageByQoOut(QueryDetailStoreGoodsOut qo){ + Page page = detailStoreGoodsService.queryPageByQoOut(qo); // 调用服务分页查询出库信息 + return JsonResult.success(page); // 返回成功结果,包含分页后的出库信息 + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") // 需要inventory_management:detail_store_goods_out:save权限 + @GetMapping("/initOutOptions") // 处理GET请求,路径为/initOutOptions + public JsonResult> initOutOptions(){ + return JsonResult.success(detailStoreGoodsService.initOutOptions()); // 调用服务初始化出库选项 + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") // 需要inventory_management:detail_store_goods_out:save权限 + @GetMapping("/changeOutGoods") // 处理GET请求,路径为/changeOutGoods + public JsonResult changeOutGoods(Long gid){ + return JsonResult.success(detailStoreGoodsService.changeOutGoods(gid)); // 调用服务更改出库商品信息 + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") // 需要inventory_management:detail_store_goods_out:save权限 + @GetMapping("/changeOutStore") // 处理GET请求,路径为/changeOutStore + public JsonResult changeOutStore(Long storeId){ + return JsonResult.success(detailStoreGoodsService.changeOutStore(storeId)); // 调用服务更改出库仓库信息 + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") // 需要inventory_management:detail_store_goods_out:save权限 + @PostMapping("/queryOutGoods") // 处理POST请求,路径为/queryOutGoods + public JsonResult queryOutGoods(@RequestParam("goodsId") Long goodsId, + @RequestParam("storeId") Long storeId){ + DetailStoreGoodsOutVo vo = detailStoreGoodsService.queryOutGoods(goodsId, storeId); // 调用服务查询出库商品信息 + return JsonResult.success(vo); // 返回成功结果,包含出库商品信息 + } + + @HasPermisson("inventory_management:detail_store_goods_out:save") // 需要inventory_management:detail_store_goods_out:save权限 + @PostMapping("/save") // 处理POST请求,路径为/save + public JsonResult saveOut(DetailStoreGoods detailStoreGoods, HttpServletRequest request){ + detailStoreGoodsService.saveOut(detailStoreGoods, (String) request.getHeader("token")); // 调用服务保存出库信息 + return JsonResult.success(); // 返回成功结果 + } + + @HasPermisson("inventory_management:detail_store_goods_out:delOut") // 需要inventory_management:detail_store_goods_out:delOut权限 + @PostMapping("/delOut") // 处理POST请求,路径为/delOut + public JsonResult delOut(@NotEmpty(message = "系统编号不能为空") String cn) { + detailStoreGoodsService.delIn(cn); // 调用服务删除出库信息 + return JsonResult.success(); // 返回成功结果 + } + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/SupplierController.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/SupplierController.java new file mode 100644 index 0000000..5c5509b --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/controller/SupplierController.java @@ -0,0 +1,60 @@ +package com.shanzhu.market.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; // 导入分页类 +import com.shanzhu.market.common.sercurity.annotation.HasPermisson; // 导入权限注解类 +import com.shanzhu.market.common.web.response.JsonResult; // 导入JSON结果类 +import com.shanzhu.market.entity.domain.Supplier; // 导入供应商实体类 +import com.shanzhu.market.entity.query.QuerySupplier; // 导入供应商查询对象类 +import com.shanzhu.market.service.ISupplierService; // 导入供应商服务接口 +import org.springframework.validation.annotation.Validated; // 导入验证注解类 +import org.springframework.web.bind.annotation.GetMapping; // 导入GET请求注解类 +import org.springframework.web.bind.annotation.PostMapping; // 导入POST请求注解类 +import org.springframework.web.bind.annotation.RequestMapping; // 导入请求路径注解类 +import org.springframework.web.bind.annotation.RestController; // 导入REST控制器注解类 + +import javax.annotation.Resource; // 导入资源注解类 + +@RestController // 标记为REST控制器 +@Validated // 启用方法级别的验证 +@RequestMapping("/inventory_management/supplier") // 设置请求路径前缀 +public class SupplierController { + + @Resource // 注入供应商服务 + private ISupplierService supplierService; + + @HasPermisson("inventory_management:supplier:list") // 需要inventory_management:supplier:list权限 + @PostMapping("/queryPageByQo") // 处理POST请求,路径为/queryPageByQo + public JsonResult queryPageByQo(QuerySupplier qo) { + Page page = supplierService.queryPageByQo(qo); // 调用服务分页查询供应商信息 + return JsonResult.success(page); // 返回成功结果,包含分页后的供应商信息 + } + + @HasPermisson("inventory_management:supplier:save") // 需要inventory_management:supplier:save权限 + @PostMapping("/save") // 处理POST请求,路径为/save + public JsonResult saveSupplier(Supplier supplier){ + supplierService.saveSupplier(supplier); // 调用服务保存供应商信息 + return JsonResult.success(); // 返回成功结果 + } + + /*修改接口*/ + @HasPermisson("inventory_management:supplier:update") // 需要inventory_management:supplier:update权限 + @PostMapping("/update") // 处理POST请求,路径为/update + public JsonResult updateSupplier(Supplier supplier){ + supplierService.updateSupplier(supplier); // 调用服务更新供应商信息 + return JsonResult.success(); // 返回成功结果 + } + + @HasPermisson("inventory_management:supplier:update") // 需要inventory_management:supplier:update权限 + @GetMapping("/queryByCn") // 处理GET请求,路径为/queryByCn + public JsonResult queryByCn(Long cn){ + return JsonResult.success(supplierService.getById(cn)); // 调用服务根据系统编号查询供应商信息 + } + + @HasPermisson("inventory_management:supplier:deactivate") // 需要inventory_management:supplier:deactivate权限 + @PostMapping("/deactivate") // 处理POST请求,路径为/deactivate + public JsonResult deactivate(Long cn){ + supplierService.deactivate(cn); // 调用服务停用供应商 + return JsonResult.success(); // 返回成功结果 + } + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Dept.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Dept.java new file mode 100644 index 0000000..7281f36 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Dept.java @@ -0,0 +1,72 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; // 导入MyBatis-Plus ID类型注解类 +import com.baomidou.mybatisplus.annotation.TableId; // 导入MyBatis-Plus 表ID注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 + +import java.io.Serializable; // 导入序列化接口 + +/** + * 部门实体 + */ +@TableName("department") // 指定数据库表名为department +public class Dept implements Serializable { + // 正常状态 + public static final String STATE_NORMAL = "0"; // 定义正常状态常量 + + // 禁用状态 + public static final String STATE_BAN = "-1"; // 定义禁用状态常量 + + @TableId(type = IdType.AUTO) // 指定主键自增 + private Long id; // 部门ID + + private String name; // 部门名称 + + private String info; // 部门信息 + + private String state; // 部门状态 + + public Dept() { + // 默认构造函数 + } + + public Dept(Long id, String name, String info, String state) { + // 带参数的构造函数 + this.id = id; + this.name = name; + this.info = info; + this.state = state; + } + + public Long getId() { + return id; // 获取部门ID + } + + public void setId(Long id) { + this.id = id; // 设置部门ID + } + + public String getName() { + return name; // 获取部门名称 + } + + public void setName(String name) { + this.name = name; // 设置部门名称 + } + + public String getInfo() { + return info; // 获取部门信息 + } + + public void setInfo(String info) { + this.info = info; // 设置部门信息 + } + + public String getState() { + return state; // 获取部门状态 + } + + public void setState(String state) { + this.state = state; // 设置部门状态 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailSaleRecords.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailSaleRecords.java new file mode 100644 index 0000000..e1e6295 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailSaleRecords.java @@ -0,0 +1,77 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; // 导入MyBatis-Plus 表字段注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 + +import java.io.Serializable; // 导入序列化接口 + +@TableName("detail_sale_records") // 指定数据库表名为detail_sale_records +public class DetailSaleRecords implements Serializable { + @TableField("sell_cn") // 指定数据库字段名为sell_cn + private String sellCn; // 销售编号 + + @TableField("goods_id") // 指定数据库字段名为goods_id + private Long goodsId; // 商品ID + + @TableField("goods_num") // 指定数据库字段名为goods_num + private Long goodsNum; // 商品数量 + + @TableField("goods_price") // 指定数据库字段名为goods_price + private Double goodsPrice; // 商品价格 + + @TableField("goods_name") // 指定数据库字段名为goods_name + private String goodsName; // 商品名称 + + public DetailSaleRecords() { + // 默认构造函数 + } + + public DetailSaleRecords(String sellCn, Long goodsId, Long goodsNum, Double goodsPrice, String goodsName) { + // 带参数的构造函数 + this.sellCn = sellCn; + this.goodsId = goodsId; + this.goodsNum = goodsNum; + this.goodsPrice = goodsPrice; + this.goodsName = goodsName; + } + + public String getSellCn() { + return sellCn; // 获取销售编号 + } + + public void setSellCn(String sellCn) { + this.sellCn = sellCn; // 设置销售编号 + } + + public Long getGoodsId() { + return goodsId; // 获取商品ID + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; // 设置商品ID + } + + public Long getGoodsNum() { + return goodsNum; // 获取商品数量 + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; // 设置商品数量 + } + + public Double getGoodsPrice() { + return goodsPrice; // 获取商品价格 + } + + public void setGoodsPrice(Double goodsPrice) { + this.goodsPrice = goodsPrice; // 设置商品价格 + } + + public String getGoodsName() { + return goodsName; // 获取商品名称 + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; // 设置商品名称 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailStoreGoods.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailStoreGoods.java new file mode 100644 index 0000000..72dd25b --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/DetailStoreGoods.java @@ -0,0 +1,244 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; // 导入MyBatis-Plus 表字段注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 +import com.fasterxml.jackson.annotation.JsonFormat; // 导入Jackson JSON格式化注解类 +import org.springframework.format.annotation.DateTimeFormat; // 导入Spring日期时间格式化注解类 + +import java.io.Serializable; // 导入序列化接口 +import java.util.Date; // 导入日期类 + +@TableName("t_detail_store_goods") // 指定数据库表名为t_detail_store_goods +public class DetailStoreGoods implements Serializable { + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_EXPIRY = "1"; // 过期状态 + public static final String STATE_DOWN = "2"; // 下架状态 + public static final String STATE1_DEL = "1"; // 删除状态 + public static final String STATE1_NORMAL = "0"; // 正常状态 + public static final String STATE1_UNTREATED = "2"; // 待处理状态 + public static final String TYPE_IN = "0"; // 入库类型 + public static final String TYPE_OUT = "1"; // 出库类型 + + private String cn; // 系统编号 + + @TableField("goods_id") // 指定数据库字段名为goods_id + private Long goodsId; // 商品ID + + @TableField("goods_num") // 指定数据库字段名为goods_num + private Long goodsNum; // 商品数量 + + @TableField("goods_name") // 指定数据库字段名为goods_name + private String goodsName; // 商品名称 + + @TableField("goods_price") // 指定数据库字段名为goods_price + private Double goodsPrice; // 商品价格 + + private String type; // 类型(入库或出库) + + private Long createid; // 创建人ID + + private String createby; // 创建人名称 + + @JsonFormat(pattern = "yyyy-MM-dd") // 指定JSON日期格式 + @DateTimeFormat(pattern = "yyyy-MM-dd") // 指定日期时间格式 + @TableField("create_time") // 指定数据库字段名为create_time + private Date createTime; // 创建时间 + + private String state; // 状态(正常、过期、下架) + + private String info; // 信息 + + @JsonFormat(pattern = "yyyy-MM-dd") // 指定JSON日期格式 + @DateTimeFormat(pattern = "yyyy-MM-dd") // 指定日期时间格式 + @TableField("expiry_time") // 指定数据库字段名为expiry_time + private Date expiryTime; // 过期时间 + + @JsonFormat(pattern = "yyyy-MM-dd") // 指定JSON日期格式 + @DateTimeFormat(pattern = "yyyy-MM-dd") // 指定日期时间格式 + @TableField("birth_time") // 指定数据库字段名为birth_time + private Date birthTime; // 生产时间 + + @TableField("store_id") // 指定数据库字段名为store_id + private Long storeId; // 仓库ID + + private String state1; // 状态1(删除、正常、待处理) + + @TableField("supplier_id") // 指定数据库字段名为supplier_id + private Long supplierId; // 供应商ID + + @TableField("supplier_name") // 指定数据库字段名为supplier_name + private String supplierName; // 供应商名称 + + @TableField("untreated_num") // 指定数据库字段名为untreated_num + private Long untreatedNum; // 待处理数量 + + public DetailStoreGoods() { + // 默认构造函数 + } + + public DetailStoreGoods(String cn, Long goodsId, Long goodsNum, String goodsName, Double goodsPrice, String type, Long createid, String createby, Date createTime, String state, String info, Date expiryTime, Date birthTime, Long storeId, String state1, Long supplierId, String supplierName, Long untreatedNum) { + // 带参数的构造函数 + this.cn = cn; + this.goodsId = goodsId; + this.goodsNum = goodsNum; + this.goodsName = goodsName; + this.goodsPrice = goodsPrice; + this.type = type; + this.createid = createid; + this.createby = createby; + this.createTime = createTime; + this.state = state; + this.info = info; + this.expiryTime = expiryTime; + this.birthTime = birthTime; + this.storeId = storeId; + this.state1 = state1; + this.supplierId = supplierId; + this.supplierName = supplierName; + this.untreatedNum = untreatedNum; + } + + public String getCn() { + return cn; // 获取系统编号 + } + + public void setCn(String cn) { + this.cn = cn; // 设置系统编号 + } + + public Long getGoodsId() { + return goodsId; // 获取商品ID + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; // 设置商品ID + } + + public Long getGoodsNum() { + return goodsNum; // 获取商品数量 + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; // 设置商品数量 + } + + public String getGoodsName() { + return goodsName; // 获取商品名称 + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; // 设置商品名称 + } + + public Double getGoodsPrice() { + return goodsPrice; // 获取商品价格 + } + + public void setGoodsPrice(Double goodsPrice) { + this.goodsPrice = goodsPrice; // 设置商品价格 + } + + public String getType() { + return type; // 获取类型(入库或出库) + } + + public void setType(String type) { + this.type = type; // 设置类型(入库或出库) + } + + public Long getCreateid() { + return createid; // 获取创建人ID + } + + public void setCreateid(Long createid) { + this.createid = createid; // 设置创建人ID + } + + public String getCreateby() { + return createby; // 获取创建人名称 + } + + public void setCreateby(String createby) { + this.createby = createby; // 设置创建人名称 + } + + public Date getCreateTime() { + return createTime; // 获取创建时间 + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; // 设置创建时间 + } + + public String getState() { + return state; // 获取状态(正常、过期、下架) + } + + public void setState(String state) { + this.state = state; // 设置状态(正常、过期、下架) + } + + public String getInfo() { + return info; // 获取信息 + } + + public void setInfo(String info) { + this.info = info; // 设置信息 + } + + public Date getExpiryTime() { + return expiryTime; // 获取过期时间 + } + + public void setExpiryTime(Date expiryTime) { + this.expiryTime = expiryTime; // 设置过期时间 + } + + public Date getBirthTime() { + return birthTime; // 获取生产时间 + } + + public void setBirthTime(Date birthTime) { + this.birthTime = birthTime; // 设置生产时间 + } + + public Long getStoreId() { + return storeId; // 获取仓库ID + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; // 设置仓库ID + } + + public String getState1() { + return state1; // 获取状态1(删除、正常、待处理) + } + + public void setState1(String state1) { + this.state1 = state1; // 设置状态1(删除、正常、待处理) + } + + public Long getSupplierId() { + return supplierId; // 获取供应商ID + } + + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; // 设置供应商ID + } + + public String getSupplierName() { + return supplierName; // 获取供应商名称 + } + + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; // 设置供应商名称 + } + + public Long getUntreatedNum() { + return untreatedNum; // 获取待处理数量 + } + + public void setUntreatedNum(Long untreatedNum) { + this.untreatedNum = untreatedNum; // 设置待处理数量 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Employee.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Employee.java new file mode 100644 index 0000000..bdb2349 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Employee.java @@ -0,0 +1,325 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; // 导入MyBatis-Plus ID类型注解类 +import com.baomidou.mybatisplus.annotation.TableField; // 导入MyBatis-Plus 表字段注解类 +import com.baomidou.mybatisplus.annotation.TableId; // 导入MyBatis-Plus 表ID注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 +import com.fasterxml.jackson.annotation.JsonFormat; // 导入Jackson JSON格式化注解类 +import com.fasterxml.jackson.annotation.JsonIgnore; // 导入Jackson忽略字段注解类 + +import java.io.Serializable; // 导入序列化接口 +import java.util.Date; // 导入日期类 +import java.util.HashSet; // 导入HashSet类 +import java.util.List; // 导入列表类 +import java.util.Set; // 导入集合类 + +/** + * 员工实体类 + */ +@TableName("employee") // 指定数据库表名为employee +public class Employee implements Serializable { + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_DEL = "1"; // 删除状态 + public static final String DEFAULT_PWD = "123456"; // 默认密码 + public static final String SEX_MEN = "1"; // 男性性别 + public static final String SEX_WOMEN = "0"; // 女性性别 + public static final String DEFAULT_HEAD_IMG = "/files/1694434162457_07.jpg"; // 默认头像路径 + + @TableId(type = IdType.AUTO) // 指定主键自增 + private Long id; // 员工ID + + private String sex; // 性别 + + @TableField("isAdmin") // 指定数据库字段名为isAdmin + private Boolean isAdmin; // 是否管理员 + + @TableField("phone") // 指定数据库字段名为phone + private String username; // 用户名(手机号) + + @TableField("nick_name") // 指定数据库字段名为nick_name + private String nickName; // 昵称 + + private String password; // 密码 + + @TableField("head_img") // 指定数据库字段名为head_img + private String headImg = DEFAULT_HEAD_IMG; // 头像路径,默认值为默认头像路径 + + private String state = STATE_NORMAL; // 状态,默认值为正常状态 + + private String info; // 信息 + + private String createby; // 创建人 + + @TableField("create_time") // 指定数据库字段名为create_time + @JsonFormat(pattern = "yyyy-MM-dd") // 指定JSON日期格式 + private Date createTime; // 创建时间 + + @JsonFormat(pattern = "yyyy-MM-dd") // 指定JSON日期格式 + @TableField("leave_time") // 指定数据库字段名为leave_time + private Date leaveTime; // 离职时间 + + private String address; // 地址 + + private String email; // 邮箱 + + private Integer age; // 年龄 + + @TableField("deptId") // 指定数据库字段名为deptId + private Long deptId; // 部门ID + + @TableField(value = "dept_name", exist = false) // 指定数据库字段名为dept_name,不映射到数据库 + private String deptName; // 部门名称 + + // 角色集合 + @TableField(exist = false) // 不映射到数据库 + @JsonIgnore // 忽略序列化 + private Set roles; + + // 权限集合 + @TableField(exist = false) // 不映射到数据库 + @JsonIgnore // 忽略序列化 + private List menus; + + @TableField(exist = false) // 不映射到数据库 + @JsonIgnore // 忽略序列化 + private Set flags; + + @TableField("id_card") // 指定数据库字段名为id_card + private String idCard; // 身份证号 + + public Employee() { + // 默认构造函数 + } + + public Employee(Long id, String sex, Boolean isAdmin, String username, String nickName, String password, String headImg, String state, String info, String createby, Date createTime, Date leaveTime, String address, String email, Integer age, Long deptId, String deptName, Set roles, List menus, Set flags, String idCard) { + // 带参数的构造函数 + this.id = id; + this.sex = sex; + this.isAdmin = isAdmin; + this.username = username; + this.nickName = nickName; + this.password = password; + this.headImg = headImg; + this.state = state; + this.info = info; + this.createby = createby; + this.createTime = createTime; + this.leaveTime = leaveTime; + this.address = address; + this.email = email; + this.age = age; + this.deptId = deptId; + this.deptName = deptName; + this.roles = roles; + this.menus = menus; + this.flags = flags; + this.idCard = idCard; + } + + public Long getId() { + return id; // 获取员工ID + } + + public void setId(Long id) { + this.id = id; // 设置员工ID + } + + public String getSex() { + return sex; // 获取性别 + } + + public void setSex(String sex) { + this.sex = sex; // 设置性别 + } + + public Boolean getIsAdmin() { + return isAdmin; // 获取是否管理员 + } + + public void setIsAdmin(Boolean admin) { + isAdmin = admin; // 设置是否管理员 + } + + public String getUsername() { + return username; // 获取用户名(手机号) + } + + public void setUsername(String username) { + this.username = username; // 设置用户名(手机号) + } + + public String getNickName() { + return nickName; // 获取昵称 + } + + public void setNickName(String nickName) { + this.nickName = nickName; // 设置昵称 + } + + public String getPassword() { + return password; // 获取密码 + } + + public void setPassword(String password) { + this.password = password; // 设置密码 + } + + public String getHeadImg() { + return headImg; // 获取头像路径 + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; // 设置头像路径 + } + + public String getState() { + return state; // 获取状态 + } + + public void setState(String state) { + this.state = state; // 设置状态 + } + + public String getInfo() { + return info; // 获取信息 + } + + public void setInfo(String info) { + this.info = info; // 设置信息 + } + + public String getCreateby() { + return createby; // 获取创建人 + } + + public void setCreateby(String createby) { + this.createby = createby; // 设置创建人 + } + + public Date getCreateTime() { + return createTime; // 获取创建时间 + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; // 设置创建时间 + } + + public Date getLeaveTime() { + return leaveTime; // 获取离职时间 + } + + public void setLeaveTime(Date leaveTime) { + this.leaveTime = leaveTime; // 设置离职时间 + } + + public String getAddress() { + return address; // 获取地址 + } + + public void setAddress(String address) { + this.address = address; // 设置地址 + } + + public String getEmail() { + return email; // 获取邮箱 + } + + public void setEmail(String email) { + this.email = email; // 设置邮箱 + } + + public Integer getAge() { + return age; // 获取年龄 + } + + public void setAge(Integer age) { + this.age = age; // 设置年龄 + } + + public Long getDeptId() { + return deptId; // 获取部门ID + } + + public void setDeptId(Long deptId) { + this.deptId = deptId; // 设置部门ID + } + + public String getDeptName() { + return deptName; // 获取部门名称 + } + + public void setDeptName(String deptName) { + this.deptName = deptName; // 设置部门名称 + } + + public Set getRoles() { + return roles; // 获取角色集合 + } + + public void setRoles(Set roles) { + this.roles = roles; // 设置角色集合 + } + + public List getMenus() { + return menus; // 获取权限集合 + } + + public Set getFlags() { + return flags; // 获取权限标识符集合 + } + + public void setFlags(Set flags) { + this.flags = flags; // 设置权限标识符集合 + } + + public String getIdCard() { + return idCard; // 获取身份证号 + } + + public void setIdCard(String idCard) { + this.idCard = idCard; // 设置身份证号 + } + + public void setMenus(List menus) { + this.menus = menus; // 设置权限集合 + if (menus != null) { + this.flags = getFlags(this.menus); // 更新权限标识符集合 + } + } + + /** + * 获取权限标识符集合 + * + * @param menus 权限菜单列表 + * @return 权限标识符集合 + */ + private Set getFlags(List menus) { + Set flags = new HashSet<>(); // 创建权限标识符集合 + for (Menu menu : menus) { + // 目录遍历 + if (menu.getFlag() != null) { + flags.add(menu.getFlag()); // 添加权限标识符 + // 如果没有子集 + if (menu.getChildren() == null) { + continue; + } + for (Menu child : menu.getChildren()) { + // 菜单遍历 + if (child.getFlag() != null) { + flags.add(child.getFlag()); // 添加权限标识符 + } + // 如果没有子集 + if (child.getChildren() == null) { + continue; + } + for (Menu childChild : child.getChildren()) { + if (childChild.getFlag() != null) { + flags.add(childChild.getFlag()); // 添加权限标识符 + } + } + } + } + } + return flags; // 返回权限标识符集合 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/ExchangePointProducts.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/ExchangePointProducts.java new file mode 100644 index 0000000..cfbb75c --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/ExchangePointProducts.java @@ -0,0 +1,132 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; // 导入MyBatis-Plus 表字段注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 +import com.fasterxml.jackson.annotation.JsonFormat; // 导入Jackson JSON格式化注解类 + +import java.io.Serializable; // 导入序列化接口 +import java.util.Date; // 导入日期类 + +@TableName("exchange_point_products_records") // 指定数据库表名为exchange_point_products_records +public class ExchangePointProducts implements Serializable { + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_DEL = "1"; // 删除状态 + + private String cn; // 系统编号 + + @TableField("goods_id") // 指定数据库字段名为goods_id + private Long goodsId; // 商品ID + + @TableField("member_id") // 指定数据库字段名为member_id + private Long memberId; // 会员ID + + private Long integral; // 积分 + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 指定JSON日期格式 + @TableField("update_time") // 指定数据库字段名为update_time + private Date updateTime; // 更新时间 + + private String updateby; // 更新人 + + @TableField("update_id") // 指定数据库字段名为update_id + private Long updateId; // 更新人ID + + private String state; // 状态 + + @TableField(exist = false) // 不映射到数据库 + private String memberPhone; // 会员账号 + + @TableField(exist = false) // 不映射到数据库 + private String goodsName; // 商品名称 + + @TableField(exist = false) // 不映射到数据库 + private String goodsCoverUrl; // 商品封面URL + + public String getCn() { + return cn; // 获取系统编号 + } + + public void setCn(String cn) { + this.cn = cn; // 设置系统编号 + } + + public Long getGoodsId() { + return goodsId; // 获取商品ID + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; // 设置商品ID + } + + public Long getMemberId() { + return memberId; // 获取会员ID + } + + public void setMemberId(Long memberId) { + this.memberId = memberId; // 设置会员ID + } + + public Long getIntegral() { + return integral; // 获取积分 + } + + public void setIntegral(Long integral) { + this.integral = integral; // 设置积分 + } + + public Date getUpdateTime() { + return updateTime; // 获取更新时间 + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; // 设置更新时间 + } + + public String getUpdateby() { + return updateby; // 获取更新人 + } + + public void setUpdateby(String updateby) { + this.updateby = updateby; // 设置更新人 + } + + public Long getUpdateId() { + return updateId; // 获取更新人ID + } + + public void setUpdateId(Long updateId) { + this.updateId = updateId; // 设置更新人ID + } + + public String getState() { + return state; // 获取状态 + } + + public void setState(String state) { + this.state = state; // 设置状态 + } + + public String getMemberPhone() { + return memberPhone; // 获取会员账号 + } + + public void setMemberPhone(String memberPhone) { + this.memberPhone = memberPhone; // 设置会员账号 + } + + public String getGoodsName() { + return goodsName; // 获取商品名称 + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; // 设置商品名称 + } + + public String getGoodsCoverUrl() { + return goodsCoverUrl; // 获取商品封面URL + } + + public void setGoodsCoverUrl(String goodsCoverUrl) { + this.goodsCoverUrl = goodsCoverUrl; // 设置商品封面URL + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Goods.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Goods.java new file mode 100644 index 0000000..9ffb20b --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Goods.java @@ -0,0 +1,238 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; // 导入MyBatis-Plus ID类型注解类 +import com.baomidou.mybatisplus.annotation.TableField; // 导入MyBatis-Plus 表字段注解类 +import com.baomidou.mybatisplus.annotation.TableId; // 导入MyBatis-Plus 表ID注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 +import com.fasterxml.jackson.annotation.JsonFormat; // 导入Jackson JSON格式化注解类 + +import java.io.Serializable; // 导入序列化接口 +import java.util.Date; // 导入日期类 + +/** + * 商品 + */ +@TableName("goods") // 指定数据库表名为goods +public class Goods implements Serializable { + public static final String STATE_UP = "0"; // 上架状态 + public static final String STATE_DOWN = "1"; // 下架状态 + + @TableId(type = IdType.AUTO) // 指定主键自增 + private Long id; // 商品ID + + private String name; // 商品名 + + private String info; // 商品信息 + + @TableField("category_name") // 指定数据库字段名为category_name + private String categoryName; // 商品分类名 + + @TableField("category_id") // 指定数据库字段名为category_id + private Long categoryId; // 商品分类ID + + private String createby; // 创建者 + + @JsonFormat(pattern = "yyyy-MM-dd") // 指定JSON日期格式 + @TableField("create_time") // 指定数据库字段名为create_time + private Date createTime; // 创建时间 + + private String updateby; // 更新者 + + @JsonFormat(pattern = "yyyy-MM-dd") // 指定JSON日期格式 + @TableField("update_time") // 指定数据库字段名为update_time + private Date updateTime; // 更新时间 + + @TableField("sell_price") // 指定数据库字段名为sell_price + private Double sellPrice; // 销售价格 + + @TableField("purchash_price") // 指定数据库字段名为purchash_price + private Double purchashPrice; // 进货价格 + + @TableField("residue_num") // 指定数据库字段名为residue_num + private Long residueNum; // 剩余数量 + + @TableField(exist = false) // 不映射到数据库 + private Long residueStoreNum; // 剩余库存数量 + + @TableField("cover_url") // 指定数据库字段名为cover_url + private String coverUrl; // 商品封面URL + + private String state = STATE_UP; // 状态,默认为上架状态 + + @TableField("sales_volume") // 指定数据库字段名为sales_volume + private Long salesVolume; // 销售量 + + private Long inventory; // 需库存量 + + private Long shelves; // 货架商品数量 + + public Goods() { + // 默认构造函数 + } + + public Goods(Long id, String name, String info, String categoryName, Long categoryId, String createby, Date createTime, String updateby, Date updateTime, Double sellPrice, Double purchashPrice, Long residueNum, Long residueStoreNum, String coverUrl, String state, Long salesVolume, Long inventory, Long shelves) { + // 带参数的构造函数 + this.id = id; + this.name = name; + this.info = info; + this.categoryName = categoryName; + this.categoryId = categoryId; + this.createby = createby; + this.createTime = createTime; + this.updateby = updateby; + this.updateTime = updateTime; + this.sellPrice = sellPrice; + this.purchashPrice = purchashPrice; + this.residueNum = residueNum; + this.residueStoreNum = residueStoreNum; + this.coverUrl = coverUrl; + this.state = state; + this.salesVolume = salesVolume; + this.inventory = inventory; + this.shelves = shelves; + } + + public Long getId() { + return id; // 获取商品ID + } + + public void setId(Long id) { + this.id = id; // 设置商品ID + } + + public String getName() { + return name; // 获取商品名 + } + + public void setName(String name) { + this.name = name; // 设置商品名 + } + + public String getInfo() { + return info; // 获取商品信息 + } + + public void setInfo(String info) { + this.info = info; // 设置商品信息 + } + + public String getCategoryName() { + return categoryName; // 获取商品分类名 + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; // 设置商品分类名 + } + + public Long getCategoryId() { + return categoryId; // 获取商品分类ID + } + + public void setCategoryId(Long categoryId) { + this.categoryId = categoryId; // 设置商品分类ID + } + + public String getCreateby() { + return createby; // 获取创建者 + } + + public void setCreateby(String createby) { + this.createby = createby; // 设置创建者 + } + + public Date getCreateTime() { + return createTime; // 获取创建时间 + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; // 设置创建时间 + } + + public String getUpdateby() { + return updateby; // 获取更新者 + } + + public void setUpdateby(String updateby) { + this.updateby = updateby; // 设置更新者 + } + + public Date getUpdateTime() { + return updateTime; // 获取更新时间 + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; // 设置更新时间 + } + + public Double getSellPrice() { + return sellPrice; // 获取销售价格 + } + + public void setSellPrice(Double sellPrice) { + this.sellPrice = sellPrice; // 设置销售价格 + } + + public Double getPurchashPrice() { + return purchashPrice; // 获取进货价格 + } + + public void setPurchashPrice(Double purchashPrice) { + this.purchashPrice = purchashPrice; // 设置进货价格 + } + + public Long getResidueNum() { + return residueNum; // 获取剩余数量 + } + + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; // 设置剩余数量 + } + + public Long getResidueStoreNum() { + return residueStoreNum; // 获取剩余库存数量 + } + + public void setResidueStoreNum(Long residueStoreNum) { + this.residueStoreNum = residueStoreNum; // 设置剩余库存数量 + } + + public String getCoverUrl() { + return coverUrl; // 获取商品封面URL + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; // 设置商品封面URL + } + + public String getState() { + return state; // 获取状态 + } + + public void setState(String state) { + this.state = state; // 设置状态 + } + + public Long getSalesVolume() { + return salesVolume; // 获取销售量 + } + + public void setSalesVolume(Long salesVolume) { + this.salesVolume = salesVolume; // 设置销售量 + } + + public Long getInventory() { + return inventory; // 获取需库存量 + } + + public void setInventory(Long inventory) { + this.inventory = inventory; // 设置需库存量 + } + + public Long getShelves() { + return shelves; // 获取货架商品数量 + } + + public void setShelves(Long shelves) { + this.shelves = shelves; // 设置货架商品数量 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsCategory.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsCategory.java new file mode 100644 index 0000000..934e9ac --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsCategory.java @@ -0,0 +1,69 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; // 导入MyBatis-Plus ID类型注解类 +import com.baomidou.mybatisplus.annotation.TableId; // 导入MyBatis-Plus 表ID注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 + +import java.io.Serializable; // 导入序列化接口 + +/** + * 商品分类 + */ +@TableName("goods_category") // 指定数据库表名为goods_category +public class GoodsCategory implements Serializable { + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_BAN = "-1"; // 禁用状态 + + @TableId(type = IdType.AUTO) // 指定主键自增 + private Long id; // 商品分类ID + + private String name; // 商品分类名称 + + private String info; // 商品分类信息 + + private String state; // 商品分类状态 + + public GoodsCategory() { + // 默认构造函数 + } + + public GoodsCategory(Long id, String name, String info, String state) { + // 带参数的构造函数 + this.id = id; + this.name = name; + this.info = info; + this.state = state; + } + + public Long getId() { + return id; // 获取商品分类ID + } + + public void setId(Long id) { + this.id = id; // 设置商品分类ID + } + + public String getName() { + return name; // 获取商品分类名称 + } + + public void setName(String name) { + this.name = name; // 设置商品分类名称 + } + + public String getInfo() { + return info; // 获取商品分类信息 + } + + public void setInfo(String info) { + this.info = info; // 设置商品分类信息 + } + + public String getState() { + return state; // 获取商品分类状态 + } + + public void setState(String state) { + this.state = state; // 设置商品分类状态 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsStore.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsStore.java new file mode 100644 index 0000000..64ac715 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/GoodsStore.java @@ -0,0 +1,77 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; // 导入MyBatis-Plus 表字段注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 + +import java.io.Serializable; // 导入序列化接口 + +@TableName("t_goods_store") // 指定数据库表名为t_goods_store +public class GoodsStore implements Serializable { + @TableField("goods_id") // 指定数据库字段名为goods_id + private Long goodsId; // 商品ID + + @TableField("store_id") // 指定数据库字段名为store_id + private Long storeId; // 仓库ID + + @TableField("in_num") // 指定数据库字段名为in_num + private Long inNum; // 入库数量 + + @TableField("residue_num") // 指定数据库字段名为residue_num + private Long residueNum; // 剩余数量 + + @TableField("store_name") // 指定数据库字段名为store_name + private String storeName; // 仓库名称 + + public GoodsStore() { + // 默认构造函数 + } + + public GoodsStore(Long goodsId, Long storeId, Long inNum, Long residueNum, String storeName) { + // 带参数的构造函数 + this.goodsId = goodsId; + this.storeId = storeId; + this.inNum = inNum; + this.residueNum = residueNum; + this.storeName = storeName; + } + + public Long getGoodsId() { + return goodsId; // 获取商品ID + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; // 设置商品ID + } + + public Long getStoreId() { + return storeId; // 获取仓库ID + } + + public void setStoreId(Long storeId) { + this.storeId = storeId; // 设置仓库ID + } + + public Long getInNum() { + return inNum; // 获取入库数量 + } + + public void setInNum(Long inNum) { + this.inNum = inNum; // 设置入库数量 + } + + public Long getResidueNum() { + return residueNum; // 获取剩余数量 + } + + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; // 设置剩余数量 + } + + public String getStoreName() { + return storeName; // 获取仓库名称 + } + + public void setStoreName(String storeName) { + this.storeName = storeName; // 设置仓库名称 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Member.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Member.java new file mode 100644 index 0000000..cb04edc --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Member.java @@ -0,0 +1,113 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; // 导入MyBatis-Plus ID类型注解类 +import com.baomidou.mybatisplus.annotation.TableId; // 导入MyBatis-Plus 表ID注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 +import com.fasterxml.jackson.annotation.JsonIgnore; // 导入Jackson忽略字段注解类 + +import java.io.Serializable; // 导入序列化接口 + +@TableName("t_member") // 指定数据库表名为t_member +public class Member implements Serializable { + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_BAN = "1"; // 禁用状态 + public static final String DEFAULT_PWD = "123456"; // 默认密码 + + @TableId(type = IdType.AUTO) // 指定主键自增 + private Long id; // 会员ID + + private String name; // 会员姓名 + + private String phone; // 会员手机号 + + @JsonIgnore // 忽略序列化 + private String password; // 会员密码 + + private String email; // 会员邮箱 + + private Long integral; // 会员积分 + + private String state; // 会员状态 + + private String info; // 会员信息 + + public Member() { + // 默认构造函数 + } + + public Member(Long id, String name, String phone, String password, String email, Long integral, String state, String info) { + // 带参数的构造函数 + this.id = id; + this.name = name; + this.phone = phone; + this.password = password; + this.email = email; + this.integral = integral; + this.state = state; + this.info = info; + } + + public Long getId() { + return id; // 获取会员ID + } + + public void setId(Long id) { + this.id = id; // 设置会员ID + } + + public String getName() { + return name; // 获取会员姓名 + } + + public void setName(String name) { + this.name = name; // 设置会员姓名 + } + + public String getPhone() { + return phone; // 获取会员手机号 + } + + public void setPhone(String phone) { + this.phone = phone; // 设置会员手机号 + } + + public String getPassword() { + return password; // 获取会员密码 + } + + public void setPassword(String password) { + this.password = password; // 设置会员密码 + } + + public String getEmail() { + return email; // 获取会员邮箱 + } + + public void setEmail(String email) { + this.email = email; // 设置会员邮箱 + } + + public Long getIntegral() { + return integral; // 获取会员积分 + } + + public void setIntegral(Long integral) { + this.integral = integral; // 设置会员积分 + } + + public String getState() { + return state; // 获取会员状态 + } + + public void setState(String state) { + this.state = state; // 设置会员状态 + } + + public String getInfo() { + return info; // 获取会员信息 + } + + public void setInfo(String info) { + this.info = info; // 设置会员信息 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Menu.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Menu.java new file mode 100644 index 0000000..821a7db --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Menu.java @@ -0,0 +1,167 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; // 导入MyBatis-Plus ID类型注解类 +import com.baomidou.mybatisplus.annotation.TableField; // 导入MyBatis-Plus 表字段注解类 +import com.baomidou.mybatisplus.annotation.TableId; // 导入MyBatis-Plus 表ID注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 + +import java.io.Serializable; // 导入序列化接口 +import java.util.List; // 导入列表类 +import java.util.Objects; // 导入Objects类 + +@TableName("t_menu") // 指定数据库表名为t_menu +public class Menu implements Serializable { + public static final String TYPE_CATALOGUE = "0"; // 目录类型 + public static final String TYPE_MENU = "1"; // 菜单类型 + public static final String TYPE_BUTTON = "2"; // 按钮类型 + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_DEL = "-1"; // 禁用状态 + + @TableId(type = IdType.AUTO) // 指定主键自增 + private Long id; // 菜单ID + + private String label; // 菜单标签 + + private String purl; // 菜单URL + + private String type; // 菜单类型 + + @TableField("parent_id") // 指定数据库字段名为parent_id + private Long parentId; // 父菜单ID + + @TableField("parent_label") // 指定数据库字段名为parent_label + private String parentLabel; // 父菜单标签 + + private String info; // 菜单信息 + + private String state; // 菜单状态 + + private String flag; // 权限标识符 + + private String icon; // 菜单图标 + + private String component; // 组件路径 + + @TableField(exist = false) // 不映射到数据库 + private List children; // 子菜单列表 + + @Override + public boolean equals(Object o) { + if (this == o) return true; // 比较对象是否相同 + if (o == null || getClass() != o.getClass()) return false; // 比较对象是否为null或类是否相同 + Menu menu = (Menu) o; // 强制转换为Menu对象 + return Objects.equals(id, menu.id) && // 比较菜单ID + Objects.equals(label, menu.label) && // 比较菜单标签 + Objects.equals(purl, menu.purl) && // 比较菜单URL + Objects.equals(type, menu.type) && // 比较菜单类型 + Objects.equals(parentId, menu.parentId) && // 比较父菜单ID + Objects.equals(parentLabel, menu.parentLabel) && // 比较父菜单标签 + Objects.equals(info, menu.info) && // 比较菜单信息 + Objects.equals(state, menu.state) && // 比较菜单状态 + Objects.equals(flag, menu.flag) && // 比较权限标识符 + Objects.equals(icon, menu.icon) && // 比较菜单图标 + Objects.equals(component, menu.component) && // 比较组件路径 + Objects.equals(children, menu.children); // 比较子菜单列表 + } + + @Override + public int hashCode() { + return Objects.hash(id, label, purl, type, parentId, parentLabel, info, state, flag, component, children); // 生成哈希码 + } + + public Long getId() { + return id; // 获取菜单ID + } + + public void setId(Long id) { + this.id = id; // 设置菜单ID + } + + public String getLabel() { + return label; // 获取菜单标签 + } + + public void setLabel(String label) { + this.label = label; // 设置菜单标签 + } + + public String getPurl() { + return purl; // 获取菜单URL + } + + public void setPurl(String purl) { + this.purl = purl; // 设置菜单URL + } + + public String getType() { + return type; // 获取菜单类型 + } + + public void setType(String type) { + this.type = type; // 设置菜单类型 + } + + public Long getParentId() { + return parentId; // 获取父菜单ID + } + + public void setParentId(Long parentId) { + this.parentId = parentId; // 设置父菜单ID + } + + public String getParentLabel() { + return parentLabel; // 获取父菜单标签 + } + + public void setParentLabel(String parentLabel) { + this.parentLabel = parentLabel; // 设置父菜单标签 + } + + public String getInfo() { + return info; // 获取菜单信息 + } + + public void setInfo(String info) { + this.info = info; // 设置菜单信息 + } + + public String getState() { + return state; // 获取菜单状态 + } + + public void setState(String state) { + this.state = state; // 设置菜单状态 + } + + public String getFlag() { + return flag; // 获取权限标识符 + } + + public void setFlag(String flag) { + this.flag = flag; // 设置权限标识符 + } + + public String getIcon() { + return icon; // 获取菜单图标 + } + + public void setIcon(String icon) { + this.icon = icon; // 设置菜单图标 + } + + public String getComponent() { + return component; // 获取组件路径 + } + + public void setComponent(String component) { + this.component = component; // 设置组件路径 + } + + public List getChildren() { + return children; // 获取子菜单列表 + } + + public void setChildren(List children) { + this.children = children; // 设置子菜单列表 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeIn.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeIn.java new file mode 100644 index 0000000..bb008f5 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeIn.java @@ -0,0 +1,68 @@ +package com.shanzhu.market.entity.domain; + +import java.io.Serializable; // 导入序列化接口 + +public class NoticeIn implements Serializable { + private Long id; // 通知ID + + private String name; // 商品名 + + private Double purchashPrice; // 进货价格 + + private Long goodsNum; // 商品数量 + + private String coverUrl; // 商品封面URL + + public NoticeIn() { + // 默认构造函数 + } + + public NoticeIn(Long id, String name, Double purchashPrice, Long goodsNum, String coverUrl) { + // 带参数的构造函数 + this.id = id; + this.name = name; + this.purchashPrice = purchashPrice; + this.goodsNum = goodsNum; + this.coverUrl = coverUrl; + } + + public Long getId() { + return id; // 获取通知ID + } + + public void setId(Long id) { + this.id = id; // 设置通知ID + } + + public String getName() { + return name; // 获取商品名 + } + + public void setName(String name) { + this.name = name; // 设置商品名 + } + + public Double getPurchashPrice() { + return purchashPrice; // 获取进货价格 + } + + public void setPurchashPrice(Double purchashPrice) { + this.purchashPrice = purchashPrice; // 设置进货价格 + } + + public Long getGoodsNum() { + return goodsNum; // 获取商品数量 + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; // 设置商品数量 + } + + public String getCoverUrl() { + return coverUrl; // 获取商品封面URL + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; // 设置商品封面URL + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeOut.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeOut.java new file mode 100644 index 0000000..5326230 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/NoticeOut.java @@ -0,0 +1,68 @@ +package com.shanzhu.market.entity.domain; + +import java.io.Serializable; // 导入序列化接口 + +public class NoticeOut implements Serializable { + private Long id; // 通知ID + + private String name; // 商品名 + + private Long goodsNum; // 商品数量 + + private String coverUrl; // 商品封面URL + + private String state; // 状态 + + public NoticeOut() { + // 默认构造函数 + } + + public NoticeOut(Long id, String name, Long goodsNum, String coverUrl, String state) { + // 带参数的构造函数 + this.id = id; + this.name = name; + this.goodsNum = goodsNum; + this.coverUrl = coverUrl; + this.state = state; + } + + public Long getId() { + return id; // 获取通知ID + } + + public void setId(Long id) { + this.id = id; // 设置通知ID + } + + public String getName() { + return name; // 获取商品名 + } + + public void setName(String name) { + this.name = name; // 设置商品名 + } + + public Long getGoodsNum() { + return goodsNum; // 获取商品数量 + } + + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; // 设置商品数量 + } + + public String getCoverUrl() { + return coverUrl; // 获取商品封面URL + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; // 设置商品封面URL + } + + public String getState() { + return state; // 获取状态 + } + + public void setState(String state) { + this.state = state; // 设置状态 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/PointProducts.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/PointProducts.java new file mode 100644 index 0000000..b5ab8d7 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/PointProducts.java @@ -0,0 +1,114 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; // 导入MyBatis-Plus 表字段注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 + +import java.io.Serializable; // 导入序列化接口 +import java.util.Date; // 导入日期类 + +@TableName("point_products") // 指定数据库表名为point_products +public class PointProducts implements Serializable { + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_DEL = "1"; // 删除状态 + + @TableField("goods_id") // 指定数据库字段名为goods_id + private Long goodsId; // 商品ID + + @TableField("goods_name") // 指定数据库字段名为goods_name + private String goodsName; // 商品名称 + + private Long integral; // 积分 + + private String updateby; // 更新人 + + @TableField("update_time") // 指定数据库字段名为update_time + private Date updateTime; // 更新时间 + + @TableField("cover_url") // 指定数据库字段名为cover_url + private String coverUrl; // 商品封面URL + + @TableField("update_id") // 指定数据库字段名为update_id + private Long updateId; // 更新人ID + + private String state; // 状态 + + public PointProducts() { + // 默认构造函数 + } + + public PointProducts(Long goodsId, String goodsName, Long integral, String updateby, Date updateTime, String coverUrl, Long updateId, String state) { + // 带参数的构造函数 + this.goodsId = goodsId; + this.goodsName = goodsName; + this.integral = integral; + this.updateby = updateby; + this.updateTime = updateTime; + this.coverUrl = coverUrl; + this.updateId = updateId; + this.state = state; + } + + public Long getGoodsId() { + return goodsId; // 获取商品ID + } + + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; // 设置商品ID + } + + public String getGoodsName() { + return goodsName; // 获取商品名称 + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; // 设置商品名称 + } + + public Long getIntegral() { + return integral; // 获取积分 + } + + public void setIntegral(Long integral) { + this.integral = integral; // 设置积分 + } + + public String getUpdateby() { + return updateby; // 获取更新人 + } + + public void setUpdateby(String updateby) { + this.updateby = updateby; // 设置更新人 + } + + public Date getUpdateTime() { + return updateTime; // 获取更新时间 + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; // 设置更新时间 + } + + public String getCoverUrl() { + return coverUrl; // 获取商品封面URL + } + + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; // 设置商品封面URL + } + + public Long getUpdateId() { + return updateId; // 获取更新人ID + } + + public void setUpdateId(Long updateId) { + this.updateId = updateId; // 设置更新人ID + } + + public String getState() { + return state; // 获取状态 + } + + public void setState(String state) { + this.state = state; // 设置状态 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Role.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Role.java new file mode 100644 index 0000000..405a9a0 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Role.java @@ -0,0 +1,74 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; // 导入MyBatis-Plus ID类型注解类 +import com.baomidou.mybatisplus.annotation.TableId; // 导入MyBatis-Plus 表ID注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 + +import java.io.Serializable; // 导入序列化接口 + +/** + * 权限实体类 + */ +@TableName("t_role") // 指定数据库表名为t_role +public class Role implements Serializable { + public static final Long SYS_ID = 1L; // 系统角色ID + + // 正常状态 + public static final String STATE_NORMAL = "0"; + + // 禁用状态 + public static final String STATE_BAN = "-1"; + + @TableId(type = IdType.AUTO) // 指定主键自增 + private Long id; // 角色ID + + private String name; // 角色名称 + + private String info; // 角色信息 + + private String state; // 角色状态 + + public Role() { + // 默认构造函数 + } + + public Role(Long id, String name, String info, String state) { + // 带参数的构造函数 + this.id = id; + this.name = name; + this.info = info; + this.state = state; + } + + public Long getId() { + return id; // 获取角色ID + } + + public void setId(Long id) { + this.id = id; // 设置角色ID + } + + public String getName() { + return name; // 获取角色名称 + } + + public void setName(String name) { + this.name = name; // 设置角色名称 + } + + public String getInfo() { + return info; // 获取角色信息 + } + + public void setInfo(String info) { + this.info = info; // 设置角色信息 + } + + public String getState() { + return state; // 获取角色状态 + } + + public void setState(String state) { + this.state = state; // 设置角色状态 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/SaleRecords.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/SaleRecords.java new file mode 100644 index 0000000..cb42000 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/SaleRecords.java @@ -0,0 +1,172 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.TableField; // 导入MyBatis-Plus 表字段注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 +import com.fasterxml.jackson.annotation.JsonFormat; // 导入Jackson JSON格式化注解类 +import org.springframework.format.annotation.DateTimeFormat; // 导入Spring日期时间格式化注解类 + +import java.io.Serializable; // 导入序列化接口 +import java.util.ArrayList; // 导入ArrayList类 +import java.util.Date; // 导入日期类 +import java.util.List; // 导入列表类 + +@TableName("t_sale_records") // 指定数据库表名为t_sale_records +public class SaleRecords implements Serializable { + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_DEL = "1"; // 删除状态 + private static final String TYPE_MEMBER = "1"; // 会员类型 + private static final String TYPE_NOMEMBER = "0"; // 非会员类型 + private static final String SELLWAY_ALIPAY = "0"; // 支付宝支付方式 + private static final String SELLWAY_WECHAT = "1"; // 微信支付方式 + private static final String SELLWAY_CASH = "2"; // 现金支付方式 + private static final String SELLWAY_CREDIT = "3"; // 信用支付方式 + private static final Double DISCOUNT = 0.9; // 折扣率 + + @TableField("cn") // 指定数据库字段名为cn + private String cn; // 销售编号 + + private Long eid; // 员工ID + + private String sellway; // 支付方式 + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 指定JSON日期格式 + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // 指定日期时间格式 + @TableField("sell_time") // 指定数据库字段名为sell_time + private Date sellTime; // 销售时间 + + private String state; // 状态 + + private String info; // 信息 + + private String sellby; // 销售人 + + @TableField("sell_total") // 指定数据库字段名为sell_total + private Long sellTotal; // 销售总数 + + @TableField("sell_totalmoney") // 指定数据库字段名为sell_totalmoney + private Double sellTotalmoney; // 销售总金额 + + private String type; // 类型(会员或非会员) + + @TableField(exist = false) // 不映射到数据库 + private List detailSaleRecords = new ArrayList<>(); // 详细销售记录列表 + + @TableField("member_phone") // 指定数据库字段名为member_phone + private String memberPhone; // 会员账号 + + public SaleRecords() { + // 默认构造函数 + } + + public SaleRecords(String cn, Long eid, String sellway, Date sellTime, String state, String info, String sellby, Long sellTotal, Double sellTotalmoney, String type, List detailSaleRecords, String memberPhone) { + // 带参数的构造函数 + this.cn = cn; + this.eid = eid; + this.sellway = sellway; + this.sellTime = sellTime; + this.state = state; + this.info = info; + this.sellby = sellby; + this.sellTotal = sellTotal; + this.sellTotalmoney = sellTotalmoney; + this.type = type; + this.detailSaleRecords = detailSaleRecords; + this.memberPhone = memberPhone; + } + + public String getCn() { + return cn; // 获取销售编号 + } + + public void setCn(String cn) { + this.cn = cn; // 设置销售编号 + } + + public Long getEid() { + return eid; // 获取员工ID + } + + public void setEid(Long eid) { + this.eid = eid; // 设置员工ID + } + + public String getSellway() { + return sellway; // 获取支付方式 + } + + public void setSellway(String sellway) { + this.sellway = sellway; // 设置支付方式 + } + + public Date getSellTime() { + return sellTime; // 获取销售时间 + } + + public void setSellTime(Date sellTime) { + this.sellTime = sellTime; // 设置销售时间 + } + + public String getState() { + return state; // 获取状态 + } + + public void setState(String state) { + this.state = state; // 设置状态 + } + + public String getInfo() { + return info; // 获取信息 + } + + public void setInfo(String info) { + this.info = info; // 设置信息 + } + + public String getSellby() { + return sellby; // 获取销售人 + } + + public void setSellby(String sellby) { + this.sellby = sellby; // 设置销售人 + } + + public Long getSellTotal() { + return sellTotal; // 获取销售总数 + } + + public void setSellTotal(Long sellTotal) { + this.sellTotal = sellTotal; // 设置销售总数 + } + + public Double getSellTotalmoney() { + return sellTotalmoney; // 获取销售总金额 + } + + public void setSellTotalmoney(Double sellTotalmoney) { + this.sellTotalmoney = sellTotalmoney; // 设置销售总金额 + } + + public String getType() { + return type; // 获取类型(会员或非会员) + } + + public void setType(String type) { + this.type = type; // 设置类型(会员或非会员) + } + + public List getDetailSaleRecords() { + return detailSaleRecords; // 获取详细销售记录列表 + } + + public void setDetailSaleRecords(List detailSaleRecords) { + this.detailSaleRecords = detailSaleRecords; // 设置详细销售记录列表 + } + + public String getMemberPhone() { + return memberPhone; // 获取会员账号 + } + + public void setMemberPhone(String memberPhone) { + this.memberPhone = memberPhone; // 设置会员账号 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Store.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Store.java new file mode 100644 index 0000000..b4e6c37 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Store.java @@ -0,0 +1,80 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; // 导入MyBatis-Plus ID类型注解类 +import com.baomidou.mybatisplus.annotation.TableId; // 导入MyBatis-Plus 表ID注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 + +import java.io.Serializable; // 导入序列化接口 + +/** + * 仓库实体 + */ +@TableName("store") // 指定数据库表名为store +public class Store implements Serializable { + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_BAN = "-1"; // 禁用状态 + + @TableId(type = IdType.AUTO) // 指定主键自增 + private Long id; // 仓库ID + + private String name; // 仓库名称 + + private String address; // 仓库地址 + + private String info; // 仓库信息 + + private String state; // 仓库状态 + + public Store() { + // 默认构造函数 + } + + public Store(Long id, String name, String address, String info, String state) { + // 带参数的构造函数 + this.id = id; + this.name = name; + this.address = address; + this.info = info; + this.state = state; + } + + public Long getId() { + return id; // 获取仓库ID + } + + public void setId(Long id) { + this.id = id; // 设置仓库ID + } + + public String getName() { + return name; // 获取仓库名称 + } + + public void setName(String name) { + this.name = name; // 设置仓库名称 + } + + public String getAddress() { + return address; // 获取仓库地址 + } + + public void setAddress(String address) { + this.address = address; // 设置仓库地址 + } + + public String getInfo() { + return info; // 获取仓库信息 + } + + public void setInfo(String info) { + this.info = info; // 设置仓库信息 + } + + public String getState() { + return state; // 获取仓库状态 + } + + public void setState(String state) { + this.state = state; // 设置仓库状态 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Supplier.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Supplier.java new file mode 100644 index 0000000..9eff8ea --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/domain/Supplier.java @@ -0,0 +1,88 @@ +package com.shanzhu.market.entity.domain; + +import com.baomidou.mybatisplus.annotation.IdType; // 导入MyBatis-Plus ID类型注解类 +import com.baomidou.mybatisplus.annotation.TableId; // 导入MyBatis-Plus 表ID注解类 +import com.baomidou.mybatisplus.annotation.TableName; // 导入MyBatis-Plus 表名注解类 + +import java.io.Serializable; // 导入序列化接口 + +@TableName("supplier") // 指定数据库表名为supplier +public class Supplier implements Serializable { + public static final String STATE_NORMAL = "0"; // 正常状态 + public static final String STATE_BAN = "-1"; // 禁用状态 + + @TableId(type = IdType.AUTO) // 指定主键自增 + private Long cn; // 供应商编号 + + private String name; // 供应商名称 + + private String address; // 供应商地址 + + private String tel; // 供应商电话 + + private String info; // 供应商信息 + + private String state; // 供应商状态 + + public Supplier() { + // 默认构造函数 + } + + public Supplier(Long cn, String name, String address, String tel, String info, String state) { + // 带参数的构造函数 + this.cn = cn; + this.name = name; + this.address = address; + this.tel = tel; + this.info = info; + this.state = state; + } + + public Long getCn() { + return cn; // 获取供应商编号 + } + + public void setCn(Long cn) { + this.cn = cn; // 设置供应商编号 + } + + public String getName() { + return name; // 获取供应商名称 + } + + public void setName(String name) { + this.name = name; // 设置供应商名称 + } + + public String getAddress() { + return address; // 获取供应商地址 + } + + public void setAddress(String address) { + this.address = address; // 设置供应商地址 + } + + public String getTel() { + return tel; // 获取供应商电话 + } + + public void setTel(String tel) { + this.tel = tel; // 设置供应商电话 + } + + public String getInfo() { + return info; // 获取供应商信息 + } + + public void setInfo(String info) { + this.info = info; // 设置供应商信息 + } + + public String getState() { + return state; // 获取供应商状态 + } + + public void setState(String state) { + this.state = state; // 设置供应商状态 + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/BaseQuery.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/BaseQuery.java new file mode 100644 index 0000000..26a1e62 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/BaseQuery.java @@ -0,0 +1,49 @@ +package com.shanzhu.market.entity.query; + +import java.io.Serializable; +import java.util.Map; + +// 定义一个基础查询类,实现Serializable接口以便于序列化 +public class BaseQuery implements Serializable { + // 当前页码,默认值为1 + private Integer currentPage = 1; + // 每页显示的记录数,默认值为3 + private Integer pageSize = 3; + // 其他请求参数,使用Map存储键值对 + private Map params; + + // 计算查询的起始位置,即(currentPage-1)*pageSize + public Integer getStart() { + return (currentPage - 1) * pageSize; + } + + // 获取当前页码 + public Integer getCurrentPage() { + return currentPage; + } + + // 设置当前页码 + public void setCurrentPage(Integer currentPage) { + this.currentPage = currentPage; + } + + // 获取每页显示的记录数 + public Integer getPageSize() { + return pageSize; + } + + // 设置每页显示的记录数 + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + // 获取其他请求参数 + public Map getParams() { + return params; + } + + // 设置其他请求参数 + public void setParams(Map params) { + this.params = params; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/MenuQuery.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/MenuQuery.java new file mode 100644 index 0000000..6df7a08 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/MenuQuery.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.entity.query; + +// 定义一个菜单查询类,继承自BaseQuery类 +public class MenuQuery extends BaseQuery { + // 菜单名称 + private String name; + + // 获取菜单名称 + public String getName() { + return name; + } + + // 设置菜单名称 + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDept.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDept.java new file mode 100644 index 0000000..907199d --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDept.java @@ -0,0 +1,29 @@ +package com.shanzhu.market.entity.query; + +// 定义一个部门查询类 +public class QueryDept { + // 部门名称 + private String name; + // 部门状态 + private String state; + + // 获取部门名称 + public String getName() { + return name; + } + + // 设置部门名称 + public void setName(String name) { + this.name = name; + } + + // 获取部门状态 + public String getState() { + return state; + } + + // 设置部门状态 + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStorageSituation.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStorageSituation.java new file mode 100644 index 0000000..d3d16d6 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStorageSituation.java @@ -0,0 +1,29 @@ +package com.shanzhu.market.entity.query; + +// 定义一个详细库存情况查询类,继承自BaseQuery类 +public class QueryDetailStorageSituation extends BaseQuery { + // 库存情况的唯一标识ID + private Long id; + // 库存所在的仓库ID + private Long storeId; + + // 获取库存情况的唯一标识ID + public Long getId() { + return id; + } + + // 设置库存情况的唯一标识ID + public void setId(Long id) { + this.id = id; + } + + // 获取库存所在的仓库ID + public Long getStoreId() { + return storeId; + } + + // 设置库存所在的仓库ID + public void setStoreId(Long storeId) { + this.storeId = storeId; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoods.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoods.java new file mode 100644 index 0000000..7c559bb --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoods.java @@ -0,0 +1,65 @@ +package com.shanzhu.market.entity.query; + +// 定义一个详细库存商品查询类,继承自BaseQuery类 +public class QueryDetailStoreGoods extends BaseQuery { + // 商品的分类编号 + private String cn; + // 商品名称 + private String goodsName; + // 商品状态 + private String state1; + // 商品创建时间的起始时间 + private String startCreateTime; + // 商品创建时间的结束时间 + private String endCreateTime; + + // 获取商品的分类编号 + public String getCn() { + return cn; + } + + // 设置商品的分类编号 + public void setCn(String cn) { + this.cn = cn; + } + + // 获取商品名称 + public String getGoodsName() { + return goodsName; + } + + // 设置商品名称 + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + // 获取商品状态 + public String getState1() { + return state1; + } + + // 设置商品状态 + public void setState1(String state1) { + this.state1 = state1; + } + + // 获取商品创建时间的起始时间 + public String getStartCreateTime() { + return startCreateTime; + } + + // 设置商品创建时间的起始时间 + public void setStartCreateTime(String startCreateTime) { + this.startCreateTime = startCreateTime; + } + + // 获取商品创建时间的结束时间 + public String getEndCreateTime() { + return endCreateTime; + } + + // 设置商品创建时间的结束时间 + public void setEndCreateTime(String endCreateTime) { + this.endCreateTime = endCreateTime; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoodsOut.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoodsOut.java new file mode 100644 index 0000000..1427e2e --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryDetailStoreGoodsOut.java @@ -0,0 +1,77 @@ +package com.shanzhu.market.entity.query; + +// 定义一个详细出库商品查询类,继承自BaseQuery类 +public class QueryDetailStoreGoodsOut extends BaseQuery { + // 商品的分类编号 + private String cn; + // 商品名称 + private String goodsName; + // 商品状态1 + private String state1; + // 商品状态 + private String state; + // 商品创建时间的起始时间 + private String startCreateTime; + // 商品创建时间的结束时间 + private String endCreateTime; + + // 获取商品的分类编号 + public String getCn() { + return cn; + } + + // 设置商品的分类编号 + public void setCn(String cn) { + this.cn = cn; + } + + // 获取商品名称 + public String getGoodsName() { + return goodsName; + } + + // 设置商品名称 + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + // 获取商品状态1 + public String getState1() { + return state1; + } + + // 设置商品状态1 + public void setState1(String state1) { + this.state1 = state1; + } + + // 获取商品状态 + public String getState() { + return state; + } + + // 设置商品状态 + public void setState(String state) { + this.state = state; + } + + // 获取商品创建时间的起始时间 + public String getStartCreateTime() { + return startCreateTime; + } + + // 设置商品创建时间的起始时间 + public void setStartCreateTime(String startCreateTime) { + this.startCreateTime = startCreateTime; + } + + // 获取商品创建时间的结束时间 + public String getEndCreateTime() { + return endCreateTime; + } + + // 设置商品创建时间的结束时间 + public void setEndCreateTime(String endCreateTime) { + this.endCreateTime = endCreateTime; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEditPwd.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEditPwd.java new file mode 100644 index 0000000..db7eac3 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEditPwd.java @@ -0,0 +1,43 @@ +package com.shanzhu.market.entity.query; + +import java.io.Serializable; + +// 定义一个修改密码查询类,实现Serializable接口以便于序列化 +public class QueryEditPwd implements Serializable { + // 用户名 + private String username; + // 旧密码 + private String oldPwd; + // 新密码 + private String newPwd; + + // 获取用户名 + public String getUsername() { + return username; + } + + // 设置用户名 + public void setUsername(String username) { + this.username = username; + } + + // 获取旧密码 + public String getOldPwd() { + return oldPwd; + } + + // 设置旧密码 + public void setOldPwd(String oldPwd) { + this.oldPwd = oldPwd; + } + + // 获取新密码 + public String getNewPwd() { + return newPwd; + } + + // 设置新密码 + public void setNewPwd(String newPwd) { + this.newPwd = newPwd; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEmp.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEmp.java new file mode 100644 index 0000000..76c5993 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryEmp.java @@ -0,0 +1,77 @@ +package com.shanzhu.market.entity.query; + +// 定义一个员工查询类,继承自BaseQuery类 +public class QueryEmp extends BaseQuery { + // 用户名 + private String username; + // 昵称 + private String nickName; + // 年龄 + private String age; + // 地址 + private String address; + // 性别 + private String sex; + // 所属部门ID + private Long deptId; + + // 获取用户名 + public String getUsername() { + return username; + } + + // 设置用户名 + public void setUsername(String username) { + this.username = username; + } + + // 获取昵称 + public String getNickName() { + return nickName; + } + + // 设置昵称 + public void setNickName(String nickName) { + this.nickName = nickName; + } + + // 获取年龄 + public String getAge() { + return age; + } + + // 设置年龄 + public void setAge(String age) { + this.age = age; + } + + // 获取地址 + public String getAddress() { + return address; + } + + // 设置地址 + public void setAddress(String address) { + this.address = address; + } + + // 获取性别 + public String getSex() { + return sex; + } + + // 设置性别 + public void setSex(String sex) { + this.sex = sex; + } + + // 获取所属部门ID + public Long getDeptId() { + return deptId; + } + + // 设置所属部门ID + public void setDeptId(Long deptId) { + this.deptId = deptId; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryExchangePointProductsRecords.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryExchangePointProductsRecords.java new file mode 100644 index 0000000..c4461a1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryExchangePointProductsRecords.java @@ -0,0 +1,53 @@ +package com.shanzhu.market.entity.query; + +// 定义一个积分兑换产品记录查询类,继承自BaseQuery类 +public class QueryExchangePointProductsRecords extends BaseQuery { + // 商品的分类编号 + private String cn; + // 会员ID + private Long memberId; + // 记录的起始时间 + private String startTime; + // 记录的结束时间 + private String endTime; + + // 获取商品的分类编号 + public String getCn() { + return cn; + } + + // 设置商品的分类编号 + public void setCn(String cn) { + this.cn = cn; + } + + // 获取会员ID + public Long getMemberId() { + return memberId; + } + + // 设置会员ID + public void setMemberId(Long memberId) { + this.memberId = memberId; + } + + // 获取记录的起始时间 + public String getStartTime() { + return startTime; + } + + // 设置记录的起始时间 + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + // 获取记录的结束时间 + public String getEndTime() { + return endTime; + } + + // 设置记录的结束时间 + public void setEndTime(String endTime) { + this.endTime = endTime; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoods.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoods.java new file mode 100644 index 0000000..bd1c97c --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoods.java @@ -0,0 +1,89 @@ +package com.shanzhu.market.entity.query; + +// 定义一个商品查询类,继承自BaseQuery类 +public class QueryGoods extends BaseQuery { + // 商品的唯一标识ID + private Long id; + // 商品名称 + private String name; + // 商品销售价格 + private Double sellPrice; + // 商品类别ID + private Long categoryId; + // 商品状态 + private String state; + // 商品操作的起始时间 + private String operateStartTime; + // 商品操作的结束时间 + private String operateEndTime; + + // 获取商品的唯一标识ID + public Long getId() { + return id; + } + + // 设置商品的唯一标识ID + public void setId(Long id) { + this.id = id; + } + + // 获取商品名称 + public String getName() { + return name; + } + + // 设置商品名称 + public void setName(String name) { + this.name = name; + } + + // 获取商品销售价格 + public Double getSellPrice() { + return sellPrice; + } + + // 设置商品销售价格 + public void setSellPrice(Double sellPrice) { + this.sellPrice = sellPrice; + } + + // 获取商品类别ID + public Long getCategoryId() { + return categoryId; + } + + // 设置商品类别ID + public void setCategoryId(Long categoryId) { + this.categoryId = categoryId; + } + + // 获取商品状态 + public String getState() { + return state; + } + + // 设置商品状态 + public void setState(String state) { + this.state = state; + } + + // 获取商品操作的起始时间 + public String getOperateStartTime() { + return operateStartTime; + } + + // 设置商品操作的起始时间 + public void setOperateStartTime(String operateStartTime) { + this.operateStartTime = operateStartTime; + } + + // 获取商品操作的结束时间 + public String getOperateEndTime() { + return operateEndTime; + } + + // 设置商品操作的结束时间 + public void setOperateEndTime(String operateEndTime) { + this.operateEndTime = operateEndTime; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsCategory.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsCategory.java new file mode 100644 index 0000000..6c82adc --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsCategory.java @@ -0,0 +1,120 @@ +package com.shanzhu.market.entity.query; + +public class package com.shanzhu.market.entity.query; + +// 定义一个商品查询类,继承自BaseQuery类 +public class QueryGoods extends BaseQuery { + // 商品的唯一标识ID + private Long id; + // 商品名称 + private String name; + // 商品销售价格 + private Double sellPrice; + // 商品类别ID + private Long categoryId; + // 商品状态 + private String state; + // 商品操作的起始时间 + private String operateStartTime; + // 商品操作的结束时间 + private String operateEndTime; + + // 获取商品的唯一标识ID + public Long getId() { + return id; + } + + // 设置商品的唯一标识ID + public void setId(Long id) { + this.id = id; + } + + // 获取商品名称 + public String getName() { + return name; + } + + // 设置商品名称 + public void setName(String name) { + this.name = name; + } + + // 获取商品销售价格 + public Double getSellPrice() { + return sellPrice; + } + + // 设置商品销售价格 + public void setSellPrice(Double sellPrice) { + this.sellPrice = sellPrice; + } + + // 获取商品类别ID + public Long getCategoryId() { + return categoryId; + } + + // 设置商品类别ID + public void setCategoryId(Long categoryId) { + this.categoryId = categoryId; + } + + // 获取商品状态 + public String getState() { + return state; + } + + // 设置商品状态 + public void setState(String state) { + this.state = state; + } + + // 获取商品操作的起始时间 + public String getOperateStartTime() { + return operateStartTime; + } + + // 设置商品操作的起始时间 + public void setOperateStartTime(String operateStartTime) { + this.operateStartTime = operateStartTime; + } + + // 获取商品操作的结束时间 + public String getOperateEndTime() { + return operateEndTime; + } + + // 设置商品操作的结束时间 + public void setOperateEndTime(String operateEndTime) { + this.operateEndTime = operateEndTime; + } +} +// 定义一个商品类别查询类,继承自BaseQuery类 +public class QueryGoodsCategory extends BaseQuery { + // 商品类别名称 + private String name; + // 商品类别状态 + private String state; + + // 获取商品类别名称 + public String getName() { + return name; + } + + // 设置商品类别名称 + public void setName(String name) { + this.name = name; + } + + // 获取商品类别状态 + public String getState() { + return state; + } + + // 设置商品类别状态 + public void setState(String state) { + this.state = state; + } +} + + diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsStore.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsStore.java new file mode 100644 index 0000000..5636fcd --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryGoodsStore.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.entity.query; + +// 定义一个商品仓库查询类,继承自BaseQuery类 +public class QueryGoodsStore extends BaseQuery { + // 仓库名称 + private String name; + + // 获取仓库名称 + public String getName() { + return name; + } + + // 设置仓库名称 + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryMember.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryMember.java new file mode 100644 index 0000000..c871ef5 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryMember.java @@ -0,0 +1,41 @@ +package com.shanzhu.market.entity.query; + +// 定义一个会员查询类,继承自BaseQuery类 +public class QueryMember extends BaseQuery { + // 会员手机号 + private String phone; + // 会员状态 + private String state; + // 会员名称 + private String name; + + // 获取会员手机号 + public String getPhone() { + return phone; + } + + // 设置会员手机号 + public void setPhone(String phone) { + this.phone = phone; + } + + // 获取会员状态 + public String getState() { + return state; + } + + // 设置会员状态 + public void setState(String state) { + this.state = state; + } + + // 获取会员名称 + public String getName() { + return name; + } + + // 设置会员名称 + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeIn.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeIn.java new file mode 100644 index 0000000..0caeea8 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeIn.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.entity.query; + +// 定义一个入库通知查询类,继承自BaseQuery类 +public class QueryNoticeIn extends BaseQuery { + // 入库通知名称 + private String name; + + // 获取入库通知名称 + public String getName() { + return name; + } + + // 设置入库通知名称 + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeOut.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeOut.java new file mode 100644 index 0000000..cc6f39d --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryNoticeOut.java @@ -0,0 +1,29 @@ +package com.shanzhu.market.entity.query; + +// 定义一个出库通知查询类,继承自BaseQuery类 +public class QueryNoticeOut extends BaseQuery { + // 出库通知名称 + private String name; + // 出库通知状态 + private String state; + + // 获取出库通知名称 + public String getName() { + return name; + } + + // 设置出库通知名称 + public void setName(String name) { + this.name = name; + } + + // 获取出库通知状态 + public String getState() { + return state; + } + + // 设置出库通知状态 + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryPointProducts.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryPointProducts.java new file mode 100644 index 0000000..8bb5b05 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryPointProducts.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.entity.query; + +// 定义一个积分产品查询类,继承自BaseQuery类 +public class QueryPointProducts extends BaseQuery { + // 积分产品名称 + private String name; + + // 获取积分产品名称 + public String getName() { + return name; + } + + // 设置积分产品名称 + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySaleRecords.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySaleRecords.java new file mode 100644 index 0000000..2d20e59 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySaleRecords.java @@ -0,0 +1,65 @@ +package com.shanzhu.market.entity.query; + +// 定义一个销售记录查询类,继承自BaseQuery类 +public class QuerySaleRecords extends BaseQuery { + // 商品的分类编号 + private String cn; + // 销售开始时间 + private String startSellTime; + // 销售结束时间 + private String endSellTime; + // 销售类型 + private String type; + // 销售方式 + private String sellway; + + // 获取商品的分类编号 + public String getCn() { + return cn; + } + + // 设置商品的分类编号 + public void setCn(String cn) { + this.cn = cn; + } + + // 获取销售开始时间 + public String getStartSellTime() { + return startSellTime; + } + + // 设置销售开始时间 + public void setStartSellTime(String startSellTime) { + this.startSellTime = startSellTime; + } + + // 获取销售结束时间 + public String getEndSellTime() { + return endSellTime; + } + + // 设置销售结束时间 + public void setEndSellTime(String endSellTime) { + this.endSellTime = endSellTime; + } + + // 获取销售类型 + public String getType() { + return type; + } + + // 设置销售类型 + public void setType(String type) { + this.type = type; + } + + // 获取销售方式 + public String getSellway() { + return sellway; + } + + // 设置销售方式 + public void setSellway(String sellway) { + this.sellway = sellway; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStatisticSale.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStatisticSale.java new file mode 100644 index 0000000..e538aec --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStatisticSale.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.entity.query; + +// 定义一个销售统计查询类,继承自BaseQuery类 +public class QueryStatisticSale extends BaseQuery { + // 销售统计名称 + private String name; + + // 获取销售统计名称 + public String getName() { + return name; + } + + // 设置销售统计名称 + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStorageSituation.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStorageSituation.java new file mode 100644 index 0000000..2008f8a --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStorageSituation.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.entity.query; + +// 定义一个库存情况查询类,继承自BaseQuery类 +public class QueryStorageSituation extends BaseQuery { + // 库存情况名称 + private String name; + + // 获取库存情况名称 + public String getName() { + return name; + } + + // 设置库存情况名称 + public void setName(String name) { + this.name = name; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStore.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStore.java new file mode 100644 index 0000000..0f0df84 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QueryStore.java @@ -0,0 +1,31 @@ +package com.shanzhu.market.entity.query; + +import java.io.Serializable; + +// 定义一个仓库查询类,实现Serializable接口以便于序列化 +public class QueryStore implements Serializable { + // 仓库名称 + private String name; + // 仓库状态 + private String state; + + // 获取仓库名称 + public String getName() { + return name; + } + + // 设置仓库名称 + public void setName(String name) { + this.name = name; + } + + // 获取仓库状态 + public String getState() { + return state; + } + + // 设置仓库状态 + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySupplier.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySupplier.java new file mode 100644 index 0000000..6ac7aae --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/QuerySupplier.java @@ -0,0 +1,41 @@ +package com.shanzhu.market.entity.query; + +// 定义一个供应商查询类,继承自BaseQuery类 +public class QuerySupplier extends BaseQuery { + // 供应商名称 + private String name; + // 供应商地址 + private String address; + // 供应商信息 + private String info; + + // 获取供应商名称 + public String getName() { + return name; + } + + // 设置供应商名称 + public void setName(String name) { + this.name = name; + } + + // 获取供应商地址 + public String getAddress() { + return address; + } + + // 设置供应商地址 + public void setAddress(String address) { + this.address = address; + } + + // 获取供应商信息 + public String getInfo() { + return info; + } + + // 设置供应商信息 + public void setInfo(String info) { + this.info = info; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/RoleQuery.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/RoleQuery.java new file mode 100644 index 0000000..1035487 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/query/RoleQuery.java @@ -0,0 +1,29 @@ +package com.shanzhu.market.entity.query; + +// 定义一个角色查询类 +public class RoleQuery { + // 角色名称 + private String name; + // 角色状态 + private String state; + + // 获取角色名称 + public String getName() { + return name; + } + + // 设置角色名称 + public void setName(String name) { + this.name = name; + } + + // 获取角色状态 + public String getState() { + return state; + } + + // 设置角色状态 + public void setState(String state) { + this.state = state; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailEmpVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailEmpVo.java new file mode 100644 index 0000000..20268bd --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailEmpVo.java @@ -0,0 +1,241 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.Set; + +// 定义一个详细员工视图类,实现Serializable接口以便于序列化 +public class DetailEmpVo implements Serializable { + // 员工唯一标识ID + private Long id; + // 性别 + private String sex; + // 是否为管理员 + private Boolean isAdmin; + // 用户名 + private String username; + // 昵称 + private String nickName; + // 密码 + private String password; + // 头像图片路径 + private String headImg; + // 状态 + private String state; + // 信息 + private String info; + // 创建人 + private String createby; + // 身份证号 + private String idCard; + // 创建时间,格式为"yyyy-MM-dd" + @JsonFormat(pattern = "yyyy-MM-dd") + private Date createTime; + // 离职时间,格式为"yyyy-MM-dd" + @JsonFormat(pattern = "yyyy-MM-dd") + private Date leaveTime; + // 地址 + private String address; + // 邮箱 + private String email; + // 年龄 + private Integer age; + // 所属部门ID + private Long deptId; + // 所属部门名称 + private String deptName; + // 角色集合 + private Set roleNames; + + // 获取员工唯一标识ID + public Long getId() { + return id; + } + + // 设置员工唯一标识ID + public void setId(Long id) { + this.id = id; + } + + // 获取性别 + public String getSex() { + return sex; + } + + // 设置性别 + public void setSex(String sex) { + this.sex = sex; + } + + // 获取是否为管理员 + public Boolean getAdmin() { + return isAdmin; + } + + // 设置是否为管理员 + public void setAdmin(Boolean admin) { + isAdmin = admin; + } + + // 获取用户名 + public String getUsername() { + return username; + } + + // 设置用户名 + public void setUsername(String username) { + this.username = username; + } + + // 获取昵称 + public String getNickName() { + return nickName; + } + + // 设置昵称 + public void setNickName(String nickName) { + this.nickName = nickName; + } + + // 获取密码 + public String getPassword() { + return password; + } + + // 设置密码 + public void setPassword(String password) { + this.password = password; + } + + // 获取头像图片路径 + public String getHeadImg() { + return headImg; + } + + // 设置头像图片路径 + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + // 获取状态 + public String getState() { + return state; + } + + // 设置状态 + public void setState(String state) { + this.state = state; + } + + // 获取信息 + public String getInfo() { + return info; + } + + // 设置信息 + public void setInfo(String info) { + this.info = info; + } + + // 获取创建人 + public String getCreateby() { + return createby; + } + + // 设置创建人 + public void setCreateby(String createby) { + this.createby = createby; + } + + // 获取身份证号 + public String getIdCard() { + return idCard; + } + + // 设置身份证号 + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + // 获取创建时间 + public Date getCreateTime() { + return createTime; + } + + // 设置创建时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + // 获取离职时间 + public Date getLeaveTime() { + return leaveTime; + } + + // 设置离职时间 + public void setLeaveTime(Date leaveTime) { + this.leaveTime = leaveTime; + } + + // 获取地址 + public String getAddress() { + return address; + } + + // 设置地址 + public void setAddress(String address) { + this.address = address; + } + + // 获取邮箱 + public String getEmail() { + return email; + } + + // 设置邮箱 + public void setEmail(String email) { + this.email = email; + } + + // 获取年龄 + public Integer getAge() { + return age; + } + + // 设置年龄 + public void setAge(Integer age) { + this.age = age; + } + + // 获取所属部门ID + public Long getDeptId() { + return deptId; + } + + // 设置所属部门ID + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + // 获取所属部门名称 + public String getDeptName() { + return deptName; + } + + // 设置所属部门名称 + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + // 获取角色集合 + public Set getRoleNames() { + return roleNames; + } + + // 设置角色集合 + public void setRoleNames(Set roleNames) { + this.roleNames = roleNames; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStorageSituationVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStorageSituationVo.java new file mode 100644 index 0000000..bec9ab0 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStorageSituationVo.java @@ -0,0 +1,63 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +/** + * 仓库存储情况 + */ +public class DetailStorageSituationVo implements Serializable { + // 商品ID + private Long goodsId; + // 商品名称 + private String goodsName; + // 商品剩余数量 + private Long residueNum; // 商品数量 + // 百分比 + private Long percentage = 0L; + + // 设置百分比 + public void setPercentage(Long total) { + if (total == null || total == 0) { + this.percentage = 0L; + } else { + String num = ((this.residueNum * 100.0) / total) + ""; + Long num1 = Long.valueOf(num.split("\\.")[0]); + this.percentage = num1; + } + } + + // 获取商品ID + public Long getGoodsId() { + return goodsId; + } + + // 设置商品ID + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + // 获取商品名称 + public String getGoodsName() { + return goodsName; + } + + // 设置商品名称 + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + // 获取商品剩余数量 + public Long getResidueNum() { + return residueNum; + } + + // 设置商品剩余数量 + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; + } + + // 获取百分比 + public Long getPercentage() { + return percentage; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsOutVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsOutVo.java new file mode 100644 index 0000000..0ea90b1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsOutVo.java @@ -0,0 +1,157 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +// 定义一个详细出库商品视图类,实现Serializable接口以便于序列化 +public class DetailStoreGoodsOutVo implements Serializable { + // 商品分类编号 + private String cn; + // 商品ID + private Long goodsId; + // 商品数量 + private Long goodsNum; + // 商品名称 + private String goodsName; + // 创建人ID + private Long createid; + // 创建人名称 + private String createby; + // 创建时间,格式为"yyyy-MM-dd" + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date createTime; + // 状态 + private String state; + // 信息 + private String info; + // 仓库ID + private Long storeId; + // 仓库名称 + private String storeName; + // 状态1 + private String state1; + + // 获取商品分类编号 + public String getCn() { + return cn; + } + + // 设置商品分类编号 + public void setCn(String cn) { + this.cn = cn; + } + + // 获取商品ID + public Long getGoodsId() { + return goodsId; + } + + // 设置商品ID + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + // 获取商品数量 + public Long getGoodsNum() { + return goodsNum; + } + + // 设置商品数量 + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; + } + + // 获取商品名称 + public String getGoodsName() { + return goodsName; + } + + // 设置商品名称 + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + // 获取创建人ID + public Long getCreateid() { + return createid; + } + + // 设置创建人ID + public void setCreateid(Long createid) { + this.createid = createid; + } + + // 获取创建人名称 + public String getCreateby() { + return createby; + } + + // 设置创建人名称 + public void setCreateby(String createby) { + this.createby = createby; + } + + // 获取创建时间 + public Date getCreateTime() { + return createTime; + } + + // 设置创建时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + // 获取状态 + public String getState() { + return state; + } + + // 设置状态 + public void setState(String state) { + this.state = state; + } + + // 获取信息 + public String getInfo() { + return info; + } + + // 设置信息 + public void setInfo(String info) { + this.info = info; + } + + // 获取仓库ID + public Long getStoreId() { + return storeId; + } + + // 设置仓库ID + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + // 获取仓库名称 + public String getStoreName() { + return storeName; + } + + // 设置仓库名称 + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + // 获取状态1 + public String getState1() { + return state1; + } + + // 设置状态1 + public void setState1(String state1) { + this.state1 = state1; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsVo.java new file mode 100644 index 0000000..1064a4b --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/DetailStoreGoodsVo.java @@ -0,0 +1,221 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +// 定义一个详细库存商品视图类,实现Serializable接口以便于序列化 +public class DetailStoreGoodsVo implements Serializable { + // 商品分类编号 + private String cn; + // 商品ID + private Long goodsId; + // 商品数量 + private Long goodsNum; + // 商品名称 + private String goodsName; + // 商品价格 + private Double goodsPrice; + // 商品信息 + private String info; + // 创建人ID + private Long createid; + // 创建人名称 + private String createby; + // 创建时间,格式为"yyyy-MM-dd" + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date createTime; + // 过期时间,格式为"yyyy-MM-dd" + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date expiryTime; + // 生产时间,格式为"yyyy-MM-dd" + @JsonFormat(pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date birthTime; + // 状态1 + private String state1; + // 仓库ID + private Long storeId; + // 仓库名称 + private String storeName; + // 状态 + private String state; + // 供应商ID + private Long supplierId; + // 供应商名称 + private String supplierName; + + // 获取商品分类编号 + public String getCn() { + return cn; + } + + // 设置商品分类编号 + public void setCn(String cn) { + this.cn = cn; + } + + // 获取商品ID + public Long getGoodsId() { + return goodsId; + } + + // 设置商品ID + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + // 获取商品数量 + public Long getGoodsNum() { + return goodsNum; + } + + // 设置商品数量 + public void setGoodsNum(Long goodsNum) { + this.goodsNum = goodsNum; + } + + // 获取商品名称 + public String getGoodsName() { + return goodsName; + } + + // 设置商品名称 + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + // 获取商品价格 + public Double getGoodsPrice() { + return goodsPrice; + } + + // 设置商品价格 + public void setGoodsPrice(Double goodsPrice) { + this.goodsPrice = goodsPrice; + } + + // 获取商品信息 + public String getInfo() { + return info; + } + + // 设置商品信息 + public void setInfo(String info) { + this.info = info; + } + + // 获取创建人ID + public Long getCreateid() { + return createid; + } + + // 设置创建人ID + public void setCreateid(Long createid) { + this.createid = createid; + } + + // 获取创建人名称 + public String getCreateby() { + return createby; + } + + // 设置创建人名称 + public void setCreateby(String createby) { + this.createby = createby; + } + + // 获取创建时间 + public Date getCreateTime() { + return createTime; + } + + // 设置创建时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + // 获取过期时间 + public Date getExpiryTime() { + return expiryTime; + } + + // 设置过期时间 + public void setExpiryTime(Date expiryTime) { + this.expiryTime = expiryTime; + } + + // 获取生产时间 + public Date getBirthTime() { + return birthTime; + } + + // 设置生产时间 + public void setBirthTime(Date birthTime) { + this.birthTime = birthTime; + } + + // 获取状态1 + public String getState1() { + return state1; + } + + // 设置状态1 + public void setState1(String state1) { + this.state1 = state1; + } + + // 获取仓库ID + public Long getStoreId() { + return storeId; + } + + // 设置仓库ID + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + // 获取仓库名称 + public String getStoreName() { + return storeName; + } + + // 设置仓库名称 + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + // 获取状态 + public String getState() { + return state; + } + + // 设置状态 + public void setState(String state) { + this.state = state; + } + + // 获取供应商ID + public Long getSupplierId() { + return supplierId; + } + + // 设置供应商ID + public void setSupplierId(Long supplierId) { + this.supplierId = supplierId; + } + + // 获取供应商名称 + public String getSupplierName() { + return supplierName; + } + + // 设置供应商名称 + public void setSupplierName(String supplierName) { + this.supplierName = supplierName; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/EditEmpVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/EditEmpVo.java new file mode 100644 index 0000000..34af8bf --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/EditEmpVo.java @@ -0,0 +1,163 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +// 定义一个编辑员工视图类,实现Serializable接口以便于序列化 +public class EditEmpVo implements Serializable { + // 员工唯一标识ID + private Long id; + // 身份证号 + private String idCard; + // 用户名 + private String username; + // 地址 + private String address; + // 性别 + private String sex; + // 年龄 + private Integer age; + // 昵称 + private String nickName; + // 头像图片路径 + private String headImg; + // 状态 + private String state; + // 信息 + private String info; + // 所属部门ID + private Long deptId; + // 所属部门名称 + private String deptName; + // 是否为管理员 + private Boolean isAdmin; + + // 获取员工唯一标识ID + public Long getId() { + return id; + } + + // 设置员工唯一标识ID + public void setId(Long id) { + this.id = id; + } + + // 获取身份证号 + public String getIdCard() { + return idCard; + } + + // 设置身份证号 + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + // 获取用户名 + public String getUsername() { + return username; + } + + // 设置用户名 + public void setUsername(String username) { + this.username = username; + } + + // 获取地址 + public String getAddress() { + return address; + } + + // 设置地址 + public void setAddress(String address) { + this.address = address; + } + + // 获取性别 + public String getSex() { + return sex; + } + + // 设置性别 + public void setSex(String sex) { + this.sex = sex; + } + + // 获取年龄 + public Integer getAge() { + return age; + } + + // 设置年龄 + public void setAge(Integer age) { + this.age = age; + } + + // 获取昵称 + public String getNickName() { + return nickName; + } + + // 设置昵称 + public void setNickName(String nickName) { + this.nickName = nickName; + } + + // 获取头像图片路径 + public String getHeadImg() { + return headImg; + } + + // 设置头像图片路径 + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + // 获取状态 + public String getState() { + return state; + } + + // 设置状态 + public void setState(String state) { + this.state = state; + } + + // 获取信息 + public String getInfo() { + return info; + } + + // 设置信息 + public void setInfo(String info) { + this.info = info; + } + + // 获取所属部门ID + public Long getDeptId() { + return deptId; + } + + // 设置所属部门ID + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + // 获取所属部门名称 + public String getDeptName() { + return deptName; + } + + // 设置所属部门名称 + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + // 获取是否为管理员 + public Boolean getAdmin() { + return isAdmin; + } + + // 设置是否为管理员 + public void setAdmin(Boolean admin) { + isAdmin = admin; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsListVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsListVo.java new file mode 100644 index 0000000..0f22bc1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsListVo.java @@ -0,0 +1,167 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; + +// 定义一个商品列表视图类,实现Serializable接口以便于序列化 +public class GoodsListVo implements Serializable { + // 商品编码 + private Long id; + // 商品封面URL + private String coverUrl; + // 商品名称 + private String name; + // 售价 + private Double sellPrice; + // 批发价 + private Double purchashPrice; + // 商品数量 + private Long residueNum; + // 可用库存数量 + private Long residueStoreNum; + // 商品类型ID + private Long categoryId; + // 商品类型名称 + private String categoryName; + // 状态,下架、上架 + private String state; + // 操作者名称 + private String updateby; + // 商品信息 + private String info; + // 操作时间,格式为"yyyy-MM-dd" + @JsonFormat(pattern = "yyyy-MM-dd") + private Date updateTime; + + // 获取商品编码 + public Long getId() { + return id; + } + + // 设置商品编码 + public void setId(Long id) { + this.id = id; + } + + // 获取商品封面URL + public String getCoverUrl() { + return coverUrl; + } + + // 设置商品封面URL + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + // 获取商品名称 + public String getName() { + return name; + } + + // 设置商品名称 + public void setName(String name) { + this.name = name; + } + + // 获取售价 + public Double getSellPrice() { + return sellPrice; + } + + // 设置售价 + public void setSellPrice(Double sellPrice) { + this.sellPrice = sellPrice; + } + + // 获取批发价 + public Double getPurchashPrice() { + return purchashPrice; + } + + // 设置批发价 + public void setPurchashPrice(Double purchashPrice) { + this.purchashPrice = purchashPrice; + } + + // 获取商品数量 + public Long getResidueNum() { + return residueNum; + } + + // 设置商品数量 + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; + } + + // 获取可用库存数量 + public Long getResidueStoreNum() { + return residueStoreNum; + } + + // 设置可用库存数量 + public void setResidueStoreNum(Long residueStoreNum) { + this.residueStoreNum = residueStoreNum; + } + + // 获取商品类型ID + public Long getCategoryId() { + return categoryId; + } + + // 设置商品类型ID + public void setCategoryId(Long categoryId) { + this.categoryId = categoryId; + } + + // 获取商品类型名称 + public String getCategoryName() { + return categoryName; + } + + // 设置商品类型名称 + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + // 获取状态,下架、上架 + public String getState() { + return state; + } + + // 设置状态,下架、上架 + public void setState(String state) { + this.state = state; + } + + // 获取操作者名称 + public String getUpdateby() { + return updateby; + } + + // 设置操作者名称 + public void setUpdateby(String updateby) { + this.updateby = updateby; + } + + // 获取商品信息 + public String getInfo() { + return info; + } + + // 设置商品信息 + public void setInfo(String info) { + this.info = info; + } + + // 获取操作时间 + public Date getUpdateTime() { + return updateTime; + } + + // 设置操作时间 + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsStoreVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsStoreVo.java new file mode 100644 index 0000000..b8fe1cb --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/GoodsStoreVo.java @@ -0,0 +1,67 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +// 定义一个商品仓库视图类,实现Serializable接口以便于序列化 +public class GoodsStoreVo implements Serializable { + // 商品唯一标识ID + private Long id; + // 商品名称 + private String name; // 商品名 + // 商品封面URL + private String coverUrl; // 商品封面 + // 需要的库存量 + private Long inventory; // 需库存量 + // 货架上的商品数量 + private Long shelves; // 货架商品数量 + + // 获取商品唯一标识ID + public Long getId() { + return id; + } + + // 设置商品唯一标识ID + public void setId(Long id) { + this.id = id; + } + + // 获取商品名称 + public String getName() { + return name; + } + + // 设置商品名称 + public void setName(String name) { + this.name = name; + } + + // 获取商品封面URL + public String getCoverUrl() { + return coverUrl; + } + + // 设置商品封面URL + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + // 获取需要的库存量 + public Long getInventory() { + return inventory; + } + + // 设置需要的库存量 + public void setInventory(Long inventory) { + this.inventory = inventory; + } + + // 获取货架上的商品数量 + public Long getShelves() { + return shelves; + } + + // 设置货架上的商品数量 + public void setShelves(Long shelves) { + this.shelves = shelves; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/InformationVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/InformationVo.java new file mode 100644 index 0000000..5b0ff4b --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/InformationVo.java @@ -0,0 +1,151 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +// 定义一个个人信息视图类,实现Serializable接口以便于序列化 +public class InformationVo implements Serializable { + // 员工唯一标识ID + private Long id; + // 性别 + private String sex; + // 用户名 + private String username; + // 昵称 + private String nickName; + // 头像图片路径 + private String headImg; + // 信息 + private String info; + // 地址 + private String address; + // 邮箱 + private String email; + // 年龄 + private Integer age; + // 所属部门ID + private Long deptId; + // 身份证号 + private String idCard; + // 所属部门名称 + private String deptName; + + // 获取员工唯一标识ID + public Long getId() { + return id; + } + + // 设置员工唯一标识ID + public void setId(Long id) { + this.id = id; + } + + // 获取性别 + public String getSex() { + return sex; + } + + // 设置性别 + public void setSex(String sex) { + this.sex = sex; + } + + // 获取用户名 + public String getUsername() { + return username; + } + + // 设置用户名 + public void setUsername(String username) { + this.username = username; + } + + // 获取昵称 + public String getNickName() { + return nickName; + } + + // 设置昵称 + public void setNickName(String nickName) { + this.nickName = nickName; + } + + // 获取头像图片路径 + public String getHeadImg() { + return headImg; + } + + // 设置头像图片路径 + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + // 获取信息 + public String getInfo() { + return info; + } + + // 设置信息 + public void setInfo(String info) { + this.info = info; + } + + // 获取地址 + public String getAddress() { + return address; + } + + // 设置地址 + public void setAddress(String address) { + this.address = address; + } + + // 获取邮箱 + public String getEmail() { + return email; + } + + // 设置邮箱 + public void setEmail(String email) { + this.email = email; + } + + // 获取年龄 + public Integer getAge() { + return age; + } + + // 设置年龄 + public void setAge(Integer age) { + this.age = age; + } + + // 获取所属部门ID + public Long getDeptId() { + return deptId; + } + + // 设置所属部门ID + public void setDeptId(Long deptId) { + this.deptId = deptId; + } + + // 获取身份证号 + public String getIdCard() { + return idCard; + } + + // 设置身份证号 + public void setIdCard(String idCard) { + this.idCard = idCard; + } + + // 获取所属部门名称 + public String getDeptName() { + return deptName; + } + + // 设置所属部门名称 + public void setDeptName(String deptName) { + this.deptName = deptName; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/NoticeInNotNormalVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/NoticeInNotNormalVo.java new file mode 100644 index 0000000..bd1bd75 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/NoticeInNotNormalVo.java @@ -0,0 +1,121 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +// 定义一个入库通知异常视图类,实现Serializable接口以便于序列化 +public class NoticeInNotNormalVo implements Serializable { + // 商品分类编号 + private String cn; + // 商品封面URL + private String coverUrl; + // 商品ID + private Long goodsId; + // 未处理数量 + private Long untreatedNum; + // 商品名称 + private String goodsName; + // 状态 + private String state; + // 仓库ID + private Long storeId; + // 仓库名称 + private String storeName; + // 通知时间,格式为"yyyy-MM-dd HH:mm:ss" + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + // 获取商品分类编号 + public String getCn() { + return cn; + } + + // 设置商品分类编号 + public void setCn(String cn) { + this.cn = cn; + } + + // 获取商品封面URL + public String getCoverUrl() { + return coverUrl; + } + + // 设置商品封面URL + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + // 获取商品ID + public Long getGoodsId() { + return goodsId; + } + + // 设置商品ID + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + // 获取未处理数量 + public Long getUntreatedNum() { + return untreatedNum; + } + + // 设置未处理数量 + public void setUntreatedNum(Long untreatedNum) { + this.untreatedNum = untreatedNum; + } + + // 获取商品名称 + public String getGoodsName() { + return goodsName; + } + + // 设置商品名称 + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + // 获取状态 + public String getState() { + return state; + } + + // 设置状态 + public void setState(String state) { + this.state = state; + } + + // 获取仓库ID + public Long getStoreId() { + return storeId; + } + + // 设置仓库ID + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + // 获取仓库名称 + public String getStoreName() { + return storeName; + } + + // 设置仓库名称 + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + // 获取通知时间 + public Date getCreateTime() { + return createTime; + } + + // 设置通知时间 + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/RolePermissonVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/RolePermissonVo.java new file mode 100644 index 0000000..2cad7f8 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/RolePermissonVo.java @@ -0,0 +1,86 @@ +package com.shanzhu.market.entity.vo; + +import com.fasterxml.jackson.annotation.JsonIgnoreType; + +import java.io.Serializable; +import java.util.List; + +// 定义一个角色权限视图类,实现Serializable接口以便于序列化 +public class RolePermissonVo implements Serializable { + // 菜单ID列表 + private List menuIds; + // 菜单列表 + private List menus; + + /** + * 获取成员内部类的实例 + * + * @return RoleMenu实例 + */ + public RoleMenu getRoleMenu() { + return new RoleMenu(); + } + + // 获取菜单ID列表 + public List getMenuIds() { + return menuIds; + } + + // 设置菜单ID列表 + public void setMenuIds(List menuIds) { + this.menuIds = menuIds; + } + + // 获取菜单列表 + public List getMenus() { + return menus; + } + + // 设置菜单列表 + public void setMenus(List menus) { + this.menus = menus; + } + + /** + * 成员内部类,供这个类使用 + */ + @JsonIgnoreType + public class RoleMenu { + // 菜单值 + private Long value; + // 菜单标签 + private String label; + // 子菜单列表 + private List children; + + // 获取菜单值 + public Long getValue() { + return value; + } + + // 设置菜单值 + public void setValue(Long value) { + this.value = value; + } + + // 获取菜单标签 + public String getLabel() { + return label; + } + + // 设置菜单标签 + public void setLabel(String label) { + this.label = label; + } + + // 获取子菜单列表 + public List getChildren() { + return children; + } + + // 设置子菜单列表 + public void setChildren(List children) { + this.children = children; + } + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SaleGoodsVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SaleGoodsVo.java new file mode 100644 index 0000000..06d2ee8 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SaleGoodsVo.java @@ -0,0 +1,82 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +/** + * 单个商品销售信息 + */ +public class SaleGoodsVo implements Serializable { + // 商品ID + private Long goodsId; + // 商品名称 + private String goodsName; + // 商品封面URL + private String coverUrl; + // 销量 + private Long salesVolume; + // 销售百分比 + private Long percentage = 0L; + + /** + * 设置销售百分比 + * + * @param total 总销量 + */ + public void setPercentage(Long total) { + if (total == null || total == 0) { + this.percentage = 0L; + } else { + if (this.salesVolume == null) { + this.salesVolume = 0L; + } + String num = ((this.salesVolume * 100.0) / total) + ""; + Long num1 = Long.valueOf(num.split("\\.")[0]); + this.percentage = num1; + } + } + + // 获取商品ID + public Long getGoodsId() { + return goodsId; + } + + // 设置商品ID + public void setGoodsId(Long goodsId) { + this.goodsId = goodsId; + } + + // 获取商品名称 + public String getGoodsName() { + return goodsName; + } + + // 设置商品名称 + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + // 获取商品封面URL + public String getCoverUrl() { + return coverUrl; + } + + // 设置商品封面URL + public void setCoverUrl(String coverUrl) { + this.coverUrl = coverUrl; + } + + // 获取销量 + public Long getSalesVolume() { + return salesVolume; + } + + // 设置销量 + public void setSalesVolume(Long salesVolume) { + this.salesVolume = salesVolume; + } + + // 获取销售百分比 + public Long getPercentage() { + return percentage; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SalesStatisticsVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SalesStatisticsVo.java new file mode 100644 index 0000000..b9c54e4 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/SalesStatisticsVo.java @@ -0,0 +1,35 @@ +package com.shanzhu.market.entity.vo; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import java.io.Serializable; + +/** + * 商品销售量统计 + */ +public class SalesStatisticsVo implements Serializable { + // 所有商品总售卖量 + private Long total; + // 分页的商品销售信息列表 + private Page vos; + + // 获取所有商品总售卖量 + public Long getTotal() { + return total; + } + + // 设置所有商品总售卖量 + public void setTotal(Long total) { + this.total = total; + } + + // 获取分页的商品销售信息列表 + public Page getVos() { + return vos; + } + + // 设置分页的商品销售信息列表 + public void setVos(Page vos) { + this.vos = vos; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/StorageSituationVo.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/StorageSituationVo.java new file mode 100644 index 0000000..6669179 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/entity/vo/StorageSituationVo.java @@ -0,0 +1,45 @@ +package com.shanzhu.market.entity.vo; + +import java.io.Serializable; + +/** + * 仓库存储情况 + */ +public class StorageSituationVo implements Serializable { + // 仓库ID + private Long storeId; + // 仓库名称 + private String storeName; + // 该仓库存储商品数量 + private Long residueNum; // 该仓库存储商品数量 + + // 获取仓库ID + public Long getStoreId() { + return storeId; + } + + // 设置仓库ID + public void setStoreId(Long storeId) { + this.storeId = storeId; + } + + // 获取仓库名称 + public String getStoreName() { + return storeName; + } + + // 设置仓库名称 + public void setStoreName(String storeName) { + this.storeName = storeName; + } + + // 获取该仓库存储商品数量 + public Long getResidueNum() { + return residueNum; + } + + // 设置该仓库存储商品数量 + public void setResidueNum(Long residueNum) { + this.residueNum = residueNum; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/job/CacheDataJob.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/job/CacheDataJob.java new file mode 100644 index 0000000..212c9a1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/job/CacheDataJob.java @@ -0,0 +1,47 @@ +package com.shanzhu.market.job; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.shanzhu.market.common.redis.constants.RedisKeys; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.GoodsCategory; +import com.shanzhu.market.service.IGoodsCategoryService; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +// 定义一个定时任务类,用于缓存数据 +@Component +public class CacheDataJob { + + // 注入Redis模板服务 + @Resource + private RedisTemplateService redisTemplateService; + + // 注入商品类别服务 + @Resource + private IGoodsCategoryService goodsCategoryService; + + // 定义一个定时任务,每天凌晨1点执行一次 + @Scheduled(cron = "0 0 1 * * ?") + public void cache_category() { + // 打印任务执行日志 + System.out.println("被执行。。。。"); + // 创建查询条件,查询状态为正常的商品类别 + QueryWrapper wrapper = new QueryWrapper() + .eq("state", GoodsCategory.STATE_NORMAL); + // 获取符合条件的商品类别列表 + List list = goodsCategoryService.list(wrapper); + // 如果列表为空或大小为0,直接返回 + if (list == null || list.size() <= 0) { + return; + } + // 定义Redis缓存键 + String cacheKey = RedisKeys.GOODS_CATEGORY.join(); + // 遍历商品类别列表,将每个商品类别缓存到Redis中 + for (GoodsCategory goodsCategory : list) { + redisTemplateService.setCacheMapValue(cacheKey, goodsCategory.getId().toString(), goodsCategory); + } + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DeptMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DeptMapper.java new file mode 100644 index 0000000..84f863e --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DeptMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Dept; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个部门Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface DeptMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(Dept entity) - 插入一条记录 + // updateById(Dept entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailSaleRecordsMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailSaleRecordsMapper.java new file mode 100644 index 0000000..fda7565 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailSaleRecordsMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.DetailSaleRecords; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个详细销售记录Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface DetailSaleRecordsMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(DetailSaleRecords entity) - 插入一条记录 + // updateById(DetailSaleRecords entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailStoreGoodsMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailStoreGoodsMapper.java new file mode 100644 index 0000000..88ff439 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/DetailStoreGoodsMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个详细库存商品Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface DetailStoreGoodsMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(DetailStoreGoods entity) - 插入一条记录 + // updateById(DetailStoreGoods entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/EmployeeMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/EmployeeMapper.java new file mode 100644 index 0000000..d51aa87 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/EmployeeMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Employee; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个员工Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface EmployeeMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(Employee entity) - 插入一条记录 + // updateById(Employee entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/ExchangePointProductsMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/ExchangePointProductsMapper.java new file mode 100644 index 0000000..d1a80ca --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/ExchangePointProductsMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.ExchangePointProducts; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个积分兑换产品Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface ExchangePointProductsMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(ExchangePointProducts entity) - 插入一条记录 + // updateById(ExchangePointProducts entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsCategoryMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsCategoryMapper.java new file mode 100644 index 0000000..5c5a3f3 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsCategoryMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.GoodsCategory; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个商品类别Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface GoodsCategoryMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(GoodsCategory entity) - 插入一条记录 + // updateById(GoodsCategory entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsMapper.java new file mode 100644 index 0000000..a2d356b --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsMapper.java @@ -0,0 +1,30 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.NoticeIn; +import com.shanzhu.market.entity.domain.NoticeOut; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; + +// 定义一个商品Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface GoodsMapper extends BaseMapper { + + // 获取入库通知的总记录数 + int getNoticeInTotalCount(Map map); + + // 获取入库通知的分页列表 + List getNoticePageList(Map map); + + // 获取出库通知的总记录数 + int getNoticeOutShelvesTotalCount(Map map); + + // 获取出库通知的分页列表 + List getNoticeShelvesPageList(Map map); + + // 根据查询对象统计销售记录的数量 + Long queryPageStatisticSaleByQo(String name); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsStoreMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsStoreMapper.java new file mode 100644 index 0000000..9538e53 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/GoodsStoreMapper.java @@ -0,0 +1,28 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.GoodsStore; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +// 定义一个商品仓库Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface GoodsStoreMapper extends BaseMapper { + // 获取指定仓库已使用的库存数量 + Long storeUsed(Long id); + + // 根据商品ID获取剩余库存数量 + Long getResidueNumByGoodsId(Long goodsId); + + // 将商品入库到指定仓库 + void goodsInStore(@Param("goodsId") Long goodsId, @Param("goodsNum") Long goodsNum, @Param("storeId") Long storeId); + + // 从指定仓库出库商品 + void goodsOutStore(@Param("goodsId") Long goodsId, @Param("goodsNum") Long goodsNum, @Param("storeId") Long storeId); + + // 获取所有仓库的总库存数量 + Long totalStoreNum(); + + // 获取指定仓库的总库存数量 + Long getTotalStoreNum1(Long storeId); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MemberMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MemberMapper.java new file mode 100644 index 0000000..6b15118 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MemberMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Member; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个会员Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface MemberMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(Member entity) - 插入一条记录 + // updateById(Member entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MenuMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MenuMapper.java new file mode 100644 index 0000000..6b15118 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/MenuMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Member; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个会员Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface MemberMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(Member entity) - 插入一条记录 + // updateById(Member entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/PointProductsMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/PointProductsMapper.java new file mode 100644 index 0000000..8451932 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/PointProductsMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.PointProducts; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个积分产品Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface PointProductsMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(PointProducts entity) - 插入一条记录 + // updateById(PointProducts entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/RoleMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/RoleMapper.java new file mode 100644 index 0000000..0339563 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/RoleMapper.java @@ -0,0 +1,72 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Role; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +// 定义一个角色Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface RoleMapper extends BaseMapper { + /** + * 根据员工id查询角色信息 + * + * @param eid 员工ID + * @return 角色集合 + */ + Set queryByEid(Long eid); + + /** + * 根据角色id查询菜单信息 + * + * @param rid 角色ID + * @return 菜单ID列表 + */ + List getMenuIdByRid(Long rid); + + /** + * 清除关系 + * + * @param rid 角色ID + */ + void clearRecordsByRid(Long rid); + + /** + * 保存关系 + * + * @param roleMenu 角色菜单关系列表 + */ + void saveRolePermissons(List> roleMenu); + + /** + * 根据员工id查询角色ID列表 + * + * @param eid 员工ID + * @return 角色ID列表 + */ + List queryRoleIdsByEid(Long eid); + + /** + * 根据员工id清除关系 + * + * @param eid 员工ID + */ + void clearRelationByEid(Long eid); + + /** + * 重新保存角色关系 + * + * @param list 角色关系列表 + */ + void reSaveRelation(List> list); + + /** + * 查询所有角色ID + * + * @return 角色ID列表 + */ + List queryRoleIdsAll(); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SaleRecordsMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SaleRecordsMapper.java new file mode 100644 index 0000000..2cb57b1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SaleRecordsMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.SaleRecords; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个销售记录Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface SaleRecordsMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(SaleRecords entity) - 插入一条记录 + // updateById(SaleRecords entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/StoreMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/StoreMapper.java new file mode 100644 index 0000000..a23b1dd --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/StoreMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Store; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个仓库Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface StoreMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(Store entity) - 插入一条记录 + // updateById(Store entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SupplierMapper.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SupplierMapper.java new file mode 100644 index 0000000..afbb1ba --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/mapper/SupplierMapper.java @@ -0,0 +1,17 @@ +package com.shanzhu.market.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.shanzhu.market.entity.domain.Supplier; +import org.apache.ibatis.annotations.Mapper; + +// 定义一个供应商Mapper接口,继承自BaseMapper以便使用MyBatis-Plus提供的CRUD方法 +@Mapper +public interface SupplierMapper extends BaseMapper { + // 继承自BaseMapper的方法包括: + // insert(Supplier entity) - 插入一条记录 + // updateById(Supplier entity) - 根据ID更新记录 + // deleteById(Long id) - 根据ID删除记录 + // selectById(Long id) - 根据ID查询记录 + // selectList(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IDeptService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IDeptService.java new file mode 100644 index 0000000..f3df257 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IDeptService.java @@ -0,0 +1,35 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Dept; +import com.shanzhu.market.entity.query.QueryDept; + +import java.util.List; + +public interface IDeptService extends IService { + + /** + * 条件查询信息业务 + * @param qo + * @return + */ + List listByQo(QueryDept qo); + + /** + * 停用业务 + * @param id + */ + void forbiddenRole(Long id); + + /** + * 保存信息业务 + * @param dept + */ + void saveDept(Dept dept); + + /** + * 更改部门的信息业务 + * @param dept + */ + void updateDept(Dept dept); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailSaleRecordsService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailSaleRecordsService.java new file mode 100644 index 0000000..72cd7f1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailSaleRecordsService.java @@ -0,0 +1,7 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.DetailSaleRecords; + +public interface IDetailSaleRecordsService extends IService { +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailStoreGoodsService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailStoreGoodsService.java new file mode 100644 index 0000000..a4a5be0 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IDetailStoreGoodsService.java @@ -0,0 +1,33 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.query.QueryDetailStoreGoods; +import com.shanzhu.market.entity.query.QueryDetailStoreGoodsOut; +import com.shanzhu.market.entity.vo.DetailStoreGoodsOutVo; +import com.shanzhu.market.entity.vo.DetailStoreGoodsVo; + +import java.util.List; +import java.util.Map; + +public interface IDetailStoreGoodsService extends IService { + + void saveIn(DetailStoreGoods detailStoreGoods, String token); + + Page queryPageByQoIn(QueryDetailStoreGoods qo); + + void delIn(String cn); + + Page queryPageByQoOut(QueryDetailStoreGoodsOut qo); + + Map initOutOptions(); + + List> changeOutGoods(Long gid); + + List> changeOutStore(Long storeId); + + DetailStoreGoodsOutVo queryOutGoods(Long goodsId, Long storeId); + + void saveOut(DetailStoreGoods detailStoreGoods, String token); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IEmployeeService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IEmployeeService.java new file mode 100644 index 0000000..0cee44c --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IEmployeeService.java @@ -0,0 +1,40 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.query.QueryEditPwd; +import com.shanzhu.market.entity.query.QueryEmp; +import com.shanzhu.market.entity.vo.DetailEmpVo; +import com.shanzhu.market.entity.vo.EditEmpVo; +import com.shanzhu.market.entity.vo.InformationVo; + +public interface IEmployeeService extends IService { + + /** + * 修改个人密码业务 + */ + void edit_pwd(QueryEditPwd editPwd, String token); + + /** + * 分页显示数据 + */ + Page pageByQo(QueryEmp qo); + + DetailEmpVo detail(Long uid); + + void saveEmp(Employee employee,String token); + + EditEmpVo editbtn(Long uid); + + void updateEmp(Employee employee,String token); + + void deactivate(Long id); + + /** + * 重置密码 + */ + void resetPwd(Long eid, String code); + + InformationVo information(String token); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IExchangePointProductsService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IExchangePointProductsService.java new file mode 100644 index 0000000..b8d89d4 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IExchangePointProductsService.java @@ -0,0 +1,30 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.ExchangePointProducts; +import com.shanzhu.market.entity.domain.PointProducts; +import com.shanzhu.market.entity.query.QueryExchangePointProductsRecords; + +import java.util.List; +import java.util.Map; + +public interface IExchangePointProductsService extends IService { + List> queryPointProductBymemberId(Long memberId); + + PointProducts queryPointProductByGoodsId(Long goodsId); + + void saveExchangePointProductRecords(ExchangePointProducts exchangePointProducts, String token); + + List> queryOptionsMemberPhone(); + + void delExchangePointProducts(String cn); + + Page queryPageByQoExchangePointProducts(QueryExchangePointProductsRecords qo); + + List> queryOptionsPointProducts(); + + List> queryOptionsMember(); + + List> queryMemberByGoodsId(Long goodsId); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsCategoryService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsCategoryService.java new file mode 100644 index 0000000..b209e80 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsCategoryService.java @@ -0,0 +1,34 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.GoodsCategory; +import com.shanzhu.market.entity.query.QueryGoodsCategory; + +import java.util.List; +import java.util.Map; + +public interface IGoodsCategoryService extends IService { + + /** + * 更改业务 + */ + void updateGoodsCategory(GoodsCategory goodsCategory); + + /** + * 停用业务 + */ + void deactivate(Long cid); + + /** + * 条件查询 + */ + Page queryPageByQo(QueryGoodsCategory qo); + + /** + * 保存商品分类信息 + */ + void saveGoodsCategory(GoodsCategory category); + + List> getNormalCategoryAll(); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsService.java new file mode 100644 index 0000000..d6c0210 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsService.java @@ -0,0 +1,54 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.NoticeIn; +import com.shanzhu.market.entity.domain.NoticeOut; +import com.shanzhu.market.entity.query.*; +import com.shanzhu.market.entity.vo.GoodsListVo; +import com.shanzhu.market.entity.vo.GoodsStoreVo; +import com.shanzhu.market.entity.vo.NoticeInNotNormalVo; +import com.shanzhu.market.entity.vo.SalesStatisticsVo; + +import java.util.List; +import java.util.Map; + +public interface IGoodsService extends IService { + + /** + * 分页查询出数据 + */ + Page queryPageByQo(QueryGoods qo); + + void saveGoods(Goods goods, String token); + + void upOrdown(Long gid, String state,String token); + + void updateGoods(Goods goods, String token); + + List> selected_goodsAll(); + + List> selected_storeAll(); + + void returnGoods(DetailStoreGoods detailStoreGoods, String token); + + Page queryPageGoodsStore(QueryGoodsStore qo); + + GoodsStoreVo queryGoodsStoreById(Long id); + + void updateInventory(GoodsStoreVo vo); + + Page queryPageNoticeIn(QueryNoticeIn qo); + + Page queryPageNoticeOut_shelves(QueryNoticeOut qo); + + void saveOut_shelves(DetailStoreGoods detailStoreGoods,String token); + + SalesStatisticsVo queryPageStatisticSaleByQo(QueryStatisticSale qo); + + Page queryPageNoticeOut_untreated(QueryNoticeOut qo); + + void resolveOutUntreatedForm(NoticeInNotNormalVo vo, String token); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsStoreService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsStoreService.java new file mode 100644 index 0000000..3b80e57 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IGoodsStoreService.java @@ -0,0 +1,24 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.GoodsStore; +import com.shanzhu.market.entity.query.QueryDetailStorageSituation; +import com.shanzhu.market.entity.query.QueryStorageSituation; + +import java.util.Map; + +public interface IGoodsStoreService extends IService { + + + Long storeUsed(Long id); + + Long getResidueNumByGoodsId(Long id); + + void goodsInStore(Long goodsId, Long goodsNum,Long storeId); + + void goodsOutStore(Long goodsId, Long goodsNum, Long storeId); + + Map queryPageStorageSituationByQo(QueryStorageSituation qo); + + Map queryStoreGoodsByStoreId(QueryDetailStorageSituation qo); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/ILoginService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/ILoginService.java new file mode 100644 index 0000000..ece6437 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/ILoginService.java @@ -0,0 +1,36 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Menu; + +import java.util.List; +import java.util.Map; + +/** + * 员工登录业务接口 + */ +public interface ILoginService extends IService { + + /** + * 处理员工登录业务 + */ + Map login(String username, String password); + + /** + * 退出功能 + */ + void exit(String token); + + /** + * 注销账户功能 + */ + void logout(String token, String content); + + /** + * 登录者拥有的菜单信息 + */ + List empMenu(String token); + + Map checkedToken(String token); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IMemberService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IMemberService.java new file mode 100644 index 0000000..02ddb86 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IMemberService.java @@ -0,0 +1,20 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Member; +import com.shanzhu.market.entity.query.QueryMember; + +public interface IMemberService extends IService { + Page queryPageByQo(QueryMember qo); + + void delMember(Long id); + + void saveMember(Member member); + + Member queryMemberById(Long id); + + void updateMember(Member member); + + Member queryMemberByPhone(String phone); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IMenuService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IMenuService.java new file mode 100644 index 0000000..784d43d --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IMenuService.java @@ -0,0 +1,34 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.entity.query.MenuQuery; + +import java.util.List; +import java.util.Set; + +public interface IMenuService extends IService { + + /** + * 查询所有的菜单 + */ + List findAll(); + + /** + * 根据角色id集合查询对应的菜单 + */ + List queryByRids(Set rids); + + /** + * 分页查询菜单的信息 + * 以目录进行分页 + */ + Page queryPageByQo(MenuQuery qo); + + /** + * 查询父菜单id + */ + List listParentByIds(List ids); + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IPointProductsService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IPointProductsService.java new file mode 100644 index 0000000..3c10c89 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IPointProductsService.java @@ -0,0 +1,21 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.PointProducts; +import com.shanzhu.market.entity.query.QueryPointProducts; + +import java.util.List; +import java.util.Map; + +public interface IPointProductsService extends IService { + Page queryPageByQo(QueryPointProducts qo); + + List> queryOptionGoods(); + + void savePointGoods(PointProducts pointProducts,String token); + + void updatePointGoods(PointProducts pointProducts, String token); + + void del(Long id); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IRoleService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IRoleService.java new file mode 100644 index 0000000..a4ff5d7 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IRoleService.java @@ -0,0 +1,51 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Role; +import com.shanzhu.market.entity.query.RoleQuery; +import com.shanzhu.market.entity.vo.RolePermissonVo; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public interface IRoleService extends IService { + + /** + * 查询该员工id的角色信息 + */ + Set queryByEid(Long eid); + + /** + * 条件查询角色信息 + */ + List listByQo(RoleQuery qo); + + /** + * 停用角色业务 + */ + void forbiddenRole(Long rid); + + /** + * 保存角色信息业务 + */ + void saveRole(Role role); + + /** + * 查看角色权限的业务 + */ + RolePermissonVo checkPermissons(Long rid); + + /** + * 保存角色-菜单的关系业务 + */ + void saveRolePermissons(Long rid, Long[] menuIds); + + List> getRoleAll(); + + List queryRoleIdsByEid(Long eid); + + void saveRoleEmp(Long eid, Long[] roleIds,String token); + + void clearEmpPermission(Long id); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/ISaleRecordsService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/ISaleRecordsService.java new file mode 100644 index 0000000..27d8735 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/ISaleRecordsService.java @@ -0,0 +1,19 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.SaleRecords; +import com.shanzhu.market.entity.query.QuerySaleRecords; + +import java.util.List; +import java.util.Map; + +public interface ISaleRecordsService extends IService { + List> getOptionSaleRecordsGoods(); + + SaleRecords saveSaleRecords(SaleRecords saleRecords, String token); + + Page queryPageByQoSaleRecords(QuerySaleRecords qo); + + void delSaleRecords(String cn); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IStoreService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IStoreService.java new file mode 100644 index 0000000..1b8e46a --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/IStoreService.java @@ -0,0 +1,22 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Store; + +public interface IStoreService extends IService { + + /** + * 更改仓库信息的业务 + */ + void updateStore(Store store); + + /** + * 停用仓库业务 + */ + void deactivate(Long sid); + + Long getResidueNumByGoodsId(Long id); + + void saveStore(Store store); + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/ISupplierService.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/ISupplierService.java new file mode 100644 index 0000000..6c1e172 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/ISupplierService.java @@ -0,0 +1,22 @@ +package com.shanzhu.market.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.shanzhu.market.entity.domain.Supplier; +import com.shanzhu.market.entity.query.QuerySupplier; + +import java.util.List; +import java.util.Map; + +public interface ISupplierService extends IService { + + void deactivate(Long cn); + + Page queryPageByQo(QuerySupplier qo); + + List> queryOptionsSuppliers(); + + void saveSupplier(Supplier supplier); + + void updateSupplier(Supplier supplier); +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DeptServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DeptServiceImpl.java new file mode 100644 index 0000000..5aca6b1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DeptServiceImpl.java @@ -0,0 +1,88 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Dept; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.query.QueryDept; +import com.shanzhu.market.mapper.DeptMapper; +import com.shanzhu.market.service.IDeptService; +import com.shanzhu.market.service.IEmployeeService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.List; + +// 定义一个部门服务实现类,继承自ServiceImpl并实现IDeptService接口 +@Service +public class DeptServiceImpl extends ServiceImpl implements IDeptService { + + // 注入员工服务 + @Resource + private IEmployeeService employeeService; + + // 根据查询对象获取部门列表 + @Override + public List listByQo(QueryDept qo) { + // 创建LambdaQueryWrapper进行条件查询 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper() + .like(StringUtils.hasText(qo.getName()), Dept::getName, qo.getName()) + .eq(StringUtils.hasText(qo.getState()), Dept::getState, qo.getState()); + // 执行查询并返回结果 + return super.list(wrapper); + } + + // 禁用指定ID的部门 + @Transactional + @Override + public void forbiddenRole(Long id) { + // 创建QueryWrapper查询部门下的员工 + QueryWrapper empWrapper = new QueryWrapper().eq(id != null, "deptId", id); + List list = employeeService.list(empWrapper); + // 如果存在员工,抛出业务异常 + if (list != null && list.size() > 0) { + throw new BusinessException("操作失败,该部门正在使用"); + } + // 创建UpdateWrapper更新部门状态 + UpdateWrapper wrapper = new UpdateWrapper().set("state", Dept.STATE_BAN).eq("id", id); + // 执行更新操作 + super.update(wrapper); + } + + // 保存新的部门 + @Transactional + @Override + public void saveDept(Dept dept) { + // 判断部门是否已存在 + QueryWrapper wrapper = new QueryWrapper().eq(StringUtils.hasText(dept.getName()), "name", dept.getName()); + if (super.getOne(wrapper) != null) { + throw new BusinessException("操作失败,该部门已存在"); + } + // 设置部门状态为正常 + dept.setState(Dept.STATE_NORMAL); + // 执行保存操作 + super.save(dept); + } + + // 更新部门信息 + @Transactional + @Override + public void updateDept(Dept dept) { + // 如果部门状态为禁用,检查是否存在员工 + if (Dept.STATE_BAN.equals(dept.getState())) { + QueryWrapper empWrapper = new QueryWrapper().eq(dept.getId() != null, "deptId", dept.getId()); + List list = employeeService.list(empWrapper); + // 如果存在员工,抛出业务异常 + if (list != null && list.size() > 0) { + throw new BusinessException("操作失败,该部门正在使用"); + } + } + // 执行更新操作 + super.updateById(dept); + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailSaleRecordsServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailSaleRecordsServiceImpl.java new file mode 100644 index 0000000..f5ddb93 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailSaleRecordsServiceImpl.java @@ -0,0 +1,19 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.entity.domain.DetailSaleRecords; +import com.shanzhu.market.mapper.DetailSaleRecordsMapper; +import com.shanzhu.market.service.IDetailSaleRecordsService; +import org.springframework.stereotype.Service; + +// 定义一个详细销售记录服务实现类,继承自ServiceImpl并实现IDetailSaleRecordsService接口 +@Service +public class DetailSaleRecordsServiceImpl extends ServiceImpl implements IDetailSaleRecordsService { + // 继承自ServiceImpl的方法包括: + // save(DetailSaleRecords entity) - 插入一条记录 + // updateById(DetailSaleRecords entity) - 根据ID更新记录 + // removeById(Long id) - 根据ID删除记录 + // getById(Long id) - 根据ID查询记录 + // list(Wrapper queryWrapper) - 根据条件查询记录列表 + // 其他CRUD方法... +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailStoreGoodsServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailStoreGoodsServiceImpl.java new file mode 100644 index 0000000..c67f330 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/DetailStoreGoodsServiceImpl.java @@ -0,0 +1,344 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.*; +import com.shanzhu.market.entity.query.QueryDetailStoreGoods; +import com.shanzhu.market.entity.query.QueryDetailStoreGoodsOut; +import com.shanzhu.market.entity.vo.DetailStoreGoodsOutVo; +import com.shanzhu.market.entity.vo.DetailStoreGoodsVo; +import com.shanzhu.market.mapper.DetailStoreGoodsMapper; +import com.shanzhu.market.service.*; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +// 定义一个详细库存商品服务实现类,继承自ServiceImpl并实现IDetailStoreGoodsService接口 +@Service +public class DetailStoreGoodsServiceImpl extends ServiceImpl implements IDetailStoreGoodsService { + + // 注入Redis模板服务 + @Resource + private RedisTemplateService redisTemplateService; + + // 注入商品仓库服务 + @Resource + private IGoodsStoreService goodsStoreService; + + // 注入仓库服务 + @Resource + private IStoreService storeService; + + // 注入商品服务 + @Resource + private IGoodsService goodsService; + + // 注入供应商服务 + @Resource + private ISupplierService supplierService; + + // 保存入库记录 + @Override + public void saveIn(DetailStoreGoods detailStoreGoods, String token) { + // 从Redis中获取员工信息 + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + // 设置入库类型 + detailStoreGoods.setType(DetailStoreGoods.TYPE_IN); + // 设置状态为正常 + detailStoreGoods.setState(DetailStoreGoods.STATE_NORMAL); + // 设置创建人ID + detailStoreGoods.setCreateid(employee.getId()); + // 设置创建人名称 + detailStoreGoods.setCreateby(employee.getNickName()); + // 设置唯一标识码 + detailStoreGoods.setCn(IdWorker.getIdStr()); + // 设置创建时间 + detailStoreGoods.setCreateTime(new Date()); + // 设置状态1为正常 + detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); + // 将商品入库到指定仓库 + goodsStoreService.goodsInStore(detailStoreGoods.getGoodsId(), detailStoreGoods.getGoodsNum(), detailStoreGoods.getStoreId()); + // 获取供应商信息 + Supplier supplier = supplierService.getById(detailStoreGoods.getSupplierId()); + // 设置供应商名称 + detailStoreGoods.setSupplierName(supplier.getName()); + // 保存入库记录 + super.save(detailStoreGoods); + } + + // 分页查询入库记录 + @Override + public Page queryPageByQoIn(QueryDetailStoreGoods qo) { + // 创建分页对象 + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + Page page1 = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + // 创建查询条件 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.likeRight(StringUtils.hasText(qo.getCn()), "cn", qo.getCn()); + wrapper.like(StringUtils.hasText(qo.getGoodsName()), "goods_name", qo.getGoodsName()); + wrapper.eq(StringUtils.hasText(qo.getState1()), "state1", qo.getState1()); + wrapper.ge(StringUtils.hasText(qo.getStartCreateTime()), "create_time", qo.getStartCreateTime()); + wrapper.le(StringUtils.hasText(qo.getEndCreateTime()), "create_time", qo.getEndCreateTime()); + wrapper.eq("type", DetailStoreGoods.TYPE_IN); + // 执行分页查询 + super.page(page, wrapper); + // 获取查询结果 + List records = page.getRecords(); + if (records == null || records.size() <= 0) { + page1.setTotal(0L); + } + // 转换为视图对象列表 + List list = new ArrayList<>(); + for (DetailStoreGoods record : records) { + DetailStoreGoodsVo vo = new DetailStoreGoodsVo(); + BeanUtils.copyProperties(record, vo); + Store store = storeService.getById(record.getStoreId()); + if (store != null) { + vo.setStoreName(store.getName()); + } + list.add(vo); + } + // 设置分页结果 + page1.setRecords(list); + page1.setTotal(page.getTotal()); + return page1; + } + + // 删除入库记录 + @Override + public void delIn(String cn) { + // 创建更新条件 + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.set("state1", DetailStoreGoods.STATE1_DEL); + wrapper.eq("cn", cn); + // 执行更新操作 + super.update(wrapper); + } + + // 分页查询出库记录 + @Override + public Page queryPageByQoOut(QueryDetailStoreGoodsOut qo) { + // 创建分页对象 + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + Page page1 = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + // 创建查询条件 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.likeRight(StringUtils.hasText(qo.getCn()), "cn", qo.getCn()); + wrapper.like(StringUtils.hasText(qo.getGoodsName()), "goods_name", qo.getGoodsName()); + wrapper.ge(StringUtils.hasText(qo.getStartCreateTime()), "create_time", qo.getStartCreateTime()); + wrapper.le(StringUtils.hasText(qo.getEndCreateTime()), "create_time", qo.getEndCreateTime()); + wrapper.eq("type", DetailStoreGoods.TYPE_OUT); + wrapper.eq(StringUtils.hasText(qo.getState()), "state", qo.getState()); + wrapper.eq(StringUtils.hasText(qo.getState1()), "state1", qo.getState1()); + // 执行分页查询 + super.page(page, wrapper); + // 获取查询结果 + List records = page.getRecords(); + if (records == null || records.size() <= 0) { + page1.setTotal(0L); + } + // 转换为视图对象列表 + List list = new ArrayList<>(); + for (DetailStoreGoods record : records) { + DetailStoreGoodsOutVo vo = new DetailStoreGoodsOutVo(); + BeanUtils.copyProperties(record, vo); + Store store = storeService.getById(record.getStoreId()); + if (store != null) { + vo.setStoreName(store.getName()); + } + list.add(vo); + } + // 设置分页结果 + page1.setRecords(list); + page1.setTotal(page.getTotal()); + return page1; + } +} + + @Override + public Map initOutOptions() { + // 初始化商品和仓库选项 + Set goodsIds = new HashSet<>(); + Set storeIds = new HashSet<>(); + // 创建查询条件,查询剩余数量大于0的商品仓库记录 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.gt("residue_num", 0L); + List list = goodsStoreService.list(wrapper); + // 如果没有找到记录,抛出业务异常 + if (list == null || list.size() == 0) { + throw new BusinessException("库存中没有存放商品"); + } + // 遍历查询结果,收集商品ID和仓库ID + for (GoodsStore goodsStore : list) { + goodsIds.add(goodsStore.getGoodsId()); + storeIds.add(goodsStore.getStoreId()); + } + // 创建结果Map + Map map = new HashMap<>(); + List> goodsList = new ArrayList<>(); + List> storeList = new ArrayList<>(); + // 根据商品ID列表查询商品信息 + List goods = goodsService.listByIds(goodsIds); + // 将商品信息转换为Map并添加到goodsList + for (Goods good : goods) { + Map goodsMap = new HashMap<>(); + goodsMap.put("id", good.getId()); + goodsMap.put("name", good.getName()); + goodsList.add(goodsMap); + } + // 根据仓库ID列表查询仓库信息 + List stores = storeService.listByIds(storeIds); + // 将仓库信息转换为Map并添加到storeList + for (Store store : stores) { + Map storeMap = new HashMap<>(); + storeMap.put("id", store.getId()); + storeMap.put("name", store.getName()); + storeList.add(storeMap); + } + // 将商品和仓库列表放入结果Map + map.put("goods", goodsList); + map.put("stores", storeList); + return map; + } + + @Override + public List> changeOutGoods(Long gid) { + // 根据商品ID查询剩余数量大于0的商品仓库记录 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("goods_id", gid); + wrapper.gt("residue_num", 0L); + List list = goodsStoreService.list(wrapper); + Set storeIds = new HashSet<>(); + // 收集仓库ID + for (GoodsStore goodsStore : list) { + storeIds.add(goodsStore.getStoreId()); + } + // 根据仓库ID列表查询仓库信息 + List stores = storeService.listByIds(storeIds); + List> storeList = new ArrayList<>(); + // 将仓库信息转换为Map并添加到storeList + for (Store store : stores) { + Map map = new HashMap<>(); + map.put("id", store.getId()); + map.put("name", store.getName()); + storeList.add(map); + } + return storeList; + } + + @Override + public List> changeOutStore(Long storeId) { + // 根据仓库ID查询剩余数量大于0的商品仓库记录 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("store_id", storeId); + wrapper.gt("residue_num", 0L); + List list = goodsStoreService.list(wrapper); + Set goodsIds = new HashSet<>(); + // 收集商品ID + for (GoodsStore goodsStore : list) { + goodsIds.add(goodsStore.getGoodsId()); + } + // 根据商品ID列表查询商品信息 + List goodsList = goodsService.listByIds(goodsIds); + List> goodsVo = new ArrayList<>(); + // 将商品信息转换为Map并添加到goodsVo + for (Goods goods : goodsList) { + Map map = new HashMap<>(); + map.put("id", goods.getId()); + map.put("name", goods.getName()); + goodsVo.add(map); + } + return goodsVo; + } + + @Override + public DetailStoreGoodsOutVo queryOutGoods(Long goodsId, Long storeId) { + // 根据商品ID和仓库ID查询商品仓库记录 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("goods_id", goodsId); + wrapper.eq("store_id", storeId); + GoodsStore goodsStore = goodsStoreService.getOne(wrapper); + // 创建出库记录视图对象 + DetailStoreGoodsOutVo vo = new DetailStoreGoodsOutVo(); + // 复制商品仓库记录属性到视图对象 + BeanUtils.copyProperties(goodsStore, vo); + // 设置剩余数量 + vo.setGoodsNum(goodsStore.getResidueNum()); + // 根据商品ID查询商品信息 + Goods goods = goodsService.getById(goodsId); + // 设置商品名称 + vo.setGoodsName(goods.getName()); + return vo; + } + + @Override + public void saveOut(DetailStoreGoods detailStoreGoods, String token) { + // 从Redis中获取员工信息 + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + // 设置出库类型 + detailStoreGoods.setType(DetailStoreGoods.TYPE_OUT); + // 设置状态1为正常 + detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); + // 设置创建人ID + detailStoreGoods.setCreateid(employee.getId()); + // 设置创建人名称 + detailStoreGoods.setCreateby(employee.getNickName()); + // 设置唯一标识码 + detailStoreGoods.setCn(IdWorker.getIdStr()); + // 设置创建时间 + detailStoreGoods.setCreateTime(new Date()); + + // 创建查询条件,查询商品仓库记录 + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + + GoodsStore goodsStore = goodsStoreService.getOne(goodsStoreQueryWrapper); + // 计算剩余数量 + long num = goodsStore.getResidueNum() - detailStoreGoods.getGoodsNum(); + + // 创建更新条件,更新商品仓库记录 + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + if (DetailStoreGoods.STATE_EXPIRY.equals(detailStoreGoods.getState())) { + // 过期处理 + detailStoreGoods.setState(DetailStoreGoods.STATE_EXPIRY); + if (num >= 0) { + goodsStoreUpdateWrapper.set("residue_num", num); + } else { + goodsStoreUpdateWrapper.set("residue_num", 0L); + detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); + } + } else { + // 出库到货架上 + detailStoreGoods.setState(DetailStoreGoods.STATE_NORMAL); + // 根据商品ID查询商品信息 + Goods goods = goodsService.getById(detailStoreGoods.getGoodsId()); + // 创建更新条件,更新商品记录 + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper().eq("id", goods.getId()); + if (num >= 0) { + goodsStoreUpdateWrapper.set("residue_num", num); + goodsUpdateWrapper.set("residue_num", goods.getResidueNum() == null ? detailStoreGoods.getGoodsNum() : goods.getResidueNum() + detailStoreGoods.getGoodsNum()); + } else { + goodsStoreUpdateWrapper.set("residue_num", 0L); + goodsUpdateWrapper.set("residue_num", goods.getResidueNum() == null ? goodsStore.getResidueNum() : goods.getResidueNum() + goodsStore.getResidueNum()); + detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); + } + // 更新商品记录 + goodsService.update(goodsUpdateWrapper); + } + // 更新商品仓库记录 + goodsStoreService.update(goodsStoreUpdateWrapper); + // 保存出库记录 + super.save(detailStoreGoods); + } diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/EmployeeServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/EmployeeServiceImpl.java new file mode 100644 index 0000000..cbdad9a --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/EmployeeServiceImpl.java @@ -0,0 +1,296 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.constants.RedisKeys; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.Dept; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Role; +import com.shanzhu.market.entity.query.QueryDept; +import com.shanzhu.market.entity.query.QueryEditPwd; +import com.shanzhu.market.entity.query.QueryEmp; +import com.shanzhu.market.entity.vo.DetailEmpVo; +import com.shanzhu.market.entity.vo.EditEmpVo; +import com.shanzhu.market.entity.vo.InformationVo; +import com.shanzhu.market.mapper.EmployeeMapper; +import com.shanzhu.market.service.IDeptService; +import com.shanzhu.market.service.IEmployeeService; +import com.shanzhu.market.service.IRoleService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +// 定义一个员工服务实现类,继承自ServiceImpl并实现IEmployeeService接口 +@Service +public class EmployeeServiceImpl extends ServiceImpl implements IEmployeeService { + + // 注入Redis模板服务 + @Resource + private RedisTemplateService redisTemplateService; + + // 注入部门服务 + @Resource + private IDeptService deptService; + + // 注入角色服务 + @Resource + private IRoleService roleService; + + // 修改员工密码 + @Override + public void edit_pwd(QueryEditPwd editPwd, String token) { + // 获取缓存中的登录员工信息 + String str = redisTemplateService.getCacheObject(token); + Employee employee = JSONObject.parseObject(str, Employee.class); + // 如果员工ID为1,抛出业务异常,该账户不能被修改 + if (employee.getId() == 1L) { + throw new BusinessException("该账户不能被修改"); + } + // 比对用户名是否一致,如果不一致抛出业务异常 + if (!employee.getUsername().equals(editPwd.getUsername())) { + throw new BusinessException("没有权限修改其他人的密码"); + } + // 比对旧密码是否输入正确,如果不正确抛出业务异常 + if (!employee.getPassword().equals(editPwd.getOldPwd())) { + throw new BusinessException("原密码输入有误"); + } + // 比对新密码和旧密码是否一致,如果一致抛出业务异常 + if (editPwd.getOldPwd().equals(editPwd.getNewPwd())) { + throw new BusinessException("新密码和旧密码一致"); + } + // 创建更新条件,更新密码 + UpdateWrapper wrapper = new UpdateWrapper().set("password", editPwd.getNewPwd()) + .eq("phone", editPwd.getUsername()); + super.update(wrapper); + } + + // 分页查询员工列表 + @Transactional + @Override + public Page pageByQo(QueryEmp qo) { + // 创建分页对象 + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + // 创建查询条件 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.hasText(qo.getUsername()), "phone", qo.getUsername()) + .eq(StringUtils.hasText(qo.getAge()), "age", qo.getAge()) + .like(StringUtils.hasText(qo.getNickName()), "nick_name", qo.getNickName()) + .like(StringUtils.hasText(qo.getAddress()), "address", qo.getAddress()) + .eq(StringUtils.hasText(qo.getSex()), "sex", qo.getSex()) + .ne("id", 1L) + .eq(qo.getDeptId() != null, "deptId", qo.getDeptId()); + // 执行分页查询 + super.page(page, wrapper); + // 补全部门信息 + List depts = deptService.listByQo(new QueryDept()); + List records = page.getRecords(); + if (records != null) { + for (Employee record : records) { + if (depts != null) { + for (Dept dept : depts) { + if (dept.getId() == record.getDeptId()) { + record.setDeptName(dept.getName()); + break; + } + } + } + } + } + return page; + } + + // 获取员工详细信息 + @Override + public DetailEmpVo detail(Long uid) { + // 创建详细员工视图对象 + DetailEmpVo vo = new DetailEmpVo(); + // 查询员工信息 + Employee employee = super.getById(uid); + // 复制员工信息到视图对象 + BeanUtils.copyProperties(employee, vo); + + // 补全角色信息 + Set roleNames = new HashSet<>(); + if (employee.getIsAdmin() == true) { + // 查询所有角色 + List list = roleService.list(); + for (Role role : list) { + roleNames.add(role.getName()); + } + } else { + // 查询员工的角色信息 + Set roles = roleService.queryByEid(uid); + for (Role role : roles) { + roleNames.add(role.getName()); + } + } + // 设置角色名称集合 + vo.setRoleNames(roleNames); + return vo; + } + + // 保存新员工 + @Override + public void saveEmp(Employee employee, String token) { + // 校验参数是否有误 + if (!StringUtils.hasLength(employee.getPassword())) { + employee.setPassword(Employee.DEFAULT_PWD); + } + if (!StringUtils.hasLength(employee.getUsername())) { + throw new BusinessException("手机号不能为空"); + } + if (!StringUtils.hasLength(employee.getIdCard())) { + throw new BusinessException("身份证号不能为空"); + } + if (employee.getAge() == null) { + employee.setAge(18); + } else if (employee.getAge() < 0 || employee.getAge() > 120) { + throw new BusinessException("年龄值有误"); + } + // 校验用户是否已注册 + QueryWrapper wrapper = new QueryWrapper().eq("phone", employee.getUsername()); + Employee one = super.getOne(wrapper); + if (one != null) { + throw new BusinessException("系统中已存在该账户"); + } + // 设置员工状态为正常 + employee.setState(Employee.STATE_NORMAL); + if (!StringUtils.hasText(employee.getSex())) { + employee.setSex(Employee.SEX_MEN); + } + if (!StringUtils.hasText(employee.getHeadImg())) { + employee.setHeadImg(Employee.DEFAULT_HEAD_IMG); + } + // 设置创建时间 + employee.setCreateTime(new Date()); + // 设置是否为管理员 + employee.setIsAdmin(false); + // 设置创建人名称 + String nickName = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class).getNickName(); + employee.setCreateby(nickName); + // 保存员工信息 + super.save(employee); + } +} + + @Override + public EditEmpVo editbtn(Long uid) { + // 创建编辑员工视图对象 + EditEmpVo vo = new EditEmpVo(); + // 根据ID查询员工信息 + Employee employee = super.getById(uid); + // 复制员工信息到视图对象 + BeanUtils.copyProperties(employee, vo); + return vo; + } + + @Override + public void updateEmp(Employee employee, String token) { + // 如果员工状态为离职且是管理员,抛出业务异常 + if (Employee.STATE_DEL.equals(employee.getState())) { + if (employee.getIsAdmin()) { + throw new BusinessException("不可以给系统管理者办理离职"); + } + } + // 创建查询条件,检查是否存在相同的用户名或身份证号 + QueryWrapper wrapper = new QueryWrapper().having("id!=" + employee.getId()) + .eq(StringUtils.hasText(employee.getUsername()), "phone", employee.getUsername()) + .or() + .eq(StringUtils.hasText(employee.getIdCard()), "id_card", employee.getIdCard()); + List list = super.list(wrapper); + // 如果存在相同的用户名或身份证号,抛出业务异常 + if (list != null && list.size() > 0) { + throw new BusinessException("系统已存在相同的用户名或身份证号"); + } + + // 如果员工状态为离职,设置离职时间 + if (Employee.STATE_DEL.equals(employee.getState())) { + employee.setLeaveTime(new Date()); + } else { + // 否则,设置创建时间和创建人名称 + employee.setCreateTime(new Date()); + String nickName = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class).getNickName(); + employee.setCreateby(nickName); + } + // 更新员工信息 + super.updateById(employee); + } + + @Override + public void deactivate(Long id) { + // 根据ID查询员工信息 + Employee employee = super.getById(id); + // 如果员工是管理员,抛出业务异常 + if (employee.getIsAdmin()) { + throw new BusinessException("不可以给系统管理者办理离职"); + } + // 如果员工已经是离职状态,抛出业务异常 + if (Employee.STATE_DEL.equals(employee.getState())) { + throw new BusinessException("已是离职状态"); + } + // 创建更新条件,设置员工状态为离职 + UpdateWrapper wrapper = new UpdateWrapper().set("state", Employee.STATE_DEL).eq("id", id); + // 更新员工状态 + super.update(wrapper); + } + + @Transactional + @Override + public void resetPwd(Long eid, String code) { + // 根据ID查询员工信息 + Employee employee = super.getById(eid); + // 如果员工ID为1,抛出业务异常,该账户不可被修改 + if (employee.getId() == 1L) { + throw new BusinessException("该账户不可被修改"); + } + // 如果员工是管理员,检查密钥是否正确 + if (employee.getIsAdmin()) { + if (code.equals("123456")) { + // 密钥正确,重置密码为默认密码 + UpdateWrapper wrapper = new UpdateWrapper().set("password", Employee.DEFAULT_PWD).eq("id", eid); + super.update(wrapper); + } else { + // 密钥错误,抛出业务异常 + throw new BusinessException("密钥错误"); + } + } else { + // 如果员工不是管理员,检查密钥是否正确 + if (code.equals("456789")) { + // 密钥正确,重置密码为默认密码 + UpdateWrapper wrapper = new UpdateWrapper().set("password", Employee.DEFAULT_PWD).eq("id", eid); + super.update(wrapper); + } else { + // 密钥错误,抛出业务异常 + throw new BusinessException("密钥错误"); + } + } + // 删除相关Redis缓存 + redisTemplateService.deleteObject(RedisKeys.LOGIN_USER.join(employee.getUsername())); + redisTemplateService.deleteObject(RedisKeys.DISABLEUSER.join(employee.getUsername())); + redisTemplateService.deleteObject(RedisKeys.LOGIN_ERRO_PWDNUM.join(employee.getUsername())); + } + + @Override + public InformationVo information(String token) { + // 从Redis中获取登录员工信息 + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + // 获取员工详细信息 + DetailEmpVo detail = detail(employee.getId()); + // 创建信息视图对象 + InformationVo vo = new InformationVo(); + // 复制详细信息到视图对象 + BeanUtils.copyProperties(detail, vo); + return vo; + } diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/ExchangePointProductsServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/ExchangePointProductsServiceImpl.java new file mode 100644 index 0000000..d631e42 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/ExchangePointProductsServiceImpl.java @@ -0,0 +1,244 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.*; +import com.shanzhu.market.entity.query.QueryExchangePointProductsRecords; +import com.shanzhu.market.mapper.ExchangePointProductsMapper; +import com.shanzhu.market.service.IExchangePointProductsService; +import com.shanzhu.market.service.IGoodsService; +import com.shanzhu.market.service.IMemberService; +import com.shanzhu.market.service.IPointProductsService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +// 定义一个积分兑换商品服务实现类,继承自ServiceImpl并实现IExchangePointProductsService接口 +@Service +public class ExchangePointProductsServiceImpl extends ServiceImpl implements IExchangePointProductsService { + + // 注入会员服务 + @Resource + private IMemberService memberService; + + // 注入积分商品服务 + @Resource + private IPointProductsService pointProductsService; + + // 注入Redis模板服务 + @Resource + private RedisTemplateService redisTemplateService; + + // 注入商品服务 + @Resource + private IGoodsService goodsService; + + // 根据会员ID查询可兑换的商品 + @Override + public List> queryPointProductBymemberId(Long memberId) { + // 根据会员ID查询会员信息 + Member member = memberService.getById(memberId); + + // 创建查询条件 + QueryWrapper pointProductsQueryWrapper = new QueryWrapper(); + if (memberId == null) { + // 如果会员ID为空,查询所有积分大于0的商品 + pointProductsQueryWrapper.gt("integral", 0L); + } else { + // 否则,查询积分小于等于会员积分的商品 + pointProductsQueryWrapper.le("integral", member.getIntegral()); + } + + // 查询积分商品列表 + List list = pointProductsService.list(pointProductsQueryWrapper); + List> mapArrayList = new ArrayList<>(); + for (PointProducts pointProducts : list) { + // 创建Map对象,存储商品ID和名称 + Map map = new HashMap<>(); + map.put("id", pointProducts.getGoodsId()); + map.put("name", pointProducts.getGoodsName()); + mapArrayList.add(map); + } + return mapArrayList; + } + + // 根据商品ID查询积分商品 + @Override + public PointProducts queryPointProductByGoodsId(Long goodsId) { + // 根据商品ID查询积分商品 + PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper().eq(goodsId != null, "goods_id", goodsId)); + return pointProducts; + } + + // 保存积分兑换商品记录 + @Override + public void saveExchangePointProductRecords(ExchangePointProducts exchangePointProducts, String token) { + // 从Redis中获取员工信息 + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + // 生成订单号 + exchangePointProducts.setCn(IdWorker.getIdStr()); + // 设置更新人名称 + exchangePointProducts.setUpdateby(employee.getNickName()); + // 设置更新人ID + exchangePointProducts.setUpdateId(employee.getId()); + // 设置更新时间 + exchangePointProducts.setUpdateTime(new Date()); + // 设置状态为正常 + exchangePointProducts.setState(ExchangePointProducts.STATE_NORMAL); + // 修改会员的积分 + Member member = memberService.getById(exchangePointProducts.getMemberId()); + member.setIntegral(member.getIntegral() - exchangePointProducts.getIntegral()); + memberService.updateById(member); + // 保存积分兑换商品记录 + super.save(exchangePointProducts); + } + + // 查询可选项的会员电话 + @Override + public List> queryOptionsMemberPhone() { + // 创建查询条件 + QueryWrapper wrapper = new QueryWrapper() + .select("member_id") + .eq("state", ExchangePointProducts.STATE_NORMAL) + .groupBy("member_id"); + // 查询积分兑换商品记录 + List list = super.list(wrapper); + List memberIds = new ArrayList<>(); + for (ExchangePointProducts exchangePointProducts : list) { + // 收集会员ID + memberIds.add(exchangePointProducts.getMemberId()); + } + if (memberIds == null || memberIds.size() <= 0) { + return null; + } + // 根据会员ID列表查询会员信息 + List members = memberService.listByIds(memberIds); + List> vos = new ArrayList<>(); + for (Member member : members) { + // 创建Map对象,存储会员ID和电话 + Map map = new HashMap<>(); + map.put("id", member.getId()); + map.put("name", member.getPhone()); + vos.add(map); + } + + return vos; + } + + // 删除积分兑换商品记录 + @Override + public void delExchangePointProducts(String cn) { + // 创建更新条件 + UpdateWrapper wrapper = new UpdateWrapper() + .set("state", ExchangePointProducts.STATE_DEL) + .eq("cn", cn); + // 更新记录状态为删除 + super.update(wrapper); + } + + // 分页查询积分兑换商品记录 + @Override + public Page queryPageByQoExchangePointProducts(QueryExchangePointProductsRecords qo) { + // 创建分页对象 + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + // 创建查询条件 + QueryWrapper queryWrapper = new QueryWrapper() + .eq("state", ExchangePointProducts.STATE_NORMAL) + .eq(qo.getMemberId() != null, "member_id", qo.getMemberId()) + .ge(StringUtils.hasText(qo.getStartTime()), "update_time", qo.getStartTime()) + .le(StringUtils.hasText(qo.getEndTime()), "update_time", qo.getEndTime()) + .likeRight(StringUtils.hasText(qo.getCn()), "cn", qo.getCn()); + // 执行分页查询 + super.page(page, queryWrapper); + for (ExchangePointProducts record : page.getRecords()) { + // 补全会员电话 + Member member = memberService.getById(record.getMemberId()); + record.setMemberPhone(member.getPhone()); + // 补全商品封面URL和名称 + Goods goods = goodsService.getById(record.getGoodsId()); + record.setGoodsCoverUrl(goods.getCoverUrl()); + record.setGoodsName(goods.getName()); + } + return page; + } + + // 查询可选项的积分商品 + @Override + public List> queryOptionsPointProducts() { + // 创建查询条件 + QueryWrapper wrapper = new QueryWrapper() + .eq("state", PointProducts.STATE_NORMAL); + // 查询积分商品列表 + List list = pointProductsService.list(wrapper); + List> vos = new ArrayList<>(); + for (PointProducts pointProducts : list) { + // 创建Map对象,存储商品ID和名称 + Map map = new HashMap<>(); + map.put("id", pointProducts.getGoodsId()); + map.put("name", pointProducts.getGoodsName()); + vos.add(map); + } + return vos; + } +} + + @Override + public List> queryOptionsMember() { + // 创建结果列表 + List> vos = new ArrayList<>(); + // 创建查询条件,按ID分组且状态为正常 + QueryWrapper wrapper = new QueryWrapper() + .groupBy("id") + .eq("state", Member.STATE_NORMAL); + // 查询会员列表 + List list = memberService.list(wrapper); + for (Member member : list) { + // 创建Map对象存储会员信息 + Map map = new HashMap<>(); + map.put("id", member.getId()); + map.put("name", member.getPhone()); + // 将Map对象添加到结果列表 + vos.add(map); + } + return vos; + } + + @Override + public List> queryMemberByGoodsId(Long goodsId) { + // 创建会员列表 + List members = new ArrayList<>(); + // 创建查询条件,状态为正常 + QueryWrapper memberQueryWrapper = new QueryWrapper(); + memberQueryWrapper.eq("state", Member.STATE_NORMAL); + if (goodsId != null) { + // 如果商品ID不为空,查询积分商品信息 + PointProducts pointProducts = pointProductsService.getOne(new QueryWrapper() + .eq("goods_id", goodsId) + .eq("state", PointProducts.STATE_NORMAL)); + // 设置查询条件,会员积分大于等于积分商品所需积分 + memberQueryWrapper.ge("integral", pointProducts.getIntegral()); + } else { + // 如果商品ID为空,查询积分大于0的会员 + memberQueryWrapper.gt("integral", 0); + } + // 根据查询条件获取会员列表 + members = memberService.list(memberQueryWrapper); + // 创建结果列表 + List> vos = new ArrayList<>(); + for (Member member : members) { + // 创建Map对象存储会员信息 + Map map = new HashMap<>(); + map.put("id", member.getId()); + map.put("name", member.getPhone()); + // 将Map对象添加到结果列表 + vos.add(map); + } + return vos; + } diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsCategoryServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsCategoryServiceImpl.java new file mode 100644 index 0000000..96505e1 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsCategoryServiceImpl.java @@ -0,0 +1,140 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.GoodsCategory; +import com.shanzhu.market.entity.query.QueryGoodsCategory; +import com.shanzhu.market.mapper.GoodsCategoryMapper; +import com.shanzhu.market.service.IGoodsCategoryService; +import com.shanzhu.market.service.IGoodsService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +// 定义一个商品类别服务实现类,继承自ServiceImpl并实现IGoodsCategoryService接口 +@Service +public class GoodsCategoryServiceImpl extends ServiceImpl implements IGoodsCategoryService { + + // 注入商品服务 + @Resource + private IGoodsService goodsService; + + // 更新商品类别信息 + @Override + public void updateGoodsCategory(GoodsCategory goodsCategory) { + // 创建查询条件,检查是否存在相同名称和状态的商品类别(排除当前ID) + QueryWrapper queryWrapper = new QueryWrapper() + .ne("id", goodsCategory.getId()) + .eq("name", goodsCategory.getName()) + .eq("state", goodsCategory.getState()); + GoodsCategory category = super.getOne(queryWrapper); + if (GoodsCategory.STATE_BAN.equals(goodsCategory.getState())) { + // 如果状态为禁用,检查是否有上架商品正在使用该分类 + QueryWrapper wrapper = new QueryWrapper().eq("category_id", goodsCategory.getId()).eq("state", Goods.STATE_UP); + List list = goodsService.list(wrapper); + if (list != null && list.size() > 0) { + // 如果存在上架商品,抛出业务异常 + throw new BusinessException("该分类正在被某个上架商品使用,请解除关系后,再操作"); + } + if (category != null) { + // 如果存在相同名称和状态的商品类别,删除该类别 + super.removeById(category); + } + } else { + if (category != null) { + // 如果存在相同名称和状态的商品类别,抛出业务异常 + throw new BusinessException("该分类已经存在"); + } + } + + // 更新商品类别信息 + super.updateById(goodsCategory); + } + + // 禁用商品类别 + @Override + public void deactivate(Long cid) { + // 检查是否有上架商品正在使用该分类 + QueryWrapper wrapper = new QueryWrapper() + .eq("category_id", cid) + .eq("state", Goods.STATE_UP); + List list = goodsService.list(wrapper); + if (list != null && list.size() > 0) { + // 如果存在上架商品,抛出业务异常 + throw new BusinessException("该分类正在被某个上架商品使用,请解除关系后,再操作"); + } + // 查看删除中是否有相同名称的分类 + GoodsCategory goodsCategory = super.getById(cid); + QueryWrapper queryWrapper = new QueryWrapper() + .ne("id", cid) + .eq("name", goodsCategory.getName()) + .eq("state", GoodsCategory.STATE_BAN); + GoodsCategory one = super.getOne(queryWrapper); + if (one != null) { + // 如果存在相同名称的禁用分类,删除该分类 + super.remove(new QueryWrapper() + .eq("name", goodsCategory.getName()) + .eq("state", GoodsCategory.STATE_BAN)); + } + // 更新商品类别状态为禁用 + super.update(new UpdateWrapper().eq("id", cid).set("state", GoodsCategory.STATE_BAN)); + } + + // 分页查询商品类别 + @Override + public Page queryPageByQo(QueryGoodsCategory qo) { + // 创建分页对象 + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + // 创建查询条件 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + wrapper.eq(StringUtils.hasText(qo.getState()), "state", qo.getState()); + // 执行分页查询 + return super.page(page, wrapper); + } + + // 保存商品类别 + @Override + public void saveGoodsCategory(GoodsCategory category) { + // 判断数据库是否保存过这个分类信息 + QueryWrapper wrapper = new QueryWrapper() + .eq(StringUtils.hasText(category.getName()), "name", category.getName()) + .eq("state", GoodsCategory.STATE_NORMAL); + GoodsCategory category1 = super.getOne(wrapper); + if (category1 != null) { + // 如果存在相同名称和状态的商品类别,抛出业务异常 + throw new BusinessException("该分类已被创建"); + } + // 设置商品类别状态为正常 + category.setState(GoodsCategory.STATE_NORMAL); + // 保存商品类别信息 + super.save(category); + } + + // 获取所有正常状态的商品类别 + @Override + public List> getNormalCategoryAll() { + // 创建结果列表 + List> list = new ArrayList<>(); + // 查询所有正常状态的商品类别 + List categories = super.list(new QueryWrapper().eq("state", GoodsCategory.STATE_NORMAL)); + for (GoodsCategory category : categories) { + // 创建Map对象存储商品类别信息 + Map map = new HashMap<>(); + map.put("id", category.getId()); + map.put("name", category.getName()); + // 将Map对象添加到结果列表 + list.add(map); + } + return list; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsServiceImpl.java new file mode 100644 index 0000000..d85927f --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsServiceImpl.java @@ -0,0 +1,609 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.constants.RedisKeys; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.*; +import com.shanzhu.market.entity.query.*; +import com.shanzhu.market.entity.vo.*; +import com.shanzhu.market.mapper.GoodsMapper; +import com.shanzhu.market.service.*; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +// 定义一个商品服务实现类,继承自ServiceImpl并实现IGoodsService接口 +@Service +public class GoodsServiceImpl extends ServiceImpl implements IGoodsService { + + // 注入Redis模板服务 + @Resource + private RedisTemplateService redisTemplateService; + + // 注入商品类别服务 + @Resource + private IGoodsCategoryService goodsCategoryService; + + // 注入仓库服务 + @Resource + private IStoreService storeService; + + // 注入详细仓库商品服务 + @Resource + private IDetailStoreGoodsService detailStoreGoodsService; + + // 注入商品仓库服务 + @Resource + private IGoodsStoreService goodsStoreService; + + // 注入商品Mapper + @Resource + private GoodsMapper goodsMapper; + + // 分页查询商品列表 + @Override + public Page queryPageByQo(QueryGoods qo) { + // 创建分页对象 + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + // 创建结果列表 + ArrayList volists = new ArrayList<>(); + // 创建分页对象 + Page goodsPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + // 创建查询条件 + QueryWrapper wrapper = new QueryWrapper() + .eq(qo.getId() != null, "id", qo.getId()) + .eq(qo.getSellPrice() != null, "sell_price", qo.getSellPrice()) + .like(StringUtils.hasText(qo.getName()), "name", qo.getName()) + .eq(qo.getCategoryId() != null, "category_id", qo.getCategoryId()) + .eq(StringUtils.hasText(qo.getState()), "state", qo.getState()) + .ge(StringUtils.hasText(qo.getOperateStartTime()), "update_time", qo.getOperateStartTime()) + .le(StringUtils.hasText(qo.getOperateEndTime()), "update_time", qo.getOperateEndTime()); + // 执行分页查询 + super.page(goodsPage, wrapper); + for (Goods record : goodsPage.getRecords()) { + // 创建商品列表视图对象 + GoodsListVo vo = new GoodsListVo(); + // 复制商品信息到视图对象 + BeanUtils.copyProperties(record, vo); + // 获取商品剩余库存数量 + Long residueNum = storeService.getResidueNumByGoodsId(record.getId()); + // 设置商品剩余库存数量 + vo.setResidueStoreNum(residueNum); + // 将视图对象添加到结果列表 + volists.add(vo); + } + // 设置分页结果 + page.setRecords(volists); + page.setTotal(goodsPage.getTotal()); + return page; + } + + // 保存商品信息 + @Override + public void saveGoods(Goods goods, String token) { + // 从Redis中获取员工信息 + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + // 设置商品状态为上架 + goods.setState(Goods.STATE_UP); + // 设置创建人名称 + goods.setCreateby(employee.getNickName()); + // 设置更新人名称 + goods.setUpdateby(employee.getNickName()); + // 设置创建时间 + goods.setCreateTime(new Date()); + // 设置更新时间 + goods.setUpdateTime(new Date()); + if (goods.getCategoryId() != null) { + // 从缓存中获取分类的信息 + if (redisTemplateService.hasKey(RedisKeys.GOODS_CATEGORY.join())) { + Map categoryCache = redisTemplateService.getCacheMap(RedisKeys.GOODS_CATEGORY.join()); + GoodsCategory category = (GoodsCategory) categoryCache.get(goods.getCategoryId().toString()); + if (category != null) { + // 设置商品类别名称 + goods.setCategoryName(category.getName()); + } + } else { + // 从数据库中获取分类信息 + GoodsCategory category = goodsCategoryService.getById(goods.getCategoryId()); + if (category != null) { + // 设置商品类别名称 + goods.setCategoryName(category.getName()); + } + } + } + // 保存商品信息 + super.save(goods); + } + + // 上架或下架商品 + @Transactional + @Override + public void upOrdown(Long gid, String state, String token) { + // 创建更新条件 + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("id", gid); + if (Goods.STATE_UP.equals(state)) { + // 从Redis中获取员工信息 + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + // 设置商品状态为下架 + wrapper.set("state", Goods.STATE_DOWN); + // 获取商品信息 + Goods goods = super.getById(gid); + // 创建查询条件,获取商品仓库信息 + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper().eq("goods_id", gid); + List list = goodsStoreService.list(goodsStoreQueryWrapper); + for (GoodsStore goodsStore : list) { + // 创建详细仓库商品对象 + DetailStoreGoods detailStoreGoods = new DetailStoreGoods(); + // 设置创建人ID + detailStoreGoods.setCreateid(employee.getId()); + // 设置创建人名称 + detailStoreGoods.setCreateby(employee.getNickName()); + // 设置创建时间 + detailStoreGoods.setCreateTime(new Date()); + // 设置商品ID + detailStoreGoods.setGoodsId(gid); + // 设置商品名称 + detailStoreGoods.setGoodsName(goods.getName()); + // 设置类型为入库 + detailStoreGoods.setType(DetailStoreGoods.TYPE_IN); + // 设置状态1为待处理 + detailStoreGoods.setState1(DetailStoreGoods.STATE1_UNTREATED); + // 设置状态为下架 + detailStoreGoods.setState(DetailStoreGoods.STATE_DOWN); + // 生成订单号 + detailStoreGoods.setCn(IdWorker.getIdStr()); + // 设置信息 + detailStoreGoods.setInfo(goods.getName() + "下架处理"); + // 设置商品数量 + detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); + // 设置未处理数量 + detailStoreGoods.setUntreatedNum(goodsStore.getResidueNum()); + // 设置仓库ID + detailStoreGoods.setStoreId(goodsStore.getStoreId()); + // 保存详细仓库商品信息 + detailStoreGoodsService.save(detailStoreGoods); + } + } else { + // 设置剩余数量为0 + wrapper.set("residue_num", 0); + // 设置商品状态为上架 + wrapper.set("state", Goods.STATE_UP); + // 创建查询条件,获取待处理的下架记录 + QueryWrapper queryWrapper = new QueryWrapper().eq("goods_id", gid) + .eq("state", DetailStoreGoods.STATE_DOWN) + .eq("state1", DetailStoreGoods.STATE1_UNTREATED); + // 删除待处理的下架记录 + detailStoreGoodsService.remove(queryWrapper); + } + // 更新商品信息 + super.update(wrapper); + } + + // 更新商品信息 + @Override + public void updateGoods(Goods goods, String token) { + // 从Redis中获取员工信息 + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + // 设置更新人名称 + goods.setUpdateby(employee.getNickName()); + // 设置更新时间 + goods.setUpdateTime(new Date()); + if (goods.getCategoryId() != null) { + // 从缓存中获取分类的信息 + if (redisTemplateService.hasKey(RedisKeys.GOODS_CATEGORY.join())) { + Map categoryCache = redisTemplateService.getCacheMap(RedisKeys.GOODS_CATEGORY.join()); + GoodsCategory category = (GoodsCategory) categoryCache.get(goods.getCategoryId().toString()); + if (category != null) { + // 设置商品类别名称 + goods.setCategoryName(category.getName()); + } + } else { + // 从数据库中获取分类信息 + GoodsCategory category = goodsCategoryService.getById(goods.getCategoryId()); + if (category != null) { + // 设置商品类别名称 + goods.setCategoryName(category.getName()); + } + } + } + // 更新商品信息 + super.updateById(goods); + } +} + + @Override + public List> selected_goodsAll() { + // 创建查询条件,查询状态为上架的商品 + QueryWrapper wrapper = new QueryWrapper().eq("state", Goods.STATE_UP); + // 查询商品列表 + List list = super.list(wrapper); + if (list == null || list.size() == 0) { + // 如果商品列表为空,返回null + return null; + } + // 创建结果列表 + List> listVo = new ArrayList<>(); + for (Goods goods : list) { + // 创建Map对象存储商品信息 + Map map = new HashMap<>(); + map.put("id", goods.getId()); + map.put("name", goods.getName()); + // 将Map对象添加到结果列表 + listVo.add(map); + } + // 返回结果列表 + return listVo; + } + + @Override + public List> selected_storeAll() { + // 创建结果列表 + List> list = new ArrayList<>(); + // 创建查询条件,查询状态为正常的仓库 + QueryWrapper wrapper = new QueryWrapper().eq("state", Store.STATE_NORMAL); + // 查询仓库列表 + List list1 = storeService.list(wrapper); + if (list1 != null && list1.size() > 0) { + for (Store store : list1) { + // 创建Map对象存储仓库信息 + Map map = new HashMap<>(); + map.put("id", store.getId()); + map.put("name", store.getName()); + // 将Map对象添加到结果列表 + list.add(map); + } + } + // 返回结果列表 + return list; + } + + @Override + public void returnGoods(DetailStoreGoods detailStoreGoods, String token) { + // 从Redis中获取员工信息 + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + // 获取商品信息 + Goods goods = super.getById(detailStoreGoods.getGoodsId()); + + /*补全入库订单信息*/ + // 生成订单号 + detailStoreGoods.setCn(IdWorker.getIdStr()); + // 设置创建人名称 + detailStoreGoods.setCreateby(employee.getNickName()); + // 设置创建人ID + detailStoreGoods.setCreateid(employee.getId()); + // 设置类型为入库 + detailStoreGoods.setType(DetailStoreGoods.TYPE_IN); + if (DetailStoreGoods.STATE_EXPIRY.equals(detailStoreGoods.getState())) { + // 如果是过期,将入库订单的state1修改成2:待处理的状态 + detailStoreGoods.setState1(DetailStoreGoods.STATE1_UNTREATED); + } else { + // 否则,设置状态1为正常 + detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); + } + + /*获取仓库的信息*/ + // 创建查询条件,获取仓库信息 + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + GoodsStore goodsStore = goodsStoreService.getOne(goodsStoreQueryWrapper); + if (goodsStore == null) { + // 如果仓库信息不存在,创建新的仓库信息 + goodsStore = new GoodsStore(); + goodsStore.setGoodsId(detailStoreGoods.getGoodsId()); + goodsStore.setStoreId(detailStoreGoods.getStoreId()); + // 获取仓库名称 + Store store = storeService.getById(detailStoreGoods.getStoreId()); + goodsStore.setStoreName(store.getName()); + goodsStore.setInNum(0L); + goodsStore.setResidueNum(0L); + // 保存仓库信息 + goodsStoreService.save(goodsStore); + } + long num = goods.getResidueNum() - detailStoreGoods.getGoodsNum(); + if (num >= 0) { + // 货架还有商品数量 + /*更改商品信息*/ + // 更新商品剩余数量 + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() + .set("residue_num", num) + .eq("id", detailStoreGoods.getGoodsId()); + super.update(goodsUpdateWrapper); + /*更改商品库存信息*/ + // 更新仓库剩余数量 + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .set("residue_num", goodsStore.getResidueNum() + detailStoreGoods.getGoodsNum()) + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + goodsStoreService.update(goodsStoreUpdateWrapper); + // 设置未处理数量 + detailStoreGoods.setUntreatedNum(detailStoreGoods.getGoodsNum()); + } else { + // 货架没有商品数量 + /*更改商品信息*/ + // 更新商品剩余数量为0 + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() + .set("residue_num", 0) + .eq("id", detailStoreGoods.getGoodsId()); + super.update(goodsUpdateWrapper); + /*更改商品库存信息*/ + // 更新仓库剩余数量 + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .set("residue_num", goodsStore.getResidueNum() + goods.getResidueNum()) + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + goodsStoreService.update(goodsStoreUpdateWrapper); + // 设置未处理数量为商品剩余数量 + detailStoreGoods.setGoodsNum(goods.getResidueNum()); + detailStoreGoods.setUntreatedNum(goods.getResidueNum()); + } + // 保存入库订单信息 + detailStoreGoodsService.save(detailStoreGoods); + } + + @Override + public Page queryPageGoodsStore(QueryGoodsStore qo) { + // 创建分页对象 + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + // 创建分页对象 + Page goodsPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + // 创建查询条件,查询状态为上架的商品 + QueryWrapper wrapper = new QueryWrapper().eq("state", Goods.STATE_UP) + .like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + // 执行分页查询 + super.page(goodsPage, wrapper); + if (goodsPage.getTotal() <= 0) { + // 如果没有查询到商品,返回空分页结果 + page.setRecords(new ArrayList<>()); + page.setTotal(0); + return page; + } + // 创建结果列表 + List list = new ArrayList<>(); + for (Goods record : goodsPage.getRecords()) { + // 创建商品仓库视图对象 + GoodsStoreVo vo = new GoodsStoreVo(); + // 复制商品信息到视图对象 + BeanUtils.copyProperties(record, vo); + // 将视图对象添加到结果列表 + list.add(vo); + } + // 设置分页结果 + page.setTotal(goodsPage.getTotal()); + page.setRecords(list); + return page; + } + + @Override + public GoodsStoreVo queryGoodsStoreById(Long id) { + // 创建商品仓库视图对象 + GoodsStoreVo vo = new GoodsStoreVo(); + // 获取商品信息 + Goods goods = super.getById(id); + // 复制商品信息到视图对象 + BeanUtils.copyProperties(goods, vo); + // 返回视图对象 + return vo; + } + + + @Override + public void updateInventory(GoodsStoreVo vo) { + if (vo.getInventory()==null){ + vo.setInventory(0L); + } + if(vo.getShelves()==null){ + vo.setShelves(0L); + } + UpdateWrapper updateWrapper = new UpdateWrapper() + .set("inventory",vo.getInventory()) + .set("shelves",vo.getShelves()) + .eq("id",vo.getId()); + super.update(updateWrapper); + + } + + @Override + public Page queryPageNoticeIn(QueryNoticeIn qo) { + Page noticeInPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + List list = new ArrayList<>(); + int start=(qo.getCurrentPage()-1)*qo.getPageSize(); + Map map = new HashMap<>(); + map.put("start",start); + map.put("size",qo.getPageSize()); + if (StringUtils.hasLength(qo.getName())){ + map.put("name",qo.getName()); + } + int totalCount=goodsMapper.getNoticeInTotalCount(map); + list=goodsMapper.getNoticePageList(map); + noticeInPage.setTotal(totalCount); + noticeInPage.setRecords(list); + return noticeInPage; + } + + @Override + public Page queryPageNoticeOut_shelves(QueryNoticeOut qo) { + Page noticeOutPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + List list = new ArrayList<>(); + int start=(qo.getCurrentPage()-1)*qo.getPageSize(); + Map map = new HashMap<>(); + map.put("start",start); + map.put("size",qo.getPageSize()); + if (StringUtils.hasLength(qo.getName())){ + map.put("name",qo.getName()); + } + int totalCount=goodsMapper.getNoticeOutShelvesTotalCount(map); + list=goodsMapper.getNoticeShelvesPageList(map); + noticeOutPage.setTotal(totalCount); + noticeOutPage.setRecords(list); + return noticeOutPage; + } + + @Override + public void saveOut_shelves(DetailStoreGoods detailStoreGoods,String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + QueryWrapper detailStoreGoodsQueryWrapper = new QueryWrapper().eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + GoodsStore goodsStore = goodsStoreService.getOne(detailStoreGoodsQueryWrapper); + if (goodsStore==null || goodsStore.getResidueNum()==null ||goodsStore.getResidueNum()==0){ + throw new BusinessException("出库失败,库存中没有该商品的库存"); + } + /*补全出库单的信息*/ + detailStoreGoods.setCn(IdWorker.getIdStr()); + detailStoreGoods.setCreateby(employee.getNickName()); + detailStoreGoods.setCreateid(employee.getId()); + detailStoreGoods.setType(DetailStoreGoods.TYPE_OUT); + detailStoreGoods.setState1(DetailStoreGoods.STATE1_NORMAL); + long num = goodsStore.getResidueNum() - detailStoreGoods.getGoodsNum(); + Goods goods = super.getById(detailStoreGoods.getGoodsId()); + if (num>=0){ + /*修改货架商品数量*/ + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() + .set("residue_num", goods.getResidueNum() == null ? detailStoreGoods.getGoodsNum() : goods.getResidueNum() + detailStoreGoods.getGoodsNum()) + .eq("id",detailStoreGoods.getGoodsId()); + super.update(goodsUpdateWrapper); + /*修改商品库存数量*/ + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .set("residue_num", goodsStore.getResidueNum() - detailStoreGoods.getGoodsNum()) + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + goodsStoreService.update(goodsStoreUpdateWrapper); + /*添加出库记录*/ + detailStoreGoodsService.save(detailStoreGoods); + }else { + /*修改货架商品数量*/ + UpdateWrapper goodsUpdateWrapper = new UpdateWrapper() + .set("residue_num", goods.getResidueNum() == null ? goodsStore.getResidueNum() : goods.getResidueNum() + goodsStore.getResidueNum()) + .eq("id",detailStoreGoods.getGoodsId()); + super.update(goodsUpdateWrapper); + /*修改商品库存数量*/ + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .set("residue_num",0L) + .eq("goods_id", detailStoreGoods.getGoodsId()) + .eq("store_id", detailStoreGoods.getStoreId()); + goodsStoreService.update(goodsStoreUpdateWrapper); + /*添加出库记录*/ + detailStoreGoods.setGoodsNum(goodsStore.getResidueNum()); + detailStoreGoodsService.save(detailStoreGoods); + } + + + } + + @Override + public SalesStatisticsVo queryPageStatisticSaleByQo(QueryStatisticSale qo) { + Long total=goodsMapper.queryPageStatisticSaleByQo(qo.getName()); + SalesStatisticsVo vo = new SalesStatisticsVo(); + vo.setTotal(total); + QueryWrapper wrapper = new QueryWrapper().eq("state", Goods.STATE_UP) + .like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + super.page(page,wrapper); + Page saleGoodsVoPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + saleGoodsVoPage.setTotal(page.getTotal()); + List saleGoodsVos = new ArrayList<>(); + for (Goods record : page.getRecords()) { + SaleGoodsVo goodsVo = new SaleGoodsVo(); + goodsVo.setGoodsId(record.getId()); + goodsVo.setGoodsName(record.getName()); + goodsVo.setSalesVolume(record.getSalesVolume()); + goodsVo.setPercentage(total); + goodsVo.setCoverUrl(record.getCoverUrl()); + saleGoodsVos.add(goodsVo); + } + saleGoodsVoPage.setRecords(saleGoodsVos); + vo.setVos(saleGoodsVoPage); + return vo; + } + + @Override + public Page queryPageNoticeOut_untreated(QueryNoticeOut qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + List vos = new ArrayList<>(); + QueryWrapper queryWrapper = new QueryWrapper().eq("state1", DetailStoreGoods.STATE1_UNTREATED); + queryWrapper.eq(StringUtils.hasText(qo.getState()),"state",qo.getState()); + queryWrapper.like(StringUtils.hasText(qo.getName()),"goods_name",qo.getName()); + queryWrapper.eq("type",DetailStoreGoods.TYPE_IN); + queryWrapper.orderByDesc("create_time"); + List list = detailStoreGoodsService.list(queryWrapper); + for (DetailStoreGoods detailStoreGoods : list) { + NoticeInNotNormalVo vo = new NoticeInNotNormalVo(); + vo.setCn(detailStoreGoods.getCn()); + vo.setCreateTime(detailStoreGoods.getCreateTime()); + vo.setGoodsId(detailStoreGoods.getGoodsId()); + vo.setGoodsName(detailStoreGoods.getGoodsName()); + vo.setUntreatedNum(detailStoreGoods.getUntreatedNum()); + vo.setState(detailStoreGoods.getState()); + vo.setStoreId(detailStoreGoods.getStoreId()); + Store store = storeService.getById(detailStoreGoods.getStoreId()); + vo.setStoreName(store.getName()); + Goods goods = super.getById(detailStoreGoods.getGoodsId()); + vo.setCoverUrl(goods.getCoverUrl()); + vos.add(vo); + + } + page.setRecords(vos); + return page; + } + + @Override + public void resolveOutUntreatedForm(NoticeInNotNormalVo vo, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + QueryWrapper queryWrapper = new QueryWrapper() + .eq("cn", vo.getCn()) + .eq("state1", DetailStoreGoods.STATE1_UNTREATED); + DetailStoreGoods detailStoreGoods = detailStoreGoodsService.getOne(queryWrapper); + if (detailStoreGoods==null){ + throw new BusinessException("该订单已被处理"); + } + + long num = detailStoreGoods.getUntreatedNum() - vo.getUntreatedNum(); + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() + .eq("goods_id", vo.getGoodsId()) + .eq("store_id", vo.getStoreId()); + GoodsStore goodsStore = goodsStoreService.getOne(goodsStoreQueryWrapper); + if (num>0){ + //未处理完毕 + UpdateWrapper updateWrapper = new UpdateWrapper() + .eq("cn", detailStoreGoods.getCn()) + .set("untreated_num",num); + detailStoreGoodsService.update(updateWrapper); + //改变库存 + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .eq("goods_id", vo.getGoodsId()) + .eq("store_id", vo.getStoreId()) + .set("residue_num",goodsStore.getResidueNum()-vo.getUntreatedNum()); + goodsStoreService.update(goodsStoreUpdateWrapper); + }else { + //处理完毕 + UpdateWrapper updateWrapper = new UpdateWrapper() + .eq("cn", detailStoreGoods.getCn()) + .set("untreated_num",0L) + .set("state1",DetailStoreGoods.STATE1_NORMAL) + .set("createid",employee.getId()) + .set("createby",employee.getNickName()) + .set("create_time",new Date()) + .set("type",DetailStoreGoods.TYPE_OUT); + detailStoreGoodsService.update(updateWrapper); + //改变库存 + UpdateWrapper goodsStoreUpdateWrapper = new UpdateWrapper() + .eq("goods_id", vo.getGoodsId()) + .eq("store_id", vo.getStoreId()) + .set("residue_num",0L); + goodsStoreService.update(goodsStoreUpdateWrapper); + } + + } + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsStoreServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsStoreServiceImpl.java new file mode 100644 index 0000000..3af8f04 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/GoodsStoreServiceImpl.java @@ -0,0 +1,144 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.GoodsStore; +import com.shanzhu.market.entity.domain.Store; +import com.shanzhu.market.entity.query.QueryDetailStorageSituation; +import com.shanzhu.market.entity.query.QueryStorageSituation; +import com.shanzhu.market.entity.vo.DetailStorageSituationVo; +import com.shanzhu.market.entity.vo.StorageSituationVo; +import com.shanzhu.market.mapper.GoodsStoreMapper; +import com.shanzhu.market.service.IGoodsService; +import com.shanzhu.market.service.IGoodsStoreService; +import com.shanzhu.market.service.IStoreService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +@Transactional +public class GoodsStoreServiceImpl extends ServiceImpl implements IGoodsStoreService { + + @Resource + private GoodsStoreMapper goodsStoreMapper; + + @Resource + private IGoodsService goodsService; + + @Resource + private IStoreService storeService; + + @Override + public Long storeUsed(Long id) { + return goodsStoreMapper.storeUsed(id); + } + + @Override + public Long getResidueNumByGoodsId(Long id) { + return goodsStoreMapper.getResidueNumByGoodsId(id); + } + + @Override + public void goodsInStore(Long goodsId, Long goodsNum, Long storeId) { + QueryWrapper wrapper = new QueryWrapper().eq("goods_id", goodsId).eq("store_id", storeId); + GoodsStore goodsStore1 = super.getOne(wrapper); + if (goodsStore1 != null) { + goodsStoreMapper.goodsInStore(goodsId, goodsNum, storeId); + } else { + GoodsStore goodsStore = new GoodsStore(); + goodsStore.setGoodsId(goodsId); + goodsStore.setInNum(goodsNum); + goodsStore.setResidueNum(goodsNum); + goodsStore.setStoreId(storeId); + Store one = storeService.getById(storeId); + goodsStore.setStoreName(one.getName()); + super.save(goodsStore); + } + } + + @Override + public void goodsOutStore(Long goodsId, Long goodsNum, Long storeId) { + goodsStoreMapper.goodsOutStore(goodsId, goodsNum, storeId); + } + + @Override + public Map queryPageStorageSituationByQo(QueryStorageSituation qo) { + HashMap map = new HashMap<>(); + Long totalStoreNum=goodsStoreMapper.totalStoreNum(); + map.put("totalStoreNum",totalStoreNum!=null?totalStoreNum:0L); + Page goodsStorePage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper().select("store_id,store_name,SUM(residue_num) residue_num") + .like(StringUtils.hasText(qo.getName()), "store_name", qo.getName()) + .groupBy("store_id", "store_name"); + super.page(goodsStorePage,goodsStoreQueryWrapper); + Page situationVoPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + List vos = new ArrayList<>(); + for (GoodsStore record : goodsStorePage.getRecords()) { + StorageSituationVo vo = new StorageSituationVo(); + vo.setStoreId(record.getStoreId()); + vo.setStoreName(record.getStoreName()); + vo.setResidueNum(record.getResidueNum()); + vos.add(vo); + } + situationVoPage.setRecords(vos); + situationVoPage.setTotal(goodsStorePage.getTotal()); + map.put("page",situationVoPage); + return map; + } + + @Override + public Map queryStoreGoodsByStoreId(QueryDetailStorageSituation qo) { + Map map = new HashMap<>(); + Long totalStoreNum1=goodsStoreMapper.getTotalStoreNum1(qo.getStoreId()); + map.put("totalStoreNum1",totalStoreNum1);//该仓库的存储量 + + QueryWrapper wrapper = new QueryWrapper() + .gt("residue_num",0) + .eq("store_id", qo.getStoreId()); + List list = super.list(wrapper); + Set goodsIds = new HashSet<>(); + for (GoodsStore goodsStore : list) { + goodsIds.add(goodsStore.getGoodsId()); + } + if (goodsIds.size()<=0){ + throw new BusinessException("该仓库没有存放任何的商品"); + } + List goodsList = goodsService.listByIds(goodsIds); + List> optionsStoreGoods = new ArrayList<>(); + for (Goods goods : goodsList) { + Map options = new HashMap<>(); + options.put("id",goods.getId()); + options.put("name",goods.getName()); + optionsStoreGoods.add(options); + } + map.put("optionsStoreGoods",optionsStoreGoods);//选择框 + Page goodsStorePage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper goodsStoreQueryWrapper = new QueryWrapper() + .eq("store_id",qo.getStoreId()) + .gt("residue_num",0) + .eq(qo.getId()!=null,"goods_id", qo.getId()); + super.page(goodsStorePage,goodsStoreQueryWrapper); + + Page voPage = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + voPage.setTotal(goodsStorePage.getTotal()); + List detailStorageSituationVoList = new ArrayList<>(); + for (GoodsStore record : goodsStorePage.getRecords()) { + DetailStorageSituationVo vo = new DetailStorageSituationVo(); + vo.setGoodsId(record.getGoodsId()); + vo.setResidueNum(record.getResidueNum()); + vo.setPercentage(totalStoreNum1); + vo.setGoodsName(goodsService.getById(record.getGoodsId()).getName()); + detailStorageSituationVoList.add(vo); + } + voPage.setRecords(detailStorageSituationVoList); + map.put("vos",voPage);//表格数据 + return map; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/LoginServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/LoginServiceImpl.java new file mode 100644 index 0000000..7425e66 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/LoginServiceImpl.java @@ -0,0 +1,142 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.constants.RedisKeys; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.entity.domain.Role; +import com.shanzhu.market.mapper.EmployeeMapper; +import com.shanzhu.market.service.ILoginService; +import com.shanzhu.market.service.IMenuService; +import com.shanzhu.market.service.IRoleService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class LoginServiceImpl extends ServiceImpl implements ILoginService { + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IRoleService roleService; + + @Resource + private IMenuService menuService; + + @Override + public Map login(String username, String password) { + //根据电话号码查询用户 + QueryWrapper wrapper = new QueryWrapper().eq("phone", username).eq("state",Employee.STATE_NORMAL); + Employee employee = super.getOne(wrapper); + if (employee == null) { + throw new BusinessException("请先注册..."); + } + //判断账户是否被冻结 + RedisKeys disableuser = RedisKeys.DISABLEUSER; + + if (redisTemplateService.hasKey(disableuser.join(username))){ + throw new BusinessException("该账户已被冻结,请"+disableuser.getTimeout()+"小时后再来登录"); + } + //比对密码是否一致 + if (!password.equals(employee.getPassword())) { + //密码错误 + RedisKeys loginErroPwdnum = RedisKeys.LOGIN_ERRO_PWDNUM; + int errornum=redisTemplateService.hasKey(loginErroPwdnum.join(username))? (Integer) redisTemplateService.getCacheObject(loginErroPwdnum.join(username))+1:1; + if (errornum==6){ + redisTemplateService.setCacheObject(disableuser.join(username),true,disableuser.getTimeout(),disableuser.getTimeUnit()); + redisTemplateService.deleteObject(loginErroPwdnum.join(username)); + throw new BusinessException("账户被冻结6小时"); + }else{ + redisTemplateService.setCacheObject(loginErroPwdnum.join(username),errornum,loginErroPwdnum.getTimeout(),loginErroPwdnum.getTimeUnit()); + throw new BusinessException("账号或密码错误,错误剩余"+(6-errornum)+"次"); + } + } + //登录成功 + //删除密码错误次数缓存 + redisTemplateService.deleteObject(RedisKeys.LOGIN_ERRO_PWDNUM.join(username)); + if (employee.getIsAdmin()){ + //超级管理员处理方式 + List menus=menuService.findAll(); + employee.setMenus(menus); + }else { + //非超级管理员处理 + Set roles=roleService.queryByEid(employee.getId()); + if (roles!=null&&roles.size()!=0){ + employee.setRoles(roles); + Set rids=new HashSet<>(); + for (Role role : roles) { + rids.add(role.getId()); + } + List menus=menuService.queryByRids(rids); + employee.setMenus(menus); + } + } + //生成token的key和value + String key= RedisKeys.LOGIN_USER.join(username); + String value= JSONObject.toJSONString(employee); + //存入redis缓存中 + redisTemplateService.setCacheObject(key,value,RedisKeys.LOGIN_USER.getTimeout(),RedisKeys.LOGIN_USER.getTimeUnit()); + Map map = new HashMap(); + map.put("token",key); + map.put("employee",employee); + return map; + } + + @Override + public void exit(String token) { + if (redisTemplateService.hasKey(token)){ + String str = redisTemplateService.getCacheObject(token); + Employee employee = JSONObject.parseObject(str, Employee.class); + String login_error_pwdnum = RedisKeys.LOGIN_ERRO_PWDNUM.join(employee.getUsername()); + redisTemplateService.deleteObject(token); + redisTemplateService.deleteObject(login_error_pwdnum); + } + } + + @Override + public void logout(String token, String content) { + if ("本人确定注销".equals(content)){ + //判断是否是系统管理员 + String str = redisTemplateService.getCacheObject(token); + Employee employee = JSONObject.parseObject(str, Employee.class); + if (employee.getIsAdmin()){ + throw new BusinessException("系统管理员账户不可被注销"); + } + //清除角色员工关系 + roleService.clearEmpPermission(employee.getId()); + //清除缓存数据 + redisTemplateService.deleteObject(token); + super.remove(new QueryWrapper().eq("phone",employee.getUsername())); + + }else { + throw new BusinessException("内容输入有误"); + } + } + + @Override + public List empMenu(String token) { + String str = redisTemplateService.getCacheObject(token); + Employee employee = JSONObject.parseObject(str, Employee.class); + return employee.getMenus(); + } + + @Override + public Map checkedToken(String token) { + Map map = new HashMap<>(); + if (redisTemplateService.hasKey(token)){ + map.put("employee",JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class)); + }else { + map.put("employee",null); + } + map.put("token",token); + + return map; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MemberServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MemberServiceImpl.java new file mode 100644 index 0000000..77b4888 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MemberServiceImpl.java @@ -0,0 +1,79 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Member; +import com.shanzhu.market.entity.query.QueryMember; +import com.shanzhu.market.mapper.MemberMapper; +import com.shanzhu.market.service.IMemberService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +@Service +public class MemberServiceImpl extends ServiceImpl implements IMemberService { + + @Override + public Page queryPageByQo(QueryMember qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.hasText(qo.getPhone()), "phone", qo.getPhone()); + wrapper.like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + wrapper.eq(StringUtils.hasText(qo.getState()), "state", qo.getState()); + super.page(page, wrapper); + return page; + } + + @Override + public void delMember(Long id) { + UpdateWrapper wrapper = new UpdateWrapper() + .set("state", Member.STATE_BAN) + .set("integral", 0L) + .eq("id", id); + super.update(wrapper); + } + + @Override + public void saveMember(Member member) { + QueryWrapper wrapper = new QueryWrapper().eq("phone", member.getPhone()).eq("state", Member.STATE_NORMAL); + Member one = super.getOne(wrapper); + if (one != null) { + throw new BusinessException("该用户已注册过"); + } + member.setPassword(Member.DEFAULT_PWD); + member.setState(Member.STATE_NORMAL); + member.setIntegral(0L); + super.save(member); + } + + @Override + public Member queryMemberById(Long id) { + return super.getById(id); + } + + @Override + public void updateMember(Member member) { + if (Member.STATE_NORMAL.equals(member.getState())) { + QueryWrapper wrapper = new QueryWrapper().eq("phone", member.getPhone()) + .ne("id",member.getId()) + .eq("state", Member.STATE_NORMAL); + Member one = super.getOne(wrapper); + if (one != null) { + throw new BusinessException("已被录入"); + } + } + super.updateById(member); + } + + @Override + public Member queryMemberByPhone(String phone) { + QueryWrapper wrapper = new QueryWrapper().eq("phone", phone).eq("state", Member.STATE_NORMAL); + Member one = super.getOne(wrapper); + if (one==null){ + throw new BusinessException("该会员不存在"); + } + return one; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MenuServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MenuServiceImpl.java new file mode 100644 index 0000000..d4945c2 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/MenuServiceImpl.java @@ -0,0 +1,168 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.entity.query.MenuQuery; +import com.shanzhu.market.mapper.MenuMapper; +import com.shanzhu.market.service.IMenuService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class MenuServiceImpl extends ServiceImpl implements IMenuService { + + @Resource + private MenuMapper menuMapper; + + @Override + public List findAll() { + + //查询目录菜单 + // select * from t_menu where type='0' and state='0' + QueryWrapper wrapper1 = new QueryWrapper().eq("type", Menu.TYPE_CATALOGUE).eq("state", Menu.STATE_NORMAL); + List catalogs = super.list(wrapper1); + if (catalogs.isEmpty()) { + return null; + } + //得到目录下的菜单信息 + for (Menu catalog : catalogs) { + //select * from t_menu where type='1' and parent_id=#{id} and state='0' + QueryWrapper wrapper2 = new QueryWrapper().eq("type", Menu.TYPE_MENU).eq("state", Menu.STATE_NORMAL) + .eq("parent_id", catalog.getId()); + List menus = super.list(wrapper2); + //获取菜单下的按钮 + for (Menu menu : menus) { + //select * from t_menu where type='2' and parent_id=#{id} and state='0' + QueryWrapper wrapper3 = new QueryWrapper().eq("type", Menu.TYPE_BUTTON).eq("state", Menu.STATE_NORMAL) + .eq("parent_id", menu.getId()); + List buttons = super.list(wrapper3); + if (!buttons.isEmpty()) { + menu.setChildren(buttons); + } + } + catalog.setChildren(menus); + } + return catalogs; + } + + @Override + public List queryByRids(Set rids) { + List result = menuMapper.queryByRids(rids); + if (result.isEmpty()) { + return null; + } + //目录 + Set catalogs = new HashSet<>(); + //菜单 + Set menus = new HashSet<>(); + //按钮 + Set buttons = new HashSet<>(); + + Iterator iterator1 = result.iterator(); + while (iterator1.hasNext()) { + Menu item = iterator1.next(); + switch (item.getType()) { + case Menu.TYPE_CATALOGUE: + catalogs.add(item); + break; + case Menu.TYPE_MENU: + menus.add(item); + break; + case Menu.TYPE_BUTTON: + buttons.add(item); + break; + } + iterator1.remove(); + } + + for (Menu catalog : catalogs) { + catalog.setChildren(new ArrayList<>()); + for (Menu menu : menus) { + menu.setChildren(new ArrayList<>()); + for (Menu button : buttons) { + //将按钮分配到对应的菜单下 + if (button.getParentId() == menu.getId()) { + menu.getChildren().add(button); + } + } + //将菜单分配到对应的目录下 + if (menu.getParentId() == catalog.getId()) { + catalog.getChildren().add(menu); + } + } + + } + List catalogues = new ArrayList<>(); + //去重 + for (Menu catalog : catalogs) { + catalogues.add(catalog); + } + return catalogues; + } + + @Override + public Page queryPageByQo(MenuQuery qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + //查询目录 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("type", Menu.TYPE_CATALOGUE); + wrapper.like(StringUtils.hasText(qo.getName()), "label", qo.getName()); + + Page page1 = super.page(page, wrapper); + //补全目录的子集 + List catalogs = page1.getRecords(); + if (catalogs == null || catalogs.isEmpty()) { + return page1; + } + /*补全目录下的菜单*/ + for (Menu catalog : catalogs) { + QueryWrapper wrapper_menu = new QueryWrapper() + .eq("type", Menu.TYPE_MENU) + .eq("parent_id", catalog.getId()); + List menus = super.list(wrapper_menu); + if (menus == null || menus.isEmpty()) { + continue; + } + /*补全菜单下的按钮*/ + for (Menu menu : menus) { + QueryWrapper wrapper_button = new QueryWrapper() + .eq("type", Menu.TYPE_BUTTON) + .eq("parent_id", menu.getId()); + List buttons = super.list(wrapper_button); + if (buttons == null || buttons.isEmpty()) { + continue; + } + menu.setChildren(buttons); + } + catalog.setChildren(menus); + } + return page1; + } + + @Override + public List listParentByIds(List ids) { + List parentIds = new ArrayList<>(); + ArrayList btnIds = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper().in("id", ids); + List list = super.list(wrapper); + if (list==null){ + return parentIds; + } + for (Menu menu : list) { + if (Menu.TYPE_MENU.equals(menu.getType())){ + //菜单 + parentIds.add(menu.getParentId()); + }else { + //按钮 + parentIds.add(menu.getParentId()); + btnIds.add(menu.getId()); + } + } + return parentIds; + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/PointProductsServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/PointProductsServiceImpl.java new file mode 100644 index 0000000..8239a41 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/PointProductsServiceImpl.java @@ -0,0 +1,95 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Goods; +import com.shanzhu.market.entity.domain.PointProducts; +import com.shanzhu.market.entity.query.QueryPointProducts; +import com.shanzhu.market.mapper.PointProductsMapper; +import com.shanzhu.market.service.IGoodsService; +import com.shanzhu.market.service.IPointProductsService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class PointProductsServiceImpl extends ServiceImpl implements IPointProductsService { + + @Resource + private IGoodsService goodsService; + + @Resource + private RedisTemplateService redisTemplateService; + + @Override + public Page queryPageByQo(QueryPointProducts qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper().like(StringUtils.hasText(qo.getName()), "goods_name", qo.getName()); + super.page(page, wrapper); + return page; + } + + @Override + public List> queryOptionGoods() { + QueryWrapper pointProductsQueryWrapper = new QueryWrapper().select("goods_id"); + List list = super.list(); + Set productGoodsIds = new HashSet<>(); + list.forEach(item -> { + productGoodsIds.add(item.getGoodsId()); + }); + QueryWrapper goodsQueryWrapper = new QueryWrapper() + .notIn(productGoodsIds.size() > 0, "id", productGoodsIds) + .eq("state", Goods.STATE_UP); + List goods = goodsService.list(goodsQueryWrapper); + ArrayList> options = new ArrayList<>(); + goods.forEach(item->{ + Map map = new HashMap<>(); + map.put("id",item.getId()); + map.put("name",item.getName()); + options.add(map); + }); + + return options; + } + + @Override + public void savePointGoods(PointProducts pointProducts,String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + QueryWrapper wrapper = new QueryWrapper().eq("goods_id", pointProducts.getGoodsId()); + PointProducts one = super.getOne(wrapper); + if (one!=null){ + throw new BusinessException("该商品已经是积分商品"); + } + pointProducts.setUpdateby(employee.getNickName()); + pointProducts.setUpdateTime(new Date()); + pointProducts.setUpdateId(employee.getId()); + pointProducts.setState(PointProducts.STATE_NORMAL); + super.save(pointProducts); + } + + @Override + public void updatePointGoods(PointProducts pointProducts, String token) { + Employee employee = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + pointProducts.setUpdateby(employee.getNickName()); + pointProducts.setUpdateTime(new Date()); + pointProducts.setUpdateId(employee.getId()); + UpdateWrapper updateWrapper = new UpdateWrapper().set("integral", pointProducts.getIntegral()).eq("goods_id", pointProducts.getGoodsId()); + super.update(updateWrapper); + } + + @Override + public void del(Long id) { + UpdateWrapper updateWrapper = new UpdateWrapper() + .set("state", PointProducts.STATE_DEL) + .eq("goods_id", id); + super.update(updateWrapper); + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/RoleServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/RoleServiceImpl.java new file mode 100644 index 0000000..b972514 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/RoleServiceImpl.java @@ -0,0 +1,274 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.Employee; +import com.shanzhu.market.entity.domain.Menu; +import com.shanzhu.market.entity.domain.Role; +import com.shanzhu.market.entity.query.RoleQuery; +import com.shanzhu.market.entity.vo.RolePermissonVo; +import com.shanzhu.market.mapper.RoleMapper; +import com.shanzhu.market.service.IEmployeeService; +import com.shanzhu.market.service.IMenuService; +import com.shanzhu.market.service.IRoleService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class RoleServiceImpl extends ServiceImpl implements IRoleService { + + @Resource + private RoleMapper roleMapper; + + @Resource + private IMenuService menuService; + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IEmployeeService employeeService; + + @Override + public Set queryByEid(Long eid) { + Set roles = roleMapper.queryByEid(eid); + return roles; + } + + @Override + public List listByQo(RoleQuery qo) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.hasText(qo.getName()), "name", qo.getName()); + wrapper.eq(StringUtils.hasText(qo.getState()), "state", qo.getState()); + wrapper.ne("id",Role.SYS_ID); + wrapper.ne("id",2L); + List list = super.list(wrapper); + return list; + } + + @Override + public void forbiddenRole(Long rid) { + Role role = super.getById(rid); + if (Role.SYS_ID==role.getId() || 2L==role.getId()) { + throw new BusinessException("不能停用系统拥有者"); + } + UpdateWrapper wrapper = new UpdateWrapper() + .set("state", Role.STATE_BAN) + .eq("id", rid); + super.update(wrapper); + } + + @Override + public void saveRole(Role role) { + if (role == null) { + throw new BusinessException("操作失败"); + } + if (StringUtils.hasText(role.getName())) { + //查询是否保存过 + Role role1 = super.getOne(new QueryWrapper().eq("name", role.getName())); + if (role1 != null) { + throw new BusinessException("操作失败,角色名重复"); + } else { + role.setState(Role.STATE_NORMAL); + super.save(role); + } + } else { + throw new BusinessException("角色名称格式有误"); + } + + } + + @Transactional + @Override + public RolePermissonVo checkPermissons(Long rid) { + RolePermissonVo vo = new RolePermissonVo(); + /*角色所拥有的菜单id集合*/ + List menuIds = new ArrayList<>(); + /*所有的菜单信息*/ + List menus1 = new ArrayList<>(); + //步骤1:查询所有的菜单信息 + List menus = menuService.findAll(); + if (menus == null) { + throw new BusinessException("授权功能还待上线..."); + } + //封装菜单信息 + for (Menu menu : menus) { + RolePermissonVo.RoleMenu roleMenu_catalogs = vo.getRoleMenu(); + roleMenu_catalogs.setValue(menu.getId()); + roleMenu_catalogs.setLabel(menu.getLabel()); + /*目录下的菜单*/ + List children = new ArrayList<>(); + //目录 + if (menu.getChildren() != null) { + for (Menu child : menu.getChildren()) { + //菜单 + RolePermissonVo.RoleMenu roleMenu_menu = vo.getRoleMenu(); + roleMenu_menu.setValue(child.getId()); + roleMenu_menu.setLabel(child.getLabel()); + List children1 = new ArrayList<>(); + if (child.getChildren() != null) { + for (Menu childChild : child.getChildren()) { + //按钮 + RolePermissonVo.RoleMenu roleMenu_button = vo.getRoleMenu(); + roleMenu_button.setValue(childChild.getId()); + roleMenu_button.setLabel(childChild.getLabel()); + children1.add(roleMenu_button); + } + roleMenu_menu.setChildren(children1); + } + children.add(roleMenu_menu); + } + roleMenu_catalogs.setChildren(children); + } + menus1.add(roleMenu_catalogs); + } + vo.setMenus(menus1); + + //步骤2:是否是系统管理员 + if (rid == Role.SYS_ID) { + //系统管理员 + //封装角色拥有的菜单id集合 + for (Menu menu : menus) { + menuIds.add(menu.getId()); + //目录 + if (menu.getChildren() != null) { + for (Menu child : menu.getChildren()) { + //菜单 + menuIds.add(child.getId()); + if (child.getChildren() != null) { + for (Menu childChild : child.getChildren()) { + //按钮 + menuIds.add(childChild.getId()); + } + } + + } + } + + } + vo.setMenuIds(menuIds); + } else { + //非系统管理员 + menuIds = roleMapper.getMenuIdByRid(rid); + vo.setMenuIds(menuIds); + } + return vo; + } + + @Transactional + @Override + public void saveRolePermissons(Long rid, Long[] menuIds) { + //判断是否是系统管理员 + if (rid == Role.SYS_ID || rid==2L) { + //系统管理员 + throw new BusinessException("系统管理员的权限不可操作"); + } else { + //非系统管理员 + //重新建立关系 + if (menuIds == null || menuIds.length == 0) { + return; + } else { + List ids = new ArrayList<>(); + for (Long menuId : menuIds) { + ids.add(menuId); + } + + Set totalIds = new HashSet<>(); + QueryWrapper qoWrapper = new QueryWrapper().in("id", ids); + List list1 = menuService.list(qoWrapper); + for (Menu menu : list1) { + //按钮 + if (menu.getParentId()!=null && Menu.TYPE_BUTTON.equals(menu.getType())){ + totalIds.add(menu.getId()); + QueryWrapper btnWrapper = new QueryWrapper().eq("id", menu.getParentId()) + .eq("type",Menu.TYPE_MENU); + Menu menu1 = menuService.getOne(btnWrapper); + totalIds.add(menu1.getId()); + totalIds.add(menu1.getParentId()); + } else if (menu.getParentId()!=null && Menu.TYPE_MENU.equals(menu.getType())){ + //菜单 + totalIds.add(menu.getId()); + totalIds.add(menu.getParentId()); + }else if (menu.getParentId()==null && Menu.TYPE_CATALOGUE.equals(menu.getType())){ + //目录 + totalIds.add(menu.getId()); + } + } + //清除关系 + roleMapper.clearRecordsByRid(rid); + List> list = new ArrayList<>(); + for (Long id : totalIds) { + Map map = new HashMap<>(); + map.put("rid", rid); + map.put("mid", id); + list.add(map); + } + roleMapper.saveRolePermissons(list); + } + } + + } + + @Override + public List> getRoleAll() { + List> list = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper().eq("state", Role.STATE_NORMAL).ne("id",Role.SYS_ID).ne("id",2L); + List roles = super.list(wrapper); + for (Role role : roles) { + Map map=new HashMap<>(); + map.put("id",role.getId()); + map.put("label",role.getName()); + list.add(map); + } + return list; + } + + @Override + public List queryRoleIdsByEid(Long eid) { + Employee emp = employeeService.getById(eid); + if (emp.getIsAdmin()){ + return roleMapper.queryRoleIdsAll(); + }else { + return roleMapper.queryRoleIdsByEid(eid); + } + } + + @Override + public void saveRoleEmp(Long eid, Long[] roleIds,String token) { + Employee emp = JSONObject.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + if (emp.getId()==eid){ + throw new BusinessException("无法为自己赋予职务"); + } + //查询用户的信息,判断是否是系统管理员 + Employee employee = employeeService.getById(eid); + if (employee.getIsAdmin()){ + throw new BusinessException("无法操作系统管理员的职务"); + } + /*根据员工编号清除关系*/ + roleMapper.clearRelationByEid(eid); + /*重新保存关系*/ + List> list=new ArrayList<>(); + for (Long roleId : roleIds) { + Map map = new HashMap<>(); + map.put("eid",eid); + map.put("rid",roleId); + list.add(map); + } + if (list.size()>0){ + roleMapper.reSaveRelation(list); + } + } + + @Override + public void clearEmpPermission(Long id) { + roleMapper.clearRelationByEid(id); + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SaleRecordsServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SaleRecordsServiceImpl.java new file mode 100644 index 0000000..309bdf5 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SaleRecordsServiceImpl.java @@ -0,0 +1,117 @@ +package com.shanzhu.market.service.impl; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.redis.service.RedisTemplateService; +import com.shanzhu.market.entity.domain.*; +import com.shanzhu.market.entity.query.QuerySaleRecords; +import com.shanzhu.market.mapper.SaleRecordsMapper; +import com.shanzhu.market.service.IDetailSaleRecordsService; +import com.shanzhu.market.service.IGoodsService; +import com.shanzhu.market.service.IMemberService; +import com.shanzhu.market.service.ISaleRecordsService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class SaleRecordsServiceImpl extends ServiceImpl implements ISaleRecordsService { + + @Resource + private IGoodsService goodsService; + + @Resource + private RedisTemplateService redisTemplateService; + + @Resource + private IDetailSaleRecordsService detailSaleRecordsService; + + @Resource + private IMemberService memberService; + + @Override + public List> getOptionSaleRecordsGoods() { + QueryWrapper wrapper = new QueryWrapper().gt("residue_num", 0L); + List list = goodsService.list(wrapper); + List> goodsList = new ArrayList<>(); + if (list != null && list.size() > 0) { + for (Goods goods : list) { + Map map = new HashMap<>(); + map.put("id", goods.getId()); + map.put("name", goods.getName()); + map.put("residueNum", goods.getResidueNum()); + goodsList.add(map); + } + } + return goodsList; + } + + @Override + public SaleRecords saveSaleRecords(SaleRecords saleRecords, String token) { + Employee employee = JSON.parseObject(redisTemplateService.getCacheObject(token), Employee.class); + saleRecords.setEid(employee.getId()); + saleRecords.setSellTime(new Date()); + saleRecords.setSellby(employee.getNickName()); + saleRecords.setState(SaleRecords.STATE_NORMAL); + for (DetailSaleRecords detailSaleRecord : saleRecords.getDetailSaleRecords()) { + detailSaleRecord.setSellCn(saleRecords.getCn()); + Goods goods = goodsService.getById(detailSaleRecord.getGoodsId()); + UpdateWrapper wrapper = new UpdateWrapper() + .set("sales_volume", goods.getSalesVolume() != null ? goods.getSalesVolume() + detailSaleRecord.getGoodsNum() : detailSaleRecord.getGoodsNum()) + .set("residue_num", goods.getResidueNum() - detailSaleRecord.getGoodsNum()) + .eq("id", goods.getId()); + goodsService.update(wrapper); + } + detailSaleRecordsService.saveBatch(saleRecords.getDetailSaleRecords()); + super.save(saleRecords); + if ("1".equals(saleRecords.getType())) { + //为会员增加积分 积分规则:积分=总金额*5%取整 + String s = saleRecords.getSellTotalmoney() * 0.05 + ""; + long integral = Long.parseLong(s.split("\\.")[0]); + QueryWrapper memberQueryWrapper = new QueryWrapper().eq("phone", saleRecords.getMemberPhone()); + Member member = memberService.getOne(memberQueryWrapper); + UpdateWrapper memberUpdateWrapper = new UpdateWrapper() + .set("integral", member.getIntegral() != null ? member.getIntegral() + + integral : integral) + .eq("phone", saleRecords.getMemberPhone()); + memberService.update(memberUpdateWrapper); + } + return saleRecords; + } + + @Override + public Page queryPageByQoSaleRecords(QuerySaleRecords qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("state", SaleRecords.STATE_NORMAL); + queryWrapper.eq(StringUtils.hasText(qo.getType()), "type", qo.getType()); + queryWrapper.likeRight(StringUtils.hasText(qo.getCn()), "cn", qo.getCn()); + queryWrapper.ge(StringUtils.hasText(qo.getStartSellTime()), "sell_time", qo.getStartSellTime()); + queryWrapper.le(StringUtils.hasText(qo.getEndSellTime()), "sell_time", qo.getEndSellTime()); + queryWrapper.eq(StringUtils.hasText(qo.getSellway()), "sellway", qo.getSellway()); + super.page(page, queryWrapper); + List records = page.getRecords(); + if (records != null && records.size() > 0) { + for (SaleRecords record : records) { + QueryWrapper sellCnWrapper = new QueryWrapper().eq("sell_cn", record.getCn()); + List list = detailSaleRecordsService.list(sellCnWrapper); + record.setDetailSaleRecords(list); + } + } + return page; + } + + @Override + public void delSaleRecords(String cn) { + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("cn", cn); + wrapper.set("state", SaleRecords.STATE_DEL); + super.update(wrapper); + } + +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/StoreServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/StoreServiceImpl.java new file mode 100644 index 0000000..32fafee --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/StoreServiceImpl.java @@ -0,0 +1,74 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.Store; +import com.shanzhu.market.mapper.StoreMapper; +import com.shanzhu.market.service.IGoodsStoreService; +import com.shanzhu.market.service.IStoreService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; + +@Service +public class StoreServiceImpl extends ServiceImpl implements IStoreService { + + @Resource + private IGoodsStoreService goodsStoreService; + + @Override + public void updateStore(Store store) { + //判断是否要将状态修改为停用状态 + QueryWrapper storeQueryWrapper = new QueryWrapper() + .eq("name", store.getName()) + .eq("address", store.getAddress()) + .eq("state",store.getState()); + Store one = super.getOne(storeQueryWrapper); + if (Store.STATE_BAN.equals(store.getState())) { + Long redisueNum = goodsStoreService.storeUsed(store.getId()); + //要修改为停用状态 + if (redisueNum != null && redisueNum != 0) { + throw new BusinessException("仓库中存在商品,不能停用仓库"); + } + if (one!=null){ + super.removeById(one); + } + } + super.updateById(store); + } + + @Transactional + @Override + public void deactivate(Long sid) { + Long redisueNum = goodsStoreService.storeUsed(sid); + if (redisueNum != null && redisueNum != 0) { + throw new BusinessException("仓库中存在商品,不能停用仓库"); + } else { + UpdateWrapper wrapper = new UpdateWrapper() + .set("state", Store.STATE_BAN) + .eq("id", sid); + super.update(wrapper); + } + } + + @Override + public Long getResidueNumByGoodsId(Long id) { + return goodsStoreService.getResidueNumByGoodsId(id); + } + + @Override + public void saveStore(Store store) { + store.setState(Store.STATE_NORMAL); + QueryWrapper queryWrapper = new QueryWrapper().eq("state", Store.STATE_NORMAL) + .eq("name", store.getName()) + .eq("address", store.getAddress()); + Store one = super.getOne(queryWrapper); + if (one != null) { + throw new BusinessException("创建失败,已有相同的仓库"); + } + super.save(store); + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SupplierServiceImpl.java b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SupplierServiceImpl.java new file mode 100644 index 0000000..a11bb2d --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/java/com/shanzhu/market/service/impl/SupplierServiceImpl.java @@ -0,0 +1,101 @@ +package com.shanzhu.market.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.shanzhu.market.common.exception.BusinessException; +import com.shanzhu.market.entity.domain.DetailStoreGoods; +import com.shanzhu.market.entity.domain.Supplier; +import com.shanzhu.market.entity.query.QuerySupplier; +import com.shanzhu.market.mapper.SupplierMapper; +import com.shanzhu.market.service.IDetailStoreGoodsService; +import com.shanzhu.market.service.ISupplierService; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class SupplierServiceImpl extends ServiceImpl implements ISupplierService { + + @Resource + private IDetailStoreGoodsService detailStoreGoodsService; + + @Override + public void deactivate(Long cn) { + QueryWrapper detailStoreGoodsQueryWrapper = new QueryWrapper() + .eq("state1", DetailStoreGoods.STATE1_NORMAL) + .eq("type", DetailStoreGoods.TYPE_IN) + .eq("state", DetailStoreGoods.STATE_NORMAL) + .eq("supplier_id", cn); + List list = detailStoreGoodsService.list(detailStoreGoodsQueryWrapper); + if (list!=null&&list.size()>0){ + throw new BusinessException("该供货商正在被入库订单使用,请解除关系之后在停用"); + } + UpdateWrapper updateWrapper = new UpdateWrapper().set("state", Supplier.STATE_BAN).eq("cn", cn); + super.update(updateWrapper); + } + + @Override + public Page queryPageByQo(QuerySupplier qo) { + Page page = new Page<>(qo.getCurrentPage(), qo.getPageSize()); + QueryWrapper wrapper = new QueryWrapper() + .like(StringUtils.hasText(qo.getName()), "name", qo.getName()) + .like(StringUtils.hasText(qo.getAddress()), "address", qo.getAddress()) + .like(StringUtils.hasText(qo.getInfo()), "info", qo.getInfo()) + .eq("state",Supplier.STATE_NORMAL); + super.page(page,wrapper); + return page; + } + + @Override + public List> queryOptionsSuppliers() { + List> list = new ArrayList<>(); + QueryWrapper wrapper = new QueryWrapper().eq("state", Supplier.STATE_NORMAL); + List suppliers = super.list(wrapper); + if (suppliers==null ||suppliers.size()<=0){ + return new ArrayList<>(); + } + for (Supplier supplier : suppliers) { + Map map = new HashMap<>(); + map.put("id",supplier.getCn()); + map.put("name",supplier.getName()); + list.add(map); + } + return list; + + } + + @Override + public void saveSupplier(Supplier supplier) { + supplier.setState(Supplier.STATE_NORMAL); + QueryWrapper queryWrapper = new QueryWrapper() + .eq("name", supplier.getName()) + .eq("state", Supplier.STATE_NORMAL); + Supplier one = super.getOne(queryWrapper); + if (one!=null){ + throw new BusinessException("已存在供货商的联系方式"); + } + super.save(supplier); + } + + @Override + public void updateSupplier(Supplier supplier) { + if (Supplier.STATE_NORMAL.equals(supplier.getState())){ + QueryWrapper queryWrapper = new QueryWrapper() + .eq("name", supplier.getName()) + .eq("state", Supplier.STATE_NORMAL) + .ne("cn", supplier.getCn()); + Supplier one = super.getOne(queryWrapper); + if (one!=null){ + throw new BusinessException("该供货商已存在"); + } + } + super.updateById(supplier); + } +} diff --git a/superMarket-backend/superMarket-backend/src/main/resources/application.yaml b/superMarket-backend/superMarket-backend/src/main/resources/application.yaml new file mode 100644 index 0000000..79ad7a2 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/resources/application.yaml @@ -0,0 +1,24 @@ +server: + port: 9291 +spring: + application: + name: market-server + datasource: + druid: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/db_market?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true + username: root + password: 123456 + redis: + host: localhost + port: 6379 + password: + mvc: + async: + request-timeout: 20000 +mybatis-plus: + mapper-locations: classpath:mapper/*Mapper.xml +logging: + level: + cn.dingli.market.mapper: debug + diff --git a/superMarket-backend/superMarket-backend/src/main/resources/mapper/GoodsMapper.xml b/superMarket-backend/superMarket-backend/src/main/resources/mapper/GoodsMapper.xml new file mode 100644 index 0000000..304cac5 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/resources/mapper/GoodsMapper.xml @@ -0,0 +1,53 @@ + + + + + + + + + + \ No newline at end of file diff --git a/superMarket-backend/superMarket-backend/src/main/resources/mapper/GoodsStoreMapper.xml b/superMarket-backend/superMarket-backend/src/main/resources/mapper/GoodsStoreMapper.xml new file mode 100644 index 0000000..8543151 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/resources/mapper/GoodsStoreMapper.xml @@ -0,0 +1,22 @@ + + + + + update t_goods_store set residue_num=residue_num+#{goodsNum},in_num=in_num+#{goodsNum} where goods_id=#{goodsId} and store_id=#{storeId} + + + update t_goods_store set residue_num=residue_num-#{goodsNum} where goods_id=#{goodsId} and store_id=#{storeId} + + + + + + \ No newline at end of file diff --git a/superMarket-backend/superMarket-backend/src/main/resources/mapper/MenuMapper.xml b/superMarket-backend/superMarket-backend/src/main/resources/mapper/MenuMapper.xml new file mode 100644 index 0000000..bb52103 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/resources/mapper/MenuMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/superMarket-backend/superMarket-backend/src/main/resources/mapper/RoleMapper.xml b/superMarket-backend/superMarket-backend/src/main/resources/mapper/RoleMapper.xml new file mode 100644 index 0000000..ab42a01 --- /dev/null +++ b/superMarket-backend/superMarket-backend/src/main/resources/mapper/RoleMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + insert into t_role_menu (rid,mid) values + + (#{item.rid},#{item.mid}) + + + + insert into t_emp_role (eid,rid) values + + (#{item.eid},#{item.rid}) + + + + delete from t_role_menu where rid=#{rid} + + + delete from t_emp_role where eid=#{eid} + + + + + + \ No newline at end of file diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694324278293_file.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694324278293_file.jpg new file mode 100644 index 0000000..a00a5ba Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694324278293_file.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434162457_07.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434162457_07.jpg new file mode 100644 index 0000000..985d64e Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434162457_07.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434783850_04.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434783850_04.jpg new file mode 100644 index 0000000..17b4bf5 Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434783850_04.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434840737_05.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434840737_05.jpg new file mode 100644 index 0000000..9ff2682 Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434840737_05.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434883855_03.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434883855_03.jpg new file mode 100644 index 0000000..69fffd4 Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434883855_03.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434945440_02.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434945440_02.jpg new file mode 100644 index 0000000..55ae8cb Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694434945440_02.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg new file mode 100644 index 0000000..40ec0d0 Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1694435421618_e04f06dc02b84d38bc4d1ba2b39add0d.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1725800498537_1.png b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1725800498537_1.png new file mode 100644 index 0000000..c01fb4e Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1725800498537_1.png differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1725801956845_1.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1725801956845_1.jpg new file mode 100644 index 0000000..2d0fcae Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1725801956845_1.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1725840264635_1.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1725840264635_1.jpg new file mode 100644 index 0000000..2d0fcae Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1725840264635_1.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1726318271296_R-C.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1726318271296_R-C.jpg new file mode 100644 index 0000000..817ebc3 Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1726318271296_R-C.jpg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1726322332719_1.jpeg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1726322332719_1.jpeg new file mode 100644 index 0000000..33bb1e2 Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1726322332719_1.jpeg differ diff --git a/superMarket-backend/superMarket-backend/src/main/resources/static/files/1726328928308_R-C.jpg b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1726328928308_R-C.jpg new file mode 100644 index 0000000..817ebc3 Binary files /dev/null and b/superMarket-backend/superMarket-backend/src/main/resources/static/files/1726328928308_R-C.jpg differ diff --git a/untitled/.gitignore b/untitled/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/untitled/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/untitled/.idea/.gitignore b/untitled/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/untitled/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/untitled/.idea/artifacts/untitled_war_exploded.xml b/untitled/.idea/artifacts/untitled_war_exploded.xml new file mode 100644 index 0000000..bc06e80 --- /dev/null +++ b/untitled/.idea/artifacts/untitled_war_exploded.xml @@ -0,0 +1,13 @@ + + + $PROJECT_DIR$/out/artifacts/untitled_war_exploded + + + + + + + + + + \ No newline at end of file diff --git a/untitled/.idea/misc.xml b/untitled/.idea/misc.xml new file mode 100644 index 0000000..e1f830b --- /dev/null +++ b/untitled/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/untitled/.idea/modules.xml b/untitled/.idea/modules.xml new file mode 100644 index 0000000..3007dae --- /dev/null +++ b/untitled/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/untitled/.idea/webContexts.xml b/untitled/.idea/webContexts.xml new file mode 100644 index 0000000..58c8f10 --- /dev/null +++ b/untitled/.idea/webContexts.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/untitled/src/Main.java b/untitled/src/Main.java new file mode 100644 index 0000000..fe7aa2b --- /dev/null +++ b/untitled/src/Main.java @@ -0,0 +1,15 @@ +//TIP 要运行代码,请按 或 +// 点击装订区域中的 图标。 +public class Main { + public static void main(String[] args) { + //TIP 当文本光标位于高亮显示的文本处时按 + // 查看 IntelliJ IDEA 建议如何修正。 + System.out.printf("Hello and welcome!"); + + for (int i = 1; i <= 5; i++) { + //TIP 按 开始调试代码。我们已经设置了一个 断点 + // 但您始终可以通过按 添加更多断点。 + System.out.println("i = " + i); + } + } +} \ No newline at end of file diff --git a/untitled/untitled.iml b/untitled/untitled.iml new file mode 100644 index 0000000..abfa2d4 --- /dev/null +++ b/untitled/untitled.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/untitled/web/404.jsp b/untitled/web/404.jsp new file mode 100644 index 0000000..ccc4a93 --- /dev/null +++ b/untitled/web/404.jsp @@ -0,0 +1,18 @@ +<%-- + Created by IntelliJ IDEA. + User: 12762 + Date: 2025/4/22 + Time: 下午2:30 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + 404 - 页面未找到 + + +

404 错误

+

抱歉,您访问的页面不存在。

+ + \ No newline at end of file diff --git a/untitled/web/500.jsp b/untitled/web/500.jsp new file mode 100644 index 0000000..1e19d69 --- /dev/null +++ b/untitled/web/500.jsp @@ -0,0 +1,18 @@ +<%-- + Created by IntelliJ IDEA. + User: 12762 + Date: 2025/4/22 + Time: 下午2:34 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + 500 - 页面未找到 + + +

500 错误

+

抱歉,您访问的页面不存在。

+ + \ No newline at end of file diff --git a/untitled/web/WEB-INF/web.xml b/untitled/web/WEB-INF/web.xml new file mode 100644 index 0000000..58f9322 --- /dev/null +++ b/untitled/web/WEB-INF/web.xml @@ -0,0 +1,11 @@ + + + + 404 + /404.jsp + + + 500 + /500.jsp + + \ No newline at end of file diff --git a/untitled/web/a.jsp b/untitled/web/a.jsp new file mode 100644 index 0000000..668754c --- /dev/null +++ b/untitled/web/a.jsp @@ -0,0 +1,18 @@ +<%-- + Created by IntelliJ IDEA. + User: 12762 + Date: 2025/4/22 + Time: 下午2:17 + To change this template use File | Settings | File Templates. +--%> +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + Page A + + +

这是 A 页面的内容

+ + \ No newline at end of file diff --git a/untitled/web/b.jsp b/untitled/web/b.jsp new file mode 100644 index 0000000..a649da7 --- /dev/null +++ b/untitled/web/b.jsp @@ -0,0 +1,28 @@ +<%-- + Created by IntelliJ IDEA. + User: 12762 + Date: 2025/4/22 + Time: 下午2:14 + To change this template use File | Settings | File Templates. +--%> +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + Page B + + + +

这是 B 页面的内容

+ + + \ No newline at end of file diff --git a/untitled/web/index.jsp b/untitled/web/index.jsp new file mode 100644 index 0000000..ca6655d --- /dev/null +++ b/untitled/web/index.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: 12762 + Date: 2025/4/22 + Time: 下午2:10 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + $Title$ + + + $END$ + +