mirror of
https://gitee.com/huangge1199_admin/vue-pro.git
synced 2024-11-26 09:11:52 +08:00
code review:crm 商品逻辑
This commit is contained in:
parent
381b8ea63a
commit
8efdf3141a
@ -1,107 +1 @@
|
|||||||
SET NAMES utf8mb4;
|
SET NAMES utf8mb4;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 回款表
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `crm_receivable`;
|
|
||||||
CREATE TABLE `crm_receivable` (
|
|
||||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
|
||||||
`no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '回款编号',
|
|
||||||
`plan_id` bigint(20) NULL DEFAULT NULL COMMENT '回款计划ID',
|
|
||||||
`customer_id` bigint(20) NULL DEFAULT NULL COMMENT '客户ID',
|
|
||||||
`contract_id` bigint(20) NULL DEFAULT NULL COMMENT '合同ID',
|
|
||||||
`check_status` tinyint(4) NULL DEFAULT NULL COMMENT '审批状态',
|
|
||||||
`process_instance_id` bigint(20) NULL DEFAULT NULL COMMENT '工作流编号',
|
|
||||||
`return_time` datetime NULL DEFAULT NULL COMMENT '回款日期',
|
|
||||||
`return_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '回款方式',
|
|
||||||
`price` decimal(10, 2) NULL DEFAULT NULL COMMENT '回款金额',
|
|
||||||
`owner_user_id` bigint(20) NULL DEFAULT NULL COMMENT '负责人的用户编号',
|
|
||||||
`batch_id` bigint(20) NULL DEFAULT NULL COMMENT '批次',
|
|
||||||
`sort` int(11) NULL DEFAULT NULL COMMENT '显示顺序',
|
|
||||||
`data_scope` tinyint(4) NULL DEFAULT 1 COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
|
|
||||||
`data_scope_dept_ids` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '数据范围(指定部门数组)',
|
|
||||||
`status` tinyint(4) NOT NULL COMMENT '状态(0正常 1停用)',
|
|
||||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '回款管理' ROW_FORMAT = DYNAMIC;
|
|
||||||
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 回款计划表
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `crm_receivable_plan`;
|
|
||||||
CREATE TABLE `crm_receivable_plan` (
|
|
||||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
|
||||||
`period` tinyint(4) DEFAULT NULL COMMENT '期数',
|
|
||||||
`receivable_id` bigint(20) NULL DEFAULT NULL COMMENT '回款ID',
|
|
||||||
`status` tinyint(4) NOT NULL COMMENT '完成状态',
|
|
||||||
`check_status` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批状态',
|
|
||||||
`process_instance_id` bigint(20) NULL DEFAULT NULL COMMENT '工作流编号',
|
|
||||||
`price` decimal(10, 2) NULL DEFAULT NULL COMMENT '计划回款金额',
|
|
||||||
`return_time` datetime NULL DEFAULT NULL COMMENT '计划回款日期',
|
|
||||||
`remind_days` bigint(20) NULL DEFAULT NULL COMMENT '提前几天提醒',
|
|
||||||
`remind_time` datetime NULL DEFAULT NULL COMMENT '提醒日期',
|
|
||||||
`customer_id` bigint(20) NULL DEFAULT NULL COMMENT '客户ID',
|
|
||||||
`contract_id` bigint(20) NULL DEFAULT NULL COMMENT '合同ID',
|
|
||||||
`owner_user_id` bigint(20) NULL DEFAULT NULL COMMENT '负责人',
|
|
||||||
`sort` int(11) NULL DEFAULT NULL COMMENT '显示顺序',
|
|
||||||
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '回款计划' ROW_FORMAT = DYNAMIC;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 产品表
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `crm_product`;
|
|
||||||
CREATE TABLE `crm_product`
|
|
||||||
(
|
|
||||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
|
||||||
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '产品名称',
|
|
||||||
`no` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '产品编码',
|
|
||||||
`unit` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '单位',
|
|
||||||
`price` bigint(20) NULL DEFAULT 0 COMMENT '价格',
|
|
||||||
`status` tinyint(2) NOT NULL DEFAULT 1 COMMENT '状态 1-上架 0-下架',
|
|
||||||
`category_id` bigint(20) NOT NULL COMMENT '产品分类ID',
|
|
||||||
`description` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '产品描述',
|
|
||||||
`owner_user_id` bigint(20) NOT NULL COMMENT '负责人的用户编号',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '产品表' ROW_FORMAT = Dynamic;
|
|
||||||
|
|
||||||
-- ----------------------------
|
|
||||||
-- 产品分类表
|
|
||||||
-- ----------------------------
|
|
||||||
DROP TABLE IF EXISTS `crm_product_category`;
|
|
||||||
CREATE TABLE `crm_product_category`
|
|
||||||
(
|
|
||||||
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
|
|
||||||
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称',
|
|
||||||
`parent_id` bigint(20) NOT NULL COMMENT '父级id',
|
|
||||||
`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
|
|
||||||
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
||||||
`updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
|
|
||||||
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
||||||
`tenant_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '租户编号',
|
|
||||||
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
|
|
||||||
PRIMARY KEY (`id`) USING BTREE
|
|
||||||
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '产品分类表' ROW_FORMAT = Dynamic;
|
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (184, '回款管理审批状态', 'crm_receivable_check_status', 0, '回款管理审批状态(0 未审核 1 审核通过 2 审核拒绝 3 审核中 4 已撤回)', '1', '2023-10-18 21:44:24', '1', '2023-10-18 21:44:24', b'0', '1970-01-01 00:00:00');
|
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (184, '回款管理审批状态', 'crm_receivable_check_status', 0, '回款管理审批状态(0 未审核 1 审核通过 2 审核拒绝 3 审核中 4 已撤回)', '1', '2023-10-18 21:44:24', '1', '2023-10-18 21:44:24', b'0', '1970-01-01 00:00:00');
|
||||||
|
|
||||||
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (185, '回款管理-回款方式', 'crm_return_type', 0, '回款管理-回款方式', '1', '2023-10-18 21:54:10', '1', '2023-10-18 21:54:10', b'0', '1970-01-01 00:00:00');
|
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (185, '回款管理-回款方式', 'crm_return_type', 0, '回款管理-回款方式', '1', '2023-10-18 21:54:10', '1', '2023-10-18 21:54:10', b'0', '1970-01-01 00:00:00');
|
||||||
|
|
||||||
|
|
||||||
@ -8,6 +9,7 @@ INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `st
|
|||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1391, 2, '审核拒绝', '2', 'crm_receivable_check_status', 0, 'default', '', ' 2 审核拒绝', '1', '2023-10-18 21:46:58', '1', '2023-10-18 21:47:21', b'0');
|
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1391, 2, '审核拒绝', '2', 'crm_receivable_check_status', 0, 'default', '', ' 2 审核拒绝', '1', '2023-10-18 21:46:58', '1', '2023-10-18 21:47:21', b'0');
|
||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1392, 3, '审核中', '3', 'crm_receivable_check_status', 0, 'default', '', ' 3 审核中', '1', '2023-10-18 21:47:35', '1', '2023-10-18 21:47:35', b'0');
|
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1392, 3, '审核中', '3', 'crm_receivable_check_status', 0, 'default', '', ' 3 审核中', '1', '2023-10-18 21:47:35', '1', '2023-10-18 21:47:35', b'0');
|
||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1393, 4, '已撤回', '4', 'crm_receivable_check_status', 0, 'default', '', ' 4 已撤回', '1', '2023-10-18 21:47:46', '1', '2023-10-18 21:47:46', b'0');
|
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1393, 4, '已撤回', '4', 'crm_receivable_check_status', 0, 'default', '', ' 4 已撤回', '1', '2023-10-18 21:47:46', '1', '2023-10-18 21:47:46', b'0');
|
||||||
|
|
||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1394, 1, '支票', '1', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:29', '1', '2023-10-18 21:54:29', b'0');
|
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1394, 1, '支票', '1', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:29', '1', '2023-10-18 21:54:29', b'0');
|
||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1395, 2, '现金', '2', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:41', '1', '2023-10-18 21:54:41', b'0');
|
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1395, 2, '现金', '2', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:41', '1', '2023-10-18 21:54:41', b'0');
|
||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1396, 3, '邮政汇款', '3', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:53', '1', '2023-10-18 21:54:53', b'0');
|
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1396, 3, '邮政汇款', '3', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:54:53', '1', '2023-10-18 21:54:53', b'0');
|
||||||
@ -16,9 +18,3 @@ INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `st
|
|||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1399, 6, '支付宝', '6', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:38', '1', '2023-10-18 21:55:38', b'0');
|
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1399, 6, '支付宝', '6', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:38', '1', '2023-10-18 21:55:38', b'0');
|
||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1400, 7, '微信支付', '7', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:53', '1', '2023-10-18 21:55:53', b'0');
|
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1400, 7, '微信支付', '7', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:53', '1', '2023-10-18 21:55:53', b'0');
|
||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1401, 8, '其他', '8', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:56:06', '1', '2023-10-18 21:56:06', b'0');
|
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1401, 8, '其他', '8', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:56:06', '1', '2023-10-18 21:56:06', b'0');
|
||||||
|
|
||||||
INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (604, '产品状态', 'crm_product_status', 0, '', '1', '2023-10-30 21:47:59', '1', '2023-10-30 21:48:45', b'0', '1970-01-01 00:00:00');
|
|
||||||
|
|
||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1412, 1, '上架', '1', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:34', '1', '2023-10-30 21:49:34', b'0');
|
|
||||||
INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1411, 0, '下架', '0', 'crm_product_status', 0, 'success', '', '', '1', '2023-10-30 21:49:13', '1', '2023-10-30 21:49:13', b'0');
|
|
||||||
|
|
||||||
|
@ -1,32 +1,28 @@
|
|||||||
package cn.iocoder.yudao.module.crm.controller.admin.product;
|
package cn.iocoder.yudao.module.crm.controller.admin.product;
|
||||||
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
|
|
||||||
import javax.validation.constraints.*;
|
|
||||||
import javax.validation.*;
|
|
||||||
import javax.servlet.http.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.product.vo.*;
|
import cn.iocoder.yudao.module.crm.controller.admin.product.vo.*;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.product.ProductDO;
|
|
||||||
import cn.iocoder.yudao.module.crm.convert.product.ProductConvert;
|
import cn.iocoder.yudao.module.crm.convert.product.ProductConvert;
|
||||||
|
import cn.iocoder.yudao.module.crm.dal.dataobject.product.ProductDO;
|
||||||
import cn.iocoder.yudao.module.crm.service.product.ProductService;
|
import cn.iocoder.yudao.module.crm.service.product.ProductService;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
|
||||||
|
|
||||||
@Tag(name = "管理后台 - 产品")
|
@Tag(name = "管理后台 - 产品")
|
||||||
@RestController
|
@RestController
|
||||||
@ -70,15 +66,6 @@ public class ProductController {
|
|||||||
return success(ProductConvert.INSTANCE.convert(product));
|
return success(ProductConvert.INSTANCE.convert(product));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/list")
|
|
||||||
@Operation(summary = "获得产品列表")
|
|
||||||
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
|
|
||||||
@PreAuthorize("@ss.hasPermission('crm:product:query')")
|
|
||||||
public CommonResult<List<ProductRespVO>> getProductList(@RequestParam("ids") Collection<Long> ids) {
|
|
||||||
List<ProductDO> list = productService.getProductList(ids);
|
|
||||||
return success(ProductConvert.INSTANCE.convertList(list));
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@Operation(summary = "获得产品分页")
|
@Operation(summary = "获得产品分页")
|
||||||
@PreAuthorize("@ss.hasPermission('crm:product:query')")
|
@PreAuthorize("@ss.hasPermission('crm:product:query')")
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
package cn.iocoder.yudao.module.crm.controller.admin.product.vo;
|
package cn.iocoder.yudao.module.crm.controller.admin.product.vo;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.Data;
|
||||||
import java.util.*;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import javax.validation.constraints.*;
|
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
// TODO @zange:需要加 CRM 前置噢
|
||||||
/**
|
/**
|
||||||
* 产品 Base VO,提供给添加、修改、详细的子 VO 使用
|
* 产品 Base VO,提供给添加、修改、详细的子 VO 使用
|
||||||
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
|
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
|
||||||
@ -14,6 +13,8 @@ import javax.validation.constraints.*;
|
|||||||
@Data
|
@Data
|
||||||
public class ProductBaseVO {
|
public class ProductBaseVO {
|
||||||
|
|
||||||
|
// TODO @zange:example 要写哈;主要是接口文档,可以基于 example 可以生产请求参数
|
||||||
|
|
||||||
@Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
|
@Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
|
||||||
@NotNull(message = "产品名称不能为空")
|
@NotNull(message = "产品名称不能为空")
|
||||||
private String name;
|
private String name;
|
||||||
@ -39,6 +40,8 @@ public class ProductBaseVO {
|
|||||||
@Schema(description = "产品描述", example = "你说的对")
|
@Schema(description = "产品描述", example = "你说的对")
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
|
// TODO @zange:这个字段只有 create 可以传递,update 不传递;所以放到 create 和 resp 里;
|
||||||
|
|
||||||
@Schema(description = "负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31926")
|
@Schema(description = "负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "31926")
|
||||||
@NotNull(message = "负责人的用户编号不能为空")
|
@NotNull(message = "负责人的用户编号不能为空")
|
||||||
private Long ownerUserId;
|
private Long ownerUserId;
|
||||||
|
@ -1,16 +1,13 @@
|
|||||||
package cn.iocoder.yudao.module.crm.controller.admin.product.vo;
|
package cn.iocoder.yudao.module.crm.controller.admin.product.vo;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
|
||||||
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
|
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
|
||||||
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
|
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
// TODO 芋艿:这个导出最后搞
|
||||||
/**
|
/**
|
||||||
* 产品 Excel VO
|
* 产品 Excel VO
|
||||||
*
|
*
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
package cn.iocoder.yudao.module.crm.controller.admin.product.vo;
|
package cn.iocoder.yudao.module.crm.controller.admin.product.vo;
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import lombok.Data;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
// TODO 芋艿:这个导出最后搞
|
||||||
@Schema(description = "管理后台 - 产品 Excel 导出 Request VO,参数和 ProductPageReqVO 是一致的")
|
@Schema(description = "管理后台 - 产品 Excel 导出 Request VO,参数和 ProductPageReqVO 是一致的")
|
||||||
@Data
|
@Data
|
||||||
public class ProductExportReqVO {
|
public class ProductExportReqVO {
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
package cn.iocoder.yudao.module.crm.controller.admin.product.vo;
|
package cn.iocoder.yudao.module.crm.controller.admin.product.vo;
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||||
|
|
||||||
|
// TODO @zange:按照需求,裁剪下筛选的字段,目前应该只要 name 和 status
|
||||||
@Schema(description = "管理后台 - 产品分页 Request VO")
|
@Schema(description = "管理后台 - 产品分页 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@EqualsAndHashCode(callSuper = true)
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
package cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo;
|
package cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.Data;
|
||||||
import java.util.*;
|
|
||||||
import java.time.LocalDateTime;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import javax.validation.constraints.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 产品分类 Base VO,提供给添加、修改、详细的子 VO 使用
|
* 产品分类 Base VO,提供给添加、修改、详细的子 VO 使用
|
||||||
|
@ -6,11 +6,7 @@ import lombok.Data;
|
|||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
/**
|
// TODO 芋艿:这个导出最后搞;命名应该是按照 ProductExportReqVO 风格
|
||||||
* 产品分类 List VO
|
|
||||||
*
|
|
||||||
* @author ZanGe丶
|
|
||||||
*/
|
|
||||||
@Schema(description = "管理后台 - 产品分类列表 Request VO")
|
@Schema(description = "管理后台 - 产品分类列表 Request VO")
|
||||||
@Data
|
@Data
|
||||||
public class ProductCategoryListReqVO {
|
public class ProductCategoryListReqVO {
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo;
|
package cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.Data;
|
||||||
import java.util.*;
|
import lombok.EqualsAndHashCode;
|
||||||
import javax.validation.constraints.*;
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 产品分类更新 Request VO")
|
@Schema(description = "管理后台 - 产品分类更新 Request VO")
|
||||||
@Data
|
@Data
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
package cn.iocoder.yudao.module.crm.dal.dataobject.product;
|
package cn.iocoder.yudao.module.crm.dal.dataobject.product;
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 产品 DO
|
* 产品 DO
|
||||||
@ -47,10 +46,12 @@ public class ProductDO extends BaseDO {
|
|||||||
* 状态
|
* 状态
|
||||||
*
|
*
|
||||||
* 枚举 {@link TODO crm_product_status 对应的类}
|
* 枚举 {@link TODO crm_product_status 对应的类}
|
||||||
|
* // TODO @zange:这个写个枚举类,然后 {@link关联下
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private Integer status;
|
||||||
/**
|
/**
|
||||||
* 产品分类 ID
|
* 产品分类 ID
|
||||||
|
* // TODO @zange:这个要写下关联 CategoryDO 的 id 字段;参考下别的模块哈
|
||||||
*/
|
*/
|
||||||
private Long categoryId;
|
private Long categoryId;
|
||||||
/**
|
/**
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
package cn.iocoder.yudao.module.crm.dal.dataobject.productcategory;
|
package cn.iocoder.yudao.module.crm.dal.dataobject.productcategory;
|
||||||
|
|
||||||
import lombok.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 产品分类 DO
|
* 产品分类 DO
|
||||||
@ -33,6 +32,7 @@ public class ProductCategoryDO extends BaseDO {
|
|||||||
private String name;
|
private String name;
|
||||||
/**
|
/**
|
||||||
* 父级 id
|
* 父级 id
|
||||||
|
* // TODO @zange:这个要写下关联 CategoryDO 的 id 字段;参考下别的模块哈
|
||||||
*/
|
*/
|
||||||
private Long parentId;
|
private Long parentId;
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ public class ProductServiceImpl implements ProductService {
|
|||||||
public Long createProduct(ProductCreateReqVO createReqVO) {
|
public Long createProduct(ProductCreateReqVO createReqVO) {
|
||||||
// 校验产品编号是否存在
|
// 校验产品编号是否存在
|
||||||
validateProductNo(createReqVO.getNo());
|
validateProductNo(createReqVO.getNo());
|
||||||
|
// TODO @zange:需要校验 categoryId 是否存在;
|
||||||
// 插入
|
// 插入
|
||||||
ProductDO product = ProductConvert.INSTANCE.convert(createReqVO);
|
ProductDO product = ProductConvert.INSTANCE.convert(createReqVO);
|
||||||
productMapper.insert(product);
|
productMapper.insert(product);
|
||||||
@ -49,6 +50,7 @@ public class ProductServiceImpl implements ProductService {
|
|||||||
public void updateProduct(ProductUpdateReqVO updateReqVO) {
|
public void updateProduct(ProductUpdateReqVO updateReqVO) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateProductExists(updateReqVO.getId(), updateReqVO.getNo());
|
validateProductExists(updateReqVO.getId(), updateReqVO.getNo());
|
||||||
|
// TODO @zange:需要校验 categoryId 是否存在;
|
||||||
// 更新
|
// 更新
|
||||||
ProductDO updateObj = ProductConvert.INSTANCE.convert(updateReqVO);
|
ProductDO updateObj = ProductConvert.INSTANCE.convert(updateReqVO);
|
||||||
productMapper.updateById(updateObj);
|
productMapper.updateById(updateObj);
|
||||||
@ -62,6 +64,7 @@ public class ProductServiceImpl implements ProductService {
|
|||||||
productMapper.deleteById(id);
|
productMapper.deleteById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO @zange:validateProductExists 要不只校验是否存在;然后是否 no 重复,交给 validateProductNo,名字改成 validateProductNoDuplicate,和别的模块保持一致哈;
|
||||||
private void validateProductExists(Long id, String no) {
|
private void validateProductExists(Long id, String no) {
|
||||||
ProductDO product = productMapper.selectById(id);
|
ProductDO product = productMapper.selectById(id);
|
||||||
if (product == null) {
|
if (product == null) {
|
||||||
@ -101,4 +104,5 @@ public class ProductServiceImpl implements ProductService {
|
|||||||
throw exception(PRODUCT_NO_EXISTS);
|
throw exception(PRODUCT_NO_EXISTS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,21 @@
|
|||||||
package cn.iocoder.yudao.module.crm.service.productcategory;
|
package cn.iocoder.yudao.module.crm.service.productcategory;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.ProductCategoryCreateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.ProductCategoryListReqVO;
|
||||||
|
import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.ProductCategoryUpdateReqVO;
|
||||||
|
import cn.iocoder.yudao.module.crm.convert.productcategory.ProductCategoryConvert;
|
||||||
|
import cn.iocoder.yudao.module.crm.dal.dataobject.productcategory.ProductCategoryDO;
|
||||||
|
import cn.iocoder.yudao.module.crm.dal.mysql.productcategory.ProductCategoryMapper;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import javax.annotation.Resource;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import java.util.*;
|
import javax.annotation.Resource;
|
||||||
import cn.iocoder.yudao.module.crm.controller.admin.productcategory.vo.*;
|
import java.util.List;
|
||||||
import cn.iocoder.yudao.module.crm.dal.dataobject.productcategory.ProductCategoryDO;
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.module.crm.convert.productcategory.ProductCategoryConvert;
|
|
||||||
import cn.iocoder.yudao.module.crm.dal.mysql.productcategory.ProductCategoryMapper;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*;
|
import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.PRODUCT_CATEGORY_NOT_EXISTS;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
|
||||||
import cn.hutool.core.collection.ListUtil;
|
|
||||||
|
|
||||||
|
// TODO @zange:这个类所在的包,放到 product 下;
|
||||||
/**
|
/**
|
||||||
* 产品分类 Service 实现类
|
* 产品分类 Service 实现类
|
||||||
*
|
*
|
||||||
@ -32,6 +30,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long createProductCategory(ProductCategoryCreateReqVO createReqVO) {
|
public Long createProductCategory(ProductCategoryCreateReqVO createReqVO) {
|
||||||
|
// TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验;
|
||||||
// 插入
|
// 插入
|
||||||
ProductCategoryDO productCategory = ProductCategoryConvert.INSTANCE.convert(createReqVO);
|
ProductCategoryDO productCategory = ProductCategoryConvert.INSTANCE.convert(createReqVO);
|
||||||
productCategoryMapper.insert(productCategory);
|
productCategoryMapper.insert(productCategory);
|
||||||
@ -41,6 +40,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateProductCategory(ProductCategoryUpdateReqVO updateReqVO) {
|
public void updateProductCategory(ProductCategoryUpdateReqVO updateReqVO) {
|
||||||
|
// TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验;
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateProductCategoryExists(updateReqVO.getId());
|
validateProductCategoryExists(updateReqVO.getId());
|
||||||
// 更新
|
// 更新
|
||||||
@ -50,6 +50,7 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteProductCategory(Long id) {
|
public void deleteProductCategory(Long id) {
|
||||||
|
// TODO zange:参考 mall: ProductCategoryServiceImpl 补充下必要的参数校验;
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validateProductCategoryExists(id);
|
validateProductCategoryExists(id);
|
||||||
// 删除
|
// 删除
|
||||||
|
Loading…
Reference in New Issue
Block a user