Commit 0d7b7233 authored by xiamw's avatar xiamw
parents cab14a5b 0662e990
version: '3' version: '3'
services: services:
api-jiedao-operator: api-jd-test:
image: harbor.jiedao.com/api-jiedao-operator:latest image: harbor.com/api-jd-test:latest
container_name: api-jiedao-operator container_name: api-jd-test
ports: ports:
- "9001:9001" - "9001:9001"
environment: environment:
env: test env: test
volumes: volumes:
- '/etc/localtime:/etc/localtime' - '/etc/localtime:/etc/localtime'
- '/data/docker/apps/jiedao/api/logs/operator:/logs' - '/data/apps/jd/test/api/logs/operator:/logs'
- '/data/docker/apps/jiedao/static:/app/static' - '/data/apps/jd/test/static:/app/static'
- '/data/docker/apps/jiedao/fonts/zh:/usr/share/fonts/zh' - '/data/apps/jd/test/fonts/zh:/usr/share/fonts/zh'
restart: always restart: always
ulimits: ulimits:
nproc: 65535 nproc: 65535
...@@ -24,9 +24,9 @@ services: ...@@ -24,9 +24,9 @@ services:
cpus: '4' cpus: '4'
memory: 4G memory: 4G
networks: networks:
app-net: net:
ipv4_address: 10.10.0.20 ipv4_address: 10.10.0.20
networks: networks:
app-net: net:
external: true external: true
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
Target Server Version : 80031 (8.0.31) Target Server Version : 80031 (8.0.31)
File Encoding : 65001 File Encoding : 65001
Date: 18/10/2024 09:26:20 Date: 24/10/2024 09:12:01
*/ */
SET NAMES utf8mb4; SET NAMES utf8mb4;
...@@ -35,4 +35,8 @@ CREATE TABLE `member_user_level_config` ( ...@@ -35,4 +35,8 @@ CREATE TABLE `member_user_level_config` (
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员等级配置表' ROW_FORMAT = DYNAMIC; ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '会员等级配置表' ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of member_user_level_config
-- ----------------------------
INSERT INTO `member_user_level_config` VALUES (1, 'vip1', 0, 100, 'https://statictest.groupage.cn/2024/09/06/66dac1dfe4b0e404e1c7816f.png', '1', '2024-09-03 10:05:14', '1', '2024-09-06 16:48:34', 0);
SET FOREIGN_KEY_CHECKS = 1; SET FOREIGN_KEY_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 0;
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2327, '礼品', '', 1, 9, 1520, 'giftManagement', 'rate', NULL, 0, '1', '2024-07-23 10:31:12', '1', '2024-09-20 10:56:09', b'0', b'1', 'Gift', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2328, '礼品设置', '', 2, 1, 2327, 'giftList', 'merchant', 'ecw/giftManagement/index', 0, '1', '2024-07-23 10:36:37', '1', '2024-09-20 10:58:21', b'0', b'1', 'gift list', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2329, 'KEHE', 'ecw:customer:query', 3, 1, 2327, '', '', '', 0, '1', '2024-07-23 11:09:40', '1', '2024-07-23 11:10:26', b'1', b'1', 'KEHE', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2330, 'DEDE', 'ecw:customer:query', 3, 2, 2328, '', '', '', 0, '1', '2024-07-23 11:10:54', '1', '2024-07-23 11:17:48', b'1', b'1', 'DRDRF', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2331, '礼品编辑', '', 2, 2, 2327, 'giftEdit', 'cascader', NULL, 0, '1', '2024-07-23 11:22:28', '1', '2024-07-23 11:30:34', b'1', b'1', 'jj', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2332, '查看', 'ecw:giftManagement:check', 3, 1, 2328, '', '', '', 0, '1', '2024-07-23 16:07:25', '1', '2024-07-23 16:08:14', b'0', b'1', 'check', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2333, '关闭', 'ecw:giftManagement:close', 3, 1, 2328, '', '', '', 0, '1', '2024-07-23 16:10:05', '1', '2024-07-23 16:10:05', b'0', b'1', 'close', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2334, '复制', 'ecw:giftManagement:copy', 3, 1, 2328, '', '', '', 0, '1', '2024-07-23 16:34:05', '1', '2024-07-23 16:34:05', b'0', b'1', 'copy', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2335, '延期', 'ecw:giftManagement:postpone', 3, 1, 2328, '', '', '', 0, '1', '2024-07-23 16:35:11', '1', '2024-07-23 16:35:11', b'0', b'1', 'postpone', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2336, '删除', 'ecw:giftManagement:delete', 3, 1, 2328, '', '', '', 0, '1', '2024-07-23 16:37:16', '1', '2024-07-23 16:37:16', b'0', b'1', 'delete', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2337, '编辑', 'ecw:giftManagement:edit', 3, 1, 2328, '', '', '', 0, '1', '2024-07-23 16:38:14', '1', '2024-07-24 13:42:27', b'0', b'1', 'edit', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2338, '启用', 'ecw:giftManagement:enable', 3, 1, 2328, '', '', '', 0, '1', '2024-07-23 16:39:57', '1', '2024-07-23 16:39:57', b'0', b'1', 'enable', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2339, '兑换', 'ecw:giftManagement:exchange', 3, 1, 2328, '', '', '', 0, '1', '2024-07-23 16:43:13', '1', '2024-07-23 16:43:13', b'0', b'1', 'exchange', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2340, '添加礼品', 'ecw:giftManagement:add', 3, 1, 2328, '', '', '', 0, '1', '2024-07-24 14:51:42', '1', '2024-07-24 14:51:55', b'0', b'1', 'Add reward', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2341, '兑换礼品', '', 2, 1, 2327, 'bulkExchange', '#', 'ecw/giftManagement/bulkExchange/index', 0, '1', '2024-07-24 15:07:44', '1', '2024-09-13 11:44:32', b'0', b'0', 'Exchange Rewards', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2342, '积分', '', 1, 8, 1520, 'memberManagement', 'star', NULL, 0, '1', '2024-07-26 15:45:29', '2696', '2024-09-20 09:54:33', b'0', b'1', 'Points', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2343, '积分总览', '', 2, 2, 2342, 'memberPointsSummary', 'tool', 'ecw/memberManagement/memberPointsSummary/index', 0, '1', '2024-07-26 15:51:16', '1', '2024-09-20 10:56:32', b'0', b'1', 'Summary of member points', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2344, '积分记录', '', 2, 3, 2342, 'integralRecord', 'build', 'ecw/memberManagement/integralRecord', 0, '1', '2024-07-26 15:54:05', '1', '2024-09-20 10:56:57', b'0', b'1', 'Integral record', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2345, '兑换记录', '', 2, 2, 2327, 'exchangeRecord', 'job', 'ecw/memberManagement/exchangeRecord', 0, '1', '2024-07-31 10:41:01', '2696', '2024-09-20 10:04:24', b'0', b'1', 'Exchange record', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2346, '积分规则', '', 2, 1, 2342, 'integrationRule', 'eye-open', 'ecw/memberManagement/integrationRule', 0, '1', '2024-07-31 10:47:57', '1', '2024-07-31 10:48:18', b'0', b'1', 'integration rule', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2347, '兑换记录操作', '', 2, 1, 2342, 'exchangeRecordOperation', '#', 'ecw/memberManagement/exchangeRecordOperation', 0, '1', '2024-08-01 14:25:38', '1', '2024-08-16 16:02:44', b'0', b'0', 'exchange record operation', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2348, '新增兑换', 'ecw:memberManagement:newExchange', 3, 1, 2345, '', '', '', 0, '1', '2024-08-01 14:40:32', '1', '2024-08-01 14:41:40', b'0', b'1', 'new exchange', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2349, '批量核销', 'ecw:memberManagement:batchWriteOff', 3, 1, 2345, '', '', '', 0, '1', '2024-08-01 14:43:12', '1', '2024-08-01 14:43:44', b'0', b'1', 'Batch write-off', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2350, '导出', 'ecw:memberManagement:export', 3, 1, 2345, '', '', '', 0, '1', '2024-08-01 14:44:50', '1', '2024-08-01 14:44:50', b'0', b'1', 'export', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2351, '兑换信息导入', 'ecw:memberManagement:exchangeoInfoImport', 3, 1, 2345, '', '', '', 0, '1', '2024-08-01 14:47:20', '1', '2024-08-01 14:47:20', b'0', b'1', 'Exchange information import', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2352, '撤销', 'ecw:memberManagement:cancel', 3, 1, 2345, '', '', '', 0, '1', '2024-08-01 15:05:05', '1', '2024-08-01 15:05:20', b'0', b'1', 'cancel', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2353, '编辑', 'ecw:memberManagement:edit', 3, 1, 2345, '', '', '', 0, '1', '2024-08-01 15:06:34', '1', '2024-08-01 15:06:34', b'0', b'1', 'edit', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2354, '查看', 'ecw:memberManagement:view', 3, 1, 2345, '', '', '', 0, '1', '2024-08-01 15:07:23', '1', '2024-08-01 15:07:23', b'0', b'1', 'view', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2355, '核销', 'ecw:memberManagement:verification', 3, 1, 2345, '', '', '', 0, '1', '2024-08-01 15:08:56', '1', '2024-08-01 15:08:56', b'0', b'1', 'verification', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2356, '核销回退', 'ecw:memberManagement:verificationRollback', 3, 1, 2345, '', '', '', 0, '1', '2024-08-01 15:12:57', '1', '2024-08-01 15:12:57', b'0', b'1', 'verification Rollback', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2357, '积分规则操作', '', 2, 1, 2342, 'addIntegrationRuleOperation', '#', 'ecw/memberManagement/addIntegrationRuleOperation', 0, '1', '2024-08-06 10:55:22', '1', '2024-08-06 11:01:49', b'0', b'0', 'Integration rule operation', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2358, '等级设置', '', 2, 3, 1520, 'memberLevelSetting', 'edit', 'ecw/memberManagement/memberLevelSetting', 0, '1', '2024-08-06 11:01:00', '1', '2024-09-20 10:54:16', b'0', b'1', 'Member Level Setting', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2359, '预警控货订单', '', 2, 7, 1559, 'warning_cargo_control', 'table', 'ecw/order/warningCargoControl', 0, '115', '2024-08-27 10:05:21', '115', '2024-08-27 10:05:21', b'0', b'1', 'Warning Control Order', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2360, '转异', 'ecw:order:turnException', 3, 1, 1852, '', '', '', 0, '115', '2024-08-27 16:09:10', '115', '2024-08-27 16:09:10', b'0', b'1', 'Turn Exception', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2361, '会员积分系统', 'ecw:memberManagement:enableMemberPointsSystem', 3, 1, 2346, '', '', '', 0, '1', '2024-08-28 15:59:40', '1', '2024-08-28 16:00:34', b'0', b'1', 'Enable member points system', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2362, '修改放货限制', 'ecw:cargo_control:updateReleaseLimit', 3, 1, 1878, '', '', '', 0, '119', '2024-08-30 23:43:54', '119', '2024-08-30 23:43:54', b'0', b'1', 'Update Release Limit', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2363, '设置默认付款', 'ecw:customer:change-customer-default-pay', 3, 18, 1425, '', '', '', 0, '115', '2024-09-02 15:34:05', '115', '2024-09-18 16:00:07', b'1', b'1', 'Set up customer default pay', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2364, '设置默认控货无收货人', 'ecw:customer:change-customer-no-consignee', 3, 19, 1425, '', '', '', 0, '115', '2024-09-02 15:34:52', '115', '2024-09-18 16:00:11', b'1', b'1', 'Set up customer no consignee', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2365, '设置默认开票', 'ecw:customer:change-customer-default-billing', 3, 20, 1425, '', '', '', 0, '115', '2024-09-03 15:57:27', '115', '2024-09-18 16:00:16', b'1', b'1', 'Set up customer default invoice', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2366, '跟进记录列表', '', 2, 6, 1417, 'follow', 'cascader', 'ecw/customer/follow/index', 0, '115', '2024-09-04 09:45:37', '115', '2024-09-06 15:10:53', b'1', b'0', 'Follow Record List', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2367, '新增客户更进记录', '', 2, 7, 1417, 'follow-add-edit/:id', 'chart', 'ecw/customer/follow/edit', 0, '115', '2024-09-04 09:58:31', '115', '2024-09-06 15:09:52', b'1', b'0', 'New follow record', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2368, '新增跟进记录', 'ecw:customer:follow-create', 3, 21, 1425, '', '', '', 0, '115', '2024-09-04 10:58:36', '115', '2024-09-06 15:11:33', b'0', b'1', 'Follow record creation', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2369, '导出跟进记录', 'ecw:customer:follow-export', 3, 21, 1425, '', '', '', 0, '115', '2024-09-04 11:01:09', '115', '2024-09-06 15:12:05', b'0', b'1', 'Follow record export', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2370, '跟进记录修改状态', 'ecw:customer:follow-modify-status', 3, 21, 1425, '', '', '', 0, '115', '2024-09-04 11:05:30', '115', '2024-09-06 15:12:24', b'0', b'1', 'Follow record modify status', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2371, '编辑跟进记录', 'ecw:customer:follow-update', 3, 21, 1425, '', '', '', 0, '115', '2024-09-04 11:07:25', '115', '2024-09-06 15:12:17', b'0', b'1', 'Follow record update', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2372, '更新记录增加计划', 'ecw:customer:follow-add-plan', 3, 21, 1425, '', '', '', 0, '115', '2024-09-04 11:09:24', '115', '2024-09-06 15:13:02', b'0', b'1', 'Follow record add follow plan', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2373, '设置', 'ecw:customer:setting', 3, 17, 1425, '', '', '', 0, '115', '2024-09-10 22:34:24', '115', '2024-09-10 22:34:24', b'0', b'1', 'setting', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2374, '分享统计详情', '', 2, 1, 2342, 'sharingStatisticalDetails', 'chart', 'ecw/memberManagement/sharingStatisticalDetails', 0, '1', '2024-09-11 13:21:23', '1', '2024-09-11 13:21:23', b'0', b'0', 'Sharing statistical details', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2375, '分享统计', '', 2, 4, 2342, 'sharingStatistics', 'cascader', 'ecw/memberManagement/sharingStatistics/index', 0, '1', '2024-09-10 18:08:01', '2696', '2024-09-20 10:05:00', b'0', b'1', 'Sharing statistics', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2376, '分享详情', '', 2, 5, 2342, 'shareDetails', 'monitor', 'ecw/memberManagement/sharingDetails/index', 0, '1', '2024-09-13 19:17:03', '2696', '2024-09-20 10:05:07', b'0', b'1', 'sharing Details', b'0', NULL, NULL);
INSERT INTO `jiedao`.`system_menu` (`id`, `name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES (2377, '合并客户', 'ecw:customer:merge', 3, 17, 1425, '', '', '', 0, '115', '2024-09-18 15:58:59', '115', '2024-09-18 15:59:54', b'0', b'1', 'Merge customer', b'0', NULL, NULL);
UPDATE `jiedao`.`system_menu` SET `name` = '会员', `permission` = '', `menu_type` = 1, `sort` = 8, `parent_id` = 0, `path` = '/member', `icon` = 'peoples', `component` = NULL, `status` = 0, `creator` = '122', `create_time` = '2022-06-24 17:14:27', `updater` = '2696', `update_time` = '2024-09-03 14:22:36', `deleted` = b'0', `is_show_in_menu_bar` = b'1', `name_en` = 'Member ', `keepalive` = b'0', `redirect` = NULL, `badge_field` = NULL WHERE `id` = 1520;
UPDATE `jiedao`.`system_menu` SET `name` = '会员', `permission` = 'member:user', `menu_type` = 2, `sort` = 1, `parent_id` = 1520, `path` = 'member-user', `icon` = 'excel', `component` = 'member/user/index', `status` = 0, `creator` = '122', `create_time` = '2022-06-24 17:18:32', `updater` = '2696', `update_time` = '2024-09-12 15:08:29', `deleted` = b'0', `is_show_in_menu_bar` = b'1', `name_en` = 'List of registered members', `keepalive` = b'0', `redirect` = NULL, `badge_field` = NULL WHERE `id` = 1521;
UPDATE `jiedao`.`system_menu` SET `name` = '待审核会员', `permission` = '', `menu_type` = 2, `sort` = 2, `parent_id` = 1520, `path` = 'member/under-review', `icon` = 'user', `component` = 'member/user/underReview', `status` = 0, `creator` = '122', `create_time` = '2022-08-31 21:02:48', `updater` = '2696', `update_time` = '2024-09-12 15:08:35', `deleted` = b'0', `is_show_in_menu_bar` = b'1', `name_en` = 'Member list to be reviewed', `keepalive` = b'0', `redirect` = NULL, `badge_field` = NULL WHERE `id` = 1669;
SET FOREIGN_KEY_CHECKS = 1;
\ No newline at end of file
SET FOREIGN_KEY_CHECKS = 0;
INSERT INTO `jiedao`.`system_sms_template` (`id`, `type`, `status`, `code`, `name`, `content`, `params`, `remark`, `api_template_id`, `channel_id`, `channel_code`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `content_en`, `api_template_id_en`) VALUES (55, 3, 0, 'user-sms-redeem-reward', '积分兑换验证码', '积分兑换验证码:${code},请勿将验证码泄露给他人,以免造成不必要的损失,两分钟之内有效!', '[\"code\"]', NULL, 'SMS_471775248', 6, 'ALIYUN', '2696', '2024-08-20 10:06:06', '2696', '2024-08-20 10:14:39', b'0', '[ECLogistics]Your login code is:{code}, do not disclose this code to others to avoid any unnecessary loss, within 20 minutes effective!', 'SMS_199790126');
SET FOREIGN_KEY_CHECKS = 1;
\ No newline at end of file
-- 增加报价单目的国字段
alter table ecw_offer add COLUMN dest_country_id bigint DEFAULT 0 comment '目的国id';
update ecw_offer o join ecw_warehouse_line l on o.line_id = l.id join ecw_warehouse w on w.id = l.dest_warehouse_id set o.dest_country_id = w.guojia;
\ No newline at end of file
-- 客户主营类型 由 单个 改为 多个逗号分隔
alter table `ecw_customer`
change column `product_type` `product_types` varchar(300) DEFAULT NULL COMMENT '主营类型,多个逗号分隔';
-- 因为客户跟进表会有原来的跟进数据录入,故需要先把原来的跟进跟进编号录入到日志表中
-- 注意更新后 需要在应用启动前执行。因为此表会缓存。
insert into ecw_order_number_log(number_key, `number`, type, version, creator, create_time, updater, update_time, deleted)
select 'followup:new:number', max(`number`), 6, 0, 1, CURRENT_TIMESTAMP, 1, CURRENT_TIMESTAMP, 0 from ecw_customer_followup;
-- 增加订单的到仓数据字段
alter table ecw_order
add COLUMN `check_num` int DEFAULT '0' COMMENT '到仓件数';
alter table ecw_order
add COLUMN `check_volume` decimal(10, 2) DEFAULT '0.00' COMMENT '到仓体积';
alter table ecw_order
add COLUMN `check_quantity` int DEFAULT '0' COMMENT '到仓数量';
alter table ecw_order
add COLUMN `check_weight` decimal(10, 2) DEFAULT '0.00' COMMENT '到仓重量';
-- 跟进记录菜单
INSERT INTO `system_menu` (`name`, `permission`, `menu_type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `is_show_in_menu_bar`, `name_en`, `keepalive`, `redirect`, `badge_field`) VALUES ( '跟进记录', '', 2, 1, 1417, 'offer/logList', 'log', 'ecw/offer/logList', 0, '2702', '2024-10-27 12:02:57', '2702', '2024-10-27 12:04:30', b'0', b'1', 'followLog', b'0', NULL, NULL);
...@@ -221,6 +221,40 @@ public class CodeUtils { ...@@ -221,6 +221,40 @@ public class CodeUtils {
} }
} }
/**
* 功能描述: 自动生成跟进单单号. 格式: GJ+年份YYYY+六位数
*
* @param maxOddNumbers 数据库中的最新单号
* @return java.lang.String
*/
public static String getOddFollowupNumbers(String maxOddNumbers) {
// 格式: GJ+年份YYYY+六位数
int numberLength = 14;
//获取当前日期并将其进行格式化
String formatYear = getDateTime("yyyy");
int newEndIntNum;
//判断数据中的最大单号是否存在,是否包含当前日期
if (StringUtils.isNotEmpty(maxOddNumbers) && maxOddNumbers.length() == numberLength &&
maxOddNumbers.substring(2, 8).equals(formatYear)) {
//截取后四位数
String endNum = maxOddNumbers.substring(maxOddNumbers.length() - 6);
//把截取的最后六位数解析为int
int endIntNum = Integer.parseInt(endNum);
//在将其加1(自增1)
newEndIntNum = endIntNum + 1;
} else {
// 如果为空(第一次生成)或者当前最大订单号的日期与当前日期不一致说明需要重新计数生成单号
newEndIntNum = 1;
}
//生成单号
String newOddNumber = String.format("%s%s%06d", "GJ", formatYear, newEndIntNum);
//将单号返回
return newOddNumber;
}
/** /**
* 功能描述: 自动生成收款单单单号 * 功能描述: 自动生成收款单单单号
......
...@@ -105,7 +105,7 @@ public class CustomerDO extends BaseDO { ...@@ -105,7 +105,7 @@ public class CustomerDO extends BaseDO {
/** /**
* 产品类型 * 产品类型
*/ */
private Long productType; private String productTypes;
/** /**
* 产品id * 产品id
*/ */
......
...@@ -73,7 +73,8 @@ public interface CustomerMapper extends BaseMapperX<CustomerDO> { ...@@ -73,7 +73,8 @@ public interface CustomerMapper extends BaseMapperX<CustomerDO> {
"", "",
"country.name_zh as country_name_zh, country.name_en as country_name_en,", "country.name_zh as country_name_zh, country.name_en as country_name_en,",
"", "",
"pt.title_zh as product_type_name_zh, pt.title_en as product_type_name_en,", "(SELECT GROUP_CONCAT(title_zh) FROM ecw_product_type pt WHERE FIND_IN_SET(pt.id,(SELECT product_types FROM ecw_customer WHERE id=c.id))) AS product_type_name_zh, ",
"(SELECT GROUP_CONCAT(title_en) FROM ecw_product_type pt WHERE FIND_IN_SET(pt.id,(SELECT product_types FROM ecw_customer WHERE id=c.id))) AS product_type_name_en, ",
"", "",
"(SELECT GROUP_CONCAT(title_zh) FROM ecw_product p WHERE FIND_IN_SET(p.id,(SELECT product_ids FROM ecw_customer WHERE id=c.id))) AS product_name_zh, ", "(SELECT GROUP_CONCAT(title_zh) FROM ecw_product p WHERE FIND_IN_SET(p.id,(SELECT product_ids FROM ecw_customer WHERE id=c.id))) AS product_name_zh, ",
"(SELECT GROUP_CONCAT(title_en) FROM ecw_product p WHERE FIND_IN_SET(p.id,(SELECT product_ids FROM ecw_customer WHERE id=c.id))) AS product_name_en, ", "(SELECT GROUP_CONCAT(title_en) FROM ecw_product p WHERE FIND_IN_SET(p.id,(SELECT product_ids FROM ecw_customer WHERE id=c.id))) AS product_name_en, ",
...@@ -96,7 +97,6 @@ public interface CustomerMapper extends BaseMapperX<CustomerDO> { ...@@ -96,7 +97,6 @@ public interface CustomerMapper extends BaseMapperX<CustomerDO> {
"left join ecw_customer_level cl on c.level = cl.id", "left join ecw_customer_level cl on c.level = cl.id",
"left join ecw_customer_credit cc on c.credit_level = cc.id", "left join ecw_customer_credit cc on c.credit_level = cc.id",
"left join ecw_country country on c.country = country.id", "left join ecw_country country on c.country = country.id",
"left join ecw_product_type pt on c.product_type = pt.id",
"left join system_user u on c.customer_service = u.id", "left join system_user u on c.customer_service = u.id",
"left join system_user uc on c.creator = uc.id", "left join system_user uc on c.creator = uc.id",
"left join system_user uu on c.updater = uu.id", "left join system_user uu on c.updater = uu.id",
......
...@@ -35,4 +35,6 @@ public interface ErrorCodeConstants { ...@@ -35,4 +35,6 @@ public interface ErrorCodeConstants {
ErrorCode FOLLOWUP_NOT_EXISTS = new ErrorCode(1005001013, "客户跟进不存在"); ErrorCode FOLLOWUP_NOT_EXISTS = new ErrorCode(1005001013, "客户跟进不存在");
ErrorCode FOLLOWUP_ALREADY_SUBMITTED = new ErrorCode(1005001014, "客户跟进已提交不可再修改"); ErrorCode FOLLOWUP_ALREADY_SUBMITTED = new ErrorCode(1005001014, "客户跟进已提交不可再修改");
ErrorCode FOLLOWUP_NUMBER_NOT_NULL = new ErrorCode(1005001015, "客户跟进编号不能为空");
} }
package cn.iocoder.yudao.module.customer.service.customerFollowup; package cn.iocoder.yudao.module.customer.service.customerFollowup;
import java.time.LocalDate; import cn.hutool.core.collection.CollectionUtil;
import java.time.LocalDateTime; import cn.iocoder.yudao.framework.apollo.core.event.OrderNumberLogEvent;
import java.time.ZoneId; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import java.util.*; import cn.iocoder.yudao.framework.common.util.code.CodeUtils;
import javax.annotation.Resource;
import cn.iocoder.yudao.framework.i18n.core.I18nMessage; import cn.iocoder.yudao.framework.i18n.core.I18nMessage;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.service.AbstractService;
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.customer.convert.customerFollowup.CustomerFollowupConvert;
import cn.iocoder.yudao.module.customer.dal.dataobject.customer.CustomerDO; import cn.iocoder.yudao.module.customer.dal.dataobject.customer.CustomerDO;
import cn.iocoder.yudao.module.customer.dal.dataobject.customerContacts.CustomerContactsDO; import cn.iocoder.yudao.module.customer.dal.dataobject.customerContacts.CustomerContactsDO;
import cn.iocoder.yudao.module.customer.dal.dataobject.customerFollowup.CustomerFollowupDO;
import cn.iocoder.yudao.module.customer.dal.mysql.customer.CustomerMapper; import cn.iocoder.yudao.module.customer.dal.mysql.customer.CustomerMapper;
import cn.iocoder.yudao.module.customer.dal.mysql.customerContacts.CustomerContactsMapper; import cn.iocoder.yudao.module.customer.dal.mysql.customerContacts.CustomerContactsMapper;
import cn.iocoder.yudao.module.customer.dal.mysql.customerFollowup.CustomerFollowupMapper;
import cn.iocoder.yudao.module.customer.enums.ErrorCodeConstants;
import cn.iocoder.yudao.module.customer.service.customerOperateLog.CustomerOperateLogService; import cn.iocoder.yudao.module.customer.service.customerOperateLog.CustomerOperateLogService;
import cn.iocoder.yudao.module.customer.vo.customerFollowup.CustomerFollowupCreateReqVO;
import cn.iocoder.yudao.module.customer.vo.customerFollowup.CustomerFollowupQueryVO;
import cn.iocoder.yudao.module.customer.vo.customerFollowup.CustomerFollowupUpdateReqVO;
import cn.iocoder.yudao.module.customer.vo.customerFollowup.CustomerFollowupUpdateStatusReqVO;
import cn.iocoder.yudao.module.customer.vo.customerOperateLog.CustomerOperateLogCreateReqVO; import cn.iocoder.yudao.module.customer.vo.customerOperateLog.CustomerOperateLogCreateReqVO;
import cn.iocoder.yudao.module.ecw.enums.CustomerFollowupStatusEnum; import cn.iocoder.yudao.module.ecw.enums.CustomerFollowupStatusEnum;
import cn.iocoder.yudao.module.ecw.enums.CustomerOperateTypeEnum; import cn.iocoder.yudao.module.ecw.enums.CustomerOperateTypeEnum;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.framework.mybatis.core.service.AbstractService; import javax.annotation.Resource;
import cn.iocoder.yudao.module.customer.vo.customerFollowup.*; import java.util.ArrayList;
import cn.iocoder.yudao.module.customer.dal.dataobject.customerFollowup.CustomerFollowupDO; import java.util.Collection;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import java.util.List;
import cn.iocoder.yudao.module.customer.convert.customerFollowup.CustomerFollowupConvert;
import cn.iocoder.yudao.module.customer.dal.mysql.customerFollowup.CustomerFollowupMapper;
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.customer.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.customer.enums.ErrorCodeConstants.FOLLOWUP_ALREADY_SUBMITTED;
import static cn.iocoder.yudao.module.customer.enums.ErrorCodeConstants.FOLLOWUP_NOT_EXISTS;
/** /**
* 客户跟进 Service 实现类 * 客户跟进 Service 实现类
...@@ -54,36 +64,48 @@ public class CustomerFollowupServiceImpl extends AbstractService<CustomerFollowu ...@@ -54,36 +64,48 @@ public class CustomerFollowupServiceImpl extends AbstractService<CustomerFollowu
@Resource @Resource
private CustomerContactsMapper customerContactsMapper; private CustomerContactsMapper customerContactsMapper;
// 注入applicationContext
@Resource
private ApplicationContext applicationContext;
private static final String FOLLOWUP_NEW_NUMBER = "followup:new:number";
/** /**
* 跟进单编号生成方式:GJ+年份+六位数字,按年份累计 * 跟进单编号生成方式:GJ+年份+六位数字,按年份累计
* @return * @return
*/ */
@Override @Override
public String generateFollowupNumber() { public String generateFollowupNumber() {
// 跟进单号生成
// 获取当前时间的年份 OrderNumberLogEvent event = new OrderNumberLogEvent();
LocalDate now = LocalDate.now(); event.setType(6);
int year = now.getYear(); event.setNumberKey(FOLLOWUP_NEW_NUMBER);
// 获取当前年份的初始化时间 applicationContext.publishEvent(event);
LocalDateTime startOfYear = LocalDateTime.of(year, 1, 1, 0, 0, 0, 0); String newFollowupNumber = CodeUtils.getOddFollowupNumbers(event.getNumber());
return newFollowupNumber;
Date from = Date.from(startOfYear.atZone(ZoneId.systemDefault()).toInstant());
Long count = followupMapper.selectCount(new LambdaQueryWrapperX<CustomerFollowupDO>()
.ge(CustomerFollowupDO::getCreateTime, from));
return String.format("GJ%d%06d", year, count + 1);
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public Long createFollowup(CustomerFollowupCreateReqVO createReqVO) { public Long createFollowup(CustomerFollowupCreateReqVO createReqVO) {
// 获取新编号
String newNumber = createReqVO.getNumber();
String number = generateFollowupNumber(); // 编号不存在,报异常
createReqVO.setNumber(number); if (StringUtils.isBlank(newNumber)) {
throw exception(ErrorCodeConstants.FOLLOWUP_NUMBER_NOT_NULL);
}
// 更新编号,内部会判断冲突
OrderNumberLogEvent event = new OrderNumberLogEvent();
event.setType(6);
event.setNumberKey(FOLLOWUP_NEW_NUMBER);
event.setNewNumber(newNumber);
applicationContext.publishEvent(event);
// 插入 // 插入
CustomerFollowupDO followup = CustomerFollowupConvert.INSTANCE.convert(createReqVO); CustomerFollowupDO followup = CustomerFollowupConvert.INSTANCE.convert(createReqVO);
// 设置联系人名称 // 设置联系人名称
setContactName(followup); setContactName(followup);
...@@ -175,42 +197,58 @@ public class CustomerFollowupServiceImpl extends AbstractService<CustomerFollowu ...@@ -175,42 +197,58 @@ public class CustomerFollowupServiceImpl extends AbstractService<CustomerFollowu
@Override @Override
public void updateFollowupStatus(CustomerFollowupUpdateStatusReqVO updateStatusReqVO) { public void updateFollowupStatus(CustomerFollowupUpdateStatusReqVO updateStatusReqVO) {
Long id = updateStatusReqVO.getId(); Long updateId = updateStatusReqVO.getId();
CustomerFollowupDO customerFollowupDO = followupMapper.selectById(id); List<Long> ids = updateStatusReqVO.getIds();
if (customerFollowupDO == null) {
throw exception(FOLLOWUP_NOT_EXISTS);
}
if (CustomerFollowupStatusEnum.Commited.getValue().equals(customerFollowupDO.getStatus())) { List<Long> idList = new ArrayList<>();
throw exception(FOLLOWUP_ALREADY_SUBMITTED); // id + ids 到idList
if (updateId!= null) {
idList.add(updateId);
}
if (CollectionUtil.isNotEmpty(ids)) {
idList.addAll(ids);
} }
customerFollowupDO.setStatus(updateStatusReqVO.getStatus()); for (Long id : idList) {
followupMapper.updateById(customerFollowupDO); CustomerFollowupDO customerFollowupDO = followupMapper.selectById(id);
if (customerFollowupDO == null) {
throw exception(FOLLOWUP_NOT_EXISTS);
}
Long customerId = customerFollowupDO.getCustomerId(); if (CustomerFollowupStatusEnum.Commited.getValue().equals(customerFollowupDO.getStatus())) {
if (customerId != null) { throw exception(FOLLOWUP_ALREADY_SUBMITTED);
CustomerDO customer = customerMapper.selectById(customerId); }
if (customer != null) { }
// 插入日志 for (Long id : idList) {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); CustomerFollowupDO customerFollowupDO = followupMapper.selectById(id);
//保存客户捞取记录
CustomerOperateLogCreateReqVO customerOperateLogCreateReqVO = new CustomerOperateLogCreateReqVO() customerFollowupDO.setStatus(updateStatusReqVO.getStatus());
.setOperator(loginUser == null ? null : loginUser.getId()) followupMapper.updateById(customerFollowupDO);
.setOperatorName(loginUser == null ? null : loginUser.getNickname())
.setCustomerId(customer.getId())
.setNumber(customer.getNumber()) Long customerId = customerFollowupDO.getCustomerId();
.setName(customer.getName()) if (customerId != null) {
.setNewCustomerService(customer.getCustomerService()) CustomerDO customer = customerMapper.selectById(customerId);
.setOldCustomerService(customer.getCustomerService()) if (customer != null) {
.setOldEstimateEnterOpenSeaTime(customer.getEstimateEnterOpenSeaTime())
.setNewEstimateEnterOpenSeaTime(customer.getEstimateEnterOpenSeaTime()) // 插入日志
.setOperateType(CustomerOperateTypeEnum.FOLLOWUP_COMMIT.getValue()) LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
.setRemark("提交跟进纪录"); //保存客户捞取记录
customerOperateLogService.createOperateLog(customerOperateLogCreateReqVO); CustomerOperateLogCreateReqVO customerOperateLogCreateReqVO = new CustomerOperateLogCreateReqVO()
.setOperator(loginUser == null ? null : loginUser.getId())
.setOperatorName(loginUser == null ? null : loginUser.getNickname())
.setCustomerId(customer.getId())
.setNumber(customer.getNumber())
.setName(customer.getName())
.setNewCustomerService(customer.getCustomerService())
.setOldCustomerService(customer.getCustomerService())
.setOldEstimateEnterOpenSeaTime(customer.getEstimateEnterOpenSeaTime())
.setNewEstimateEnterOpenSeaTime(customer.getEstimateEnterOpenSeaTime())
.setOperateType(CustomerOperateTypeEnum.FOLLOWUP_COMMIT.getValue())
.setRemark("提交跟进纪录");
customerOperateLogService.createOperateLog(customerOperateLogCreateReqVO);
}
} }
} }
} }
......
...@@ -43,8 +43,8 @@ public class CustomerCreateReqVO extends CustomerBaseVO { ...@@ -43,8 +43,8 @@ public class CustomerCreateReqVO extends CustomerBaseVO {
@ApiModelProperty(value = "联系地址") @ApiModelProperty(value = "联系地址")
private String address; private String address;
@ApiModelProperty(value = "产品类型id") @ApiModelProperty(value = "产品类型ids,多个逗号分隔")
private Long productType; private String productTypes;
@ApiModelProperty(value = "产品ids") @ApiModelProperty(value = "产品ids")
private String productIds; private String productIds;
......
...@@ -67,7 +67,7 @@ public class CustomerDetailRespVO extends CustomerBaseVO { ...@@ -67,7 +67,7 @@ public class CustomerDetailRespVO extends CustomerBaseVO {
private String address; private String address;
@ApiModelProperty(value = "产品类型id") @ApiModelProperty(value = "产品类型id")
private Long productType; private String productTypes;
@ApiModelProperty(value = "产品ids") @ApiModelProperty(value = "产品ids")
private String productIds; private String productIds;
......
...@@ -50,8 +50,8 @@ public class CustomerUpdateReqVO extends CustomerBaseVO { ...@@ -50,8 +50,8 @@ public class CustomerUpdateReqVO extends CustomerBaseVO {
@ApiModelProperty(value = "联系地址") @ApiModelProperty(value = "联系地址")
private String address; private String address;
@ApiModelProperty(value = "产品类型") @ApiModelProperty(value = "产品类型ids,多个逗号分隔")
private Long productType; private String productTypes;
@ApiModelProperty(value = "产品ids") @ApiModelProperty(value = "产品ids")
private String productIds; private String productIds;
......
...@@ -21,15 +21,25 @@ public class CustomerFollowupQueryVO extends PageParam { ...@@ -21,15 +21,25 @@ public class CustomerFollowupQueryVO extends PageParam {
@ApiModelProperty(value = "状态 字典customer_followup_status") @ApiModelProperty(value = "状态 字典customer_followup_status")
private Integer status; private Integer status;
@ApiModelProperty(value = "客户编号") @ApiModelProperty(value = "客户id")
private Long customerId; private Long customerId;
@ApiModelProperty(value = "客户编号")
private String customerNumber;
@ApiModelProperty(value = "客户编号") @ApiModelProperty(value = "客户编号")
private Long customerDetailId; private Long customerDetailId;
@ApiModelProperty(value = "报价单") @ApiModelProperty(value = "报价单id")
private Long offerId; private Long offerId;
@ApiModelProperty(value = "报价单id列表")
private List<Long> offerIds;
@ApiModelProperty(value = "报价单编号")
private String offerNumber;
@ApiModelProperty(value = "跟进类型 字典customer_followup_type") @ApiModelProperty(value = "跟进类型 字典customer_followup_type")
private Integer followType; private Integer followType;
...@@ -85,6 +95,15 @@ public class CustomerFollowupQueryVO extends PageParam { ...@@ -85,6 +95,15 @@ public class CustomerFollowupQueryVO extends PageParam {
@ApiModelProperty(value = "结束创建时间") @ApiModelProperty(value = "结束创建时间")
private Date endCreateTime; private Date endCreateTime;
// 更新时间
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "开始更新时间")
private Date beginUpdateTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "结束更新时间")
private Date endUpdateTime;
@ApiModelProperty(value = "跟进类型,下拉多选") @ApiModelProperty(value = "跟进类型,下拉多选")
private List<Integer> followTypes; private List<Integer> followTypes;
...@@ -96,4 +115,13 @@ public class CustomerFollowupQueryVO extends PageParam { ...@@ -96,4 +115,13 @@ public class CustomerFollowupQueryVO extends PageParam {
@ApiModelProperty(value = "跟进状态,下拉多选") @ApiModelProperty(value = "跟进状态,下拉多选")
private List<Integer> statuses; private List<Integer> statuses;
@ApiModelProperty(value = "客户经理/跟进业务员ids")
private List<Long> followUserIds;
@ApiModelProperty(value = "联系人电话")
private String contactPhone;
} }
...@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode; ...@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.util.List;
@ApiModel("管理后台 - 客户跟进更新状态 Request VO") @ApiModel("管理后台 - 客户跟进更新状态 Request VO")
@Data @Data
...@@ -17,6 +18,11 @@ public class CustomerFollowupUpdateStatusReqVO { ...@@ -17,6 +18,11 @@ public class CustomerFollowupUpdateStatusReqVO {
@NotNull(message = "主键不能为空") @NotNull(message = "主键不能为空")
private Long id; private Long id;
//ids
@ApiModelProperty(value = "主键列表", required = true)
@NotNull(message = "主键列表不能为空")
private List<Long> ids;
@ApiModelProperty(value = "状态 字典customer_followup_status") @ApiModelProperty(value = "状态 字典customer_followup_status")
private Integer status; private Integer status;
......
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
<if test="query.customerId != null"> <if test="query.customerId != null">
AND a.customer_id = #{query.customerId} AND a.customer_id = #{query.customerId}
</if> </if>
<if test="query.offerId != null"> <if test="query.offerIds != null and query.offerIds.size() > 0">
AND a.offer_id = #{query.offerId} AND FIND_IN_SET(a.offer_id, #{query.offerIds})
</if> </if>
<if test="query.followType != null"> <if test="query.followType != null">
...@@ -38,35 +38,53 @@ ...@@ -38,35 +38,53 @@
AND a.result_type = #{query.resultType} AND a.result_type = #{query.resultType}
</if> </if>
<if test="query.followTypes != null and query.followTypes.size() > 0">
<if test="query.followTypes != null and query.followTypes.size()>0"> AND FIND_IN_SET(a.follow_type, #{query.followTypes})
AND
<foreach item='item' index="index" collection='query.followTypes' open='(' separator='or' close=')'>
FIND_IN_SET(#{item}, a.follow_type)
</foreach>
</if> </if>
<if test="query.followMethods != null and query.followMethods.size()>0"> <if test="query.followMethods != null and query.followMethods.size()>0">
AND AND FIND_IN_SET(a.follow_method, #{query.followMethods})
<foreach item='item' index="index" collection='query.followMethods' open='(' separator='or' close=')'>
FIND_IN_SET(#{item}, a.follow_method)
</foreach>
</if> </if>
<if test="query.resultTypes != null and query.resultTypes.size()>0"> <if test="query.resultTypes != null and query.resultTypes.size()>0">
AND AND FIND_IN_SET(a.result_type, #{query.resultTypes})
<foreach item='item' index="index" collection='query.resultTypes' open='(' separator='or' close=')'>
FIND_IN_SET(#{item}, a.result_type)
</foreach>
</if> </if>
<if test="query.statuses != null and query.statuses.size()>0"> <if test="query.statuses != null and query.statuses.size()>0">
AND AND FIND_IN_SET(a.status, #{query.statuses})
<foreach item='item' index="index" collection='query.statuses' open='(' separator='or' close=')'> </if>
FIND_IN_SET(#{item}, a.status)
</foreach> <if test="query.followUserIds!= null and query.followUserIds.size() > 0">
AND FIND_IN_SET(a.follow_user_id, #{query.followUserIds})
</if>
<if test="query.beginFollowTime != null and query.endFollowTime != null">
AND ( a.follow_time BETWEEN #{query.beginFollowTime} AND #{query.endFollowTime} )
</if>
<if test="query.beginNextTime!= null and query.endNextTime!= null">
AND ( a.next_time BETWEEN #{query.beginNextTime} AND #{query.endNextTime} )
</if>
<if test="query.beginCreateTime!= null and query.endCreateTime!= null">
AND ( a.create_time BETWEEN #{query.beginCreateTime} AND #{query.endCreateTime} )
</if>
<if test="query.beginUpdateTime!= null and query.endUpdateTime!= null">
AND ( a.update_time BETWEEN #{query.beginUpdateTime} AND #{query.endUpdateTime} )
</if> </if>
<if test="query.contactPhone != null and query.contactPhone != '' ">
AND concat('+', g.area_code, g.phone_new, '') LIKE concat('%', concat( #{query.contactPhone}, '%' ))
</if>
<if test="query.customerNumber != null and query.customerNumber != '' ">
AND b.number LIKE concat('%', concat( #{query.customerNumber}, '%' ))
</if>
<if test="query.offerNumber != null and query.offerNumber != '' ">
AND c.number LIKE concat('%', concat( #{query.offerNumber}, '%' ))
</if>
</sql> </sql>
<select id="selectPage1" resultType="cn.iocoder.yudao.module.customer.dal.dataobject.customerFollowup.CustomerFollowupDO"> <select id="selectPage1" resultType="cn.iocoder.yudao.module.customer.dal.dataobject.customerFollowup.CustomerFollowupDO">
...@@ -96,6 +114,12 @@ ...@@ -96,6 +114,12 @@
<select id="selectCount1" resultType="java.lang.Long"> <select id="selectCount1" resultType="java.lang.Long">
select count(1) select count(1)
from ecw_customer_followup a from ecw_customer_followup a
left join ecw_customer b on a.customer_id = b.id
left join ecw_offer c on a.offer_id = c.offer_id
left join system_user d on a.creator = d.id
left join system_user e on a.updater = e.id
left join system_user f on a.follow_user_id = f.id
left join ecw_customer_contacts g on a.contact_id = g.id
WHERE 1=1 AND a.deleted = 0 WHERE 1=1 AND a.deleted = 0
<include refid="queryCondition"/> <include refid="queryCondition"/>
</select> </select>
......
...@@ -699,7 +699,7 @@ ...@@ -699,7 +699,7 @@
<if test="query.productTypes != null and query.productTypes.size()>0"> <if test="query.productTypes != null and query.productTypes.size()>0">
AND AND
<foreach item='item' index="index" collection='query.productTypes' open='(' separator='or' close=')'> <foreach item='item' index="index" collection='query.productTypes' open='(' separator='or' close=')'>
FIND_IN_SET(#{item}, contact.product_type) FIND_IN_SET(#{item}, contact.product_types)
</foreach> </foreach>
</if> </if>
<!--主营商品名称--> <!--主营商品名称-->
......
...@@ -379,17 +379,11 @@ public class CustomerController { ...@@ -379,17 +379,11 @@ public class CustomerController {
if (customerDOSaved == null) { if (customerDOSaved == null) {
throw exception(ErrorCodeConstants.CUSTOMER_SAVED_NOT_EXISTS); throw exception(ErrorCodeConstants.CUSTOMER_SAVED_NOT_EXISTS);
} }
if (customerDOSaved.getCustomerService() == null) {
throw exception(ErrorCodeConstants.CUSTOMER_SAVED_CUSTOMER_SERVICE_IS_NULL);
}
CustomerDO customerDODeleted = customerService.getById(par.getCustomerIdDeleted()); CustomerDO customerDODeleted = customerService.getById(par.getCustomerIdDeleted());
if (customerDODeleted == null) { if (customerDODeleted == null) {
throw exception(ErrorCodeConstants.CUSTOMER_DELETED_NOT_EXISTS); throw exception(ErrorCodeConstants.CUSTOMER_DELETED_NOT_EXISTS);
} }
if (customerDODeleted.getCustomerService() == null) { if (!Objects.equals(customerDOSaved.getCustomerService(), customerDODeleted.getCustomerService())) {
throw exception(ErrorCodeConstants.CUSTOMER_DELETED_CUSTOMER_SERVICE_IS_NULL);
}
if (!customerDOSaved.getCustomerService().equals(customerDODeleted.getCustomerService())) {
throw exception(ErrorCodeConstants.CUSTOMER_MERGE_CUSTOMER_SERVICE_NOT_SAME); throw exception(ErrorCodeConstants.CUSTOMER_MERGE_CUSTOMER_SERVICE_NOT_SAME);
} }
......
...@@ -7,7 +7,6 @@ import cn.iocoder.yudao.framework.security.core.LoginUser; ...@@ -7,7 +7,6 @@ import cn.iocoder.yudao.framework.security.core.LoginUser;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.customer.dal.dataobject.customer.CustomerDO; import cn.iocoder.yudao.module.customer.dal.dataobject.customer.CustomerDO;
import cn.iocoder.yudao.module.customer.dal.dataobject.customer.complaint.CustomerComplaintDO; import cn.iocoder.yudao.module.customer.dal.dataobject.customer.complaint.CustomerComplaintDO;
import cn.iocoder.yudao.module.customer.dal.dataobject.customer.follow.CustomerFollowDO;
import cn.iocoder.yudao.module.customer.dal.dataobject.customerContacts.CustomerContactsDO; import cn.iocoder.yudao.module.customer.dal.dataobject.customerContacts.CustomerContactsDO;
import cn.iocoder.yudao.module.customer.dal.dataobject.customerFollowup.CustomerFollowupDO; import cn.iocoder.yudao.module.customer.dal.dataobject.customerFollowup.CustomerFollowupDO;
import cn.iocoder.yudao.module.customer.service.customer.CustomerService; import cn.iocoder.yudao.module.customer.service.customer.CustomerService;
...@@ -33,6 +32,7 @@ import cn.iocoder.yudao.module.wealth.service.commissionPayment.CommissionPaymen ...@@ -33,6 +32,7 @@ import cn.iocoder.yudao.module.wealth.service.commissionPayment.CommissionPaymen
import cn.iocoder.yudao.module.wealth.service.receipt.ReceiptServiceImpl; import cn.iocoder.yudao.module.wealth.service.receipt.ReceiptServiceImpl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -338,12 +338,22 @@ public class CustomerMergeServiceImpl implements CustomerMergeService { ...@@ -338,12 +338,22 @@ public class CustomerMergeServiceImpl implements CustomerMergeService {
if (CollectionUtil.isNotEmpty(cuscontactList2)) { if (CollectionUtil.isNotEmpty(cuscontactList2)) {
for (CustomerContactsDO d : cuscontactList2 for (CustomerContactsDO d : cuscontactList2
) { ) {
d.setCustomerId(customerDOSaved.getId()); try {
//被合并的客户联系人,默认为非默认 // 1、联系人copy一份
d.setIsDefault(0); CustomerContactsDO newCustomer = new CustomerContactsDO();
d.setUpdateTime(new Date()); BeanUtils.copyProperties(newCustomer, d);
d.setUpdater(String.valueOf(loginUserId)); newCustomer.setId(null);
customerContactsService.updateById(d); //被合并的客户联系人,默认为非默认
newCustomer.setIsDefault(0);
// 设置被合并客户的联系人
newCustomer.setCustomerId(customerDOSaved.getId());
customerContactsService.save(newCustomer);
// 2、删除被合并客户的联系人
customerContactsService.deleteCustomerContacts(d.getId());
} catch (Exception e) {
log.error("合并客户联系人失败", e);
}
} }
} }
} }
......
...@@ -42,6 +42,16 @@ public class CustomerFollowupController { ...@@ -42,6 +42,16 @@ public class CustomerFollowupController {
@Resource @Resource
private FileMakeApi fileMakeApi; private FileMakeApi fileMakeApi;
@GetMapping("/getFollowupNewNumber")
@ApiOperation("获得最新的跟进编号")
public CommonResult<String> getFollowupNewNumber() {
String number = followupService.generateFollowupNumber();
return success(number);
}
@PostMapping("/create") @PostMapping("/create")
@ApiOperation("创建客户跟进") @ApiOperation("创建客户跟进")
// @PreAuthorize("@ss.hasPermission('customer:followup:create')") // @PreAuthorize("@ss.hasPermission('customer:followup:create')")
......
...@@ -60,12 +60,10 @@ import static cn.iocoder.yudao.module.member.enums.TransportTypeEnum.SPECIAL_LIN ...@@ -60,12 +60,10 @@ import static cn.iocoder.yudao.module.member.enums.TransportTypeEnum.SPECIAL_LIN
@Service @Service
@Validated @Validated
public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, ScoreRuleDO> implements ScoreRuleService { public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, ScoreRuleDO> implements ScoreRuleService {
private static final String PROD_REGISTER_URL = "https://app2.groupage.cn/#/pages/register/shareRegister?code="; @Value("${yudao.member.register-url}")
private static final String UAT_REGISTER_URL = "https://apptest.groupage.cn/#/pages/register/shareRegister?code="; private String registerUrl;
private static final String PROD_SHARE_URL = "https://app2.groupage.cn/#"; @Value("${yudao.member.share-url}")
private static final String UAT_SHARE_URL = "https://apptest.groupage.cn/#"; private String shareUrl;
@Value("${spring.profiles.active}")
private String env;
@Resource @Resource
private ScoreRuleMapper scoreRuleMapper; private ScoreRuleMapper scoreRuleMapper;
@Resource @Resource
...@@ -659,19 +657,15 @@ public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, Score ...@@ -659,19 +657,15 @@ public class ScoreRuleServiceImpl extends AbstractService<ScoreRuleMapper, Score
ScoreRulerRecommendExtraVO scoreRulerRecommendExtraVO = JsonUtils.parseObject(scoreRuleDO.getExtra(), ScoreRulerRecommendExtraVO.class); ScoreRulerRecommendExtraVO scoreRulerRecommendExtraVO = JsonUtils.parseObject(scoreRuleDO.getExtra(), ScoreRulerRecommendExtraVO.class);
appScoreRuleListBackVO.setExtraRecommend(scoreRulerRecommendExtraVO); appScoreRuleListBackVO.setExtraRecommend(scoreRulerRecommendExtraVO);
MemberUserDO memberUserDO = memberUserService.getUser(reqVO.getMemberId()); MemberUserDO memberUserDO = memberUserService.getUser(reqVO.getMemberId());
if (memberUserDO != null && !"pro".equals(env)) { if (memberUserDO != null) {
appScoreRuleListBackVO.setRecommendUrl(UAT_REGISTER_URL + memberUserDO.getCode()); appScoreRuleListBackVO.setRecommendUrl(registerUrl + memberUserDO.getCode());
} else if (memberUserDO != null) {
appScoreRuleListBackVO.setRecommendUrl(PROD_REGISTER_URL + memberUserDO.getCode());
} }
} else if (scoreRuleDO.getType() == ScoreRuleTypeEnum.SHARE.getValue()) { } else if (scoreRuleDO.getType() == ScoreRuleTypeEnum.SHARE.getValue()) {
ScoreRuleShareExtraVO scoreRuleShareExtraVO = JsonUtils.parseObject(scoreRuleDO.getExtra(), ScoreRuleShareExtraVO.class); ScoreRuleShareExtraVO scoreRuleShareExtraVO = JsonUtils.parseObject(scoreRuleDO.getExtra(), ScoreRuleShareExtraVO.class);
MemberUserDO memberUserDO = memberUserService.getUser(reqVO.getMemberId()); MemberUserDO memberUserDO = memberUserService.getUser(reqVO.getMemberId());
String activityUrl = scoreRuleShareExtraVO.getActivityUrl(); String activityUrl = scoreRuleShareExtraVO.getActivityUrl();
if (memberUserDO != null && !"pro".equals(env)) { if (memberUserDO != null) {
scoreRuleShareExtraVO.setActivityUrl(UAT_SHARE_URL + activityUrl); scoreRuleShareExtraVO.setActivityUrl(shareUrl + activityUrl);
} else if (memberUserDO != null) {
scoreRuleShareExtraVO.setActivityUrl(PROD_SHARE_URL + activityUrl);
} }
appScoreRuleListBackVO.setExtraShare(scoreRuleShareExtraVO); appScoreRuleListBackVO.setExtraShare(scoreRuleShareExtraVO);
} }
......
...@@ -669,7 +669,17 @@ public class OrderDO extends BaseDO { ...@@ -669,7 +669,17 @@ public class OrderDO extends BaseDO {
private Boolean isInOpenSea; private Boolean isInOpenSea;
@ApiModelProperty(value = "到仓件数")
private Integer checkNum;
@ApiModelProperty(value = "到仓数量")
private Integer checkQuantity;
@ApiModelProperty(value = "到仓体积")
private BigDecimal checkVolume;
@ApiModelProperty(value = "到仓重量")
private BigDecimal checkWeight;
@ApiModelProperty(value = "订单修改是否变动了归属客户,此字段用来判定订单是否需要重置归属客户经理,下单后归属客户的客户经理是固定的,除非订单归属客户变动,才需要重置客户经理") @ApiModelProperty(value = "订单修改是否变动了归属客户,此字段用来判定订单是否需要重置归属客户经理,下单后归属客户的客户经理是固定的,除非订单归属客户变动,才需要重置客户经理")
@TableField(exist = false) @TableField(exist = false)
......
...@@ -549,6 +549,18 @@ public class OrderBackInfoDto { ...@@ -549,6 +549,18 @@ public class OrderBackInfoDto {
@ApiModelProperty(value = "放货箱数") @ApiModelProperty(value = "放货箱数")
private Integer releaseNum; private Integer releaseNum;
@ApiModelProperty(value = "到仓件数")
private Integer checkNum;
@ApiModelProperty(value = "到仓数量")
private Integer checkQuantity;
@ApiModelProperty(value = "到仓体积")
private BigDecimal checkVolume;
@ApiModelProperty(value = "到仓重量")
private BigDecimal checkWeight;
public void setExceptionReason(String exceptionReason) { public void setExceptionReason(String exceptionReason) {
this.exceptionReason = exceptionReason; this.exceptionReason = exceptionReason;
if (StringUtils.isNotBlank(exceptionReason) && Objects.nonNull(this.lang)) { if (StringUtils.isNotBlank(exceptionReason) && Objects.nonNull(this.lang)) {
......
...@@ -39,6 +39,8 @@ public enum CustomDraweeEnum { ...@@ -39,6 +39,8 @@ public enum CustomDraweeEnum {
documentDeclarationFee("documentDeclarationFee","单证报关费","Document customs declaration fee",14), documentDeclarationFee("documentDeclarationFee","单证报关费","Document customs declaration fee",14),
warehouseRent("warehouseRent","仓租费","Warehouse rental fee",15), warehouseRent("warehouseRent","仓租费","Warehouse rental fee",15),
magneticInspectionFee("magneticInspectionFee","磁检费","Magnetic inspection fee",16),
additionalTaxFee("additionalTaxFee","附加税","Additional Tax",17),
// TODO 待补充... // TODO 待补充...
......
...@@ -15,6 +15,7 @@ public enum OrderNumberEnum { ...@@ -15,6 +15,7 @@ public enum OrderNumberEnum {
RECEIPT_NO(3, "收款单号"), RECEIPT_NO(3, "收款单号"),
PAYMENT_NO(3, "付款单号"), PAYMENT_NO(3, "付款单号"),
COMMISSION_PAYMENT_NO(5, "佣金付款单号"), COMMISSION_PAYMENT_NO(5, "佣金付款单号"),
FOLLOWUP_NO(6, "跟进单号"),
; ;
/** /**
* 类型 * 类型
......
...@@ -225,5 +225,4 @@ public enum OrderStatusMsgEnum { ...@@ -225,5 +225,4 @@ public enum OrderStatusMsgEnum {
return 99999; return 99999;
} }
} }
...@@ -398,4 +398,24 @@ public interface OrderBusinessService extends IService<OrderDO> { ...@@ -398,4 +398,24 @@ public interface OrderBusinessService extends IService<OrderDO> {
void updateItem(OrderItemDO orderItemDO); void updateItem(OrderItemDO orderItemDO);
/**
* 订单到仓更新
*
* @param orderId 订单ID
* @param checkNum 到仓箱数
* @param checkQuantity 到仓数量
* @param checkVolume 到仓体积
* @param checkWeight 到仓重量
*/
void orderToWarehouse(Long orderId, Integer checkNum, Integer checkQuantity, BigDecimal checkVolume, BigDecimal checkWeight);
/**
* 撤销到仓
*
* @param orderId 订单id
*/
void revokeToWarehouse(Long orderId);
} }
...@@ -107,6 +107,8 @@ import static cn.iocoder.yudao.framework.apollo.core.constants.Constants.NOT_ACC ...@@ -107,6 +107,8 @@ import static cn.iocoder.yudao.framework.apollo.core.constants.Constants.NOT_ACC
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.ecw.enums.ErrorCodeConstants.EXCHANGE_RATE_NOT_EXISTS_PARAM; import static cn.iocoder.yudao.module.ecw.enums.ErrorCodeConstants.EXCHANGE_RATE_NOT_EXISTS_PARAM;
import static cn.iocoder.yudao.module.order.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.order.enums.ErrorCodeConstants.*;
import static cn.iocoder.yudao.module.order.enums.OrderAirTimeEnum.AIR_UNLOADED_CABINET;
import static cn.iocoder.yudao.module.order.enums.OrderSeaTimeEnum.SEA_UNLOADED_CABINET;
/** /**
* 订单 Service 实现类 * 订单 Service 实现类
...@@ -2623,7 +2625,7 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order ...@@ -2623,7 +2625,7 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
null, null,
CollectionUtil.newArrayList(OrderExceptionEnum.LINE_WEIGHT_EXCEPTION.getKey())); CollectionUtil.newArrayList(OrderExceptionEnum.LINE_WEIGHT_EXCEPTION.getKey()));
if (CollectionUtil.isNotEmpty(lineOverweightExceptionDOList) || if (CollectionUtil.isNotEmpty(lineOverweightExceptionDOList) ||
lineOverweightExceptionDOList.isEmpty()){ lineOverweightExceptionDOList.isEmpty()) {
overweightExceptionDOList.addAll(lineOverweightExceptionDOList); overweightExceptionDOList.addAll(lineOverweightExceptionDOList);
} }
orderDO.setIsAutomaticHandleNoCanShipmentChannelException(false); orderDO.setIsAutomaticHandleNoCanShipmentChannelException(false);
...@@ -2638,7 +2640,7 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order ...@@ -2638,7 +2640,7 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
orderItemDO.getProdId(), orderItemDO.getProdId(),
CollectionUtil.newArrayList(OrderExceptionEnum.GOODS_OVERWEIGHT_EXCEPTION.getKey())); CollectionUtil.newArrayList(OrderExceptionEnum.GOODS_OVERWEIGHT_EXCEPTION.getKey()));
if (CollectionUtil.isNotEmpty(goodsOverweightExceptionDOList) || if (CollectionUtil.isNotEmpty(goodsOverweightExceptionDOList) ||
goodsOverweightExceptionDOList.isEmpty()){ goodsOverweightExceptionDOList.isEmpty()) {
overweightExceptionDOList.addAll(goodsOverweightExceptionDOList); overweightExceptionDOList.addAll(goodsOverweightExceptionDOList);
} }
//生成未报价异常 (草稿订单除外) //生成未报价异常 (草稿订单除外)
...@@ -2769,7 +2771,6 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order ...@@ -2769,7 +2771,6 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
} }
private void airShipmentStateUpdate(Integer type, private void airShipmentStateUpdate(Integer type,
List<FeeDto> newFeeDtoList, List<FeeDto> newFeeDtoList,
OrderDO newOrder) { OrderDO newOrder) {
...@@ -4039,4 +4040,85 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order ...@@ -4039,4 +4040,85 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
orderItemMapper.updateById(orderItemDO); orderItemMapper.updateById(orderItemDO);
} }
@Override
public void orderToWarehouse(Long orderId, Integer checkNum, Integer checkQuantity, BigDecimal checkVolume, BigDecimal checkWeight) {
OrderDO orderDO = orderMapper.getOrderById(orderId);
Integer orgCheckNum = orderDO.getCheckNum();
Integer orgCheckQuantity = orderDO.getCheckQuantity();
BigDecimal orgCheckVolume = orderDO.getCheckVolume();
BigDecimal orgCheckWeight = orderDO.getCheckWeight();
// 更新订单到仓数据
orderMapper.update(null, new LambdaUpdateWrapper<OrderDO>()
.set(OrderDO::getCheckNum, checkNum)
.set(OrderDO::getCheckQuantity, checkQuantity)
.set(OrderDO::getCheckVolume, checkVolume)
.set(OrderDO::getCheckWeight, checkWeight)
.eq(OrderDO::getOrderId, orderId)
);
// 添加订单到仓操作日志
List<ApplyInfoVO> list = new ArrayList<>();
ApplyInfoVO applyInfoVO = new ApplyInfoVO();
applyInfoVO.setName("卸柜/到仓箱数");
applyInfoVO.setOrgValue(orgCheckNum + "箱");
applyInfoVO.setNewValue(checkNum + "箱");
list.add(applyInfoVO);
applyInfoVO = new ApplyInfoVO();
applyInfoVO.setName("卸柜/到仓数量");
applyInfoVO.setOrgValue(orgCheckQuantity + "个");
applyInfoVO.setNewValue(checkQuantity + "个");
list.add(applyInfoVO);
applyInfoVO = new ApplyInfoVO();
applyInfoVO.setName("卸柜/到仓体积");
applyInfoVO.setOrgValue(orgCheckVolume + "m³");
applyInfoVO.setNewValue(checkVolume + "m³");
list.add(applyInfoVO);
applyInfoVO = new ApplyInfoVO();
applyInfoVO.setName("卸柜/到仓重量");
applyInfoVO.setOrgValue(orgCheckWeight + "kg");
applyInfoVO.setNewValue(checkWeight + "kg");
list.add(applyInfoVO);
this.addOrderOperateLog(orderId, "订单操作", "订单卸柜/到仓数据更新", list);
}
@Override
public void revokeToWarehouse(Long orderId) {
OrderDO orderDO = orderMapper.getOrderById(orderId);
Integer orgCheckNum = orderDO.getCheckNum();
Integer orgCheckQuantity = orderDO.getCheckQuantity();
BigDecimal orgCheckVolume = orderDO.getCheckVolume();
BigDecimal orgCheckWeight = orderDO.getCheckWeight();
Integer orderStatus = orderDO.getStatus();
Integer orderInWarehouseState = orderDO.getInWarehouseState();
Integer orderShipmentState = orderDO.getShipmentState();
// 更新订单到仓数据,回滚订单状态
orderMapper.update(null, new LambdaUpdateWrapper<OrderDO>()
.set(OrderDO::getCheckNum, 0)
.set(OrderDO::getCheckQuantity, 0)
.set(OrderDO::getCheckVolume, 0)
.set(OrderDO::getCheckWeight, 0)
.set(OrderDO::getUnloadTime, null)
.set(OrderDO::getStatus, 15)
.set(OrderDO::getOldStatus, orderStatus)
.set(OrderDO::getInWarehouseState, 0)
.set(OrderDO::getOldInWarehouseState, orderInWarehouseState)
.set(OrderDO::getShipmentState, 330) // 回滚为已清关,待卸柜/到仓
.set(OrderDO::getOldShipmentState, orderShipmentState)
.eq(OrderDO::getOrderId, orderId)
);
// 回滚订单动态日志
OrderTimeDO orderTimeDO = orderTimeMapper.selectOne(new LambdaQueryWrapper<OrderTimeDO>()
.eq(OrderTimeDO::getOrderId, orderId)
.eq(OrderTimeDO::getStatus, orderDO.getTransportId() == 1 ? SEA_UNLOADED_CABINET.getValue() : AIR_UNLOADED_CABINET.getValue())
.orderByDesc(OrderTimeDO::getId)
.last("limit 1")
);
if (Objects.nonNull(orderTimeDO)) {
orderTimeMapper.deleteById(orderTimeDO.getId());
}
// 添加订单到仓操作日志
this.addOrderOperateLog(orderId, "订单操作", "撤销订单卸柜/到仓,清空到仓数据", "");
}
} }
...@@ -545,6 +545,17 @@ public class OrderBackPageVO { ...@@ -545,6 +545,17 @@ public class OrderBackPageVO {
private String customerServiceName; private String customerServiceName;
// -----------end ----------- // -----------end -----------
@ApiModelProperty(value = "到仓件数")
private Integer checkNum;
@ApiModelProperty(value = "到仓数量")
private Integer checkQuantity;
@ApiModelProperty(value = "到仓体积")
private BigDecimal checkVolume;
@ApiModelProperty(value = "到仓重量")
private BigDecimal checkWeight;
public void setGuanLianOrderStatus(String guanLianOrderStatus) { public void setGuanLianOrderStatus(String guanLianOrderStatus) {
......
...@@ -647,6 +647,17 @@ public class OrderBackVO { ...@@ -647,6 +647,17 @@ public class OrderBackVO {
@ApiModelProperty(value = "放货箱数") @ApiModelProperty(value = "放货箱数")
private Integer releaseNum; private Integer releaseNum;
@ApiModelProperty(value = "到仓件数")
private Integer checkNum;
@ApiModelProperty(value = "到仓数量")
private Integer checkQuantity;
@ApiModelProperty(value = "到仓体积")
private BigDecimal checkVolume;
@ApiModelProperty(value = "到仓重量")
private BigDecimal checkWeight;
public void setExternalWarehouseJson(String externalWarehouseJson) { public void setExternalWarehouseJson(String externalWarehouseJson) {
this.externalWarehouseJson = externalWarehouseJson; this.externalWarehouseJson = externalWarehouseJson;
......
...@@ -389,6 +389,19 @@ public class OrderBaseVO { ...@@ -389,6 +389,19 @@ public class OrderBaseVO {
@ApiModelProperty(value = "是否有收货人,1-是,0-否") @ApiModelProperty(value = "是否有收货人,1-是,0-否")
private Boolean hasConsignee = true; private Boolean hasConsignee = true;
@ApiModelProperty(value = "到仓件数")
private Integer checkNum;
@ApiModelProperty(value = "到仓数量")
private Integer checkQuantity;
@ApiModelProperty(value = "到仓体积")
private BigDecimal checkVolume;
@ApiModelProperty(value = "到仓重量")
private BigDecimal checkWeight;
public void setExceptionReason(String exceptionReason) { public void setExceptionReason(String exceptionReason) {
this.exceptionReason = StringUtils.isNotBlank(exceptionReason) ? I18nMessage.getMessage(exceptionReason) : exceptionReason; this.exceptionReason = StringUtils.isNotBlank(exceptionReason) ? I18nMessage.getMessage(exceptionReason) : exceptionReason;
} }
......
...@@ -1522,6 +1522,9 @@ ...@@ -1522,6 +1522,9 @@
o.sum_num, o.sum_num,
o.sum_volume, o.sum_volume,
o.sum_weight, o.sum_weight,
o.check_num,
o.check_volume,
o.check_weight,
o.sum_weight_finished_warehouse_in, o.sum_weight_finished_warehouse_in,
o.sum_volume_finished_warehouse_in, o.sum_volume_finished_warehouse_in,
o.packing_list_url, o.packing_list_url,
...@@ -1536,7 +1539,7 @@ ...@@ -1536,7 +1539,7 @@
in_time, in_time,
if(#{query.userType} = 1, 1, 2) as user_type, if(#{query.userType} = 1, 1, 2) as user_type,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -1545,7 +1548,7 @@ ...@@ -1545,7 +1548,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
...@@ -1667,6 +1670,9 @@ ...@@ -1667,6 +1670,9 @@
o.sum_num, o.sum_num,
o.sum_volume, o.sum_volume,
o.sum_weight, o.sum_weight,
o.check_num,
o.check_volume,
o.check_weight,
o.sum_weight_finished_warehouse_in, o.sum_weight_finished_warehouse_in,
o.sum_volume_finished_warehouse_in, o.sum_volume_finished_warehouse_in,
o.packing_list_url, o.packing_list_url,
...@@ -1682,7 +1688,7 @@ ...@@ -1682,7 +1688,7 @@
in_time, in_time,
if(#{query.userType} = 1, 1, 2) as user_type, if(#{query.userType} = 1, 1, 2) as user_type,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -1691,7 +1697,7 @@ ...@@ -1691,7 +1697,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
...@@ -4467,8 +4473,6 @@ ...@@ -4467,8 +4473,6 @@
o.audit_result, o.audit_result,
o.guan_lian_order_status, o.guan_lian_order_status,
o.transport_id, o.transport_id,
-- (select ifnull(sum(ccp.pick_num),0) from ecw_order_cargo_control_pick ccp where ccp.order_id = o.order_id and
-- ccp.status in(1,2,3,4) ) as release_num,
o.release_num, o.release_num,
o.release_ratio, o.release_ratio,
o.is_cargo_control, o.is_cargo_control,
...@@ -4480,6 +4484,9 @@ ...@@ -4480,6 +4484,9 @@
o.sum_num, o.sum_num,
o.sum_volume, o.sum_volume,
o.sum_weight, o.sum_weight,
o.check_num,
o.check_volume,
o.check_weight,
o.sum_weight_finished_warehouse_in, o.sum_weight_finished_warehouse_in,
o.sum_volume_finished_warehouse_in, o.sum_volume_finished_warehouse_in,
o.packing_list_url, o.packing_list_url,
...@@ -4493,7 +4500,7 @@ ...@@ -4493,7 +4500,7 @@
in_time, in_time,
if(#{query.userType} = 1, 1, 2) as user_type, if(#{query.userType} = 1, 1, 2) as user_type,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -4502,7 +4509,7 @@ ...@@ -4502,7 +4509,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
...@@ -4593,8 +4600,6 @@ ...@@ -4593,8 +4600,6 @@
o.audit_result, o.audit_result,
o.guan_lian_order_status, o.guan_lian_order_status,
o.transport_id, o.transport_id,
-- (select ifnull(sum(ccp.pick_num),0) from ecw_order_cargo_control_pick ccp where ccp.order_id = o.order_id and
-- ccp.status in(1,2,3,4) ) as release_num,
o.release_num, o.release_num,
o.release_ratio, o.release_ratio,
o.is_cargo_control, o.is_cargo_control,
...@@ -4606,6 +4611,9 @@ ...@@ -4606,6 +4611,9 @@
o.sum_num, o.sum_num,
o.sum_volume, o.sum_volume,
o.sum_weight, o.sum_weight,
o.check_num,
o.check_volume,
o.check_weight,
o.sum_weight_finished_warehouse_in, o.sum_weight_finished_warehouse_in,
o.sum_volume_finished_warehouse_in, o.sum_volume_finished_warehouse_in,
o.packing_list_url, o.packing_list_url,
...@@ -4619,7 +4627,7 @@ ...@@ -4619,7 +4627,7 @@
in_time, in_time,
if(#{query.userType} = 1, 1, 2) as user_type, if(#{query.userType} = 1, 1, 2) as user_type,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -4628,7 +4636,7 @@ ...@@ -4628,7 +4636,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
...@@ -4745,8 +4753,6 @@ ...@@ -4745,8 +4753,6 @@
o.audit_result, o.audit_result,
o.guan_lian_order_status, o.guan_lian_order_status,
o.transport_id, o.transport_id,
-- (select ifnull(sum(ccp.pick_num),0) from ecw_order_cargo_control_pick ccp where ccp.order_id = o.order_id and
-- ccp.status in(1,2,3,4) ) as release_num,
o.release_num, o.release_num,
o.release_ratio, o.release_ratio,
o.is_cargo_control, o.is_cargo_control,
...@@ -4758,6 +4764,9 @@ ...@@ -4758,6 +4764,9 @@
o.sum_num, o.sum_num,
o.sum_volume, o.sum_volume,
o.sum_weight, o.sum_weight,
o.check_num,
o.check_volume,
o.check_weight,
o.sum_weight_finished_warehouse_in, o.sum_weight_finished_warehouse_in,
o.sum_volume_finished_warehouse_in, o.sum_volume_finished_warehouse_in,
o.packing_list_url, o.packing_list_url,
...@@ -4771,7 +4780,7 @@ ...@@ -4771,7 +4780,7 @@
in_time, in_time,
if(#{query.userType} = 1, 1, 2) as user_type, if(#{query.userType} = 1, 1, 2) as user_type,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -4780,7 +4789,7 @@ ...@@ -4780,7 +4789,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
...@@ -4879,8 +4888,6 @@ ...@@ -4879,8 +4888,6 @@
o.audit_result, o.audit_result,
o.guan_lian_order_status, o.guan_lian_order_status,
o.transport_id, o.transport_id,
-- (select ifnull(sum(ccp.pick_num),0) from ecw_order_cargo_control_pick ccp where ccp.order_id = o.order_id and
-- ccp.status in(1,2,3,4) ) as release_num,
o.release_num, o.release_num,
o.release_ratio, o.release_ratio,
o.is_cargo_control, o.is_cargo_control,
...@@ -4892,6 +4899,9 @@ ...@@ -4892,6 +4899,9 @@
o.sum_num, o.sum_num,
o.sum_volume, o.sum_volume,
o.sum_weight, o.sum_weight,
o.check_num,
o.check_volume,
o.check_weight,
o.sum_weight_finished_warehouse_in, o.sum_weight_finished_warehouse_in,
o.sum_volume_finished_warehouse_in, o.sum_volume_finished_warehouse_in,
o.packing_list_url, o.packing_list_url,
...@@ -4909,7 +4919,7 @@ ...@@ -4909,7 +4919,7 @@
in_time, in_time,
if(#{query.userType} = 1, 1, 2) as user_type, if(#{query.userType} = 1, 1, 2) as user_type,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -4918,7 +4928,7 @@ ...@@ -4918,7 +4928,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
...@@ -5000,6 +5010,9 @@ ...@@ -5000,6 +5010,9 @@
o.sum_num, o.sum_num,
o.sum_volume, o.sum_volume,
o.sum_weight, o.sum_weight,
o.check_num,
o.check_volume,
o.check_weight,
o.sum_weight_finished_warehouse_in, o.sum_weight_finished_warehouse_in,
o.sum_volume_finished_warehouse_in, o.sum_volume_finished_warehouse_in,
o.packing_list_url, o.packing_list_url,
...@@ -5016,7 +5029,7 @@ ...@@ -5016,7 +5029,7 @@
in_time, in_time,
if(#{query.userType} = 1, 1, 2) as user_type, if(#{query.userType} = 1, 1, 2) as user_type,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -5025,7 +5038,7 @@ ...@@ -5025,7 +5038,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
...@@ -5128,6 +5141,9 @@ ...@@ -5128,6 +5141,9 @@
o.sum_num, o.sum_num,
o.sum_volume, o.sum_volume,
o.sum_weight, o.sum_weight,
o.check_num,
o.check_volume,
o.check_weight,
o.sum_weight_finished_warehouse_in, o.sum_weight_finished_warehouse_in,
o.sum_volume_finished_warehouse_in, o.sum_volume_finished_warehouse_in,
o.packing_list_url, o.packing_list_url,
...@@ -5136,7 +5152,7 @@ ...@@ -5136,7 +5152,7 @@
o.is_exception, o.is_exception,
o.create_time, o.create_time,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -5145,7 +5161,7 @@ ...@@ -5145,7 +5161,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
...@@ -7073,7 +7089,7 @@ ...@@ -7073,7 +7089,7 @@
o.create_time, o.create_time,
if(#{query.userType} = 1, 1, 2) as user_type, if(#{query.userType} = 1, 1, 2) as user_type,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -7082,7 +7098,7 @@ ...@@ -7082,7 +7098,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
...@@ -7172,7 +7188,7 @@ ...@@ -7172,7 +7188,7 @@
o.create_time, o.create_time,
if(#{query.userType} = 1, 1, 2) as user_type, if(#{query.userType} = 1, 1, 2) as user_type,
nor.customer_id as consignor_customer_id, nor.customer_id as consignor_customer_id,
if(nor.customer_id != null and nor.customer_id > 0, if(nor.customer_id is not null and nor.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nor.customer_id),
"") as consignor_follow_customerService, "") as consignor_follow_customerService,
nor.customer_number as consignor_customer_number, nor.customer_number as consignor_customer_number,
...@@ -7181,7 +7197,7 @@ ...@@ -7181,7 +7197,7 @@
nor.phone as consignor_phone, nor.phone as consignor_phone,
nor.country_code as consignor_country_code, nor.country_code as consignor_country_code,
nee.customer_id as consignee_customer_id, nee.customer_id as consignee_customer_id,
if(nee.customer_id != null and nee.customer_id > 0, if(nee.customer_id is not null and nee.customer_id > 0,
(SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id), (SELECT u1.nickname FROM system_user u1 JOIN system_user u2 on u1.id = u2.customer_service_id JOIN ecw_customer u ON u.customer_service = u2.id WHERE u.id = nee.customer_id),
"") as consignee_follow_customerService, "") as consignee_follow_customerService,
nee.customer_number as consignee_customer_number, nee.customer_number as consignee_customer_number,
......
...@@ -238,7 +238,7 @@ public class RewardServiceImpl extends AbstractService<RewardMapper, RewardDO> i ...@@ -238,7 +238,7 @@ public class RewardServiceImpl extends AbstractService<RewardMapper, RewardDO> i
} }
//提货点id,领取方式,状态 //提货点id,领取方式,状态
lambdaQuery.eqIfPresent(RewardDO::getNodeId, query.getNodeId()) lambdaQuery.eqIfPresent(RewardDO::getNodeId, query.getNodeId())
.eq(StringUtils.isNotBlank(query.getPickMethod()), RewardDO::getPickMethod, query.getPickMethod()) .likeIfPresent(RewardDO::getPickMethod, query.getPickMethod())
.eqIfPresent(RewardDO::getStatus, query.getStatus()); .eqIfPresent(RewardDO::getStatus, query.getStatus());
//判断memberId,筛选会员所在城市网点礼品 //判断memberId,筛选会员所在城市网点礼品
if (query.getMemberId() != null && query.getNodeId() == null) { if (query.getMemberId() != null && query.getNodeId() == null) {
......
...@@ -8,6 +8,8 @@ import java.util.*; ...@@ -8,6 +8,8 @@ import java.util.*;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import javax.validation.constraints.NotNull;
/** /**
* 报价单管理 DO * 报价单管理 DO
...@@ -70,6 +72,9 @@ public class OfferDO extends BaseDO { ...@@ -70,6 +72,9 @@ public class OfferDO extends BaseDO {
* 始发地信息 * 始发地信息
*/ */
private String departure; private String departure;
@ApiModelProperty(value = "目的地国ID")
private Long destCountryId;
/** /**
* 目的地 * 目的地
*/ */
......
...@@ -93,39 +93,27 @@ public interface OfferMapper extends BaseMapperX<OfferDO> { ...@@ -93,39 +93,27 @@ public interface OfferMapper extends BaseMapperX<OfferDO> {
@Select({ @Select({
"<script>", "<script>",
"select o.*, ", "select o.*, ",
// "o.number, ",
// "o.order_no, ",
// "o.order_id, ",
"if(#{lang} = 0, o.departure ->> '$.titleZh', o.departure ->> '$.titleEn') as departure_name, ", "if(#{lang} = 0, o.departure ->> '$.titleZh', o.departure ->> '$.titleEn') as departure_name, ",
"if(#{lang} = 0, o.objective ->> '$.titleZh', o.objective ->> '$.titleEn') as objective_name, ", "if(#{lang} = 0, o.objective ->> '$.titleZh', o.objective ->> '$.titleEn') as objective_name, ",
// "o.start_time, ",
// "o.end_time, ",
// "o.stop_time, ",
// "o.status, ",
// "o.transport_id, ",
// "o.est_cost, ",
// "o.create_time, ",
// "o.update_time, ",
"user.number as customer_number, ", "user.number as customer_number, ",
"(select count(1) from ecw_customer_followup l where l.offer_id = o.offer_id) as log_count, ", "(select count(1) from ecw_customer_followup l where l.offer_id = o.offer_id) as log_count, ",
"u.nickname as creator_name, ", "u.nickname as creator_name, ",
"u.nickname as business_manager_name, ", "u.nickname as business_manager_name, ",
// "(SELECT cc.`name` FROM ecw_customer_contacts cc WHERE ( o.relation = 1 AND cc.id = o.consignor_id ) OR ( o.relation = 2 AND cc.id = o.consignee_id)) AS relation_name ",
"cc.name as relation_name, ", "cc.name as relation_name, ",
"cc.area_code as relation_area_code, ", "cc.area_code as relation_area_code, ",
"cc.phone_new as relation_phone, ", "cc.phone_new as relation_phone, ",
"if(#{lang} = 0, l.name_zh , l.name_en ) as channel_name, ", "if(#{lang} = 0, l.name_zh , l.name_en ) as channel_name, ",
"line.start_warehouse_id, ", "if(#{lang} = 0, st.title_zh , st.title_en) as start_warehouse_name, ",
"line.dest_warehouse_id, ", "if(#{lang} = 0, dst.title_zh , dst.title_en) as dest_warehouse_name, ",
"line.transport_type ", "line.transport_type ",
"from ecw_offer o ", "from ecw_offer o ",
"left join ecw_customer_contacts cc on (o.relation = 1 and cc.id = o.consignor_id) or (o.relation = 2 and cc.id = o.consignee_id) ", "join ecw_customer_contacts cc on (o.relation = 1 and cc.id = o.consignor_id) or (o.relation = 2 and cc.id = o.consignee_id) ",
"left join ecw_customer user on user.id = o.relation_id ", "join ecw_customer user on user.id = o.relation_id ",
"left join system_user u on u.id = o.follow_up_salesman_id ", "left join system_user u on u.id = o.follow_up_salesman_id ",
"left join ecw_region s on o.objective_id = s.id ", "join ecw_region s on o.objective_id = s.id ",
"left join ecw_warehouse_line line on o.line_id = line.id ", "join ecw_warehouse_line line on o.line_id = line.id ",
"left join ecw_warehouse dst on line.dest_warehouse_id = dst.id ", "join ecw_warehouse st on line.start_warehouse_id = st.id ",
"join ecw_warehouse dst on line.dest_warehouse_id = dst.id ",
"left join ecw_channel l on o.channel_id = l.channel_id ", "left join ecw_channel l on o.channel_id = l.channel_id ",
"where o.deleted = 0", "where o.deleted = 0",
...@@ -152,7 +140,6 @@ public interface OfferMapper extends BaseMapperX<OfferDO> { ...@@ -152,7 +140,6 @@ public interface OfferMapper extends BaseMapperX<OfferDO> {
"AND o.relation_id = #{pageVO.customerId} ", "AND o.relation_id = #{pageVO.customerId} ",
"</when>", "</when>",
"<when test = 'pageVO.deptId != null'>", "<when test = 'pageVO.deptId != null'>",
"AND o.dept_id = #{pageVO.deptId} ", "AND o.dept_id = #{pageVO.deptId} ",
"</when>", "</when>",
...@@ -204,23 +191,23 @@ public interface OfferMapper extends BaseMapperX<OfferDO> { ...@@ -204,23 +191,23 @@ public interface OfferMapper extends BaseMapperX<OfferDO> {
"</when>", "</when>",
"<when test = 'pageVO.importances != null and pageVO.importances.size() > 0'>", "<when test = 'pageVO.importances != null and pageVO.importances.size() > 0'>",
"AND o.`importance` IN ", "AND o.`importance` IN ",
"<foreach item='importance' collection='pageVO.importances' open='(' close=')' separator=','> #{importance} </foreach>)", "<foreach item='importance' collection='pageVO.importances' open='(' close=')' separator=','> #{importance} </foreach>",
"</when>", "</when>",
"<when test = 'pageVO.salesmanIds != null and pageVO.salesmanIds.size() > 0'>", "<when test = 'pageVO.salesmanIds != null and pageVO.salesmanIds.size() > 0'>",
"AND o.`follow_up_salesman_id` IN ", "AND o.`follow_up_salesman_id` IN ",
"<foreach item='id' collection='pageVO.salesmanIds' open='(' close=')' separator=','> #{id} </foreach>)", "<foreach item='id' collection='pageVO.salesmanIds' open='(' close=')' separator=','> #{id} </foreach>",
"</when>", "</when>",
"<when test = 'pageVO.statusList != null and pageVO.statusList.size() > 0'>", "<when test = 'pageVO.statusList != null and pageVO.statusList.size() > 0'>",
"AND o.`status` IN ", "AND o.`status` IN ",
"<foreach item='it' collection='pageVO.statusList' open='(' close=')' separator=','> #{it} </foreach>)", "<foreach item='it' collection='pageVO.statusList' open='(' close=')' separator=','> #{it} </foreach>",
"</when>", "</when>",
"<when test = 'pageVO.channelIds != null and pageVO.channelIds.size() > 0'>", "<when test = 'pageVO.channelIds != null and pageVO.channelIds.size() > 0'>",
"AND o.`channel_id` IN ", "AND o.`channel_id` IN ",
"<foreach item='it' collection='pageVO.channelIds' open='(' close=')' separator=','> #{it} </foreach>)", "<foreach item='it' collection='pageVO.channelIds' open='(' close=')' separator=','> #{it} </foreach>",
"</when>", "</when>",
"<when test = 'pageVO.sourceIds != null and pageVO.sourceIds.size() > 0'>", "<when test = 'pageVO.sourceIds != null and pageVO.sourceIds.size() > 0'>",
"AND user.`source` IN ", "AND user.`source` IN ",
"<foreach item='it' collection='pageVO.sourceIds' open='(' close=')' separator=','> #{it} </foreach>)", "<foreach item='it' collection='pageVO.sourceIds' open='(' close=')' separator=','> #{it} </foreach>",
"</when>", "</when>",
"<when test = 'pageVO.beginStopTime != null and pageVO.endStopTime != null '>", "<when test = 'pageVO.beginStopTime != null and pageVO.endStopTime != null '>",
"AND o.`stop_time` between #{pageVO.beginStopTime} and #{pageVO.endStopTime}", "AND o.`stop_time` between #{pageVO.beginStopTime} and #{pageVO.endStopTime}",
...@@ -254,11 +241,21 @@ public interface OfferMapper extends BaseMapperX<OfferDO> { ...@@ -254,11 +241,21 @@ public interface OfferMapper extends BaseMapperX<OfferDO> {
"<script>", "<script>",
"select count(1)", "select count(1)",
"from ecw_offer o ", "from ecw_offer o ",
"left join ecw_customer c on c.id = o.relation_id ", "join ecw_customer_contacts cc on (o.relation = 1 and cc.id = o.consignor_id) or (o.relation = 2 and cc.id = o.consignee_id) ",
"left join ecw_region s on o.objective_id = s.id ", "join ecw_customer user on user.id = o.relation_id ",
"left join ecw_warehouse_line line on o.line_id = line.id ", "left join system_user u on u.id = o.follow_up_salesman_id ",
"left join ecw_warehouse dst on line.dest_warehouse_id = dst.id ", "join ecw_region s on o.objective_id = s.id ",
"join ecw_warehouse_line line on o.line_id = line.id ",
"join ecw_warehouse st on line.start_warehouse_id = st.id ",
"join ecw_warehouse dst on line.dest_warehouse_id = dst.id ",
"left join ecw_channel l on o.channel_id = l.channel_id ",
"where o.deleted = 0", "where o.deleted = 0",
//startWarehouseIds
"<when test = 'pageVO.startWarehouseIds != null and pageVO.startWarehouseIds.size() > 0'>",
"AND st.id IN",
"<foreach item='startWarehouseId' collection='pageVO.startWarehouseIds' open='(' close=')' separator=','> #{startWarehouseId} </foreach>",
"</when>",
//destCountryIds //destCountryIds
"<when test = 'pageVO.destCountryIds != null and pageVO.destCountryIds.size() > 0'>", "<when test = 'pageVO.destCountryIds != null and pageVO.destCountryIds.size() > 0'>",
"AND dst.guojia IN", "AND dst.guojia IN",
...@@ -281,6 +278,7 @@ public interface OfferMapper extends BaseMapperX<OfferDO> { ...@@ -281,6 +278,7 @@ public interface OfferMapper extends BaseMapperX<OfferDO> {
"<when test = 'pageVO.customerId != null'>", "<when test = 'pageVO.customerId != null'>",
"AND o.relation_id = #{pageVO.customerId} ", "AND o.relation_id = #{pageVO.customerId} ",
"</when>", "</when>",
"<when test = 'pageVO.deptId != null'>", "<when test = 'pageVO.deptId != null'>",
"AND o.dept_id = #{pageVO.deptId} ", "AND o.dept_id = #{pageVO.deptId} ",
"</when>", "</when>",
...@@ -327,37 +325,31 @@ public interface OfferMapper extends BaseMapperX<OfferDO> { ...@@ -327,37 +325,31 @@ public interface OfferMapper extends BaseMapperX<OfferDO> {
"<when test = 'pageVO.beginEndTime != null and pageVO.endEndTime != null '>", "<when test = 'pageVO.beginEndTime != null and pageVO.endEndTime != null '>",
"AND o.`end_time` between #{pageVO.beginEndTime} and #{pageVO.endEndTime}", "AND o.`end_time` between #{pageVO.beginEndTime} and #{pageVO.endEndTime}",
"</when>", "</when>",
"<when test = 'pageVO.beginStopTime != null and pageVO.endStopTime != null '>",
"AND o.`stop_time` between #{pageVO.beginStopTime} and #{pageVO.endStopTime}",
"</when>",
"<when test = 'pageVO.expired != null and pageVO.expired.after != null and pageVO.expired.before != null'>", "<when test = 'pageVO.expired != null and pageVO.expired.after != null and pageVO.expired.before != null'>",
"AND o.`end_time` between #{pageVO.expired.after} and #{pageVO.expired.before}", "AND o.`end_time` between #{pageVO.expired.after} and #{pageVO.expired.before}",
"</when>", "</when>",
"<when test = 'pageVO.importances != null and pageVO.importances.size() > 0'>", "<when test = 'pageVO.importances != null and pageVO.importances.size() > 0'>",
"AND o.`importance` IN ", "AND o.`importance` IN ",
"<foreach item='importance' collection='pageVO.importances' open='(' close=')' separator=','> #{importance} </foreach>)", "<foreach item='importance' collection='pageVO.importances' open='(' close=')' separator=','> #{importance} </foreach>",
"</when>", "</when>",
"<when test = 'pageVO.salesmanIds != null and pageVO.salesmanIds.size() > 0'>", "<when test = 'pageVO.salesmanIds != null and pageVO.salesmanIds.size() > 0'>",
"AND o.`follow_up_salesman_id` IN ", "AND o.`follow_up_salesman_id` IN ",
"<foreach item='id' collection='pageVO.salesmanIds' open='(' close=')' separator=','> #{id} </foreach>)", "<foreach item='id' collection='pageVO.salesmanIds' open='(' close=')' separator=','> #{id} </foreach>",
"</when>", "</when>",
"<when test = 'pageVO.statusList != null and pageVO.statusList.size() > 0'>", "<when test = 'pageVO.statusList != null and pageVO.statusList.size() > 0'>",
"AND o.`status` IN ", "AND o.`status` IN ",
"<foreach item='it' collection='pageVO.statusList' open='(' close=')' separator=','> #{it} </foreach>)", "<foreach item='it' collection='pageVO.statusList' open='(' close=')' separator=','> #{it} </foreach>",
"</when>", "</when>",
"<when test = 'pageVO.channelIds != null and pageVO.channelIds.size() > 0'>", "<when test = 'pageVO.channelIds != null and pageVO.channelIds.size() > 0'>",
"AND o.`channel_id` IN ", "AND o.`channel_id` IN ",
"<foreach item='it' collection='pageVO.channelIds' open='(' close=')' separator=','> #{it} </foreach>)", "<foreach item='it' collection='pageVO.channelIds' open='(' close=')' separator=','> #{it} </foreach>",
"</when>", "</when>",
"<when test = 'pageVO.sourceIds != null and pageVO.sourceIds.size() > 0'>", "<when test = 'pageVO.sourceIds != null and pageVO.sourceIds.size() > 0'>",
"AND c.`source` IN ", "AND user.`source` IN ",
"<foreach item='it' collection='pageVO.sourceIds' open='(' close=')' separator=','> #{it} </foreach>)", "<foreach item='it' collection='pageVO.sourceIds' open='(' close=')' separator=','> #{it} </foreach>",
"</when>",
"<when test = 'pageVO.relationId != null'>",
"AND o.`relation_id` = #{pageVO.relationId}",
"</when>", "</when>",
"<when test = 'pageVO.followUpSalesmanId != null'>", "<when test = 'pageVO.beginStopTime != null and pageVO.endStopTime != null '>",
"AND o.`follow_up_salesman_id` = #{pageVO.followUpSalesmanId}", "AND o.`stop_time` between #{pageVO.beginStopTime} and #{pageVO.endStopTime}",
"</when>", "</when>",
"<when test = 'pageVO.prodTitle != null and pageVO.prodTitle != \"\" '>", "<when test = 'pageVO.prodTitle != null and pageVO.prodTitle != \"\" '>",
"and (o.offer_id in(", "and (o.offer_id in(",
...@@ -371,6 +363,9 @@ public interface OfferMapper extends BaseMapperX<OfferDO> { ...@@ -371,6 +363,9 @@ public interface OfferMapper extends BaseMapperX<OfferDO> {
"<when test = 'pageVO.relationId != null'>", "<when test = 'pageVO.relationId != null'>",
"AND o.`relation_id` = #{pageVO.relationId}", "AND o.`relation_id` = #{pageVO.relationId}",
"</when>", "</when>",
"<when test = 'pageVO.followUpSalesmanId != null'>",
"AND o.`follow_up_salesman_id` = #{pageVO.followUpSalesmanId}",
"</when>",
"<when test = 'pageVO.searchCustomer != null and pageVO.searchCustomer != \"\" '>", "<when test = 'pageVO.searchCustomer != null and pageVO.searchCustomer != \"\" '>",
"AND o.`relation_id` in(select cc.customer_id from ecw_customer_contacts cc where concat(cc.`name`, cc.phone_new) like concat('%',concat(#{pageVO.searchCustomer},'%')))", "AND o.`relation_id` in(select cc.customer_id from ecw_customer_contacts cc where concat(cc.`name`, cc.phone_new) like concat('%',concat(#{pageVO.searchCustomer},'%')))",
"</when>", "</when>",
...@@ -400,7 +395,7 @@ public interface OfferMapper extends BaseMapperX<OfferDO> { ...@@ -400,7 +395,7 @@ public interface OfferMapper extends BaseMapperX<OfferDO> {
"u.nickname as creator_name, ", "u.nickname as creator_name, ",
"cc.name as relation_name", "cc.name as relation_name",
"from ecw_offer o ", "from ecw_offer o ",
"left join ecw_customer_contacts cc on (o.relation = 1 and cc.id = o.consignor_id) or (o.relation = 2 and cc.id = o.consignee_id) ", "join ecw_customer_contacts cc on (o.relation = 1 and cc.id = o.consignor_id) or (o.relation = 2 and cc.id = o.consignee_id) ",
"left join system_user u on u.id = o.follow_up_salesman_id ", "left join system_user u on u.id = o.follow_up_salesman_id ",
"where o.deleted = 0", "where o.deleted = 0",
"AND o.`status` in(1,3,4,5,6)", "AND o.`status` in(1,3,4,5,6)",
......
...@@ -65,5 +65,7 @@ public interface ErrorCodeConstants { ...@@ -65,5 +65,7 @@ public interface ErrorCodeConstants {
ErrorCode ORDER_ASSOCIATION_OFFER_NO_CAN_UPDATE = new ErrorCode(1004010052, "order.association.offer.no.can.update"); ErrorCode ORDER_ASSOCIATION_OFFER_NO_CAN_UPDATE = new ErrorCode(1004010052, "order.association.offer.no.can.update");
ErrorCode ORDER_BOUND_OFFER = new ErrorCode(1004010053, "order.bound.offer"); ErrorCode ORDER_BOUND_OFFER = new ErrorCode(1004010053, "order.bound.offer");
ErrorCode OFFER_LINE_NOT_EXIST = new ErrorCode(1004010054, "line.not.exist");
ErrorCode OFFER_DEPARTURE_OBJECTIVE_AND_LINE_NOT_AGREEMENT = new ErrorCode(1004010055, "offer.departure.objective.and.line.not.agreement");
} }
...@@ -209,6 +209,18 @@ public class OfferServiceImpl extends AbstractService<OfferMapper, OfferDO> impl ...@@ -209,6 +209,18 @@ public class OfferServiceImpl extends AbstractService<OfferMapper, OfferDO> impl
if (Objects.nonNull(createReqVO.getEstCostVO())) { if (Objects.nonNull(createReqVO.getEstCostVO())) {
offer.setEstCost(JSONObject.toJSONString(createReqVO.getEstCostVO())); offer.setEstCost(JSONObject.toJSONString(createReqVO.getEstCostVO()));
} }
LogisticsInfoDto logisticsInfoDto =
warehouseLineMapper.getStartInfoAndDestInfoByLineId(
createReqVO.getLineId());
if (Objects.isNull(logisticsInfoDto)) {
throw exception(OFFER_LINE_NOT_EXIST);
}
if (!Objects.equals(logisticsInfoDto.getStartCityId(),
createReqVO.getDepartureId()) || !Objects.equals(
logisticsInfoDto.getDestCityId(), createReqVO.getObjectiveId()) || !Objects.equals(
logisticsInfoDto.getDestCountryId(), createReqVO.getDestCountryId())) {
throw exception(OFFER_DEPARTURE_OBJECTIVE_AND_LINE_NOT_AGREEMENT);
}
// offer.setStatus(2);// 确认中 // offer.setStatus(2);// 确认中
// 查询始发地与目的地信息 // 查询始发地与目的地信息
RegionDO departure = regionService.getRegion(offer.getDepartureId()); RegionDO departure = regionService.getRegion(offer.getDepartureId());
...@@ -534,6 +546,18 @@ public class OfferServiceImpl extends AbstractService<OfferMapper, OfferDO> impl ...@@ -534,6 +546,18 @@ public class OfferServiceImpl extends AbstractService<OfferMapper, OfferDO> impl
if (Objects.nonNull(updateReqVO.getEstCostVO())) { if (Objects.nonNull(updateReqVO.getEstCostVO())) {
updateObj.setEstCost(JSONObject.toJSONString(updateReqVO.getEstCostVO())); updateObj.setEstCost(JSONObject.toJSONString(updateReqVO.getEstCostVO()));
} }
LogisticsInfoDto logisticsInfoDto =
warehouseLineMapper.getStartInfoAndDestInfoByLineId(
updateReqVO.getLineId());
if (Objects.isNull(logisticsInfoDto)) {
throw exception(OFFER_LINE_NOT_EXIST);
}
if (!Objects.equals(logisticsInfoDto.getStartCityId(),
updateReqVO.getDepartureId()) || !Objects.equals(
logisticsInfoDto.getDestCityId(), updateReqVO.getObjectiveId()) || !Objects.equals(
logisticsInfoDto.getDestCountryId(), updateReqVO.getDestCountryId())) {
throw exception(OFFER_DEPARTURE_OBJECTIVE_AND_LINE_NOT_AGREEMENT);
}
// 查询始发地与目的地信息 // 查询始发地与目的地信息
RegionDO departure = regionService.getRegion(updateReqVO.getDepartureId()); RegionDO departure = regionService.getRegion(updateReqVO.getDepartureId());
if (Objects.isNull(departure) || (!StrUtil.equals(departure.getType(), "2") && !StrUtil.equals(departure.getType(), "3"))) { if (Objects.isNull(departure) || (!StrUtil.equals(departure.getType(), "2") && !StrUtil.equals(departure.getType(), "3"))) {
...@@ -642,7 +666,12 @@ public class OfferServiceImpl extends AbstractService<OfferMapper, OfferDO> impl ...@@ -642,7 +666,12 @@ public class OfferServiceImpl extends AbstractService<OfferMapper, OfferDO> impl
if (CollectionUtil.isEmpty(offerProdDOList)) { if (CollectionUtil.isEmpty(offerProdDOList)) {
throw exception(OFFER_PROD_NOT_NULL); throw exception(OFFER_PROD_NOT_NULL);
} }
respVO.setOfferProdRespVOList(OfferProdConvert.INSTANCE.convertList(offerProdDOList)); respVO.setOfferProdRespVOList(OfferProdConvert.INSTANCE.convertList(offerProdDOList));
LogisticsInfoDto logisticsInfoDto =
warehouseLineMapper.getStartInfoAndDestInfoByLineId(
respVO.getLineId());
respVO.setLogisticsInfoDto(logisticsInfoDto);
return respVO; return respVO;
} }
...@@ -947,6 +976,7 @@ public class OfferServiceImpl extends AbstractService<OfferMapper, OfferDO> impl ...@@ -947,6 +976,7 @@ public class OfferServiceImpl extends AbstractService<OfferMapper, OfferDO> impl
createReqVO.setType(offerDO.getServiceType()); createReqVO.setType(offerDO.getServiceType());
createReqVO.setChannelId(channelId); createReqVO.setChannelId(channelId);
createReqVO.setLineId(lineId); createReqVO.setLineId(lineId);
createReqVO.setType(offerDO.getServiceType());
createReqVO.setTransportId(offerDO.getTransportId()); createReqVO.setTransportId(offerDO.getTransportId());
createReqVO.setShippingCompany(offerTransportDO.getShippingCompany()); createReqVO.setShippingCompany(offerTransportDO.getShippingCompany());
createReqVO.setAirlineCompany(offerTransportDO.getAirlineCompany()); createReqVO.setAirlineCompany(offerTransportDO.getAirlineCompany());
......
...@@ -60,6 +60,10 @@ public class OfferBaseVO { ...@@ -60,6 +60,10 @@ public class OfferBaseVO {
@NotNull(message = "objective.not.exists") @NotNull(message = "objective.not.exists")
private Long objectiveId; private Long objectiveId;
@ApiModelProperty(value = "目的地国ID")
@NotNull(message = "目的国不能为空")
private Long destCountryId;
// @ApiModelProperty(value = "目的地信息") // @ApiModelProperty(value = "目的地信息")
// private String objective; // private String objective;
......
...@@ -174,6 +174,9 @@ public class OfferPageReqVO extends PageParam { ...@@ -174,6 +174,9 @@ public class OfferPageReqVO extends PageParam {
@ApiModelProperty(value = "目的地id集合") @ApiModelProperty(value = "目的地id集合")
private List<Long> objectiveIds; private List<Long> objectiveIds;
@ApiModelProperty(value = "目的仓ID集合")
private List<Long> startWarehouseIds;
@ApiModelProperty(value = "目的仓ID集合") @ApiModelProperty(value = "目的仓ID集合")
private List<Long> destWarehouseIds; private List<Long> destWarehouseIds;
......
package cn.iocoder.yudao.module.sale.vo.offer; package cn.iocoder.yudao.module.sale.vo.offer;
import cn.iocoder.yudao.module.depository.dto.LogisticsInfoDto;
import cn.iocoder.yudao.module.sale.vo.offer.prod.OfferProdRespVO; import cn.iocoder.yudao.module.sale.vo.offer.prod.OfferProdRespVO;
import cn.iocoder.yudao.module.sale.vo.offer.transport.OfferTransportCreateReqVO; import cn.iocoder.yudao.module.sale.vo.offer.transport.OfferTransportCreateReqVO;
import cn.iocoder.yudao.module.sale.vo.offer.transport.OfferTransportRespVO; import cn.iocoder.yudao.module.sale.vo.offer.transport.OfferTransportRespVO;
...@@ -32,7 +33,10 @@ public class OfferRespVO extends OfferBaseVO { ...@@ -32,7 +33,10 @@ public class OfferRespVO extends OfferBaseVO {
private OfferTransportRespVO transportVO; private OfferTransportRespVO transportVO;
@ApiModelProperty(value = "报价单商品列表") @ApiModelProperty(value = "报价单商品列表")
List<OfferProdRespVO> offerProdRespVOList; private List<OfferProdRespVO> offerProdRespVOList;
@ApiModelProperty(value = "物流信息")
private LogisticsInfoDto logisticsInfoDto;
@ApiModelProperty(value = "始发地名称") @ApiModelProperty(value = "始发地名称")
private String departureName; private String departureName;
...@@ -59,10 +63,14 @@ public class OfferRespVO extends OfferBaseVO { ...@@ -59,10 +63,14 @@ public class OfferRespVO extends OfferBaseVO {
// 线路相关 // 线路相关
@ExcelProperty("始发仓库id") @ApiModelProperty("始发仓库id")
private Long startWarehouseId; private Long startWarehouseId;
@ExcelProperty("目的仓库id") @ApiModelProperty("始发仓库名称")
private String startWarehouseName;
@ApiModelProperty("目的仓库id")
private Long destWarehouseId; private Long destWarehouseId;
@ApiModelProperty("目的仓库名称")
private String destWarehouseName;
@ExcelProperty("运输方式") @ExcelProperty("运输方式")
private String transportType; private String transportType;
......
...@@ -3763,7 +3763,7 @@ public class BoxServiceImpl extends AbstractService<BoxMapper, BoxDO> implements ...@@ -3763,7 +3763,7 @@ public class BoxServiceImpl extends AbstractService<BoxMapper, BoxDO> implements
//看看收货人是否是送货上门 //看看收货人是否是送货上门
OrderConsigneeBackVO orderConsigneeDO = backVO.getConsigneeVO(); OrderConsigneeBackVO orderConsigneeDO = backVO.getConsigneeVO();
//送货方式,2-送货上门 //送货方式,2-送货上门
Integer harvestMethod = orderConsigneeDO.getHarvestMethod(); Integer harvestMethod = Objects.nonNull(orderConsigneeDO) && Objects.nonNull(orderConsigneeDO.getHarvestMethod()) ? orderConsigneeDO.getHarvestMethod() : backVO.getHarvestMethod();
if (harvestMethod == null || harvestMethod != 2) continue; if (harvestMethod == null || harvestMethod != 2) continue;
//创建订单异常 //创建订单异常
......
...@@ -221,6 +221,9 @@ yudao: ...@@ -221,6 +221,9 @@ yudao:
send-maximum-quantity-per-day: 50 send-maximum-quantity-per-day: 50
begin-code: 9999 # 验证码最小值 begin-code: 9999 # 验证码最小值
end-code: 9999 # 验证码最大值。 end-code: 9999 # 验证码最大值。
member: # 会员相关配置
register-url: https://apptest.groupage.cn/#/pages/register/shareRegister?code=
share-url: https://apptest.groupage.cn/#
justauth: justauth:
enabled: true enabled: true
......
...@@ -225,6 +225,9 @@ yudao: ...@@ -225,6 +225,9 @@ yudao:
send-maximum-quantity-per-day: 50 send-maximum-quantity-per-day: 50
begin-code: 9999 # 验证码最小值 begin-code: 9999 # 验证码最小值
end-code: 9999 # 验证码最大值。 end-code: 9999 # 验证码最大值。
member: # 会员相关配置
register-url: https://applocal.groupage.cn/#/pages/register/shareRegister?code=
share-url: https://applocal.groupage.cn/#
justauth: justauth:
enabled: true enabled: true
......
...@@ -217,6 +217,9 @@ yudao: ...@@ -217,6 +217,9 @@ yudao:
send-maximum-quantity-per-day: 50 send-maximum-quantity-per-day: 50
begin-code: 1000 # 验证码最小值 begin-code: 1000 # 验证码最小值
end-code: 9999 # 验证码最大值。 end-code: 9999 # 验证码最大值。
member: # 会员相关配置
register-url: https://app2.groupage.cn/#/pages/register/shareRegister?code=
share-url: https://app2.groupage.cn/#
justauth: justauth:
enabled: true enabled: true
......
server:
port: 9001
--- #################### 数据库相关配置 ####################
spring:
# 数据源配置项
autoconfigure:
exclude:
- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源
datasource:
druid: # Druid 【监控】相关的全局配置
web-stat-filter:
enabled: true
stat-view-servlet:
enabled: true
allow: # 设置白名单,不填则允许所有访问
url-pattern: /druid/*
login-username: # 控制台管理用户名和密码
login-password:
filter:
stat:
enabled: true
log-slow-sql: true # 慢 SQL 记录
slow-sql-millis: 100
merge-sql: true
wall:
config:
multi-statement-allow: true
dynamic: # 多数据源配置
druid: # Druid 【连接池】相关的全局配置
initial-size: 5 # 初始连接数
min-idle: 10 # 最小连接池数量
max-active: 20 # 最大连接池数量
max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒
time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒
min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒
max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒
validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效
test-while-idle: true
test-on-borrow: false
test-on-return: false
primary: master
datasource:
master:
name: jiedao
url: jdbc:mysql://10.10.0.13:3306/${spring.datasource.dynamic.datasource.master.name}?useUnicode=true&useSSL=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&rewriteBatchedStatements=TRUE
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: mysql@2022
slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
name: jiedao
url: jdbc:mysql://10.10.0.13:3306/${spring.datasource.dynamic.datasource.slave.name}?useUnicode=true&useSSL=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&rewriteBatchedStatements=TRUE
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: mysql@2022
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
redis:
host: 10.10.0.14 # 地址
port: 6379 # 端口
database: 0 # 数据库索引
password: redis@2022
timeout: 60s
connect-timeout: 60s
redis-limiter:
redis-host: 10.10.0.14 # redis server IP 默认值:127.0.0.1
redis-port: 6379 # redis service 端口 默认值:6379
redis-db: 1 # redis service 数据库 默认值:6379
redis-password: redis@2022 # redis 访问密码 默认值:null
redis-connection-timeout: 2000 # redis 连接超时时间 默认值:2000
redis-pool-max-idle: 50 # redis 连接池最大空闲连接数 默认值:50
redis-pool-min-idle: 10 # redis 连接池最小空闲连接数 默认值: 10
redis-pool-max-wait-millis: -1 # 从连接池中获取连接最大等待时间 默认值: -1
redis-pool-max-total: 200 # 连接池中最大连接数 默认值: 200
redis-key-prefix: #RL # 访问痕迹key值前缀 默认值: #RL
check-action-timeout: 100 # 访问检查动作最大执行时间(单位毫秒) 默认值: 100
enable-dynamical-conf: true # 是否开启动态配置 默认值: false
channel: #RLConfigChannel # 配置变更事件发送channel名称 默认值: #RLConfigChannel
error: '您的请求过于频繁,请稍后再试'
--- #################### 定时任务相关配置 ####################
# Quartz 配置项,对应 QuartzProperties 配置类
spring:
quartz:
auto-startup: true # 测试环境,需要开启 Job
scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName
job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。
wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true
properties: # 添加 Quartz Scheduler 附加属性,更多可以看 http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/configuration.html 文档
org:
quartz:
# Scheduler 相关配置
scheduler:
instanceName: schedulerName
instanceId: AUTO # 自动生成 instance ID
# JobStore 相关配置
jobStore:
# JobStore 实现类。可见博客:https://blog.csdn.net/weixin_42458219/article/details/122247162
class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
isClustered: true # 是集群模式
clusterCheckinInterval: 15000 # 集群检查频率,单位:毫秒。默认为 15000,即 15 秒
misfireThreshold: 60000 # misfire 阀值,单位:毫秒。
# 线程池相关配置
threadPool:
threadCount: 25 # 线程池大小。默认为 10 。
threadPriority: 5 # 线程优先级
class: org.quartz.simpl.SimpleThreadPool # 线程池类型
jdbc: # 使用 JDBC 的 JobStore 的时候,JDBC 的配置
initialize-schema: NEVER # 是否自动使用 SQL 初始化 Quartz 表结构。这里设置成 never ,我们手动创建表结构。
--- #################### 配置中心相关配置 ####################
# Apollo 配置中心
apollo:
bootstrap:
enabled: true # 设置 Apollo 在启动阶段生效
eagerLoad:
enabled: true # 设置 Apollo 在日志初始化前生效,可以实现日志的动态级别配置
jdbc: # 自定义的 JDBC 配置项,用于数据库的地址
dao: cn.iocoder.yudao.module.infra.dal.mysql.config.ConfigDAOImpl
url: ${spring.datasource.dynamic.datasource.master.url}
username: ${spring.datasource.dynamic.datasource.master.username}
password: ${spring.datasource.dynamic.datasource.master.password}
--- #################### 服务保障相关配置 ####################
# Lock4j 配置项
lock4j:
acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒
expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒
# Resilience4j 配置项
resilience4j:
ratelimiter:
instances:
backendA:
limit-for-period: 1 # 每个周期内,允许的请求数。默认为 50
limit-refresh-period: 60s # 每个周期的时长,单位:微秒。默认为 500
timeout-duration: 1s # 被限流时,阻塞等待的时长,单位:微秒。默认为 5s
register-health-indicator: true # 是否注册到健康监测
--- #################### 监控相关配置 ####################
# Actuator 监控端点的配置项
management:
endpoints:
web:
base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator
exposure:
include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。
# Spring Boot Admin 配置项
spring:
boot:
admin:
# Spring Boot Admin Client 客户端的相关配置
client:
url: http://127.0.0.1:${server.port}/${spring.boot.admin.context-path} # 设置 Spring Boot Admin Server 地址
instance:
prefer-ip: true # 注册实例时,优先使用 IP
# Spring Boot Admin Server 服务端的相关配置
context-path: /admin # 配置 Spring
# 日志文件配置
logging:
level:
root: INFO
--- #################### 微信公众号相关配置 ####################
wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档
mp:
# 公众号配置(必填)
app-id: wx041349c6f39b268b
secret: 5abee519483bc9f8cb37ce280e814bd0
# 存储配置,解决 AccessToken 的跨节点的共享
config-storage:
type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
key-prefix: wx # Redis Key 的前缀 TODO 芋艿:解决下 Redis key 管理的配置
http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台
--- #################### 捷道相关配置 ####################
web:
resource: /app/cms/
# 捷道配置项,设置当前项目所有自定义的配置
yudao:
security:
token-header: Authorization
token-timeout: 30d
session-timeout: 30d
mock-enable: true
mock-secret: test
xss:
enable: false
exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
- ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
- ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
pay:
pay-notify-url: http://niubi.natapp1.cc/api/pay/order/notify
pay-return-url: http://niubi.natapp1.cc/api/pay/order/return
refund-notify-url: http://niubi.natapp1.cc/api/pay/refund/notify
demo: false # 开启演示模式
business: # 业务运行配置
debug: true # 开启debug模式
sms-code: # 短信验证码相关的配置项
expire-times: 10m
send-frequency: 1m
send-maximum-quantity-per-day: 50
begin-code: 9999 # 这里配置 9999 的原因是,测试方便。
end-code: 9999 # 这里配置 9999 的原因是,测试方便。
email-code: # 邮件相关的配置项
expire-times: 10m # 过期时间
send-frequency: 1m # 邮件发送频率
send-maximum-quantity-per-day: 50
begin-code: 9999 # 验证码最小值
end-code: 9999 # 验证码最大值。
justauth:
enabled: true
type:
GITEE: # Gitee
client-id: ee61f0374a4c6c404a8717094caa7a410d76950e45ff60348015830c519ba5c1
client-secret: 7c044a5671be3b051414db0cf2cec6ad702dd298d2416ba24ceaf608e6fa26f9
ignore-check-redirect-uri: true
DINGTALK: # 钉钉
client-id: dingvrnreaje3yqvzhxg
client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI
ignore-check-redirect-uri: true
WECHAT_ENTERPRISE: # 企业微信
client-id: wwd411c69a39ad2e54
client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw
agent-id: 1000004
ignore-check-redirect-uri: true
cache:
type: REDIS
prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
ue:
root-path: /app/static/uploads #文件存储根目录(可选配置),默认为[classpath:/static]
server-url: /ueditor/jsp/controller #服务器统一请求接口路径(可选配置),默认为[/ueditor/jsp/controller] upload: cn.jasonone.ueditor.upload.LocationFileStorage #文件持久化处理类(可选配置),默认为[cn.jasonone.ueditor.upload.LocationFileStorage]
templates-url: templates
temp-dir: temp
...@@ -42,14 +42,14 @@ spring: ...@@ -42,14 +42,14 @@ spring:
primary: master primary: master
datasource: datasource:
master: master:
name: jiedao01 name: jd
url: jdbc:mysql://172.16.0.3:3306/${spring.datasource.dynamic.datasource.master.name}?useUnicode=true&useSSL=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&rewriteBatchedStatements=TRUE url: jdbc:mysql://172.16.0.3:3306/${spring.datasource.dynamic.datasource.master.name}?useUnicode=true&useSSL=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&rewriteBatchedStatements=TRUE
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
username: jd username: jd
password: Jd2024 password: Jd2024
slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改
name: jd name: jd
url: jdbc:mysql://10.10.0.13:3306/${spring.datasource.dynamic.datasource.slave.name}?useUnicode=true&useSSL=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&rewriteBatchedStatements=TRUE url: jdbc:mysql://172.16.0.3:3306/${spring.datasource.dynamic.datasource.slave.name}?useUnicode=true&useSSL=true&characterEncoding=utf8&characterSetResults=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&autoReconnect=true&rewriteBatchedStatements=TRUE
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
username: jd username: jd
password: Jd2024 password: Jd2024
...@@ -217,6 +217,9 @@ yudao: ...@@ -217,6 +217,9 @@ yudao:
send-maximum-quantity-per-day: 50 send-maximum-quantity-per-day: 50
begin-code: 9999 # 验证码最小值 begin-code: 9999 # 验证码最小值
end-code: 9999 # 验证码最大值。 end-code: 9999 # 验证码最大值。
member: # 会员相关配置
register-url: https://apptest.groupage.cn/#/pages/register/shareRegister?code=
share-url: https://apptest.groupage.cn/#
justauth: justauth:
enabled: true enabled: true
......
...@@ -218,6 +218,9 @@ yudao: ...@@ -218,6 +218,9 @@ yudao:
send-maximum-quantity-per-day: 50 send-maximum-quantity-per-day: 50
begin-code: 9999 # 验证码最小值 begin-code: 9999 # 验证码最小值
end-code: 9999 # 验证码最大值。 end-code: 9999 # 验证码最大值。
member: # 会员相关配置
register-url: https://apptest.groupage.cn/#/pages/register/shareRegister?code=
share-url: https://apptest.groupage.cn/#
justauth: justauth:
enabled: true enabled: true
......
...@@ -645,7 +645,9 @@ order.cargo.control.cancel.pick.reject=The release record of the control order i ...@@ -645,7 +645,9 @@ order.cargo.control.cancel.pick.reject=The release record of the control order i
order.cargo.control.cancel.pick.cancel=The release record of the control order has been cancelled order.cargo.control.cancel.pick.cancel=The release record of the control order has been cancelled
warehouse.in.item.quantity.required=warehouse in item quantity required warehouse.in.item.quantity.required=warehouse in item quantity required
order.line.not.exist=Order line does not exist order.line.not.exist=Order line does not exist
line.not.exist=The line does not exist
order.departure.objective.and.line.not.agreement=The order origin destination is inconsistent with the route order.departure.objective.and.line.not.agreement=The order origin destination is inconsistent with the route
offer.departure.objective.and.line.not.agreement=The offer origin destination is inconsistent with the route
transport.and.line.not.agreement=The shipping method of the order does not match the route information. Please reselect the route information transport.and.line.not.agreement=The shipping method of the order does not match the route information. Please reselect the route information
prod.brand.not.null=brand is not null or zero prod.brand.not.null=brand is not null or zero
preload.not.exist=Goods are not pre-loaded in the shipment order preload.not.exist=Goods are not pre-loaded in the shipment order
......
...@@ -651,7 +651,9 @@ order.cargo.control.cancel.pick.reject=\u63A7\u8D27\u8BA2\u5355\u5DF2\u653E\u8D2 ...@@ -651,7 +651,9 @@ order.cargo.control.cancel.pick.reject=\u63A7\u8D27\u8BA2\u5355\u5DF2\u653E\u8D2
order.cargo.control.cancel.pick.cancel=\u63A7\u8D27\u8BA2\u5355\u5DF2\u653E\u8D27\u8BB0\u5F55\u8C03\u8D27\u5BA1\u6279\u53D6\u6D88 order.cargo.control.cancel.pick.cancel=\u63A7\u8D27\u8BA2\u5355\u5DF2\u653E\u8D27\u8BB0\u5F55\u8C03\u8D27\u5BA1\u6279\u53D6\u6D88
warehouse.in.item.quantity.required=\u5165\u4ED3\u9879\u6570\u91CF\u5FC5\u586B warehouse.in.item.quantity.required=\u5165\u4ED3\u9879\u6570\u91CF\u5FC5\u586B
order.line.not.exist=\u8BA2\u5355\u7EBF\u8DEF\u4E0D\u5B58\u5728 order.line.not.exist=\u8BA2\u5355\u7EBF\u8DEF\u4E0D\u5B58\u5728
line.not.exist=\u7ebf\u8def\u4e0d\u5b58\u5728
order.departure.objective.and.line.not.agreement=\u8BA2\u5355\u59CB\u53D1\u5730\u76EE\u7684\u5730\u4E0E\u7EBF\u8DEF\u4E0D\u4E00\u81F4 order.departure.objective.and.line.not.agreement=\u8BA2\u5355\u59CB\u53D1\u5730\u76EE\u7684\u5730\u4E0E\u7EBF\u8DEF\u4E0D\u4E00\u81F4
offer.departure.objective.and.line.not.agreement=\u62a5\u4ef7\u5355\u59cb\u53d1\u5730\u76ee\u7684\u5730\u4e0e\u7ebf\u8def\u4e0d\u4e00\u81f4
transport.and.line.not.agreement=\u8BA2\u5355\u8FD0\u8F93\u65B9\u5F0F\u4E0E\u7EBF\u8DEF\u4FE1\u606F\u4E0D\u5339\u914D\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u7EBF\u8DEF\u4FE1\u606F transport.and.line.not.agreement=\u8BA2\u5355\u8FD0\u8F93\u65B9\u5F0F\u4E0E\u7EBF\u8DEF\u4FE1\u606F\u4E0D\u5339\u914D\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u7EBF\u8DEF\u4FE1\u606F
prod.brand.not.null=\u54C1\u724C\u4E0D\u80FD\u4E3A\u7A7A\u62160 prod.brand.not.null=\u54C1\u724C\u4E0D\u80FD\u4E3A\u7A7A\u62160
preload.not.exist=\u51FA\u8D27\u5355\u672A\u9884\u88C5\u8D27\u7269 preload.not.exist=\u51FA\u8D27\u5355\u672A\u9884\u88C5\u8D27\u7269
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment