mirror of
https://devops.liangqichi.top/qichi.liang/Orbitin.git
synced 2026-02-10 07:41:29 +08:00
fix: 修复月份选择器问题,确保12月正确显示
- 修复跨年月份计算逻辑(1月时正确计算为去年12月) - 改进_get_month_list()方法,生成正确的近12个月列表 - 增加Combobox宽度以完整显示月份值如'2025-12' - 优化手动剔除次月多统计的船对话框
This commit is contained in:
113
main.py
113
main.py
@@ -219,6 +219,40 @@ def remove_unaccounted(year_month: str, teu_to_reduce: int = None):
|
||||
raise
|
||||
|
||||
|
||||
def add_cross_month_exclusion(source_date: str, target_date: str, ship_name: str, teu: int,
|
||||
twenty_feet: int = 0, forty_feet: int = 0, reason: str = ''):
|
||||
"""
|
||||
添加跨月剔除调整(手动剔除次月多统计的船)
|
||||
|
||||
参数:
|
||||
source_date: 源日期(上月底日期)
|
||||
target_date: 目标日期(次月日期)
|
||||
ship_name: 船名
|
||||
teu: TEU数量
|
||||
twenty_feet: 20尺箱量
|
||||
forty_feet: 40尺箱量
|
||||
reason: 调整原因
|
||||
"""
|
||||
try:
|
||||
db = DailyLogsDatabase()
|
||||
success = db.insert_cross_month_exclusion(
|
||||
source_date=source_date,
|
||||
target_date=target_date,
|
||||
ship_name=ship_name,
|
||||
teu=teu,
|
||||
twenty_feet=twenty_feet,
|
||||
forty_feet=forty_feet,
|
||||
reason=reason
|
||||
)
|
||||
if success:
|
||||
logger.info(f"已添加跨月剔除调整: {source_date} -> {target_date} {ship_name} {teu}TEU")
|
||||
else:
|
||||
logger.error("添加跨月剔除调整失败")
|
||||
except Exception as e:
|
||||
logger.error(f"添加跨月剔除调整失败: {e}")
|
||||
raise
|
||||
|
||||
|
||||
def show_stats(date: str):
|
||||
"""
|
||||
显示指定日期的统计
|
||||
@@ -322,6 +356,16 @@ def main():
|
||||
--unaccounted, -u TEU 添加未统计数据(需同时指定月份)
|
||||
--remove-unaccounted, -r [TEU] 去除未统计数据(需同时指定月份)。如果指定TEU值,则减少该数量;如果不指定,则删除整个记录
|
||||
--month, -m YEAR-MONTH 指定月份(与 -u 或 -r 配合使用)
|
||||
--cross-exclude, -c 手动剔除次月多统计的船(需指定源日期、目标日期、船名和TEU)
|
||||
|
||||
跨月剔除参数:
|
||||
--source-date DATE 源日期(上月底日期),格式: YYYY-MM-DD
|
||||
--target-date DATE 目标日期(次月日期),格式: YYYY-MM-DD
|
||||
--ship-name NAME 船名
|
||||
--teu TEU TEU数量
|
||||
--twenty-feet COUNT 20尺箱量(可选,默认0)
|
||||
--forty-feet COUNT 40尺箱量(可选,默认0)
|
||||
--reason REASON 调整原因(可选)
|
||||
|
||||
示例:
|
||||
python3 main.py fetch
|
||||
@@ -331,6 +375,7 @@ def main():
|
||||
python3 main.py --unaccounted 118 --month 2025-12
|
||||
python3 main.py --remove-unaccounted --month 2025-12 # 删除整个记录
|
||||
python3 main.py --remove-unaccounted 118 --month 2025-12 # 减少118TEU
|
||||
python3 main.py --cross-exclude --source-date 2025-12-31 --target-date 2026-01-01 --ship-name "学友洋山" --teu 100
|
||||
'''
|
||||
)
|
||||
parser.add_argument(
|
||||
@@ -367,6 +412,53 @@ def main():
|
||||
metavar='YEAR-MONTH',
|
||||
help='指定月份(与 --unaccounted 或 --remove-unaccounted 配合使用)'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--cross-exclude',
|
||||
'-c',
|
||||
action='store_true',
|
||||
help='手动剔除次月多统计的船'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--source-date',
|
||||
metavar='DATE',
|
||||
help='源日期(上月底日期),格式: YYYY-MM-DD'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--target-date',
|
||||
metavar='DATE',
|
||||
help='目标日期(次月日期),格式: YYYY-MM-DD'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--ship-name',
|
||||
metavar='NAME',
|
||||
help='船名'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--teu',
|
||||
metavar='TEU',
|
||||
type=int,
|
||||
help='TEU数量'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--twenty-feet',
|
||||
metavar='COUNT',
|
||||
type=int,
|
||||
default=0,
|
||||
help='20尺箱量(可选,默认0)'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--forty-feet',
|
||||
metavar='COUNT',
|
||||
type=int,
|
||||
default=0,
|
||||
help='40尺箱量(可选,默认0)'
|
||||
)
|
||||
parser.add_argument(
|
||||
'--reason',
|
||||
metavar='REASON',
|
||||
default='手动剔除次月多统计的船',
|
||||
help='调整原因(可选,默认: "手动剔除次月多统计的船")'
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -398,6 +490,27 @@ def main():
|
||||
sys.exit(1)
|
||||
return
|
||||
|
||||
# 跨月剔除功能
|
||||
if args.cross_exclude:
|
||||
if not all([args.source_date, args.target_date, args.ship_name, args.teu]):
|
||||
logger.error("跨月剔除功能需要指定以下参数: --source-date, --target-date, --ship-name, --teu")
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
add_cross_month_exclusion(
|
||||
source_date=args.source_date,
|
||||
target_date=args.target_date,
|
||||
ship_name=args.ship_name,
|
||||
teu=args.teu,
|
||||
twenty_feet=args.twenty_feet,
|
||||
forty_feet=args.forty_feet,
|
||||
reason=args.reason
|
||||
)
|
||||
except Exception as e:
|
||||
logger.error(f"跨月剔除失败: {e}")
|
||||
sys.exit(1)
|
||||
return
|
||||
|
||||
# 执行功能
|
||||
try:
|
||||
if args.function == 'report' and args.date:
|
||||
|
||||
Reference in New Issue
Block a user