const fs = require('fs') const path = require('path') const root = path.resolve(__dirname, '..') function read(file) { return fs.readFileSync(path.join(root, file), 'utf8') } function assertMatch(message, content, pattern) { if (!pattern.test(content)) { throw new Error(message) } } function assertNotMatch(message, content, pattern) { if (pattern.test(content)) { throw new Error(message) } } const inventoryProc = read('sql/20260626_inventory_status_proc.sql') assertMatch( '盘点作废必须把主单插入历史表', inventoryProc, /IF\s+@target_status\s*=\s*N'5'[\s\S]*INSERT\s+INTO\s+dbo\.pd_stockpd_finish/i ) assertMatch( '盘点作废必须把明细插入历史表', inventoryProc, /IF\s+@target_status\s*=\s*N'5'[\s\S]*INSERT\s+INTO\s+dbo\.pd_stockpd_detail_finish/i ) assertMatch( '盘点作废必须删除业务明细', inventoryProc, /IF\s+@target_status\s*=\s*N'5'[\s\S]*DELETE\s+FROM\s+dbo\.pd_stockpd_detail/i ) assertMatch( '盘点作废必须删除业务主单', inventoryProc, /IF\s+@target_status\s*=\s*N'5'[\s\S]*DELETE\s+FROM\s+dbo\.pd_stockpd/i ) assertNotMatch( '盘点作废不能只更新业务表状态', inventoryProc, /IF\s+@target_status\s*=\s*N'5'[\s\S]*UPDATE\s+dbo\.pd_stockpd[\s\S]*SET\s+status\s*=\s*N'5'/i ) const pdInController = read('ruoyi-admin/src/main/java/com/ruoyi/pd/job/controller/PdOutMydoJobController.java') assertMatch( '/pd/inJob 当前控制器必须查询盘点入库作业列表', pdInController, /@RequestMapping\("\/pd\/inJob"\)[\s\S]*selectInventoryInMydoJobList\(mydoJob\)/ ) assertMatch( '/pd/inJob 当前控制器必须查询盘点入库历史作业列表', pdInController, /@RequestMapping\("\/pd\/inJob"\)[\s\S]*selectInventoryInMydoJobFinishList\(mydoJob\)/ ) assertNotMatch( '/pd/inJob 当前控制器不能使用出库列表口径', pdInController, /@RequestMapping\("\/pd\/inJob"\)[\s\S]*selectOutMydoJobList\(mydoJob\)/ ) assertMatch( '/pd/inJob 手动作废必须走入库作业过程', pdInController, /cancelJob\(jobId,\s*"1"\)/ ) assertMatch( '/pd/inJob 手动完成必须走入库作业过程', pdInController, /completeJob\(jobId,\s*"1"\)/ ) const pdOutController = read('ruoyi-admin/src/main/java/com/ruoyi/pd/job/controller/PdInMydoJobController.java') assertMatch( '/pd/outJob 当前控制器必须查询盘点出库作业列表', pdOutController, /@RequestMapping\("\/pd\/outJob"\)[\s\S]*selectInventoryOutMydoJobList\(mydoJob\)/ ) assertMatch( '/pd/outJob 当前控制器必须查询盘点出库历史作业列表', pdOutController, /@RequestMapping\("\/pd\/outJob"\)[\s\S]*selectInventoryOutMydoJobFinishList\(mydoJob\)/ ) const mydoJobMapper = read('ruoyi-admin/src/main/resources/mapper/in/MydoJobMapper.xml') assertMatch('盘点入库作业列表必须限定 in_or_out in (10, 11)', mydoJobMapper, /id="selectInventoryInMydoJobList"[\s\S]*in_or_out\s+in\s+\(10,\s*11\)/i) assertMatch('盘点入库历史作业列表必须限定 in_or_out in (10, 11)', mydoJobMapper, /id="selectInventoryInMydoJobFinishList"[\s\S]*in_or_out\s+in\s+\(10,\s*11\)/i) assertMatch('盘点出库作业列表必须限定 in_or_out in (30, 31)', mydoJobMapper, /id="selectInventoryOutMydoJobList"[\s\S]*in_or_out\s+in\s+\(30,\s*31\)/i) assertMatch('盘点出库历史作业列表必须限定 in_or_out in (30, 31)', mydoJobMapper, /id="selectInventoryOutMydoJobFinishList"[\s\S]*in_or_out\s+in\s+\(30,\s*31\)/i) const pdInPage = read('ruoyi-ui/src/views/pd/job/in/index.vue') assertMatch('盘点入库页面必须加载盘点入库任务类型字典', pdInPage, /dicts:\s*\[[^\]]*'pd_in_job_type'/) assertMatch('盘点入库页面任务类型筛选必须使用盘点入库字典', pdInPage, /dict\.type\.pd_in_job_type/) const pdOutPage = read('ruoyi-ui/src/views/pd/job/out/index.vue') assertMatch('盘点出库页面必须加载盘点出库任务类型字典', pdOutPage, /dicts:\s*\[[^\]]*'pd_out_job_type'/) assertMatch('盘点出库页面任务类型筛选必须使用盘点出库字典', pdOutPage, /dict\.type\.pd_out_job_type/) console.log('Inventory cancel and inbound job checks passed')