This commit is contained in:
van
2026-04-09 01:11:23 +08:00
parent 16bcd45c63
commit a2c4589046
10 changed files with 739 additions and 31 deletions

View File

@@ -64,6 +64,30 @@ public class ErpGoofishOrderController extends BaseController {
return AjaxResult.success(data);
}
@PreAuthorize("@ss.hasPermi('jarvis:erpGoofishOrder:edit')")
@Log(title = "闲管家历史全量拉单", businessType = BusinessType.OTHER)
@PostMapping("/pull/{appKey}/full")
public AjaxResult pullOneFull(@PathVariable String appKey) {
int n = erpGoofishOrderService.pullOrdersForAppKeyFullHistory(appKey);
Map<String, Object> data = new LinkedHashMap<>();
data.put("processedItems", n);
data.put("pullFullHistoryDays", goofishProperties.getPullFullHistoryDays());
data.put("pullTimeChunkSeconds", goofishProperties.getPullTimeChunkSeconds());
return AjaxResult.success(data);
}
@PreAuthorize("@ss.hasPermi('jarvis:erpGoofishOrder:edit')")
@Log(title = "闲管家全账号历史全量拉单", businessType = BusinessType.OTHER)
@PostMapping("/pullAll/full")
public AjaxResult pullAllFull() {
int n = erpGoofishOrderService.pullAllEnabledFullHistory();
Map<String, Object> data = new LinkedHashMap<>();
data.put("processedItems", n);
data.put("pullFullHistoryDays", goofishProperties.getPullFullHistoryDays());
data.put("pullTimeChunkSeconds", goofishProperties.getPullTimeChunkSeconds());
return AjaxResult.success(data);
}
@PreAuthorize("@ss.hasPermi('jarvis:erpGoofishOrder:edit')")
@Log(title = "闲管家订单详情刷新", businessType = BusinessType.UPDATE)
@PostMapping("/refreshDetail/{id}")

View File

@@ -268,7 +268,14 @@ jarvis:
pull-lookback-hours: 72
pull-cron: "0 0/15 * * * ?"
auto-ship-cron: "0 2/10 * * * ?"
pull-max-pages-per-shop: 30
# 订单列表:每页条数(最大 100
pull-page-size: 100
# 每授权单次最大页数(最大 100与 page_size 乘积勿超 10000
pull-max-pages-per-shop: 100
# 全量拉单按 update_time 分段(秒),默认 7 天
pull-time-chunk-seconds: 604800
# 全量拉单起点:距今多少天(默认约 3 年)
pull-full-history-days: 1095
auto-ship-batch-size: 20

View File

