doc/20260625_master_contract_no_sync.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,531 @@ # æ»ååå·åæ®µåæ¥æ·»å ## æ¶åé¡µé¢ ### éå®ç¸å ³ - ç产订å管çé¡µé¢ - ç产æ¥å·¥ç®¡çé¡µé¢ - ç产计å管çé¡µé¢ - å货管çé¡µé¢ - éå®é货管çé¡µé¢ - 客æ·å¾æ¥é¡µé¢ï¼åè´§æç»ã产åæç»ãååæç»ï¼ - è´¨æ£ç®¡çé¡µé¢ - è´¢å¡ç®¡ç-éå®åºåºå°è´¦ - è´¢å¡ç®¡ç-éå®éè´§å°è´¦ ### éè´ç¸å ³ - éè´å ¥åºç®¡çé¡µé¢ - éè´é货管çé¡µé¢ - ä¾åºå徿¥é¡µé¢ï¼éè´æç»ï¼ - è´¢å¡ç®¡ç-éè´å ¥åºå°è´¦ - è´¢å¡ç®¡ç-éè´éè´§å°è´¦ ## æ°å¢å段说æ | åæ®µå | ç±»å | 说æ | |--------|------|------| | masterContractNo | String | æ»ååå· | ## æ¶åæ¥å£ ### 1. çäº§è®¢åæ¥å£ **GET /productionOrder/pageProductionOrder** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "salesContractNo": "XS202601001", "masterContractNo": "ZHT202601001", "customerName": "客æ·åç§°" } ] } } ``` ### 2. ç产æ¥å·¥æ¥å£ **GET /productionProductMain/listPage** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "salesContractNo": "XS202601001", "masterContractNo": "ZHT202601001" } ] } } ``` ### 3. çäº§è®¡åæ¥å£ **GET /productionPlan/listPage** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "salesContractNo": "XS202601001", "masterContractNo": "ZHT202601001" } ] } } ``` ### 4. åè´§ç®¡çæ¥å£ **GET /shippingInfo/listPage** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "salesContractNo": "XS202601001", "masterContractNo": "ZHT202601001" } ] } } ``` **æ¥è¯¢åæ°æ°å¢ï¼** | åæ° | ç±»å | 说æ | |------|------|------| | masterContractNo | String | æ»ååå·ï¼æ¨¡ç³æ¥è¯¢ï¼ | ### 5. éå®éè´§æ¥å£ **GET /returnManagement/listPage** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "returnNo": "TH202601001", "salesContractNo": "XS202601001", "masterContractNo": "ZHT202601001", "shippingNo": "FH202601001" } ] } } ``` **æ¥è¯¢åæ°æ°å¢ï¼** | åæ° | ç±»å | 说æ | |------|------|------| | masterContractNo | String | æ»ååå·ï¼æ¨¡ç³æ¥è¯¢ï¼ | ### 6. éå®éè´§åè´§ä¿¡æ¯æ¥å£ **GET /shippingInfo/getShippingInfoForReturn** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": [ { "shippingId": 1, "shippingNo": "FH202601001", "salesContractNo": "XS202601001", "masterContractNo": "ZHT202601001", "customerName": "客æ·åç§°" } ] } ``` ### 7. è´¢å¡-éå®åºåºå°è´¦æ¥å£ **GET /stockOutRecord/listPageAccountSales** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "outboundBatches": "CK202601001", "salesContractNo": "XS202601001", "masterContractNo": "ZHT202601001", "customerName": "客æ·åç§°" } ] } } ``` ### 8. è´¢å¡-éå®éè´§å°è´¦æ¥å£ **GET /returnManagement/listPageAccountSalesReturn** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "returnNo": "TH202601001", "salesContractNo": "XS202601001", "masterContractNo": "ZHT202601001", "customerName": "客æ·åç§°" } ] } } ``` ### 9. éè´å ¥åºç®¡çæ¥å£ **GET /stockin/listPage** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "inboundBatches": "RK202601001", "purchaseContractNumber": "CG202601001", "masterContractNo": "ZHT202601001", "supplierName": "ä¾åºååç§°" } ] } } ``` **GET /stockin/listPageCopy** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "inboundBatches": "RK202601001", "purchaseContractNumber": "CG202601001", "masterContractNo": "ZHT202601001", "supplierName": "ä¾åºååç§°" } ] } } ``` ### 10. éè´éè´§æ¥å£ **GET /purchaseReturnOrders/listPage** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "no": "CT202601001", "purchaseContractNumber": "CG202601001", "masterContractNo": "ZHT202601001", "supplierName": "ä¾åºååç§°" } ] } } ``` ### 11. ä¾åºå徿¥æç»æ¥å£ **GET /supplierManage/supplierTransactionsDetails** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": [ { "purchaseLedgerId": 1, "purchaseContractNumber": "CG202601001", "masterContractNo": "ZHT202601001", "executionDate": "2026-01-01", "contractAmount": 10000.00 } ] } ``` ### 12. è´¢å¡-éè´å ¥åºå°è´¦æ¥å£ **GET /stockInRecord/listPageAccountPurchase** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "inboundBatches": "RK202601001", "purchaseContractNumber": "CG202601001", "masterContractNo": "ZHT202601001", "supplierName": "ä¾åºååç§°" } ] } } ``` ### 13. è´¢å¡-éè´éè´§å°è´¦æ¥å£ **GET /purchaseReturnOrders/listPageAccountPurchaseReturn** **ååºæ°å¢å段ï¼** ```json { "code": 200, "data": { "records": [ { "id": 1, "returnNo": "CT202601001", "purchaseContractNumber": "CG202601001", "masterContractNo": "ZHT202601001", "supplierName": "ä¾åºååç§°" } ] } } ``` ## å端修æ¹ç¹ ### 1. è¡¨æ ¼åæ·»å å¨å页é¢çè¡¨æ ¼ä¸æ·»å æ»ååå·åï¼ ```html <el-table-column prop="masterContractNo" label="æ»ååå·" min-width="120" /> ``` ### 2. æ¥è¯¢æ¡ä»¶æ·»å å¨éè¦æ¯ææ»ååå·æ¥è¯¢ç页颿·»å æç´¢æ¡ï¼ ```html <el-form-item label="æ»ååå·"> <el-input v-model="queryParams.masterContractNo" placeholder="请è¾å ¥æ»ååå·" clearable /> </el-form-item> ``` ### 3. 详ç»é¡µé¢ç¤ºä¾ #### å货管çé¡µé¢ ```html <!-- æ¥è¯¢æ¡ä»¶ --> <el-form :model="queryParams" ref="queryForm" :inline="true"> <el-form-item label="éå®ååå·"> <el-input v-model="queryParams.salesContractNo" placeholder="请è¾å ¥éå®ååå·" clearable /> </el-form-item> <el-form-item label="æ»ååå·"> <el-input v-model="queryParams.masterContractNo" placeholder="请è¾å ¥æ»ååå·" clearable /> </el-form-item> </el-form> <!-- è¡¨æ ¼ --> <el-table :data="tableData" border> <el-table-column prop="shippingNo" label="åè´§åå·" width="150" /> <el-table-column prop="salesContractNo" label="éå®ååå·" width="150" /> <el-table-column prop="masterContractNo" label="æ»ååå·" width="150" /> <el-table-column prop="customerName" label="客æ·åç§°" width="150" /> </el-table> ``` #### éå®éè´§é¡µé¢ ```html <!-- æ¥è¯¢æ¡ä»¶ --> <el-form :model="queryParams" ref="queryForm" :inline="true"> <el-form-item label="éè´§åå·"> <el-input v-model="queryParams.returnNo" placeholder="请è¾å ¥éè´§åå·" clearable /> </el-form-item> <el-form-item label="éå®ååå·"> <el-input v-model="queryParams.salesContractNo" placeholder="请è¾å ¥éå®ååå·" clearable /> </el-form-item> <el-form-item label="æ»ååå·"> <el-input v-model="queryParams.masterContractNo" placeholder="请è¾å ¥æ»ååå·" clearable /> </el-form-item> </el-form> <!-- è¡¨æ ¼ --> <el-table :data="tableData" border> <el-table-column prop="returnNo" label="éè´§åå·" width="150" /> <el-table-column prop="shippingNo" label="åè´§åå·" width="150" /> <el-table-column prop="salesContractNo" label="éå®ååå·" width="150" /> <el-table-column prop="masterContractNo" label="æ»ååå·" width="150" /> <el-table-column prop="customerName" label="客æ·åç§°" width="150" /> </el-table> ``` #### éè´å ¥åºç®¡çé¡µé¢ ```html <!-- è¡¨æ ¼ --> <el-table :data="tableData" border> <el-table-column prop="inboundBatches" label="å ¥åºæ¹æ¬¡" width="150" /> <el-table-column prop="purchaseContractNumber" label="éè´ååå·" width="150" /> <el-table-column prop="masterContractNo" label="æ»ååå·" width="150" /> <el-table-column prop="supplierName" label="ä¾åºååç§°" width="150" /> <el-table-column prop="productCategory" label="产å大类" width="120" /> <el-table-column prop="specificationModel" label="è§æ ¼åå·" width="120" /> <el-table-column prop="inboundNum" label="å ¥åºæ°é" width="100" /> </el-table> ``` #### éè´éè´§é¡µé¢ ```html <!-- è¡¨æ ¼ --> <el-table :data="tableData" border> <el-table-column prop="no" label="éè´§åå·" width="150" /> <el-table-column prop="purchaseContractNumber" label="éè´ååå·" width="150" /> <el-table-column prop="masterContractNo" label="æ»ååå·" width="150" /> <el-table-column prop="supplierName" label="ä¾åºååç§°" width="150" /> </el-table> ``` #### ä¾åºå徿¥æç» ```html <!-- è¡¨æ ¼ --> <el-table :data="tableData" border> <el-table-column prop="purchaseContractNumber" label="éè´ååå·" width="150" /> <el-table-column prop="masterContractNo" label="æ»ååå·" width="150" /> <el-table-column prop="executionDate" label="ç¾è®¢æ¥æ" width="120" /> <el-table-column prop="contractAmount" label="ååéé¢" width="120" /> </el-table> ``` #### è´¢å¡-éè´å ¥åºå°è´¦ ```html <!-- è¡¨æ ¼ --> <el-table :data="tableData" border> <el-table-column prop="inboundBatches" label="å ¥åºåå·" width="150" /> <el-table-column prop="purchaseContractNumber" label="éè´ååå·" width="150" /> <el-table-column prop="masterContractNo" label="æ»ååå·" width="150" /> <el-table-column prop="supplierName" label="ä¾åºååç§°" width="150" /> </el-table> ``` #### è´¢å¡-éè´éè´§å°è´¦ ```html <!-- è¡¨æ ¼ --> <el-table :data="tableData" border> <el-table-column prop="returnNo" label="éè´§åå·" width="150" /> <el-table-column prop="purchaseContractNumber" label="éè´ååå·" width="150" /> <el-table-column prop="masterContractNo" label="æ»ååå·" width="150" /> <el-table-column prop="supplierName" label="ä¾åºååç§°" width="150" /> </el-table> ``` ### 4. data æ°æ®ä¿®æ¹ ```js data() { return { queryParams: { pageNum: 1, pageSize: 10, salesContractNo: '', masterContractNo: '', // æ°å¢ // ... å ¶ä»æ¥è¯¢åæ° } } } ``` ### 5. 导åºåè½ å¦é导åºåè½ï¼éå¨å¯¼åºåæ®µä¸æ·»å æ»ååå·ï¼ ```js // 导åºåé ç½® const exportColumns = [ { prop: 'salesContractNo', label: 'éå®ååå·' }, { prop: 'purchaseContractNumber', label: 'éè´ååå·' }, { prop: 'masterContractNo', label: 'æ»ååå·' }, // ... å ¶ä»å ]; ``` ## 注æäºé¡¹ 1. **åæ®µä½ç½®**ï¼å»ºè®®å°æ»ååå·åæ¾å¨éå®ååå·/éè´ååå·ååé¢ï¼ä¿æä¸è´æ§ã 2. **æ¥è¯¢é»è¾**ï¼æ»ååå·æ¯ææ¨¡ç³æ¥è¯¢ï¼ä¸ååå·æ¥è¯¢æ¹å¼ä¸è´ã 3. **æ°æ®å ³è**ï¼ - éå®ç¸å ³ï¼æ»ååå·æ¥æºäºéå®å°è´¦ï¼sales_ledgerï¼è¡¨ç master_contract_no åæ®µ - éè´ç¸å ³ï¼æ»ååå·æ¥æºäºéè´å°è´¦ï¼purchase_ledgerï¼è¡¨ç master_contract_no åæ®µ 4. **å¤å¼å¤ç**ï¼é¨åæ¥è¯¢ï¼å¦ç产订åï¼å¯è½å ³èå¤ä¸ªéå®å°è´¦ï¼æ¤æ¶æ»ååå·ä¼ä»¥éå·åéæ¾ç¤ºå¤ä¸ªå¼ã 5. **空å¼å¤ç**ï¼å¦æå°è´¦æªå¡«åæ»ååå·ï¼è¯¥å段å¯è½ä¸ºç©ºï¼å端éåå¥½ç©ºå¼æ¾ç¤ºå¤çã 6. **éå®éè´§éæ©åè´§**ï¼å¨éå®éè´§éæ©åè´§ä¿¡æ¯æ¶ï¼æ»ååå·ä¼ä¸å¹¶è¿åï¼ä¾¿äºè¯å«ã 7. **éè´éè´§éæ©å ¥åº**ï¼å¨éè´éè´§éæ©å ¥åºä¿¡æ¯æ¶ï¼æ»ååå·ä¼ä¸å¹¶è¿åï¼ä¾¿äºè¯å«ã doc/20260625_stock_inspect_feature.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,228 @@ # åºåæ·»å è´¨æ£éæ©åè½ ## æ¶åé¡µé¢ - åºå管ç页é¢ï¼æ°å¢åºåå¼¹çªï¼ ## API | æ¹æ³ | è·¯å¾ | 说æ | |------|------|------| | POST | /stockInventory/addStockInRecordOnly | æ°å¢å ¥åºè®°å½ï¼æ¯æè´¨æ£éæ©ï¼ | **请æ±åæ°ï¼** | åæ° | ç±»å | å¿ å¡« | 说æ | |------|------|------|------| | productModelId | Long | æ¯ | 产åè§æ ¼ID | | qualitity | BigDecimal | æ¯ | æ°é | | batchNo | String | å¦ | æ¹å·ï¼ä¸å¡«èªå¨çæï¼ | | warehouse | String | å¦ | ä»åº | | remark | String | å¦ | 夿³¨ | | warnNum | BigDecimal | å¦ | é¢è¦æ°é | | **needInspect** | Boolean | å¦ | æ¯å¦éè¦è´¨æ£ï¼é»è®¤falseï¼ | | **inspectType** | Integer | å¦ | è´¨æ£ç±»åï¼0-åæææ£éªï¼é»è®¤ï¼ï¼1-è¿ç¨æ£éª | **ååºï¼** ```json { "code": 200, "msg": "æä½æå" } ``` ## ä¸å¡é»è¾è¯´æ ### ä¸éè¦è´¨æ£ï¼needInspect = false æä¸ä¼ ï¼ - ç´æ¥åå»ºå ¥åºè®°å½ - åææµç¨ä¸å ### éè¦è´¨æ£ï¼needInspect = trueï¼ - å建质æ£åï¼quality_inspect è¡¨ï¼ - è´¨æ£åç¶æä¸º"æªæäº¤"ï¼inspectState = 0ï¼ - **ä¸åå»ºå ¥åºè®°å½**ï¼çå¾ è´¨æ£åæ ¼åç±è´¨æ£æµç¨å ¥åº - è´¨æ£ç±»åç± inspectType å³å®ï¼ - **inspectType = 0**ï¼åæææ£éª - **inspectType = 1**ï¼è¿ç¨æ£éªï¼éç¨äºæåï¼ ## å端修æ¹ç¹ ### 1. æ°å¢åºåå¼¹çª - æ·»å è´¨æ£éæ© ```html <el-dialog title="æ°å¢åºå" :visible.sync="dialogVisible"> <el-form :model="form" :rules="rules" ref="formRef"> <!-- åæå段 --> <el-form-item label="产åè§æ ¼" prop="productModelId"> <el-select v-model="form.productModelId" placeholder="è¯·éæ©äº§åè§æ ¼"> <!-- ... --> </el-select> </el-form-item> <el-form-item label="æ°é" prop="qualitity"> <el-input-number v-model="form.qualitity" :min="0" /> </el-form-item> <el-form-item label="æ¹å·"> <el-input v-model="form.batchNo" placeholder="ä¸å¡«èªå¨çæ" /> </el-form-item> <el-form-item label="ä»åº"> <el-select v-model="form.warehouse" placeholder="è¯·éæ©ä»åº"> <!-- ... --> </el-select> </el-form-item> <el-form-item label="夿³¨"> <el-input v-model="form.remark" type="textarea" /> </el-form-item> <!-- æ°å¢ï¼è´¨æ£éæ© --> <el-form-item label="æ¯å¦è´¨æ£"> <el-switch v-model="form.needInspect" active-text="éè¦è´¨æ£" inactive-text="ç´æ¥å ¥åº" /> </el-form-item> <!-- æ°å¢ï¼è´¨æ£ç±»åéæ©ï¼å½éè¦è´¨æ£æ¶æ¾ç¤ºï¼ --> <el-form-item label="è´¨æ£ç±»å" v-if="form.needInspect"> <el-radio-group v-model="form.inspectType"> <el-radio :label="0">åæææ£éª</el-radio> <el-radio :label="1">è¿ç¨æ£éªï¼æåï¼</el-radio> </el-radio-group> </el-form-item> </el-form> <div slot="footer"> <el-button @click="dialogVisible = false">åæ¶</el-button> <el-button type="primary" @click="handleSubmit">ç¡®å®</el-button> </div> </el-dialog> ``` ### 2. data æ°æ® ```js data() { return { dialogVisible: false, form: { productModelId: null, qualitity: 0, batchNo: '', warehouse: '', remark: '', warnNum: null, // æ°å¢å段 needInspect: false, inspectType: 0, // é»è®¤åæææ£éª }, rules: { productModelId: [{ required: true, message: 'è¯·éæ©äº§åè§æ ¼', trigger: 'change' }], qualitity: [{ required: true, message: '请è¾å ¥æ°é', trigger: 'blur' }], } } } ``` ### 3. æ¹æ³ ```js methods: { // æå¼æ°å¢å¼¹çª handleAdd() { this.dialogVisible = true; this.form = { productModelId: null, qualitity: 0, batchNo: '', warehouse: '', remark: '', warnNum: null, needInspect: false, inspectType: 0, }; if (this.$refs.formRef) { this.$refs.formRef.resetFields(); } }, // æäº¤æ°å¢åºå handleSubmit() { this.$refs.formRef.validate(async (valid) => { if (!valid) return; try { // æå»ºè¯·æ±åæ° const params = { ...this.form, // 妿ä¸éè¦è´¨æ£ï¼ä¸ä¼ inspectType inspectType: this.form.needInspect ? this.form.inspectType : undefined, }; const res = await this.$http.post('/stockInventory/addStockInRecordOnly', params); if (res.code === 200) { this.$message.success( this.form.needInspect ? 'å·²å建质æ£åï¼è¯·åå¾è´¨æ£æ¨¡åå¤ç' : 'æ°å¢åºåæå' ); this.dialogVisible = false; this.loadData(); // å·æ°å表 } else { this.$message.error(res.msg || 'æä½å¤±è´¥'); } } catch (error) { this.$message.error('请æ±å¤±è´¥'); } }); }, // è´¨æ£ç±»å忢æ¶çæç¤º handleInspectTypeChange(value) { if (value === 0) { this.form.inspectTypeTip = 'éç¨äºåææå ¥åºæ£éª'; } else if (value === 1) { this.form.inspectTypeTip = 'éç¨äºæåè¿ç¨æ£éª'; } } } ``` ### 4. æ ·å¼ä¼åï¼å¯éï¼ ```css /* è´¨æ£éæ©åºåæ ·å¼ */ .quality-inspect-section { margin-top: 20px; padding-top: 15px; border-top: 1px dashed #eee; } .inspect-type-tip { margin-left: 10px; font-size: 12px; color: #909399; } ``` ## 注æäºé¡¹ 1. **è´¨æ£åå ¥åºæµç¨**ï¼å½éæ©è´¨æ£åï¼ä¸ä¼åå»ºå ¥åºè®°å½ï¼éè¦è´¨æ£äººåå¨è´¨æ£æ¨¡å宿æ£éªå¹¶æäº¤ï¼åæ ¼æ°éæä¼èªå¨å ¥åºã 2. **è´¨æ£åæ¥ç**ï¼éæ©è´¨æ£åå建çè´¨æ£åå¯ä»¥å¨ä»¥ä¸ä½ç½®æ¥çï¼ - åæææ£éªï¼`/quality/rawMaterialInspect` æè´¨æ£ç®¡ç-åæææ£éª - è¿ç¨æ£éªï¼`/quality/processInspect` æè´¨æ£ç®¡ç-è¿ç¨æ£éª 3. **è´¨æ£ç±»åéæ©å»ºè®®**ï¼ - åææ/éè´å ¥åº â éæ©"åæææ£éª"ï¼inspectType=0ï¼ - ç产æåå ¥åº â éæ©"è¿ç¨æ£éª"ï¼inspectType=1ï¼ 4. **æ¹å·å¤ç**ï¼å¦æä¼ äºæ¹å·ï¼è´¨æ£åå ³èçå ¥åºè®°å½ä¼ä½¿ç¨è¯¥æ¹å·ï¼å¦ææªä¼ æ¹å·ï¼ç³»ç»ä¼èªå¨çææ¹å·ã 5. **ç¨æ·ä½éªä¼å建议**ï¼ - å½åæ¢"éè¦è´¨æ£"å¼å ³æ¶ï¼å¯ä»¥æ¾ç¤ºä¸ä¸ªæç¤ºä¿¡æ¯è¯´æåç»æµç¨ - è´¨æ£ç±»åå¯ä»¥æ ¹æ®äº§åç±»åèªå¨æ¨èï¼å¦æå端è½è·å产åç±»åä¿¡æ¯ï¼ doc/20260625_stock_inspect_feature.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,11 @@ -- åºåæ·»å è´¨æ£éæ©åè½ -- æ¥æï¼2026-06-25 -- 说æï¼æ°å¢åºåæ¶æ¯æéæ©æ¯å¦éè¦è´¨æ£ï¼åææå¯¹åºåææ£éªï¼æå对åºè¿ç¨æ£éª -- 注æï¼æ¬åè½ä¸éè¦ä¿®æ¹æ°æ®åºè¡¨ç»æ -- needInspect å inspectType 为æ¥å£è¯·æ±åæ°ï¼ç¨äºæ§å¶ä¸å¡é»è¾ -- è´¨æ£åå建åï¼è´¨æ£åæ ¼éè¿åä¼èªå¨å ¥åºå° stock_inventory 表 -- è´¨æ£ç±»å说æï¼ -- inspectType = 0: åæææ£éªï¼é»è®¤ï¼ -- inspectType = 1: è¿ç¨æ£éªï¼æåï¼ src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseInboundVo.java
@@ -45,4 +45,8 @@ @Schema(description = "éè´è®¢åå·") @Excel(name = "éè´è®¢åå·") private String purchaseContractNumber; @Schema(description = "æ»ååå·") @Excel(name = "æ»ååå·") private String masterContractNo; } src/main/java/com/ruoyi/account/bean/vo/purchase/PurchaseReturnVo.java
@@ -45,4 +45,8 @@ @Schema(description = "éè´è®¢åå·") @Excel(name = "éè´è®¢åå·") private String purchaseContractNumber; @Schema(description = "æ»ååå·") @Excel(name = "æ»ååå·") private String masterContractNo; } src/main/java/com/ruoyi/account/bean/vo/sales/SalesOutboundVo.java
@@ -52,4 +52,8 @@ @Schema(description = "éå®è®¢åå·") @Excel(name = "éå®è®¢åå·") private String salesContractNo; @Schema(description = "æ»ååå·") @Excel(name = "æ»ååå·") private String masterContractNo; } src/main/java/com/ruoyi/account/bean/vo/sales/SalesReturnVo.java
@@ -45,4 +45,8 @@ @Schema(description = "éå®è®¢åå·") @Excel(name = "éå®è®¢åå·") private String salesContractNo; @Schema(description = "æ»ååå·") @Excel(name = "æ»ååå·") private String masterContractNo; } src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDto.java
@@ -39,6 +39,11 @@ private String purchaseContractNumber; /** * æ»ååå· */ private String masterContractNo; /** * éå®ååå· */ private String salesContractNo; src/main/java/com/ruoyi/procurementrecord/bean/dto/ProcurementPageDtoCopy.java
@@ -33,6 +33,11 @@ */ private String purchaseContractNumber; /** * æ»ååå· */ private String masterContractNo; /** * éå®ååå· src/main/java/com/ruoyi/procurementrecord/bean/dto/ReturnManagementDto.java
@@ -21,6 +21,9 @@ @Schema(description = "éå®åå·") private String salesContractNo; @Schema(description = "æ»ååå·") private String masterContractNo; @Schema(description = "ä¸å¡å") private String salesman; src/main/java/com/ruoyi/production/bean/dto/ProductionPlanDto.java
@@ -55,4 +55,7 @@ @Schema(description = "éå®ååå·") private String salesContractNo; @Schema(description = "æ»ååå·") private String masterContractNo; } src/main/java/com/ruoyi/production/bean/dto/ProductionProductMainDto.java
@@ -51,6 +51,9 @@ @Schema(description = "éå®ååå·") private String salesContractNo; @Schema(description = "æ»ååå·") private String masterContractNo; @Schema(description = "æäº§æ¥æ") private LocalDate schedulingDate; src/main/java/com/ruoyi/production/bean/vo/ProductionOrderVo.java
@@ -17,6 +17,9 @@ @Schema(description = "éå®ååå·") private String salesContractNo; @Schema(description = "æ»ååå·") private String masterContractNo; @Schema(description = "客æ·åç§°") private String customerName; src/main/java/com/ruoyi/production/bean/vo/ProductionPlanVo.java
@@ -25,6 +25,9 @@ @Schema(description = "éå®ååå·") private String salesContractNo; @Schema(description = "æ»ååå·") private String masterContractNo; @Schema(description = "客æ·åç§°") private String customerName; src/main/java/com/ruoyi/purchase/dto/PurchaseReturnOrderHasAllInfoDto.java
@@ -15,6 +15,9 @@ // éè´ååå· private String purchaseContractNumber; // æ»ååå· private String masterContractNo; //éæäººå§å private String returnUserName; src/main/java/com/ruoyi/purchase/vo/SupplierTransactionsDetailsVo.java
@@ -17,6 +17,9 @@ @Schema(description = "éè´ååå·") private String purchaseContractNumber; @Schema(description = "æ»ååå·") private String masterContractNo; @Schema(description = "éè´ååç¾è®¢æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") private Date executionDate; src/main/java/com/ruoyi/quality/dto/QualityInspectDto.java
@@ -25,6 +25,7 @@ private String salesContractNo; private String masterContractNo; private String workOrderNo; private String purchaseContractNo; src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
@@ -24,6 +24,11 @@ private String salesContractNo; @TableField(exist = false) @Schema(description = "æ»ååå·") @Excel(name = "æ»ååå·") private String masterContractNo; @TableField(exist = false) @Schema(description = "客æ·åç§°") @Excel(name = "客æ·åç§°") private String customerName; src/main/java/com/ruoyi/sales/vo/CustomerTransactionsDetailsVo.java
@@ -17,6 +17,9 @@ @Schema(description = "éå®ååå·") private String salesContractNo; @Schema(description = "æ»ååå·") private String masterContractNo; @Schema(description = "éå®ååç¾è®¢æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate executionDate; src/main/java/com/ruoyi/sales/vo/CustomerTransactionsProductVo.java
@@ -18,6 +18,9 @@ @Schema(description = "éå®ååå·") private String salesContractNo; @Schema(description = "æ»ååå·") private String masterContractNo; @Schema(description = "产åID") private Long productId; src/main/java/com/ruoyi/sales/vo/CustomerTransactionsShipmentVo.java
@@ -20,6 +20,9 @@ @Schema(description = "éå®ååå·") private String salesContractNo; @Schema(description = "æ»ååå·") private String masterContractNo; @Schema(description = "åè´§åID") private Long shippingId; src/main/java/com/ruoyi/sales/vo/ShippingInfoForReturnVo.java
@@ -23,6 +23,9 @@ @Schema(description = "éå®ååå·") private String salesContractNo; @Schema(description = "æ»ååå·") private String masterContractNo; @Schema(description = "客æ·åç§°") private String customerName; src/main/java/com/ruoyi/stock/dto/StockInventoryDto.java
@@ -83,4 +83,10 @@ @Schema(description = "åºåºæ¹å·") private String outboundBatches; @Schema(description = "æ¯å¦éè¦è´¨æ£") private Boolean needInspect; @Schema(description = "è´¨æ£ç±»åï¼0-åæææ£éªï¼1-è¿ç¨æ£éª") private Integer inspectType; } src/main/java/com/ruoyi/stock/service/impl/StockInventoryServiceImpl.java
@@ -15,6 +15,8 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.web.domain.R; import com.ruoyi.project.system.service.ISysDictDataService; import com.ruoyi.quality.dto.QualityInspectDto; import com.ruoyi.quality.service.IQualityInspectService; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import com.ruoyi.stock.dto.StockInRecordDto; @@ -30,7 +32,8 @@ import com.ruoyi.stock.service.StockOutRecordService; import com.ruoyi.stock.service.StockUninventoryService; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -52,7 +55,6 @@ * @since 2026-01-21 04:16:36 */ @Service @RequiredArgsConstructor public class StockInventoryServiceImpl extends ServiceImpl<StockInventoryMapper, StockInventory> implements StockInventoryService { private final StockInventoryMapper stockInventoryMapper; @@ -62,6 +64,26 @@ private final SalesLedgerProductMapper salesLedgerProductMapper; private final ProductModelMapper productModelMapper; private final ISysDictDataService sysDictDataService; private final IQualityInspectService qualityInspectService; public StockInventoryServiceImpl( StockInventoryMapper stockInventoryMapper, StockInRecordService stockInRecordService, StockOutRecordService stockOutRecordService, StockUninventoryService stockUninventoryService, SalesLedgerProductMapper salesLedgerProductMapper, ProductModelMapper productModelMapper, ISysDictDataService sysDictDataService, @Lazy IQualityInspectService qualityInspectService) { this.stockInventoryMapper = stockInventoryMapper; this.stockInRecordService = stockInRecordService; this.stockOutRecordService = stockOutRecordService; this.stockUninventoryService = stockUninventoryService; this.salesLedgerProductMapper = salesLedgerProductMapper; this.productModelMapper = productModelMapper; this.sysDictDataService = sysDictDataService; this.qualityInspectService = qualityInspectService; } @Override public IPage<StockInventoryDto> pagestockInventory(Page page, StockInventoryDto stockInventoryDto) { @@ -122,6 +144,51 @@ return true; } /** * å建质æ£å * æ ¹æ® inspectType å³å®è´¨æ£ç±»åï¼ * - 0: åæææ£éª * - 1: è¿ç¨æ£éª * å¦ææªæå® inspectTypeï¼åæ ¹æ®äº§åä¿¡æ¯èªå¨å¤æ */ private void createQualityInspect(StockInventoryDto stockInventoryDto) { // æ¥è¯¢äº§åä¿¡æ¯ ProductModel productModel = productModelMapper.selectById(stockInventoryDto.getProductModelId()); if (productModel == null) { throw new ServiceException("产åè§æ ¼ä¸åå¨"); } // ç¡®å® inspectType Integer inspectType = stockInventoryDto.getInspectType(); if (inspectType == null) { // é»è®¤ä½¿ç¨åæææ£éª inspectType = 0; } // æå»ºè´¨æ£å QualityInspectDto qualityInspectDto = new QualityInspectDto(); qualityInspectDto.setInspectType(inspectType); qualityInspectDto.setProductModelId(stockInventoryDto.getProductModelId()); qualityInspectDto.setProductId(productModel.getProductId()); qualityInspectDto.setProductName(stockInventoryDto.getProductName()); qualityInspectDto.setQuantity(stockInventoryDto.getQualitity()); qualityInspectDto.setInspectState(0); // æªæäº¤ // qualityInspectDto.setRemark(stockInventoryDto.getRemark()); // 设置产åä¿¡æ¯ if (productModel.getProductName() != null) { qualityInspectDto.setProductName(productModel.getProductName()); } qualityInspectDto.setModel(productModel.getModel()); qualityInspectDto.setUnit(productModel.getUnit()); // åå§åç©ºçæ£éªåæ°å表 qualityInspectDto.setQualityInspectParams(new ArrayList<>()); // ä¿åè´¨æ£å qualityInspectService.add(qualityInspectDto); } //åºåºè°ç¨ @Override @Transactional(rollbackFor = Exception.class) @@ -171,6 +238,14 @@ } stockInventoryDto.setBatchNo(batchNo); // 夿æ¯å¦éè¦è´¨æ£ if (Boolean.TRUE.equals(stockInventoryDto.getNeedInspect())) { // å建质æ£å createQualityInspect(stockInventoryDto); return true; } // ä¸éè¦è´¨æ£ï¼ç´æ¥åå»ºå ¥åºè®°å½ StockInRecordDto stockInRecordDto = new StockInRecordDto(); stockInRecordDto.setRecordId(stockInventoryDto.getRecordId()); stockInRecordDto.setRecordType(stockInventoryDto.getRecordType()); src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -113,6 +113,7 @@ resultType="com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo"> select pl.id purchaseLedgerId, pl.purchase_contract_number, pl.master_contract_no, pl.execution_date, pl.contract_amount, IFNULL(T1.paymentAmount, 0) AS paymentAmount, src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -32,6 +32,7 @@ select t3.supplier_name, t3.purchase_contract_number, t3.master_contract_no, t2.product_category, t1.id, t1.sales_ledger_product_id, @@ -72,6 +73,7 @@ select t3.supplier_name, t3.purchase_contract_number, t3.master_contract_no, t2.product_category, t1.id, t2.specification_model, @@ -121,6 +123,7 @@ select t3.supplier_name, t3.purchase_contract_number, t3.master_contract_no, t2.product_category, t1.id, t1.sales_ledger_product_id, @@ -179,6 +182,7 @@ select t3.supplier_name, t3.purchase_contract_number, t3.master_contract_no, t2.product_category, t1.id, t1.sales_ledger_product_id, src/main/resources/mapper/procurementrecord/ReturnManagementMapper.xml
@@ -8,6 +8,7 @@ si.shipping_no, sl.project_name, sl.sales_contract_no, sl.master_contract_no, sl.salesman, IFNULL(sq.shipping_qty, 0) AS shippingQuantity, IFNULL(rs.total_return_num, 0) AS returnedQuantity, @@ -58,6 +59,9 @@ <if test="req.salesContractNo != null and req.salesContractNo != ''"> and sl.sales_contract_no like concat('%',#{req.salesContractNo},'%') </if> <if test="req.masterContractNo != null and req.masterContractNo != ''"> and sl.master_contract_no like concat('%',#{req.masterContractNo},'%') </if> </where> order by rm.id desc </select> @@ -67,6 +71,7 @@ si.shipping_no, sl.project_name, sl.sales_contract_no, sl.master_contract_no, sl.salesman from return_management rm left join shipping_info si on rm.shipping_id = si.id @@ -83,7 +88,8 @@ rm.refund_amount, rm.return_reason, rm.make_time, sl.sales_contract_no sl.sales_contract_no, sl.master_contract_no from return_management rm left join shipping_info si on rm.shipping_id = si.id left join customer c on rm.customer_id = c.id src/main/resources/mapper/production/ProductionOrderMapper.xml
@@ -23,6 +23,7 @@ <resultMap id="ProductionOrderVoResultMap" type="com.ruoyi.production.bean.vo.ProductionOrderVo" extends="BaseResultMap"> <result column="salesContractNo" property="salesContractNo" /> <result column="masterContractNo" property="masterContractNo" /> <result column="customerName" property="customerName" /> <result column="productName" property="productName" /> <result column="model" property="model" /> @@ -47,6 +48,7 @@ po.plan_complete_time, po.status, po_sales.salesContractNo, po_sales.masterContractNo, po_sales.customerName, p.product_name as productName, pm.model as model, @@ -62,6 +64,7 @@ left join ( select po2.id as orderId, group_concat(distinct sl2.sales_contract_no order by sl2.sales_contract_no separator ',') as salesContractNo, group_concat(distinct sl2.master_contract_no order by sl2.master_contract_no separator ',') as masterContractNo, group_concat(distinct sl2.customer_name order by sl2.customer_name separator ',') as customerName, group_concat(distinct sl2.project_name order by sl2.project_name separator ',') as projectName, min(sl2.delivery_date) as deliveryDate src/main/resources/mapper/production/ProductionPlanMapper.xml
@@ -27,6 +27,7 @@ p.product_name AS productName, pm.unit, sl.sales_contract_no, sl.master_contract_no, sl.customer_name, sl.project_name FROM production_plan pp @@ -55,6 +56,9 @@ </if> <if test="c.salesContractNo != null and c.salesContractNo != ''"> and sl.sales_contract_no like concat('%', #{c.salesContractNo}, '%') </if> <if test="c.masterContractNo != null and c.masterContractNo != ''"> and sl.master_contract_no like concat('%', #{c.masterContractNo}, '%') </if> </if> </where> @@ -94,6 +98,7 @@ p.product_name AS productName, pm.unit, sl.sales_contract_no, sl.master_contract_no, sl.customer_name, sl.project_name FROM production_plan pp src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -31,6 +31,7 @@ pm.model as productModelName, pm.unit, po_sales.salesContractNo, po_sales.masterContractNo, date(ppm.create_time) as schedulingDate, su.nick_name as schedulingUserName, po_sales.customerName, @@ -42,6 +43,7 @@ left join ( select po2.id as orderId, group_concat(distinct sl2.sales_contract_no order by sl2.sales_contract_no separator ',') as salesContractNo, group_concat(distinct sl2.master_contract_no order by sl2.master_contract_no separator ',') as masterContractNo, group_concat(distinct sl2.customer_name order by sl2.customer_name separator ',') as customerName from production_order po2 left join production_plan pp2 @@ -63,6 +65,9 @@ <if test="c.salesContractNo != null and c.salesContractNo != ''"> and po_sales.salesContractNo like concat('%', #{c.salesContractNo}, '%') </if> <if test="c.masterContractNo != null and c.masterContractNo != ''"> and po_sales.masterContractNo like concat('%', #{c.masterContractNo}, '%') </if> <if test="c.customerName != null and c.customerName != ''"> and po_sales.customerName like concat('%', #{c.customerName}, '%') </if> src/main/resources/mapper/purchase/PurchaseReturnOrdersMapper.xml
@@ -22,7 +22,8 @@ SELECT pro.*, sm.supplier_name as supplier_name, pl.purchase_contract_number as purchase_contract_number pl.purchase_contract_number as purchase_contract_number, pl.master_contract_no as master_contract_no FROM purchase_return_orders pro LEFT JOIN supplier_manage sm ON pro.supplier_id = sm.id LEFT JOIN purchase_ledger pl ON pl.id = pro.purchase_ledger_id @@ -62,7 +63,8 @@ pro.prepared_at, pro.total_amount, CASE pro.return_type WHEN 0 THEN 'éè´§éæ¬¾' WHEN 1 THEN 'ææ¶' END AS returnType, pl.purchase_contract_number pl.purchase_contract_number, pl.master_contract_no from purchase_return_orders pro left join (select prop.purchase_return_order_id, src/main/resources/mapper/sales/ShippingInfoMapper.xml
@@ -19,6 +19,7 @@ s.update_user, s.tenant_id, sl.sales_contract_no, sl.master_contract_no, s.outbound_batches, pm.model as specification_model, pm.unit, @@ -57,6 +58,9 @@ WHERE 1=1 <if test="req.salesContractNo != null and req.salesContractNo != ''"> AND sl.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%') </if> <if test="req.masterContractNo != null and req.masterContractNo != ''"> AND sl.master_contract_no LIKE CONCAT('%',#{req.masterContractNo},'%') </if> <if test="req.shippingCarNumber != null and req.shippingCarNumber != ''"> AND s.shipping_car_number LIKE CONCAT('%',#{req.shippingCarNumber},'%') @@ -134,6 +138,7 @@ si.id AS shippingId, si.shipping_no AS shippingNo, sl.sales_contract_no AS salesContractNo, sl.master_contract_no AS masterContractNo, sl.customer_name AS customerName, IFNULL(p.product_name, slp.product_category) AS productName, IFNULL(pm.model, slp.specification_model) AS model, src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -170,7 +170,8 @@ p.product_name, pm.model as specification_model, sir.stock_in_num * slp.tax_inclusive_unit_price AS InboundAmount, pl.purchase_contract_number pl.purchase_contract_number, pl.master_contract_no FROM stock_in_record sir -- 10 ç±»åæå ³èè´¨æ£è¡¨ LEFT JOIN quality_inspect qi ON sir.record_type = 10 AND sir.record_id = qi.id src/main/resources/mapper/stock/StockOutRecordMapper.xml
@@ -103,7 +103,8 @@ slp.tax_rate, sor.stock_out_num * slp.tax_inclusive_unit_price as outboundAmount, s.shipping_no, sl.sales_contract_no sl.sales_contract_no, sl.master_contract_no FROM stock_out_record sor left join shipping_info s on sor.record_id = s.id LEFT JOIN sales_ledger sl ON s.sales_ledger_id = sl.id