refactor(srm): 重构供应商采购域,新增询价比价与保证金管理
- 移除供应商准入/资质/绩效/招投标/统计模块
- 新增询价比价(询价单、供应商报价、询价下单)与投标保证金台账
- 供应商档案支持银行账户,新增供应商对账单(ERP 采购)
- 采购订单/入库/退货适配新的供应商引用
- 补充 SRM 重构迁移脚本及旧表结构备份(2026-11-03)
Co-Authored-By: Claude Code <noreply@anthropic.com>
已添加41个文件
已删除85个文件
已重命名1个文件
已修改33个文件
| | |
| | | {"stage": "交ä»", "action": "åè´§éç¥å®¡æ ¸(å ç¨)â éå®åºåº OQC â åè¿ â åºåºååé¨å/å
¨é¨åºåº", "roles": ["ä»ç®¡", "è´¨æ£"]}, |
| | | {"stage": "忬¾", "action": "å¼ç¥¨ BPM(累计â¤ååé¢) â 忬¾å¼ºå¶å
å¼ç¥¨(累计â¤ååå©ä½ä¸å¼ç¥¨å©ä½)", "roles": ["è´¢å¡", "éå®"]}]}, |
| | | {"id": "purchase", "name": "éè´æµç¨", "mermaid": "mermaid/03-purchase-flow.mmd", "color": "#5fc79e", |
| | | "summary": "SRM åå
¥/宿 便º â éè´ç³è¯· BPM â éè´è®¢å BPM â 确认æ¶è´§çæ MES å°è´§éç¥ â IQC(åæ ¼/ç¹éå
¥åºÂ·éè´§/æ¥åº) â éè´å
¥åºåå订åä¸ç³è¯· â æ¥ç¥¨(AI OCR) â 仿¬¾å BPMã", |
| | | "summary": "ä¾åºåæ¡£æ¡(å¤è系人/å¤é¶è¡Â·å«é¶è¡è¡å·) â 询价æ¯ä»·(产åÃä¾åºåæ¨ªåæ¥ä»·ï¼æäº§åé䏿 ) â 确认åæä¸æ ä¾åºåæéè´è®¢åèç¨¿å¹¶èµ°ç°æ BPM â 确认æ¶è´§çæ MES å°è´§éç¥ â IQC(åæ ¼/ç¹éå
¥åºÂ·éè´§/æ¥åº) â éè´å
¥åºåå订åä¸ç³è¯· â æ¥ç¥¨(AI OCR) â 仿¬¾å BPM â ä¾åºå徿¥å¯¹è´¦ï¼ææ ä¿è¯éå°è´¦ç¬ç«è®°å½ä¸æ ä¸éåã", |
| | | "steps": [ |
| | | {"stage": "寻æº", "action": "ä¾åºååå
¥(BPM)å»ºæ¡£ï¼ææ 宿´çæç®ææ¯ä»·ï¼å®æ 审æ¹éè¿èªå¨çæéè´è®¢å", "roles": ["éè´å¼å"]}, |
| | | {"stage": "寻æº", "action": "ä¾åºåæ¡£æ¡ç»´æ¤å¤ä¸ªè系人ä¸å¤ä¸ªé¶è¡è´¦æ·(å«é¶è¡è¡å·)ï¼æ°å¢è¯¢ä»·åæ¶ä¸å¹¶å½å
¥äº§åÃåä¸ä¾åºåæ¥ä»·å¹¶é宿¯ä¸ªäº§åç䏿 ä¾åºåï¼åè¡¨ç´æ¥ç¡®è®¤åæä¸æ ä¾åºåçæéè´è®¢åèç¨¿ï¼ææ ä¿è¯éå°è´¦è®°å½æ¯å¦ä¸æ ä¸éåç¶æ/éé¢/æ¥æ", "roles": ["éè´å", "ä¾åºå管çå"]}, |
| | | {"stage": "ç³è¯·", "action": "éè´ç³è¯·(CGSQ)æäº¤ BPMï¼é©³åå¯éç½®åè稿ï¼éè¿ä¸æä¾åºåèªå¨çæè®¢å", "roles": ["éè´å", "审æ¹äºº"]}, |
| | | {"stage": "ä¸å", "action": "éè´è®¢å(CGDD)èªå¨æäº¤ BPM(15â20)", "roles": ["éè´å"]}, |
| | | {"stage": "æ¶è´§", "action": "确认æ¶è´§çæå°è´§éç¥(0âå¾
è´¨æ£2/å¾
å
¥åº3â4)ï¼éæ£ç©æèªå¨å建 IQC", "roles": ["ä»ç®¡", "IQC è´¨æ£å"]}, |
| | | {"stage": "å
¥åº", "action": "IQC åæ ¼/ç¹éâéè´å
¥åº(å¾
䏿¶âå¾
æ§è¡â宿)åºå+ï¼åå订å inCount/inStatus ä¸ç³è¯·æç»", "roles": ["ä»ç®¡"]}, |
| | | {"stage": "éè´§", "action": "IQC ä¸åæ ¼éè´§âä¾åºåéè´§åºåº(éæéå®å°è®¢åè¡)ï¼æ¥åºèµ° NCR", "roles": ["ä»ç®¡"]}, |
| | | {"stage": "仿¬¾", "action": "éè´æ¥ç¥¨(FPD, AI OCR, â¤è®¢åæ»ä»·) â 仿¬¾å(FKD å
³èæ¥ç¥¨+éä»¶, â¤æ¥ç¥¨éé¢) BPM 审æ¹", "roles": ["è´¢å¡", "审æ¹äºº"]}]}, |
| | | {"stage": "仿¬¾", "action": "éè´æ¥ç¥¨(FPD, AI OCR, â¤è®¢åæ»ä»·) â 仿¬¾å(FKD å
³èæ¥ç¥¨+éä»¶, â¤æ¥ç¥¨éé¢) BPM 审æ¹", "roles": ["è´¢å¡", "审æ¹äºº"]}, |
| | | {"stage": "对账", "action": "ä¾åºå徿¥æä¾åºåæ±æ»ï¼å·¦ä¾§éè´è®¢åæµæ°´å«å·²å¼ç¥¨/æªå¼ç¥¨éé¢ï¼å³ä¾§æ¥ç¥¨æµæ°´å«å¼ç¥¨éé¢/å·²ä»/å©ä½åºä»å¹¶é仿¬¾æµæ°´ï¼é¡¶é¨æ±æ»ç´¯è®¡éè´/å¼ç¥¨/仿¬¾/æªä»ä½é¢", "roles": ["è´¢å¡", "éè´å"]}]}, |
| | | {"id": "production", "name": "ç产æµç¨", "mermaid": "mermaid/04-production-flow.mmd", "color": "#e0b34f", |
| | | "summary": "éå®è®¢åé©±å¨ MPS â ä¸åå·¥å â æå·¥èºè·¯çº¿æå·¥åºä»»å¡ â 颿/çº¿è¾¹å¤æ â æ¥å·¥(å·¥åºé¡ºåºç¡¬æ ¡éª+BPM) â å岿¶è/产åºå
¥åº/IPQC â æ«éå·¥åºååè¿åº¦ â èªå¨å®å·¥ â ProductionFinishedEvent ååéå®è®¢åã", |
| | | "steps": [ |
| | |
| | | "upstream": ["ä¸»æ°æ®(ç©æ)"], "downstream": ["è¿éå(éå®è®¢å)", "å®å(客æ·)", "AI(æ¥ä»·OCR)"], |
| | | "coreTables": ["crm_clue", "crm_customer", "crm_contact", "crm_business", "crm_sale_quotation", "crm_contract", "crm_invoice", "crm_receivable", "crm_receivable_plan", "crm_permission"]}, |
| | | {"key": "srm", "name": "ä¾åºå管ç", "color": "#c9a86a", "tag": "SRM", "flow": "purchase", |
| | | "positioning": "ä¾åºåå
¨çå½å¨æï¼åå
¥-èµè´¨-寻æº-绩æ", |
| | | "problem": "ä¾åºååè§åå
¥ãé³å
寻æº(ææ /æ¯ä»·)ä¸ç»©æéå", |
| | | "features": ["ä¾åºåæ¡£æ¡ä¸åç±»", "åå
¥ç³è¯·(BPM éè´/è´¨é/è´¢å¡ä¼ç¾)", "èµè´¨è¯ä¹¦æææ", "ææ ï¼å
¬å¼/é请/ç«è°å®æ´ç+æ¯ä»·ç®æç", "ææ Â·æ¥ä»·Â·å¼æ Â·è¯æ Â·å®æ ", "宿 èªå¨çæéè´è®¢å", "å维绩æ(è´¨é/交ä»/ä»·æ ¼/æå¡)"], |
| | | "objects": ["ä¾åºå", "åå
¥ç³è¯·", "èµè´¨è¯ä¹¦", "ææ é¡¹ç®", "ææ ", "宿 ", "绩æè¯ä»·"], |
| | | "roles": ["éè´å¼å", "ä¾åºå管çå", "è¯å®¡ä¸å®¶"], |
| | | "positioning": "ä¾åºåæ¡£æ¡ + 询价æ¯ä»· + ææ ä¿è¯é", |
| | | "problem": "ä¾åºåä¿¡æ¯å¤å¼æ·è¡/å¤è系人维æ¤ï¼éè´å¯»æºæäº§åæ¨ªåæ¯ä»·å¹¶å¿«é转为éè´è®¢å", |
| | | "features": ["ä¾åºåæ¡£æ¡ä¸åç±»", "å¤è系人/å¤é¶è¡è´¦æ·(å«é¶è¡è¡å·)", "询价åï¼æ°å¢æ¶ä¸å¹¶å½å
¥äº§åè¡Ãåä¸ä¾åºåæ¥ä»·", "æ¯ä¸ªäº§ååç¬éå®ä¸æ ä¾åºå", "确认åæä¸æ ä¾åºåæåçæéè´è®¢åè稿", "ææ ä¿è¯éå°è´¦(æ¯å¦ä¸æ /éåç¶æé颿¥æ)"], |
| | | "objects": ["ä¾åºå", "询价æ¯ä»·", "ææ ä¿è¯é"], |
| | | "roles": ["éè´å", "ä¾åºå管çå"], |
| | | "upstream": ["ä¸»æ°æ®(ç©æ)"], "downstream": ["è¿éå(éè´è®¢å)"], |
| | | "coreTables": ["srm_supplier", "srm_supplier_apply", "srm_supplier_certificate", "srm_tender_project", "srm_tender_bid", "srm_bid_award", "srm_supplier_evaluation"]}, |
| | | "coreTables": ["srm_supplier", "srm_supplier_contact", "srm_supplier_bank", "srm_supplier_category", "srm_inquiry", "srm_inquiry_item", "srm_inquiry_supplier", "srm_inquiry_quote", "srm_inquiry_order", "srm_bid_bond"]}, |
| | | {"key": "erp", "name": "è¿éåä¸è´¢å¡", "color": "#5fc79e", "tag": "ERP", "flow": "purchase", |
| | | "positioning": "åè´¸ä¸èµé忮䏿¢ï¼å MES åèµ·å®ç©æ¶å", |
| | | "problem": "éè´éå®åæ®å®¡æ¹ãæ¥ç¥¨ä»æ¬¾æ§å¶ãè®¢åæ§è¡è¿åº¦åå", |
| | | "features": ["éè´ç³è¯·(BPM)â订å(èªå¨/æå¨çæ)", "确认æ¶è´§âMESå°è´§éç¥", "å
¥åº/éè´§æ°éç¶æåå", "éè´æ¥ç¥¨(éé¢â¤è®¢å)", "仿¬¾å(å¿
é¡»å
³èæ¥ç¥¨Â·BPM)", "éå®è®¢å(BPM·审æ¹éè¿èªå¨å»ºMPS)", "åºåºç¶æåå", "æ¶æ¬¾å(å
³èCRM客æ·)", "ç»ç®è´¦æ·", "AIå票OCR"], |
| | | "objects": ["éè´ç³è¯·", "éè´è®¢å", "éè´æ¥ç¥¨", "仿¬¾å", "éå®è®¢å", "æ¶æ¬¾å", "ç»ç®è´¦æ·"], |
| | | "features": ["éè´ç³è¯·(BPM)â订å(èªå¨/æå¨çæ)", "确认æ¶è´§âMESå°è´§éç¥", "å
¥åº/éè´§æ°éç¶æåå", "éè´æ¥ç¥¨(éé¢â¤è®¢å)", "仿¬¾å(å¿
é¡»å
³èæ¥ç¥¨Â·BPM)", "ä¾åºå徿¥(订å/æ¥ç¥¨/仿¬¾ä¸æµæ°´Â·å·¦å³å±ç¤ºå¼ç¥¨éé¢)", "éå®è®¢å(BPM·审æ¹éè¿èªå¨å»ºMPS)", "åºåºç¶æåå", "æ¶æ¬¾å(å
³èCRM客æ·)", "ç»ç®è´¦æ·", "AIå票OCR"], |
| | | "objects": ["éè´ç³è¯·", "éè´è®¢å", "éè´æ¥ç¥¨", "仿¬¾å", "ä¾åºå徿¥", "éå®è®¢å", "æ¶æ¬¾å", "ç»ç®è´¦æ·"], |
| | | "roles": ["éè´å", "éå®å", "åºçº³", "ä¼è®¡"], |
| | | "upstream": ["CRM(åå)", "SRM(宿 )", "ä¸»æ°æ®"], "downstream": ["ç产(MPS)", "ä»å¨(æ¶å)"], |
| | | "upstream": ["CRM(åå)", "SRM(询价确认)", "ä¸»æ°æ®"], "downstream": ["ç产(MPS)", "ä»å¨(æ¶å)"], |
| | | "coreTables": ["erp_purchase_request", "erp_purchase_order", "erp_purchase_invoice", "erp_finance_payment", "erp_sale_order", "erp_finance_receipt", "erp_account"]}, |
| | | {"key": "finance", "name": "è´¢å¡ç®¡çï¼ä¼è®¡æ ¸ç®ï¼", "color": "#3ec9a7", "tag": "FIN", "flow": "finance", |
| | | "positioning": "ç¬ç«æ ¸ç®æ¨¡åï¼ä¼è®¡æ ¸ç® + èµäº§æ ¸ç® + è´¢å¡æ¥è¡¨çæ¿ï¼ä¸ ERP è¿éåè´¢å¡åæ®å离ï¼yudao-module-financeï¼", |
| | |
| | | {"name": "å票", "module": "éå®ç®¡ç", "table": "crm_invoice", "doc": "KPç¼å·ï¼å¯ç空èªå¨çæãç³»ç»å
å¯ä¸ï¼ï¼BPM 审æ¹ï¼ç´¯è®¡å¼ç¥¨â¤ååé¢ï¼éä»¶å¿
ä¼ ï¼æ¯æ Excel 导å
¥ï¼ä»
æ°å¢ä¸æ´æ°ï¼ååé¡»å®¡æ ¸éè¿ä¸æ¬æ¬¡éé¢â¤ååå©ä½å¯å¼ç¥¨é¢ï¼å䏿¹æ°æ®ä¸å¯éå¤å¯¼å
¥ââåååä¸å票å·ç ç¸åãæå票å·ç ç空æ¶å¼ç¥¨éé¢+å票æ¬å¤´+å¼ç¥¨æ¥æç¸åå³å¤éå¤ï¼æä»¶å
éå¤è¡ä¸åºå
å·²æåé½æè¯¥è¡å¹¶åæ¾ç»´åº¦ä¸å®é
å¼ï¼", "upstream": ["åå"], "downstream": ["忬¾"], "keywords": "å¼ç¥¨ å票 invoice 导å
¥ å»é"}, |
| | | {"name": "忬¾", "module": "éå®ç®¡ç", "table": "crm_receivable", "doc": "HKç¼å·ï¼å建å³å®¡æ¹ä¸(æå¨å®¡æ ¸)ï¼å¼ºå¶å
å¼ç¥¨ï¼éé¢åæ ¡éª", "upstream": ["åå", "å票"], "downstream": ["æ¶æ¬¾å(å
³è)"], "keywords": "忬¾ æ¶æ¬¾è®¡å receivable"}, |
| | | {"name": "éå®ç®æ ", "module": "éå®ç®¡ç", "table": "crm_sales_target", "doc": "å¹´/å£/æÃ个人/é¨é¨/产å维度çåå忬¾çç®æ ", "upstream": [], "downstream": ["ä¸ç»©ç»è®¡"], "keywords": "ç®æ target ä¸ç»©"}, |
| | | {"name": "ä¾åºå", "module": "ä¾åºå管ç", "table": "srm_supplier", "doc": "ä¾åºåæ¡£æ¡ï¼æ§ç
§/ç¨å·/é¶è¡/è系人ï¼ERP ä¸ MES å
±ç¨", "upstream": ["åå
¥ç³è¯·"], "downstream": ["éè´è®¢å", "å°è´§éç¥", "ä¾åºåéè´§", "绩æè¯ä»·"], "keywords": "ä¾åºå supplier vendor"}, |
| | | {"name": "åå
¥ç³è¯·", "module": "ä¾åºå管ç", "table": "srm_supplier_apply", "doc": "APç¼å·ï¼BPM 审æ¹(éè´/è´¨é/è´¢å¡)ï¼éè¿èªå¨å»ºä¾åºåæ¡£æ¡", "upstream": [], "downstream": ["ä¾åºå"], "keywords": "åå
¥ ä¾åºåç³è¯· apply"}, |
| | | {"name": "ææ é¡¹ç®", "module": "ä¾åºå管ç", "table": "srm_tender_project", "doc": "宿´ç(åå¸âææ â弿 âè¯æ â宿 )ä¸ç®ææ¯ä»·ä¸¤ç§æ¨¡å¼", "upstream": [], "downstream": ["宿 âéè´è®¢å"], "keywords": "ææ ææ æ¯ä»· 宿 tender 寻æº"}, |
| | | {"name": "ä¾åºå", "module": "ä¾åºå管ç", "table": "srm_supplier", "doc": "ä¾åºåæ¡£æ¡ï¼æ§ç
§/ç¨å·ï¼å¤ä¸ªè系人(srm_supplier_contact)ä¸å¤ä¸ªé¶è¡è´¦æ·(srm_supplier_bank·å«é¶è¡è¡å·)ï¼ä¸»è¡¨ä¿çé»è®¤è系人/é»è®¤é¶è¡å段ï¼ERP ä¸ MES å
±ç¨", "upstream": ["æå·¥å»ºæ¡£/Excel 导å
¥"], "downstream": ["询价æ¯ä»·", "ææ ä¿è¯é", "éè´è®¢å", "å°è´§éç¥", "ä¾åºåéè´§", "ä¾åºå徿¥"], "keywords": "ä¾åºå supplier vendor è系人 弿·è¡ é¶è¡è¡å·"}, |
| | | {"name": "询价æ¯ä»·", "module": "ä¾åºå管ç", "table": "srm_inquiry", "doc": "XJç¼å·ï¼è稿0â已转订å20â已忶30(10询价ä¸ä¸ºåå²ç¶æ)ï¼æ°å¢/ç¼è¾æ¶ä¸å¹¶å½å
¥äº§åè¡Ãåä¸ä¾åºåæ¥ä»·(srm_inquiry_quote)å¹¶é宿¯ä¸ªäº§åç䏿 ä¾åºåï¼æ éåç¬çæ¥ä»·/æ¯ä»·æ¥éª¤ï¼ç¡®è®¤åæä¸æ ä¾åºåæåçæéè´è®¢åèç¨¿å¹¶è®°å½ srm_inquiry_order", "upstream": ["ä¾åºå", "ä¸»æ°æ®(ç©æ)"], "downstream": ["éè´è®¢å(è稿)"], "keywords": "询价 æ¯ä»· æ¥ä»· 䏿 inquiry quote"}, |
| | | {"name": "ææ ä¿è¯é", "module": "ä¾åºå管ç", "table": "srm_bid_bond", "doc": "BZç¼å·å°è´¦ï¼å
³èä¾åºå/询价å/éè´è®¢åï¼è®°å½ä¿è¯ééé¢ãç¼´çº³æ¥æãæ¯å¦ä¸æ ãéåç¶æ(0æªé1é¨å2å·²é3æ éé)/éåéé¢/é忥æ", "upstream": ["ä¾åºå", "询价æ¯ä»·", "éè´è®¢å"], "downstream": ["ä¾åºå徿¥(åè)"], "keywords": "ææ ä¿è¯é 䏿 éå bid bond"}, |
| | | {"name": "éè´ç³è¯·", "module": "è¿éå", "table": "erp_purchase_request", "doc": "CGSQç¼å·ï¼BPM 审æ¹ï¼éè¿åæä¾åºåèªå¨çæè®¢å", "upstream": ["ç产缺å£(人工)"], "downstream": ["éè´è®¢å"], "keywords": "éè´ç³è¯· è¯·è´ request"}, |
| | | {"name": "éè´è®¢å", "module": "è¿éå", "table": "erp_purchase_order", "doc": "CGDDç¼å·ï¼BPM 审æ¹(15审æ¹ä¸/20å·²å®¡æ ¸)ï¼å
¥åºç¶æ:æª0é¨å1å
¨é¨2", "upstream": ["éè´ç³è¯·", "宿 "], "downstream": ["å°è´§éç¥", "éè´æ¥ç¥¨", "ä¾åºåéè´§(约æç©æ)"], "keywords": "éè´è®¢å purchase"}, |
| | | {"name": "éè´æ¥ç¥¨", "module": "è¿éå", "table": "erp_purchase_invoice", "doc": "FPDç¼å·ï¼AI OCR é¢å¡«ï¼ç´¯è®¡â¤è®¢åæ»ä»·ï¼ä»æ¬¾åçåç½®", "upstream": ["éè´è®¢å"], "downstream": ["仿¬¾å"], "keywords": "æ¥ç¥¨ å票 éè´å票"}, |
| | | {"name": "仿¬¾å", "module": "è´¢å¡", "table": "erp_finance_payment", "doc": "FKDç¼å·ï¼å¿
é¡»å
³èæ¥ç¥¨+éä»¶ï¼ç´¯è®¡â¤æ¥ç¥¨éé¢ï¼BPM 审æ¹", "upstream": ["éè´æ¥ç¥¨"], "downstream": ["ç»ç®è´¦æ·"], "keywords": "仿¬¾ åºä» payment"}, |
| | | {"name": "éè´è®¢å", "module": "è¿éå", "table": "erp_purchase_order", "doc": "CGDDç¼å·ï¼BPM 审æ¹(è稿0â审æ¹ä¸15âå·²å®¡æ ¸20)ï¼å
¥åºç¶æ:æª0é¨å1å
¨é¨2ï¼æ¥æºå¯ä¸ºéè´ç³è¯·æè¯¢ä»·æ¯ä»·ç¡®è®¤çæçè稿(æ¥æºåå·å溯)ï¼å价为å«ç¨åä»·ï¼ä»·ç¨å计=åä»·Ãæ°éï¼ç¨é¢ä»å«ç¨éé¢ä¸åç®(ä¸åé¢å¤å ç¨)", "upstream": ["éè´ç³è¯·", "询价æ¯ä»·(ç¡®è®¤ä¸æ )"], "downstream": ["å°è´§éç¥", "éè´æ¥ç¥¨", "ä¾åºåéè´§(约æç©æ)", "ä¾åºå徿¥"], "keywords": "éè´è®¢å purchase"}, |
| | | {"name": "éè´æ¥ç¥¨", "module": "è¿éå", "table": "erp_purchase_invoice", "doc": "FPDç¼å·ï¼AI OCR é¢å¡«ï¼ç´¯è®¡â¤è®¢åæ»ä»·ï¼ä»æ¬¾åçåç½®ï¼ä¾åºå徿¥å³ä¾§å±ç¤ºå¼ç¥¨éé¢/å·²ä»/å©ä½åºä»", "upstream": ["éè´è®¢å"], "downstream": ["仿¬¾å", "ä¾åºå徿¥"], "keywords": "æ¥ç¥¨ å票 éè´å票"}, |
| | | {"name": "仿¬¾å", "module": "è´¢å¡", "table": "erp_finance_payment", "doc": "FKDç¼å·ï¼å¿
é¡»å
³èæ¥ç¥¨+éä»¶ï¼ç´¯è®¡â¤æ¥ç¥¨éé¢ï¼BPM 审æ¹", "upstream": ["éè´æ¥ç¥¨"], "downstream": ["ç»ç®è´¦æ·", "ä¾åºå徿¥"], "keywords": "仿¬¾ åºä» payment"}, |
| | | {"name": "ä¾åºå徿¥", "module": "è¿éå", "table": "æ ç¬ç«è¡¨(èåè§å¾)", "doc": "æä¾åºå+æ¶é´èå´èåéè´è®¢å/æ¥ç¥¨/仿¬¾ï¼æ±æ»ç´¯è®¡éè´é¢ã累计å¼ç¥¨é¢ãç´¯è®¡ä»æ¬¾é¢ãæªä»ä½é¢ï¼å·¦ä¾§è®¢åè¡å«å·²å¼ç¥¨/æªå¼ç¥¨éé¢ï¼å³ä¾§æ¥ç¥¨è¡å«å¼ç¥¨éé¢/å·²ä»/å©ä½åºä»", "upstream": ["éè´è®¢å", "éè´æ¥ç¥¨", "仿¬¾å"], "downstream": [], "keywords": "ä¾åºå徿¥ 对账 å¼ç¥¨éé¢ åºä» statement"}, |
| | | {"name": "æ¶æ¬¾å", "module": "è´¢å¡", "table": "erp_finance_receipt", "doc": "SKDç¼å·ï¼å
³è CRM å®¢æ·æ ¡éªï¼æ BPM(æå¨å®¡æ ¸)", "upstream": ["éå®(å¼±å
³è)"], "downstream": ["ç»ç®è´¦æ·"], "keywords": "æ¶æ¬¾ åºæ¶ receipt"}, |
| | | {"name": "ä¼è®¡ç§ç®", "module": "ä¼è®¡æ ¸ç®", "table": "fin_account_subject", "doc": "ç§ç®æ ï¼parent_id èªå
³èï¼ç§ç®ç±»å1èµäº§2è´åº3æç4ææ¬5æçï¼ä½é¢æ¹å1å2è´·ï¼ç¶æ0å¯ç¨1ç¦ç¨ï¼è´¦è¡¨ä¸åå½ç»ä¸æ subject_code åæ°", "upstream": ["ä¼è®¡ç§ç®ç§å约68æ¡ä¸çº§ç§ç®"], "downstream": ["è®°è´¦åè¯åå½", "æ»è´¦", "æç»è´¦"], "keywords": "ä¼è®¡ç§ç® ç§ç® subject account èµäº§ç±» è´åºç±» æçç±»"}, |
| | | {"name": "è®°è´¦åè¯", "module": "ä¼è®¡æ ¸ç®", "table": "fin_voucher", "doc": "åè¯åå·å¯ç空ç±å端èªå¨çæï¼ç¶æ æªè¿è´¦0/å·²è¿è´¦10/å·²ä½åº20ï¼å·²è¿è´¦ä¸å¯æ¹ï¼æªè¿è´¦ä¸å·²è¿è´¦åå¯ä½åºï¼æªè¿è´¦ä¸å·²ä½åºå¯å é¤ï¼éä»¶æ recordType=fin_voucher æç³»ç»éä»¶ä¸å¿", "upstream": ["ä¼è®¡ç§ç®"], "downstream": ["æ»è´¦", "æç»è´¦", "è´¢å¡æ¥è¡¨çæ¿"], "keywords": "è®°è´¦åè¯ åè¯ voucher è¿è´¦ ä½åº å贷平衡"}, |
| | |
| | | {"role": "éå®å
å¤/éå®", "modules": ["CRM", "ERP"], "operations": ["线索客æ·åæºç»´æ¤", "æ¥ä»·ä¸åå", "éå®è®¢å", "è·è¿è®°å½"], "data": ["crm_*", "erp_sale_order"], "scope": "è´è´£äºº(owner)+æ°æ®æéä¸çº§ï¼åªè¯»/读å/è´è´£äººï¼å
¬æµ·æ± å¯é¢åï¼äº¤æ¥äººåºå¯éè¿ expandUserIds çå°ç¦»èäººæ°æ®(æ¥å£å·²å¤ãå¾
æ¥å
¥)"}, |
| | | {"role": "éå®ç»ç", "modules": ["CRM"], "operations": ["åæº/åå审æ¹åä¸", "éå®ç®æ å¶å®", "ä¸ç»©æåæ¼æåæ"], "data": ["å¢éæ°æ®(ä¸å±ç¨æ·)"], "scope": "AdminUserApi ä¸çº§ç¨æ·æ©å±"}, |
| | | {"role": "éè´å", "modules": ["ERP", "SRM"], "operations": ["éè´ç³è¯·/订å", "确认æ¶è´§", "æ¥ç¥¨ä¸ä»æ¬¾åèµ·"], "data": ["erp_purchase_*", "srm_*"], "scope": "requestUserId/supplierOwner å½å±"}, |
| | | {"role": "éè´å¼å/ä¾åºå管çå", "modules": ["SRM"], "operations": ["åå
¥å®¡æ¹æµè½¬", "ææ æ¯ä»·ç»ç»", "绩æè¯ä»·"], "data": ["srm_supplier_apply", "srm_tender_*"], "scope": "BPM å¤é¨é¨ä¼ç¾(éè´/è´¨é/è´¢å¡)"}, |
| | | {"role": "éè´å/ä¾åºå管çå", "modules": ["SRM"], "operations": ["ä¾åºåæ¡£æ¡ç»´æ¤", "询价æ¯ä»·ä¸ç¡®è®¤è½¬è®¢å", "ææ ä¿è¯éå°è´¦"], "data": ["srm_supplier*", "srm_inquiry*", "srm_bid_bond"], "scope": "éè´ç®¡çèåæéï¼è¯¢ä»·ç¡®è®¤çæçéè´è®¢åè稿走 ERP BPM"}, |
| | | {"role": "计åå", "modules": ["MES"], "operations": ["MPS ä¸å·¥å", "å·¥èºè·¯çº¿ç»´æ¤", "AI 颿µåè"], "data": ["mes_pro_*"], "scope": "车é´/é¨é¨æ°æ®èå´"}, |
| | | {"role": "æä½å·¥/çç»é¿", "modules": ["MES"], "operations": ["任塿¥æ¶", "æ¥å·¥æäº¤(åå·¥åºé¡ºåºçº¦æ)", "å®ç¯"], "data": ["mes_pro_feedback", "mes_pro_task"], "scope": "ä»»å¡ææ´¾äººå¯è§"}, |
| | | {"role": "ä»ç®¡å", "modules": ["MES-WM"], "operations": ["15 ç±»åºå
¥åºåæ®æ§è¡", "è°æ¨", "çç¹", "æ¡ç è£
ç®±"], "data": ["mes_wm_*"], "scope": "ä»åºç»´åº¦ï¼WMS 坿ä»åºé
ç½®åºå
¥åº/è°æ¨/çç¹æ¯å¦èµ° BPM"}, |
| | |
| | | "upstream": ["ä¸»æ°æ®(ç©æ)"], "downstream": ["è¿éå(éå®è®¢å)", "å®å(客æ·)", "AI(æ¥ä»·OCR)"], |
| | | "coreTables": ["crm_clue", "crm_customer", "crm_contact", "crm_business", "crm_sale_quotation", "crm_contract", "crm_invoice", "crm_receivable", "crm_receivable_plan", "crm_permission"]}, |
| | | {"key": "srm", "name": "ä¾åºå管ç", "color": "#c9a86a", "tag": "SRM", "flow": "purchase", |
| | | "positioning": "ä¾åºåå
¨çå½å¨æï¼åå
¥-èµè´¨-寻æº-绩æ", |
| | | "problem": "ä¾åºååè§åå
¥ãé³å
寻æº(ææ /æ¯ä»·)ä¸ç»©æéå", |
| | | "features": ["ä¾åºåæ¡£æ¡ä¸åç±»", "åå
¥ç³è¯·(BPM éè´/è´¨é/è´¢å¡ä¼ç¾)", "èµè´¨è¯ä¹¦æææ", "ææ ï¼å
¬å¼/é请/ç«è°å®æ´ç+æ¯ä»·ç®æç", "ææ Â·æ¥ä»·Â·å¼æ Â·è¯æ Â·å®æ ", "宿 èªå¨çæéè´è®¢å", "å维绩æ(è´¨é/交ä»/ä»·æ ¼/æå¡)"], |
| | | "objects": ["ä¾åºå", "åå
¥ç³è¯·", "èµè´¨è¯ä¹¦", "ææ é¡¹ç®", "ææ ", "宿 ", "绩æè¯ä»·"], |
| | | "roles": ["éè´å¼å", "ä¾åºå管çå", "è¯å®¡ä¸å®¶"], |
| | | "positioning": "ä¾åºåæ¡£æ¡ + 询价æ¯ä»· + ææ ä¿è¯é", |
| | | "problem": "ä¾åºåä¿¡æ¯å¤å¼æ·è¡/å¤è系人维æ¤ï¼éè´å¯»æºæäº§åæ¨ªåæ¯ä»·å¹¶å¿«é转为éè´è®¢å", |
| | | "features": ["ä¾åºåæ¡£æ¡ä¸åç±»", "å¤è系人/å¤é¶è¡è´¦æ·(å«é¶è¡è¡å·)", "询价åï¼æ°å¢æ¶ä¸å¹¶å½å
¥äº§åè¡Ãåä¸ä¾åºåæ¥ä»·", "æ¯ä¸ªäº§ååç¬éå®ä¸æ ä¾åºå", "确认åæä¸æ ä¾åºåæåçæéè´è®¢åè稿", "ææ ä¿è¯éå°è´¦(æ¯å¦ä¸æ /éåç¶æé颿¥æ)"], |
| | | "objects": ["ä¾åºå", "询价æ¯ä»·", "ææ ä¿è¯é"], |
| | | "roles": ["éè´å", "ä¾åºå管çå"], |
| | | "upstream": ["ä¸»æ°æ®(ç©æ)"], "downstream": ["è¿éå(éè´è®¢å)"], |
| | | "coreTables": ["srm_supplier", "srm_supplier_apply", "srm_supplier_certificate", "srm_tender_project", "srm_tender_bid", "srm_bid_award", "srm_supplier_evaluation"]}, |
| | | "coreTables": ["srm_supplier", "srm_supplier_contact", "srm_supplier_bank", "srm_supplier_category", "srm_inquiry", "srm_inquiry_item", "srm_inquiry_supplier", "srm_inquiry_quote", "srm_inquiry_order", "srm_bid_bond"]}, |
| | | {"key": "erp", "name": "è¿éåä¸è´¢å¡", "color": "#5fc79e", "tag": "ERP", "flow": "purchase", |
| | | "positioning": "åè´¸ä¸èµé忮䏿¢ï¼å MES åèµ·å®ç©æ¶å", |
| | | "problem": "éè´éå®åæ®å®¡æ¹ãæ¥ç¥¨ä»æ¬¾æ§å¶ãè®¢åæ§è¡è¿åº¦åå", |
| | |
| | | {"name": "å票", "module": "éå®ç®¡ç", "table": "crm_invoice", "doc": "KPç¼å·ï¼å¯ç空èªå¨çæãç³»ç»å
å¯ä¸ï¼ï¼BPM 审æ¹ï¼ç´¯è®¡å¼ç¥¨â¤ååé¢ï¼éä»¶å¿
ä¼ ï¼æ¯æ Excel 导å
¥ï¼ä»
æ°å¢ä¸æ´æ°ï¼ååé¡»å®¡æ ¸éè¿ä¸æ¬æ¬¡éé¢â¤ååå©ä½å¯å¼ç¥¨é¢ï¼å䏿¹æ°æ®ä¸å¯éå¤å¯¼å
¥ââåååä¸å票å·ç ç¸åãæå票å·ç ç空æ¶å¼ç¥¨éé¢+å票æ¬å¤´+å¼ç¥¨æ¥æç¸åå³å¤éå¤ï¼æä»¶å
éå¤è¡ä¸åºå
å·²æåé½æè¯¥è¡å¹¶åæ¾ç»´åº¦ä¸å®é
å¼ï¼", "upstream": ["åå"], "downstream": ["忬¾"], "keywords": "å¼ç¥¨ å票 invoice 导å
¥ å»é"}, |
| | | {"name": "忬¾", "module": "éå®ç®¡ç", "table": "crm_receivable", "doc": "HKç¼å·ï¼å建å³å®¡æ¹ä¸(æå¨å®¡æ ¸)ï¼å¼ºå¶å
å¼ç¥¨ï¼éé¢åæ ¡éª", "upstream": ["åå", "å票"], "downstream": ["æ¶æ¬¾å(å
³è)"], "keywords": "忬¾ æ¶æ¬¾è®¡å receivable"}, |
| | | {"name": "éå®ç®æ ", "module": "éå®ç®¡ç", "table": "crm_sales_target", "doc": "å¹´/å£/æÃ个人/é¨é¨/产å维度çåå忬¾çç®æ ", "upstream": [], "downstream": ["ä¸ç»©ç»è®¡"], "keywords": "ç®æ target ä¸ç»©"}, |
| | | {"name": "ä¾åºå", "module": "ä¾åºå管ç", "table": "srm_supplier", "doc": "ä¾åºåæ¡£æ¡ï¼æ§ç
§/ç¨å·/é¶è¡/è系人ï¼ERP ä¸ MES å
±ç¨", "upstream": ["åå
¥ç³è¯·"], "downstream": ["éè´è®¢å", "å°è´§éç¥", "ä¾åºåéè´§", "绩æè¯ä»·"], "keywords": "ä¾åºå supplier vendor"}, |
| | | {"name": "åå
¥ç³è¯·", "module": "ä¾åºå管ç", "table": "srm_supplier_apply", "doc": "APç¼å·ï¼BPM 审æ¹(éè´/è´¨é/è´¢å¡)ï¼éè¿èªå¨å»ºä¾åºåæ¡£æ¡", "upstream": [], "downstream": ["ä¾åºå"], "keywords": "åå
¥ ä¾åºåç³è¯· apply"}, |
| | | {"name": "ææ é¡¹ç®", "module": "ä¾åºå管ç", "table": "srm_tender_project", "doc": "宿´ç(åå¸âææ â弿 âè¯æ â宿 )ä¸ç®ææ¯ä»·ä¸¤ç§æ¨¡å¼", "upstream": [], "downstream": ["宿 âéè´è®¢å"], "keywords": "ææ ææ æ¯ä»· 宿 tender 寻æº"}, |
| | | {"name": "ä¾åºå", "module": "ä¾åºå管ç", "table": "srm_supplier", "doc": "ä¾åºåæ¡£æ¡ï¼æ§ç
§/ç¨å·ï¼å¤ä¸ªè系人(srm_supplier_contact)ä¸å¤ä¸ªé¶è¡è´¦æ·(srm_supplier_bank·å«é¶è¡è¡å·)ï¼ä¸»è¡¨ä¿çé»è®¤è系人/é»è®¤é¶è¡å段ï¼ERP ä¸ MES å
±ç¨", "upstream": ["æå·¥å»ºæ¡£/Excel 导å
¥"], "downstream": ["询价æ¯ä»·", "ææ ä¿è¯é", "éè´è®¢å", "å°è´§éç¥", "ä¾åºåéè´§", "ä¾åºå徿¥"], "keywords": "ä¾åºå supplier vendor è系人 弿·è¡ é¶è¡è¡å·"}, |
| | | {"name": "询价æ¯ä»·", "module": "ä¾åºå管ç", "table": "srm_inquiry", "doc": "XJç¼å·ï¼è稿0â已转订å20â已忶30(10询价ä¸ä¸ºåå²ç¶æ)ï¼æ°å¢/ç¼è¾æ¶ä¸å¹¶å½å
¥äº§åè¡Ãåä¸ä¾åºåæ¥ä»·(srm_inquiry_quote)å¹¶é宿¯ä¸ªäº§åç䏿 ä¾åºåï¼æ éåç¬çæ¥ä»·/æ¯ä»·æ¥éª¤ï¼ç¡®è®¤åæä¸æ ä¾åºåæåçæéè´è®¢åèç¨¿å¹¶è®°å½ srm_inquiry_order", "upstream": ["ä¾åºå", "ä¸»æ°æ®(ç©æ)"], "downstream": ["éè´è®¢å(è稿)"], "keywords": "询价 æ¯ä»· æ¥ä»· 䏿 inquiry quote"}, |
| | | {"name": "ææ ä¿è¯é", "module": "ä¾åºå管ç", "table": "srm_bid_bond", "doc": "BZç¼å·å°è´¦ï¼å
³èä¾åºå/询价å/éè´è®¢åï¼è®°å½ä¿è¯ééé¢ãç¼´çº³æ¥æãæ¯å¦ä¸æ ãéåç¶æ(0æªé1é¨å2å·²é3æ éé)/éåéé¢/é忥æ", "upstream": ["ä¾åºå", "询价æ¯ä»·", "éè´è®¢å"], "downstream": ["ä¾åºå徿¥(åè)"], "keywords": "ææ ä¿è¯é 䏿 éå bid bond"}, |
| | | {"name": "éè´ç³è¯·", "module": "è¿éå", "table": "erp_purchase_request", "doc": "CGSQç¼å·ï¼BPM 审æ¹ï¼éè¿åæä¾åºåèªå¨çæè®¢å", "upstream": ["ç产缺å£(人工)"], "downstream": ["éè´è®¢å"], "keywords": "éè´ç³è¯· è¯·è´ request"}, |
| | | {"name": "éè´è®¢å", "module": "è¿éå", "table": "erp_purchase_order", "doc": "CGDDç¼å·ï¼BPM 审æ¹(15审æ¹ä¸/20å·²å®¡æ ¸)ï¼å
¥åºç¶æ:æª0é¨å1å
¨é¨2", "upstream": ["éè´ç³è¯·", "宿 "], "downstream": ["å°è´§éç¥", "éè´æ¥ç¥¨", "ä¾åºåéè´§(约æç©æ)"], "keywords": "éè´è®¢å purchase"}, |
| | | {"name": "éè´æ¥ç¥¨", "module": "è¿éå", "table": "erp_purchase_invoice", "doc": "FPDç¼å·ï¼AI OCR é¢å¡«ï¼ç´¯è®¡â¤è®¢åæ»ä»·ï¼ä»æ¬¾åçåç½®", "upstream": ["éè´è®¢å"], "downstream": ["仿¬¾å"], "keywords": "æ¥ç¥¨ å票 éè´å票"}, |
| | | {"name": "仿¬¾å", "module": "è´¢å¡", "table": "erp_finance_payment", "doc": "FKDç¼å·ï¼å¿
é¡»å
³èæ¥ç¥¨+éä»¶ï¼ç´¯è®¡â¤æ¥ç¥¨éé¢ï¼BPM 审æ¹", "upstream": ["éè´æ¥ç¥¨"], "downstream": ["ç»ç®è´¦æ·"], "keywords": "仿¬¾ åºä» payment"}, |
| | | {"name": "éè´è®¢å", "module": "è¿éå", "table": "erp_purchase_order", "doc": "CGDDç¼å·ï¼BPM 审æ¹(è稿0â审æ¹ä¸15âå·²å®¡æ ¸20)ï¼å
¥åºç¶æ:æª0é¨å1å
¨é¨2ï¼æ¥æºå¯ä¸ºéè´ç³è¯·æè¯¢ä»·æ¯ä»·ç¡®è®¤çæçè稿(æ¥æºåå·å溯)ï¼å价为å«ç¨åä»·ï¼ä»·ç¨å计=åä»·Ãæ°éï¼ç¨é¢ä»å«ç¨éé¢ä¸åç®(ä¸åé¢å¤å ç¨)", "upstream": ["éè´ç³è¯·", "询价æ¯ä»·(ç¡®è®¤ä¸æ )"], "downstream": ["å°è´§éç¥", "éè´æ¥ç¥¨", "ä¾åºåéè´§(约æç©æ)", "ä¾åºå徿¥"], "keywords": "éè´è®¢å purchase"}, |
| | | {"name": "éè´æ¥ç¥¨", "module": "è¿éå", "table": "erp_purchase_invoice", "doc": "FPDç¼å·ï¼AI OCR é¢å¡«ï¼ç´¯è®¡â¤è®¢åæ»ä»·ï¼ä»æ¬¾åçåç½®ï¼ä¾åºå徿¥å³ä¾§å±ç¤ºå¼ç¥¨éé¢/å·²ä»/å©ä½åºä»", "upstream": ["éè´è®¢å"], "downstream": ["仿¬¾å", "ä¾åºå徿¥"], "keywords": "æ¥ç¥¨ å票 éè´å票"}, |
| | | {"name": "仿¬¾å", "module": "è´¢å¡", "table": "erp_finance_payment", "doc": "FKDç¼å·ï¼å¿
é¡»å
³èæ¥ç¥¨+éä»¶ï¼ç´¯è®¡â¤æ¥ç¥¨éé¢ï¼BPM 审æ¹", "upstream": ["éè´æ¥ç¥¨"], "downstream": ["ç»ç®è´¦æ·", "ä¾åºå徿¥"], "keywords": "仿¬¾ åºä» payment"}, |
| | | {"name": "ä¾åºå徿¥", "module": "è¿éå", "table": "æ ç¬ç«è¡¨(èåè§å¾)", "doc": "æä¾åºå+æ¶é´èå´èåéè´è®¢å/æ¥ç¥¨/仿¬¾ï¼æ±æ»ç´¯è®¡éè´é¢ã累计å¼ç¥¨é¢ãç´¯è®¡ä»æ¬¾é¢ãæªä»ä½é¢ï¼å·¦ä¾§è®¢åè¡å«å·²å¼ç¥¨/æªå¼ç¥¨éé¢ï¼å³ä¾§æ¥ç¥¨è¡å«å¼ç¥¨éé¢/å·²ä»/å©ä½åºä»", "upstream": ["éè´è®¢å", "éè´æ¥ç¥¨", "仿¬¾å"], "downstream": [], "keywords": "ä¾åºå徿¥ 对账 å¼ç¥¨éé¢ åºä» statement"}, |
| | | {"name": "æ¶æ¬¾å", "module": "è´¢å¡", "table": "erp_finance_receipt", "doc": "SKDç¼å·ï¼å
³è CRM å®¢æ·æ ¡éªï¼æ BPM(æå¨å®¡æ ¸)", "upstream": ["éå®(å¼±å
³è)"], "downstream": ["ç»ç®è´¦æ·"], "keywords": "æ¶æ¬¾ åºæ¶ receipt"}, |
| | | {"name": "ä¼è®¡ç§ç®", "module": "ä¼è®¡æ ¸ç®", "table": "fin_account_subject", "doc": "ç§ç®æ ï¼parent_id èªå
³èï¼ç§ç®ç±»å1èµäº§2è´åº3æç4ææ¬5æçï¼ä½é¢æ¹å1å2è´·ï¼ç¶æ0å¯ç¨1ç¦ç¨ï¼è´¦è¡¨ä¸åå½ç»ä¸æ subject_code åæ°", "upstream": ["ä¼è®¡ç§ç®ç§å约68æ¡ä¸çº§ç§ç®"], "downstream": ["è®°è´¦åè¯åå½", "æ»è´¦", "æç»è´¦"], "keywords": "ä¼è®¡ç§ç® ç§ç® subject account èµäº§ç±» è´åºç±» æçç±»"}, |
| | | {"name": "è®°è´¦åè¯", "module": "ä¼è®¡æ ¸ç®", "table": "fin_voucher", "doc": "åè¯åå·å¯ç空ç±å端èªå¨çæï¼ç¶æ æªè¿è´¦0/å·²è¿è´¦10/å·²ä½åº20ï¼å·²è¿è´¦ä¸å¯æ¹ï¼æªè¿è´¦ä¸å·²è¿è´¦åå¯ä½åºï¼æªè¿è´¦ä¸å·²ä½åºå¯å é¤ï¼éä»¶æ recordType=fin_voucher æç³»ç»éä»¶ä¸å¿", "upstream": ["ä¼è®¡ç§ç®"], "downstream": ["æ»è´¦", "æç»è´¦", "è´¢å¡æ¥è¡¨çæ¿"], "keywords": "è®°è´¦åè¯ åè¯ voucher è¿è´¦ ä½åº å贷平衡"}, |
| | |
| | | {"stage": "交ä»", "action": "åè´§éç¥å®¡æ ¸(å ç¨)â éå®åºåº OQC â åè¿ â åºåºååé¨å/å
¨é¨åºåº", "roles": ["ä»ç®¡", "è´¨æ£"]}, |
| | | {"stage": "忬¾", "action": "å¼ç¥¨ BPM(累计â¤ååé¢) â 忬¾å¼ºå¶å
å¼ç¥¨(累计â¤ååå©ä½ä¸å¼ç¥¨å©ä½)", "roles": ["è´¢å¡", "éå®"]}]}, |
| | | {"id": "purchase", "name": "éè´æµç¨", "mermaid": "mermaid/03-purchase-flow.mmd", "color": "#5fc79e", |
| | | "summary": "SRM åå
¥/宿 便º â éè´ç³è¯· BPM â éè´è®¢å BPM â 确认æ¶è´§çæ MES å°è´§éç¥ â IQC(åæ ¼/ç¹éå
¥åºÂ·éè´§/æ¥åº) â éè´å
¥åºåå订åä¸ç³è¯· â æ¥ç¥¨(AI OCR) â 仿¬¾å BPMã", |
| | | "summary": "ä¾åºåæ¡£æ¡(å¤è系人/å¤é¶è¡Â·å«é¶è¡è¡å·) â 询价æ¯ä»·(产åÃä¾åºåæ¨ªåæ¥ä»·ï¼æäº§åé䏿 ) â 确认åæä¸æ ä¾åºåæéè´è®¢åèç¨¿å¹¶èµ°ç°æ BPM â 确认æ¶è´§çæ MES å°è´§éç¥ â IQC(åæ ¼/ç¹éå
¥åºÂ·éè´§/æ¥åº) â éè´å
¥åºåå订åä¸ç³è¯· â æ¥ç¥¨(AI OCR) â 仿¬¾å BPM â ä¾åºå徿¥å¯¹è´¦ï¼ææ ä¿è¯éå°è´¦ç¬ç«è®°å½ä¸æ ä¸éåã", |
| | | "steps": [ |
| | | {"stage": "寻æº", "action": "ä¾åºååå
¥(BPM)å»ºæ¡£ï¼ææ 宿´çæç®ææ¯ä»·ï¼å®æ 审æ¹éè¿èªå¨çæéè´è®¢å", "roles": ["éè´å¼å"]}, |
| | | {"stage": "寻æº", "action": "ä¾åºåæ¡£æ¡ç»´æ¤å¤ä¸ªè系人ä¸å¤ä¸ªé¶è¡è´¦æ·(å«é¶è¡è¡å·)ï¼æ°å¢è¯¢ä»·åæ¶ä¸å¹¶å½å
¥äº§åÃåä¸ä¾åºåæ¥ä»·å¹¶é宿¯ä¸ªäº§åç䏿 ä¾åºåï¼åè¡¨ç´æ¥ç¡®è®¤åæä¸æ ä¾åºåçæéè´è®¢åèç¨¿ï¼ææ ä¿è¯éå°è´¦è®°å½æ¯å¦ä¸æ ä¸éåç¶æ/éé¢/æ¥æ", "roles": ["éè´å", "ä¾åºå管çå"]}, |
| | | {"stage": "ç³è¯·", "action": "éè´ç³è¯·(CGSQ)æäº¤ BPMï¼é©³åå¯éç½®åè稿ï¼éè¿ä¸æä¾åºåèªå¨çæè®¢å", "roles": ["éè´å", "审æ¹äºº"]}, |
| | | {"stage": "ä¸å", "action": "éè´è®¢å(CGDD)èªå¨æäº¤ BPM(15â20)", "roles": ["éè´å"]}, |
| | | {"stage": "æ¶è´§", "action": "确认æ¶è´§çæå°è´§éç¥(0âå¾
è´¨æ£2/å¾
å
¥åº3â4)ï¼éæ£ç©æèªå¨å建 IQC", "roles": ["ä»ç®¡", "IQC è´¨æ£å"]}, |
| | | {"stage": "å
¥åº", "action": "IQC åæ ¼/ç¹éâéè´å
¥åº(å¾
䏿¶âå¾
æ§è¡â宿)åºå+ï¼åå订å inCount/inStatus ä¸ç³è¯·æç»", "roles": ["ä»ç®¡"]}, |
| | | {"stage": "éè´§", "action": "IQC ä¸åæ ¼éè´§âä¾åºåéè´§åºåº(éæéå®å°è®¢åè¡)ï¼æ¥åºèµ° NCR", "roles": ["ä»ç®¡"]}, |
| | | {"stage": "仿¬¾", "action": "éè´æ¥ç¥¨(FPD, AI OCR, â¤è®¢åæ»ä»·) â 仿¬¾å(FKD å
³èæ¥ç¥¨+éä»¶, â¤æ¥ç¥¨éé¢) BPM 审æ¹", "roles": ["è´¢å¡", "审æ¹äºº"]}]}, |
| | | {"stage": "仿¬¾", "action": "éè´æ¥ç¥¨(FPD, AI OCR, â¤è®¢åæ»ä»·) â 仿¬¾å(FKD å
³èæ¥ç¥¨+éä»¶, â¤æ¥ç¥¨éé¢) BPM 审æ¹", "roles": ["è´¢å¡", "审æ¹äºº"]}, |
| | | {"stage": "对账", "action": "ä¾åºå徿¥æä¾åºåæ±æ»ï¼å·¦ä¾§éè´è®¢åæµæ°´å«å·²å¼ç¥¨/æªå¼ç¥¨éé¢ï¼å³ä¾§æ¥ç¥¨æµæ°´å«å¼ç¥¨éé¢/å·²ä»/å©ä½åºä»å¹¶é仿¬¾æµæ°´ï¼é¡¶é¨æ±æ»ç´¯è®¡éè´/å¼ç¥¨/仿¬¾/æªä»ä½é¢", "roles": ["è´¢å¡", "éè´å"]}]}, |
| | | {"id": "production", "name": "ç产æµç¨", "mermaid": "mermaid/04-production-flow.mmd", "color": "#e0b34f", |
| | | "summary": "éå®è®¢åé©±å¨ MPS â ä¸åå·¥å â æå·¥èºè·¯çº¿æå·¥åºä»»å¡ â 颿/çº¿è¾¹å¤æ â æ¥å·¥(å·¥åºé¡ºåºç¡¬æ ¡éª+BPM) â å岿¶è/产åºå
¥åº/IPQC â æ«éå·¥åºååè¿åº¦ â èªå¨å®å·¥ â ProductionFinishedEvent ååéå®è®¢åã", |
| | | "steps": [ |
| | |
| | | {"role": "éå®å
å¤/éå®", "modules": ["CRM", "ERP"], "operations": ["线索客æ·åæºç»´æ¤", "æ¥ä»·ä¸åå", "éå®è®¢å", "è·è¿è®°å½"], "data": ["crm_*", "erp_sale_order"], "scope": "è´è´£äºº(owner)+æ°æ®æéä¸çº§ï¼åªè¯»/读å/è´è´£äººï¼å
¬æµ·æ± å¯é¢åï¼äº¤æ¥äººåºå¯éè¿ expandUserIds çå°ç¦»èäººæ°æ®(æ¥å£å·²å¤ãå¾
æ¥å
¥)"}, |
| | | {"role": "éå®ç»ç", "modules": ["CRM"], "operations": ["åæº/åå审æ¹åä¸", "éå®ç®æ å¶å®", "ä¸ç»©æåæ¼æåæ"], "data": ["å¢éæ°æ®(ä¸å±ç¨æ·)"], "scope": "AdminUserApi ä¸çº§ç¨æ·æ©å±"}, |
| | | {"role": "éè´å", "modules": ["ERP", "SRM"], "operations": ["éè´ç³è¯·/订å", "确认æ¶è´§", "æ¥ç¥¨ä¸ä»æ¬¾åèµ·"], "data": ["erp_purchase_*", "srm_*"], "scope": "requestUserId/supplierOwner å½å±"}, |
| | | {"role": "éè´å¼å/ä¾åºå管çå", "modules": ["SRM"], "operations": ["åå
¥å®¡æ¹æµè½¬", "ææ æ¯ä»·ç»ç»", "绩æè¯ä»·"], "data": ["srm_supplier_apply", "srm_tender_*"], "scope": "BPM å¤é¨é¨ä¼ç¾(éè´/è´¨é/è´¢å¡)"}, |
| | | {"role": "éè´å/ä¾åºå管çå", "modules": ["SRM"], "operations": ["ä¾åºåæ¡£æ¡ç»´æ¤", "询价æ¯ä»·ä¸ç¡®è®¤è½¬è®¢å", "ææ ä¿è¯éå°è´¦"], "data": ["srm_supplier*", "srm_inquiry*", "srm_bid_bond"], "scope": "éè´ç®¡çèåæéï¼è¯¢ä»·ç¡®è®¤çæçéè´è®¢åè稿走 ERP BPM"}, |
| | | {"role": "计åå", "modules": ["MES"], "operations": ["MPS ä¸å·¥å", "å·¥èºè·¯çº¿ç»´æ¤", "AI 颿µåè"], "data": ["mes_pro_*"], "scope": "车é´/é¨é¨æ°æ®èå´"}, |
| | | {"role": "æä½å·¥/çç»é¿", "modules": ["MES"], "operations": ["任塿¥æ¶", "æ¥å·¥æäº¤(åå·¥åºé¡ºåºçº¦æ)", "å®ç¯"], "data": ["mes_pro_feedback", "mes_pro_task"], "scope": "ä»»å¡ææ´¾äººå¯è§"}, |
| | | {"role": "ä»ç®¡å", "modules": ["MES-WM"], "operations": ["15 ç±»åºå
¥åºåæ®æ§è¡", "è°æ¨", "çç¹", "æ¡ç è£
ç®±"], "data": ["mes_wm_*"], "scope": "ä»åºç»´åº¦ï¼WMS 坿ä»åºé
ç½®åºå
¥åº/è°æ¨/çç¹æ¯å¦èµ° BPM"}, |
| | |
| | | éå®ç®æ |
| | | æ°æ®æéä¸å
¬æµ· |
| | | ä¾åºå管ç SRM |
| | | ä¾åºåæ¡£æ¡ |
| | | åå
¥å®¡æ¹ |
| | | èµè´¨è¯ä¹¦ |
| | | ææ ä¸æ¯ä»· |
| | | 绩æè¯ä»· |
| | | ä¾åºåæ¡£æ¡(å¤è系人/å¤é¶è¡) |
| | | 询价æ¯ä»· |
| | | ææ ä¿è¯é |
| | | è¿éåä¸è´¢å¡ ERP |
| | | éè´ç³è¯· |
| | | éè´è®¢å |
| | |
| | | </pre> |
| | | <pre style="display:none" class="mmd-src" data-mmd="03-purchase-flow"> |
| | | flowchart TD |
| | | S0[SRM åå
¥ç³è¯· AP·å¾
æäº¤0â审æ¹ä¸10âå·²éè¿40] --> S1[ä¾åºåæ¡£æ¡ srm_supplier] |
| | | S1 --> S2[èµè´¨è¯ä¹¦ç®¡ç] |
| | | S1 --> S3[绩æè¯ä»·Â·è´¨é交ä»ä»·æ ¼æå¡åç»´] |
| | | S4[SRM ææ æ¯ä»·Â·åå¸âææ â弿 âè¯æ â宿 ] -->|宿 审æ¹éè¿çæè®¢å| C3 |
| | | S1[ä¾åºåæ¡£æ¡ srm_supplier·å¤è系人/å¤é¶è¡å«é¶è¡è¡å·] --> S2[询价æ¯ä»· srm_inquiry·è稿0â已转订å20] |
| | | S2 -->|æ°å¢æ¶ä¸å¹¶å½å
¥äº§åÃä¾åºåæ¥ä»·å¹¶éå®ä¸æ ·åè¡¨ç´æ¥ç¡®è®¤| S3[æä¸æ ä¾åºåæåçæéè´è®¢åè稿] |
| | | S3 -->|æäº¤| C3 |
| | | S1 -.-> S5[ææ ä¿è¯é srm_bid_bond·æ¯å¦ä¸æ /éåç¶æ] |
| | | S2 -.-> S5 |
| | | C1[éè´ç³è¯· CGSQ·è稿0â审æ¹ä¸10] -->|æäº¤BPM| C2{审æ¹} |
| | | C2 -->|驳å30âå¯éç½®åè稿| C1 |
| | | C2 -->|éè¿20䏿ä¾åºå·èªå¨çæ| C3[éè´è®¢å CGDD·审æ¹ä¸15âå·²å®¡æ ¸20] |
| | |
| | | C7 -->|ååç³è¯·æç» inCount| C1 |
| | | C3 -->|è®¢åæ»ä»·æ§å¶| C10[éè´æ¥ç¥¨ FPD·累计éé¢â¤è®¢åæ»ä»·] |
| | | C10 -->|仿¬¾åå¿
é¡»å
³èæ¥ç¥¨| C11[仿¬¾å FKD·审æ¹ä¸15âå·²å®¡æ ¸20Â·ç´¯è®¡ä»æ¬¾â¤æ¥ç¥¨éé¢] |
| | | C3 --> S6[ä¾åºå徿¥Â·è®¢åæµæ°´å«å·²å¼ç¥¨/æªå¼ç¥¨] |
| | | C10 --> S6 |
| | | C11 --> S6 |
| | | </pre> |
| | | <pre style="display:none" class="mmd-src" data-mmd="04-production-flow"> |
| | | flowchart TD |
| | |
| | | MDM --> ERP[ERP éè´Â·éå®Â·è´¢å¡] |
| | | MDM --> CRM |
| | | CRM[CRM 线索客æ·åæºæ¥ä»·åå忬¾] -->|ååçæéå®è®¢å| ERP |
| | | SRM[SRM ä¾åºååå
¥èµè´¨è¯ä¹¦ææ 绩æ] -->|宿 çæéè´è®¢å| ERP |
| | | SRM[SRM ä¾åºåæ¡£æ¡Â·è¯¢ä»·æ¯ä»·Â·ææ ä¿è¯é] -->|询价确认çæéè´è®¢åè稿| ERP |
| | | ERP -.->|ä¾åºå徿¥è¯»åä¾åºååç§°| SRM |
| | | ERP -->|确认æ¶è´§çæå°è´§éç¥| MES |
| | | ERP -->|éå®è®¢å审æ¹çæMPS| MES |
| | | MES -->|å
¥åºåºåºåååæ®è¿åº¦| ERP |
| | |
| | | HRM[HRM åå·¥å
¥è½¬è°ç¦»äº¤æ¥èå¤èªé
¬] -.->|expandUserIds æ°æ®å¯è§æ§æ©å±Â·æ¥å£å·²å°±ç»ªå¾
忍¡åæ¥å
¥| CRM |
| | | BPM[BPM Flowable 审æ¹å¼æ] -.->|ç¶æäºä»¶åè°Â·13个çå¬å¨| ERP |
| | | BPM -.-> CRM |
| | | BPM -.-> SRM |
| | | BPM -.-> MES |
| | | BPM -.-> HRM |
| | | AI[AI å¹³å° éä¹åé®+Milvus] -.->|å票OCR| ERP |
| | |
| | | éå®ç®æ |
| | | æ°æ®æéä¸å
¬æµ· |
| | | ä¾åºå管ç SRM |
| | | ä¾åºåæ¡£æ¡ |
| | | åå
¥å®¡æ¹ |
| | | èµè´¨è¯ä¹¦ |
| | | ææ ä¸æ¯ä»· |
| | | 绩æè¯ä»· |
| | | ä¾åºåæ¡£æ¡(å¤è系人/å¤é¶è¡) |
| | | 询价æ¯ä»· |
| | | ææ ä¿è¯é |
| | | è¿éåä¸è´¢å¡ ERP |
| | | éè´ç³è¯· |
| | | éè´è®¢å |
| | |
| | | flowchart TD |
| | | S0[SRM åå
¥ç³è¯· AP·å¾
æäº¤0â审æ¹ä¸10âå·²éè¿40] --> S1[ä¾åºåæ¡£æ¡ srm_supplier] |
| | | S1 --> S2[èµè´¨è¯ä¹¦ç®¡ç] |
| | | S1 --> S3[绩æè¯ä»·Â·è´¨é交ä»ä»·æ ¼æå¡åç»´] |
| | | S4[SRM ææ æ¯ä»·Â·åå¸âææ â弿 âè¯æ â宿 ] -->|宿 审æ¹éè¿çæè®¢å| C3 |
| | | S1[ä¾åºåæ¡£æ¡ srm_supplier·å¤è系人/å¤é¶è¡å«é¶è¡è¡å·] --> S2[询价æ¯ä»· srm_inquiry·è稿0â已转订å20] |
| | | S2 -->|æ°å¢æ¶ä¸å¹¶å½å
¥äº§åÃä¾åºåæ¥ä»·å¹¶éå®ä¸æ ·åè¡¨ç´æ¥ç¡®è®¤| S3[æä¸æ ä¾åºåæåçæéè´è®¢åè稿] |
| | | S3 -->|æäº¤| C3 |
| | | S1 -.-> S5[ææ ä¿è¯é srm_bid_bond·æ¯å¦ä¸æ /éåç¶æ] |
| | | S2 -.-> S5 |
| | | C1[éè´ç³è¯· CGSQ·è稿0â审æ¹ä¸10] -->|æäº¤BPM| C2{审æ¹} |
| | | C2 -->|驳å30âå¯éç½®åè稿| C1 |
| | | C2 -->|éè¿20䏿ä¾åºå·èªå¨çæ| C3[éè´è®¢å CGDD·审æ¹ä¸15âå·²å®¡æ ¸20] |
| | |
| | | C7 -->|ååç³è¯·æç» inCount| C1 |
| | | C3 -->|è®¢åæ»ä»·æ§å¶| C10[éè´æ¥ç¥¨ FPD·累计éé¢â¤è®¢åæ»ä»·] |
| | | C10 -->|仿¬¾åå¿
é¡»å
³èæ¥ç¥¨| C11[仿¬¾å FKD·审æ¹ä¸15âå·²å®¡æ ¸20Â·ç´¯è®¡ä»æ¬¾â¤æ¥ç¥¨éé¢] |
| | | C3 --> S6[ä¾åºå徿¥Â·è®¢åæµæ°´å«å·²å¼ç¥¨/æªå¼ç¥¨] |
| | | C10 --> S6 |
| | | C11 --> S6 |
| | |
| | | MDM --> ERP[ERP éè´Â·éå®Â·è´¢å¡] |
| | | MDM --> CRM |
| | | CRM[CRM 线索客æ·åæºæ¥ä»·åå忬¾] -->|ååçæéå®è®¢å| ERP |
| | | SRM[SRM ä¾åºååå
¥èµè´¨è¯ä¹¦ææ 绩æ] -->|宿 çæéè´è®¢å| ERP |
| | | SRM[SRM ä¾åºåæ¡£æ¡Â·è¯¢ä»·æ¯ä»·Â·ææ ä¿è¯é] -->|询价确认çæéè´è®¢åè稿| ERP |
| | | ERP -.->|ä¾åºå徿¥è¯»åä¾åºååç§°| SRM |
| | | ERP -->|确认æ¶è´§çæå°è´§éç¥| MES |
| | | ERP -->|éå®è®¢å审æ¹çæMPS| MES |
| | | MES -->|å
¥åºåºåºåååæ®è¿åº¦| ERP |
| | |
| | | HRM[HRM åå·¥å
¥è½¬è°ç¦»äº¤æ¥èå¤èªé
¬] -.->|expandUserIds æ°æ®å¯è§æ§æ©å±Â·æ¥å£å·²å°±ç»ªå¾
忍¡åæ¥å
¥| CRM |
| | | BPM[BPM Flowable 审æ¹å¼æ] -.->|ç¶æäºä»¶åè°Â·13个çå¬å¨| ERP |
| | | BPM -.-> CRM |
| | | BPM -.-> SRM |
| | | BPM -.-> MES |
| | | BPM -.-> HRM |
| | | AI[AI å¹³å° éä¹åé®+Milvus] -.->|å票OCR| ERP |
| | |
| | | -- å端æéç ï¼è§å Controller ç @PreAuthorize |
| | | -- |
| | | -- 说æï¼ |
| | | -- 1. æ°å»ºä¸çº§èåãè´¢å¡æ ¸ç®ã(/finance-core)ï¼ä¸è§¦ç¢°åæ ERP ä¸çãè´¢å¡ç®¡çã(id=2645) |
| | | -- åå
¶ ç»ç®è´¦æ·/仿¬¾å/æ¶æ¬¾å ä¸ä¸ªèåã |
| | | -- 1. æ°å»ºä¸çº§èåãè´¢å¡æ ¸ç®ã(/finance-core)ãå ERP ä¸çãè´¢å¡ç®¡çã(id=2645) |
| | | -- å å
¶ç¶èåãERP ç³»ç»ã(id=2563) å·²åç¨èä¸å¯è§ï¼æ¬èæ¬æå®æå°ãè´¢å¡æ ¸ç®ãä¸ï¼ |
| | | -- æ¢å¤ ç»ç®è´¦æ·/仿¬¾å/æ¶æ¬¾å ä¸ä¸ªèåï¼å role_menu ææä¿çï¼ã |
| | | -- 2. 页é¢èå(type=2) åèªæºå¸¦ :query æéï¼å¢å æ¹/导åº/ææ§æéçæä½æé建ææé®(type=3)ã |
| | | -- 3. æ»è´¦ä¸æç»è´¦å
±ç¨ finance:ledger:queryãfinance:ledger:export 两个æéç ï¼ |
| | | -- å æ¤ã导åºè´¦ç°¿ãæé®åªæå¨ãæ»è´¦ãä¸ ââ å䏿éç å¨è§è²æææ éåºç°ä¸æ¬¡å³å¯ï¼ |
| | | -- æäºåãæç»è´¦ãçå¯¼åºæé®åæ ·çæã |
| | | -- 4. å¹çï¼å
å 餿¬èæ¬å ç¨ç id åºé´ (1075500~1075549) åæå
¥ï¼å¯é夿§è¡ã |
| | | -- 4. å¹çï¼å
å 餿¬èæ¬å ç¨ç id åºé´ (1075600~1075649) å对åºè§è²ææåæå
¥ï¼å¯é夿§è¡ã |
| | | -- 注æï¼è¥ä¹åå·²å¨ãè§è²ç®¡çãéç»è¿äºèåææï¼éè·æ¬èæ¬ä¼ä¸¢å¤±å¯¹åº system_role_menu è®°å½ã |
| | | -- 5. ä¸å« tenant_idï¼æ¬é¡¹ç®éå¤ç§æ·ï¼ã |
| | | -- ============================================= |
| | | |
| | | DELETE FROM system_menu WHERE id BETWEEN 1075500 AND 1075549; |
| | | DELETE FROM system_role_menu WHERE menu_id BETWEEN 1075600 AND 1075649; |
| | | DELETE FROM system_menu WHERE id BETWEEN 1075600 AND 1075649; |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- ä¸çº§èå |
| | | -- --------------------------------------------------------------- |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES |
| | | (1075500, 'è´¢å¡æ ¸ç®', '', 1, 4, 0, '/finance-core', 'ep:money', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | (1075600, 'è´¢å¡æ ¸ç®', '', 1, 4, 0, '/finance-core', 'ep:money', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- 页é¢èå (type=2) |
| | | -- --------------------------------------------------------------- |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES |
| | | (1075501, 'è®°è´¦åè¯', 'finance:voucher:query', 2, 1, 1075500, 'voucher', 'ep:document', 'erp/finance/voucher/index', 'FinVoucher', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075502, 'æ»è´¦', 'finance:ledger:query', 2, 2, 1075500, 'general-ledger', 'ep:notebook', 'erp/finance/ledger/general/index', 'FinGeneralLedger', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075503, 'æç»è´¦', 'finance:ledger:query', 2, 3, 1075500, 'detail-ledger', 'ep:list', 'erp/finance/ledger/detail/index', 'FinDetailLedger', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075504, 'ä¼è®¡ç§ç®', 'finance:account-subject:query', 2, 4, 1075500, 'subject', 'ep:collection-tag', 'erp/finance/subject/index', 'FinAccountSubject', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075505, 'åºå®èµäº§', 'finance:fixed-asset:query', 2, 5, 1075500, 'fixed-asset', 'ep:office-building', 'erp/finance/fixed-asset/index', 'FinFixedAsset', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075506, 'æ å½¢èµäº§', 'finance:intangible-asset:query', 2, 6, 1075500, 'intangible-asset','ep:medal', 'erp/finance/intangible-asset/index', 'FinIntangibleAsset', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075507, 'è´¢å¡æ¥è¡¨', 'finance:statistics:query', 2, 7, 1075500, 'statistics', 'ep:data-line', 'erp/finance/statistics/index', 'FinStatistics', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | (1075601, 'è®°è´¦åè¯', 'finance:voucher:query', 2, 1, 1075600, 'voucher', 'ep:document', 'erp/finance/voucher/index', 'FinVoucher', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075602, 'æ»è´¦', 'finance:ledger:query', 2, 2, 1075600, 'general-ledger', 'ep:notebook', 'erp/finance/ledger/general/index', 'FinGeneralLedger', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075603, 'æç»è´¦', 'finance:ledger:query', 2, 3, 1075600, 'detail-ledger', 'ep:list', 'erp/finance/ledger/detail/index', 'FinDetailLedger', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075604, 'ä¼è®¡ç§ç®', 'finance:account-subject:query', 2, 4, 1075600, 'subject', 'ep:collection-tag', 'erp/finance/subject/index', 'FinAccountSubject', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075605, 'åºå®èµäº§', 'finance:fixed-asset:query', 2, 5, 1075600, 'fixed-asset', 'ep:office-building', 'erp/finance/fixed-asset/index', 'FinFixedAsset', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075606, 'æ å½¢èµäº§', 'finance:intangible-asset:query', 2, 6, 1075600, 'intangible-asset','ep:medal', 'erp/finance/intangible-asset/index', 'FinIntangibleAsset', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075607, 'è´¢å¡æ¥è¡¨', 'finance:statistics:query', 2, 7, 1075600, 'statistics', 'ep:data-line', 'erp/finance/statistics/index', 'FinStatistics', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- æé®æé (type=3) |
| | | -- --------------------------------------------------------------- |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) VALUES |
| | | -- è®°è´¦åè¯ |
| | | (1075510, 'åè¯æ°å¢', 'finance:voucher:create', 3, 1, 1075501, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075511, 'åè¯ä¿®æ¹', 'finance:voucher:update', 3, 2, 1075501, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075512, 'åè¯å é¤', 'finance:voucher:delete', 3, 3, 1075501, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075513, 'åè¯ç¶æåæ´', 'finance:voucher:update-status', 3, 4, 1075501, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075514, 'åè¯å¯¼åº', 'finance:voucher:export', 3, 5, 1075501, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075610, 'åè¯æ°å¢', 'finance:voucher:create', 3, 1, 1075601, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075611, 'åè¯ä¿®æ¹', 'finance:voucher:update', 3, 2, 1075601, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075612, 'åè¯å é¤', 'finance:voucher:delete', 3, 3, 1075601, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075613, 'åè¯ç¶æåæ´', 'finance:voucher:update-status', 3, 4, 1075601, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075614, 'åè¯å¯¼åº', 'finance:voucher:export', 3, 5, 1075601, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- æ»è´¦ / æç»è´¦ï¼ä¸¤é¡µå
±ç¨ finance:ledger:queryï¼å¯¼åºæéåªå¨æ¤å¤æä¸æ¬¡ï¼è§æä»¶å¤´è¯´æ 3ï¼ |
| | | (1075520, '账簿导åº', 'finance:ledger:export', 3, 1, 1075502, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075620, '账簿导åº', 'finance:ledger:export', 3, 1, 1075602, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- ä¼è®¡ç§ç® |
| | | (1075521, 'ç§ç®æ°å¢', 'finance:account-subject:create',3, 1, 1075504, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075522, 'ç§ç®ä¿®æ¹', 'finance:account-subject:update',3, 2, 1075504, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075523, 'ç§ç®å é¤', 'finance:account-subject:delete',3, 3, 1075504, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075524, 'ç§ç®å¯¼åº', 'finance:account-subject:export',3, 4, 1075504, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075621, 'ç§ç®æ°å¢', 'finance:account-subject:create',3, 1, 1075604, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075622, 'ç§ç®ä¿®æ¹', 'finance:account-subject:update',3, 2, 1075604, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075623, 'ç§ç®å é¤', 'finance:account-subject:delete',3, 3, 1075604, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075624, 'ç§ç®å¯¼åº', 'finance:account-subject:export',3, 4, 1075604, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- åºå®èµäº§ |
| | | (1075530, 'èµäº§æ°å¢', 'finance:fixed-asset:create', 3, 1, 1075505, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075531, 'èµäº§ä¿®æ¹', 'finance:fixed-asset:update', 3, 2, 1075505, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075532, 'èµäº§å é¤', 'finance:fixed-asset:delete', 3, 3, 1075505, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075533, 'è®¡æææ§', 'finance:fixed-asset:depreciate',3, 4, 1075505, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075534, 'èµäº§å¯¼åº', 'finance:fixed-asset:export', 3, 5, 1075505, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075630, 'èµäº§æ°å¢', 'finance:fixed-asset:create', 3, 1, 1075605, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075631, 'èµäº§ä¿®æ¹', 'finance:fixed-asset:update', 3, 2, 1075605, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075632, 'èµäº§å é¤', 'finance:fixed-asset:delete', 3, 3, 1075605, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075633, 'è®¡æææ§', 'finance:fixed-asset:depreciate',3, 4, 1075605, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075634, 'èµäº§å¯¼åº', 'finance:fixed-asset:export', 3, 5, 1075605, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- æ å½¢èµäº§ |
| | | (1075540, 'èµäº§æ°å¢', 'finance:intangible-asset:create', 3, 1, 1075506, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075541, 'èµäº§ä¿®æ¹', 'finance:intangible-asset:update', 3, 2, 1075506, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075542, 'èµäº§å é¤', 'finance:intangible-asset:delete', 3, 3, 1075506, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075543, 'æ å½¢èµäº§æé', 'finance:intangible-asset:amortize', 3, 4, 1075506, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075544, 'èµäº§å¯¼åº', 'finance:intangible-asset:export', 3, 5, 1075506, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | (1075640, 'èµäº§æ°å¢', 'finance:intangible-asset:create', 3, 1, 1075606, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075641, 'èµäº§ä¿®æ¹', 'finance:intangible-asset:update', 3, 2, 1075606, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075642, 'èµäº§å é¤', 'finance:intangible-asset:delete', 3, 3, 1075606, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075643, 'æ å½¢èµäº§æé', 'finance:intangible-asset:amortize', 3, 4, 1075606, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075644, 'èµäº§å¯¼åº', 'finance:intangible-asset:export', 3, 5, 1075606, '', '', '', '', 0, b'1', b'0', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- è§è²ææï¼å¯éï¼ |
| | |
| | | -- ä¹å¯ç¨ä¸é¢çè¯å¥ç´æ¥ææï¼æ <roleId> æ¢æç®æ è§è² idï¼åèï¼163 è®¾å¤ / 164 è´¨é / 165 éå®ï¼ï¼ |
| | | -- |
| | | -- INSERT INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted) |
| | | -- SELECT 165, id, '1', NOW(), '1', NOW(), b'0' FROM system_menu WHERE id BETWEEN 1075500 AND 1075549; |
| | | -- SELECT 165, id, '1', NOW(), '1', NOW(), b'0' FROM system_menu WHERE id BETWEEN 1075600 AND 1075649; |
| | | -- --------------------------------------------------------------- |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- æ¢å¤åæ ERPãè´¢å¡ç®¡çã(id=2645) åæ |
| | | -- å
¶ç¶èåãERP ç³»ç»ã(id=2563) å·²åç¨ï¼å¯¼è´ ç»ç®è´¦æ·/仿¬¾å/æ¶æ¬¾å æ æ³æ¾ç¤ºï¼ |
| | | -- ç°æå°ãè´¢å¡æ ¸ç®ãä¸ä½ä¸ºäºçº§ç®å½ï¼æåº 8ï¼æå¨è´¢å¡æ¥è¡¨ä¹åï¼ã |
| | | -- --------------------------------------------------------------- |
| | | UPDATE system_menu SET parent_id = 1075600, sort = 8 WHERE id = 2645; |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- ç»åæ¬æ¥æãè´¢å¡ç®¡çã(2645) çè§è²è¡¥ææ°å¢çè´¢å¡æ ¸ç®èå |
| | | -- ï¼è¶
管ç±ä»£ç ç´æ¥è¿åå
¨é¨èåï¼ä¸åå½±åï¼ |
| | | -- --------------------------------------------------------------- |
| | | INSERT INTO system_role_menu (role_id, menu_id, creator, create_time, updater, update_time, deleted) |
| | | SELECT DISTINCT rm.role_id, m.id, '1', NOW(), '1', NOW(), b'0' |
| | | FROM system_menu m |
| | | JOIN system_role_menu rm ON rm.menu_id = 2645 AND rm.deleted = b'0' |
| | | WHERE m.id BETWEEN 1075600 AND 1075649 |
| | | AND NOT EXISTS (SELECT 1 |
| | | FROM system_role_menu x |
| | | WHERE x.role_id = rm.role_id |
| | | AND x.menu_id = m.id |
| | | AND x.deleted = b'0'); |
| | | |
| | | -- --------------------------------------------------------------- |
| | | -- åæ»èæ¬ |
| | | -- DELETE FROM system_menu WHERE id BETWEEN 1075500 AND 1075549; |
| | | -- DELETE FROM system_role_menu WHERE menu_id BETWEEN 1075500 AND 1075549; |
| | | -- UPDATE system_menu SET parent_id = 2563, sort = 50 WHERE id = 2645; |
| | | -- DELETE FROM system_menu WHERE id BETWEEN 1075600 AND 1075649; |
| | | -- DELETE FROM system_role_menu WHERE menu_id BETWEEN 1075600 AND 1075649; |
| | | -- --------------------------------------------------------------- |
| | |
| | | `net_value` decimal(24,6) NOT NULL DEFAULT 0 COMMENT 'åå¼ = åå¼ - ç´¯è®¡ææ§', |
| | | `location` varchar(255) NULL DEFAULT '' COMMENT 'åæ¾å°ç¹', |
| | | `department` varchar(128) NULL DEFAULT '' COMMENT '使ç¨é¨é¨', |
| | | `department_id` bigint NULL DEFAULT NULL COMMENT '使ç¨é¨é¨ç¼å·', |
| | | `keeper` varchar(64) NULL DEFAULT '' COMMENT 'ä¿ç®¡äºº', |
| | | `keeper_id` bigint NULL DEFAULT NULL COMMENT 'ä¿ç®¡äººç¨æ·ç¼å·', |
| | | `status` tinyint NOT NULL DEFAULT 1 COMMENT 'ç¶æï¼1å¨ç¨ 2é²ç½® 3ç»´ä¿®ä¸ 4å·²æ¥åº', |
| | | `remark` varchar(500) NULL DEFAULT '' COMMENT '夿³¨', |
| | | `creator` varchar(64) NULL DEFAULT '' COMMENT 'å建è
', |
| | |
| | | ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = 'æ å½¢èµäº§'; |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 1.6 已建表çè¡¥åï¼å
¼å®¹æ©æèæ¬å建ã缺å°é¨é¨/ä¿ç®¡äººç¼å·çåºï¼ |
| | | -- 说æï¼MySQL 䏿¯æ ALTER TABLE ... ADD COLUMN IF NOT EXISTSï¼ç¨ information_schema 夿 |
| | | -- ------------------------------------------------------------------------------------- |
| | | SET @col_exists = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'fin_fixed_asset' AND column_name = 'department_id'); |
| | | SET @ddl = IF(@col_exists = 0, |
| | | 'ALTER TABLE `fin_fixed_asset` ADD COLUMN `department_id` bigint NULL DEFAULT NULL COMMENT ''使ç¨é¨é¨ç¼å·'' AFTER `department`', |
| | | 'SELECT 1'); |
| | | PREPARE stmt_fin_fixed_asset_department_id FROM @ddl; |
| | | EXECUTE stmt_fin_fixed_asset_department_id; |
| | | DEALLOCATE PREPARE stmt_fin_fixed_asset_department_id; |
| | | |
| | | SET @col_exists = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'fin_fixed_asset' AND column_name = 'keeper_id'); |
| | | SET @ddl = IF(@col_exists = 0, |
| | | 'ALTER TABLE `fin_fixed_asset` ADD COLUMN `keeper_id` bigint NULL DEFAULT NULL COMMENT ''ä¿ç®¡äººç¨æ·ç¼å·'' AFTER `keeper`', |
| | | 'SELECT 1'); |
| | | PREPARE stmt_fin_fixed_asset_keeper_id FROM @ddl; |
| | | EXECUTE stmt_fin_fixed_asset_keeper_id; |
| | | DEALLOCATE PREPARE stmt_fin_fixed_asset_keeper_id; |
| | | |
| | | -- ------------------------------------------------------------------------------------- |
| | | -- 2. åå
¸ |
| | | -- ------------------------------------------------------------------------------------- |
| | | INSERT INTO `system_dict_type` (`name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_supplier_apply` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç³è¯·ID', |
| | | `apply_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ç³è¯·ç¼å·', |
| | | `supplier_id` bigint DEFAULT NULL COMMENT 'ä¾åºåID', |
| | | `erp_supplier_id` bigint DEFAULT NULL COMMENT 'å
³èERPä¾åºåID', |
| | | `supplier_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ä¾åºååç§°', |
| | | `supplier_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ä¾åºåç±»å', |
| | | `company_nature` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ä¼ä¸æ§è´¨', |
| | | `registered_capital` decimal(24,6) DEFAULT NULL COMMENT '注åèµéï¼ä¸å
ï¼', |
| | | `business_license_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è¥ä¸æ§ç
§ç¼å·', |
| | | `tax_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ç¨å·', |
| | | `address` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'å
¬å¸å°å', |
| | | `bank_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '弿·é¶è¡', |
| | | `bank_account` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'é¶è¡è´¦å·', |
| | | `contact_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è系人', |
| | | `contact_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'èç³»çµè¯', |
| | | `contact_email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'é®ç®±', |
| | | `apply_user_id` bigint DEFAULT NULL COMMENT 'ç³è¯·äººID', |
| | | `apply_user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ç³è¯·äººå§å', |
| | | `apply_time` datetime DEFAULT NULL COMMENT 'ç³è¯·æ¶é´', |
| | | `apply_status` int NOT NULL DEFAULT '0' COMMENT 'å®¡æ ¸ç¶æ', |
| | | `process_instance_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'BPM æµç¨å®ä¾ç¼å·', |
| | | `purchase_reviewer_id` bigint DEFAULT NULL COMMENT 'éè´å®¡æ ¸äººID', |
| | | `purchase_review_time` datetime DEFAULT NULL COMMENT 'éè´å®¡æ ¸æ¶é´', |
| | | `purchase_review_opinion` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'éè´å®¡æ ¸æè§', |
| | | `quality_reviewer_id` bigint DEFAULT NULL COMMENT 'è´¨éå®¡æ ¸äººID', |
| | | `quality_review_time` datetime DEFAULT NULL COMMENT 'è´¨éå®¡æ ¸æ¶é´', |
| | | `quality_review_opinion` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è´¨éå®¡æ ¸æè§', |
| | | `finance_reviewer_id` bigint DEFAULT NULL COMMENT 'è´¢å¡å®¡æ ¸äººID', |
| | | `finance_review_time` datetime DEFAULT NULL COMMENT 'è´¢å¡å®¡æ ¸æ¶é´', |
| | | `finance_review_opinion` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è´¢å¡å®¡æ ¸æè§', |
| | | `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_apply_no` (`apply_no`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_apply_status` (`apply_status`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ä¾åºååå
¥ç³è¯·è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_supplier_certificate` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'è¯ä¹¦ID', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `certificate_type` int NOT NULL COMMENT 'è¯ä¹¦ç±»å', |
| | | `certificate_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'è¯ä¹¦åç§°', |
| | | `certificate_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è¯ä¹¦ç¼å·', |
| | | `file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æä»¶åç§°', |
| | | `file_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æä»¶å°å', |
| | | `issuing_authority` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'é¢åæºæ', |
| | | `valid_start_date` date DEFAULT NULL COMMENT 'ææå¼å§æ¥æ', |
| | | `valid_end_date` date DEFAULT NULL COMMENT 'ææç»ææ¥æ', |
| | | `status` int NOT NULL DEFAULT '0' COMMENT 'ç¶æ', |
| | | `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_certificate_type` (`certificate_type`) USING BTREE, |
| | | KEY `idx_valid_end_date` (`valid_end_date`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ä¾åºåèµè´¨è¯ä¹¦è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_supplier_evaluation` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'è¯ä»·ID', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `evaluation_period` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'è¯ä»·å¨æ', |
| | | `quality_score` decimal(5,2) DEFAULT NULL COMMENT 'è´¨éè¯å', |
| | | `quality_pass_rate` decimal(5,2) DEFAULT NULL COMMENT 'æ¥æåæ ¼ç', |
| | | `quality_defect_count` int DEFAULT '0' COMMENT 'ä¸è¯æ¬¡æ°', |
| | | `delivery_score` decimal(5,2) DEFAULT NULL COMMENT '交ä»è¯å', |
| | | `delivery_on_time_rate` decimal(5,2) DEFAULT NULL COMMENT 'åæ¶äº¤ä»ç', |
| | | `delivery_delay_count` int DEFAULT '0' COMMENT 'å»¶è¿æ¬¡æ°', |
| | | `price_score` decimal(5,2) DEFAULT NULL COMMENT 'ä»·æ ¼è¯å', |
| | | `service_score` decimal(5,2) DEFAULT NULL COMMENT 'æå¡è¯å', |
| | | `service_response_speed` int DEFAULT NULL COMMENT 'ååºé度è¯å', |
| | | `composite_score` decimal(5,2) DEFAULT NULL COMMENT '综åè¯å', |
| | | `evaluation_level` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è¯ä»·ç级', |
| | | `evaluator_id` bigint DEFAULT NULL COMMENT 'è¯ä»·äººID', |
| | | `evaluation_time` datetime DEFAULT NULL COMMENT 'è¯ä»·æ¶é´', |
| | | `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_evaluation_period` (`evaluation_period`) USING BTREE, |
| | | KEY `idx_composite_score` (`composite_score`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ä¾åºå绩æè¯ä»·è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_tender_project` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ææ é¡¹ç®ID', |
| | | `tender_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ææ ç¼å·', |
| | | `tender_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ææ åç§°', |
| | | `tender_type` int NOT NULL COMMENT 'ææ ç±»å', |
| | | `purchase_org` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'éè´ç»ç»', |
| | | `project_leader_id` bigint DEFAULT NULL COMMENT '项ç®è´è´£äººID', |
| | | `project_leader_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '项ç®è´è´£äººå§å', |
| | | `tender_status` int NOT NULL DEFAULT '0' COMMENT 'ææ ç¶æ', |
| | | `bidding_mode` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'FULL' COMMENT 'æææ 模å¼: FULL-宿´ç, SIMPLE-ç®æç', |
| | | `budget_amount` decimal(24,6) DEFAULT NULL COMMENT 'é¢ç®éé¢', |
| | | `start_time` datetime DEFAULT NULL COMMENT 'å¼å§æ¶é´', |
| | | `end_time` datetime DEFAULT NULL COMMENT 'æªæ¢æ¶é´', |
| | | `bid_open_time` datetime DEFAULT NULL COMMENT 'é¢è®¡å¼æ æ¶é´', |
| | | `tender_desc` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'ææ è¯´æ', |
| | | `qualification_requirements` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'èµè´¨è¦æ±', |
| | | `purchase_request_id` bigint DEFAULT NULL COMMENT 'å
³èéè´ç³è¯·ID', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_tender_no` (`tender_no`) USING BTREE, |
| | | KEY `idx_tender_status` (`tender_status`) USING BTREE, |
| | | KEY `idx_purchase_request_id` (`purchase_request_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ææ é¡¹ç®è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_tender_material` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç©ææç»ID', |
| | | `tender_project_id` bigint NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | `product_id` bigint DEFAULT NULL COMMENT 'ç©æID', |
| | | `product_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ç©æç¼ç ', |
| | | `product_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ç©æåç§°', |
| | | `product_spec` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è§æ ¼åå·', |
| | | `quantity` decimal(24,6) NOT NULL COMMENT 'æ°é', |
| | | `unit` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'åä½', |
| | | `tech_requirement` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT 'ææ¯è¦æ±', |
| | | `estimated_price` decimal(24,6) DEFAULT NULL COMMENT 'é¢ä¼°åä»·', |
| | | `sort` int NOT NULL DEFAULT '0' COMMENT 'æåº', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_tender_project_id` (`tender_project_id`) USING BTREE, |
| | | KEY `idx_product_code` (`product_code`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ææ ç©ææç»è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_tender_bid` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ææ ID', |
| | | `tender_project_id` bigint NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `bid_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ææ ç¼å·', |
| | | `bid_status` int NOT NULL DEFAULT '0' COMMENT 'ææ ç¶æ', |
| | | `bid_time` datetime DEFAULT NULL COMMENT 'ææ æ¶é´', |
| | | `bid_total_amount` decimal(24,6) DEFAULT NULL COMMENT 'ææ æ»éé¢', |
| | | `bid_file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ææ æä»¶åç§°', |
| | | `bid_file_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ææ æä»¶å°å', |
| | | `withdraw_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æ¤æ åå ', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_bid_no` (`bid_no`) USING BTREE, |
| | | KEY `idx_tender_project_id` (`tender_project_id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_bid_status` (`bid_status`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ææ è®°å½è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_supplier_quote` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'æ¥ä»·ID', |
| | | `tender_project_id` bigint NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `bid_id` bigint DEFAULT NULL COMMENT 'ææ è®°å½ID', |
| | | `tender_material_id` bigint NOT NULL COMMENT 'ææ ç©æID', |
| | | `quote_price` decimal(24,6) NOT NULL COMMENT 'æ¥ä»·ä»·æ ¼', |
| | | `tax_rate` decimal(5,2) DEFAULT NULL COMMENT 'ç¨ç(%)', |
| | | `delivery_cycle` int DEFAULT NULL COMMENT 'äº¤è´§å¨æï¼å¤©ï¼', |
| | | `payment_terms` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '仿¬¾æ¡ä»¶', |
| | | `warranty_period` int DEFAULT NULL COMMENT 'è´¨ä¿æï¼æï¼', |
| | | `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_tender_project_id` (`tender_project_id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_bid_id` (`bid_id`) USING BTREE, |
| | | KEY `idx_tender_material_id` (`tender_material_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ä¾åºåæ¥ä»·æç»è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_bid_open` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '弿 ID', |
| | | `tender_project_id` bigint NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | `open_time` datetime NOT NULL COMMENT '弿 æ¶é´', |
| | | `open_person_id` bigint DEFAULT NULL COMMENT '弿 人åID', |
| | | `open_person_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '弿 人åå§å', |
| | | `open_record` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '弿 è®°å½', |
| | | `attachment_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'éä»¶åç§°', |
| | | `attachment_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'éä»¶å°å', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_tender_project_id` (`tender_project_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='弿 è®°å½è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_bid_evaluation` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'è¯æ ID', |
| | | `tender_project_id` bigint NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `bid_id` bigint NOT NULL COMMENT 'ææ è®°å½ID', |
| | | `price_score` decimal(5,2) DEFAULT NULL COMMENT 'ä»·æ ¼è¯å', |
| | | `tech_score` decimal(5,2) DEFAULT NULL COMMENT 'ææ¯è¯å', |
| | | `delivery_score` decimal(5,2) DEFAULT NULL COMMENT '交ä»è¯å', |
| | | `service_score` decimal(5,2) DEFAULT NULL COMMENT 'æå¡è¯å', |
| | | `composite_score` decimal(5,2) DEFAULT NULL COMMENT '综åè¯å', |
| | | `ranking` int DEFAULT NULL COMMENT 'æå', |
| | | `evaluator_id` bigint DEFAULT NULL COMMENT 'è¯æ 人ID', |
| | | `evaluator_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è¯æ 人å§å', |
| | | `evaluation_opinion` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è¯æ æè§', |
| | | `evaluation_time` datetime DEFAULT NULL COMMENT 'è¯æ æ¶é´', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_tender_project_id` (`tender_project_id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_bid_id` (`bid_id`) USING BTREE, |
| | | KEY `idx_ranking` (`ranking`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='è¯æ è®°å½è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_bid_award` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '宿 ID', |
| | | `tender_project_id` bigint NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | `supplier_id` bigint NOT NULL COMMENT '䏿 ä¾åºåID', |
| | | `bid_id` bigint NOT NULL COMMENT '䏿 ææ ID', |
| | | `award_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '䏿 éç¥ä¹¦ç¼å·', |
| | | `award_status` int NOT NULL DEFAULT '0' COMMENT '宿 ç¶æ', |
| | | `award_amount` decimal(24,6) NOT NULL COMMENT '䏿 éé¢', |
| | | `award_time` datetime DEFAULT NULL COMMENT '宿 æ¶é´', |
| | | `notice_file_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '䏿 éç¥ä¹¦æä»¶å', |
| | | `notice_file_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '䏿 éç¥ä¹¦æä»¶å°å', |
| | | `purchase_order_id` bigint DEFAULT NULL COMMENT 'å
³èçæçéè´è®¢åID', |
| | | `purchase_order_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'å
³èçæçéè´è®¢åå·', |
| | | `approver_id` bigint DEFAULT NULL COMMENT '审æ¹äººID', |
| | | `approval_time` datetime DEFAULT NULL COMMENT 'å®¡æ¹æ¶é´', |
| | | `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_award_no` (`award_no`) USING BTREE, |
| | | KEY `idx_tender_project_id` (`tender_project_id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_purchase_order_id` (`purchase_order_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='宿 è®°å½è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_tender_config` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'é
ç½®ID', |
| | | `default_bidding_mode` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'FULL' COMMENT 'é»è®¤æææ 模å¼: FULL-宿´ç, SIMPLE-ç®æç', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='SRMæææ é
置表'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_delivery_plan` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '交货计åID', |
| | | `collaboration_id` bigint NOT NULL COMMENT 'éè´ååID', |
| | | `order_id` bigint NOT NULL COMMENT 'éè´è®¢åID', |
| | | `order_item_id` bigint DEFAULT NULL COMMENT 'éè´è®¢å项ID', |
| | | `product_id` bigint DEFAULT NULL COMMENT 'ç©æID', |
| | | `product_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ç©æåç§°', |
| | | `planned_quantity` decimal(24,6) NOT NULL COMMENT 'è®¡åæ°é', |
| | | `actual_quantity` decimal(24,6) DEFAULT NULL COMMENT 'å®é
æ°é', |
| | | `planned_delivery_date` date NOT NULL COMMENT '计åäº¤è´§æ¥æ', |
| | | `actual_delivery_date` date DEFAULT NULL COMMENT 'å®é
äº¤è´§æ¥æ', |
| | | `delivery_status` int NOT NULL DEFAULT '0' COMMENT 'äº¤è´§ç¶æ', |
| | | `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_collaboration_id` (`collaboration_id`) USING BTREE, |
| | | KEY `idx_order_id` (`order_id`) USING BTREE, |
| | | KEY `idx_delivery_status` (`delivery_status`) USING BTREE, |
| | | KEY `idx_planned_delivery_date` (`planned_delivery_date`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='交货计å表'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| | | /*!40101 SET @saved_cs_client = @@character_set_client */; |
| | | /*!50503 SET character_set_client = utf8mb4 */; |
| | | CREATE TABLE `srm_purchase_collaboration` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ååID', |
| | | `order_id` bigint NOT NULL COMMENT 'éè´è®¢åID', |
| | | `order_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'éè´è®¢åå·', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `collaboration_status` int NOT NULL DEFAULT '0' COMMENT 'ååç¶æ', |
| | | `confirm_time` datetime DEFAULT NULL COMMENT '确认æ¶é´', |
| | | `confirm_user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '确认人', |
| | | `reject_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æç»åå ', |
| | | `planned_delivery_time` datetime DEFAULT NULL COMMENT 'é¢è®¡äº¤ä»æ¶é´', |
| | | `actual_delivery_time` datetime DEFAULT NULL COMMENT 'å®é
äº¤ä»æ¶é´', |
| | | `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_order_id` (`order_id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_collaboration_status` (`collaboration_status`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='éè´ååè®°å½è¡¨'; |
| | | /*!40101 SET character_set_client = @saved_cs_client */; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================================================= |
| | | -- éè´ç®¡ç / ä¾åºååéæè¿ç§»èæ¬ |
| | | -- æ¥æï¼2026-11-03 |
| | | -- ç®æ åºï¼mom-ntshï¼36.213.150.237:10000ï¼ |
| | | -- |
| | | -- å
å®¹ï¼ |
| | | -- 1. æ°å»ºä¾åºåé¶è¡è´¦æ·è¡¨ srm_supplier_bank |
| | | -- 2. æ°å»ºè¯¢ä»·æ¯ä»·ç¸å
³è¡¨ srm_inquiry / srm_inquiry_item / srm_inquiry_supplier |
| | | -- / srm_inquiry_quote / srm_inquiry_order |
| | | -- 3. æ°å»ºææ ä¿è¯éå°è´¦ srm_bid_bond |
| | | -- 4. æ§ä¾åºåæå¹³è系人/é¶è¡å段è¿ç§»ä¸ºé»è®¤è系人ä¸é»è®¤é¶è¡ |
| | | -- 5. å é¤ä¾åºååå
¥/èµè´¨/绩æ/æææ /ç»è®¡èåï¼æ°å¢è¯¢ä»·æ¯ä»·/ææ ä¿è¯é/ä¾åºå徿¥èå |
| | | -- 6. 忥æ°èåææç»å·²æ¥æâä¾åºåæ¡£æ¡âçè§è² |
| | | -- 7. DROP å·²åºå¼ç 13 å¼ ç©ºè¡¨ï¼ç»æå¤ä»½è§åç®å½ |
| | | -- srm_legacy_tables_backup_20261103.sqlï¼ |
| | | -- |
| | | -- 说æï¼ |
| | | -- - èæ¬ä¸ä½¿ç¨ tenant_idï¼é¡¹ç®éå¤ç§æ·ï¼ã |
| | | -- - å»ºè¡¨ä½¿ç¨ CREATE TABLE IF NOT EXISTSï¼èå使ç¨âå
å åæâï¼å¯é夿§è¡ã |
| | | -- - DROP ç 13 å¼ è¡¨å¨æ§è¡å已确认å为 0 è¡ï¼æ§è¡åä¸å¯æ¢å¤ã |
| | | -- ============================================================================= |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- ããè¡¥é½ä¾èµå段ï¼ä¾åºå徿¥æ¥è¯¢ erp_purchase_invoice éè¦ï¼ä¸ |
| | | -- 20261027_business_requirements.sql ä¸çå®ä¹ä¸è´ï¼å·²åå¨åè·³è¿ï¼ |
| | | -- ----------------------------------------------------------------------------- |
| | | |
| | | SET @has_arrival_notice_id = ( |
| | | SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'erp_purchase_invoice' |
| | | AND column_name = 'arrival_notice_id' |
| | | ); |
| | | SET @sql = IF(@has_arrival_notice_id = 0, |
| | | 'ALTER TABLE `erp_purchase_invoice` ADD COLUMN `arrival_notice_id` BIGINT NULL COMMENT ''å
³èå
¥åºå'' AFTER `purchase_order_id`', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; |
| | | EXECUTE stmt; |
| | | DEALLOCATE PREPARE stmt; |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- ä¸ãæ°å»ºè¡¨ |
| | | -- ----------------------------------------------------------------------------- |
| | | |
| | | CREATE TABLE IF NOT EXISTS `srm_supplier_bank` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'é¶è¡è´¦æ·ID', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `bank_name` varchar(128) NOT NULL COMMENT '弿·è¡', |
| | | `bank_account` varchar(64) NOT NULL COMMENT 'é¶è¡è´¦å·', |
| | | `bank_no` varchar(64) DEFAULT NULL COMMENT 'é¶è¡è¡å·', |
| | | `bank_address` varchar(255) DEFAULT NULL COMMENT '弿·è¡å°å', |
| | | `is_default` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦é»è®¤é¶è¡è´¦æ·', |
| | | `sort` int NOT NULL DEFAULT '0' COMMENT 'æåº', |
| | | `remark` varchar(500) DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='ä¾åºåé¶è¡è´¦æ·è¡¨'; |
| | | |
| | | CREATE TABLE IF NOT EXISTS `srm_inquiry` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '询价åID', |
| | | `no` varchar(32) NOT NULL COMMENT '询价åå·', |
| | | `title` varchar(128) NOT NULL COMMENT '询价æ é¢', |
| | | `status` tinyint NOT NULL DEFAULT '0' COMMENT 'ç¶æï¼0è稿 10è¯¢ä»·ä¸ 20已转订å 30已忶', |
| | | `inquiry_date` date DEFAULT NULL COMMENT 'è¯¢ä»·æ¥æ', |
| | | `deadline` date DEFAULT NULL COMMENT 'æ¥ä»·æªæ¢æ¥æ', |
| | | `purchaser_user_id` bigint DEFAULT NULL COMMENT 'éè´åç¨æ·ID', |
| | | `remark` varchar(500) DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_no` (`no`) USING BTREE, |
| | | KEY `idx_status` (`status`) USING BTREE, |
| | | KEY `idx_inquiry_date` (`inquiry_date`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='SRM询价å'; |
| | | |
| | | CREATE TABLE IF NOT EXISTS `srm_inquiry_item` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '询价产åè¡ID', |
| | | `inquiry_id` bigint NOT NULL COMMENT '询价åID', |
| | | `product_id` bigint DEFAULT NULL COMMENT '产åID', |
| | | `product_unit_id` bigint DEFAULT NULL COMMENT '产ååä½ID', |
| | | `product_code` varchar(64) DEFAULT NULL COMMENT '产åç¼ç ', |
| | | `product_name` varchar(255) DEFAULT NULL COMMENT '产ååç§°', |
| | | `product_spec` varchar(200) DEFAULT NULL COMMENT 'è§æ ¼åå·', |
| | | `unit_name` varchar(50) DEFAULT NULL COMMENT 'åä½åç§°', |
| | | `quantity` decimal(24,6) NOT NULL DEFAULT '0.000000' COMMENT 'éè´æ°é', |
| | | `estimated_price` decimal(24,6) DEFAULT NULL COMMENT 'é¢ä¼°åä»·', |
| | | `selected_supplier_id` bigint DEFAULT NULL COMMENT '䏿 ä¾åºåID', |
| | | `selected_quote_id` bigint DEFAULT NULL COMMENT '䏿 æ¥ä»·ID', |
| | | `selected_price` decimal(24,6) DEFAULT NULL COMMENT '䏿 åä»·', |
| | | `remark` varchar(500) DEFAULT NULL COMMENT '夿³¨', |
| | | `sort` int NOT NULL DEFAULT '0' COMMENT 'æåº', |
| | | `creator` varchar(64) DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_inquiry_id` (`inquiry_id`) USING BTREE, |
| | | KEY `idx_product_id` (`product_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='SRM询价å产åè¡'; |
| | | |
| | | CREATE TABLE IF NOT EXISTS `srm_inquiry_supplier` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '询价åä¸ä¾åºåID', |
| | | `inquiry_id` bigint NOT NULL COMMENT '询价åID', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `quote_status` tinyint NOT NULL DEFAULT '0' COMMENT 'æ¥ä»·ç¶æï¼0æªæ¥ä»· 10å·²æ¥ä»·', |
| | | `quote_time` datetime DEFAULT NULL COMMENT 'æè¿æ¥ä»·æ¶é´', |
| | | `remark` varchar(500) DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_inquiry_id` (`inquiry_id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='SRM询价åä¸ä¾åºå'; |
| | | |
| | | CREATE TABLE IF NOT EXISTS `srm_inquiry_quote` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '询价æ¥ä»·ID', |
| | | `inquiry_id` bigint NOT NULL COMMENT '询价åID', |
| | | `inquiry_item_id` bigint NOT NULL COMMENT '询价产åè¡ID', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `price` decimal(24,6) NOT NULL COMMENT 'æ¥ä»·åä»·', |
| | | `tax_rate` decimal(24,6) DEFAULT NULL COMMENT 'ç¨çï¼%ï¼', |
| | | `delivery_cycle` int DEFAULT NULL COMMENT 'äº¤è´§å¨æï¼å¤©ï¼', |
| | | `payment_terms` varchar(128) DEFAULT NULL COMMENT '仿¬¾æ¡ä»¶', |
| | | `remark` varchar(500) DEFAULT NULL COMMENT '夿³¨', |
| | | `is_selected` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦ä¸æ æ¥ä»·', |
| | | `creator` varchar(64) DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_inquiry_id` (`inquiry_id`) USING BTREE, |
| | | KEY `idx_inquiry_item_id` (`inquiry_item_id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='SRM询价æ¥ä»·æç»'; |
| | | |
| | | CREATE TABLE IF NOT EXISTS `srm_inquiry_order` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT '询价转订åè®°å½ID', |
| | | `inquiry_id` bigint NOT NULL COMMENT '询价åID', |
| | | `supplier_id` bigint NOT NULL COMMENT '䏿 ä¾åºåID', |
| | | `purchase_order_id` bigint DEFAULT NULL COMMENT 'çæçéè´è®¢åID', |
| | | `purchase_order_no` varchar(64) DEFAULT NULL COMMENT 'çæçéè´è®¢åå·', |
| | | `creator` varchar(64) DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | KEY `idx_inquiry_id` (`inquiry_id`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_purchase_order_id` (`purchase_order_id`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='SRM询价转éè´è®¢åè®°å½'; |
| | | |
| | | CREATE TABLE IF NOT EXISTS `srm_bid_bond` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ææ ä¿è¯éID', |
| | | `no` varchar(32) NOT NULL COMMENT 'ä¿è¯éåå·', |
| | | `supplier_id` bigint NOT NULL COMMENT 'ä¾åºåID', |
| | | `project_name` varchar(255) DEFAULT NULL COMMENT '项ç®åç§°', |
| | | `inquiry_id` bigint DEFAULT NULL COMMENT 'å
³è询价åID', |
| | | `purchase_order_id` bigint DEFAULT NULL COMMENT 'å
³èéè´è®¢åID', |
| | | `bond_amount` decimal(24,6) NOT NULL DEFAULT '0.000000' COMMENT 'ä¿è¯ééé¢', |
| | | `pay_date` date DEFAULT NULL COMMENT 'ç¼´çº³æ¥æ', |
| | | `won` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦ä¸æ ', |
| | | `refund_status` tinyint NOT NULL DEFAULT '0' COMMENT 'éåç¶æï¼0æªéå 1é¨åéå 2å·²éå 3æ ééå', |
| | | `refund_amount` decimal(24,6) DEFAULT NULL COMMENT 'éåéé¢', |
| | | `refund_date` date DEFAULT NULL COMMENT 'é忥æ', |
| | | `remark` varchar(500) DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) DEFAULT '' COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (`id`) USING BTREE, |
| | | UNIQUE KEY `uk_no` (`no`) USING BTREE, |
| | | KEY `idx_supplier_id` (`supplier_id`) USING BTREE, |
| | | KEY `idx_inquiry_id` (`inquiry_id`) USING BTREE, |
| | | KEY `idx_refund_status` (`refund_status`) USING BTREE |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='SRMææ ä¿è¯éå°è´¦'; |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- äºãæ§ä¾åºåæå¹³å段è¿ç§»ä¸ºé»è®¤è系人 / é»è®¤é¶è¡ |
| | | -- ä»
å¨å¯¹åºåè¡¨è¿æ²¡ææ°æ®æ¶è¡¥ä¸æ¡ï¼é¿å
é夿§è¡äº§çéå¤è¡ã |
| | | -- ----------------------------------------------------------------------------- |
| | | |
| | | INSERT INTO `srm_supplier_contact` |
| | | (`supplier_id`, `name`, `mobile`, `email`, `is_default`, `sort`, `creator`, `updater`) |
| | | SELECT s.`id`, TRIM(s.`contact_name`), s.`contact_mobile`, s.`contact_email`, b'1', 0, 'system', 'system' |
| | | FROM `srm_supplier` s |
| | | WHERE s.`deleted` = b'0' |
| | | AND s.`contact_name` IS NOT NULL |
| | | AND TRIM(s.`contact_name`) <> '' |
| | | AND NOT EXISTS ( |
| | | SELECT 1 FROM `srm_supplier_contact` c |
| | | WHERE c.`supplier_id` = s.`id` AND c.`deleted` = b'0' |
| | | ); |
| | | |
| | | INSERT INTO `srm_supplier_bank` |
| | | (`supplier_id`, `bank_name`, `bank_account`, `is_default`, `sort`, `creator`, `updater`) |
| | | SELECT s.`id`, TRIM(s.`bank_name`), TRIM(s.`bank_account`), b'1', 0, 'system', 'system' |
| | | FROM `srm_supplier` s |
| | | WHERE s.`deleted` = b'0' |
| | | AND s.`bank_name` IS NOT NULL |
| | | AND TRIM(s.`bank_name`) <> '' |
| | | AND s.`bank_account` IS NOT NULL |
| | | AND TRIM(s.`bank_account`) <> '' |
| | | AND NOT EXISTS ( |
| | | SELECT 1 FROM `srm_supplier_bank` b |
| | | WHERE b.`supplier_id` = s.`id` AND b.`deleted` = b'0' |
| | | ); |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- ä¸ãèåè°æ´ |
| | | -- ----------------------------------------------------------------------------- |
| | | |
| | | -- 3.1 å 餿§ SRM åèåï¼åå
¥/èµè´¨/绩æ/æææ /ç»è®¡ï¼åå
¶æé®ï¼å¹¶ç§»é¤ SRM ç®å½ |
| | | -- ä¾åºåæ¡£æ¡/询价æ¯ä»·/ææ ä¿è¯é ç»ä¸æå°éè´ç®¡çæ ¹èå(2602) ä¸ |
| | | DELETE FROM `system_role_menu` |
| | | WHERE `menu_id` IN ( |
| | | SELECT `id` FROM ( |
| | | SELECT `id` FROM `system_menu` |
| | | WHERE `id` IN (602524, 602530, 602535, 602540, 602545, 602569, |
| | | 602612, 602613, 602614, 1080070, 1080071) |
| | | OR `parent_id` IN (602530, 602535, 602540, 602545, 602569, |
| | | 602612, 602613, 602614, 1080070, 1080071) |
| | | ) t |
| | | ); |
| | | |
| | | DELETE FROM `system_menu` |
| | | WHERE `id` IN ( |
| | | SELECT `id` FROM ( |
| | | SELECT `id` FROM `system_menu` |
| | | WHERE `id` IN (602524, 602530, 602535, 602540, 602545, 602569, |
| | | 602612, 602613, 602614, 1080070, 1080071) |
| | | OR `parent_id` IN (602530, 602535, 602540, 602545, 602569, |
| | | 602612, 602613, 602614, 1080070, 1080071) |
| | | ) t |
| | | ); |
| | | |
| | | -- 3.2 æ°èåå
å åæï¼ä¿è¯å¯é夿§è¡ï¼602620-602641 ä¸ºç©ºå·æ®µï¼ |
| | | DELETE FROM `system_role_menu` WHERE `menu_id` BETWEEN 602620 AND 602641; |
| | | DELETE FROM `system_menu` WHERE `id` BETWEEN 602620 AND 602641; |
| | | |
| | | INSERT INTO `system_menu` |
| | | (`id`, `name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`) |
| | | VALUES |
| | | -- 询价æ¯ä»· |
| | | (602620, '询价æ¯ä»·', '', 2, 2, 2602, 'inquiry', 'ep:search', 'srm/inquiry/index', 'SrmInquiry', 0), |
| | | (602621, '询价æ¥è¯¢', 'srm:inquiry:query', 3, 1, 602620, '', '', '', '', 0), |
| | | (602622, '询价å建', 'srm:inquiry:create', 3, 2, 602620, '', '', '', '', 0), |
| | | (602623, 'è¯¢ä»·æ´æ°', 'srm:inquiry:update', 3, 3, 602620, '', '', '', '', 0), |
| | | (602624, '询价å é¤', 'srm:inquiry:delete', 3, 4, 602620, '', '', '', '', 0), |
| | | (602625, '询价确认转订å', 'srm:inquiry:confirm', 3, 5, 602620, '', '', '', '', 0), |
| | | (602626, '询价å½å
¥æ¥ä»·', 'srm:inquiry:quote', 3, 6, 602620, '', '', '', '', 0), |
| | | -- ææ ä¿è¯é |
| | | (602630, 'ææ ä¿è¯é', '', 2, 3, 2602, 'bid-bond', 'ep:money', 'srm/bidBond/index', 'SrmBidBond', 0), |
| | | (602631, 'ä¿è¯éæ¥è¯¢', 'srm:bid-bond:query', 3, 1, 602630, '', '', '', '', 0), |
| | | (602632, 'ä¿è¯éå建', 'srm:bid-bond:create', 3, 2, 602630, '', '', '', '', 0), |
| | | (602633, 'ä¿è¯éæ´æ°', 'srm:bid-bond:update', 3, 3, 602630, '', '', '', '', 0), |
| | | (602634, 'ä¿è¯éå é¤', 'srm:bid-bond:delete', 3, 4, 602630, '', '', '', '', 0), |
| | | -- ä¾åºå徿¥ï¼æå¨éè´ç®¡çæ ¹ä¸ï¼ |
| | | (602640, 'ä¾åºå徿¥', '', 2, 8, 2602, 'supplier-statement', 'ep:wallet', 'erp/purchase/statement/index', 'ErpSupplierStatement', 0), |
| | | (602641, 'ä¾åºå徿¥æ¥è¯¢', 'erp:supplier-statement:query', 3, 1, 602640, '', '', '', '', 0); |
| | | |
| | | -- 3.3 ç»ä¸éè´ç®¡çèåæåºï¼æ¡£æ¡/寻æº/ä¿è¯é â ç³è¯· â 订å â æ¥ç¥¨ â 仿¬¾ â 徿¥ |
| | | UPDATE `system_menu` SET `sort` = 1 WHERE `id` = 602525; |
| | | UPDATE `system_menu` SET `sort` = 2 WHERE `id` = 602620; |
| | | UPDATE `system_menu` SET `sort` = 3 WHERE `id` = 602630; |
| | | UPDATE `system_menu` SET `sort` = 4 WHERE `id` = 602498; |
| | | UPDATE `system_menu` SET `sort` = 5 WHERE `id` = 2666; |
| | | UPDATE `system_menu` SET `sort` = 6 WHERE `id` = 1063110; |
| | | UPDATE `system_menu` SET `sort` = 7 WHERE `id` = 1063116; |
| | | UPDATE `system_menu` SET `sort` = 8 WHERE `id` = 602640; |
| | | |
| | | -- 3.4 æ°èåææï¼æäºå½åå·²æ¥æâä¾åºåæ¡£æ¡â(602525) çè§è² |
| | | INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `updater`) |
| | | SELECT r.`role_id`, m.`menu_id`, 'system', 'system' |
| | | FROM ( |
| | | SELECT DISTINCT `role_id` FROM `system_role_menu` |
| | | WHERE `menu_id` = 602525 AND `deleted` = b'0' |
| | | ) r |
| | | CROSS JOIN ( |
| | | SELECT 602620 AS `menu_id` |
| | | UNION ALL SELECT 602621 |
| | | UNION ALL SELECT 602622 |
| | | UNION ALL SELECT 602623 |
| | | UNION ALL SELECT 602624 |
| | | UNION ALL SELECT 602625 |
| | | UNION ALL SELECT 602626 |
| | | UNION ALL SELECT 602630 |
| | | UNION ALL SELECT 602631 |
| | | UNION ALL SELECT 602632 |
| | | UNION ALL SELECT 602633 |
| | | UNION ALL SELECT 602634 |
| | | UNION ALL SELECT 602640 |
| | | UNION ALL SELECT 602641 |
| | | ) m |
| | | WHERE NOT EXISTS ( |
| | | SELECT 1 FROM `system_role_menu` rm |
| | | WHERE rm.`role_id` = r.`role_id` AND rm.`menu_id` = m.`menu_id` AND rm.`deleted` = b'0' |
| | | ); |
| | | |
| | | -- ----------------------------------------------------------------------------- |
| | | -- åãDROP åºå¼ç©ºè¡¨ï¼æ§è¡å已确认 0 è¡ï¼ç»æå¤ä»½è§ srm_legacy_tables_backup_20261103.sqlï¼ |
| | | -- ----------------------------------------------------------------------------- |
| | | |
| | | DROP TABLE IF EXISTS `srm_supplier_apply`; |
| | | DROP TABLE IF EXISTS `srm_supplier_certificate`; |
| | | DROP TABLE IF EXISTS `srm_supplier_evaluation`; |
| | | DROP TABLE IF EXISTS `srm_tender_project`; |
| | | DROP TABLE IF EXISTS `srm_tender_material`; |
| | | DROP TABLE IF EXISTS `srm_tender_bid`; |
| | | DROP TABLE IF EXISTS `srm_supplier_quote`; |
| | | DROP TABLE IF EXISTS `srm_bid_open`; |
| | | DROP TABLE IF EXISTS `srm_bid_evaluation`; |
| | | DROP TABLE IF EXISTS `srm_bid_award`; |
| | | DROP TABLE IF EXISTS `srm_tender_config`; |
| | | DROP TABLE IF EXISTS `srm_delivery_plan`; |
| | | DROP TABLE IF EXISTS `srm_purchase_collaboration`; |
| | |
| | | return price.multiply(percent).divide(PERCENT_100, PRICE_SCALE, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | /** |
| | | * 计ç®å«ç¨éé¢ä¸å
å«çç¨é¢ |
| | | * |
| | | * éç¨åºæ¯ï¼å价为å«ç¨åä»·æ¶ï¼ä»·ç¨å计 = åä»· * æ°éï¼ç¨é¢ = ä»·ç¨å计 * ç¨ç / (100 + ç¨ç)ã |
| | | * ä¾å¦ï¼å«ç¨éé¢ 113 å
ãç¨ç 13%ï¼ç¨é¢ä¸º 13 å
ã |
| | | * |
| | | * 使°ï¼{@link #PRICE_SCALE} |
| | | * |
| | | * @param totalPrice å«ç¨éé¢ï¼ä»·ç¨åè®¡ï¼ |
| | | * @param percent ç¨çï¼ç¾åæ¯ |
| | | * @return å«ç¨éé¢ä¸çç¨é¢ |
| | | */ |
| | | public static BigDecimal taxPriceIncluded(BigDecimal totalPrice, BigDecimal percent) { |
| | | if (totalPrice == null || percent == null || percent.compareTo(BigDecimal.ZERO) <= 0) { |
| | | return null; |
| | | } |
| | | return totalPrice.multiply(percent) |
| | | .divide(PERCENT_100.add(percent), PRICE_SCALE, RoundingMode.HALF_UP); |
| | | } |
| | | |
| | | } |
| | |
| | | CommonResult<Long> createPurchaseOrder(ErpPurchaseOrderCreateReqDTO createReqDTO); |
| | | |
| | | /** |
| | | * å建éè´è®¢åè稿ï¼ä¸èªå¨æäº¤å®¡æ¹ï¼ |
| | | * |
| | | * @param createReqDTO åå»ºä¿¡æ¯ |
| | | * @return 订åç¼å· |
| | | */ |
| | | CommonResult<Long> createPurchaseOrderDraft(ErpPurchaseOrderCreateReqDTO createReqDTO); |
| | | |
| | | /** |
| | | * ææ¥æºæ¥è¯¢éè´è®¢åæç»å表ï¼ç¨äºè¿½æº¯æ¥æºå·¥åçéè´æ
åµï¼ |
| | | * |
| | | * @param sourceType æ¥æºç±»å |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.erp.api.purchase; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * ERP ä¾åºåå¼ç¨æ¥è¯¢ API |
| | | */ |
| | | public interface ErpSupplierReferenceApi { |
| | | |
| | | String PREFIX = "/rpc-api/erp/supplier-reference"; |
| | | |
| | | /** |
| | | * æ¥è¯¢ä¾åºå被åªäºä¸å¡è¡¨å¼ç¨ |
| | | * |
| | | * @param supplierId ä¾åºåç¼å· |
| | | * @return å¼ç¨æ¥æºåç§°å表ï¼å¦âéè´-éè´è®¢åâï¼ï¼æ å¼ç¨æ¶è¿å空å表 |
| | | */ |
| | | CommonResult<List<String>> getSupplierReferenceSources(Long supplierId); |
| | | |
| | | } |
| | |
| | | @Schema(description = "å®ééé¢ï¼åä½ï¼å
", example = "100") |
| | | private BigDecimal depositPrice; |
| | | |
| | | @Schema(description = "æ¥æºç±»å", example = "2") |
| | | private Integer sourceType; |
| | | |
| | | @Schema(description = "æ¥æºåå·", example = "XJ2026110001") |
| | | private String sourceNo; |
| | | |
| | | @Schema(description = "æ¥æºåæ®ç¼å·", example = "1") |
| | | private Long sourceId; |
| | | |
| | | @Schema(description = "夿³¨", example = "夿³¨ä¿¡æ¯") |
| | | private String remark; |
| | | |
| | |
| | | |
| | | @Override |
| | | public CommonResult<Long> createPurchaseOrder(ErpPurchaseOrderCreateReqDTO createReqDTO) { |
| | | return success(purchaseOrderService.createPurchaseOrder(buildSaveReqVO(createReqDTO))); |
| | | } |
| | | |
| | | @Override |
| | | public CommonResult<Long> createPurchaseOrderDraft(ErpPurchaseOrderCreateReqDTO createReqDTO) { |
| | | return success(purchaseOrderService.createPurchaseOrder(buildSaveReqVO(createReqDTO), false)); |
| | | } |
| | | |
| | | private ErpPurchaseOrderSaveReqVO buildSaveReqVO(ErpPurchaseOrderCreateReqDTO createReqDTO) { |
| | | ErpPurchaseOrderSaveReqVO saveReqVO = BeanUtils.toBean(createReqDTO, ErpPurchaseOrderSaveReqVO.class); |
| | | if (createReqDTO.getItems() != null) { |
| | | saveReqVO.setItems(BeanUtils.toBean(createReqDTO.getItems(), ErpPurchaseOrderSaveReqVO.Item.class)); |
| | | } |
| | | return success(purchaseOrderService.createPurchaseOrder(saveReqVO)); |
| | | return saveReqVO; |
| | | } |
| | | |
| | | @Override |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.erp.api.purchase; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpSupplierMapper; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | /** |
| | | * ERP ä¾åºåå¼ç¨æ¥è¯¢ API å®ç° |
| | | */ |
| | | @RestController |
| | | @RequestMapping(ErpSupplierReferenceApi.PREFIX) |
| | | @Validated |
| | | public class ErpSupplierReferenceApiImpl implements ErpSupplierReferenceApi { |
| | | |
| | | @Resource |
| | | private ErpSupplierMapper supplierMapper; |
| | | |
| | | @Override |
| | | public CommonResult<List<String>> getSupplierReferenceSources(Long supplierId) { |
| | | if (supplierId == null) { |
| | | return success(Collections.emptyList()); |
| | | } |
| | | List<Map<String, Object>> rows = supplierMapper.selectSupplierReferenceCount(supplierId); |
| | | List<String> sources = rows.stream() |
| | | .map(row -> String.valueOf(row.get("source"))) |
| | | .toList(); |
| | | return success(sources); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.erp.controller.admin.purchase; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.statement.ErpSupplierStatementReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.statement.ErpSupplierStatementRespVO; |
| | | import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierStatementService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | @Tag(name = "管çåå° - ERP ä¾åºå徿¥") |
| | | @RestController |
| | | @RequestMapping("/erp/supplier-statement") |
| | | @Validated |
| | | public class ErpSupplierStatementController { |
| | | |
| | | @Resource |
| | | private ErpSupplierStatementService supplierStatementService; |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·åä¾åºå徿¥å¯¹è´¦æ°æ®") |
| | | @PreAuthorize("@ss.hasPermission('erp:supplier-statement:query')") |
| | | public CommonResult<ErpSupplierStatementRespVO> getSupplierStatement( |
| | | @Valid ErpSupplierStatementReqVO reqVO) { |
| | | return success(supplierStatementService.getSupplierStatement(reqVO)); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.statement; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; |
| | | |
| | | @Schema(description = "管çåå° - ä¾åºå徿¥æ¥è¯¢ Request VO") |
| | | @Data |
| | | public class ErpSupplierStatementReqVO { |
| | | |
| | | @Schema(description = "ä¾åºåç¼å·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "ä¾åºåä¸è½ä¸ºç©º") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "å¼å§æ¶é´") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| | | private LocalDateTime beginTime; |
| | | |
| | | @Schema(description = "ç»ææ¶é´") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| | | private LocalDateTime endTime; |
| | | |
| | | @Schema(description = "æ¯å¦å
嫿ªå®¡æ ¸éè´è®¢å") |
| | | private Boolean includeUnapprovedOrder; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.statement; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - ä¾åºå徿¥ Response VO") |
| | | @Data |
| | | public class ErpSupplierStatementRespVO { |
| | | |
| | | @Schema(description = "ä¾åºåç¼å·") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "ä¾åºååç§°") |
| | | private String supplierName; |
| | | |
| | | @Schema(description = "æ±æ»") |
| | | private Summary summary; |
| | | |
| | | @Schema(description = "éè´è®¢åæµæ°´") |
| | | private List<OrderRow> orders; |
| | | |
| | | @Schema(description = "æ¥ç¥¨æµæ°´") |
| | | private List<InvoiceRow> invoices; |
| | | |
| | | @Schema(description = "仿¬¾æµæ°´") |
| | | private List<PaymentRow> payments; |
| | | |
| | | @Schema(description = "徿¥æ±æ»") |
| | | @Data |
| | | public static class Summary { |
| | | |
| | | @Schema(description = "累计éè´é¢") |
| | | private BigDecimal totalPurchaseAmount; |
| | | |
| | | @Schema(description = "累计å¼ç¥¨é¢") |
| | | private BigDecimal totalInvoiceAmount; |
| | | |
| | | @Schema(description = "ç´¯è®¡ä»æ¬¾é¢") |
| | | private BigDecimal totalPaymentAmount; |
| | | |
| | | @Schema(description = "æªä»ä½é¢ï¼å¼ç¥¨ - 仿¬¾ï¼") |
| | | private BigDecimal unpaidAmount; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "éè´è®¢åæµæ°´") |
| | | @Data |
| | | public static class OrderRow { |
| | | |
| | | private Long id; |
| | | private String no; |
| | | private LocalDateTime orderTime; |
| | | private BigDecimal orderAmount; |
| | | private BigDecimal invoicedAmount; |
| | | private BigDecimal uninvoicedAmount; |
| | | private Integer status; |
| | | private Integer inStatus; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "æ¥ç¥¨æµæ°´") |
| | | @Data |
| | | public static class InvoiceRow { |
| | | |
| | | private Long id; |
| | | private String no; |
| | | private String invoiceNo; |
| | | private LocalDateTime invoiceTime; |
| | | private BigDecimal invoiceAmount; |
| | | private BigDecimal paidAmount; |
| | | private BigDecimal remainingPayable; |
| | | private Integer paymentStatus; |
| | | private Long purchaseOrderId; |
| | | private String purchaseOrderNo; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "仿¬¾æµæ°´") |
| | | @Data |
| | | public static class PaymentRow { |
| | | |
| | | private Long id; |
| | | private String no; |
| | | private LocalDateTime paymentTime; |
| | | private BigDecimal paymentAmount; |
| | | private Integer status; |
| | | private Long invoiceId; |
| | | private String invoiceNo; |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | |
| | | return convertMap(result, obj -> (Long) obj.get("invoice_id"), obj -> (BigDecimal) obj.get("total_payment_price")); |
| | | } |
| | | |
| | | /** |
| | | * æä¾åºåä¸ä»æ¬¾æ¶é´èå´æ¥è¯¢ä»æ¬¾åï¼ä¾åºå徿¥ï¼ |
| | | */ |
| | | default List<ErpFinancePaymentDO> selectListBySupplierIdAndPaymentTimeBetween(Long supplierId, |
| | | LocalDateTime beginTime, |
| | | LocalDateTime endTime, |
| | | Collection<Integer> statuses) { |
| | | return selectList(new LambdaQueryWrapperX<ErpFinancePaymentDO>() |
| | | .eq(ErpFinancePaymentDO::getSupplierId, supplierId) |
| | | .geIfPresent(ErpFinancePaymentDO::getPaymentTime, beginTime) |
| | | .leIfPresent(ErpFinancePaymentDO::getPaymentTime, endTime) |
| | | .inIfPresent(ErpFinancePaymentDO::getStatus, statuses) |
| | | .orderByAsc(ErpFinancePaymentDO::getPaymentTime) |
| | | .orderByAsc(ErpFinancePaymentDO::getId)); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseInvoiceDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | |
| | | .in(ErpPurchaseInvoiceDO::getPurchaseOrderId, orderIds)); |
| | | } |
| | | |
| | | /** |
| | | * æä¾åºåä¸å¼ç¥¨æ¶é´èå´æ¥è¯¢æ¥ç¥¨ï¼ä¾åºå徿¥ï¼ |
| | | */ |
| | | default List<ErpPurchaseInvoiceDO> selectListBySupplierIdAndInvoiceTimeBetween(Long supplierId, |
| | | LocalDateTime beginTime, |
| | | LocalDateTime endTime) { |
| | | return selectList(new LambdaQueryWrapperX<ErpPurchaseInvoiceDO>() |
| | | .eq(ErpPurchaseInvoiceDO::getSupplierId, supplierId) |
| | | .geIfPresent(ErpPurchaseInvoiceDO::getInvoiceTime, beginTime) |
| | | .leIfPresent(ErpPurchaseInvoiceDO::getInvoiceTime, endTime) |
| | | .orderByAsc(ErpPurchaseInvoiceDO::getInvoiceTime) |
| | | .orderByAsc(ErpPurchaseInvoiceDO::getId)); |
| | | } |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | |
| | | .eq(ErpPurchaseOrderDO::getSourceId, sourceId)); |
| | | } |
| | | |
| | | /** |
| | | * æä¾åºåä¸ä¸åæ¶é´èå´æ¥è¯¢éè´è®¢åï¼ä¾åºå徿¥ï¼ |
| | | */ |
| | | default List<ErpPurchaseOrderDO> selectListBySupplierIdAndOrderTimeBetween(Long supplierId, |
| | | LocalDateTime beginTime, |
| | | LocalDateTime endTime, |
| | | Collection<Integer> statuses) { |
| | | return selectList(new LambdaQueryWrapperX<ErpPurchaseOrderDO>() |
| | | .eq(ErpPurchaseOrderDO::getSupplierId, supplierId) |
| | | .geIfPresent(ErpPurchaseOrderDO::getOrderTime, beginTime) |
| | | .leIfPresent(ErpPurchaseOrderDO::getOrderTime, endTime) |
| | | .inIfPresent(ErpPurchaseOrderDO::getStatus, statuses) |
| | | .orderByAsc(ErpPurchaseOrderDO::getOrderTime) |
| | | .orderByAsc(ErpPurchaseOrderDO::getId)); |
| | | } |
| | | |
| | | } |
| | |
| | | @Getter |
| | | public enum ErpPurchaseOrderSourceTypeEnum implements ArrayValuable<Integer> { |
| | | |
| | | WORK_ORDER(1, "ç产工å"); |
| | | WORK_ORDER(1, "ç产工å"), |
| | | SRM_INQUIRY(2, "SRM询价"); |
| | | |
| | | public static final Integer[] ARRAYS = Arrays.stream(values()) |
| | | .map(ErpPurchaseOrderSourceTypeEnum::getType).toArray(Integer[]::new); |
| | |
| | | Long createPurchaseOrder(@Valid ErpPurchaseOrderSaveReqVO createReqVO); |
| | | |
| | | /** |
| | | * å建éè´è®¢å |
| | | * |
| | | * @param createReqVO åå»ºä¿¡æ¯ |
| | | * @param submit æ¯å¦å建åç«å³æäº¤å®¡æ¹ï¼false æ¶ä¿å为è稿 |
| | | * @return ç¼å· |
| | | */ |
| | | Long createPurchaseOrder(@Valid ErpPurchaseOrderSaveReqVO createReqVO, boolean submit); |
| | | |
| | | /** |
| | | * 导å
¥éè´è®¢å |
| | | * |
| | | * @param importList 导å
¥æ°æ®ï¼æ¯ä¸è¡ = 䏿¡æç»ï¼ç¸åéè´åç¼å·å并为ä¸å¼ 订åï¼ |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createPurchaseOrder(ErpPurchaseOrderSaveReqVO createReqVO) { |
| | | return createPurchaseOrder(createReqVO, true); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createPurchaseOrder(ErpPurchaseOrderSaveReqVO createReqVO, boolean submit) { |
| | | // 1.1 æ ¡éªè®¢åé¡¹çæææ§ |
| | | List<ErpPurchaseOrderItemDO> purchaseOrderItems = validatePurchaseOrderItems(createReqVO.getItems()); |
| | | // 1.2 æ ¡éªä¾åºå |
| | |
| | | throw exception(PURCHASE_ORDER_NO_EXISTS); |
| | | } |
| | | |
| | | // 2.1 æå
¥è®¢åï¼éè´è®¢åå建å为æªå®¡æ ¸ç¶æï¼éè¦æäº¤å®¡æ¹ï¼ |
| | | // 2.1 æå
¥è®¢åï¼submit=false æ¶ä¿å为è稿ï¼çå¾
ä¸å¡ç¡®è®¤åæå¨æäº¤å®¡æ¹ï¼ |
| | | ErpPurchaseOrderDO purchaseOrder = BeanUtils.toBean(createReqVO, ErpPurchaseOrderDO.class, in -> in |
| | | .setNo(no).setStatus(ErpAuditStatus.PROCESS.getStatus()) |
| | | .setNo(no).setStatus(submit ? ErpAuditStatus.PROCESS.getStatus() : ErpAuditStatus.DRAFT.getStatus()) |
| | | .setInCount(BigDecimal.ZERO).setInStatus(ErpPurchaseOrderInStatusEnum.NOT_IN.getStatus())); |
| | | calculateTotalPrice(purchaseOrder, purchaseOrderItems); |
| | | purchaseOrderMapper.insert(purchaseOrder); |
| | |
| | | purchaseOrder.getId(), createReqVO.getBlobIds()); |
| | | |
| | | // 3. å建åèªå¨æäº¤å®¡æ¹å°åååå
¬ï¼å®¡æ¹å¨åååå
¬å®æï¼ä¸å¨æ¬é¡µé¢å®¡æ¹ï¼ |
| | | submitPurchaseOrder(purchaseOrder.getId(), PURCHASE_ORDER_APPROVE_PROCESS_DEFINITION_KEY, getLoginUserId()); |
| | | if (submit) { |
| | | submitPurchaseOrder(purchaseOrder.getId(), PURCHASE_ORDER_APPROVE_PROCESS_DEFINITION_KEY, getLoginUserId()); |
| | | } |
| | | |
| | | return purchaseOrder.getId(); |
| | | } |
| | |
| | | purchaseOrder.setTotalCount(getSumValue(purchaseOrderItems, ErpPurchaseOrderItemDO::getCount, BigDecimal::add)); |
| | | purchaseOrder.setTotalProductPrice(getSumValue(purchaseOrderItems, ErpPurchaseOrderItemDO::getTotalPrice, BigDecimal::add, BigDecimal.ZERO)); |
| | | purchaseOrder.setTotalTaxPrice(getSumValue(purchaseOrderItems, ErpPurchaseOrderItemDO::getTaxPrice, BigDecimal::add, BigDecimal.ZERO)); |
| | | purchaseOrder.setTotalPrice(purchaseOrder.getTotalProductPrice().add(purchaseOrder.getTotalTaxPrice())); |
| | | // å价为å«ç¨åä»·ï¼ä»·ç¨å计 = åä»· * æ°éï¼ç¨é¢å·²å
å«å¨åä»·ä¸ï¼ä¸åé¢å¤å ç¨ |
| | | purchaseOrder.setTotalPrice(purchaseOrder.getTotalProductPrice()); |
| | | // 计ç®ä¼æ ä»·æ ¼ |
| | | if (purchaseOrder.getDiscountPercent() == null) { |
| | | purchaseOrder.setDiscountPercent(BigDecimal.ZERO); |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitPurchaseOrder(Long id, String processDefinitionKey, Long userId) { |
| | | // 1. æ ¡éªåå¨ + æªå®¡æ ¸ç¶æ |
| | | // 1. æ ¡éªåå¨ + æªå®¡æ ¸ç¶æï¼èç¨¿åæªå®¡æ ¸åå¯æäº¤ï¼ |
| | | ErpPurchaseOrderDO purchaseOrder = validatePurchaseOrderExists(id); |
| | | if (!ErpAuditStatus.PROCESS.getStatus().equals(purchaseOrder.getStatus())) { |
| | | boolean submitable = ErpAuditStatus.DRAFT.getStatus().equals(purchaseOrder.getStatus()) |
| | | || ErpAuditStatus.PROCESS.getStatus().equals(purchaseOrder.getStatus()); |
| | | if (!submitable) { |
| | | throw exception(PURCHASE_ORDER_SUBMIT_FAIL_STATUS); |
| | | } |
| | | |
| | |
| | | return; |
| | | } |
| | | if (item.getTaxPercent() != null) { |
| | | item.setTaxPrice(MoneyUtils.priceMultiplyPercent(item.getTotalPrice(), item.getTaxPercent())); |
| | | // å价为å«ç¨åä»·ï¼ç¨é¢ä»ä»·ç¨å计ä¸åç®ï¼è䏿¯å¨å计ä¸åå ç¨ |
| | | item.setTaxPrice(MoneyUtils.taxPriceIncluded(item.getTotalPrice(), item.getTaxPercent())); |
| | | } |
| | | })); |
| | | } |
| | |
| | | purchaseRequest.setTotalCount(getSumValue(requestItems, ErpPurchaseRequestItemDO::getCount, BigDecimal::add)); |
| | | purchaseRequest.setTotalProductPrice(getSumValue(requestItems, ErpPurchaseRequestItemDO::getTotalPrice, BigDecimal::add, BigDecimal.ZERO)); |
| | | purchaseRequest.setTotalTaxPrice(getSumValue(requestItems, ErpPurchaseRequestItemDO::getTaxPrice, BigDecimal::add, BigDecimal.ZERO)); |
| | | purchaseRequest.setTotalPrice(purchaseRequest.getTotalProductPrice().add(purchaseRequest.getTotalTaxPrice())); |
| | | // å价为å«ç¨åä»·ï¼ä»·ç¨å计 = åä»· * æ°éï¼ç¨é¢å·²å
å«å¨åä»·ä¸ï¼ä¸åé¢å¤å ç¨ |
| | | purchaseRequest.setTotalPrice(purchaseRequest.getTotalProductPrice()); |
| | | // 计ç®ä¼æ ä»·æ ¼ |
| | | if (purchaseRequest.getDiscountPercent() == null) { |
| | | purchaseRequest.setDiscountPercent(BigDecimal.ZERO); |
| | |
| | | if (item.getProductPrice() != null && item.getCount() != null) { |
| | | item.setTotalPrice(MoneyUtils.priceMultiply(item.getProductPrice(), item.getCount())); |
| | | if (item.getTaxPercent() != null) { |
| | | item.setTaxPrice(MoneyUtils.priceMultiplyPercent(item.getTotalPrice(), item.getTaxPercent())); |
| | | // å价为å«ç¨åä»·ï¼ç¨é¢ä»ä»·ç¨å计ä¸åç®ï¼è䏿¯å¨å计ä¸åå ç¨ |
| | | item.setTaxPrice(MoneyUtils.taxPriceIncluded(item.getTotalPrice(), item.getTaxPercent())); |
| | | } |
| | | } |
| | | })); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.erp.service.purchase; |
| | | |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.statement.ErpSupplierStatementReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.statement.ErpSupplierStatementRespVO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | /** |
| | | * ERP ä¾åºå徿¥ Service æ¥å£ |
| | | */ |
| | | public interface ErpSupplierStatementService { |
| | | |
| | | /** |
| | | * è·åä¾åºå徿¥å¯¹è´¦æ°æ®ï¼è®¢å / æ¥ç¥¨ / 仿¬¾ + æ±æ»ï¼ |
| | | */ |
| | | ErpSupplierStatementRespVO getSupplierStatement(@Valid ErpSupplierStatementReqVO reqVO); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.erp.service.purchase; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.statement.ErpSupplierStatementReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.statement.ErpSupplierStatementRespVO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.finance.ErpFinancePaymentDO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseInvoiceDO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO; |
| | | import cn.iocoder.yudao.module.erp.dal.mysql.finance.ErpFinancePaymentMapper; |
| | | import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseInvoiceMapper; |
| | | import cn.iocoder.yudao.module.erp.dal.mysql.purchase.ErpPurchaseOrderMapper; |
| | | import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus; |
| | | import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi; |
| | | import cn.iocoder.yudao.module.srm.api.supplier.dto.SrmSupplierRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.SUPPLIER_NOT_EXISTS; |
| | | |
| | | /** |
| | | * ERP ä¾åºå徿¥ Service å®ç° |
| | | */ |
| | | @Service |
| | | @Validated |
| | | public class ErpSupplierStatementServiceImpl implements ErpSupplierStatementService { |
| | | |
| | | @Resource |
| | | private ErpPurchaseOrderMapper purchaseOrderMapper; |
| | | @Resource |
| | | private ErpPurchaseInvoiceMapper purchaseInvoiceMapper; |
| | | @Resource |
| | | private ErpFinancePaymentMapper financePaymentMapper; |
| | | @Resource |
| | | private ErpPurchaseInvoiceService purchaseInvoiceService; |
| | | @Resource |
| | | private SrmSupplierApi srmSupplierApi; |
| | | |
| | | @Override |
| | | public ErpSupplierStatementRespVO getSupplierStatement(ErpSupplierStatementReqVO reqVO) { |
| | | // 1. æ ¡éªä¾åºå |
| | | SrmSupplierRespDTO supplier = srmSupplierApi.getSupplier(reqVO.getSupplierId()).getCheckedData(); |
| | | if (supplier == null) { |
| | | throw ServiceExceptionUtil.exception(SUPPLIER_NOT_EXISTS); |
| | | } |
| | | |
| | | // 2. æ¥è¯¢è®¢å / æ¥ç¥¨ / 仿¬¾ |
| | | List<Integer> orderStatuses = Boolean.TRUE.equals(reqVO.getIncludeUnapprovedOrder()) |
| | | ? List.of(ErpAuditStatus.PROCESS.getStatus(), ErpAuditStatus.APPROVING.getStatus(), |
| | | ErpAuditStatus.APPROVE.getStatus()) |
| | | : List.of(ErpAuditStatus.APPROVE.getStatus()); |
| | | List<ErpPurchaseOrderDO> orders = purchaseOrderMapper.selectListBySupplierIdAndOrderTimeBetween( |
| | | reqVO.getSupplierId(), reqVO.getBeginTime(), reqVO.getEndTime(), orderStatuses); |
| | | List<ErpPurchaseInvoiceDO> invoices = purchaseInvoiceMapper.selectListBySupplierIdAndInvoiceTimeBetween( |
| | | reqVO.getSupplierId(), reqVO.getBeginTime(), reqVO.getEndTime()); |
| | | List<Integer> paymentStatuses = List.of(ErpAuditStatus.PROCESS.getStatus(), |
| | | ErpAuditStatus.APPROVING.getStatus(), ErpAuditStatus.APPROVE.getStatus()); |
| | | List<ErpFinancePaymentDO> payments = financePaymentMapper.selectListBySupplierIdAndPaymentTimeBetween( |
| | | reqVO.getSupplierId(), reqVO.getBeginTime(), reqVO.getEndTime(), paymentStatuses); |
| | | |
| | | // 3. 订åå·²å¼ç¥¨éé¢ï¼ä¸æå¼ç¥¨æ¥æè¿æ»¤ï¼ä¿è¯æªå¼ç¥¨éé¢åç¡®ï¼ |
| | | Map<Long, BigDecimal> invoicedMap = CollUtil.isEmpty(orders) ? Collections.emptyMap() |
| | | : purchaseInvoiceService.getPurchaseInvoicePriceSumMapByOrderIds( |
| | | orders.stream().map(ErpPurchaseOrderDO::getId).toList()); |
| | | // 4. æ¥ç¥¨å·²ä»éé¢ï¼æææææä»æ¬¾åæ±æ»ï¼ |
| | | Map<Long, BigDecimal> paidMap = CollUtil.isEmpty(invoices) ? Collections.emptyMap() |
| | | : financePaymentMapper.selectPaymentPriceMapByInvoiceId( |
| | | invoices.stream().map(ErpPurchaseInvoiceDO::getId).toList()); |
| | | // 5. æ¥ç¥¨å
³è订åå· |
| | | Set<Long> invoiceOrderIds = invoices.stream().map(ErpPurchaseInvoiceDO::getPurchaseOrderId) |
| | | .filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, ErpPurchaseOrderDO> invoiceOrderMap = invoiceOrderIds.isEmpty() ? Collections.emptyMap() |
| | | : purchaseOrderMapper.selectBatchIds(invoiceOrderIds).stream() |
| | | .collect(Collectors.toMap(ErpPurchaseOrderDO::getId, Function.identity())); |
| | | // 6. 仿¬¾å
³èæ¥ç¥¨å· |
| | | Set<Long> paymentInvoiceIds = payments.stream().map(ErpFinancePaymentDO::getInvoiceId) |
| | | .filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, ErpPurchaseInvoiceDO> paymentInvoiceMap = paymentInvoiceIds.isEmpty() ? Collections.emptyMap() |
| | | : purchaseInvoiceMapper.selectBatchIds(paymentInvoiceIds).stream() |
| | | .collect(Collectors.toMap(ErpPurchaseInvoiceDO::getId, Function.identity())); |
| | | |
| | | // 7. ç»è£
|
| | | ErpSupplierStatementRespVO respVO = new ErpSupplierStatementRespVO(); |
| | | respVO.setSupplierId(reqVO.getSupplierId()); |
| | | respVO.setSupplierName(supplier.getName()); |
| | | |
| | | List<ErpSupplierStatementRespVO.OrderRow> orderRows = new ArrayList<>(); |
| | | for (ErpPurchaseOrderDO order : orders) { |
| | | BigDecimal orderAmount = zero(order.getTotalPrice()); |
| | | BigDecimal invoicedAmount = zero(invoicedMap.get(order.getId())); |
| | | ErpSupplierStatementRespVO.OrderRow row = new ErpSupplierStatementRespVO.OrderRow(); |
| | | row.setId(order.getId()); |
| | | row.setNo(order.getNo()); |
| | | row.setOrderTime(order.getOrderTime()); |
| | | row.setOrderAmount(orderAmount); |
| | | row.setInvoicedAmount(invoicedAmount); |
| | | row.setUninvoicedAmount(orderAmount.subtract(invoicedAmount)); |
| | | row.setStatus(order.getStatus()); |
| | | row.setInStatus(order.getInStatus()); |
| | | orderRows.add(row); |
| | | } |
| | | respVO.setOrders(orderRows); |
| | | |
| | | List<ErpSupplierStatementRespVO.InvoiceRow> invoiceRows = new ArrayList<>(); |
| | | for (ErpPurchaseInvoiceDO invoice : invoices) { |
| | | BigDecimal invoiceAmount = zero(invoice.getPrice()); |
| | | BigDecimal paidAmount = zero(paidMap.get(invoice.getId())); |
| | | ErpSupplierStatementRespVO.InvoiceRow row = new ErpSupplierStatementRespVO.InvoiceRow(); |
| | | row.setId(invoice.getId()); |
| | | row.setNo(invoice.getNo()); |
| | | row.setInvoiceNo(invoice.getInvoiceNo()); |
| | | row.setInvoiceTime(invoice.getInvoiceTime()); |
| | | row.setInvoiceAmount(invoiceAmount); |
| | | row.setPaidAmount(paidAmount); |
| | | row.setRemainingPayable(invoiceAmount.subtract(paidAmount)); |
| | | row.setPaymentStatus(paidAmount.compareTo(BigDecimal.ZERO) <= 0 ? 0 |
| | | : paidAmount.compareTo(invoiceAmount) >= 0 ? 2 : 1); |
| | | row.setPurchaseOrderId(invoice.getPurchaseOrderId()); |
| | | ErpPurchaseOrderDO order = invoiceOrderMap.get(invoice.getPurchaseOrderId()); |
| | | row.setPurchaseOrderNo(order != null ? order.getNo() : null); |
| | | invoiceRows.add(row); |
| | | } |
| | | respVO.setInvoices(invoiceRows); |
| | | |
| | | List<ErpSupplierStatementRespVO.PaymentRow> paymentRows = new ArrayList<>(); |
| | | for (ErpFinancePaymentDO payment : payments) { |
| | | ErpSupplierStatementRespVO.PaymentRow row = new ErpSupplierStatementRespVO.PaymentRow(); |
| | | row.setId(payment.getId()); |
| | | row.setNo(payment.getNo()); |
| | | row.setPaymentTime(payment.getPaymentTime()); |
| | | row.setPaymentAmount(zero(payment.getPaymentPrice())); |
| | | row.setStatus(payment.getStatus()); |
| | | row.setInvoiceId(payment.getInvoiceId()); |
| | | ErpPurchaseInvoiceDO invoice = paymentInvoiceMap.get(payment.getInvoiceId()); |
| | | row.setInvoiceNo(invoice != null ? invoice.getNo() : null); |
| | | paymentRows.add(row); |
| | | } |
| | | respVO.setPayments(paymentRows); |
| | | |
| | | // 8. æ±æ» |
| | | ErpSupplierStatementRespVO.Summary summary = new ErpSupplierStatementRespVO.Summary(); |
| | | summary.setTotalPurchaseAmount(orderRows.stream().map(ErpSupplierStatementRespVO.OrderRow::getOrderAmount) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add)); |
| | | summary.setTotalInvoiceAmount(invoiceRows.stream().map(ErpSupplierStatementRespVO.InvoiceRow::getInvoiceAmount) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add)); |
| | | summary.setTotalPaymentAmount(paymentRows.stream().map(ErpSupplierStatementRespVO.PaymentRow::getPaymentAmount) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add)); |
| | | summary.setUnpaidAmount(summary.getTotalInvoiceAmount().subtract(summary.getTotalPaymentAmount())); |
| | | respVO.setSummary(summary); |
| | | return respVO; |
| | | } |
| | | |
| | | private BigDecimal zero(BigDecimal value) { |
| | | return value != null ? value : BigDecimal.ZERO; |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.bond; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondPageReqVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondRespVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondSaveReqVO; |
| | | import cn.iocoder.yudao.module.srm.service.bond.SrmBidBondService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | @Tag(name = "管çåå° - SRM ææ ä¿è¯é") |
| | | @RestController |
| | | @RequestMapping("/srm/bid-bond") |
| | | @Validated |
| | | public class SrmBidBondController { |
| | | |
| | | @Resource |
| | | private SrmBidBondService bidBondService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "åå»ºææ ä¿è¯éè®°å½") |
| | | @PreAuthorize("@ss.hasPermission('srm:bid-bond:create')") |
| | | public CommonResult<Long> createBidBond(@Valid @RequestBody SrmBidBondSaveReqVO createReqVO) { |
| | | return success(bidBondService.createBidBond(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°ææ ä¿è¯éè®°å½") |
| | | @PreAuthorize("@ss.hasPermission('srm:bid-bond:update')") |
| | | public CommonResult<Boolean> updateBidBond(@Valid @RequestBody SrmBidBondSaveReqVO updateReqVO) { |
| | | bidBondService.updateBidBond(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å 餿æ ä¿è¯éè®°å½") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('srm:bid-bond:delete')") |
| | | public CommonResult<Boolean> deleteBidBond(@RequestParam("id") Long id) { |
| | | bidBondService.deleteBidBond(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·åææ ä¿è¯éè®°å½") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | public CommonResult<SrmBidBondRespVO> getBidBond(@RequestParam("id") Long id) { |
| | | return success(bidBondService.getBidBondDetail(id)); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "ææ ä¿è¯éå页æ¥è¯¢") |
| | | public CommonResult<PageResult<SrmBidBondRespVO>> getBidBondPage(@Valid SrmBidBondPageReqVO pageReqVO) { |
| | | return success(bidBondService.getBidBondPage(pageReqVO)); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.bond.vo; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.ToString; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - ææ ä¿è¯éå页æ¥è¯¢ Request VO") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | public class SrmBidBondPageReqVO extends PageParam { |
| | | |
| | | @Schema(description = "ä¿è¯éåå·") |
| | | private String no; |
| | | |
| | | @Schema(description = "ä¾åºåç¼å·") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "项ç®åç§°") |
| | | private String projectName; |
| | | |
| | | @Schema(description = "æ¯å¦ä¸æ ") |
| | | private Boolean won; |
| | | |
| | | @Schema(description = "éåç¶æï¼0 æªéåã1 é¨åéåã2 å·²éåã3 æ ééå") |
| | | private Integer refundStatus; |
| | | |
| | | @Schema(description = "ç¼´çº³æ¥æå¼å§") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate payDateStart; |
| | | |
| | | @Schema(description = "ç¼´çº³æ¥æç»æ") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate payDateEnd; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.bond.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Schema(description = "管çåå° - ææ ä¿è¯é Response VO") |
| | | @Data |
| | | public class SrmBidBondRespVO { |
| | | |
| | | @Schema(description = "ä¿è¯éè®°å½ID") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ä¿è¯éåå·") |
| | | private String no; |
| | | |
| | | @Schema(description = "ä¾åºåç¼å·") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "ä¾åºååç§°") |
| | | private String supplierName; |
| | | |
| | | @Schema(description = "项ç®åç§°") |
| | | private String projectName; |
| | | |
| | | @Schema(description = "å
³è询价åç¼å·") |
| | | private Long inquiryId; |
| | | |
| | | @Schema(description = "å
³è询价åå·") |
| | | private String inquiryNo; |
| | | |
| | | @Schema(description = "å
³èéè´è®¢åç¼å·") |
| | | private Long purchaseOrderId; |
| | | |
| | | @Schema(description = "å
³èéè´è®¢åå·") |
| | | private String purchaseOrderNo; |
| | | |
| | | @Schema(description = "ä¿è¯ééé¢") |
| | | private BigDecimal bondAmount; |
| | | |
| | | @Schema(description = "ç¼´çº³æ¥æ") |
| | | private LocalDate payDate; |
| | | |
| | | @Schema(description = "æ¯å¦ä¸æ ") |
| | | private Boolean won; |
| | | |
| | | @Schema(description = "éåç¶æï¼0 æªéåã1 é¨åéåã2 å·²éåã3 æ ééå") |
| | | private Integer refundStatus; |
| | | |
| | | @Schema(description = "éåéé¢") |
| | | private BigDecimal refundAmount; |
| | | |
| | | @Schema(description = "é忥æ") |
| | | private LocalDate refundDate; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.bond.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - ææ ä¿è¯éå建/æ´æ° Request VO") |
| | | @Data |
| | | public class SrmBidBondSaveReqVO { |
| | | |
| | | @Schema(description = "ä¿è¯éè®°å½ID") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ä¾åºåç¼å·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "ä¾åºåä¸è½ä¸ºç©º") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "项ç®åç§°") |
| | | private String projectName; |
| | | |
| | | @Schema(description = "å
³è询价åç¼å·") |
| | | private Long inquiryId; |
| | | |
| | | @Schema(description = "å
³èéè´è®¢åç¼å·") |
| | | private Long purchaseOrderId; |
| | | |
| | | @Schema(description = "ä¿è¯ééé¢", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "ä¿è¯ééé¢ä¸è½ä¸ºç©º") |
| | | private BigDecimal bondAmount; |
| | | |
| | | @Schema(description = "ç¼´çº³æ¥æ") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate payDate; |
| | | |
| | | @Schema(description = "æ¯å¦ä¸æ ") |
| | | private Boolean won; |
| | | |
| | | @Schema(description = "éåç¶æï¼0 æªéåã1 é¨åéåã2 å·²éåã3 æ ééå") |
| | | private Integer refundStatus; |
| | | |
| | | @Schema(description = "éåéé¢") |
| | | private BigDecimal refundAmount; |
| | | |
| | | @Schema(description = "é忥æ") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate refundDate; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.inquiry; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo.*; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmInquiryDO; |
| | | import cn.iocoder.yudao.module.srm.service.inquiry.SrmInquiryService; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import jakarta.annotation.Resource; |
| | | import jakarta.validation.Valid; |
| | | import org.springframework.security.access.prepost.PreAuthorize; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | @Tag(name = "管çåå° - SRM 询价æ¯ä»·") |
| | | @RestController |
| | | @RequestMapping("/srm/inquiry") |
| | | @Validated |
| | | public class SrmInquiryController { |
| | | |
| | | @Resource |
| | | private SrmInquiryService inquiryService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建询价å") |
| | | @PreAuthorize("@ss.hasPermission('srm:inquiry:create')") |
| | | public CommonResult<Long> createInquiry(@Valid @RequestBody SrmInquirySaveReqVO createReqVO) { |
| | | return success(inquiryService.createInquiry(createReqVO)); |
| | | } |
| | | |
| | | @PutMapping("/update") |
| | | @Operation(summary = "æ´æ°è¯¢ä»·åï¼ä»
è稿ï¼") |
| | | @PreAuthorize("@ss.hasPermission('srm:inquiry:update')") |
| | | public CommonResult<Boolean> updateInquiry(@Valid @RequestBody SrmInquirySaveReqVO updateReqVO) { |
| | | inquiryService.updateInquiry(updateReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å é¤è¯¢ä»·åï¼ä»
è稿ï¼") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('srm:inquiry:delete')") |
| | | public CommonResult<Boolean> deleteInquiry(@RequestParam("id") Long id) { |
| | | inquiryService.deleteInquiry(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/get") |
| | | @Operation(summary = "è·å询价å详æ
") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | public CommonResult<SrmInquiryRespVO> getInquiry(@RequestParam("id") Long id) { |
| | | return success(inquiryService.getInquiryDetail(id)); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | | @Operation(summary = "询价åå页æ¥è¯¢") |
| | | public CommonResult<PageResult<SrmInquiryRespVO>> getInquiryPage(@Valid SrmInquiryPageReqVO pageReqVO) { |
| | | PageResult<SrmInquiryDO> pageResult = inquiryService.getInquiryPage(pageReqVO); |
| | | return success(BeanUtils.toBean(pageResult, SrmInquiryRespVO.class)); |
| | | } |
| | | |
| | | @GetMapping("/simple-list") |
| | | @Operation(summary = "è·å询价åç²¾ç®å表ï¼ç¨äºææ ä¿è¯ééæ©ï¼") |
| | | public CommonResult<List<SrmInquiryRespVO>> getInquirySimpleList() { |
| | | List<SrmInquiryDO> list = inquiryService.getInquirySimpleList(); |
| | | return success(BeanUtils.toBean(list, SrmInquiryRespVO.class)); |
| | | } |
| | | |
| | | @PutMapping("/publish") |
| | | @Operation(summary = "åå¸è¯¢ä»·åï¼è稿 -> 询价ä¸") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('srm:inquiry:update')") |
| | | public CommonResult<Boolean> publishInquiry(@RequestParam("id") Long id) { |
| | | inquiryService.publishInquiry(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/cancel") |
| | | @Operation(summary = "åæ¶è¯¢ä»·å") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('srm:inquiry:update')") |
| | | public CommonResult<Boolean> cancelInquiry(@RequestParam("id") Long id) { |
| | | inquiryService.cancelInquiry(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PostMapping("/save-quotes") |
| | | @Operation(summary = "æ¹éä¿åä¾åºåæ¥ä»·") |
| | | @PreAuthorize("@ss.hasPermission('srm:inquiry:quote')") |
| | | public CommonResult<Boolean> saveQuotes(@Valid @RequestBody SrmInquiryQuoteSaveReqVO saveReqVO) { |
| | | inquiryService.saveQuotes(saveReqVO); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/compare") |
| | | @Operation(summary = "è·å询价æ¯ä»·è§å¾ï¼äº§åè¡ x ä¾åºåæ¥ä»·ï¼") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | public CommonResult<SrmInquiryRespVO> getCompare(@RequestParam("id") Long id) { |
| | | return success(inquiryService.getCompare(id)); |
| | | } |
| | | |
| | | @PostMapping("/confirm") |
| | | @Operation(summary = "ç¡®è®¤ä¸æ å¹¶çæéè´è®¢åè稿") |
| | | @PreAuthorize("@ss.hasPermission('srm:inquiry:confirm')") |
| | | public CommonResult<SrmInquiryConfirmRespVO> confirmInquiry( |
| | | @Valid @RequestBody SrmInquiryConfirmReqVO confirmReqVO) { |
| | | return success(inquiryService.confirmInquiry(confirmReqVO)); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - 询价æ¯ä»·ç¡®è®¤è½¬è®¢å Request VO") |
| | | @Data |
| | | public class SrmInquiryConfirmReqVO { |
| | | |
| | | @Schema(description = "询价åID", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "询价åIDä¸è½ä¸ºç©º") |
| | | private Long id; |
| | | |
| | | @Schema(description = "æ¯ä¸ªäº§åéä¸ç䏿 æ¥ä»·ï¼ä¸ºç©ºæ¶ä½¿ç¨è¯¢ä»·åä¸å·²ä¿åç䏿 éæ©") |
| | | private List<Selection> selections; |
| | | |
| | | @Schema(description = "产å䏿 éæ©") |
| | | @Data |
| | | public static class Selection { |
| | | |
| | | @Schema(description = "询价产åè¡ID", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "询价产åè¡IDä¸è½ä¸ºç©º") |
| | | private Long inquiryItemId; |
| | | |
| | | @Schema(description = "䏿 æ¥ä»·ID", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "䏿 æ¥ä»·IDä¸è½ä¸ºç©º") |
| | | private Long quoteId; |
| | | |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - 询价æ¯ä»·ç¡®è®¤è½¬è®¢å Response VO") |
| | | @Data |
| | | public class SrmInquiryConfirmRespVO { |
| | | |
| | | @Schema(description = "询价åID") |
| | | private Long inquiryId; |
| | | |
| | | @Schema(description = "çæçéè´è®¢åè稿") |
| | | private List<Order> orders; |
| | | |
| | | @Schema(description = "çæçéè´è®¢å") |
| | | @Data |
| | | public static class Order { |
| | | |
| | | @Schema(description = "ä¾åºåç¼å·") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "ä¾åºååç§°") |
| | | private String supplierName; |
| | | |
| | | @Schema(description = "éè´è®¢åç¼å·") |
| | | private Long purchaseOrderId; |
| | | |
| | | @Schema(description = "éè´è®¢åå·") |
| | | private String purchaseOrderNo; |
| | | |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageParam; |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import lombok.ToString; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - 询价æ¯ä»·å页æ¥è¯¢ Request VO") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | public class SrmInquiryPageReqVO extends PageParam { |
| | | |
| | | @Schema(description = "询价åå·") |
| | | private String no; |
| | | |
| | | @Schema(description = "询价æ é¢") |
| | | private String title; |
| | | |
| | | @Schema(description = "ç¶æï¼0 è稿ã10 询价ä¸ã20 已转订åã30 已忶") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "è¯¢ä»·æ¥æå¼å§") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate inquiryDateStart; |
| | | |
| | | @Schema(description = "è¯¢ä»·æ¥æç»æ") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate inquiryDateEnd; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - 询价æ¥ä»·ä¿å Request VO") |
| | | @Data |
| | | public class SrmInquiryQuoteSaveReqVO { |
| | | |
| | | @Schema(description = "询价åID", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "询价åIDä¸è½ä¸ºç©º") |
| | | private Long inquiryId; |
| | | |
| | | @Schema(description = "æ¥ä»·å表", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotEmpty(message = "æ¥ä»·å表ä¸è½ä¸ºç©º") |
| | | private List<Quote> quotes; |
| | | |
| | | @Schema(description = "äº§åæ¥ä»·") |
| | | @Data |
| | | public static class Quote { |
| | | |
| | | @Schema(description = "询价产åè¡ID", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "询价产åè¡IDä¸è½ä¸ºç©º") |
| | | private Long inquiryItemId; |
| | | |
| | | @Schema(description = "ä¾åºåç¼å·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "ä¾åºåä¸è½ä¸ºç©º") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "æ¥ä»·åä»·") |
| | | private BigDecimal price; |
| | | |
| | | @Schema(description = "ç¨çï¼ç¾åæ¯") |
| | | private BigDecimal taxRate; |
| | | |
| | | @Schema(description = "äº¤è´§å¨æï¼å¤©") |
| | | private Integer deliveryCycle; |
| | | |
| | | @Schema(description = "仿¬¾æ¡ä»¶") |
| | | private String paymentTerms; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - 询价æ¯ä»· Response VO") |
| | | @Data |
| | | public class SrmInquiryRespVO { |
| | | |
| | | @Schema(description = "询价åID") |
| | | private Long id; |
| | | |
| | | @Schema(description = "询价åå·") |
| | | private String no; |
| | | |
| | | @Schema(description = "询价æ é¢") |
| | | private String title; |
| | | |
| | | @Schema(description = "ç¶æï¼0 è稿ã10 询价ä¸ã20 已转订åã30 已忶") |
| | | private Integer status; |
| | | |
| | | @Schema(description = "è¯¢ä»·æ¥æ") |
| | | private LocalDate inquiryDate; |
| | | |
| | | @Schema(description = "æ¥ä»·æªæ¢æ¥æ") |
| | | private LocalDate deadline; |
| | | |
| | | @Schema(description = "éè´åç¨æ·ç¼å·") |
| | | private Long purchaserUserId; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | @Schema(description = "产åè¡å表") |
| | | private List<Item> items; |
| | | |
| | | @Schema(description = "åä¸ä¾åºåå表") |
| | | private List<Supplier> suppliers; |
| | | |
| | | @Schema(description = "å
¨é¨æ¥ä»·") |
| | | private List<Quote> quotes; |
| | | |
| | | @Schema(description = "å·²çæçéè´è®¢å") |
| | | private List<Order> orders; |
| | | |
| | | @Schema(description = "询价产åè¡") |
| | | @Data |
| | | public static class Item { |
| | | |
| | | private Long id; |
| | | private Long inquiryId; |
| | | private Long productId; |
| | | private Long productUnitId; |
| | | private String productCode; |
| | | private String productName; |
| | | private String productSpec; |
| | | private String unitName; |
| | | private BigDecimal quantity; |
| | | private BigDecimal estimatedPrice; |
| | | private Long selectedSupplierId; |
| | | private Long selectedQuoteId; |
| | | private BigDecimal selectedPrice; |
| | | private String remark; |
| | | private Integer sort; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "åä¸ä¾åºå") |
| | | @Data |
| | | public static class Supplier { |
| | | |
| | | private Long id; |
| | | private Long supplierId; |
| | | private String supplierName; |
| | | private String supplierCode; |
| | | private Integer quoteStatus; |
| | | private LocalDateTime quoteTime; |
| | | private String remark; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "äº§åæ¥ä»·") |
| | | @Data |
| | | public static class Quote { |
| | | |
| | | private Long id; |
| | | private Long inquiryId; |
| | | private Long inquiryItemId; |
| | | private Long supplierId; |
| | | private BigDecimal price; |
| | | private BigDecimal taxRate; |
| | | private Integer deliveryCycle; |
| | | private String paymentTerms; |
| | | private String remark; |
| | | private Boolean isSelected; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "å·²çæçéè´è®¢å") |
| | | @Data |
| | | public static class Order { |
| | | |
| | | private Long id; |
| | | private Long supplierId; |
| | | private String supplierName; |
| | | private Long purchaseOrderId; |
| | | private String purchaseOrderNo; |
| | | |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import jakarta.validation.constraints.NotNull; |
| | | import lombok.Data; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY; |
| | | |
| | | @Schema(description = "管çåå° - 询价æ¯ä»·å建/æ´æ° Request VO") |
| | | @Data |
| | | public class SrmInquirySaveReqVO { |
| | | |
| | | @Schema(description = "询价åID") |
| | | private Long id; |
| | | |
| | | @Schema(description = "询价æ é¢", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotEmpty(message = "询价æ é¢ä¸è½ä¸ºç©º") |
| | | private String title; |
| | | |
| | | @Schema(description = "è¯¢ä»·æ¥æ") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate inquiryDate; |
| | | |
| | | @Schema(description = "æ¥ä»·æªæ¢æ¥æ") |
| | | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY) |
| | | private LocalDate deadline; |
| | | |
| | | @Schema(description = "éè´åç¨æ·ç¼å·") |
| | | private Long purchaserUserId; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "产åè¡å表") |
| | | @NotEmpty(message = "请è³å°æ·»å ä¸ä¸ªè¯¢ä»·äº§å") |
| | | private List<Item> items; |
| | | |
| | | @Schema(description = "åä¸ä¾åºåå表") |
| | | @NotEmpty(message = "请è³å°æ·»å ä¸ä¸ªåä¸ä¾åºå") |
| | | private List<Supplier> suppliers; |
| | | |
| | | @Schema(description = "询价产åè¡") |
| | | @Data |
| | | public static class Item { |
| | | |
| | | @Schema(description = "询价产åè¡IDï¼ç¼è¾å·²æè¡æ¶ä¼ å
¥ï¼") |
| | | private Long id; |
| | | |
| | | @Schema(description = "产åç¼å·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "产åä¸è½ä¸ºç©º") |
| | | private Long productId; |
| | | |
| | | @Schema(description = "产ååä½ç¼å·") |
| | | private Long productUnitId; |
| | | |
| | | @Schema(description = "产åç¼ç ") |
| | | private String productCode; |
| | | |
| | | @Schema(description = "产ååç§°") |
| | | private String productName; |
| | | |
| | | @Schema(description = "è§æ ¼åå·") |
| | | private String productSpec; |
| | | |
| | | @Schema(description = "åä½åç§°") |
| | | private String unitName; |
| | | |
| | | @Schema(description = "éè´æ°é", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "éè´æ°éä¸è½ä¸ºç©º") |
| | | private BigDecimal quantity; |
| | | |
| | | @Schema(description = "ç®æ åä»·") |
| | | private BigDecimal estimatedPrice; |
| | | |
| | | @Schema(description = "䏿 ä¾åºåç¼å·") |
| | | private Long selectedSupplierId; |
| | | |
| | | @Schema(description = "ä¾åºåæ¥ä»·å表ï¼å建/ç¼è¾æ¶ä¸å¹¶æäº¤ï¼") |
| | | private List<Quote> quotes; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "询价产åä¾åºåæ¥ä»·") |
| | | @Data |
| | | public static class Quote { |
| | | |
| | | @Schema(description = "ä¾åºåç¼å·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "æ¥ä»·ä¾åºåä¸è½ä¸ºç©º") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "æ¥ä»·åä»·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "æ¥ä»·åä»·ä¸è½ä¸ºç©º") |
| | | private BigDecimal price; |
| | | |
| | | @Schema(description = "ç¨çï¼ç¾åæ¯") |
| | | private BigDecimal taxRate; |
| | | |
| | | @Schema(description = "äº¤è´§å¨æï¼å¤©") |
| | | private Integer deliveryCycle; |
| | | |
| | | @Schema(description = "仿¬¾æ¡ä»¶") |
| | | private String paymentTerms; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| | | |
| | | @Schema(description = "åä¸ä¾åºå") |
| | | @Data |
| | | public static class Supplier { |
| | | |
| | | @Schema(description = "ä¾åºåç¼å·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotNull(message = "ä¾åºåä¸è½ä¸ºç©º") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | public CommonResult<SrmSupplierRespVO> getSupplier(@RequestParam("id") Long id) { |
| | | SrmSupplierDO supplier = supplierService.getSupplier(id); |
| | | return success(BeanUtils.toBean(supplier, SrmSupplierRespVO.class)); |
| | | SrmSupplierRespVO respVO = BeanUtils.toBean(supplier, SrmSupplierRespVO.class); |
| | | if (respVO != null) { |
| | | respVO.setContacts(BeanUtils.toBean(supplierService.getSupplierContactList(id), |
| | | SrmSupplierContactRespVO.class)); |
| | | respVO.setBanks(BeanUtils.toBean(supplierService.getSupplierBankList(id), |
| | | SrmSupplierBankRespVO.class)); |
| | | } |
| | | return success(respVO); |
| | | } |
| | | |
| | | @GetMapping("/page") |
| | |
| | | } |
| | | |
| | | @GetMapping("/simple-list") |
| | | @Operation(summary = "è·åä¾åºåç²¾ç®å表ï¼ä»
è¿åå·²éè¿åå
¥å®¡æ¹çä¾åºåï¼") |
| | | @Operation(summary = "è·åä¾åºåç²¾ç®å表ï¼ä»
è¿åå¯ç¨ç¶æçä¾åºåï¼") |
| | | public CommonResult<List<SrmSupplierRespVO>> getSupplierSimpleList() { |
| | | List<SrmSupplierDO> list = supplierService.getSupplierSimpleList(); |
| | | return success(BeanUtils.toBean(list, SrmSupplierRespVO.class)); |
| | | } |
| | | |
| | | @GetMapping("/list") |
| | | @Operation(summary = "è·åä¾åºåæ¡£æ¡å表ï¼ä¸è¿æ»¤åå
¥ç¶æï¼") |
| | | @Operation(summary = "è·åä¾åºåæ¡£æ¡åè¡¨ï¼æé¤åç¨ä¾åºåï¼") |
| | | public CommonResult<List<SrmSupplierRespVO>> getSupplierAllList() { |
| | | List<SrmSupplierDO> list = supplierService.getSupplierAllList(); |
| | | return success(BeanUtils.toBean(list, SrmSupplierRespVO.class)); |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.supplier.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - ä¾åºåé¶è¡è´¦æ· Response VO") |
| | | @Data |
| | | public class SrmSupplierBankRespVO { |
| | | |
| | | @Schema(description = "é¶è¡è´¦æ·ID") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ä¾åºåID") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "弿·è¡") |
| | | private String bankName; |
| | | |
| | | @Schema(description = "é¶è¡è´¦å·") |
| | | private String bankAccount; |
| | | |
| | | @Schema(description = "é¶è¡è¡å·") |
| | | private String bankNo; |
| | | |
| | | @Schema(description = "弿·è¡å°å") |
| | | private String bankAddress; |
| | | |
| | | @Schema(description = "æ¯å¦é»è®¤è´¦æ·") |
| | | private Boolean isDefault; |
| | | |
| | | @Schema(description = "æåº") |
| | | private Integer sort; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.controller.admin.supplier.vo; |
| | | |
| | | import io.swagger.v3.oas.annotations.media.Schema; |
| | | import jakarta.validation.constraints.NotEmpty; |
| | | import lombok.Data; |
| | | |
| | | @Schema(description = "管çåå° - ä¾åºåé¶è¡è´¦æ·ä¿å Request VO") |
| | | @Data |
| | | public class SrmSupplierBankSaveReqVO { |
| | | |
| | | @Schema(description = "é¶è¡è´¦æ·ID") |
| | | private Long id; |
| | | |
| | | @Schema(description = "ä¾åºåID") |
| | | private Long supplierId; |
| | | |
| | | @Schema(description = "弿·è¡", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotEmpty(message = "弿·è¡ä¸è½ä¸ºç©º") |
| | | private String bankName; |
| | | |
| | | @Schema(description = "é¶è¡è´¦å·", requiredMode = Schema.RequiredMode.REQUIRED) |
| | | @NotEmpty(message = "é¶è¡è´¦å·ä¸è½ä¸ºç©º") |
| | | private String bankAccount; |
| | | |
| | | @Schema(description = "é¶è¡è¡å·") |
| | | private String bankNo; |
| | | |
| | | @Schema(description = "弿·è¡å°å") |
| | | private String bankAddress; |
| | | |
| | | @Schema(description = "æ¯å¦é»è®¤è´¦æ·") |
| | | private Boolean isDefault; |
| | | |
| | | @Schema(description = "æåº") |
| | | private Integer sort; |
| | | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | } |
| | |
| | | @Schema(description = "èç³»çµè¯") |
| | | private String contactMobile; |
| | | |
| | | @Schema(description = "ä»
æ¾ç¤ºå·²éè¿åå
¥å®¡æ¹çä¾åºå") |
| | | private Boolean approved; |
| | | |
| | | @Schema(description = "æé¤å·²éè¿åå
¥å®¡æ¹çä¾åºåï¼ç¨äºæ°å¢åå
¥æ¶é¿å
éå¤éæ©ï¼") |
| | | private Boolean excludeApproved; |
| | | |
| | | } |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - ä¾åºå Response VO") |
| | | @Data |
| | |
| | | @Schema(description = "å建æ¶é´") |
| | | private LocalDateTime createTime; |
| | | |
| | | @Schema(description = "è系人å表") |
| | | private List<SrmSupplierContactRespVO> contacts; |
| | | |
| | | @Schema(description = "é¶è¡è´¦æ·å表") |
| | | private List<SrmSupplierBankRespVO> banks; |
| | | |
| | | } |
| | |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | @Schema(description = "管çåå° - ä¾åºåå建/æ´æ° Request VO") |
| | | @Data |
| | |
| | | @Schema(description = "夿³¨") |
| | | private String remark; |
| | | |
| | | @Schema(description = "è系人å表ï¼ä¼ null 表示ä¸ä¿®æ¹ï¼") |
| | | private List<SrmSupplierContactSaveReqVO> contacts; |
| | | |
| | | @Schema(description = "é¶è¡è´¦æ·å表ï¼ä¼ null 表示ä¸ä¿®æ¹ï¼") |
| | | private List<SrmSupplierBankSaveReqVO> banks; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.dataobject; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | |
| | | /** |
| | | * SRM ææ ä¿è¯éå°è´¦ DO |
| | | */ |
| | | @TableName("srm_bid_bond") |
| | | @KeySequence("srm_bid_bond_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class SrmBidBondDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | /** |
| | | * ä¿è¯éåå· |
| | | */ |
| | | private String no; |
| | | private Long supplierId; |
| | | /** |
| | | * 项ç®åç§° |
| | | */ |
| | | private String projectName; |
| | | private Long inquiryId; |
| | | private Long purchaseOrderId; |
| | | /** |
| | | * ä¿è¯ééé¢ |
| | | */ |
| | | private BigDecimal bondAmount; |
| | | /** |
| | | * ç¼´çº³æ¥æ |
| | | */ |
| | | private LocalDate payDate; |
| | | /** |
| | | * æ¯å¦ä¸æ |
| | | */ |
| | | private Boolean won; |
| | | /** |
| | | * éåç¶æï¼0 æªéåã1 é¨åéåã2 å·²éåã3 æ ééå |
| | | */ |
| | | private Integer refundStatus; |
| | | private BigDecimal refundAmount; |
| | | private LocalDate refundDate; |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.dataobject; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | import java.time.LocalDate; |
| | | |
| | | /** |
| | | * SRM 询价æ¯ä»·å DO |
| | | */ |
| | | @TableName("srm_inquiry") |
| | | @KeySequence("srm_inquiry_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class SrmInquiryDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | /** |
| | | * 询价åå· |
| | | */ |
| | | private String no; |
| | | /** |
| | | * 询价æ é¢ |
| | | */ |
| | | private String title; |
| | | /** |
| | | * ç¶æï¼0 è稿ã10 询价ä¸ã20 已转订åã30 已忶 |
| | | */ |
| | | private Integer status; |
| | | /** |
| | | * è¯¢ä»·æ¥æ |
| | | */ |
| | | private LocalDate inquiryDate; |
| | | /** |
| | | * æ¥ä»·æªæ¢æ¥æ |
| | | */ |
| | | private LocalDate deadline; |
| | | /** |
| | | * éè´åç¨æ·ç¼å· |
| | | */ |
| | | private Long purchaserUserId; |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.dataobject; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * SRM 询价产åè¡ DO |
| | | */ |
| | | @TableName("srm_inquiry_item") |
| | | @KeySequence("srm_inquiry_item_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class SrmInquiryItemDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | private Long inquiryId; |
| | | private Long productId; |
| | | private Long productUnitId; |
| | | private String productCode; |
| | | private String productName; |
| | | private String productSpec; |
| | | private String unitName; |
| | | /** |
| | | * éè´æ°é |
| | | */ |
| | | private BigDecimal quantity; |
| | | /** |
| | | * ç®æ åä»· |
| | | */ |
| | | private BigDecimal estimatedPrice; |
| | | /** |
| | | * éä¸ç䏿 ä¾åºå |
| | | */ |
| | | private Long selectedSupplierId; |
| | | /** |
| | | * éä¸ç䏿 æ¥ä»· |
| | | */ |
| | | private Long selectedQuoteId; |
| | | /** |
| | | * éä¸ç䏿 åä»· |
| | | */ |
| | | private BigDecimal selectedPrice; |
| | | private String remark; |
| | | private Integer sort; |
| | | |
| | | } |
| ÎļþÃû´Ó yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/dal/dataobject/SrmTenderConfigDO.java ÐÞ¸Ä |
| | |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | @TableName("srm_tender_config") |
| | | @KeySequence("srm_tender_config_seq") |
| | | /** |
| | | * SRM 询价转éè´è®¢åè®°å½ DO |
| | | */ |
| | | @TableName("srm_inquiry_order") |
| | | @KeySequence("srm_inquiry_order_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class SrmTenderConfigDO extends BaseDO { |
| | | public class SrmInquiryOrderDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | private String defaultBiddingMode; |
| | | private Long inquiryId; |
| | | private Long supplierId; |
| | | private Long purchaseOrderId; |
| | | private String purchaseOrderNo; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.dataobject; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * SRM è¯¢ä»·äº§åæ¥ä»· DO |
| | | */ |
| | | @TableName("srm_inquiry_quote") |
| | | @KeySequence("srm_inquiry_quote_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class SrmInquiryQuoteDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | private Long inquiryId; |
| | | private Long inquiryItemId; |
| | | private Long supplierId; |
| | | /** |
| | | * æ¥ä»·åä»· |
| | | */ |
| | | private BigDecimal price; |
| | | /** |
| | | * ç¨çï¼ç¾åæ¯ |
| | | */ |
| | | private BigDecimal taxRate; |
| | | /** |
| | | * äº¤è´§å¨æï¼å¤© |
| | | */ |
| | | private Integer deliveryCycle; |
| | | /** |
| | | * 仿¬¾æ¡ä»¶ |
| | | */ |
| | | private String paymentTerms; |
| | | private String remark; |
| | | /** |
| | | * æ¯å¦è¯¥äº§åç䏿 æ¥ä»· |
| | | */ |
| | | private Boolean isSelected; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.dataobject; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * SRM 询价åä¸ä¾åºå DO |
| | | */ |
| | | @TableName("srm_inquiry_supplier") |
| | | @KeySequence("srm_inquiry_supplier_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class SrmInquirySupplierDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | private Long inquiryId; |
| | | private Long supplierId; |
| | | /** |
| | | * æ¥ä»·ç¶æï¼0 æªæ¥ä»·ã10 å·²æ¥ä»· |
| | | */ |
| | | private Integer quoteStatus; |
| | | private LocalDateTime quoteTime; |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.dataobject; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; |
| | | import com.baomidou.mybatisplus.annotation.KeySequence; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import lombok.*; |
| | | |
| | | /** |
| | | * ä¾åºåé¶è¡è´¦æ· DO |
| | | */ |
| | | @TableName("srm_supplier_bank") |
| | | @KeySequence("srm_supplier_bank_seq") |
| | | @Data |
| | | @EqualsAndHashCode(callSuper = true) |
| | | @ToString(callSuper = true) |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public class SrmSupplierBankDO extends BaseDO { |
| | | |
| | | @TableId |
| | | private Long id; |
| | | |
| | | private Long supplierId; |
| | | /** |
| | | * 弿·è¡ |
| | | */ |
| | | private String bankName; |
| | | /** |
| | | * é¶è¡è´¦å· |
| | | */ |
| | | private String bankAccount; |
| | | /** |
| | | * é¶è¡è¡å· |
| | | */ |
| | | private String bankNo; |
| | | /** |
| | | * 弿·è¡å°å |
| | | */ |
| | | private String bankAddress; |
| | | private Boolean isDefault; |
| | | private Integer sort; |
| | | private String remark; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.mysql; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondPageReqVO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmBidBondDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | @Mapper |
| | | public interface SrmBidBondMapper extends BaseMapperX<SrmBidBondDO> { |
| | | |
| | | default PageResult<SrmBidBondDO> selectPage(SrmBidBondPageReqVO reqVO) { |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<SrmBidBondDO>() |
| | | .likeIfPresent(SrmBidBondDO::getNo, reqVO.getNo()) |
| | | .eqIfPresent(SrmBidBondDO::getSupplierId, reqVO.getSupplierId()) |
| | | .likeIfPresent(SrmBidBondDO::getProjectName, reqVO.getProjectName()) |
| | | .eqIfPresent(SrmBidBondDO::getWon, reqVO.getWon()) |
| | | .eqIfPresent(SrmBidBondDO::getRefundStatus, reqVO.getRefundStatus()) |
| | | .geIfPresent(SrmBidBondDO::getPayDate, reqVO.getPayDateStart()) |
| | | .leIfPresent(SrmBidBondDO::getPayDate, reqVO.getPayDateEnd()) |
| | | .orderByDesc(SrmBidBondDO::getId)); |
| | | } |
| | | |
| | | default SrmBidBondDO selectByNo(String no) { |
| | | return selectOne(SrmBidBondDO::getNo, no); |
| | | } |
| | | |
| | | default long selectCountBySupplierId(Long supplierId) { |
| | | return selectCount(SrmBidBondDO::getSupplierId, supplierId); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.mysql; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmInquiryItemDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface SrmInquiryItemMapper extends BaseMapperX<SrmInquiryItemDO> { |
| | | |
| | | default List<SrmInquiryItemDO> selectListByInquiryId(Long inquiryId) { |
| | | return selectList(new LambdaQueryWrapperX<SrmInquiryItemDO>() |
| | | .eq(SrmInquiryItemDO::getInquiryId, inquiryId) |
| | | .orderByAsc(SrmInquiryItemDO::getSort) |
| | | .orderByAsc(SrmInquiryItemDO::getId)); |
| | | } |
| | | |
| | | default void deleteByInquiryId(Long inquiryId) { |
| | | delete(new LambdaQueryWrapperX<SrmInquiryItemDO>() |
| | | .eq(SrmInquiryItemDO::getInquiryId, inquiryId)); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.mysql; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo.SrmInquiryPageReqVO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmInquiryDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface SrmInquiryMapper extends BaseMapperX<SrmInquiryDO> { |
| | | |
| | | default PageResult<SrmInquiryDO> selectPage(SrmInquiryPageReqVO reqVO) { |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<SrmInquiryDO>() |
| | | .likeIfPresent(SrmInquiryDO::getNo, reqVO.getNo()) |
| | | .likeIfPresent(SrmInquiryDO::getTitle, reqVO.getTitle()) |
| | | .eqIfPresent(SrmInquiryDO::getStatus, reqVO.getStatus()) |
| | | .geIfPresent(SrmInquiryDO::getInquiryDate, reqVO.getInquiryDateStart()) |
| | | .leIfPresent(SrmInquiryDO::getInquiryDate, reqVO.getInquiryDateEnd()) |
| | | .orderByDesc(SrmInquiryDO::getId)); |
| | | } |
| | | |
| | | default SrmInquiryDO selectByNo(String no) { |
| | | return selectOne(SrmInquiryDO::getNo, no); |
| | | } |
| | | |
| | | default List<SrmInquiryDO> selectListByStatus(Integer status) { |
| | | return selectList(SrmInquiryDO::getStatus, status); |
| | | } |
| | | |
| | | /** |
| | | * æå½åç¶ææ¡ä»¶æ´æ°ï¼é¿å
å¹¶åéå¤ç¡®è®¤ |
| | | */ |
| | | default int updateByIdAndStatus(Long id, Integer whereStatus, SrmInquiryDO updateObj) { |
| | | return update(updateObj, new com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<SrmInquiryDO>() |
| | | .eq(SrmInquiryDO::getId, id) |
| | | .eq(SrmInquiryDO::getStatus, whereStatus)); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.mysql; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmInquiryOrderDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface SrmInquiryOrderMapper extends BaseMapperX<SrmInquiryOrderDO> { |
| | | |
| | | default List<SrmInquiryOrderDO> selectListByInquiryId(Long inquiryId) { |
| | | return selectList(new LambdaQueryWrapperX<SrmInquiryOrderDO>() |
| | | .eq(SrmInquiryOrderDO::getInquiryId, inquiryId) |
| | | .orderByAsc(SrmInquiryOrderDO::getId)); |
| | | } |
| | | |
| | | default SrmInquiryOrderDO selectByInquiryIdAndSupplierId(Long inquiryId, Long supplierId) { |
| | | return selectOne(new LambdaQueryWrapperX<SrmInquiryOrderDO>() |
| | | .eq(SrmInquiryOrderDO::getInquiryId, inquiryId) |
| | | .eq(SrmInquiryOrderDO::getSupplierId, supplierId)); |
| | | } |
| | | |
| | | default long selectCountBySupplierId(Long supplierId) { |
| | | return selectCount(SrmInquiryOrderDO::getSupplierId, supplierId); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.mysql; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmInquiryQuoteDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface SrmInquiryQuoteMapper extends BaseMapperX<SrmInquiryQuoteDO> { |
| | | |
| | | default List<SrmInquiryQuoteDO> selectListByInquiryId(Long inquiryId) { |
| | | return selectList(new LambdaQueryWrapperX<SrmInquiryQuoteDO>() |
| | | .eq(SrmInquiryQuoteDO::getInquiryId, inquiryId) |
| | | .orderByAsc(SrmInquiryQuoteDO::getInquiryItemId) |
| | | .orderByAsc(SrmInquiryQuoteDO::getId)); |
| | | } |
| | | |
| | | default SrmInquiryQuoteDO selectByItemIdAndSupplierId(Long inquiryItemId, Long supplierId) { |
| | | return selectOne(new LambdaQueryWrapperX<SrmInquiryQuoteDO>() |
| | | .eq(SrmInquiryQuoteDO::getInquiryItemId, inquiryItemId) |
| | | .eq(SrmInquiryQuoteDO::getSupplierId, supplierId)); |
| | | } |
| | | |
| | | default void deleteByInquiryId(Long inquiryId) { |
| | | delete(new LambdaQueryWrapperX<SrmInquiryQuoteDO>() |
| | | .eq(SrmInquiryQuoteDO::getInquiryId, inquiryId)); |
| | | } |
| | | |
| | | default long selectCountBySupplierId(Long supplierId) { |
| | | return selectCount(SrmInquiryQuoteDO::getSupplierId, supplierId); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.mysql; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmInquirySupplierDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface SrmInquirySupplierMapper extends BaseMapperX<SrmInquirySupplierDO> { |
| | | |
| | | default List<SrmInquirySupplierDO> selectListByInquiryId(Long inquiryId) { |
| | | return selectList(new LambdaQueryWrapperX<SrmInquirySupplierDO>() |
| | | .eq(SrmInquirySupplierDO::getInquiryId, inquiryId) |
| | | .orderByAsc(SrmInquirySupplierDO::getId)); |
| | | } |
| | | |
| | | default SrmInquirySupplierDO selectByInquiryIdAndSupplierId(Long inquiryId, Long supplierId) { |
| | | return selectOne(new LambdaQueryWrapperX<SrmInquirySupplierDO>() |
| | | .eq(SrmInquirySupplierDO::getInquiryId, inquiryId) |
| | | .eq(SrmInquirySupplierDO::getSupplierId, supplierId)); |
| | | } |
| | | |
| | | default void deleteByInquiryId(Long inquiryId) { |
| | | delete(new LambdaQueryWrapperX<SrmInquirySupplierDO>() |
| | | .eq(SrmInquirySupplierDO::getInquiryId, inquiryId)); |
| | | } |
| | | |
| | | default long selectCountBySupplierId(Long supplierId) { |
| | | return selectCount(SrmInquirySupplierDO::getSupplierId, supplierId); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.dal.mysql; |
| | | |
| | | import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierBankDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface SrmSupplierBankMapper extends BaseMapperX<SrmSupplierBankDO> { |
| | | |
| | | default List<SrmSupplierBankDO> selectListBySupplierId(Long supplierId) { |
| | | return selectList(new LambdaQueryWrapperX<SrmSupplierBankDO>() |
| | | .eq(SrmSupplierBankDO::getSupplierId, supplierId) |
| | | .orderByAsc(SrmSupplierBankDO::getSort) |
| | | .orderByAsc(SrmSupplierBankDO::getId)); |
| | | } |
| | | |
| | | default void deleteBySupplierId(Long supplierId) { |
| | | delete(new LambdaQueryWrapperX<SrmSupplierBankDO>() |
| | | .eq(SrmSupplierBankDO::getSupplierId, supplierId)); |
| | | } |
| | | |
| | | default long selectCountBySupplierId(Long supplierId) { |
| | | return selectCount(SrmSupplierBankDO::getSupplierId, supplierId); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.SrmSupplierPageReqVO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierDO; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Select; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | public interface SrmSupplierMapper extends BaseMapperX<SrmSupplierDO> { |
| | | |
| | | default PageResult<SrmSupplierDO> selectPage(SrmSupplierPageReqVO reqVO) { |
| | | LambdaQueryWrapperX<SrmSupplierDO> wrapper = new LambdaQueryWrapperX<SrmSupplierDO>() |
| | | return selectPage(reqVO, new LambdaQueryWrapperX<SrmSupplierDO>() |
| | | .likeIfPresent(SrmSupplierDO::getCode, reqVO.getCode()) |
| | | .likeIfPresent(SrmSupplierDO::getName, reqVO.getName()) |
| | | .eqIfPresent(SrmSupplierDO::getType, reqVO.getType()) |
| | | .eqIfPresent(SrmSupplierDO::getStatus, reqVO.getStatus()) |
| | | .likeIfPresent(SrmSupplierDO::getContactName, reqVO.getContactName()) |
| | | .likeIfPresent(SrmSupplierDO::getContactMobile, reqVO.getContactMobile()) |
| | | .orderByDesc(SrmSupplierDO::getId); |
| | | if (Boolean.TRUE.equals(reqVO.getApproved())) { |
| | | wrapper.apply("id IN (SELECT supplier_id FROM srm_supplier_apply WHERE apply_status = 40 AND supplier_id IS NOT NULL AND deleted = 0)"); |
| | | } |
| | | if (Boolean.TRUE.equals(reqVO.getExcludeApproved())) { |
| | | wrapper.apply("id NOT IN (SELECT supplier_id FROM srm_supplier_apply WHERE apply_status = 40 AND supplier_id IS NOT NULL AND deleted = 0)"); |
| | | } |
| | | return selectPage(reqVO, wrapper); |
| | | .orderByDesc(SrmSupplierDO::getId)); |
| | | } |
| | | |
| | | default SrmSupplierDO selectByCode(String code) { |
| | |
| | | default List<SrmSupplierDO> selectListByStatus(Integer status) { |
| | | return selectList(SrmSupplierDO::getStatus, status); |
| | | } |
| | | |
| | | @Select("SELECT DISTINCT s.* FROM srm_supplier s " + |
| | | "INNER JOIN srm_supplier_apply a ON a.supplier_id = s.id " + |
| | | "WHERE a.apply_status = 40 AND s.status = 0 AND s.deleted = 0") |
| | | List<SrmSupplierDO> selectApprovedList(); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.enums; |
| | | |
| | | import cn.iocoder.yudao.framework.common.core.ArrayValuable; |
| | | import lombok.Getter; |
| | | import lombok.RequiredArgsConstructor; |
| | | |
| | | import java.util.Arrays; |
| | | |
| | | /** |
| | | * ææ ä¿è¯ééåç¶ææä¸¾ |
| | | */ |
| | | @RequiredArgsConstructor |
| | | @Getter |
| | | public enum BidBondRefundStatusEnum implements ArrayValuable<Integer> { |
| | | |
| | | NOT_REFUNDED(0, "æªéå"), |
| | | PARTIAL_REFUNDED(1, "é¨åéå"), |
| | | REFUNDED(2, "å·²éå"), |
| | | NO_NEED(3, "æ ééå"); |
| | | |
| | | public static final Integer[] ARRAYS = Arrays.stream(values()) |
| | | .map(BidBondRefundStatusEnum::getStatus).toArray(Integer[]::new); |
| | | |
| | | private final Integer status; |
| | | private final String name; |
| | | |
| | | @Override |
| | | public Integer[] array() { |
| | | return ARRAYS; |
| | | } |
| | | |
| | | } |
| | |
| | | ErrorCode SUPPLIER_CODE_EXISTS = new ErrorCode(1_040_100_001, "ä¾åºåç¼ç å·²åå¨"); |
| | | ErrorCode SUPPLIER_EXISTS_REFERENCE = new ErrorCode(1_040_100_002, "ä¾åºå被ä¸å¡å¼ç¨ï¼æ æ³å é¤"); |
| | | ErrorCode SUPPLIER_CONTACT_NOT_EXISTS = new ErrorCode(1_040_100_003, "ä¾åºåè系人ä¸åå¨"); |
| | | ErrorCode SUPPLIER_NOT_ENABLE = new ErrorCode(1_040_100_004, "ä¾åºåå·²åç¨ï¼æ æ³å䏿æ "); |
| | | ErrorCode SUPPLIER_NOT_ENABLE = new ErrorCode(1_040_100_004, "ä¾åºåå·²åç¨ï¼æ æ³åä¸è¯¢ä»·/éè´"); |
| | | ErrorCode SUPPLIER_IMPORT_LIST_IS_EMPTY = new ErrorCode(1_040_100_005, "导å
¥çä¾åºåæ°æ®ä¸è½ä¸ºç©º"); |
| | | ErrorCode SUPPLIER_CONTACT_NAME_REQUIRED = new ErrorCode(1_040_100_006, "ä¾åºåè系人å§åä¸è½ä¸ºç©º"); |
| | | ErrorCode SUPPLIER_BANK_INFO_INCOMPLETE = new ErrorCode(1_040_100_007, "ä¾åºåé¶è¡è´¦æ·ç弿·è¡æé¶è¡è´¦å·ä¸è½ä¸ºç©º"); |
| | | |
| | | // ========== ä¾åºååå
¥ 1_040_200_000 ========== |
| | | ErrorCode APPLY_NOT_EXISTS = new ErrorCode(1_040_200_000, "åå
¥ç³è¯·ä¸åå¨"); |
| | | ErrorCode APPLY_STATUS_NOT_DRAFT = new ErrorCode(1_040_200_001, "å½åç¶æä¸å
许æäº¤"); |
| | | ErrorCode APPLY_STATUS_NOT_PENDING = new ErrorCode(1_040_200_002, "å½åç¶æä¸å
è®¸å®¡æ ¸"); |
| | | ErrorCode APPLY_SUPPLIER_EXISTS = new ErrorCode(1_040_200_003, "该ä¾åºåå·²åå¨åå
¥è®°å½"); |
| | | ErrorCode APPLY_SUPPLIER_NAME_REQUIRED = new ErrorCode(1_040_200_004, "æªéæ©SRMä¾åºåæ¶ï¼ä¾åºååç§°ä¸è½ä¸ºç©º"); |
| | | ErrorCode APPLY_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_040_200_005, "ä¾åºååå
¥å®¡æ¹åç±»ä¸åå¨ï¼è¯·å
å¨BPM模åå建ä¾åºååå
¥å®¡æ¹æµç¨åç±»"); |
| | | ErrorCode APPLY_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_040_200_006, "ä¾åºååå
¥å®¡æ¹åç±»ä¸æ²¡æå¯ç¨çæµç¨æ¨¡åï¼è¯·å
å建并å叿µç¨"); |
| | | // ========== 询价æ¯ä»· 1_040_600_000 ========== |
| | | ErrorCode INQUIRY_NOT_EXISTS = new ErrorCode(1_040_600_000, "询价åä¸åå¨"); |
| | | ErrorCode INQUIRY_STATUS_NOT_EDITABLE = new ErrorCode(1_040_600_001, "询价åå½åç¶æä¸å
许ç¼è¾"); |
| | | ErrorCode INQUIRY_STATUS_NOT_QUOTING = new ErrorCode(1_040_600_002, "询价åå½åç¶æä¸å
许å½å
¥æ¥ä»·"); |
| | | ErrorCode INQUIRY_STATUS_NOT_CONFIRMABLE = new ErrorCode(1_040_600_003, "询价åå½åç¶æä¸å
许确认转订å"); |
| | | ErrorCode INQUIRY_STATUS_NOT_CANCELLABLE = new ErrorCode(1_040_600_004, "询价åå½åç¶æä¸å
è®¸åæ¶"); |
| | | ErrorCode INQUIRY_ITEM_EMPTY = new ErrorCode(1_040_600_005, "è¯¢ä»·åæ²¡æäº§åè¡ï¼æ æ³ä¿å"); |
| | | ErrorCode INQUIRY_SUPPLIER_EMPTY = new ErrorCode(1_040_600_006, "è¯¢ä»·åæ²¡æåä¸ä¾åºåï¼æ æ³ä¿å"); |
| | | ErrorCode INQUIRY_SUPPLIER_DUPLICATE = new ErrorCode(1_040_600_007, "询价ååå¨éå¤ä¾åºå"); |
| | | ErrorCode INQUIRY_SUPPLIER_NOT_PARTICIPANT = new ErrorCode(1_040_600_008, "æ¥ä»·ä¾åºåæªåä¸è¯¥è¯¢ä»·å"); |
| | | ErrorCode INQUIRY_QUOTE_NOT_EXISTS = new ErrorCode(1_040_600_009, "æ¥ä»·ä¸åå¨"); |
| | | ErrorCode INQUIRY_QUOTE_PRICE_INVALID = new ErrorCode(1_040_600_010, "æ¥ä»·åä»·å¿
é¡»å¤§äº 0"); |
| | | ErrorCode INQUIRY_WINNER_REQUIRED = new ErrorCode(1_040_600_011, "äº§åæªéæ©ä¸æ æ¥ä»·"); |
| | | ErrorCode INQUIRY_WINNER_DUPLICATE = new ErrorCode(1_040_600_012, "åä¸äº§åéå¤éæ©ä¸æ æ¥ä»·"); |
| | | ErrorCode INQUIRY_WINNER_QUOTE_MISMATCH = new ErrorCode(1_040_600_013, "䏿 æ¥ä»·ä¸å±äºæé产å"); |
| | | ErrorCode INQUIRY_ALREADY_CONFIRMED = new ErrorCode(1_040_600_014, "询价å已被确认转订åï¼è¯·å·æ°åæ¥ç"); |
| | | ErrorCode INQUIRY_ORDER_GENERATE_FAIL = new ErrorCode(1_040_600_015, "询价åçæéè´è®¢å失败"); |
| | | ErrorCode INQUIRY_NO_GENERATE_FAIL = new ErrorCode(1_040_600_016, "询价åå·çæå¤±è´¥"); |
| | | |
| | | // ========== ä¾åºåèµè´¨ 1_040_300_000 ========== |
| | | ErrorCode CERTIFICATE_NOT_EXISTS = new ErrorCode(1_040_300_000, "èµè´¨è¯ä¹¦ä¸åå¨"); |
| | | ErrorCode CERTIFICATE_EXPIRED = new ErrorCode(1_040_300_001, "èµè´¨è¯ä¹¦å·²è¿æ"); |
| | | |
| | | // ========== ä¾åºåè¯ä»· 1_040_400_000 ========== |
| | | ErrorCode EVALUATION_NOT_EXISTS = new ErrorCode(1_040_400_000, "绩æè¯ä»·ä¸åå¨"); |
| | | ErrorCode EVALUATION_PERIOD_EXISTS = new ErrorCode(1_040_400_001, "该è¯ä»·å¨æå·²åå¨è¯ä»·è®°å½"); |
| | | |
| | | // ========== æææ 管ç 1_040_500_000 ========== |
| | | ErrorCode TENDER_NOT_EXISTS = new ErrorCode(1_040_500_000, "ææ é¡¹ç®ä¸åå¨"); |
| | | ErrorCode TENDER_STATUS_NOT_DRAFT = new ErrorCode(1_040_500_001, "å½åç¶æä¸å
许ç¼è¾"); |
| | | ErrorCode TENDER_STATUS_NOT_PUBLISHED = new ErrorCode(1_040_500_002, "å½åç¶æä¸å
è®¸ææ "); |
| | | ErrorCode TENDER_STATUS_NOT_BIDDING = new ErrorCode(1_040_500_009, "å½åç¶æä¸å
è®¸è¯æ "); |
| | | ErrorCode TENDER_STATUS_ALREADY_CLOSED = new ErrorCode(1_040_500_010, "å·²å
³éç项ç®ä¸å
许æä½"); |
| | | ErrorCode BID_NOT_EXISTS = new ErrorCode(1_040_500_003, "ææ è®°å½ä¸åå¨"); |
| | | ErrorCode BID_SUPPLIER_EXISTS = new ErrorCode(1_040_500_004, "ä¾åºåå·²å䏿æ "); |
| | | ErrorCode BID_NO_EXISTS = new ErrorCode(1_040_500_016, "ææ ç¼å·å·²åå¨"); |
| | | ErrorCode BID_PAST_END_TIME = new ErrorCode(1_040_500_005, "ææ å·²æªæ¢"); |
| | | ErrorCode BID_SUPPLIER_NOT_APPROVED = new ErrorCode(1_040_500_011, "ä¾åºåæªéè¿åå
¥å®¡æ¹ï¼æ æ³å䏿æ "); |
| | | ErrorCode BID_WITHDRAWN_CANNOT_QUOTE = new ErrorCode(1_040_500_012, "ææ å·²æ¤æ ï¼ä¸å
许æ¥ä»·"); |
| | | ErrorCode EVALUATION_NOT_EXISTS_TENDER = new ErrorCode(1_040_500_006, "è¯æ è®°å½ä¸åå¨"); |
| | | ErrorCode AWARD_NOT_EXISTS = new ErrorCode(1_040_500_007, "宿 è®°å½ä¸åå¨"); |
| | | ErrorCode AWARD_SUPPLIER_EXISTS = new ErrorCode(1_040_500_008, "å·²åå¨å®æ è®°å½"); |
| | | ErrorCode AWARD_STATUS_NOT_AWARDED = new ErrorCode(1_040_500_013, "ä»
已宿 ç¶æå¯çæéè´è®¢å"); |
| | | ErrorCode AWARD_SUPPLIER_NOT_SYNCED = new ErrorCode(1_040_500_014, "ä¾åºåæªåæ¥è³ERPï¼æ æ³çæéè´è®¢å"); |
| | | ErrorCode AWARD_QUOTE_NOT_EXISTS = new ErrorCode(1_040_500_015, "䏿 ä¾åºåæ¥ä»·ä¸åå¨"); |
| | | |
| | | // ç¶ææ ¡éªç²¾ç»åé误ç |
| | | ErrorCode TENDER_MATERIAL_LOCKED = new ErrorCode(1_040_500_022, "ç©ææ¸
åå·²éå®ï¼ä¸å
许å¢å æ¹"); |
| | | ErrorCode TENDER_BID_FORBIDDEN = new ErrorCode(1_040_500_023, "å½åç¶æä¸å
许æ°å¢ææ "); |
| | | ErrorCode TENDER_QUOTE_FORBIDDEN = new ErrorCode(1_040_500_024, "å½åç¶æä¸å
许æ¥ä»·æä½"); |
| | | ErrorCode TENDER_END_TIME_PASSED = new ErrorCode(1_040_500_025, "ææ æªæ¢æ¶é´å·²è¿ï¼ä¸å
许æ°å¢ææ "); |
| | | ErrorCode TENDER_PROJECT_LOCKED = new ErrorCode(1_040_500_026, "项ç®å·²éå®ï¼å½åç¶æä¸å
许æä½"); |
| | | ErrorCode TENDER_HAS_BIDS_CANNOT_DELETE = new ErrorCode(1_040_500_027, "å·²åå¨ææ æ°æ®ï¼ä¸å
许å é¤"); |
| | | ErrorCode TENDER_BID_FORBIDDEN_WITHDRAW = new ErrorCode(1_040_500_028, "å½åç¶æä¸å
è®¸æ¤æ "); |
| | | ErrorCode TENDER_EVALUATION_FORBIDDEN = new ErrorCode(1_040_500_029, "å½åç¶æä¸å
è®¸è¯æ æä½"); |
| | | ErrorCode TENDER_AWARD_FORBIDDEN = new ErrorCode(1_040_500_030, "å½åç¶æä¸å
è®¸å®æ æä½"); |
| | | ErrorCode AWARD_BID_NOT_IN_PROJECT = new ErrorCode(1_040_500_031, "ææ è®°å½ä¸å±äºå½åææ é¡¹ç®"); |
| | | ErrorCode AWARD_BID_WITHDRAWN = new ErrorCode(1_040_500_032, "ææ å·²æ¤æ ï¼ä¸å
è®¸å®æ "); |
| | | ErrorCode AWARD_SUPPLIER_NOT_MATCH_BID = new ErrorCode(1_040_500_033, "ä¾åºå䏿æ è®°å½ä¸ä¸è´"); |
| | | |
| | | // ç®ææ¨¡å¼ |
| | | ErrorCode TENDER_MODE_NOT_SIMPLE = new ErrorCode(1_040_500_034, "å½å项ç®éç®ææ¨¡å¼ï¼ä¸å
è®¸æ¤æä½"); |
| | | ErrorCode TENDER_STATUS_NOT_PRICE_COMPARING = new ErrorCode(1_040_500_035, "å½åç¶æéæ¯ä»·ä¸ï¼ä¸å
许确认"); |
| | | ErrorCode TENDER_CONFIRM_BID_REQUIRED = new ErrorCode(1_040_500_036, "ç®ææ¨¡å¼ç¡®è®¤æ¶å¿
é¡»æå®ä¸æ ææ "); |
| | | ErrorCode TENDER_NO_MATERIALS = new ErrorCode(1_040_500_037, "ææ é¡¹ç®æ²¡ææ·»å ç©æï¼æ æ³å¼å§æ¯ä»·"); |
| | | ErrorCode TENDER_NO_BIDS = new ErrorCode(1_040_500_038, "ææ é¡¹ç®æ²¡æä¾åºåææ ï¼æ æ³å¼å§æ¯ä»·"); |
| | | |
| | | // ========== éç¨ ========== |
| | | ErrorCode QUOTE_MATERIAL_DUPLICATE = new ErrorCode(1_040_900_001, "è¯¥ææ å·²åå¨ç¸åç©æçæ¥ä»·"); |
| | | // ========== ææ ä¿è¯é 1_040_700_000 ========== |
| | | ErrorCode BOND_NOT_EXISTS = new ErrorCode(1_040_700_000, "ææ ä¿è¯éè®°å½ä¸åå¨"); |
| | | ErrorCode BOND_NO_EXISTS = new ErrorCode(1_040_700_001, "ææ ä¿è¯éåå·å·²åå¨"); |
| | | ErrorCode BOND_AMOUNT_INVALID = new ErrorCode(1_040_700_002, "ä¿è¯ééé¢ä¸è½å°äº 0"); |
| | | ErrorCode BOND_REFUND_AMOUNT_INVALID = new ErrorCode(1_040_700_003, "éåéé¢å¿
é¡»å¤§äº 0 ä¸ä¸è½è¶
è¿ä¿è¯ééé¢"); |
| | | ErrorCode BOND_REFUND_DATE_REQUIRED = new ErrorCode(1_040_700_004, "éåç¶æä¸ºå·²éåæ¶ï¼é忥æä¸è½ä¸ºç©º"); |
| | | ErrorCode BOND_SUPPLIER_MISMATCH = new ErrorCode(1_040_700_005, "å
³èéè´è®¢åçä¾åºåä¸ä¿è¯éä¾åºåä¸ä¸è´"); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.enums; |
| | | |
| | | import cn.iocoder.yudao.framework.common.core.ArrayValuable; |
| | | import lombok.Getter; |
| | | import lombok.RequiredArgsConstructor; |
| | | |
| | | import java.util.Arrays; |
| | | |
| | | /** |
| | | * SRM 询价åç¶ææä¸¾ |
| | | */ |
| | | @RequiredArgsConstructor |
| | | @Getter |
| | | public enum InquiryStatusEnum implements ArrayValuable<Integer> { |
| | | |
| | | DRAFT(0, "è稿"), |
| | | QUOTING(10, "询价ä¸"), |
| | | CONFIRMED(20, "已转订å"), |
| | | CANCELLED(30, "已忶"); |
| | | |
| | | public static final Integer[] ARRAYS = Arrays.stream(values()) |
| | | .map(InquiryStatusEnum::getStatus).toArray(Integer[]::new); |
| | | |
| | | private final Integer status; |
| | | private final String name; |
| | | |
| | | @Override |
| | | public Integer[] array() { |
| | | return ARRAYS; |
| | | } |
| | | |
| | | } |
| | |
| | | */ |
| | | public interface LogRecordConstants { |
| | | |
| | | // ======================= SRM_TENDER ææ é¡¹ç® ======================= |
| | | String LOG_TENDER_TYPE = "SRM ææ é¡¹ç®"; |
| | | String LOG_TENDER_UPDATE_SUB_TYPE = "æ´æ°ææ 项ç®"; |
| | | String LOG_TENDER_UPDATE_SUCCESS = "æ´æ°äºææ 项ç®ã{{#tenderName}}ãï¼" |
| | | + "ææ è¯´æï¼{{#oldTenderDesc}} â {{#newTenderDesc}}ï¼" |
| | | + "èµè´¨è¦æ±ï¼{{#oldQualification}} â {{#newQualification}}"; |
| | | |
| | | // ======================= SRM_BID ææ ======================= |
| | | String LOG_BID_TYPE = "SRM ææ "; |
| | | String LOG_BID_CREATE_SUB_TYPE = "åå»ºææ "; |
| | | String LOG_BID_CREATE_SUCCESS = "ä¾åºåå¯¹ææ é¡¹ç®ã{{#tenderName}}ãæäº¤äºææ ã{{#bidNo}}ã"; |
| | | String LOG_BID_WITHDRAW_SUB_TYPE = "æ¤æ "; |
| | | String LOG_BID_WITHDRAW_SUCCESS = "æ¤åäºææ ã{{#bidNo}}ã"; |
| | | |
| | | // ======================= SRM_QUOTE æ¥ä»· ======================= |
| | | String LOG_QUOTE_TYPE = "SRM æ¥ä»·"; |
| | | String LOG_QUOTE_CREATE_SUB_TYPE = "å建æ¥ä»·"; |
| | | String LOG_QUOTE_CREATE_SUCCESS = "æäº¤äºææ çä¾åºåæ¥ä»·"; |
| | | String LOG_QUOTE_UPDATE_SUB_TYPE = "æ´æ°æ¥ä»·"; |
| | | String LOG_QUOTE_UPDATE_SUCCESS = "æ´æ°äºææ çä¾åºåæ¥ä»·"; |
| | | |
| | | // ======================= SRM_EVALUATION è¯æ ======================= |
| | | String LOG_EVALUATION_TYPE = "SRM è¯æ "; |
| | | String LOG_EVALUATION_CREATE_SUB_TYPE = "åå»ºè¯æ "; |
| | | String LOG_EVALUATION_CREATE_SUCCESS = "å¯¹ææ é¡¹ç®è¿è¡äºè¯æ è¯å"; |
| | | String LOG_EVALUATION_UPDATE_SUB_TYPE = "æ´æ°è¯æ "; |
| | | String LOG_EVALUATION_UPDATE_SUCCESS = "æ´æ°äºè¯æ è®°å½"; |
| | | |
| | | // ======================= SRM_AWARD 宿 ======================= |
| | | String LOG_AWARD_TYPE = "SRM 宿 "; |
| | | String LOG_AWARD_CREATE_SUB_TYPE = "åå»ºå®æ "; |
| | | String LOG_AWARD_CREATE_SUCCESS = "å建äºå®æ ã{{#createReqVO.awardNo}}ã"; |
| | | String LOG_AWARD_APPROVE_SUB_TYPE = "审æ¹å®æ "; |
| | | String LOG_AWARD_APPROVE_SUCCESS = "审æ¹éè¿äºå®æ è®°å½"; |
| | | String LOG_AWARD_ORDER_SUB_TYPE = "çæéè´è®¢å"; |
| | | String LOG_AWARD_ORDER_SUCCESS = "宿 è®°å½çæäºéè´è®¢å"; |
| | | |
| | | // ======================= SRM_SUPPLIER ä¾åºå ======================= |
| | | String LOG_SUPPLIER_TYPE = "SRM ä¾åºå"; |
| | | String LOG_SUPPLIER_IMPORT_SUB_TYPE = "导å
¥ä¾åºå"; |
| | | String LOG_SUPPLIER_IMPORT_SUCCESS = "导å
¥äºä¾åºåï¼{{#importSummary}}"; |
| | | |
| | | // ======================= SRM_INQUIRY 询价æ¯ä»· ======================= |
| | | String LOG_INQUIRY_TYPE = "SRM 询价æ¯ä»·"; |
| | | String LOG_INQUIRY_CREATE_SUB_TYPE = "å建询价å"; |
| | | String LOG_INQUIRY_CREATE_SUCCESS = "å建äºè¯¢ä»·åã{{#no}}ã"; |
| | | String LOG_INQUIRY_CONFIRM_SUB_TYPE = "确认询价转订å"; |
| | | String LOG_INQUIRY_CONFIRM_SUCCESS = "确认询价åã{{#no}}ãå¹¶çæéè´è®¢å"; |
| | | |
| | | // ======================= SRM_BID_BOND ææ ä¿è¯é ======================= |
| | | String LOG_BID_BOND_TYPE = "SRM ææ ä¿è¯é"; |
| | | String LOG_BID_BOND_CREATE_SUB_TYPE = "å建ä¿è¯éè®°å½"; |
| | | String LOG_BID_BOND_CREATE_SUCCESS = "å建äºä¿è¯éè®°å½ã{{#no}}ã"; |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.service.bond; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondPageReqVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondRespVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondSaveReqVO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmBidBondDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | /** |
| | | * SRM ææ ä¿è¯é Service æ¥å£ |
| | | */ |
| | | public interface SrmBidBondService { |
| | | |
| | | Long createBidBond(@Valid SrmBidBondSaveReqVO createReqVO); |
| | | |
| | | void updateBidBond(@Valid SrmBidBondSaveReqVO updateReqVO); |
| | | |
| | | void deleteBidBond(Long id); |
| | | |
| | | SrmBidBondDO getBidBond(Long id); |
| | | |
| | | SrmBidBondRespVO getBidBondDetail(Long id); |
| | | |
| | | PageResult<SrmBidBondRespVO> getBidBondPage(SrmBidBondPageReqVO pageReqVO); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.service.bond; |
| | | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.erp.api.purchase.ErpPurchaseOrderApi; |
| | | import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderRespDTO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondPageReqVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondRespVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.bond.vo.SrmBidBondSaveReqVO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmBidBondDO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmInquiryDO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierDO; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmBidBondMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmInquiryMapper; |
| | | import cn.iocoder.yudao.module.srm.enums.BidBondRefundStatusEnum; |
| | | import cn.iocoder.yudao.module.srm.enums.ErrorCodeConstants; |
| | | import cn.iocoder.yudao.module.srm.service.supplier.SrmSupplierService; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * SRM ææ ä¿è¯é Service å®ç° |
| | | */ |
| | | @Service |
| | | @Validated |
| | | @Slf4j |
| | | public class SrmBidBondServiceImpl implements SrmBidBondService { |
| | | |
| | | private static final DateTimeFormatter NO_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMM"); |
| | | |
| | | @Resource |
| | | private SrmBidBondMapper bidBondMapper; |
| | | @Resource |
| | | private SrmInquiryMapper inquiryMapper; |
| | | @Resource |
| | | private SrmSupplierService supplierService; |
| | | @Resource |
| | | private ErpPurchaseOrderApi erpPurchaseOrderApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createBidBond(SrmBidBondSaveReqVO createReqVO) { |
| | | validateBidBond(createReqVO); |
| | | SrmBidBondDO bond = BeanUtils.toBean(createReqVO, SrmBidBondDO.class); |
| | | bond.setId(null); |
| | | bond.setNo(generateBondNo()); |
| | | bond.setWon(Boolean.TRUE.equals(createReqVO.getWon())); |
| | | bond.setRefundStatus(resolveRefundStatus(createReqVO)); |
| | | if (bond.getRefundStatus() == null) { |
| | | bond.setRefundStatus(BidBondRefundStatusEnum.NOT_REFUNDED.getStatus()); |
| | | } |
| | | bidBondMapper.insert(bond); |
| | | return bond.getId(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateBidBond(SrmBidBondSaveReqVO updateReqVO) { |
| | | validateBidBondExists(updateReqVO.getId()); |
| | | validateBidBond(updateReqVO); |
| | | SrmBidBondDO updateObj = BeanUtils.toBean(updateReqVO, SrmBidBondDO.class); |
| | | updateObj.setNo(null); |
| | | updateObj.setWon(Boolean.TRUE.equals(updateReqVO.getWon())); |
| | | updateObj.setRefundStatus(resolveRefundStatus(updateReqVO)); |
| | | bidBondMapper.updateById(updateObj); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteBidBond(Long id) { |
| | | validateBidBondExists(id); |
| | | bidBondMapper.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | public SrmBidBondDO getBidBond(Long id) { |
| | | return bidBondMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public SrmBidBondRespVO getBidBondDetail(Long id) { |
| | | SrmBidBondDO bond = validateBidBondExists(id); |
| | | return buildRespList(List.of(bond)).get(0); |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<SrmBidBondRespVO> getBidBondPage(SrmBidBondPageReqVO pageReqVO) { |
| | | PageResult<SrmBidBondDO> page = bidBondMapper.selectPage(pageReqVO); |
| | | return new PageResult<>(buildRespList(page.getList()), page.getTotal()); |
| | | } |
| | | |
| | | // ========== æ ¡éª ========== |
| | | |
| | | private void validateBidBond(SrmBidBondSaveReqVO reqVO) { |
| | | if (reqVO.getBondAmount() == null || reqVO.getBondAmount().compareTo(BigDecimal.ZERO) < 0) { |
| | | throw new ServiceException(ErrorCodeConstants.BOND_AMOUNT_INVALID.getCode(), |
| | | "ä¿è¯ééé¢ä¸ºã" + reqVO.getBondAmount() + "ãï¼ä¸è½å°äº 0ï¼è¯·å¡«åæ£ç¡®ç缴纳éé¢ã"); |
| | | } |
| | | SrmSupplierDO supplier = supplierService.getSupplier(reqVO.getSupplierId()); |
| | | if (supplier == null) { |
| | | throw new ServiceException(ErrorCodeConstants.SUPPLIER_NOT_EXISTS.getCode(), |
| | | "ä¾åºåID=" + reqVO.getSupplierId() + " ä¸åå¨ï¼è¯·å·æ°ä¾åºåå表åéæ°éæ©ã"); |
| | | } |
| | | // å
³è询价åï¼æ ¡éªåå¨ï¼å¹¶å¨æªå¡«é¡¹ç®åç§°æ¶èªå¨å¸¦åºè¯¢ä»·æ é¢ |
| | | if (reqVO.getInquiryId() != null) { |
| | | SrmInquiryDO inquiry = inquiryMapper.selectById(reqVO.getInquiryId()); |
| | | if (inquiry == null) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_NOT_EXISTS.getCode(), |
| | | "å
³è询价åID=" + reqVO.getInquiryId() + " ä¸åå¨ï¼è¯·å·æ°è¯¢ä»·åå表åéæ°éæ©ã"); |
| | | } |
| | | if (StrUtil.isBlank(reqVO.getProjectName())) { |
| | | reqVO.setProjectName(inquiry.getTitle()); |
| | | } |
| | | } |
| | | // å
³èéè´è®¢åï¼æ ¡éªåå¨ä¸ä¾åºåä¸è´ |
| | | if (reqVO.getPurchaseOrderId() != null) { |
| | | ErpPurchaseOrderRespDTO order = erpPurchaseOrderApi.getPurchaseOrder(reqVO.getPurchaseOrderId()) |
| | | .getCheckedData(); |
| | | if (order == null) { |
| | | throw new ServiceException(ErrorCodeConstants.BOND_NOT_EXISTS.getCode(), |
| | | "å
³èéè´è®¢åID=" + reqVO.getPurchaseOrderId() + " ä¸åå¨ï¼è¯·å·æ°éè´è®¢åå表åéæ°éæ©ã"); |
| | | } |
| | | if (!reqVO.getSupplierId().equals(order.getSupplierId())) { |
| | | throw new ServiceException(ErrorCodeConstants.BOND_SUPPLIER_MISMATCH.getCode(), |
| | | "å
³èéè´è®¢åã" + order.getNo() + "ãçä¾åºåID=" + order.getSupplierId() |
| | | + "ï¼ä¸ä¿è¯éä¾åºåID=" + reqVO.getSupplierId() + " ä¸ä¸è´ï¼è¯·éæ°éæ©è®¢åæä¾åºåã"); |
| | | } |
| | | if (reqVO.getWon() == null) { |
| | | reqVO.setWon(true); |
| | | } |
| | | } |
| | | // éåéé¢/æ¥æ |
| | | if (reqVO.getRefundAmount() != null) { |
| | | if (reqVO.getRefundAmount().compareTo(BigDecimal.ZERO) <= 0 |
| | | || reqVO.getRefundAmount().compareTo(reqVO.getBondAmount()) > 0) { |
| | | throw new ServiceException(ErrorCodeConstants.BOND_REFUND_AMOUNT_INVALID.getCode(), |
| | | "éåéé¢ä¸ºã" + reqVO.getRefundAmount() + "ãï¼ä¿è¯ééé¢ä¸ºã" + reqVO.getBondAmount() |
| | | + "ãï¼éåéé¢å¿
é¡»å¤§äº 0 ä¸ä¸è½è¶
è¿ä¿è¯ééé¢ï¼è¯·ä¿®æ¹åéæ°ä¿åã"); |
| | | } |
| | | } |
| | | if (BidBondRefundStatusEnum.REFUNDED.getStatus().equals(reqVO.getRefundStatus())) { |
| | | if (reqVO.getRefundDate() == null) { |
| | | throw new ServiceException(ErrorCodeConstants.BOND_REFUND_DATE_REQUIRED.getCode(), |
| | | "éåç¶æéæ©ãå·²éåãæ¶ï¼é忥æä¸è½ä¸ºç©ºï¼è¯·å¡«åå®é
é忥æã"); |
| | | } |
| | | if (reqVO.getRefundAmount() == null) { |
| | | throw new ServiceException(ErrorCodeConstants.BOND_REFUND_AMOUNT_INVALID.getCode(), |
| | | "éåç¶æéæ©ãå·²éåãæ¶ï¼éåéé¢ä¸è½ä¸ºç©ºï¼è¯·å¡«åå®é
éåéé¢ã"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æªæ¾å¼éæ©éåç¶ææ¶ï¼ææ¯å¦ä¸æ æ¨å¯¼é»è®¤å¼ |
| | | */ |
| | | private Integer resolveRefundStatus(SrmBidBondSaveReqVO reqVO) { |
| | | if (reqVO.getRefundStatus() != null) { |
| | | return reqVO.getRefundStatus(); |
| | | } |
| | | if (Boolean.TRUE.equals(reqVO.getWon())) { |
| | | return BidBondRefundStatusEnum.NO_NEED.getStatus(); |
| | | } |
| | | return BidBondRefundStatusEnum.NOT_REFUNDED.getStatus(); |
| | | } |
| | | |
| | | private SrmBidBondDO validateBidBondExists(Long id) { |
| | | SrmBidBondDO bond = bidBondMapper.selectById(id); |
| | | if (bond == null) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.BOND_NOT_EXISTS); |
| | | } |
| | | return bond; |
| | | } |
| | | |
| | | private String generateBondNo() { |
| | | String date = LocalDate.now().format(NO_DATE_FORMAT); |
| | | for (int attempt = 0; attempt < 20; attempt++) { |
| | | int seq = (int) (Math.random() * 9000) + 1000; |
| | | String no = "BZ" + date + String.format("%04d", seq); |
| | | if (bidBondMapper.selectByNo(no) == null) { |
| | | return no; |
| | | } |
| | | } |
| | | throw new ServiceException(ErrorCodeConstants.BOND_NO_EXISTS.getCode(), |
| | | "ä¿è¯éåå·å¨å¤æ¬¡å°è¯åä»éå¤ï¼è¯·ç¨åéè¯ã"); |
| | | } |
| | | |
| | | // ========== ç»è£
========== |
| | | |
| | | private List<SrmBidBondRespVO> buildRespList(List<SrmBidBondDO> bonds) { |
| | | if (bonds == null || bonds.isEmpty()) { |
| | | return List.of(); |
| | | } |
| | | Set<Long> supplierIds = bonds.stream().map(SrmBidBondDO::getSupplierId).collect(Collectors.toSet()); |
| | | Map<Long, SrmSupplierDO> supplierMap = supplierService.getSupplierMap(supplierIds); |
| | | Set<Long> inquiryIds = bonds.stream().map(SrmBidBondDO::getInquiryId) |
| | | .filter(java.util.Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, SrmInquiryDO> inquiryMap = inquiryIds.isEmpty() ? Map.of() |
| | | : inquiryMapper.selectBatchIds(inquiryIds).stream() |
| | | .collect(Collectors.toMap(SrmInquiryDO::getId, item -> item)); |
| | | |
| | | return bonds.stream().map(bond -> { |
| | | SrmBidBondRespVO respVO = BeanUtils.toBean(bond, SrmBidBondRespVO.class); |
| | | SrmSupplierDO supplier = supplierMap.get(bond.getSupplierId()); |
| | | if (supplier != null) { |
| | | respVO.setSupplierName(supplier.getName()); |
| | | } |
| | | SrmInquiryDO inquiry = inquiryMap.get(bond.getInquiryId()); |
| | | if (inquiry != null) { |
| | | respVO.setInquiryNo(inquiry.getNo()); |
| | | if (StrUtil.isBlank(respVO.getProjectName())) { |
| | | respVO.setProjectName(inquiry.getTitle()); |
| | | } |
| | | } |
| | | if (bond.getPurchaseOrderId() != null) { |
| | | try { |
| | | ErpPurchaseOrderRespDTO order = erpPurchaseOrderApi.getPurchaseOrder(bond.getPurchaseOrderId()) |
| | | .getCheckedData(); |
| | | if (order != null) { |
| | | respVO.setPurchaseOrderNo(order.getNo()); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.warn("[buildRespList] è·åéè´è®¢åå·å¤±è´¥ï¼purchaseOrderId={}", bond.getPurchaseOrderId(), ex); |
| | | } |
| | | } |
| | | return respVO; |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.service.inquiry; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo.*; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmInquiryDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * SRM 询价æ¯ä»· Service æ¥å£ |
| | | */ |
| | | public interface SrmInquiryService { |
| | | |
| | | Long createInquiry(@Valid SrmInquirySaveReqVO createReqVO); |
| | | |
| | | void updateInquiry(@Valid SrmInquirySaveReqVO updateReqVO); |
| | | |
| | | void deleteInquiry(Long id); |
| | | |
| | | SrmInquiryDO getInquiry(Long id); |
| | | |
| | | /** |
| | | * è·å询价å详æ
ï¼å«äº§åè¡ãåä¸ä¾åºåãæ¥ä»·ãå·²çæè®¢åï¼ |
| | | */ |
| | | SrmInquiryRespVO getInquiryDetail(Long id); |
| | | |
| | | PageResult<SrmInquiryDO> getInquiryPage(SrmInquiryPageReqVO pageReqVO); |
| | | |
| | | /** |
| | | * è·å询价åç²¾ç®å表ï¼ç¨äºææ ä¿è¯éçä¸æéæ©ï¼ |
| | | */ |
| | | List<SrmInquiryDO> getInquirySimpleList(); |
| | | |
| | | /** |
| | | * åå¸è¯¢ä»·åï¼è稿 -> è¯¢ä»·ä¸ |
| | | */ |
| | | void publishInquiry(Long id); |
| | | |
| | | /** |
| | | * åæ¶è¯¢ä»·åï¼è稿/è¯¢ä»·ä¸ -> 已忶 |
| | | */ |
| | | void cancelInquiry(Long id); |
| | | |
| | | /** |
| | | * æ¹éä¿åæä¾åºå对询价åå产åè¡çæ¥ä»· |
| | | */ |
| | | void saveQuotes(@Valid SrmInquiryQuoteSaveReqVO saveReqVO); |
| | | |
| | | /** |
| | | * 对æ¯è§å¾æ°æ®ï¼äº§åè¡ Ã ä¾åºåæ¥ä»·ï¼ |
| | | */ |
| | | SrmInquiryRespVO getCompare(Long id); |
| | | |
| | | /** |
| | | * ç¡®è®¤ä¸æ å¹¶çæéè´è®¢åè稿 |
| | | */ |
| | | SrmInquiryConfirmRespVO confirmInquiry(@Valid SrmInquiryConfirmReqVO confirmReqVO); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.srm.service.inquiry; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| | | import cn.iocoder.yudao.framework.common.exception.ServiceException; |
| | | import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.erp.api.purchase.ErpPurchaseOrderApi; |
| | | import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderCreateReqDTO; |
| | | import cn.iocoder.yudao.module.erp.api.purchase.dto.ErpPurchaseOrderRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.MdmUnitMeasureApi; |
| | | import cn.iocoder.yudao.module.mdm.api.unit.dto.MdmUnitMeasureRespDTO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.inquiry.vo.*; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.*; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.*; |
| | | import cn.iocoder.yudao.module.srm.enums.ErrorCodeConstants; |
| | | import cn.iocoder.yudao.module.srm.enums.InquiryStatusEnum; |
| | | import cn.iocoder.yudao.module.srm.service.supplier.SrmSupplierService; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDate; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| | | |
| | | /** |
| | | * SRM 询价æ¯ä»· Service å®ç° |
| | | */ |
| | | @Service |
| | | @Validated |
| | | @Slf4j |
| | | public class SrmInquiryServiceImpl implements SrmInquiryService { |
| | | |
| | | private static final DateTimeFormatter NO_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMM"); |
| | | |
| | | @Resource |
| | | private SrmInquiryMapper inquiryMapper; |
| | | @Resource |
| | | private SrmInquiryItemMapper inquiryItemMapper; |
| | | @Resource |
| | | private SrmInquirySupplierMapper inquirySupplierMapper; |
| | | @Resource |
| | | private SrmInquiryQuoteMapper inquiryQuoteMapper; |
| | | @Resource |
| | | private SrmInquiryOrderMapper inquiryOrderMapper; |
| | | @Resource |
| | | private SrmSupplierService supplierService; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | @Resource |
| | | private ErpPurchaseOrderApi erpPurchaseOrderApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createInquiry(SrmInquirySaveReqVO createReqVO) { |
| | | validateInquiryInput(createReqVO); |
| | | SrmInquiryDO inquiry = new SrmInquiryDO(); |
| | | inquiry.setNo(generateInquiryNo()); |
| | | inquiry.setTitle(createReqVO.getTitle()); |
| | | inquiry.setStatus(InquiryStatusEnum.DRAFT.getStatus()); |
| | | inquiry.setInquiryDate(createReqVO.getInquiryDate() != null ? createReqVO.getInquiryDate() : LocalDate.now()); |
| | | inquiry.setDeadline(createReqVO.getDeadline()); |
| | | inquiry.setPurchaserUserId(createReqVO.getPurchaserUserId() != null |
| | | ? createReqVO.getPurchaserUserId() : getLoginUserId()); |
| | | inquiry.setRemark(createReqVO.getRemark()); |
| | | inquiryMapper.insert(inquiry); |
| | | List<SrmInquiryItemDO> items = saveItems(inquiry.getId(), createReqVO.getItems()); |
| | | saveSuppliers(inquiry.getId(), createReqVO.getSuppliers()); |
| | | saveItemQuotes(inquiry.getId(), items, createReqVO.getItems(), |
| | | createReqVO.getSuppliers().stream() |
| | | .map(SrmInquirySaveReqVO.Supplier::getSupplierId) |
| | | .collect(Collectors.toSet())); |
| | | return inquiry.getId(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateInquiry(SrmInquirySaveReqVO updateReqVO) { |
| | | SrmInquiryDO inquiry = validateInquiryExists(updateReqVO.getId()); |
| | | if (!InquiryStatusEnum.DRAFT.getStatus().equals(inquiry.getStatus())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_STATUS_NOT_EDITABLE.getCode(), |
| | | "询价åã" + inquiry.getNo() + "ãå½åç¶æä¸ºã" + statusName(inquiry.getStatus()) |
| | | + "ãï¼ä»
èç¨¿ç¶æå¯ç¼è¾ãå¦éè°æ´äº§åè¡æä¾åºåï¼è¯·åæ¶åéæ°å建询价åã"); |
| | | } |
| | | validateInquiryInput(updateReqVO); |
| | | |
| | | SrmInquiryDO updateObj = new SrmInquiryDO(); |
| | | updateObj.setId(inquiry.getId()); |
| | | updateObj.setTitle(updateReqVO.getTitle()); |
| | | updateObj.setInquiryDate(updateReqVO.getInquiryDate()); |
| | | updateObj.setDeadline(updateReqVO.getDeadline()); |
| | | updateObj.setPurchaserUserId(updateReqVO.getPurchaserUserId()); |
| | | updateObj.setRemark(updateReqVO.getRemark()); |
| | | inquiryMapper.updateById(updateObj); |
| | | |
| | | // èç¨¿é¶æ®µå
许æ´ä½æ¿æ¢äº§åè¡ãä¾åºå䏿¥ä»· |
| | | inquiryQuoteMapper.deleteByInquiryId(inquiry.getId()); |
| | | inquiryItemMapper.deleteByInquiryId(inquiry.getId()); |
| | | inquirySupplierMapper.deleteByInquiryId(inquiry.getId()); |
| | | List<SrmInquiryItemDO> items = saveItems(inquiry.getId(), updateReqVO.getItems()); |
| | | saveSuppliers(inquiry.getId(), updateReqVO.getSuppliers()); |
| | | saveItemQuotes(inquiry.getId(), items, updateReqVO.getItems(), |
| | | updateReqVO.getSuppliers().stream() |
| | | .map(SrmInquirySaveReqVO.Supplier::getSupplierId) |
| | | .collect(Collectors.toSet())); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteInquiry(Long id) { |
| | | SrmInquiryDO inquiry = validateInquiryExists(id); |
| | | if (!InquiryStatusEnum.DRAFT.getStatus().equals(inquiry.getStatus())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_STATUS_NOT_EDITABLE.getCode(), |
| | | "询价åã" + inquiry.getNo() + "ãå½åç¶æä¸ºã" + statusName(inquiry.getStatus()) |
| | | + "ãï¼ä»
èç¨¿ç¶æå¯å é¤ãå·²åå¸æå·²è½¬è®¢åç询价å请æ¹ä¸ºåæ¶ã"); |
| | | } |
| | | inquiryItemMapper.deleteByInquiryId(id); |
| | | inquirySupplierMapper.deleteByInquiryId(id); |
| | | inquiryQuoteMapper.deleteByInquiryId(id); |
| | | inquiryMapper.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | public SrmInquiryDO getInquiry(Long id) { |
| | | return inquiryMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public SrmInquiryRespVO getInquiryDetail(Long id) { |
| | | SrmInquiryDO inquiry = validateInquiryExists(id); |
| | | return buildInquiryResp(inquiry); |
| | | } |
| | | |
| | | @Override |
| | | public PageResult<SrmInquiryDO> getInquiryPage(SrmInquiryPageReqVO pageReqVO) { |
| | | return inquiryMapper.selectPage(pageReqVO); |
| | | } |
| | | |
| | | @Override |
| | | public List<SrmInquiryDO> getInquirySimpleList() { |
| | | return inquiryMapper.selectList(null).stream() |
| | | .filter(item -> !InquiryStatusEnum.CANCELLED.getStatus().equals(item.getStatus())) |
| | | .sorted(Comparator.comparing(SrmInquiryDO::getId).reversed()) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void publishInquiry(Long id) { |
| | | SrmInquiryDO inquiry = validateInquiryExists(id); |
| | | if (!InquiryStatusEnum.DRAFT.getStatus().equals(inquiry.getStatus())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_STATUS_NOT_QUOTING.getCode(), |
| | | "询价åã" + inquiry.getNo() + "ãå½åç¶æä¸ºã" + statusName(inquiry.getStatus()) |
| | | + "ãï¼ä»
èç¨¿ç¶æå¯åå¸ã"); |
| | | } |
| | | inquiryMapper.updateByIdAndStatus(id, InquiryStatusEnum.DRAFT.getStatus(), |
| | | new SrmInquiryDO().setStatus(InquiryStatusEnum.QUOTING.getStatus())); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void cancelInquiry(Long id) { |
| | | SrmInquiryDO inquiry = validateInquiryExists(id); |
| | | if (!InquiryStatusEnum.DRAFT.getStatus().equals(inquiry.getStatus()) |
| | | && !InquiryStatusEnum.QUOTING.getStatus().equals(inquiry.getStatus())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_STATUS_NOT_CANCELLABLE.getCode(), |
| | | "询价åã" + inquiry.getNo() + "ãå½åç¶æä¸ºã" + statusName(inquiry.getStatus()) |
| | | + "ãï¼ä»
è稿æè¯¢ä»·ä¸ç¶æå¯åæ¶ã"); |
| | | } |
| | | inquiryMapper.updateById(new SrmInquiryDO() |
| | | .setId(id).setStatus(InquiryStatusEnum.CANCELLED.getStatus())); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void saveQuotes(SrmInquiryQuoteSaveReqVO saveReqVO) { |
| | | SrmInquiryDO inquiry = validateInquiryExists(saveReqVO.getInquiryId()); |
| | | if (!InquiryStatusEnum.DRAFT.getStatus().equals(inquiry.getStatus()) |
| | | && !InquiryStatusEnum.QUOTING.getStatus().equals(inquiry.getStatus())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_STATUS_NOT_QUOTING.getCode(), |
| | | "询价åã" + inquiry.getNo() + "ãå½åç¶æä¸ºã" + statusName(inquiry.getStatus()) |
| | | + "ãï¼ä»
è稿æè¯¢ä»·ä¸ç¶æå¯å½å
¥æ¥ä»·ã"); |
| | | } |
| | | List<SrmInquiryItemDO> items = inquiryItemMapper.selectListByInquiryId(inquiry.getId()); |
| | | Map<Long, SrmInquiryItemDO> itemMap = items.stream() |
| | | .collect(Collectors.toMap(SrmInquiryItemDO::getId, Function.identity())); |
| | | List<SrmInquirySupplierDO> participants = inquirySupplierMapper.selectListByInquiryId(inquiry.getId()); |
| | | Set<Long> participantIds = participants.stream() |
| | | .map(SrmInquirySupplierDO::getSupplierId).collect(Collectors.toSet()); |
| | | |
| | | Set<Long> touchedSupplierIds = new HashSet<>(); |
| | | for (SrmInquiryQuoteSaveReqVO.Quote quoteVO : saveReqVO.getQuotes()) { |
| | | SrmInquiryItemDO item = itemMap.get(quoteVO.getInquiryItemId()); |
| | | if (item == null) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_QUOTE_NOT_EXISTS.getCode(), |
| | | "询价产åè¡ID=" + quoteVO.getInquiryItemId() + " ä¸å±äºè¯¢ä»·åã" + inquiry.getNo() |
| | | + "ãï¼è¯·å·æ°æ¯ä»·é¡µé¢åéæ°å½å
¥æ¥ä»·ã"); |
| | | } |
| | | if (!participantIds.contains(quoteVO.getSupplierId())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_SUPPLIER_NOT_PARTICIPANT.getCode(), |
| | | "ä¾åºåID=" + quoteVO.getSupplierId() + " æªåä¸è¯¢ä»·åã" + inquiry.getNo() |
| | | + "ãï¼è¯·å
å¨è¯¢ä»·å䏿·»å 该ä¾åºåã"); |
| | | } |
| | | SrmInquiryQuoteDO existing = inquiryQuoteMapper.selectByItemIdAndSupplierId( |
| | | quoteVO.getInquiryItemId(), quoteVO.getSupplierId()); |
| | | if (quoteVO.getPrice() == null) { |
| | | // æ¸
空æ¥ä»· |
| | | if (existing != null) { |
| | | inquiryQuoteMapper.deleteById(existing.getId()); |
| | | touchedSupplierIds.add(quoteVO.getSupplierId()); |
| | | } |
| | | continue; |
| | | } |
| | | if (quoteVO.getPrice().compareTo(BigDecimal.ZERO) <= 0) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_QUOTE_PRICE_INVALID.getCode(), |
| | | "产åã" + item.getProductName() + "ãä¾åºåID=" + quoteVO.getSupplierId() |
| | | + " çæ¥ä»·å价为ã" + quoteVO.getPrice() + "ãï¼å¿
é¡»å¤§äº 0ï¼è¯·ä¿®æ¹åéæ°ä¿åã"); |
| | | } |
| | | SrmInquiryQuoteDO quote = BeanUtils.toBean(quoteVO, SrmInquiryQuoteDO.class); |
| | | quote.setInquiryId(inquiry.getId()); |
| | | quote.setIsSelected(existing != null && Boolean.TRUE.equals(existing.getIsSelected())); |
| | | if (existing != null) { |
| | | quote.setId(existing.getId()); |
| | | inquiryQuoteMapper.updateById(quote); |
| | | } else { |
| | | inquiryQuoteMapper.insert(quote); |
| | | } |
| | | touchedSupplierIds.add(quoteVO.getSupplierId()); |
| | | } |
| | | // å·æ°åä¸ä¾åºåæ¥ä»·ç¶æ |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | for (Long supplierId : touchedSupplierIds) { |
| | | SrmInquirySupplierDO participant = inquirySupplierMapper |
| | | .selectByInquiryIdAndSupplierId(inquiry.getId(), supplierId); |
| | | if (participant == null) { |
| | | continue; |
| | | } |
| | | Long quoteCount = inquiryQuoteMapper.selectCount(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<SrmInquiryQuoteDO>() |
| | | .eq(SrmInquiryQuoteDO::getInquiryId, inquiry.getId()) |
| | | .eq(SrmInquiryQuoteDO::getSupplierId, supplierId)); |
| | | SrmInquirySupplierDO updateObj = new SrmInquirySupplierDO(); |
| | | updateObj.setId(participant.getId()); |
| | | updateObj.setQuoteStatus(quoteCount != null && quoteCount > 0 ? 10 : 0); |
| | | updateObj.setQuoteTime(now); |
| | | inquirySupplierMapper.updateById(updateObj); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public SrmInquiryRespVO getCompare(Long id) { |
| | | return getInquiryDetail(id); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public SrmInquiryConfirmRespVO confirmInquiry(SrmInquiryConfirmReqVO confirmReqVO) { |
| | | SrmInquiryDO inquiry = validateInquiryExists(confirmReqVO.getId()); |
| | | if (!InquiryStatusEnum.DRAFT.getStatus().equals(inquiry.getStatus()) |
| | | && !InquiryStatusEnum.QUOTING.getStatus().equals(inquiry.getStatus())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_STATUS_NOT_CONFIRMABLE.getCode(), |
| | | "询价åã" + inquiry.getNo() + "ãå½åç¶æä¸ºã" + statusName(inquiry.getStatus()) |
| | | + "ãï¼ä»
è稿æè¯¢ä»·ä¸ç¶æå¯ç¡®è®¤è½¬è®¢åã"); |
| | | } |
| | | List<SrmInquiryItemDO> items = inquiryItemMapper.selectListByInquiryId(inquiry.getId()); |
| | | if (CollUtil.isEmpty(items)) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.INQUIRY_ITEM_EMPTY); |
| | | } |
| | | Map<Long, SrmInquiryItemDO> itemMap = items.stream() |
| | | .collect(Collectors.toMap(SrmInquiryItemDO::getId, Function.identity())); |
| | | Set<Long> participantIds = inquirySupplierMapper.selectListByInquiryId(inquiry.getId()).stream() |
| | | .map(SrmInquirySupplierDO::getSupplierId).collect(Collectors.toSet()); |
| | | List<SrmInquiryQuoteDO> allQuotes = inquiryQuoteMapper.selectListByInquiryId(inquiry.getId()); |
| | | Map<Long, SrmInquiryQuoteDO> quoteMap = allQuotes.stream() |
| | | .collect(Collectors.toMap(SrmInquiryQuoteDO::getId, Function.identity())); |
| | | |
| | | // 1. æ ¡éªæ¯ä¸ªäº§åæ°å¥½éæ©ä¸æ¡æææ¥ä»· |
| | | // æªæ¾å¼ä¼ selections æ¶ï¼ä½¿ç¨è¯¢ä»·åä¸å·²ä¿åç䏿 éæ©ï¼å建/ç¼è¾æ¶ä¸å¹¶å½å
¥ï¼ |
| | | List<SrmInquiryConfirmReqVO.Selection> selections = confirmReqVO.getSelections(); |
| | | if (CollUtil.isEmpty(selections)) { |
| | | selections = new ArrayList<>(); |
| | | for (SrmInquiryItemDO item : items) { |
| | | if (item.getSelectedQuoteId() != null) { |
| | | SrmInquiryConfirmReqVO.Selection selection = new SrmInquiryConfirmReqVO.Selection(); |
| | | selection.setInquiryItemId(item.getId()); |
| | | selection.setQuoteId(item.getSelectedQuoteId()); |
| | | selections.add(selection); |
| | | } |
| | | } |
| | | if (CollUtil.isEmpty(selections)) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_WINNER_REQUIRED.getCode(), |
| | | "询价åã" + inquiry.getNo() + "ãå°æªä¿åä»»ä½ä¸æ éæ©ï¼è¯·ç¼è¾è¯¢ä»·å为æ¯ä¸ªäº§å鿩䏿 ä¾åºååå确认ã"); |
| | | } |
| | | } |
| | | Map<Long, SrmInquiryQuoteDO> selectedByItem = new HashMap<>(); |
| | | for (SrmInquiryConfirmReqVO.Selection selection : selections) { |
| | | SrmInquiryItemDO item = itemMap.get(selection.getInquiryItemId()); |
| | | if (item == null) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_WINNER_QUOTE_MISMATCH.getCode(), |
| | | "询价产åè¡ID=" + selection.getInquiryItemId() + " ä¸å±äºè¯¢ä»·åã" + inquiry.getNo() |
| | | + "ãï¼è¯·å·æ°æ¯ä»·é¡µé¢å鿰鿩䏿 æ¥ä»·ã"); |
| | | } |
| | | if (selectedByItem.containsKey(item.getId())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_WINNER_DUPLICATE.getCode(), |
| | | "产åã" + item.getProductName() + "ãéæ©äºå¤æ¡ä¸æ æ¥ä»·ï¼è¯·ä¸ºæ¯ä¸ªäº§ååªä¿ç䏿¡ä¸æ æ¥ä»·ã"); |
| | | } |
| | | SrmInquiryQuoteDO quote = quoteMap.get(selection.getQuoteId()); |
| | | if (quote == null) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_QUOTE_NOT_EXISTS.getCode(), |
| | | "䏿 æ¥ä»·ID=" + selection.getQuoteId() + " ä¸åå¨ï¼è¯·å·æ°æ¯ä»·é¡µé¢åéæ°éæ©ã"); |
| | | } |
| | | if (!quote.getInquiryItemId().equals(item.getId())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_WINNER_QUOTE_MISMATCH.getCode(), |
| | | "产åã" + item.getProductName() + "ãéæ©ç䏿 æ¥ä»·å±äºäº§åè¡ID=" + quote.getInquiryItemId() |
| | | + "ï¼è¯·éæ°éæ©è¯¥äº§åèªå·±çæ¥ä»·ã"); |
| | | } |
| | | if (!participantIds.contains(quote.getSupplierId())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_SUPPLIER_NOT_PARTICIPANT.getCode(), |
| | | "ä¾åºåID=" + quote.getSupplierId() + " æªåä¸è¯¢ä»·åã" + inquiry.getNo() |
| | | + "ãï¼æ æ³ä½ä¸ºä¸æ ä¾åºåã"); |
| | | } |
| | | if (quote.getPrice() == null || quote.getPrice().compareTo(BigDecimal.ZERO) <= 0) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_QUOTE_PRICE_INVALID.getCode(), |
| | | "产åã" + item.getProductName() + "ãç䏿 æ¥ä»·å价为空æå°äºçäº 0ï¼è¯·å
å½å
¥æ¥ä»·åå确认ã"); |
| | | } |
| | | selectedByItem.put(item.getId(), quote); |
| | | } |
| | | for (SrmInquiryItemDO item : items) { |
| | | if (!selectedByItem.containsKey(item.getId())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_WINNER_REQUIRED.getCode(), |
| | | "产åã" + StrUtil.blankToDefault(item.getProductName(), "ID=" + item.getProductId()) |
| | | + "ãå°æªéæ©ä¸æ ä¾åºåï¼è¯·ä¸ºè¯¥äº§å鿩䏿¡ä¸æ æ¥ä»·åå确认ã"); |
| | | } |
| | | } |
| | | |
| | | // 2. è®°å½ä¸æ ç»æ |
| | | for (SrmInquiryQuoteDO quote : allQuotes) { |
| | | if (Boolean.TRUE.equals(quote.getIsSelected())) { |
| | | inquiryQuoteMapper.updateById(new SrmInquiryQuoteDO().setId(quote.getId()).setIsSelected(false)); |
| | | } |
| | | } |
| | | for (Map.Entry<Long, SrmInquiryQuoteDO> entry : selectedByItem.entrySet()) { |
| | | SrmInquiryItemDO item = itemMap.get(entry.getKey()); |
| | | SrmInquiryQuoteDO quote = entry.getValue(); |
| | | inquiryQuoteMapper.updateById(new SrmInquiryQuoteDO().setId(quote.getId()).setIsSelected(true)); |
| | | inquiryItemMapper.updateById(new SrmInquiryItemDO() |
| | | .setId(item.getId()) |
| | | .setSelectedSupplierId(quote.getSupplierId()) |
| | | .setSelectedQuoteId(quote.getId()) |
| | | .setSelectedPrice(quote.getPrice())); |
| | | } |
| | | |
| | | // 3. æä¸æ ä¾åºååç»çæéè´è®¢åè稿 |
| | | Map<Long, List<QuoteWithItem>> winnersBySupplier = new LinkedHashMap<>(); |
| | | for (Map.Entry<Long, SrmInquiryQuoteDO> entry : selectedByItem.entrySet()) { |
| | | QuoteWithItem pair = new QuoteWithItem(itemMap.get(entry.getKey()), entry.getValue()); |
| | | winnersBySupplier.computeIfAbsent(entry.getValue().getSupplierId(), k -> new ArrayList<>()).add(pair); |
| | | } |
| | | Map<Long, SrmSupplierDO> supplierMap = supplierService.getSupplierMap(winnersBySupplier.keySet()); |
| | | List<SrmInquiryConfirmRespVO.Order> orders = new ArrayList<>(); |
| | | for (Map.Entry<Long, List<QuoteWithItem>> entry : winnersBySupplier.entrySet()) { |
| | | Long supplierId = entry.getKey(); |
| | | SrmSupplierDO supplier = supplierMap.get(supplierId); |
| | | String supplierName = supplier != null ? supplier.getName() : "ID=" + supplierId; |
| | | |
| | | List<ErpPurchaseOrderCreateReqDTO.Item> orderItems = new ArrayList<>(); |
| | | for (QuoteWithItem pair : entry.getValue()) { |
| | | SrmInquiryItemDO item = pair.item; |
| | | SrmInquiryQuoteDO quote = pair.quote; |
| | | Long productUnitId = item.getProductUnitId(); |
| | | if (productUnitId == null) { |
| | | MdmItemRespDTO mdmItem = mdmItemApi.getItem(item.getProductId()).getCheckedData(); |
| | | productUnitId = mdmItem != null ? mdmItem.getUnitMeasureId() : null; |
| | | } |
| | | ErpPurchaseOrderCreateReqDTO.Item orderItem = new ErpPurchaseOrderCreateReqDTO.Item(); |
| | | orderItem.setProductId(item.getProductId()); |
| | | orderItem.setProductUnitId(productUnitId); |
| | | orderItem.setProductPrice(quote.getPrice()); |
| | | orderItem.setCount(item.getQuantity()); |
| | | orderItem.setTaxPercent(quote.getTaxRate()); |
| | | orderItem.setRemark("SRM询价 " + inquiry.getNo()); |
| | | orderItem.setQcCheckFlag(false); |
| | | orderItems.add(orderItem); |
| | | } |
| | | ErpPurchaseOrderCreateReqDTO createReqDTO = new ErpPurchaseOrderCreateReqDTO(); |
| | | createReqDTO.setSupplierId(supplierId); |
| | | createReqDTO.setOrderTime(LocalDateTime.now()); |
| | | createReqDTO.setDiscountPercent(BigDecimal.ZERO); |
| | | createReqDTO.setDepositPrice(BigDecimal.ZERO); |
| | | createReqDTO.setSourceType(2); |
| | | createReqDTO.setSourceNo(inquiry.getNo()); |
| | | createReqDTO.setSourceId(inquiry.getId()); |
| | | createReqDTO.setRemark("SRM询价èªå¨çæï¼è¯¢ä»·åå·ï¼" + inquiry.getNo()); |
| | | createReqDTO.setItems(orderItems); |
| | | |
| | | Long purchaseOrderId; |
| | | try { |
| | | purchaseOrderId = erpPurchaseOrderApi.createPurchaseOrderDraft(createReqDTO).getCheckedData(); |
| | | } catch (Exception ex) { |
| | | log.error("[confirmInquiry] 询价å({}) ä¾åºå({}) çæéè´è®¢å失败", inquiry.getNo(), supplierId, ex); |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_ORDER_GENERATE_FAIL.getCode(), |
| | | "询价åã" + inquiry.getNo() + "ã为ä¾åºåã" + supplierName |
| | | + "ãçæéè´è®¢å失败ï¼" + ex.getMessage() + "ãè¯·æ£æ¥è¯¥ä¾åºåä¸äº§åèµæåéè¯ã"); |
| | | } |
| | | String purchaseOrderNo = null; |
| | | try { |
| | | ErpPurchaseOrderRespDTO order = erpPurchaseOrderApi.getPurchaseOrder(purchaseOrderId).getCheckedData(); |
| | | purchaseOrderNo = order != null ? order.getNo() : null; |
| | | } catch (Exception ex) { |
| | | log.warn("[confirmInquiry] è·åéè´è®¢åå·å¤±è´¥ï¼purchaseOrderId={}", purchaseOrderId, ex); |
| | | } |
| | | inquiryOrderMapper.insert(SrmInquiryOrderDO.builder() |
| | | .inquiryId(inquiry.getId()) |
| | | .supplierId(supplierId) |
| | | .purchaseOrderId(purchaseOrderId) |
| | | .purchaseOrderNo(purchaseOrderNo) |
| | | .build()); |
| | | |
| | | SrmInquiryConfirmRespVO.Order orderResult = new SrmInquiryConfirmRespVO.Order(); |
| | | orderResult.setSupplierId(supplierId); |
| | | orderResult.setSupplierName(supplierName); |
| | | orderResult.setPurchaseOrderId(purchaseOrderId); |
| | | orderResult.setPurchaseOrderNo(purchaseOrderNo); |
| | | orders.add(orderResult); |
| | | } |
| | | |
| | | // 4. æ´æ°è¯¢ä»·å为已转订åï¼ç¶ææ¡ä»¶æ´æ°ï¼é¿å
å¹¶åéå¤çæï¼ |
| | | int updated = inquiryMapper.updateByIdAndStatus(inquiry.getId(), inquiry.getStatus(), |
| | | new SrmInquiryDO().setStatus(InquiryStatusEnum.CONFIRMED.getStatus())); |
| | | if (updated == 0) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.INQUIRY_ALREADY_CONFIRMED); |
| | | } |
| | | SrmInquiryConfirmRespVO result = new SrmInquiryConfirmRespVO(); |
| | | result.setInquiryId(inquiry.getId()); |
| | | result.setOrders(orders); |
| | | return result; |
| | | } |
| | | |
| | | // ========== ç»è£
========== |
| | | |
| | | private SrmInquiryRespVO buildInquiryResp(SrmInquiryDO inquiry) { |
| | | SrmInquiryRespVO respVO = BeanUtils.toBean(inquiry, SrmInquiryRespVO.class); |
| | | List<SrmInquiryItemDO> items = inquiryItemMapper.selectListByInquiryId(inquiry.getId()); |
| | | List<SrmInquirySupplierDO> participants = inquirySupplierMapper.selectListByInquiryId(inquiry.getId()); |
| | | List<SrmInquiryQuoteDO> quotes = inquiryQuoteMapper.selectListByInquiryId(inquiry.getId()); |
| | | List<SrmInquiryOrderDO> inquiryOrders = inquiryOrderMapper.selectListByInquiryId(inquiry.getId()); |
| | | |
| | | Set<Long> supplierIds = new HashSet<>(); |
| | | participants.forEach(p -> supplierIds.add(p.getSupplierId())); |
| | | quotes.forEach(q -> supplierIds.add(q.getSupplierId())); |
| | | inquiryOrders.forEach(o -> supplierIds.add(o.getSupplierId())); |
| | | Map<Long, SrmSupplierDO> supplierMap = supplierService.getSupplierMap(supplierIds); |
| | | |
| | | respVO.setItems(BeanUtils.toBean(items, SrmInquiryRespVO.Item.class)); |
| | | respVO.setQuotes(BeanUtils.toBean(quotes, SrmInquiryRespVO.Quote.class)); |
| | | |
| | | List<SrmInquiryRespVO.Supplier> supplierVOs = BeanUtils.toBean(participants, SrmInquiryRespVO.Supplier.class); |
| | | supplierVOs.forEach(vo -> { |
| | | SrmSupplierDO supplier = supplierMap.get(vo.getSupplierId()); |
| | | if (supplier != null) { |
| | | vo.setSupplierName(supplier.getName()); |
| | | vo.setSupplierCode(supplier.getCode()); |
| | | } |
| | | }); |
| | | respVO.setSuppliers(supplierVOs); |
| | | |
| | | List<SrmInquiryRespVO.Order> orderVOs = BeanUtils.toBean(inquiryOrders, SrmInquiryRespVO.Order.class); |
| | | orderVOs.forEach(vo -> { |
| | | SrmSupplierDO supplier = supplierMap.get(vo.getSupplierId()); |
| | | if (supplier != null) { |
| | | vo.setSupplierName(supplier.getName()); |
| | | } |
| | | }); |
| | | respVO.setOrders(orderVOs); |
| | | return respVO; |
| | | } |
| | | |
| | | // ========== ä¿åè¾
å© ========== |
| | | |
| | | private void validateInquiryInput(SrmInquirySaveReqVO reqVO) { |
| | | if (CollUtil.isEmpty(reqVO.getItems())) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.INQUIRY_ITEM_EMPTY); |
| | | } |
| | | if (CollUtil.isEmpty(reqVO.getSuppliers())) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.INQUIRY_SUPPLIER_EMPTY); |
| | | } |
| | | Set<Long> productIds = new HashSet<>(); |
| | | for (SrmInquirySaveReqVO.Item item : reqVO.getItems()) { |
| | | if (!productIds.add(item.getProductId())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_ITEM_EMPTY.getCode(), |
| | | "产åID=" + item.getProductId() + " å¨è¯¢ä»·åä¸é夿·»å ï¼è¯·ä¸ºæ¯ä¸ªäº§ååªä¿çä¸è¡ã"); |
| | | } |
| | | if (item.getQuantity() == null || item.getQuantity().compareTo(BigDecimal.ZERO) <= 0) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_ITEM_EMPTY.getCode(), |
| | | "产åã" + StrUtil.blankToDefault(item.getProductName(), "ID=" + item.getProductId()) |
| | | + "ãçéè´æ°éå¿
é¡»å¤§äº 0ï¼è¯·å¡«åæ°éåéæ°ä¿åã"); |
| | | } |
| | | } |
| | | Set<Long> supplierIds = new HashSet<>(); |
| | | for (SrmInquirySaveReqVO.Supplier supplier : reqVO.getSuppliers()) { |
| | | if (!supplierIds.add(supplier.getSupplierId())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_SUPPLIER_DUPLICATE.getCode(), |
| | | "ä¾åºåID=" + supplier.getSupplierId() + " å¨è¯¢ä»·åä¸é夿·»å ï¼è¯·ä¸ºæ¯ä¸ªä¾åºååªä¿çä¸è¡ã"); |
| | | } |
| | | } |
| | | validateSuppliers(supplierIds); |
| | | } |
| | | |
| | | private void validateSuppliers(Collection<Long> supplierIds) { |
| | | List<SrmSupplierDO> suppliers = supplierService.getSupplierList(supplierIds); |
| | | Map<Long, SrmSupplierDO> map = suppliers.stream() |
| | | .collect(Collectors.toMap(SrmSupplierDO::getId, Function.identity())); |
| | | for (Long supplierId : supplierIds) { |
| | | SrmSupplierDO supplier = map.get(supplierId); |
| | | if (supplier == null) { |
| | | throw new ServiceException(ErrorCodeConstants.SUPPLIER_NOT_EXISTS.getCode(), |
| | | "ä¾åºåID=" + supplierId + " ä¸åå¨ï¼è¯·å·æ°ä¾åºåå表åéæ°éæ©ã"); |
| | | } |
| | | if (supplier.getStatus() != null && !CommonStatusEnum.ENABLE.getStatus().equals(supplier.getStatus())) { |
| | | throw new ServiceException(ErrorCodeConstants.SUPPLIER_NOT_ENABLE.getCode(), |
| | | "ä¾åºåã" + supplier.getName() + "ãå·²åç¨ï¼è¯·å
å¨ä¾åºåæ¡£æ¡ä¸å¯ç¨åååä¸è¯¢ä»·ã"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private List<SrmInquiryItemDO> saveItems(Long inquiryId, List<SrmInquirySaveReqVO.Item> itemVOs) { |
| | | List<SrmInquiryItemDO> savedItems = new ArrayList<>(); |
| | | |
| | | Set<Long> productIds = itemVOs.stream().map(SrmInquirySaveReqVO.Item::getProductId) |
| | | .collect(Collectors.toSet()); |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemList(productIds).getCheckedData().stream() |
| | | .collect(Collectors.toMap(MdmItemRespDTO::getId, Function.identity())); |
| | | Set<Long> unitIds = itemMap.values().stream().map(MdmItemRespDTO::getUnitMeasureId) |
| | | .filter(Objects::nonNull).collect(Collectors.toSet()); |
| | | Map<Long, MdmUnitMeasureRespDTO> unitMap = unitIds.isEmpty() ? Collections.emptyMap() |
| | | : mdmUnitMeasureApi.getUnitMeasureMap(unitIds); |
| | | |
| | | for (int i = 0; i < itemVOs.size(); i++) { |
| | | SrmInquirySaveReqVO.Item itemVO = itemVOs.get(i); |
| | | MdmItemRespDTO mdmItem = itemMap.get(itemVO.getProductId()); |
| | | if (mdmItem == null) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_ITEM_EMPTY.getCode(), |
| | | "产åID=" + itemVO.getProductId() + " ä¸åå¨ï¼è¯·éæ°éæ©äº§åã"); |
| | | } |
| | | SrmInquiryItemDO item = BeanUtils.toBean(itemVO, SrmInquiryItemDO.class); |
| | | item.setId(null); |
| | | item.setInquiryId(inquiryId); |
| | | item.setProductCode(StrUtil.blankToDefault(itemVO.getProductCode(), mdmItem.getCode())); |
| | | item.setProductName(StrUtil.blankToDefault(itemVO.getProductName(), mdmItem.getName())); |
| | | item.setProductSpec(StrUtil.blankToDefault(itemVO.getProductSpec(), mdmItem.getSpecification())); |
| | | Long productUnitId = itemVO.getProductUnitId() != null ? itemVO.getProductUnitId() |
| | | : mdmItem.getUnitMeasureId(); |
| | | item.setProductUnitId(productUnitId); |
| | | if (StrUtil.isBlank(itemVO.getUnitName()) && productUnitId != null) { |
| | | MdmUnitMeasureRespDTO unit = unitMap.get(productUnitId); |
| | | item.setUnitName(unit != null ? unit.getName() : null); |
| | | } |
| | | item.setSort(i); |
| | | inquiryItemMapper.insert(item); |
| | | savedItems.add(item); |
| | | } |
| | | return savedItems; |
| | | } |
| | | |
| | | /** |
| | | * ä¿å产åè¡æ¥ä»·ä¸ä¸æ éæ©ï¼å建/ç¼è¾è¯¢ä»·åæ¶ä¸å¹¶åå
¥ï¼ |
| | | */ |
| | | private void saveItemQuotes(Long inquiryId, List<SrmInquiryItemDO> items, |
| | | List<SrmInquirySaveReqVO.Item> itemVOs, Set<Long> participantIds) { |
| | | for (int i = 0; i < items.size(); i++) { |
| | | SrmInquiryItemDO item = items.get(i); |
| | | SrmInquirySaveReqVO.Item itemVO = itemVOs.get(i); |
| | | String productLabel = StrUtil.blankToDefault(item.getProductName(), "ID=" + item.getProductId()); |
| | | List<SrmInquirySaveReqVO.Quote> quoteVOs = itemVO.getQuotes() == null |
| | | ? Collections.emptyList() : itemVO.getQuotes(); |
| | | Set<Long> quoteSupplierIds = new HashSet<>(); |
| | | SrmInquiryQuoteDO selectedQuote = null; |
| | | for (SrmInquirySaveReqVO.Quote quoteVO : quoteVOs) { |
| | | if (!quoteSupplierIds.add(quoteVO.getSupplierId())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_SUPPLIER_DUPLICATE.getCode(), |
| | | "产åã" + productLabel + "ãçä¾åºåID=" + quoteVO.getSupplierId() |
| | | + " æ¥ä»·éå¤ï¼è¯·ä¸ºæ¯ä¸ªä¾åºååªä¿ç䏿¡æ¥ä»·ã"); |
| | | } |
| | | if (!participantIds.contains(quoteVO.getSupplierId())) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_SUPPLIER_NOT_PARTICIPANT.getCode(), |
| | | "ä¾åºåID=" + quoteVO.getSupplierId() + " æªåä¸è¯¢ä»·åï¼æ æ³å½å
¥äº§åã" |
| | | + productLabel + "ãçæ¥ä»·ï¼è¯·å
å¨åä¸ä¾åºå䏿·»å 该ä¾åºåã"); |
| | | } |
| | | if (quoteVO.getPrice() == null || quoteVO.getPrice().compareTo(BigDecimal.ZERO) <= 0) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_QUOTE_PRICE_INVALID.getCode(), |
| | | "产åã" + productLabel + "ãä¾åºåID=" + quoteVO.getSupplierId() |
| | | + " çæ¥ä»·å价为ã" + quoteVO.getPrice() + "ãï¼å¿
é¡»å¤§äº 0ï¼è¯·ä¿®æ¹åéæ°ä¿åã"); |
| | | } |
| | | boolean selected = itemVO.getSelectedSupplierId() != null |
| | | && itemVO.getSelectedSupplierId().equals(quoteVO.getSupplierId()); |
| | | SrmInquiryQuoteDO quote = BeanUtils.toBean(quoteVO, SrmInquiryQuoteDO.class); |
| | | quote.setInquiryId(inquiryId); |
| | | quote.setInquiryItemId(item.getId()); |
| | | quote.setIsSelected(selected); |
| | | inquiryQuoteMapper.insert(quote); |
| | | if (selected) { |
| | | selectedQuote = quote; |
| | | } |
| | | } |
| | | Long selectedSupplierId = itemVO.getSelectedSupplierId(); |
| | | if (selectedSupplierId != null && selectedQuote == null) { |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_WINNER_QUOTE_MISMATCH.getCode(), |
| | | "产åã" + productLabel + "ãéæ©ç䏿 ä¾åºåID=" + selectedSupplierId |
| | | + " 没æå½å
¥æ¥ä»·ï¼è¯·å
å¡«å该ä¾åºåçæ¥ä»·ï¼ææ¹éå
¶ä»å·²æ¥ä»·ä¾åºåã"); |
| | | } |
| | | if (selectedQuote != null) { |
| | | inquiryItemMapper.updateById(new SrmInquiryItemDO() |
| | | .setId(item.getId()) |
| | | .setSelectedSupplierId(selectedQuote.getSupplierId()) |
| | | .setSelectedQuoteId(selectedQuote.getId()) |
| | | .setSelectedPrice(selectedQuote.getPrice())); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void saveSuppliers(Long inquiryId, List<SrmInquirySaveReqVO.Supplier> supplierVOs) { |
| | | for (SrmInquirySaveReqVO.Supplier supplierVO : supplierVOs) { |
| | | inquirySupplierMapper.insert(SrmInquirySupplierDO.builder() |
| | | .inquiryId(inquiryId) |
| | | .supplierId(supplierVO.getSupplierId()) |
| | | .quoteStatus(0) |
| | | .remark(supplierVO.getRemark()) |
| | | .build()); |
| | | } |
| | | } |
| | | |
| | | // ========== æ ¡éª ========== |
| | | |
| | | private SrmInquiryDO validateInquiryExists(Long id) { |
| | | SrmInquiryDO inquiry = inquiryMapper.selectById(id); |
| | | if (inquiry == null) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.INQUIRY_NOT_EXISTS); |
| | | } |
| | | return inquiry; |
| | | } |
| | | |
| | | private String generateInquiryNo() { |
| | | String date = LocalDate.now().format(NO_DATE_FORMAT); |
| | | for (int attempt = 0; attempt < 20; attempt++) { |
| | | int seq = (int) (Math.random() * 9000) + 1000; |
| | | String no = "XJ" + date + String.format("%04d", seq); |
| | | if (inquiryMapper.selectByNo(no) == null) { |
| | | return no; |
| | | } |
| | | } |
| | | throw new ServiceException(ErrorCodeConstants.INQUIRY_NO_GENERATE_FAIL.getCode(), |
| | | "询价åå·å¨å¤æ¬¡å°è¯åä»éå¤ï¼è¯·ç¨åéè¯ã"); |
| | | } |
| | | |
| | | private String statusName(Integer status) { |
| | | for (InquiryStatusEnum e : InquiryStatusEnum.values()) { |
| | | if (e.getStatus().equals(status)) { |
| | | return e.getName(); |
| | | } |
| | | } |
| | | return "æªç¥"; |
| | | } |
| | | |
| | | private static class QuoteWithItem { |
| | | private final SrmInquiryItemDO item; |
| | | private final SrmInquiryQuoteDO quote; |
| | | |
| | | private QuoteWithItem(SrmInquiryItemDO item, SrmInquiryQuoteDO quote) { |
| | | this.item = item; |
| | | this.quote = quote; |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.SrmSupplierImportRespVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.SrmSupplierPageReqVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.SrmSupplierSaveReqVO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierBankDO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierContactDO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierDO; |
| | | import jakarta.validation.Valid; |
| | | |
| | |
| | | SrmSupplierDO getSupplier(Long id); |
| | | |
| | | /** |
| | | * è·åä¾åºåè系人åè¡¨ï¼ææåºè¿åï¼ |
| | | */ |
| | | List<SrmSupplierContactDO> getSupplierContactList(Long supplierId); |
| | | |
| | | /** |
| | | * è·åä¾åºåé¶è¡è´¦æ·åè¡¨ï¼ææåºè¿åï¼ |
| | | */ |
| | | List<SrmSupplierBankDO> getSupplierBankList(Long supplierId); |
| | | |
| | | /** |
| | | * å页æ¥è¯¢ä¾åºå |
| | | */ |
| | | PageResult<SrmSupplierDO> getSupplierPage(SrmSupplierPageReqVO pageReqVO); |
| | |
| | | SrmSupplierImportRespVO importSupplierList(List<SrmSupplierImportExcelVO> importList, Boolean updateSupport); |
| | | |
| | | /** |
| | | * è·åä¾åºåå表ï¼ä»
è¿åå·²éè¿åå
¥å®¡æ¹çä¾åºåï¼ç¨äºä¸æéæ©ï¼ |
| | | * è·åå¯ç¨ç¶æçä¾åºåå表ï¼ç¨äºä¸å¡ä¸æéæ© |
| | | */ |
| | | List<SrmSupplierDO> getSupplierSimpleList(); |
| | | |
| | | /** |
| | | * è·åå
¨é¨ä¾åºåæ¡£æ¡å表ï¼ä¸è¿æ»¤åå
¥ç¶æï¼ç¨äºææ éæ©ä¾åºåï¼ |
| | | * è·åå
¨é¨ä¾åºåæ¡£æ¡åè¡¨ï¼æé¤åç¨ä¾åºåï¼ |
| | | */ |
| | | List<SrmSupplierDO> getSupplierAllList(); |
| | | |
| | |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; |
| | | import cn.iocoder.yudao.framework.operatelog.core.util.OperateLogUtils; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.SrmSupplierImportExcelVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.SrmSupplierImportRespVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.SrmSupplierPageReqVO; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.SrmSupplierSaveReqVO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.*; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmBidAwardMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmBidEvaluationMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmSupplierApplyMapper; |
| | | import cn.iocoder.yudao.module.srm.controller.admin.supplier.vo.*; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierBankDO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierContactDO; |
| | | import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierDO; |
| | | import cn.iocoder.yudao.module.erp.api.purchase.ErpSupplierReferenceApi; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmBidBondMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmInquiryOrderMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmInquiryQuoteMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmInquirySupplierMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmSupplierBankMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmSupplierCategoryMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmSupplierContactMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmSupplierCertificateMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmSupplierMapper; |
| | | import cn.iocoder.yudao.module.srm.dal.mysql.SrmTenderBidMapper; |
| | | import cn.iocoder.yudao.module.srm.enums.ErrorCodeConstants; |
| | | import cn.iocoder.yudao.module.srm.enums.SupplierTypeEnum; |
| | | import com.mzt.logapi.starter.annotation.LogRecord; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | |
| | | import java.util.Collections; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | |
| | | import static cn.iocoder.yudao.module.srm.enums.LogRecordConstants.*; |
| | | |
| | |
| | | private SrmSupplierContactMapper supplierContactMapper; |
| | | |
| | | @Resource |
| | | private SrmSupplierBankMapper supplierBankMapper; |
| | | |
| | | @Resource |
| | | private SrmSupplierCategoryMapper supplierCategoryMapper; |
| | | |
| | | @Resource |
| | | private SrmSupplierApplyMapper supplierApplyMapper; |
| | | private SrmInquirySupplierMapper inquirySupplierMapper; |
| | | |
| | | @Resource |
| | | private SrmSupplierCertificateMapper supplierCertificateMapper; |
| | | private SrmInquiryQuoteMapper inquiryQuoteMapper; |
| | | |
| | | @Resource |
| | | private SrmTenderBidMapper tenderBidMapper; |
| | | private SrmInquiryOrderMapper inquiryOrderMapper; |
| | | |
| | | @Resource |
| | | private SrmBidEvaluationMapper bidEvaluationMapper; |
| | | private SrmBidBondMapper bidBondMapper; |
| | | |
| | | @Resource |
| | | private SrmBidAwardMapper bidAwardMapper; |
| | | private ErpSupplierReferenceApi erpSupplierReferenceApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long createSupplier(SrmSupplierSaveReqVO createReqVO) { |
| | | // æ ¡éªä¾åºåç¼ç å¯ä¸æ§ |
| | | validateCodeUnique(createReqVO.getCode(), null); |
| | | // æå
¥ |
| | | SrmSupplierDO supplier = BeanUtils.toBean(createReqVO, SrmSupplierDO.class); |
| | | fillDefaultContactAndBankFromFlatFields(createReqVO); |
| | | supplierMapper.insert(supplier); |
| | | saveContacts(supplier.getId(), createReqVO.getContacts()); |
| | | saveBanks(supplier.getId(), createReqVO.getBanks()); |
| | | syncSupplierDefaultFields(supplier.getId(), createReqVO.getContacts(), createReqVO.getBanks()); |
| | | return supplier.getId(); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void updateSupplier(SrmSupplierSaveReqVO updateReqVO) { |
| | | // æ ¡éªå卿§ |
| | | validateSupplierExists(updateReqVO.getId()); |
| | |
| | | // æ´æ° |
| | | SrmSupplierDO updateObj = BeanUtils.toBean(updateReqVO, SrmSupplierDO.class); |
| | | supplierMapper.updateById(updateObj); |
| | | // åè¡¨ä¼ null 表示ä¸ä¿®æ¹ï¼ä¼ 空å表表示æ¸
空 |
| | | if (updateReqVO.getContacts() != null) { |
| | | saveContacts(updateReqVO.getId(), updateReqVO.getContacts()); |
| | | } |
| | | if (updateReqVO.getBanks() != null) { |
| | | saveBanks(updateReqVO.getId(), updateReqVO.getBanks()); |
| | | } |
| | | syncSupplierDefaultFields(updateReqVO.getId(), updateReqVO.getContacts(), updateReqVO.getBanks()); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void deleteSupplier(Long id) { |
| | | // æ ¡éªå卿§ |
| | | validateSupplierExists(id); |
| | | // å
³èæ°æ®å卿¶ï¼ä¸å
许å é¤ |
| | | validateNoReference(id); |
| | | SrmSupplierDO supplier = validateSupplierExists(id); |
| | | // æ ¡éªä¸å¡å¼ç¨ï¼è¯¢ä»·ãä¿è¯éãERP éè´/仿¬¾çåæ® |
| | | List<String> references = new ArrayList<>(); |
| | | if (inquirySupplierMapper.selectCountBySupplierId(id) > 0) { |
| | | references.add("SRM询价å"); |
| | | } |
| | | if (inquiryQuoteMapper.selectCountBySupplierId(id) > 0) { |
| | | references.add("SRM询价æ¥ä»·"); |
| | | } |
| | | if (inquiryOrderMapper.selectCountBySupplierId(id) > 0) { |
| | | references.add("SRM询价转éè´è®¢åè®°å½"); |
| | | } |
| | | if (bidBondMapper.selectCountBySupplierId(id) > 0) { |
| | | references.add("SRMææ ä¿è¯é"); |
| | | } |
| | | List<String> erpSources = erpSupplierReferenceApi.getSupplierReferenceSources(id).getCheckedData(); |
| | | if (CollUtil.isNotEmpty(erpSources)) { |
| | | references.addAll(erpSources); |
| | | } |
| | | if (!references.isEmpty()) { |
| | | throw new ServiceException(ErrorCodeConstants.SUPPLIER_EXISTS_REFERENCE.getCode(), |
| | | "ä¾åºåã" + supplier.getName() + "ã已被ä¸å¡å¼ç¨ï¼" + String.join("ã", references) |
| | | + "ï¼ï¼æ æ³å é¤ã请å
å¤çç¸å
³åæ®ï¼æå°ä¾åºåç¶ææ¹ä¸ºåç¨ã"); |
| | | } |
| | | // å¯ç´æ¥æ¸
ççå
³èæ°æ® |
| | | supplierContactMapper.deleteBySupplierId(id); |
| | | supplierBankMapper.deleteBySupplierId(id); |
| | | supplierCategoryMapper.deleteBySupplierId(id); |
| | | // é»è¾å é¤ |
| | | supplierMapper.deleteById(id); |
| | |
| | | @Override |
| | | public SrmSupplierDO getSupplier(Long id) { |
| | | return supplierMapper.selectById(id); |
| | | } |
| | | |
| | | @Override |
| | | public List<SrmSupplierContactDO> getSupplierContactList(Long supplierId) { |
| | | return supplierContactMapper.selectListBySupplierId(supplierId); |
| | | } |
| | | |
| | | @Override |
| | | public List<SrmSupplierBankDO> getSupplierBankList(Long supplierId) { |
| | | return supplierBankMapper.selectListBySupplierId(supplierId); |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public List<SrmSupplierDO> getSupplierSimpleList() { |
| | | return supplierMapper.selectApprovedList(); |
| | | // åå
¥åè½å·²ç§»é¤ï¼ä¸æéæ©ç»ä¸è¿åå¯ç¨çä¾åºå |
| | | return supplierMapper.selectListByStatus(CommonStatusEnum.ENABLE.getStatus()); |
| | | } |
| | | |
| | | @Override |
| | | public List<SrmSupplierDO> getSupplierAllList() { |
| | | return supplierMapper.selectList(new LambdaQueryWrapperX<SrmSupplierDO>() |
| | | // è¿æ»¤åç¨ä¾åºåï¼ä¿çæªè®¾ç½®ç¶æä¸å¯ç¨ç¶æçæ¡£æ¡ä¾åºåï¼ä»
ç¨äºæææ åºæ¯ï¼ |
| | | // è¿æ»¤åç¨ä¾åºåï¼ä¿çæªè®¾ç½®ç¶æä¸å¯ç¨ç¶æçæ¡£æ¡ä¾åºå |
| | | .and(w -> w.isNull(SrmSupplierDO::getStatus) |
| | | .or() |
| | | .ne(SrmSupplierDO::getStatus, CommonStatusEnum.DISABLE.getStatus())) |
| | |
| | | return Collections.emptyList(); |
| | | } |
| | | return supplierMapper.selectBatchIds(ids); |
| | | } |
| | | |
| | | // ========== è系人 / é¶è¡è´¦æ· ========== |
| | | |
| | | /** |
| | | * 导å
¥åºæ¯æ²¡æè系人å表æ¶ï¼ç¨ä¸»è¡¨æå¹³å段çæä¸æ¡é»è®¤è系人 |
| | | */ |
| | | private void fillDefaultContactAndBankFromFlatFields(SrmSupplierSaveReqVO reqVO) { |
| | | if (reqVO.getContacts() == null && StrUtil.isNotBlank(reqVO.getContactName())) { |
| | | SrmSupplierContactSaveReqVO contact = new SrmSupplierContactSaveReqVO(); |
| | | contact.setName(reqVO.getContactName()); |
| | | contact.setMobile(reqVO.getContactMobile()); |
| | | contact.setEmail(reqVO.getContactEmail()); |
| | | contact.setIsDefault(Boolean.TRUE); |
| | | reqVO.setContacts(Collections.singletonList(contact)); |
| | | } |
| | | if (reqVO.getBanks() == null |
| | | && (StrUtil.isNotBlank(reqVO.getBankName()) || StrUtil.isNotBlank(reqVO.getBankAccount()))) { |
| | | SrmSupplierBankSaveReqVO bank = new SrmSupplierBankSaveReqVO(); |
| | | bank.setBankName(reqVO.getBankName()); |
| | | bank.setBankAccount(reqVO.getBankAccount()); |
| | | bank.setIsDefault(Boolean.TRUE); |
| | | reqVO.setBanks(Collections.singletonList(bank)); |
| | | } |
| | | } |
| | | |
| | | private void saveContacts(Long supplierId, List<SrmSupplierContactSaveReqVO> contacts) { |
| | | supplierContactMapper.deleteBySupplierId(supplierId); |
| | | if (CollUtil.isEmpty(contacts)) { |
| | | return; |
| | | } |
| | | for (int i = 0; i < contacts.size(); i++) { |
| | | SrmSupplierContactSaveReqVO vo = contacts.get(i); |
| | | if (StrUtil.isBlank(vo.getName())) { |
| | | throw new ServiceException(ErrorCodeConstants.SUPPLIER_CONTACT_NAME_REQUIRED.getCode(), |
| | | "第 " + (i + 1) + " 个è系人çå§åä¸è½ä¸ºç©ºï¼è¯·å¡«åè系人å§ååéæ°ä¿å"); |
| | | } |
| | | } |
| | | int defaultIndex = resolveDefaultIndex(contacts.size(), |
| | | contacts.stream().map(SrmSupplierContactSaveReqVO::getIsDefault).toList()); |
| | | for (int i = 0; i < contacts.size(); i++) { |
| | | SrmSupplierContactDO contact = BeanUtils.toBean(contacts.get(i), SrmSupplierContactDO.class); |
| | | contact.setId(null); |
| | | contact.setSupplierId(supplierId); |
| | | contact.setSort(i); |
| | | contact.setIsDefault(i == defaultIndex); |
| | | supplierContactMapper.insert(contact); |
| | | } |
| | | } |
| | | |
| | | private void saveBanks(Long supplierId, List<SrmSupplierBankSaveReqVO> banks) { |
| | | supplierBankMapper.deleteBySupplierId(supplierId); |
| | | if (CollUtil.isEmpty(banks)) { |
| | | return; |
| | | } |
| | | for (int i = 0; i < banks.size(); i++) { |
| | | SrmSupplierBankSaveReqVO vo = banks.get(i); |
| | | if (StrUtil.isBlank(vo.getBankName()) || StrUtil.isBlank(vo.getBankAccount())) { |
| | | throw new ServiceException(ErrorCodeConstants.SUPPLIER_BANK_INFO_INCOMPLETE.getCode(), |
| | | "第 " + (i + 1) + " 个é¶è¡è´¦æ·ç弿·è¡æé¶è¡è´¦å·ä¸ºç©ºï¼è¯·è¡¥å
¨å¼æ·è¡åé¶è¡è´¦å·åéæ°ä¿å"); |
| | | } |
| | | } |
| | | int defaultIndex = resolveDefaultIndex(banks.size(), |
| | | banks.stream().map(SrmSupplierBankSaveReqVO::getIsDefault).toList()); |
| | | for (int i = 0; i < banks.size(); i++) { |
| | | SrmSupplierBankDO bank = BeanUtils.toBean(banks.get(i), SrmSupplierBankDO.class); |
| | | bank.setId(null); |
| | | bank.setSupplierId(supplierId); |
| | | bank.setSort(i); |
| | | bank.setIsDefault(i == defaultIndex); |
| | | supplierBankMapper.insert(bank); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è§£æé»è®¤é¡¹ï¼ä¼å
åæ è®°äºé»è®¤çç¬¬ä¸æ¡ï¼å¦ååç¬¬ä¸æ¡ |
| | | */ |
| | | private int resolveDefaultIndex(int size, List<Boolean> defaults) { |
| | | for (int i = 0; i < size; i++) { |
| | | if (Boolean.TRUE.equals(defaults.get(i))) { |
| | | return i; |
| | | } |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | /** |
| | | * æé»è®¤è系人/é»è®¤é¶è¡åå主表æå¹³å段ï¼å
¼å®¹å表ãæç´¢ä¸å¯¼å
¥å¯¼åº |
| | | */ |
| | | private void syncSupplierDefaultFields(Long supplierId, List<SrmSupplierContactSaveReqVO> contacts, |
| | | List<SrmSupplierBankSaveReqVO> banks) { |
| | | SrmSupplierDO updateObj = new SrmSupplierDO(); |
| | | updateObj.setId(supplierId); |
| | | boolean changed = false; |
| | | if (contacts != null) { |
| | | SrmSupplierContactSaveReqVO defaultContact = pickDefault(contacts, SrmSupplierContactSaveReqVO::getIsDefault); |
| | | updateObj.setContactName(defaultContact == null ? null : defaultContact.getName()); |
| | | updateObj.setContactMobile(defaultContact == null ? null : defaultContact.getMobile()); |
| | | updateObj.setContactEmail(defaultContact == null ? null : defaultContact.getEmail()); |
| | | changed = true; |
| | | } |
| | | if (banks != null) { |
| | | SrmSupplierBankSaveReqVO defaultBank = pickDefault(banks, SrmSupplierBankSaveReqVO::getIsDefault); |
| | | updateObj.setBankName(defaultBank == null ? null : defaultBank.getBankName()); |
| | | updateObj.setBankAccount(defaultBank == null ? null : defaultBank.getBankAccount()); |
| | | changed = true; |
| | | } |
| | | if (changed) { |
| | | supplierMapper.updateById(updateObj); |
| | | } |
| | | } |
| | | |
| | | private <T> T pickDefault(List<T> list, java.util.function.Function<T, Boolean> isDefault) { |
| | | if (CollUtil.isEmpty(list)) { |
| | | return null; |
| | | } |
| | | return list.stream().filter(item -> Boolean.TRUE.equals(isDefault.apply(item))) |
| | | .findFirst().orElse(list.get(0)); |
| | | } |
| | | |
| | | // ========== 导å
¥è¾
婿¹æ³ ========== |
| | |
| | | |
| | | // ========== æ ¡éªæ¹æ³ ========== |
| | | |
| | | private void validateSupplierExists(Long id) { |
| | | if (supplierMapper.selectById(id) == null) { |
| | | private SrmSupplierDO validateSupplierExists(Long id) { |
| | | SrmSupplierDO supplier = supplierMapper.selectById(id); |
| | | if (supplier == null) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.SUPPLIER_NOT_EXISTS); |
| | | } |
| | | return supplier; |
| | | } |
| | | |
| | | private void validateCodeUnique(String code, Long id) { |
| | | SrmSupplierDO existing = supplierMapper.selectByCode(code); |
| | | if (existing != null && !existing.getId().equals(id)) { |
| | | if (existing != null && !Objects.equals(existing.getId(), id)) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.SUPPLIER_CODE_EXISTS); |
| | | } |
| | | } |
| | | |
| | | private void validateNoReference(Long id) { |
| | | boolean hasReference = supplierApplyMapper.existsApprovedBySupplierId(id) |
| | | || supplierCertificateMapper.selectCount(SrmSupplierCertificateDO::getSupplierId, id) > 0 |
| | | || tenderBidMapper.selectCount(SrmTenderBidDO::getSupplierId, id) > 0 |
| | | || bidEvaluationMapper.selectCount(SrmBidEvaluationDO::getSupplierId, id) > 0 |
| | | || bidAwardMapper.selectCount(SrmBidAwardDO::getSupplierId, id) > 0; |
| | | if (hasReference) { |
| | | throw ServiceExceptionUtil.exception(ErrorCodeConstants.SUPPLIER_EXISTS_REFERENCE); |
| | | } |
| | | } |
| | | |
| | |
| | | -- ============================================= |
| | | -- SRM ä¾åºåå
³ç³»ç®¡ç模å - æ°æ®åºåå§åèæ¬ |
| | | -- MySQL 8.4+ |
| | | -- |
| | | -- ä¿çèå´ï¼ä¾åºåæ¡£æ¡ï¼å«å¤è系人/å¤é¶è¡è´¦æ·ï¼ã询价æ¯ä»·ãææ ä¿è¯é |
| | | -- 已移é¤ï¼ä¾åºååå
¥ãèµè´¨ã绩æãæææ ãç»è®¡åæï¼å¯¹åºè¡¨å·²å¨ |
| | | -- sql/mysql/srm_procurement_refactor_20261103.sql ä¸ DROPï¼ |
| | | -- ============================================= |
| | | |
| | | -- 0. æææ é
置表 |
| | | CREATE TABLE IF NOT EXISTS srm_tender_config ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'é
ç½®ID', |
| | | default_bidding_mode VARCHAR(20) NOT NULL DEFAULT 'FULL' COMMENT 'é»è®¤æææ 模å¼: FULL-宿´ç, SIMPLE-ç®æç', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SRMæææ é
置表'; |
| | | |
| | | -- 1. ä¾åºå主表 |
| | | CREATE TABLE IF NOT EXISTS srm_supplier ( |
| | |
| | | legal_person VARCHAR(50) DEFAULT NULL COMMENT 'æ³äººä»£è¡¨', |
| | | address VARCHAR(500) DEFAULT NULL COMMENT 'å
¬å¸å°å', |
| | | website VARCHAR(200) DEFAULT NULL COMMENT 'å
¬å¸ç½å', |
| | | contact_name VARCHAR(50) DEFAULT NULL COMMENT 'è系人', |
| | | contact_mobile VARCHAR(20) DEFAULT NULL COMMENT 'èç³»çµè¯', |
| | | contact_email VARCHAR(100) DEFAULT NULL COMMENT 'é®ç®±', |
| | | bank_name VARCHAR(255) DEFAULT NULL COMMENT '弿·é¶è¡', |
| | | bank_account VARCHAR(100) DEFAULT NULL COMMENT 'é¶è¡è´¦å·', |
| | | contact_name VARCHAR(50) DEFAULT NULL COMMENT 'é»è®¤è系人ï¼ä¸»è¡¨åä½ï¼', |
| | | contact_mobile VARCHAR(20) DEFAULT NULL COMMENT 'é»è®¤èç³»çµè¯ï¼ä¸»è¡¨åä½ï¼', |
| | | contact_email VARCHAR(100) DEFAULT NULL COMMENT 'é»è®¤é®ç®±ï¼ä¸»è¡¨åä½ï¼', |
| | | bank_name VARCHAR(255) DEFAULT NULL COMMENT 'é»è®¤å¼æ·é¶è¡ï¼ä¸»è¡¨åä½ï¼', |
| | | bank_account VARCHAR(100) DEFAULT NULL COMMENT 'é»è®¤é¶è¡è´¦å·ï¼ä¸»è¡¨åä½ï¼', |
| | | status INT NOT NULL DEFAULT 0 COMMENT 'ç¶æï¼0å¯ç¨ 1ç¦ç¨ï¼', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | erp_supplier_id BIGINT DEFAULT NULL COMMENT 'å
³èERPä¾åºåID', |
| | |
| | | KEY idx_erp_supplier_id (erp_supplier_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¾åºå主表'; |
| | | |
| | | -- 2. ä¾åºåè系人表 |
| | | -- 2. ä¾åºåèç³»äººè¡¨ï¼æ¯æå¤ä¸ªè系人ï¼ä»
ä¸ä¸ªé»è®¤ï¼ |
| | | CREATE TABLE IF NOT EXISTS srm_supplier_contact ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'è系人ID', |
| | | supplier_id BIGINT NOT NULL COMMENT 'ä¾åºåID', |
| | |
| | | KEY idx_supplier_id (supplier_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¾åºåè系人表'; |
| | | |
| | | -- 3. ä¾åºååç±»å
³è表 |
| | | -- 3. ä¾åºåé¶è¡è´¦æ·è¡¨ï¼æ¯æå¤ä¸ªå¼æ·è¡ï¼ä»
ä¸ä¸ªé»è®¤ï¼ |
| | | CREATE TABLE IF NOT EXISTS srm_supplier_bank ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'é¶è¡è´¦æ·ID', |
| | | supplier_id BIGINT NOT NULL COMMENT 'ä¾åºåID', |
| | | bank_name VARCHAR(128) NOT NULL COMMENT '弿·è¡', |
| | | bank_account VARCHAR(64) NOT NULL COMMENT 'é¶è¡è´¦å·', |
| | | bank_no VARCHAR(64) DEFAULT NULL COMMENT 'é¶è¡è¡å·', |
| | | bank_address VARCHAR(255) DEFAULT NULL COMMENT '弿·è¡å°å', |
| | | is_default BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦é»è®¤é¶è¡è´¦æ·', |
| | | sort INT NOT NULL DEFAULT 0 COMMENT 'æåº', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | KEY idx_supplier_id (supplier_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¾åºåé¶è¡è´¦æ·è¡¨'; |
| | | |
| | | -- 4. ä¾åºååç±»å
³è表 |
| | | CREATE TABLE IF NOT EXISTS srm_supplier_category ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'å
³èID', |
| | | supplier_id BIGINT NOT NULL COMMENT 'ä¾åºåID', |
| | |
| | | category_name VARCHAR(100) DEFAULT NULL COMMENT 'åç±»åç§°ï¼åä½ï¼', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted INT NOT NULL DEFAULT 0 COMMENT 'æ¯å¦å é¤ 0=å¦ 1=æ¯', |
| | | PRIMARY KEY (id), |
| | | KEY idx_supplier_id (supplier_id), |
| | | KEY idx_category_id (category_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¾åºååç±»å
³è表'; |
| | | |
| | | -- 4. ä¾åºååå
¥ç³è¯·è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_supplier_apply ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ç³è¯·ID', |
| | | apply_no VARCHAR(64) NOT NULL COMMENT 'ç³è¯·ç¼å·', |
| | | supplier_id BIGINT DEFAULT NULL COMMENT 'ä¾åºåIDï¼æ°å»ºä¸ºç©ºï¼åå
¥ååå¡«ï¼', |
| | | supplier_name VARCHAR(255) NOT NULL COMMENT 'ä¾åºååç§°', |
| | | supplier_type VARCHAR(50) DEFAULT NULL COMMENT 'ä¾åºåç±»å', |
| | | company_nature VARCHAR(50) DEFAULT NULL COMMENT 'ä¼ä¸æ§è´¨', |
| | | registered_capital DECIMAL(24,6) DEFAULT NULL COMMENT '注åèµéï¼ä¸å
ï¼', |
| | | business_license_no VARCHAR(100) DEFAULT NULL COMMENT 'è¥ä¸æ§ç
§ç¼å·', |
| | | tax_no VARCHAR(100) DEFAULT NULL COMMENT 'ç¨å·', |
| | | address VARCHAR(500) DEFAULT NULL COMMENT 'å
¬å¸å°å', |
| | | bank_name VARCHAR(255) DEFAULT NULL COMMENT '弿·é¶è¡', |
| | | bank_account VARCHAR(100) DEFAULT NULL COMMENT 'é¶è¡è´¦å·', |
| | | contact_name VARCHAR(50) DEFAULT NULL COMMENT 'è系人', |
| | | contact_mobile VARCHAR(20) DEFAULT NULL COMMENT 'èç³»çµè¯', |
| | | contact_email VARCHAR(100) DEFAULT NULL COMMENT 'é®ç®±', |
| | | apply_user_id BIGINT DEFAULT NULL COMMENT 'ç³è¯·äººID', |
| | | apply_user_name VARCHAR(50) DEFAULT NULL COMMENT 'ç³è¯·äººå§å', |
| | | apply_time DATETIME DEFAULT NULL COMMENT 'ç³è¯·æ¶é´', |
| | | apply_status INT NOT NULL DEFAULT 0 COMMENT 'å®¡æ ¸ç¶æï¼0å¾
æäº¤ 10å¾
éè´å®¡æ ¸ 20å¾
è´¨éå®¡æ ¸ 30å¾
è´¢å¡å®¡æ ¸ 40å·²éè¿ 50å·²æç»ï¼', |
| | | purchase_reviewer_id BIGINT DEFAULT NULL COMMENT 'éè´å®¡æ ¸äººID', |
| | | purchase_review_time DATETIME DEFAULT NULL COMMENT 'éè´å®¡æ ¸æ¶é´', |
| | | purchase_review_opinion VARCHAR(500) DEFAULT NULL COMMENT 'éè´å®¡æ ¸æè§', |
| | | quality_reviewer_id BIGINT DEFAULT NULL COMMENT 'è´¨éå®¡æ ¸äººID', |
| | | quality_review_time DATETIME DEFAULT NULL COMMENT 'è´¨éå®¡æ ¸æ¶é´', |
| | | quality_review_opinion VARCHAR(500) DEFAULT NULL COMMENT 'è´¨éå®¡æ ¸æè§', |
| | | finance_reviewer_id BIGINT DEFAULT NULL COMMENT 'è´¢å¡å®¡æ ¸äººID', |
| | | finance_review_time DATETIME DEFAULT NULL COMMENT 'è´¢å¡å®¡æ ¸æ¶é´', |
| | | finance_review_opinion VARCHAR(500) DEFAULT NULL COMMENT 'è´¢å¡å®¡æ ¸æè§', |
| | | -- 5. 询价å |
| | | CREATE TABLE IF NOT EXISTS srm_inquiry ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '询价åID', |
| | | no VARCHAR(32) NOT NULL COMMENT '询价åå·', |
| | | title VARCHAR(128) NOT NULL COMMENT '询价æ é¢', |
| | | status TINYINT NOT NULL DEFAULT 0 COMMENT 'ç¶æï¼0è稿 10è¯¢ä»·ä¸ 20已转订å 30已忶', |
| | | inquiry_date DATE DEFAULT NULL COMMENT 'è¯¢ä»·æ¥æ', |
| | | deadline DATE DEFAULT NULL COMMENT 'æ¥ä»·æªæ¢æ¥æ', |
| | | purchaser_user_id BIGINT DEFAULT NULL COMMENT 'éè´åç¨æ·ID', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | UNIQUE KEY uk_apply_no (apply_no), |
| | | KEY idx_supplier_id (supplier_id), |
| | | KEY idx_apply_status (apply_status) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¾åºååå
¥ç³è¯·è¡¨'; |
| | | UNIQUE KEY uk_no (no), |
| | | KEY idx_status (status), |
| | | KEY idx_inquiry_date (inquiry_date) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SRM询价å'; |
| | | |
| | | -- 5. ä¾åºåèµè´¨è¯ä¹¦è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_supplier_certificate ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'è¯ä¹¦ID', |
| | | supplier_id BIGINT NOT NULL COMMENT 'ä¾åºåID', |
| | | certificate_type INT NOT NULL COMMENT 'è¯ä¹¦ç±»åï¼1è¥ä¸æ§ç
§ 2认è¯è¯ä¹¦ 3æ£æµæ¥å 4å
¶ä»ï¼', |
| | | certificate_name VARCHAR(255) NOT NULL COMMENT 'è¯ä¹¦åç§°', |
| | | certificate_no VARCHAR(100) DEFAULT NULL COMMENT 'è¯ä¹¦ç¼å·', |
| | | file_name VARCHAR(255) DEFAULT NULL COMMENT 'æä»¶åç§°', |
| | | file_url VARCHAR(500) DEFAULT NULL COMMENT 'æä»¶å°å', |
| | | issuing_authority VARCHAR(255) DEFAULT NULL COMMENT 'é¢åæºæ', |
| | | valid_start_date DATE DEFAULT NULL COMMENT 'ææå¼å§æ¥æ', |
| | | valid_end_date DATE DEFAULT NULL COMMENT 'ææç»ææ¥æ', |
| | | status INT NOT NULL DEFAULT 0 COMMENT 'ç¶æï¼0ææ 1è¿æ 2å³å°è¿æï¼', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | KEY idx_supplier_id (supplier_id), |
| | | KEY idx_certificate_type (certificate_type), |
| | | KEY idx_valid_end_date (valid_end_date) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¾åºåèµè´¨è¯ä¹¦è¡¨'; |
| | | |
| | | -- 6. ä¾åºå绩æè¯ä»·è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_supplier_evaluation ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'è¯ä»·ID', |
| | | supplier_id BIGINT NOT NULL COMMENT 'ä¾åºåID', |
| | | evaluation_period VARCHAR(50) NOT NULL COMMENT 'è¯ä»·å¨æï¼å¦ï¼2026-Q1ï¼', |
| | | quality_score DECIMAL(5,2) DEFAULT NULL COMMENT 'è´¨éè¯åï¼æ»¡å100ï¼', |
| | | quality_pass_rate DECIMAL(5,2) DEFAULT NULL COMMENT 'æ¥æåæ ¼ç(%)', |
| | | quality_defect_count INT DEFAULT 0 COMMENT 'ä¸è¯æ¬¡æ°', |
| | | delivery_score DECIMAL(5,2) DEFAULT NULL COMMENT '交ä»è¯åï¼æ»¡å100ï¼', |
| | | delivery_on_time_rate DECIMAL(5,2) DEFAULT NULL COMMENT 'åæ¶äº¤ä»ç(%)', |
| | | delivery_delay_count INT DEFAULT 0 COMMENT 'å»¶è¿æ¬¡æ°', |
| | | price_score DECIMAL(5,2) DEFAULT NULL COMMENT 'ä»·æ ¼è¯åï¼æ»¡å100ï¼', |
| | | service_score DECIMAL(5,2) DEFAULT NULL COMMENT 'æå¡è¯åï¼æ»¡å100ï¼', |
| | | service_response_speed INT DEFAULT NULL COMMENT 'ååºé度ï¼è¯å1-10ï¼', |
| | | composite_score DECIMAL(5,2) DEFAULT NULL COMMENT '综åè¯åï¼èªå¨è®¡ç®ï¼', |
| | | evaluation_level VARCHAR(20) DEFAULT NULL COMMENT 'è¯ä»·ç级ï¼A/B/C/Dï¼', |
| | | evaluator_id BIGINT DEFAULT NULL COMMENT 'è¯ä»·äººID', |
| | | evaluation_time DATETIME DEFAULT NULL COMMENT 'è¯ä»·æ¶é´', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | KEY idx_supplier_id (supplier_id), |
| | | KEY idx_evaluation_period (evaluation_period), |
| | | KEY idx_composite_score (composite_score) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¾åºå绩æè¯ä»·è¡¨'; |
| | | |
| | | -- 7. ææ é¡¹ç®è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_tender_project ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ææ é¡¹ç®ID', |
| | | tender_no VARCHAR(64) NOT NULL COMMENT 'ææ ç¼å·', |
| | | tender_name VARCHAR(255) NOT NULL COMMENT 'ææ åç§°', |
| | | tender_type INT NOT NULL COMMENT 'ææ ç±»åï¼1å
¬å¼ææ 2éè¯·ææ 3ç«äºæ§è°å¤ï¼', |
| | | purchase_org VARCHAR(100) DEFAULT NULL COMMENT 'éè´ç»ç»', |
| | | project_leader_id BIGINT DEFAULT NULL COMMENT '项ç®è´è´£äººID', |
| | | project_leader_name VARCHAR(50) DEFAULT NULL COMMENT '项ç®è´è´£äººå§å', |
| | | tender_status INT NOT NULL DEFAULT 0 COMMENT 'ææ ç¶æï¼0è稿 1åå¸ä¸ 2ææ ä¸ 3è¯æ ä¸ 4已宿 5å·²å
³éï¼', |
| | | budget_amount DECIMAL(24,6) DEFAULT NULL COMMENT 'é¢ç®éé¢', |
| | | start_time DATETIME DEFAULT NULL COMMENT 'å¼å§æ¶é´', |
| | | end_time DATETIME DEFAULT NULL COMMENT 'æªæ¢æ¶é´', |
| | | bid_open_time DATETIME DEFAULT NULL COMMENT 'é¢è®¡å¼æ æ¶é´', |
| | | tender_desc TEXT DEFAULT NULL COMMENT 'ææ è¯´æ', |
| | | qualification_requirements TEXT DEFAULT NULL COMMENT 'èµè´¨è¦æ±', |
| | | purchase_request_id BIGINT DEFAULT NULL COMMENT 'å
³èéè´ç³è¯·ID', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | UNIQUE KEY uk_tender_no (tender_no), |
| | | KEY idx_tender_status (tender_status), |
| | | KEY idx_purchase_request_id (purchase_request_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ææ é¡¹ç®è¡¨'; |
| | | |
| | | -- ææ é¡¹ç®è¡¨å¢å bidding_mode åæ®µï¼ç®ææ¨¡å¼æ¯æï¼ |
| | | SET @exists = (SELECT COUNT(*) FROM information_schema.columns |
| | | WHERE table_schema = DATABASE() AND table_name = 'srm_tender_project' AND column_name = 'bidding_mode'); |
| | | SET @sql = IF(@exists = 0, |
| | | 'ALTER TABLE srm_tender_project ADD COLUMN bidding_mode VARCHAR(20) NOT NULL DEFAULT ''FULL'' COMMENT ''æææ 模å¼: FULL-宿´ç, SIMPLE-ç®æç'' AFTER tender_status', |
| | | 'SELECT 1'); |
| | | PREPARE stmt FROM @sql; |
| | | EXECUTE stmt; |
| | | DEALLOCATE PREPARE stmt; |
| | | |
| | | -- 8. ææ ç©ææç»è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_tender_material ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ç©ææç»ID', |
| | | tender_project_id BIGINT NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | product_id BIGINT DEFAULT NULL COMMENT 'ç©æIDï¼å
³èMDMç©æï¼', |
| | | product_code VARCHAR(64) DEFAULT NULL COMMENT 'ç©æç¼ç ', |
| | | product_name VARCHAR(255) NOT NULL COMMENT 'ç©æåç§°', |
| | | -- 6. 询价å产åè¡ |
| | | CREATE TABLE IF NOT EXISTS srm_inquiry_item ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '询价产åè¡ID', |
| | | inquiry_id BIGINT NOT NULL COMMENT '询价åID', |
| | | product_id BIGINT DEFAULT NULL COMMENT '产åID', |
| | | product_unit_id BIGINT DEFAULT NULL COMMENT '产ååä½ID', |
| | | product_code VARCHAR(64) DEFAULT NULL COMMENT '产åç¼ç ', |
| | | product_name VARCHAR(255) DEFAULT NULL COMMENT '产ååç§°', |
| | | product_spec VARCHAR(200) DEFAULT NULL COMMENT 'è§æ ¼åå·', |
| | | quantity DECIMAL(24,6) NOT NULL COMMENT 'æ°é', |
| | | unit VARCHAR(20) NOT NULL COMMENT 'åä½', |
| | | tech_requirement TEXT DEFAULT NULL COMMENT 'ææ¯è¦æ±', |
| | | unit_name VARCHAR(50) DEFAULT NULL COMMENT 'åä½åç§°', |
| | | quantity DECIMAL(24,6) NOT NULL DEFAULT 0 COMMENT 'éè´æ°é', |
| | | estimated_price DECIMAL(24,6) DEFAULT NULL COMMENT 'é¢ä¼°åä»·', |
| | | selected_supplier_id BIGINT DEFAULT NULL COMMENT '䏿 ä¾åºåID', |
| | | selected_quote_id BIGINT DEFAULT NULL COMMENT '䏿 æ¥ä»·ID', |
| | | selected_price DECIMAL(24,6) DEFAULT NULL COMMENT '䏿 åä»·', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | sort INT NOT NULL DEFAULT 0 COMMENT 'æåº', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | KEY idx_tender_project_id (tender_project_id), |
| | | KEY idx_product_code (product_code) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ææ ç©ææç»è¡¨'; |
| | | KEY idx_inquiry_id (inquiry_id), |
| | | KEY idx_product_id (product_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SRM询价å产åè¡'; |
| | | |
| | | -- 9. ææ è®°å½è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_tender_bid ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ææ ID', |
| | | tender_project_id BIGINT NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | -- 7. 询价åä¸ä¾åºå |
| | | CREATE TABLE IF NOT EXISTS srm_inquiry_supplier ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '询价åä¸ä¾åºåID', |
| | | inquiry_id BIGINT NOT NULL COMMENT '询价åID', |
| | | supplier_id BIGINT NOT NULL COMMENT 'ä¾åºåID', |
| | | bid_no VARCHAR(64) NOT NULL COMMENT 'ææ ç¼å·', |
| | | bid_status INT NOT NULL DEFAULT 0 COMMENT 'ææ ç¶æï¼0æ¥å 10å·²ææ 20æ¤æ 30䏿 40æªä¸æ ï¼', |
| | | bid_time DATETIME DEFAULT NULL COMMENT 'ææ æ¶é´', |
| | | bid_total_amount DECIMAL(24,6) DEFAULT NULL COMMENT 'ææ æ»éé¢', |
| | | bid_file_name VARCHAR(255) DEFAULT NULL COMMENT 'ææ æä»¶åç§°', |
| | | bid_file_url VARCHAR(500) DEFAULT NULL COMMENT 'ææ æä»¶å°å', |
| | | withdraw_reason VARCHAR(500) DEFAULT NULL COMMENT 'æ¤æ åå ', |
| | | quote_status TINYINT NOT NULL DEFAULT 0 COMMENT 'æ¥ä»·ç¶æï¼0æªæ¥ä»· 10å·²æ¥ä»·', |
| | | quote_time DATETIME DEFAULT NULL COMMENT 'æè¿æ¥ä»·æ¶é´', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | UNIQUE KEY uk_bid_no (bid_no), |
| | | KEY idx_tender_project_id (tender_project_id), |
| | | KEY idx_supplier_id (supplier_id), |
| | | KEY idx_bid_status (bid_status) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ææ è®°å½è¡¨'; |
| | | KEY idx_inquiry_id (inquiry_id), |
| | | KEY idx_supplier_id (supplier_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SRM询价åä¸ä¾åºå'; |
| | | |
| | | -- 10. ä¾åºåæ¥ä»·æç»è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_supplier_quote ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'æ¥ä»·ID', |
| | | tender_project_id BIGINT NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | -- 8. 询价æ¥ä»·æç» |
| | | CREATE TABLE IF NOT EXISTS srm_inquiry_quote ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '询价æ¥ä»·ID', |
| | | inquiry_id BIGINT NOT NULL COMMENT '询价åID', |
| | | inquiry_item_id BIGINT NOT NULL COMMENT '询价产åè¡ID', |
| | | supplier_id BIGINT NOT NULL COMMENT 'ä¾åºåID', |
| | | bid_id BIGINT DEFAULT NULL COMMENT 'ææ è®°å½ID', |
| | | tender_material_id BIGINT NOT NULL COMMENT 'ææ ç©æID', |
| | | quote_price DECIMAL(24,6) NOT NULL COMMENT 'æ¥ä»·ä»·æ ¼', |
| | | tax_rate DECIMAL(5,2) DEFAULT NULL COMMENT 'ç¨ç(%)', |
| | | price DECIMAL(24,6) NOT NULL COMMENT 'æ¥ä»·åä»·', |
| | | tax_rate DECIMAL(24,6) DEFAULT NULL COMMENT 'ç¨çï¼%ï¼', |
| | | delivery_cycle INT DEFAULT NULL COMMENT 'äº¤è´§å¨æï¼å¤©ï¼', |
| | | payment_terms VARCHAR(500) DEFAULT NULL COMMENT '仿¬¾æ¡ä»¶', |
| | | warranty_period INT DEFAULT NULL COMMENT 'è´¨ä¿æï¼æï¼', |
| | | payment_terms VARCHAR(128) DEFAULT NULL COMMENT '仿¬¾æ¡ä»¶', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | is_selected BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦ä¸æ æ¥ä»·', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | KEY idx_tender_project_id (tender_project_id), |
| | | KEY idx_supplier_id (supplier_id), |
| | | KEY idx_bid_id (bid_id), |
| | | KEY idx_tender_material_id (tender_material_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ä¾åºåæ¥ä»·æç»è¡¨'; |
| | | KEY idx_inquiry_id (inquiry_id), |
| | | KEY idx_inquiry_item_id (inquiry_item_id), |
| | | KEY idx_supplier_id (supplier_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SRM询价æ¥ä»·æç»'; |
| | | |
| | | -- 11. 弿 è®°å½è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_bid_open ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '弿 ID', |
| | | tender_project_id BIGINT NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | open_time DATETIME NOT NULL COMMENT '弿 æ¶é´', |
| | | open_person_id BIGINT DEFAULT NULL COMMENT '弿 人åID', |
| | | open_person_name VARCHAR(50) DEFAULT NULL COMMENT '弿 人åå§å', |
| | | open_record TEXT DEFAULT NULL COMMENT '弿 è®°å½', |
| | | attachment_name VARCHAR(255) DEFAULT NULL COMMENT 'éä»¶åç§°', |
| | | attachment_url VARCHAR(500) DEFAULT NULL COMMENT 'éä»¶å°å', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | KEY idx_tender_project_id (tender_project_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='弿 è®°å½è¡¨'; |
| | | |
| | | -- 12. è¯æ è®°å½è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_bid_evaluation ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'è¯æ ID', |
| | | tender_project_id BIGINT NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | supplier_id BIGINT NOT NULL COMMENT 'ä¾åºåID', |
| | | bid_id BIGINT NOT NULL COMMENT 'ææ è®°å½ID', |
| | | price_score DECIMAL(5,2) DEFAULT NULL COMMENT 'ä»·æ ¼è¯åï¼æ»¡å40ï¼', |
| | | tech_score DECIMAL(5,2) DEFAULT NULL COMMENT 'ææ¯è¯åï¼æ»¡å30ï¼', |
| | | delivery_score DECIMAL(5,2) DEFAULT NULL COMMENT '交ä»è¯åï¼æ»¡å20ï¼', |
| | | service_score DECIMAL(5,2) DEFAULT NULL COMMENT 'æå¡è¯åï¼æ»¡å10ï¼', |
| | | composite_score DECIMAL(5,2) DEFAULT NULL COMMENT '综åè¯åï¼èªå¨è®¡ç®=ä»·æ ¼+ææ¯+交ä»+æå¡ï¼', |
| | | ranking INT DEFAULT NULL COMMENT 'æå', |
| | | evaluator_id BIGINT DEFAULT NULL COMMENT 'è¯æ 人ID', |
| | | evaluator_name VARCHAR(50) DEFAULT NULL COMMENT 'è¯æ 人å§å', |
| | | evaluation_opinion VARCHAR(500) DEFAULT NULL COMMENT 'è¯æ æè§', |
| | | evaluation_time DATETIME DEFAULT NULL COMMENT 'è¯æ æ¶é´', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | KEY idx_tender_project_id (tender_project_id), |
| | | KEY idx_supplier_id (supplier_id), |
| | | KEY idx_bid_id (bid_id), |
| | | KEY idx_ranking (ranking) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='è¯æ è®°å½è¡¨'; |
| | | |
| | | -- 13. 宿 è®°å½è¡¨ |
| | | CREATE TABLE IF NOT EXISTS srm_bid_award ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '宿 ID', |
| | | tender_project_id BIGINT NOT NULL COMMENT 'ææ é¡¹ç®ID', |
| | | -- 9. 询价转订åè®°å½ |
| | | CREATE TABLE IF NOT EXISTS srm_inquiry_order ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT '询价转订åè®°å½ID', |
| | | inquiry_id BIGINT NOT NULL COMMENT '询价åID', |
| | | supplier_id BIGINT NOT NULL COMMENT '䏿 ä¾åºåID', |
| | | bid_id BIGINT NOT NULL COMMENT '䏿 ææ ID', |
| | | award_no VARCHAR(64) NOT NULL COMMENT '䏿 éç¥ä¹¦ç¼å·', |
| | | award_status INT NOT NULL DEFAULT 0 COMMENT '宿 ç¶æï¼0å¾
å®¡æ¹ 10已宿 20å·²çæè®¢åï¼', |
| | | award_amount DECIMAL(24,6) NOT NULL COMMENT '䏿 éé¢', |
| | | award_time DATETIME DEFAULT NULL COMMENT '宿 æ¶é´', |
| | | notice_file_name VARCHAR(255) DEFAULT NULL COMMENT '䏿 éç¥ä¹¦æä»¶å', |
| | | notice_file_url VARCHAR(500) DEFAULT NULL COMMENT '䏿 éç¥ä¹¦æä»¶å°å', |
| | | purchase_order_id BIGINT DEFAULT NULL COMMENT 'å
³èçæçéè´è®¢åID', |
| | | purchase_order_no VARCHAR(64) DEFAULT NULL COMMENT 'å
³èçæçéè´è®¢åå·', |
| | | approver_id BIGINT DEFAULT NULL COMMENT '审æ¹äººID', |
| | | approval_time DATETIME DEFAULT NULL COMMENT 'å®¡æ¹æ¶é´', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | purchase_order_id BIGINT DEFAULT NULL COMMENT 'çæçéè´è®¢åID', |
| | | purchase_order_no VARCHAR(64) DEFAULT NULL COMMENT 'çæçéè´è®¢åå·', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | UNIQUE KEY uk_award_no (award_no), |
| | | KEY idx_tender_project_id (tender_project_id), |
| | | KEY idx_inquiry_id (inquiry_id), |
| | | KEY idx_supplier_id (supplier_id), |
| | | KEY idx_purchase_order_id (purchase_order_id) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='宿 è®°å½è¡¨'; |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SRM询价转éè´è®¢åè®°å½'; |
| | | |
| | | -- 10. ææ ä¿è¯éå°è´¦ |
| | | CREATE TABLE IF NOT EXISTS srm_bid_bond ( |
| | | id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ææ ä¿è¯éID', |
| | | no VARCHAR(32) NOT NULL COMMENT 'ä¿è¯éåå·', |
| | | supplier_id BIGINT NOT NULL COMMENT 'ä¾åºåID', |
| | | project_name VARCHAR(255) DEFAULT NULL COMMENT '项ç®åç§°', |
| | | inquiry_id BIGINT DEFAULT NULL COMMENT 'å
³è询价åID', |
| | | purchase_order_id BIGINT DEFAULT NULL COMMENT 'å
³èéè´è®¢åID', |
| | | bond_amount DECIMAL(24,6) NOT NULL DEFAULT 0 COMMENT 'ä¿è¯ééé¢', |
| | | pay_date DATE DEFAULT NULL COMMENT 'ç¼´çº³æ¥æ', |
| | | won BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦ä¸æ ', |
| | | refund_status TINYINT NOT NULL DEFAULT 0 COMMENT 'éåç¶æï¼0æªéå 1é¨åéå 2å·²éå 3æ ééå', |
| | | refund_amount DECIMAL(24,6) DEFAULT NULL COMMENT 'éåéé¢', |
| | | refund_date DATE DEFAULT NULL COMMENT 'é忥æ', |
| | | remark VARCHAR(500) DEFAULT NULL COMMENT '夿³¨', |
| | | creator VARCHAR(64) DEFAULT '' COMMENT 'å建è
', |
| | | create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | updater VARCHAR(64) DEFAULT '' COMMENT 'æ´æ°è
', |
| | | update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | deleted BIT(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | PRIMARY KEY (id), |
| | | UNIQUE KEY uk_no (no), |
| | | KEY idx_supplier_id (supplier_id), |
| | | KEY idx_inquiry_id (inquiry_id), |
| | | KEY idx_refund_status (refund_status) |
| | | ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SRMææ ä¿è¯éå°è´¦'; |
| | |
| | | -- ===================================================== |
| | | -- SRM 模åèåæ°æ® |
| | | -- SRM 模åèåæ°æ®ï¼æ°åºåå§åç¨ï¼ |
| | | -- 已移é¤ï¼ä¾åºååå
¥/èµè´¨/绩æ/æææ /ç»è®¡åæ |
| | | -- ä¿çï¼ä¾åºåæ¡£æ¡ã询价æ¯ä»·ãææ ä¿è¯éãä¾åºå徿¥ |
| | | -- 说æï¼ä½¿ç¨ INSERT IGNOREï¼é夿§è¡ä¸ä¼æ¥ä¸»é®å²çªã |
| | | -- ===================================================== |
| | | |
| | | -- 1. äºçº§ç®å½ï¼SRM ä¾åºå管çï¼æå¨éè´ç®¡çä¸ï¼ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | (602524, 'SRM ä¾åºå管ç', '', 1, 5, 2602, 'srm', 'ep:avatar', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | -- 1. ä¾åºåæ¡£æ¡ï¼ç´æ¥æå¨éè´ç®¡çæ ¹èåä¸ï¼ |
| | | INSERT IGNORE INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602525, 'ä¾åºåæ¡£æ¡', '', 2, 1, 2602, 'supplier', 'ep:document', 'srm/supplier/index', 'SrmSupplier', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2. ä¾åºåæ¡£æ¡ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602525, 'ä¾åºåæ¡£æ¡', '', 2, 10, 602524, 'supplier', 'ep:document', 'srm/supplier/index', 'SrmSupplier', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | INSERT IGNORE INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | (602526, 'ä¾åºåæ¥è¯¢', 'srm:supplier:query', 3, 1, 602525, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602527, 'ä¾åºåå建', 'srm:supplier:create', 3, 2, 602525, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602528, 'ä¾åºåæ´æ°', 'srm:supplier:update', 3, 3, 602525, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602529, 'ä¾åºåå é¤', 'srm:supplier:delete', 3, 4, 602525, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | (602529, 'ä¾åºåå é¤', 'srm:supplier:delete', 3, 4, 602525, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075301, 'ä¾åºå导åº', 'srm:supplier:export', 3, 5, 602525, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (1075302, 'ä¾åºå导å
¥', 'srm:supplier:import', 3, 6, 602525, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 3. ä¾åºååå
¥ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602530, 'ä¾åºååå
¥', '', 2, 20, 602524, 'supplier-apply', 'ep:checked', 'srm/supplierApply/index', 'SrmSupplierApply', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | -- 2. 询价æ¯ä»· |
| | | INSERT IGNORE INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602620, '询价æ¯ä»·', '', 2, 2, 2602, 'inquiry', 'ep:search', 'srm/inquiry/index', 'SrmInquiry', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | INSERT IGNORE INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | (602531, 'åå
¥æ¥è¯¢', 'srm:supplier-apply:query', 3, 1, 602530, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602532, 'åå
¥å建', 'srm:supplier-apply:create', 3, 2, 602530, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602533, 'åå
¥æ´æ°', 'srm:supplier-apply:update', 3, 3, 602530, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602534, 'åå
¥å é¤', 'srm:supplier-apply:delete', 3, 4, 602530, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | (602621, '询价æ¥è¯¢', 'srm:inquiry:query', 3, 1, 602620, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602622, '询价å建', 'srm:inquiry:create', 3, 2, 602620, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602623, 'è¯¢ä»·æ´æ°', 'srm:inquiry:update', 3, 3, 602620, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602624, '询价å é¤', 'srm:inquiry:delete', 3, 4, 602620, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602625, '询价确认转订å', 'srm:inquiry:confirm', 3, 5, 602620, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602626, '询价å½å
¥æ¥ä»·', 'srm:inquiry:quote', 3, 6, 602620, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 4. ä¾åºåèµè´¨ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602535, 'ä¾åºåèµè´¨', '', 2, 30, 602524, 'supplier-certificate', 'ep:medal', 'srm/supplierCertificate/index', 'SrmSupplierCertificate', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | -- 3. ææ ä¿è¯é |
| | | INSERT IGNORE INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602630, 'ææ ä¿è¯é', '', 2, 3, 2602, 'bid-bond', 'ep:money', 'srm/bidBond/index', 'SrmBidBond', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | INSERT IGNORE INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | (602536, 'èµè´¨æ¥è¯¢', 'srm:supplier-certificate:query', 3, 1, 602535, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602537, 'èµè´¨å建', 'srm:supplier-certificate:create', 3, 2, 602535, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602538, 'èµè´¨æ´æ°', 'srm:supplier-certificate:update', 3, 3, 602535, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602539, 'èµè´¨å é¤', 'srm:supplier-certificate:delete', 3, 4, 602535, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | (602631, 'ä¿è¯éæ¥è¯¢', 'srm:bid-bond:query', 3, 1, 602630, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602632, 'ä¿è¯éå建', 'srm:bid-bond:create', 3, 2, 602630, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602633, 'ä¿è¯éæ´æ°', 'srm:bid-bond:update', 3, 3, 602630, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602634, 'ä¿è¯éå é¤', 'srm:bid-bond:delete', 3, 4, 602630, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 5. ä¾åºå绩æ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602540, 'ä¾åºå绩æ', '', 2, 40, 602524, 'supplier-evaluation', 'ep:data-analysis', 'srm/supplierEvaluation/index', 'SrmSupplierEvaluation', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | -- 4. ä¾åºå徿¥ï¼éè´ç®¡çæ ¹èåä¸ï¼ |
| | | INSERT IGNORE INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602640, 'ä¾åºå徿¥', '', 2, 8, 2602, 'supplier-statement', 'ep:wallet', 'erp/purchase/statement/index', 'ErpSupplierStatement', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | (602541, 'è¯ä»·æ¥è¯¢', 'srm:supplier-evaluation:query', 3, 1, 602540, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602542, 'è¯ä»·å建', 'srm:supplier-evaluation:create', 3, 2, 602540, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602543, 'è¯ä»·æ´æ°', 'srm:supplier-evaluation:update', 3, 3, 602540, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602544, 'è¯ä»·å é¤', 'srm:supplier-evaluation:delete', 3, 4, 602540, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 6. æææ 管ç |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602545, 'æææ 管ç', '', 2, 50, 602524, 'tender', 'ep:files', 'srm/tender/index', 'SrmTender', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | -- ææ é¡¹ç® |
| | | (602546, 'ææ æ¥è¯¢', 'srm:tender-project:query', 3, 1, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602547, 'ææ å建', 'srm:tender-project:create', 3, 2, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602548, 'ææ æ´æ°', 'srm:tender-project:update', 3, 3, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602549, 'ææ å é¤', 'srm:tender-project:delete', 3, 4, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- ææ |
| | | (602550, 'ææ æ¥è¯¢', 'srm:tender-bid:query', 3, 5, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602551, 'ææ å建', 'srm:tender-bid:create', 3, 6, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602552, 'ææ æ´æ°', 'srm:tender-bid:update', 3, 7, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- æ¥ä»· |
| | | (602553, 'æ¥ä»·æ¥è¯¢', 'srm:supplier-quote:query', 3, 8, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602554, 'æ¥ä»·å建', 'srm:supplier-quote:create', 3, 9, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602555, 'æ¥ä»·æ´æ°', 'srm:supplier-quote:update', 3, 10, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- è¯æ |
| | | (602556, 'è¯æ æ¥è¯¢', 'srm:bid-evaluation:query', 3, 11, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602557, 'è¯æ å建', 'srm:bid-evaluation:create', 3, 12, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602558, 'è¯æ æ´æ°', 'srm:bid-evaluation:update', 3, 13, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- 弿 |
| | | (602559, '弿 æ¥è¯¢', 'srm:bid-open:query', 3, 14, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602560, '弿 å建', 'srm:bid-open:create', 3, 15, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | -- 宿 |
| | | (602561, '宿 æ¥è¯¢', 'srm:bid-award:query', 3, 16, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602562, '宿 å建', 'srm:bid-award:create', 3, 17, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602563, '宿 æ´æ°', 'srm:bid-award:update', 3, 18, 602545, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 7. æææ é
ç½® |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602612, 'æææ é
ç½®', '', 2, 55, 602524, 'tender-config', 'ep:setting', 'srm/tender/config/index', 'SrmTenderConfig', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | (602613, 'é
ç½®æ¥è¯¢', 'srm:tender-config:query', 3, 1, 602612, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'), |
| | | (602614, 'é
ç½®æ´æ°', 'srm:tender-config:update', 3, 2, 602612, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 8. ç»è®¡åæ |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602569, 'ç»è®¡åæ', '', 2, 70, 602524, 'statistics', 'ep:trend-charts', 'srm/statistics/index', 'SrmStatistics', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES |
| | | (602570, 'ç»è®¡æ¥è¯¢', 'srm:statistics:query', 3, 1, 602569, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | | INSERT IGNORE INTO system_menu (id, name, permission, type, sort, parent_id, path, icon, component, component_name, status, visible, keep_alive, always_show, creator, create_time, updater, update_time, deleted) |
| | | VALUES (602641, 'ä¾åºå徿¥æ¥è¯¢', 'erp:supplier-statement:query', 3, 1, 602640, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'); |
| | |
| | | -- ===================================================== |
| | | -- SRM æ¨¡åæµè¯æ°æ® |
| | | -- è¿è¡å请å
ç¡®ä¿ srm_init.sql å·²æ§è¡ |
| | | -- ä»
å
å«ï¼ä¾åºåãè系人ãé¶è¡è´¦æ·ãåç±»å
³è |
| | | -- 询价/ä¿è¯éæ°æ®è¯·éè¿é¡µé¢ææ¥å£å建ï¼é¿å
ä¸çå®åæ®ç¼å·å²çª |
| | | -- ===================================================== |
| | | |
| | | -- 1. ä¾åºåæµè¯æ°æ® |
| | | INSERT INTO srm_supplier (id, code, name, type, status, contact_name, contact_mobile, contact_email, address, bank_name, bank_account, tax_no, remark, create_time, update_time, creator, updater, deleted) |
| | | INSERT IGNORE INTO srm_supplier (id, code, name, type, status, contact_name, contact_mobile, contact_email, address, bank_name, bank_account, tax_no, remark, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (1001, 'SUP-20240001', 'æ±èæºè½å¶é æéå
¬å¸', 1, 1, 'å¼ ä¸', '13800001111', 'zhangsan@test.com', 'æ±èçåäº¬å¸æ±å®åºxxè·¯100å·', 'ä¸å½é¶è¡å京åè¡', '6222024301000000001', '91320115MA1XXXXXX1', 'ä¼è´¨ä¾åºå', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (1002, 'SUP-20240002', '䏿µ·è´¸æè¿åºå£å
¬å¸', 2, 1, 'æå', '13800002222', 'lisi@test.com', '䏿µ·å¸æµ¦ä¸æ°åºxxè·¯200å·', 'å·¥åé¶è¡ä¸æµ·åè¡', '1002024301000000002', '91310115MA2XXXXXX2', 'é¿æåä½', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (1003, 'SUP-20240003', 'æ·±å³ç§ææå¡æéå
¬å¸', 3, 1, 'çäº', '13800003333', 'wangwu@test.com', 'æ·±å³å¸åå±±åºxxè·¯300å·', 'æåé¶è¡æ·±å³åè¡', '6225884301000000003', '91440300MA3XXXXXX3', 'æ°ä¾åºå', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (1004, 'SUP-20240004', 'æµæ±ç²¾å¯æºæ¢°æéå
¬å¸', 1, 0, 'èµµå
', '13800004444', 'zhaoliu@test.com', 'æµæ±çæå·å¸è¥¿æ¹åºxxè·¯400å·', '建设é¶è¡æå·åè¡', '6227004301000000004', '91330100MA4XXXXXX4', 'æååä½', NOW(), NOW(), 'admin', 'admin', 0); |
| | | (1001, 'SUP-20240001', 'æ±èæºè½å¶é æéå
¬å¸', 1, 0, 'å¼ ä¸', '13800001111', 'zhangsan@test.com', 'æ±èçåäº¬å¸æ±å®åºxxè·¯100å·', 'ä¸å½é¶è¡å京åè¡', '6222024301000000001', '91320115MA1XXXXXX1', 'ä¼è´¨ä¾åºå', NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (1002, 'SUP-20240002', '䏿µ·è´¸æè¿åºå£å
¬å¸', 2, 0, 'æå', '13800002222', 'lisi@test.com', '䏿µ·å¸æµ¦ä¸æ°åºxxè·¯200å·', 'å·¥åé¶è¡ä¸æµ·åè¡', '1002024301000000002', '91310115MA2XXXXXX2', 'é¿æåä½', NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (1003, 'SUP-20240003', 'æ·±å³ç§ææå¡æéå
¬å¸', 3, 0, 'çäº', '13800003333', 'wangwu@test.com', 'æ·±å³å¸åå±±åºxxè·¯300å·', 'æåé¶è¡æ·±å³åè¡', '6225884301000000003', '91440300MA3XXXXXX3', 'æ°ä¾åºå', NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (1004, 'SUP-20240004', 'æµæ±ç²¾å¯æºæ¢°æéå
¬å¸', 1, 1, 'èµµå
', '13800004444', 'zhaoliu@test.com', 'æµæ±çæå·å¸è¥¿æ¹åºxxè·¯400å·', '建设é¶è¡æå·åè¡', '6227004301000000004', '91330100MA4XXXXXX4', 'æååä½', NOW(), NOW(), 'admin', 'admin', b'0'); |
| | | |
| | | -- 2. ä¾åºåè系人 |
| | | INSERT INTO srm_supplier_contact (id, supplier_id, name, mobile, email, position, is_primary, remark, create_time, update_time, creator, updater, deleted) |
| | | -- 2. ä¾åºåèç³»äººï¼æ¯ä¸ªä¾åºå䏿¡é»è®¤èç³»äººï¼ |
| | | INSERT IGNORE INTO srm_supplier_contact (id, supplier_id, name, mobile, email, position, is_default, sort, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (2001, 1001, 'å¼ ä¸', '13800001111', 'zhangsan@test.com', 'éè´ç»ç', 1, '主è¦è系人', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (2002, 1001, 'å¼ ä¸ä¸°', '13800001112', 'zhangsanfeng@test.com', 'ææ¯æ»ç', 0, 'ææ¯å¯¹æ¥', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (2003, 1002, 'æå', '13800002222', 'lisi@test.com', 'æ»ç»ç', 1, NULL, NOW(), NOW(), 'admin', 'admin', 0); |
| | | (2001, 1001, 'å¼ ä¸', '13800001111', 'zhangsan@test.com', 'éè´ç»ç', b'1', 0, NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (2002, 1001, 'å¼ ä¸ä¸°', '13800001112', 'zhangsanfeng@test.com', 'ææ¯æ»ç', b'0', 1, NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (2003, 1002, 'æå', '13800002222', 'lisi@test.com', 'æ»ç»ç', b'1', 0, NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (2004, 1003, 'çäº', '13800003333', 'wangwu@test.com', 'éå®ç»ç', b'1', 0, NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (2005, 1004, 'èµµå
', '13800004444', 'zhaoliu@test.com', 'åé¿', b'1', 0, NOW(), NOW(), 'admin', 'admin', b'0'); |
| | | |
| | | -- 3. ä¾åºååç±»å
³è |
| | | INSERT INTO srm_supplier_category (id, supplier_id, category_id, category_name, create_time, update_time, creator, updater, deleted) |
| | | -- 3. ä¾åºåé¶è¡è´¦æ·ï¼æ¯ä¸ªä¾åºå䏿¡é»è®¤è´¦æ·ï¼ |
| | | INSERT IGNORE INTO srm_supplier_bank (id, supplier_id, bank_name, bank_account, bank_no, bank_address, is_default, sort, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (2101, 1001, 'ä¸å½é¶è¡å京åè¡', '6222024301000000001', '104301000013', 'å京å¸ä¸å±±è·¯1å·', b'1', 0, NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (2102, 1001, 'å·¥åé¶è¡å京æ±å®æ¯è¡', '6222024301000000099', '102301000088', 'åäº¬å¸æ±å®åºxxè·¯100å·', b'0', 1, NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (2103, 1002, 'å·¥åé¶è¡ä¸æµ·åè¡', '1002024301000000002', '102290000001', '䏿µ·å¸æµ¦ä¸æ°åºxxè·¯200å·', b'1', 0, NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (2104, 1003, 'æåé¶è¡æ·±å³åè¡', '6225884301000000003', '103584000002', 'æ·±å³å¸åå±±åºxxè·¯300å·', b'1', 0, NOW(), NOW(), 'admin', 'admin', b'0'), |
| | | (2105, 1004, '建设é¶è¡æå·åè¡', '6227004301000000004', '105331000003', 'æå·å¸è¥¿æ¹åºxxè·¯400å·', b'1', 0, NOW(), NOW(), 'admin', 'admin', b'0'); |
| | | |
| | | -- 4. ä¾åºååç±»å
³è |
| | | INSERT IGNORE INTO srm_supplier_category (id, supplier_id, category_id, category_name, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (3001, 1001, 1, 'æºæ¢°å å·¥', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (3002, 1001, 2, 'ç²¾å¯å¶é ', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (3003, 1002, 3, 'è´¸ææå¡', NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 4. ä¾åºååå
¥ç³è¯· |
| | | INSERT INTO srm_supplier_apply (id, apply_no, supplier_name, contact_name, contact_mobile, contact_email, address, bank_name, bank_account, tax_no, apply_status, audit_comment, remark, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (4001, 'AP2024010001', 'æ±èæºè½å¶é æéå
¬å¸', 'å¼ ä¸', '13800001111', 'zhangsan@test.com', 'æ±èçåäº¬å¸æ±å®åºxxè·¯100å·', 'ä¸å½é¶è¡å京åè¡', '6222024301000000001', '91320115MA1XXXXXX1', 4, 'èµè´¨é½å
¨ï¼å®¡æ¹éè¿', NULL, NOW(), NOW(), 'admin', 'admin', 0), |
| | | (4002, 'AP2024020002', 'å京æ°ç§ææéå
¬å¸', 'åä¸', '13800005555', 'liuqi@test.com', 'åäº¬å¸æµ·æ·åºxxè·¯500å·', 'åä¸é¶è¡å京åè¡', '6228484301000000005', '91110108MA5XXXXXX5', 1, NULL, 'å¾
å®¡æ ¸', NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 5. ä¾åºåèµè´¨è¯ä¹¦ |
| | | INSERT INTO srm_supplier_certificate (id, supplier_id, certificate_name, certificate_no, certificate_type, issuing_authority, issue_date, expire_date, remark, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (5001, 1001, 'ISO9001è´¨é管çä½ç³»è¯ä¹¦', 'ISO9001-2024-001', 1, 'SGSè®¤è¯æºæ', '2024-01-15', '2027-01-14', 'ä¸å¹´æææ', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (5002, 1001, 'ISO14001ç¯å¢ç®¡çä½ç³»è¯ä¹¦', 'ISO14001-2024-002', 2, 'TUVè®¤è¯æºæ', '2024-03-01', '2027-02-28', NULL, NOW(), NOW(), 'admin', 'admin', 0), |
| | | (5003, 1002, 'è¿åºå£è´¸æè®¸å¯è¯', 'TRADE-2024-001', 4, 'åå¡é¨', '2024-02-01', '2025-01-31', 'å³å°å°æ', NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 6. ä¾åºå绩æè¯ä»· |
| | | INSERT INTO srm_supplier_evaluation (id, supplier_id, evaluation_period, quality_score, delivery_score, price_score, service_score, composite_score, grade, remark, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (6001, 1001, '2024-Q1', 92, 88, 85, 90, 89, 'B', 'è´¨é稳å®ï¼äº¤ä»åæ¶', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (6002, 1001, '2024-Q2', 95, 92, 88, 93, 92, 'A', 'åé¡¹ææ ä¼ç§', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (6003, 1002, '2024-Q1', 80, 75, 90, 85, 81, 'B', 'ä»·æ ¼æä¼å¿ï¼äº¤ä»ç¥æ
¢', NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 7. ææ é¡¹ç® |
| | | INSERT INTO srm_tender_project (id, tender_no, tender_name, tender_type, purchase_org, project_leader_id, project_leader_name, tender_status, budget_amount, start_time, end_time, bid_open_time, tender_desc, qualification_requirements, purchase_request_id, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (7001, 'TEN-202401001', '2024å¹´Q1åææéè´ææ ', 1, 'éè´é¨', 1, '管çå', 4, 5000000.00, '2024-01-01 00:00:00', '2024-01-31 23:59:59', '2024-02-01 10:00:00', 'éè´ä¸é颿¿æ200å¨', '1. 注åèµéâ¥500ä¸ 2. å
·å¤ISO9001认è¯', NULL, NOW(), NOW(), 'admin', 'admin', 0), |
| | | (7002, 'TEN-202402002', '2024å¹´Q2设å¤éè´ææ ', 2, '设å¤é¨', 2, 'çç»ç', 1, 2000000.00, '2024-04-01 00:00:00', '2024-04-30 23:59:59', '2024-05-01 14:00:00', 'éè´æ°æ§æºåº5å°', '1. å
·å¤è®¾å¤ä»£çèµè´¨ 2. æä¾å®åæå¡æ¿è¯º', NULL, NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 8. ææ ç©æ |
| | | INSERT INTO srm_tender_material (id, tender_project_id, item_code, item_name, spec, unit, quantity, remark, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (8001, 7001, 'MAT-001', 'ä¸é颿¿304', '2.0*1500*3000mm', 'å¨', 100, NULL, NOW(), NOW(), 'admin', 'admin', 0), |
| | | (8002, 7001, 'MAT-002', 'ä¸é颿¿316L', '1.5*1500*3000mm', 'å¨', 100, 'èè
èè¦æ±', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (8003, 7002, 'MAT-003', 'æ°æ§æºåºCNC-500', 'å å·¥èå´500*400mm', 'å°', 5, 'å«å®è£
è°è¯', NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 9. ææ è®°å½ |
| | | INSERT INTO srm_tender_bid (id, tender_project_id, supplier_id, bid_no, bid_status, bid_time, bid_total_amount, withdraw_reason, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (9001, 7001, 1001, 'BID-202401-001', 1, '2024-01-15 10:00:00', 4800000.00, NULL, NOW(), NOW(), 'admin', 'admin', 0), |
| | | (9002, 7001, 1002, 'BID-202401-002', 1, '2024-01-20 14:00:00', 4900000.00, NULL, NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 10. ä¾åºåæ¥ä»· |
| | | INSERT INTO srm_supplier_quote (id, bid_id, material_id, unit_price, total_price, delivery_days, remark, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (10001, 9001, 8001, 22000.00, 2200000.00, 30, NULL, NOW(), NOW(), 'admin', 'admin', 0), |
| | | (10002, 9001, 8002, 26000.00, 2600000.00, 30, 'å«è¿è´¹', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (10003, 9002, 8001, 23000.00, 2300000.00, 25, NULL, NOW(), NOW(), 'admin', 'admin', 0), |
| | | (10004, 9002, 8002, 26000.00, 2600000.00, 28, NULL, NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 11. 弿 è®°å½ |
| | | INSERT INTO srm_bid_open (id, tender_project_id, open_no, open_time, bid_count, supplier_count, open_status, remark, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (11001, 7001, 'OPEN-20240201', '2024-02-01 10:00:00', 2, 2, 1, 'ææ æªæ¢ï¼å
±2å®¶ä¾åºååä¸', NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 12. è¯æ è®°å½ |
| | | INSERT INTO srm_bid_evaluation (id, tender_project_id, bid_id, technical_score, commercial_score, composite_score, rank, comment, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (12001, 7001, 9001, 88, 85, 86, 1, 'ææ¯æ¹æ¡ä¼ç§ï¼ä»·æ ¼åç', NOW(), NOW(), 'admin', 'admin', 0), |
| | | (12002, 7001, 9002, 82, 90, 87, 2, 'ä»·æ ¼æä¼å¿ï¼ææ¯æ¹æ¡ä¸è¬', NOW(), NOW(), 'admin', 'admin', 0); |
| | | |
| | | -- 13. 宿 è®°å½ |
| | | INSERT INTO srm_bid_award (id, tender_project_id, supplier_id, bid_id, award_no, award_status, award_amount, award_time, purchase_order_id, purchase_order_no, remark, create_time, update_time, creator, updater, deleted) |
| | | VALUES |
| | | (13001, 7001, 1001, 9001, 'AWARD-202402-001', 1, 4800000.00, '2024-02-05 16:00:00', NULL, NULL, '综åè¯å第ä¸', NOW(), NOW(), 'admin', 'admin', 0); |
| | | |