@@ -33,6 +33,21 @@ CREATE TABLE IF NOT EXISTS erp_goofish_order (
modify_time bigint(20) DEFAULT NULL COMMENT '订单更新时间(秒)',
product_id bigint(20) DEFAULT NULL COMMENT '管家商品ID',
item_id bigint(20) DEFAULT NULL COMMENT '闲鱼商品ID',
goods_title varchar(512) DEFAULT NULL COMMENT '商品标题(详情 goods.title)',
goods_image_url varchar(1024) DEFAULT NULL COMMENT '商品主图 URL(goods.images 首图)',
buyer_nick varchar(256) DEFAULT NULL COMMENT '买家昵称(详情 buyer_nick)',
pay_amount bigint(20) DEFAULT NULL COMMENT '实付金额(分) pay_amount',
detail_waybill_no varchar(128) DEFAULT NULL COMMENT '闲管家详情回传运单号 waybill_no',
detail_express_code varchar(64) DEFAULT NULL COMMENT '详情快递编码 express_code',
detail_express_name varchar(128) DEFAULT NULL COMMENT '详情快递名称 express_name',
receiver_name varchar(128) DEFAULT NULL COMMENT '收货人(详情有则落库)',
receiver_mobile varchar(64) DEFAULT NULL COMMENT '收货手机',
receiver_address varchar(1000) DEFAULT NULL COMMENT '收货详细地址(address)',
receiver_region varchar(256) DEFAULT NULL COMMENT '省市区街道等拼接展示',
recv_prov_name varchar(64) DEFAULT NULL COMMENT 'prov_name',
recv_city_name varchar(64) DEFAULT NULL COMMENT 'city_name',
recv_area_name varchar(64) DEFAULT NULL COMMENT 'area_name',
recv_town_name varchar(128) DEFAULT NULL COMMENT 'town_name',
detail_json longtext COMMENT '订单详情接口全量 JSON',
last_notify_json longtext COMMENT '最近一次推送原文 JSON',
jd_order_id bigint(20) DEFAULT NULL COMMENT '关联 jd_order.id第三方单号=闲鱼单号)',
@@ -61,3 +76,22 @@ CREATE TABLE IF NOT EXISTS erp_goofish_order (
-- 按钮权限示例:
-- jarvis:erpOpenConfig:list,query,add,edit,remove
-- jarvis:erpGoofishOrder:list,query,edit
-- —— 已建表升级:详情摘要字段(若列已存在会报错,可逐条执行并忽略)——
-- ALTER TABLE erp_goofish_order ADD COLUMN goods_title varchar(512) NULL COMMENT '商品标题' AFTER item_id;
-- ALTER TABLE erp_goofish_order ADD COLUMN goods_image_url varchar(1024) NULL COMMENT '商品主图URL' AFTER goods_title;
-- ALTER TABLE erp_goofish_order ADD COLUMN buyer_nick varchar(256) NULL COMMENT '买家昵称' AFTER goods_image_url;
-- ALTER TABLE erp_goofish_order ADD COLUMN pay_amount bigint(20) NULL COMMENT '实付金额(分)' AFTER buyer_nick;
-- ALTER TABLE erp_goofish_order ADD COLUMN detail_waybill_no varchar(128) NULL COMMENT '详情运单号' AFTER pay_amount;
-- ALTER TABLE erp_goofish_order ADD COLUMN detail_express_code varchar(64) NULL COMMENT '详情快递编码' AFTER detail_waybill_no;
-- ALTER TABLE erp_goofish_order ADD COLUMN detail_express_name varchar(128) NULL COMMENT '详情快递名称' AFTER detail_express_code;
-- ALTER TABLE erp_goofish_order ADD COLUMN receiver_name varchar(128) NULL COMMENT '收货人' AFTER detail_express_name;
-- ALTER TABLE erp_goofish_order ADD COLUMN receiver_mobile varchar(64) NULL COMMENT '收货手机' AFTER receiver_name;
-- ALTER TABLE erp_goofish_order ADD COLUMN receiver_address varchar(1000) NULL COMMENT '收货地址' AFTER receiver_mobile;
-- ALTER TABLE erp_goofish_order ADD COLUMN receiver_region varchar(256) NULL COMMENT '省市区' AFTER receiver_address;
-- ALTER TABLE erp_goofish_order ADD COLUMN recv_prov_name varchar(64) NULL COMMENT 'prov_name' AFTER receiver_region;
-- ALTER TABLE erp_goofish_order ADD COLUMN recv_city_name varchar(64) NULL COMMENT 'city_name' AFTER recv_prov_name;
-- ALTER TABLE erp_goofish_order ADD COLUMN recv_area_name varchar(64) NULL COMMENT 'area_name' AFTER recv_city_name;
-- ALTER TABLE erp_goofish_order ADD COLUMN recv_town_name varchar(128) NULL COMMENT 'town_name' AFTER recv_area_name;
-- 已建库一键升级(可重复执行、自动判存):请使用同目录 erp_goofish_upgrade.sql

View File

@@ -0,0 +1,195 @@
-- =============================================================================
-- 闲管家 ERPerp_open_config / erp_goofish_order 一键升级脚本
-- =============================================================================
-- 用法:
-- 1. 先备份数据库;连接目标库后执行(或在文件开头加 USE your_database;
-- 2. 可重复执行:已存在的列/索引会自动跳过
-- 3. ADD COLUMN 一律不指定 AFTER避免旧表缺中间列时升级失败新列落在表尾不影响业务
-- 环境MySQL 5.7+ / 8.xMariaDB 未逐项验证)
-- =============================================================================
SET @schema := DATABASE();
-- -----------------------------------------------------------------------------
-- 1) 表不存在时创建完整结构(与 erp_goofish_init.sql 一致)
-- -----------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS erp_open_config (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
app_key varchar(64) NOT NULL COMMENT '开放平台 AppKey(appid)',
app_secret varchar(128) NOT NULL COMMENT '开放平台 AppSecret',
xy_user_name varchar(128) DEFAULT NULL COMMENT '默认闲鱼会员名(展示)',
express_code varchar(64) DEFAULT NULL COMMENT '发货用快递公司编码(日日顺物流在官方列表中为 rrs',
express_name varchar(64) DEFAULT NULL COMMENT '快递公司名称(展示)',
status char(1) NOT NULL DEFAULT '0' COMMENT '0正常 1停用',
order_num int(11) NOT NULL DEFAULT 0 COMMENT '排序(小优先)',
create_by varchar(64) DEFAULT '',
create_time datetime DEFAULT NULL,
update_by varchar(64) DEFAULT '',
update_time datetime DEFAULT NULL,
remark varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (id),
UNIQUE KEY uk_app_key (app_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='闲管家开放平台应用配置';
CREATE TABLE IF NOT EXISTS erp_goofish_order (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
app_key varchar(64) NOT NULL COMMENT 'AppKey',
seller_id bigint(20) DEFAULT NULL COMMENT '商家ID',
user_name varchar(128) DEFAULT NULL COMMENT '闲鱼会员名',
order_no varchar(64) NOT NULL COMMENT '闲鱼订单号',
order_type int(11) DEFAULT NULL COMMENT '订单类型',
order_status int(11) DEFAULT NULL COMMENT '订单状态(推送/列表)',
refund_status int(11) DEFAULT NULL COMMENT '退款状态',
modify_time bigint(20) DEFAULT NULL COMMENT '订单更新时间(秒)',
product_id bigint(20) DEFAULT NULL COMMENT '管家商品ID',
item_id bigint(20) DEFAULT NULL COMMENT '闲鱼商品ID',
goods_title varchar(512) DEFAULT NULL COMMENT '商品标题(详情 goods.title)',
goods_image_url varchar(1024) DEFAULT NULL COMMENT '商品主图 URL(goods.images 首图)',
buyer_nick varchar(256) DEFAULT NULL COMMENT '买家昵称(详情 buyer_nick)',
pay_amount bigint(20) DEFAULT NULL COMMENT '实付金额(分) pay_amount',
detail_waybill_no varchar(128) DEFAULT NULL COMMENT '闲管家详情回传运单号 waybill_no',
detail_express_code varchar(64) DEFAULT NULL COMMENT '详情快递编码 express_code',
detail_express_name varchar(128) DEFAULT NULL COMMENT '详情快递名称 express_name',
receiver_name varchar(128) DEFAULT NULL COMMENT '收货人(详情有则落库)',
receiver_mobile varchar(64) DEFAULT NULL COMMENT '收货手机',
receiver_address varchar(1000) DEFAULT NULL COMMENT '收货详细地址(address)',
receiver_region varchar(256) DEFAULT NULL COMMENT '省市区街道等拼接展示',
recv_prov_name varchar(64) DEFAULT NULL COMMENT 'prov_name',
recv_city_name varchar(64) DEFAULT NULL COMMENT 'city_name',
recv_area_name varchar(64) DEFAULT NULL COMMENT 'area_name',
recv_town_name varchar(128) DEFAULT NULL COMMENT 'town_name',
detail_json longtext COMMENT '订单详情接口全量 JSON',
last_notify_json longtext COMMENT '最近一次推送原文 JSON',
jd_order_id bigint(20) DEFAULT NULL COMMENT '关联 jd_order.id第三方单号=闲鱼单号)',
local_waybill_no varchar(128) DEFAULT NULL COMMENT '本地物流扫描得到的运单号',
ship_status tinyint(4) NOT NULL DEFAULT '0' COMMENT '0未发货 1已调用发货成功 2发货失败',
ship_error varchar(500) DEFAULT NULL COMMENT '发货失败原因',
ship_time datetime DEFAULT NULL COMMENT '发货调用成功时间',
ship_express_code varchar(64) DEFAULT NULL COMMENT '实际发货使用的快递编码',
create_time datetime DEFAULT NULL,
update_time datetime DEFAULT NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_app_order (app_key, order_no),
KEY idx_jd_order (jd_order_id),
KEY idx_order_status (order_status),
KEY idx_modify_time (modify_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='闲管家 ERP 订单(全量跟踪)';
-- -----------------------------------------------------------------------------
-- 2) 存储过程:列不存在则 ADD
-- -----------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS jarvis_erp_goofish_add_column;
DROP PROCEDURE IF EXISTS jarvis_erp_goofish_add_index;
DELIMITER $$
CREATE PROCEDURE jarvis_erp_goofish_add_column(
IN p_table VARCHAR(64),
IN p_column VARCHAR(64),
IN p_ddl TEXT
)
BEGIN
DECLARE col_exists INT DEFAULT 0;
SELECT COUNT(*) INTO col_exists
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @schema
AND TABLE_NAME = p_table
AND COLUMN_NAME = p_column;
IF col_exists = 0 THEN
SET @stmt := CONCAT('ALTER TABLE `', p_table, '` ADD COLUMN `', p_column, '` ', p_ddl);
PREPARE ps FROM @stmt;
EXECUTE ps;
DEALLOCATE PREPARE ps;
END IF;
END$$
CREATE PROCEDURE jarvis_erp_goofish_add_index(
IN p_table VARCHAR(64),
IN p_index VARCHAR(64),
IN p_columns VARCHAR(200)
)
BEGIN
DECLARE idx_exists INT DEFAULT 0;
SELECT COUNT(*) INTO idx_exists
FROM information_schema.statistics
WHERE TABLE_SCHEMA = @schema
AND TABLE_NAME = p_table
AND INDEX_NAME = p_index;
IF idx_exists = 0 THEN
SET @stmt := CONCAT('ALTER TABLE `', p_table, '` ADD INDEX `', p_index, '` (', p_columns, ')');
PREPARE ps FROM @stmt;
EXECUTE ps;
DEALLOCATE PREPARE ps;
END IF;
END$$
DELIMITER ;
-- -----------------------------------------------------------------------------
-- 3) erp_goofish_order补齐缺列与当前 Java 实体 / erp_goofish_init.sql 一致)
-- -----------------------------------------------------------------------------
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'seller_id', 'bigint(20) NULL COMMENT ''商家ID''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'user_name', 'varchar(128) NULL COMMENT ''闲鱼会员名''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'order_type', 'int(11) NULL COMMENT ''订单类型''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'order_status', 'int(11) NULL COMMENT ''订单状态(推送/列表)''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'refund_status', 'int(11) NULL COMMENT ''退款状态''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'modify_time', 'bigint(20) NULL COMMENT ''订单更新时间(秒)''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'product_id', 'bigint(20) NULL COMMENT ''管家商品ID''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'item_id', 'bigint(20) NULL COMMENT ''闲鱼商品ID''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'goods_title', 'varchar(512) NULL COMMENT ''商品标题(详情 goods.title)''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'goods_image_url', 'varchar(1024) NULL COMMENT ''商品主图 URL(goods.images 首图)''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'buyer_nick', 'varchar(256) NULL COMMENT ''买家昵称(详情 buyer_nick)''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'pay_amount', 'bigint(20) NULL COMMENT ''实付金额(分) pay_amount''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'detail_waybill_no', 'varchar(128) NULL COMMENT ''闲管家详情回传运单号 waybill_no''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'detail_express_code', 'varchar(64) NULL COMMENT ''详情快递编码 express_code''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'detail_express_name', 'varchar(128) NULL COMMENT ''详情快递名称 express_name''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'receiver_name', 'varchar(128) NULL COMMENT ''收货人(详情有则落库)''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'receiver_mobile', 'varchar(64) NULL COMMENT ''收货手机''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'receiver_address', 'varchar(1000) NULL COMMENT ''收货详细地址(address)''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'receiver_region', 'varchar(256) NULL COMMENT ''省市区街道等拼接展示''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'recv_prov_name', 'varchar(64) NULL COMMENT ''prov_name''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'recv_city_name', 'varchar(64) NULL COMMENT ''city_name''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'recv_area_name', 'varchar(64) NULL COMMENT ''area_name''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'recv_town_name', 'varchar(128) NULL COMMENT ''town_name''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'detail_json', 'longtext NULL COMMENT ''订单详情接口全量 JSON''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'last_notify_json', 'longtext NULL COMMENT ''最近一次推送原文 JSON''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'jd_order_id', 'bigint(20) NULL COMMENT ''关联 jd_order.id第三方单号=闲鱼单号)''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'local_waybill_no', 'varchar(128) NULL COMMENT ''本地物流扫描得到的运单号''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'ship_status', 'tinyint(4) NOT NULL DEFAULT 0 COMMENT ''0未发货 1已调用发货成功 2发货失败''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'ship_error', 'varchar(500) NULL COMMENT ''发货失败原因''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'ship_time', 'datetime NULL COMMENT ''发货调用成功时间''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'ship_express_code', 'varchar(64) NULL COMMENT ''实际发货使用的快递编码''');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'create_time', 'datetime NULL');
CALL jarvis_erp_goofish_add_column('erp_goofish_order', 'update_time', 'datetime NULL');
-- -----------------------------------------------------------------------------
-- 4) 索引(手工建表可能缺)
-- -----------------------------------------------------------------------------
CALL jarvis_erp_goofish_add_index('erp_goofish_order', 'idx_jd_order', '`jd_order_id`');
CALL jarvis_erp_goofish_add_index('erp_goofish_order', 'idx_order_status', '`order_status`');
CALL jarvis_erp_goofish_add_index('erp_goofish_order', 'idx_modify_time', '`modify_time`');
-- -----------------------------------------------------------------------------
-- 5) 唯一键 uk_app_order
-- 若已存在同名约束则跳过;若 (app_key,order_no) 有重复行会报错,需先清洗数据。
-- 若已通过其它名称建了 (app_key,order_no) 唯一索引,请勿重复执行本节(可能报 Duplicate key
-- -----------------------------------------------------------------------------
SET @uk := (
SELECT COUNT(*) FROM information_schema.table_constraints
WHERE table_schema = @schema AND table_name = 'erp_goofish_order'
AND constraint_name = 'uk_app_order' AND constraint_type = 'UNIQUE'
);
SET @sql_uk := IF(@uk = 0,
'ALTER TABLE erp_goofish_order ADD UNIQUE KEY uk_app_order (app_key, order_no)',
'SELECT ''uk_app_order 已存在,跳过'' AS note');
PREPARE puk FROM @sql_uk;
EXECUTE puk;
DEALLOCATE PREPARE puk;
-- -----------------------------------------------------------------------------
-- 6) 清理存储过程
-- -----------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS jarvis_erp_goofish_add_column;
DROP PROCEDURE IF EXISTS jarvis_erp_goofish_add_index;
SELECT 'erp_goofish_upgrade.sql 执行结束' AS message;