Merge remote-tracking branch 'origin/dev_business' into dev_business
| | |
| | | | CRM 模å | MdmItemApi | MDM ç©ææ¥å£ | |
| | | | CRM 模å | MdmUnitMeasureApi | MDM 计éå使¥å£ | |
| | | | CRM 模å | BpmProcessInstanceApi | BPM æµç¨å®ä¾æ¥å£ | |
| | | | CRM 模å | BpmCategoryService | BPM åç±»æå¡ | |
| | | | CRM 模å | BpmProcessDefinitionService | BPM æµç¨å®ä¹æå¡ | |
| | | | ERP 模å | CrmCustomerApi | CRM å®¢æ·æ¥å£ | |
| | | | ERP 模å | MdmItemApi | MDM ç©ææ¥å£ | |
| | | |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # SQL èæ¬è§è |
| | | |
| | | ## è§å |
| | | |
| | | - SQL èæ¬ä¸ä¸è¦å
å« tenant_id åæ®µï¼é¡¹ç®ä¸ä½¿ç¨å¤ç§æ·æ¨¡å¼ã |
| | | - INSERT è¯å¥åªå
å«å¿
è¦çä¸å¡å段ï¼ä¸éè¦ tenant_idã |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # ååå®¡æ¹æµç¨åæ´ |
| | | |
| | | ## åæ´è¯´æ |
| | | |
| | | 1. **é宿¥ä»·åæ¶ BPM å®¡æ ¸**ï¼é宿¥ä»·åä¸åèµ°å®¡æ¹æµç¨ï¼ç®å为è稿 â 已转åå两ç§ç¶æ |
| | | 2. **åå审æ¹å¨æéæ©æµç¨**ï¼å建åååï¼éç¨æ·æå¨éæ©å®¡æ¹æµç¨å¹¶æäº¤å®¡æ¹ï¼ç±»ä¼¼éè´ç³è¯·ï¼ |
| | | |
| | | --- |
| | | |
| | | ## æ°æ®åºåæ´ SQL |
| | | |
| | | ```sql |
| | | -- ============================================= |
| | | -- 1. åå产åè¡¨åæ®µåæ´ï¼ç§»é¤æ§åæ®µï¼ |
| | | -- ============================================= |
| | | ALTER TABLE `crm_contract_product` DROP COLUMN `product_id`; |
| | | ALTER TABLE `crm_contract_product` DROP COLUMN `product_price`; |
| | | |
| | | -- ============================================= |
| | | -- 2. BPM åç±»å建ï¼åå审æ¹ï¼ |
| | | -- ============================================= |
| | | INSERT INTO `bpm_category` (`name`, `code`, `description`, `status`, `sort`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) |
| | | VALUES ('åå审æ¹', 'contract_approve', 'ååå®¡æ¹æµç¨åç±»', 0, 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ============================================= |
| | | -- 3. é宿¥ä»·ç¶æåæ®µæ´æ°ï¼ç®åç¶æï¼ |
| | | -- ============================================= |
| | | -- ç¶æå¼åæ´ï¼0=è稿, 10=已转åå |
| | | -- å status åæ®µå¼éè¦æ¸
çï¼10(审æ¹ä¸)ã20(å·²éè¿)ã30(å·²æç»)ã40(已忶) æ¹ä¸º 0(è稿) |
| | | UPDATE `crm_sale_quotation` SET `status` = 0 WHERE `status` IN (10, 20, 30, 40); |
| | | -- 已转ååçä¿æä¸åï¼status=50 æ¹ä¸º status=10ï¼ |
| | | UPDATE `crm_sale_quotation` SET `status` = 10 WHERE `status` = 50; |
| | | |
| | | -- ============================================= |
| | | -- 4. åå审æ¹ç¶æåæ®µæ´æ°ï¼è®¾ç½®é»è®¤å¼ï¼ |
| | | -- ============================================= |
| | | -- å° audit_status 为 NULL çè®°å½è®¾ç½®ä¸º 0ï¼æªæäº¤ï¼ |
| | | UPDATE `crm_contract` SET `audit_status` = 0 WHERE `audit_status` IS NULL; |
| | | |
| | | -- ============================================= |
| | | -- 4. æ¥ä»·å产åæç»è¡¨ï¼å¦æè¡¨ä¸åå¨éå建ï¼å·²åå¨åè¡¥å
åæ®µï¼ |
| | | -- ============================================= |
| | | -- 妿 crm_sale_quotation_product 表ä¸åå¨ï¼æ§è¡å建 |
| | | CREATE TABLE IF NOT EXISTS `crm_sale_quotation_product` ( |
| | | `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ç¼å·', |
| | | `quotation_id` bigint NOT NULL COMMENT 'æ¥ä»·åç¼å·', |
| | | `item_id` bigint NOT NULL COMMENT 'MDMç©æç¼å·', |
| | | `item_unit_id` bigint DEFAULT NULL COMMENT '计éåä½ç¼å·', |
| | | `item_price` decimal(24,6) NOT NULL DEFAULT 0 COMMENT 'ç©æåä»·ï¼åä½ï¼', |
| | | `quotation_price` decimal(24,6) NOT NULL COMMENT 'æ¥ä»·åä»·', |
| | | `count` decimal(24,6) NOT NULL COMMENT 'æ°é', |
| | | `total_price` decimal(24,6) NOT NULL COMMENT 'å°è®¡éé¢', |
| | | `tax_percent` decimal(10,2) DEFAULT NULL COMMENT 'ç¨ç(%)', |
| | | `tax_price` decimal(24,6) DEFAULT NULL COMMENT 'ç¨é¢', |
| | | `remark` varchar(256) DEFAULT NULL COMMENT '夿³¨', |
| | | `creator` varchar(64) DEFAULT NULL COMMENT 'å建è
', |
| | | `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'å建æ¶é´', |
| | | `updater` varchar(64) DEFAULT NULL COMMENT 'æ´æ°è
', |
| | | `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'æ´æ°æ¶é´', |
| | | `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT 'æ¯å¦å é¤', |
| | | `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT 'ç§æ·ç¼å·', |
| | | PRIMARY KEY (`id`), |
| | | KEY `idx_quotation_id` (`quotation_id`) |
| | | ) ENGINE=InnoDB COMMENT='CRM é宿¥ä»·å产åæç»'; |
| | | |
| | | -- å¦æè¡¨å·²åå¨ä½ç¼ºå° item_price åæ®µï¼æ§è¡è¡¥å
|
| | | -- ALTER TABLE `crm_sale_quotation_product` |
| | | -- ADD COLUMN `item_price` decimal(24,6) NOT NULL DEFAULT 0 COMMENT 'ç©æåä»·ï¼åä½ï¼' AFTER `item_unit_id`; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | - é宿¥ä»·ååè¡¨é¡µé¢ |
| | | - é宿¥ä»·å表åé¡µé¢ |
| | | - åååè¡¨é¡µé¢ |
| | | - åå详æ
é¡µé¢ |
| | | |
| | | --- |
| | | |
| | | ## API åæ´ |
| | | |
| | | ### å忥壿°å¢ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /crm/contract/approve-process-list | è·åååå®¡æ¹æµç¨å表 | |
| | | | PUT | /crm/contract/submit | æäº¤åå审æ¹ï¼éä¼ processDefinitionKeyï¼ | |
| | | |
| | | **submit æ¥å£åæ°åæ´ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | ååç¼å· | |
| | | | processDefinitionKey | String | æ¯ | æµç¨å®ä¹ Keyï¼ç¨æ·éæ©ï¼ | |
| | | |
| | | ### é宿¥ä»·åæ¥å£åæ´ |
| | | |
| | | #### ç§»é¤çæ¥å£ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | PUT | /crm/sale-quotation/submit | æäº¤å®¡æ¹ï¼å·²ç§»é¤ï¼ | |
| | | | GET | /crm/sale-quotation/approve-process-list | è·åå®¡æ¹æµç¨å表ï¼å·²ç§»é¤ï¼ | |
| | | |
| | | #### ç¶æåæ´ |
| | | |
| | | | æ§ç¶æå¼ | æ§ç¶æå | æ°ç¶æå¼ | æ°ç¶æå | |
| | | |----------|----------|----------|----------| |
| | | | 0 | è稿 | 0 | è稿 | |
| | | | 10 | 审æ¹ä¸ | - | å·²ç§»é¤ | |
| | | | 20 | å·²éè¿ | - | å·²ç§»é¤ | |
| | | | 30 | å·²æç» | - | å·²ç§»é¤ | |
| | | | 40 | 已忶 | - | å·²ç§»é¤ | |
| | | | 50 | 已转åå | 10 | 已转åå | |
| | | |
| | | --- |
| | | |
| | | ## å端修æ¹ç¹ |
| | | |
| | | ### 1. åååè¡¨é¡µé¢ - æäº¤å®¡æ¹ |
| | | |
| | | **æ°å¢æäº¤å®¡æ¹å¼¹çªï¼** |
| | | |
| | | ```html |
| | | <!-- æäº¤å®¡æ¹å¼¹çª --> |
| | | <el-dialog title="éæ©å®¡æ¹æµç¨" v-model="submitDialogVisible" width="400px"> |
| | | <el-form label-width="100px"> |
| | | <el-form-item label="å®¡æ¹æµç¨" required> |
| | | <el-select v-model="selectedProcessKey" placeholder="è¯·éæ©" style="width: 100%"> |
| | | <el-option v-for="item in processList" :key="item.key" :label="item.name" :value="item.key" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <el-button @click="submitDialogVisible = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="confirmSubmit" :loading="submitLoading">ç¡®å®</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | ``` |
| | | |
| | | **JS æ¹æ³ï¼** |
| | | |
| | | ```js |
| | | import { getContractApproveProcessList, submitContract } from '@/api/crm/contract' |
| | | |
| | | methods: { |
| | | async handleSubmit(row) { |
| | | const { data } = await getContractApproveProcessList() |
| | | this.processList = data |
| | | this.currentRow = row |
| | | this.selectedProcessKey = null |
| | | this.submitDialogVisible = true |
| | | }, |
| | | async confirmSubmit() { |
| | | if (!this.selectedProcessKey) { |
| | | this.$message.warning('è¯·éæ©å®¡æ¹æµç¨') |
| | | return |
| | | } |
| | | this.submitLoading = true |
| | | try { |
| | | await submitContract(this.currentRow.id, this.selectedProcessKey) |
| | | this.$message.success('æäº¤æå') |
| | | this.submitDialogVisible = false |
| | | this.getList() |
| | | } finally { |
| | | this.submitLoading = false |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **æä½æé®è°æ´ï¼** |
| | | |
| | | ```html |
| | | <el-table-column label="æä½" width="280"> |
| | | <template #default="{ row }"> |
| | | <el-button v-if="row.auditStatus === 0" type="primary" size="small" @click="handleUpdate(row)">ç¼è¾</el-button> |
| | | <el-button v-if="row.auditStatus === 0" type="success" size="small" @click="handleSubmit(row)">æäº¤å®¡æ¹</el-button> |
| | | <el-button v-if="row.auditStatus === 0" type="danger" size="small" @click="handleDelete(row)">å é¤</el-button> |
| | | <el-button v-if="row.auditStatus === 20" type="warning" size="small" @click="handleGenerateOrder(row)">çæè®¢å</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | ``` |
| | | |
| | | ### 2. ååç¶ææ¾ç¤º |
| | | |
| | | ```html |
| | | <!-- åå审æ¹ç¶æ --> |
| | | <el-tag v-if="row.auditStatus === 0" type="info">æªæäº¤</el-tag> |
| | | <el-tag v-if="row.auditStatus === 10" type="warning">审æ¹ä¸</el-tag> |
| | | <el-tag v-if="row.auditStatus === 20" type="success">å®¡æ ¸éè¿</el-tag> |
| | | <el-tag v-if="row.auditStatus === 30" type="danger">å®¡æ ¸ä¸éè¿</el-tag> |
| | | ``` |
| | | |
| | | ### 3. é宿¥ä»·ååè¡¨é¡µé¢ |
| | | |
| | | **ç§»é¤å®¡æ¹ç¸å
³æä½æé®ï¼** |
| | | |
| | | ```html |
| | | <!-- ç§»é¤ä»¥ä¸æé® --> |
| | | <!-- <el-button v-if="row.status === 0" type="success" size="small" @click="handleSubmit(row)">æäº¤å®¡æ¹</el-button> --> |
| | | |
| | | <!-- ä¿çæé® --> |
| | | <el-button v-if="row.status === 0" type="primary" size="small" @click="handleUpdate(row)">ç¼è¾</el-button> |
| | | <el-button v-if="row.status === 0" type="warning" size="small" @click="handleConvertContract(row)">转åå</el-button> |
| | | <el-button v-if="row.status === 0" type="danger" size="small" @click="handleDelete(row)">å é¤</el-button> |
| | | <el-button v-if="row.contractId" type="primary" size="small" @click="handleViewContract(row)">æ¥çåå</el-button> |
| | | ``` |
| | | |
| | | ### 4. æ¥ä»·åç¶ææ¾ç¤º |
| | | |
| | | ```html |
| | | <!-- ç¶ææ ç¾ --> |
| | | <el-tag v-if="row.status === 0" type="info">è稿</el-tag> |
| | | <el-tag v-if="row.status === 10" type="success">已转åå</el-tag> |
| | | ``` |
| | | |
| | | ### 5. API æä»¶ä¿®æ¹ |
| | | |
| | | ```js |
| | | // /src/api/crm/contract.js |
| | | |
| | | // æ°å¢ API |
| | | export function getContractApproveProcessList() { |
| | | return request({ url: '/crm/contract/approve-process-list', method: 'get' }) |
| | | } |
| | | |
| | | export function submitContract(id, processDefinitionKey) { |
| | | return request({ url: '/crm/contract/submit', method: 'put', params: { id, processDefinitionKey } }) |
| | | } |
| | | |
| | | // /src/api/crm/saleQuotation.js |
| | | |
| | | // ç§»é¤ä»¥ä¸ API |
| | | // export function submitSaleQuotation(id, processDefinitionKey) { ... } |
| | | // export function getSaleQuotationApproveProcessList() { ... } |
| | | |
| | | // ä¿çä»¥ä¸ API |
| | | export function createSaleQuotation(data) { ... } |
| | | export function updateSaleQuotation(data) { ... } |
| | | export function deleteSaleQuotation(ids) { ... } |
| | | export function getSaleQuotation(id) { ... } |
| | | export function getSaleQuotationPage(params) { ... } |
| | | export function convertSaleQuotationToContract(id) { ... } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## ä¸å¡æµç¨åæ´ |
| | | |
| | | ### æ°æµç¨ |
| | | |
| | | ``` |
| | | æ¥ä»·å(è稿) â 转åå â åå(è稿) â ç¨æ·éæ©å®¡æ¹æµç¨ â æäº¤å®¡æ¹ â BPMå®¡æ¹ â 审æ¹éè¿ â çæè®¢å |
| | | ``` |
| | | |
| | | **æµç¨è¯´æï¼** |
| | | 1. é宿¥ä»·ä¸åéè¦å®¡æ¹ï¼èç¨¿ç¶æå¯ç´æ¥è½¬åå |
| | | 2. ååå建å为èç¨¿ç¶æï¼éç¨æ·æå¨éæ©å®¡æ¹æµç¨å¹¶æäº¤ |
| | | 3. ç¹å»"æäº¤å®¡æ¹"æé®åï¼å¼¹åºæµç¨éæ©æ¡ï¼ç¨æ·éæ©æµç¨åæäº¤ |
| | | |
| | | --- |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | 1. **ååå®¡æ¹ BPM åç±»**ï¼éè¦å¨ BPM 管çåå°å建åç±»ç¼ç 为 `contract_approve` çåç±» |
| | | 2. **ååå®¡æ¹æµç¨**ï¼éè¦å¨è¯¥åç±»ä¸é
ç½®è³å°ä¸ä¸ªæ¿æ´»çå®¡æ¹æµç¨ |
| | | 3. **æµç¨éæ©**ï¼å¦æåªæä¸ä¸ªæµç¨ï¼å端å¯ä»¥ç´æ¥æäº¤ï¼å¦ææå¤ä¸ªæµç¨ï¼éè¦ç¨æ·éæ© |
| | | 4. **转ååå**ï¼æ¥ä»·è½¬åååï¼åå为èç¨¿ç¶æï¼éæå¨æäº¤å®¡æ¹ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | # å忍¡å产ååæ®µåæ´ |
| | | |
| | | ## åæ´è¯´æ |
| | | |
| | | å忍¡åçäº§åæ¥æºä» **CRM 产å** æ¹ä¸º **MDM ç©æ**ï¼æ¶ååæ®µåç§°åæ´ã |
| | | |
| | | --- |
| | | |
| | | ## æ°æ®åºåæ´ SQL |
| | | |
| | | ```sql |
| | | -- ============================================= |
| | | -- åå产åè¡¨åæ®µåæ´ |
| | | -- ============================================= |
| | | |
| | | -- 1. å 餿§å段ï¼å¦æææ°æ®è¯·å
å¤ä»½ï¼ |
| | | ALTER TABLE `crm_contract_product` DROP COLUMN `product_id`; |
| | | ALTER TABLE `crm_contract_product` DROP COLUMN `product_price`; |
| | | |
| | | -- 2. 妿æ°å段ä¸åå¨ï¼åæ·»å ï¼æ ¹æ®å®é
æ
åµå¤ææ¯å¦éè¦æ§è¡ï¼ |
| | | -- ALTER TABLE `crm_contract_product` ADD COLUMN `item_id` bigint DEFAULT NULL COMMENT 'MDMç©æç¼å·' AFTER `contract_id`; |
| | | -- ALTER TABLE `crm_contract_product` ADD COLUMN `item_unit_id` bigint DEFAULT NULL COMMENT '计éåä½ç¼å·' AFTER `item_id`; |
| | | -- ALTER TABLE `crm_contract_product` ADD COLUMN `item_price` decimal(24,6) DEFAULT NULL COMMENT 'ç©æåä»·' AFTER `item_unit_id`; |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## æ¶åé¡µé¢ |
| | | |
| | | - åå表å页é¢ï¼æ°å»º/ç¼è¾ååï¼ |
| | | - åå详æ
é¡µé¢ |
| | | |
| | | --- |
| | | |
| | | ## API åæ´ |
| | | |
| | | ### 1. å建/æ´æ°ååæ¥å£ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | POST | /crm/contract/create | å建åå | |
| | | | PUT | /crm/contract/update | æ´æ°åå | |
| | | |
| | | ### 2. 请æ±åæ°åæ´ï¼products åæ®µï¼ |
| | | |
| | | #### æ§å段ï¼å·²åºå¼ï¼ |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | productId | Long | æ¯ | CRM 产åç¼å· | |
| | | | productPrice | BigDecimal | å¦ | 产åä»·æ ¼ | |
| | | | sellingPrice | BigDecimal | å¦ | éå®ä»·ï¼ç¨ä½ååä»·ï¼ | |
| | | |
| | | #### æ°å段 |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | itemId | Long | æ¯ | MDM ç©æç¼å· | |
| | | | itemPrice | BigDecimal | æ¯ | ç©æåä»· | |
| | | | contractPrice | BigDecimal | æ¯ | ååä»·æ ¼ | |
| | | | count | Integer | æ¯ | æ°é | |
| | | |
| | | ### 3. 请æ±ç¤ºä¾ |
| | | |
| | | **æ§æ ¼å¼ï¼ä¸åæ¯æï¼ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "name": "åååç§°", |
| | | "customerId": 1, |
| | | "products": [ |
| | | { |
| | | "productId": 4, |
| | | "sellingPrice": 1111, |
| | | "count": 10 |
| | | } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | **æ°æ ¼å¼ï¼** |
| | | |
| | | ```json |
| | | { |
| | | "name": "åååç§°", |
| | | "customerId": 1, |
| | | "products": [ |
| | | { |
| | | "itemId": 4, |
| | | "itemPrice": 1000, |
| | | "contractPrice": 1111, |
| | | "count": 10 |
| | | } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## ååºåæ´ |
| | | |
| | | ### åå详æ
æ¥å£ååº |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /crm/contract/get | è·ååå详æ
| |
| | | |
| | | #### 产åæç»åæ®µåæ´ |
| | | |
| | | | æ§å段 | æ°å段 | 说æ | |
| | | |--------|--------|------| |
| | | | productId | itemId | MDM ç©æç¼å· | |
| | | | productName | itemName | ç©æåç§° | |
| | | | productNo | itemCode | ç©æç¼ç | |
| | | | productUnit | itemUnitName | 计éåä½åç§° | |
| | | | productPrice | itemPrice | ç©æåä»· | |
| | | | - | itemBarCode | ç©ææ¡ç ï¼æ°å¢ï¼ | |
| | | |
| | | --- |
| | | |
| | | ## å端修æ¹ç¹ |
| | | |
| | | ### 1. ç©æéæ©ç»ä»¶ |
| | | |
| | | å° **CRM 产åéæ©å¨** æ¹ä¸º **MDM ç©æéæ©å¨**ã |
| | | |
| | | ```html |
| | | <!-- æ§ï¼CRM 产åéæ©å¨ --> |
| | | <CrmProductSelect v-model="product.productId" /> |
| | | |
| | | <!-- æ°ï¼MDM ç©æéæ©å¨ --> |
| | | <MdmItemSelect v-model="product.itemId" @change="handleItemChange" /> |
| | | ``` |
| | | |
| | | ### 2. ç©æéæ©åè° |
| | | |
| | | ```js |
| | | methods: { |
| | | handleItemChange(item) { |
| | | // éæ©ç©æåèªå¨å¡«å
ä»·æ ¼ä¿¡æ¯ |
| | | this.product.itemId = item.id |
| | | this.product.itemPrice = item.salesPrice // ç©æåä»· |
| | | this.product.contractPrice = item.salesPrice // ååä»·æ ¼ï¼é»è®¤çäºåä»·ï¼å¯ä¿®æ¹ï¼ |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ### 3. è¡¨æ ¼ååæ®µä¿®æ¹ |
| | | |
| | | ```html |
| | | <!-- 产åæç»è¡¨æ ¼ --> |
| | | <el-table-column prop="itemCode" label="ç©æç¼ç " /> |
| | | <el-table-column prop="itemName" label="ç©æåç§°" /> |
| | | <el-table-column prop="itemBarCode" label="ç©ææ¡ç " /> |
| | | <el-table-column prop="itemUnitName" label="åä½" /> |
| | | <el-table-column prop="itemPrice" label="åä»·" /> |
| | | <el-table-column prop="contractPrice" label="ååä»·" /> |
| | | <el-table-column prop="count" label="æ°é" /> |
| | | ``` |
| | | |
| | | ### 4. data æ°æ®ä¿®æ¹ |
| | | |
| | | ```js |
| | | // 产åæç»æ°æ®ç»æ |
| | | product: { |
| | | itemId: null, // MDM ç©æç¼å· |
| | | itemPrice: null, // ç©æåä»· |
| | | contractPrice: null, // ååä»·æ ¼ |
| | | count: null // æ°é |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## MDM ç©æéæ©å¨ API |
| | | |
| | | ### è·åç©æå表 |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | GET | /mdm/item/page | å页æ¥è¯¢ç©æ | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | code | String | å¦ | ç©æç¼ç | |
| | | | name | String | å¦ | ç©æåç§° | |
| | | | barCode | String | å¦ | ç©ææ¡ç | |
| | | | status | Integer | å¦ | ç¶æï¼0å¯ç¨ 1ç¦ç¨ï¼ï¼ä¼ 0 | |
| | | |
| | | **ååºå段ï¼** |
| | | |
| | | | åæ®µ | ç±»å | 说æ | |
| | | |------|------|------| |
| | | | id | Long | ç©æç¼å·ï¼å³ itemIdï¼ | |
| | | | code | String | ç©æç¼ç | |
| | | | name | String | ç©æåç§° | |
| | | | barCode | String | ç©ææ¡ç | |
| | | | salesPrice | BigDecimal | éå®ä»· | |
| | | | unitMeasureId | Long | 计éåä½ç¼å· | |
| | | | unitMeasureName | String | 计éåä½åç§° | |
| | | |
| | | --- |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | 1. **ç©æå¿
é¡»å
å¯ç¨**ï¼åªè½éæ©ç¶æä¸º"å¯ç¨"ç MDM ç©æ |
| | | 2. **ä»·æ ¼å¯ä¿®æ¹**ï¼`contractPrice` é»è®¤çäºç©æåä»·ï¼ä½å¯ä»¥æå¨ä¿®æ¹ |
| | | 3. **è¿æ¸¡æ**ï¼åç«¯ææ¶å
¼å®¹ `productId` å `sellingPrice` åæ®µï¼ä½åç»ä¼ç§»é¤å
¼å®¹é»è¾ |
| | | 4. **å
¶ä»æ¨¡ååæ¥ä¿®æ¹**ï¼é宿¥ä»·åä¹ä½¿ç¨ MDM ç©æï¼å段ä¸ååä¸è´ |
| | |
| | | ALTER TABLE `crm_contract` |
| | | ADD COLUMN `order_id` bigint DEFAULT NULL COMMENT 'å
³è ERP éå®è®¢åç¼å·' AFTER `total_price`, |
| | | ADD COLUMN `order_no` varchar(32) DEFAULT NULL COMMENT 'ERP éå®è®¢ååå·' AFTER `order_id`; |
| | | |
| | | -- æ°å¢å®ééé¢å段 |
| | | ALTER TABLE `crm_contract` |
| | | ADD COLUMN `deposit_price` decimal(24,6) DEFAULT NULL COMMENT 'å®ééé¢ï¼åä½ï¼å
' AFTER `total_price`; |
| | | ``` |
| | | |
| | | ### 5.2 CRM åæºè¡¨ |
| | |
| | | |------|------| |
| | | | `docs/crm_erp_integration_frontend.md` | æ¬ææ¡£ | |
| | | | `docs/crm_erp_integration_sql.sql` | SQL åæ´èæ¬ | |
| | | |
| | | --- |
| | | |
| | | ## åäºãéå®è®¢åä½åºåè½ï¼æ°å¢ï¼ |
| | | |
| | | ### 12.1 åè½è¯´æ |
| | | |
| | | éå®è®¢åä½åºåè½ç¨äºæ è®°å·²å®¡æ ¸ç订å为"å·²ä½åº"ç¶æï¼å®ç°è®¢åå
¨æµç¨å¯è¿½æº¯ã |
| | | |
| | | **ä¸å¡è§åï¼** |
| | | - åªæå·²å®¡æ ¸ç订åæè½ä½åº |
| | | - å·²åºåºæå·²éè´§ç订åä¸è½ä½åº |
| | | - ä½åºå订åç¶æå为"å·²ä½åº" |
| | | - ä½åºååæ¥æ´æ°å
³èååç¶æä¸º"å·²ä½åº" |
| | | - 管çåå¯ä»¥éæ°å¯ç¨å·²ä½åºç订å |
| | | |
| | | ### 12.2 ç¶ææä¸¾ |
| | | |
| | | | ç¶æå¼ | æä¸¾ | 说æ | |
| | | |--------|------|------| |
| | | | 10 | PROCESS | æªå®¡æ ¸ | |
| | | | 20 | APPROVE | å·²å®¡æ ¸ | |
| | | | 30 | CANCEL | å·²ä½åº | |
| | | |
| | | ### 12.3 ååç¶æåæ¥ |
| | | |
| | | å½éå®è®¢åä½åº/å¯ç¨æ¶ï¼ä¼èªå¨åæ¥å
³èååçç¶æï¼ |
| | | |
| | | | æä½ | 订åç¶æåå | ååç¶æåå | |
| | | |------|--------------|--------------| |
| | | | ä½åºè®¢å | å·²å®¡æ ¸ â å·²ä½åº | å®¡æ ¸éè¿ â å·²ä½åº | |
| | | | å¯ç¨è®¢å | å·²ä½åº â å·²å®¡æ ¸ | å·²ä½åº â å®¡æ ¸éè¿ | |
| | | |
| | | **ååç¶ææä¸¾ï¼** |
| | | |
| | | | ç¶æå¼ | æä¸¾ | 说æ | |
| | | |--------|------|------| |
| | | | 0 | DRAFT | æªæäº¤ | |
| | | | 10 | PROCESS | 审æ¹ä¸ | |
| | | | 20 | APPROVE | å®¡æ ¸éè¿ | |
| | | | 30 | REJECT | å®¡æ ¸ä¸éè¿ | |
| | | | 40 | CANCEL | 已忶 | |
| | | | 50 | INVALID | å·²ä½åº | |
| | | |
| | | ### 12.4 API æ¥å£ |
| | | |
| | | | æ¹æ³ | è·¯å¾ | 说æ | |
| | | |------|------|------| |
| | | | PUT | /erp/sale-order/cancel | ä½åºéå®è®¢å | |
| | | | PUT | /erp/sale-order/enable | éæ°å¯ç¨éå®è®¢å | |
| | | |
| | | **请æ±åæ°ï¼** |
| | | |
| | | | åæ° | ç±»å | å¿
å¡« | 说æ | |
| | | |------|------|------|------| |
| | | | id | Long | æ¯ | éå®è®¢åç¼å· | |
| | | |
| | | **ååºï¼** |
| | | |
| | | ```json |
| | | { |
| | | "code": 0, |
| | | "msg": "æä½æå" |
| | | } |
| | | ``` |
| | | |
| | | **é误ç ï¼** |
| | | |
| | | | é误ç | 说æ | |
| | | |--------|------| |
| | | | 1_020_201_011 | ä½åºå¤±è´¥ï¼è®¢åæªå®¡æ ¸ | |
| | | | 1_020_201_012 | ä½åºå¤±è´¥ï¼å·²åå¨å¯¹åºçéå®åºåºå | |
| | | | 1_020_201_013 | ä½åºå¤±è´¥ï¼å·²åå¨å¯¹åºçéå®éè´§å | |
| | | | 1_020_201_014 | ä½åºå¤±è´¥ï¼è¯·å·æ°é¡µé¢åéè¯ | |
| | | | 1_020_201_015 | å¯ç¨å¤±è´¥ï¼è®¢åæªä½åº | |
| | | | 1_020_201_016 | å¯ç¨å¤±è´¥ï¼è¯·å·æ°é¡µé¢åéè¯ | |
| | | |
| | | ### 12.5 å端修æ¹ç¹ |
| | | |
| | | **æä»¶è·¯å¾ï¼** `/src/views/erp/sale/order/index.vue` |
| | | |
| | | **æä½åæé®ï¼** |
| | | |
| | | ```html |
| | | <el-table-column label="æä½" width="280"> |
| | | <template #default="{ row }"> |
| | | <el-button v-if="row.status === 10" type="primary" size="small" @click="handleUpdate(row)">ç¼è¾</el-button> |
| | | <el-button v-if="row.status === 10" type="success" size="small" @click="handleApprove(row)">å®¡æ ¸</el-button> |
| | | <el-button v-if="row.status === 20" type="warning" size="small" @click="handleProcess(row)">åå®¡æ ¸</el-button> |
| | | <el-button v-if="row.status === 20" type="danger" size="small" @click="handleCancel(row)">ä½åº</el-button> |
| | | <el-button v-if="row.status === 30" type="success" size="small" @click="handleEnable(row)">å¯ç¨</el-button> |
| | | <el-button v-if="row.status === 10" type="danger" size="small" @click="handleDelete(row)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | ``` |
| | | |
| | | **ç¶ææ ç¾ï¼** |
| | | |
| | | ```html |
| | | <el-table-column label="ç¶æ" prop="status" width="100"> |
| | | <template #default="{ row }"> |
| | | <el-tag v-if="row.status === 10" type="warning">æªå®¡æ ¸</el-tag> |
| | | <el-tag v-if="row.status === 20" type="success">å·²å®¡æ ¸</el-tag> |
| | | <el-tag v-if="row.status === 30" type="info">å·²ä½åº</el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | ``` |
| | | |
| | | **å
³èåååï¼ä½åºæ¶æ¾ç¤ºçº¢è²ï¼ï¼** |
| | | |
| | | ```html |
| | | <el-table-column label="å
³èåå" prop="contractNo" width="150"> |
| | | <template #default="{ row }"> |
| | | <el-link |
| | | v-if="row.contractId" |
| | | :type="row.status === 30 ? 'danger' : 'primary'" |
| | | @click="handleViewContract(row)" |
| | | > |
| | | {{ row.contractNo }} |
| | | </el-link> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | ``` |
| | | |
| | | **JS æ¹æ³ï¼** |
| | | |
| | | ```js |
| | | import { cancelSaleOrder, enableSaleOrder } from '@/api/erp/saleOrder' |
| | | |
| | | methods: { |
| | | async handleCancel(row) { |
| | | try { |
| | | await this.$confirm('确认ä½åºè¯¥éå®è®¢åï¼ä½åºåå
³èååä¹å°æ 记为已ä½åºï¼', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }) |
| | | await cancelSaleOrder(row.id) |
| | | this.$message.success('ä½åºæå') |
| | | this.getList() |
| | | } catch (e) { |
| | | if (e !== 'cancel') { |
| | | this.$message.error(e.message || 'ä½åºå¤±è´¥') |
| | | } |
| | | } |
| | | }, |
| | | async handleEnable(row) { |
| | | try { |
| | | await this.$confirm('ç¡®è®¤éæ°å¯ç¨è¯¥éå®è®¢åï¼å¯ç¨åå
³èååå°æ¢å¤ä¸ºå®¡æ ¸éè¿ç¶æï¼', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'info' |
| | | }) |
| | | await enableSaleOrder(row.id) |
| | | this.$message.success('å¯ç¨æå') |
| | | this.getList() |
| | | } catch (e) { |
| | | if (e !== 'cancel') { |
| | | this.$message.error(e.message || 'å¯ç¨å¤±è´¥') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **API å®ä¹æä»¶ï¼** `/src/api/erp/saleOrder.js` |
| | | |
| | | ```js |
| | | // ä½åºéå®è®¢å |
| | | export function cancelSaleOrder(id) { |
| | | return request({ |
| | | url: '/erp/sale-order/cancel', |
| | | method: 'put', |
| | | params: { id } |
| | | }) |
| | | } |
| | | |
| | | // éæ°å¯ç¨éå®è®¢å |
| | | export function enableSaleOrder(id) { |
| | | return request({ |
| | | url: '/erp/sale-order/enable', |
| | | method: 'put', |
| | | params: { id } |
| | | }) |
| | | } |
| | | ``` |
| | | |
| | | ### 12.6 注æäºé¡¹ |
| | | |
| | | 1. ä½åºæä½ä¼åæ¥æ´æ°å
³èååç¶æä¸º"å·²ä½åº" |
| | | 2. å¯ç¨æä½ä¼åæ¥æ´æ°å
³èååç¶æä¸º"å®¡æ ¸éè¿" |
| | | 3. å·²åºåº/å·²éè´§ç订åä¸è½ä½åºï¼éå
å¤çç¸å
³ä¸å¡åæ® |
| | | 4. ä½åºå订åå·æ¾ç¤ºä¸ºçº¢è²ï¼æéç¨æ·è¯¥è®¢å已失æ |
| | | 5. å¯ç¨åè½éè¦ç®¡çåæéï¼`erp:sale-order:enable`ï¼ |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | -- ============================================= |
| | | -- MES ç¼ç è§ååå§åèæ¬ |
| | | -- æ§è¡åè¯·ç¡®ä¿ mes_md_auto_code_rule å mes_md_auto_code_part 表已åå¨ |
| | | -- ============================================= |
| | | |
| | | -- æ¸
ç©ºç°ææ°æ®ï¼éæ°åå§åæ¶æ§è¡ï¼ |
| | | DELETE FROM mes_md_auto_code_part; |
| | | DELETE FROM mes_md_auto_code_rule; |
| | | |
| | | -- ============================================= |
| | | -- 1. åºç¡ä¸»æ°æ®ç¼ç è§å |
| | | -- ============================================= |
| | | |
| | | -- 1.1 ç©æåç±»ç¼ç è§å (MD_ITEM_TYPE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1, 'MD_ITEM_TYPE_CODE', 'ç©æåç±»ç¼ç ', 'ç¨äºçæç©æåç±»ç¼ç ', 10, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1, 1, 3, 3, 'ITC', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (1, 2, 4, 4, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 1.2 ç©æç¼ç è§å (MD_ITEM_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (2, 'MD_ITEM_CODE', 'ç©æç¼ç ', 'ç¨äºçæç©æç¼ç ', 20, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (2, 1, 3, 5, 'ITEM_', NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (2, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (2, 3, 4, 4, NULL, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 1.3 ä¾åºåç¼ç è§å (MD_VENDOR_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (3, 'MD_VENDOR_CODE', 'ä¾åºåç¼ç ', 'ç¨äºçæä¾åºåç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (3, 1, 3, 3, 'VDR', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (3, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 1.4 客æ·ç¼ç è§å (MD_CLIENT_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (4, 'MD_CLIENT_CODE', '客æ·ç¼ç ', 'ç¨äºçæå®¢æ·ç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (4, 1, 3, 3, 'CLT', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (4, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 1.5 å·¥ä½ç«ç¼ç è§å (MD_WORKSTATION_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (5, 'MD_WORKSTATION_CODE', 'å·¥ä½ç«ç¼ç ', 'ç¨äºçæå·¥ä½ç«ç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (5, 1, 3, 3, 'WKS', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (5, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 1.6 车é´ç¼ç è§å (MD_WORKSHOP_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (6, 'MD_WORKSHOP_CODE', '车é´ç¼ç ', 'ç¨äºçæè½¦é´ç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (6, 1, 3, 3, 'WSP', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (6, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 1.7 å·¥å
·ç±»åç¼ç è§å (TM_TOOL_TYPE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (7, 'TM_TOOL_TYPE_CODE', 'å·¥å
·ç±»åç¼ç ', 'ç¨äºçæå·¥å
·ç±»åç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (7, 1, 3, 3, 'TTL', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (7, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ============================================= |
| | | -- 2. ä»åºç®¡çç¼ç è§å |
| | | -- ============================================= |
| | | |
| | | -- 2.1 ä»åºç¼ç (WM_WAREHOUSE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8, 'WM_WAREHOUSE_CODE', 'ä»åºç¼ç ', 'ç¨äºçæä»åºç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8, 1, 3, 3, 'WHS', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (8, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.2 åºåºç¼ç (WM_LOCATION_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (9, 'WM_LOCATION_CODE', 'åºåºç¼ç ', 'ç¨äºçæåºåºç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (9, 1, 3, 3, 'LOC', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (9, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.3 åºä½ç¼ç (WM_AREA_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (10, 'WM_AREA_CODE', 'åºä½ç¼ç ', 'ç¨äºçæåºä½ç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (10, 1, 3, 3, 'ARA', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (10, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.4 æ¹æ¬¡ç¼ç (WM_BATCH_CODE) - æå¤©å¾ªç¯ |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (11, 'WM_BATCH_CODE', 'æ¹æ¬¡ç¼ç ', 'ç¨äºçææ¹æ¬¡ç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (11, 1, 3, 1, 'B', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (11, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (11, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.5 SNç (WM_SN_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (12, 'WM_SN_CODE', 'SNç ', 'ç¨äºçæSNç ', 20, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (12, 1, 3, 3, 'SN_', NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (12, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (12, 3, 4, 6, NULL, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.6 è£
ç®±åç¼ç (WM_PACKAGE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (13, 'WM_PACKAGE_CODE', 'è£
ç®±åç¼ç ', 'ç¨äºçæè£
ç®±åç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (13, 1, 3, 4, 'PKG_', NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (13, 2, 2, 8, NULL, 'yyyyMMdd', 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.7 å°è´§éç¥åç¼ç (WM_ARRIVAL_NOTICE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (14, 'WM_ARRIVAL_NOTICE_CODE', 'å°è´§éç¥åç¼ç ', 'ç¨äºçæå°è´§éç¥åç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (14, 1, 3, 3, 'AN_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (14, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (14, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.8 éè´å
¥åºåç¼ç (WM_ITEM_RECEIPT_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (15, 'WM_ITEM_RECEIPT_CODE', 'éè´å
¥åºåç¼ç ', 'ç¨äºçæéè´å
¥åºåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (15, 1, 3, 3, 'IR_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (15, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (15, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.9 éè´éè´§åç¼ç (WM_RETURN_VENDOR_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (16, 'WM_RETURN_VENDOR_CODE', 'éè´éè´§åç¼ç ', 'ç¨äºçæéè´éè´§åç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (16, 1, 3, 3, 'RV_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (16, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (16, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.10 ç产éæåç¼ç (WM_RETURN_ISSUE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (17, 'WM_RETURN_ISSUE_CODE', 'ç产éæåç¼ç ', 'ç¨äºçæç产éæåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (17, 1, 3, 3, 'RI_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (17, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (17, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.11 éå®åºåºåç¼ç (WM_PRODUCT_SALES_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (18, 'WM_PRODUCT_SALES_CODE', 'éå®åºåºåç¼ç ', 'ç¨äºçæéå®åºåºåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (18, 1, 3, 3, 'SO_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (18, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (18, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.12 åè´§éç¥åç¼ç (WM_SALES_NOTICE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (19, 'WM_SALES_NOTICE_CODE', 'åè´§éç¥åç¼ç ', 'ç¨äºçæåè´§éç¥åç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (19, 1, 3, 3, 'SN_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (19, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (19, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.13 éå®éè´§åç¼ç (WM_RETURN_SALES_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (20, 'WM_RETURN_SALES_CODE', 'éå®éè´§åç¼ç ', 'ç¨äºçæéå®éè´§åç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (20, 1, 3, 3, 'RS_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (20, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (20, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.14 æé¡¹å
¥åºåç¼ç (WM_MISC_RECEIPT_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (21, 'WM_MISC_RECEIPT_CODE', 'æé¡¹å
¥åºåç¼ç ', 'ç¨äºçææé¡¹å
¥åºåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (21, 1, 3, 3, 'MR_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (21, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (21, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.15 æé¡¹åºåºåç¼ç (WM_MISC_ISSUE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (22, 'WM_MISC_ISSUE_CODE', 'æé¡¹åºåºåç¼ç ', 'ç¨äºçææé¡¹åºåºåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (22, 1, 3, 3, 'MI_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (22, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (22, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.16 çç¹æ¹æ¡ç¼ç (WM_STOCK_TAKING_PLAN_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (23, 'WM_STOCK_TAKING_PLAN_CODE', 'çç¹æ¹æ¡ç¼ç ', 'ç¨äºçæçç¹æ¹æ¡ç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (23, 1, 3, 3, 'SP_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (23, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (23, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.17 çç¹ä»»å¡ç¼ç (WM_STOCK_TAKING_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (24, 'WM_STOCK_TAKING_CODE', 'çç¹ä»»å¡ç¼ç ', 'ç¨äºçæçç¹ä»»å¡ç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (24, 1, 3, 3, 'ST_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (24, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (24, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.18 è½¬ç§»è°æ¨åç¼ç (TRANSFER_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (25, 'TRANSFER_CODE', 'è½¬ç§»è°æ¨åç¼ç ', 'ç¨äºçæè½¬ç§»è°æ¨åç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (25, 1, 3, 3, 'TR_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (25, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (25, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.19 å¤ååæåç¼ç (WM_OUTSOURCE_ISSUE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (26, 'WM_OUTSOURCE_ISSUE_CODE', 'å¤ååæåç¼ç ', 'ç¨äºçæå¤ååæåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (26, 1, 3, 3, 'OI_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (26, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (26, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 2.20 å¤åå
¥åºåç¼ç (WM_OUTSOURCE_RECEIPT_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (27, 'WM_OUTSOURCE_RECEIPT_CODE', 'å¤åå
¥åºåç¼ç ', 'ç¨äºçæå¤åå
¥åºåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (27, 1, 3, 3, 'OR_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (27, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (27, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ============================================= |
| | | -- 3. ç产管çç¼ç è§å |
| | | -- ============================================= |
| | | |
| | | -- 3.1 ç产工åç¼ç (PRO_WORK_ORDER_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (28, 'PRO_WORK_ORDER_CODE', 'ç产工åç¼ç ', 'ç¨äºçæç产工åç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (28, 1, 3, 3, 'WO_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (28, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (28, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 3.2 ç产任å¡ç¼ç (PRO_TASK_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (29, 'PRO_TASK_CODE', 'ç产任å¡ç¼ç ', 'ç¨äºçæç产任å¡ç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (29, 1, 3, 3, 'TK_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (29, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (29, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 3.3 ç产æ¥å·¥åç¼ç (PRO_FEEDBACK_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (30, 'PRO_FEEDBACK_CODE', 'ç产æ¥å·¥åç¼ç ', 'ç¨äºçæç产æ¥å·¥åç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (30, 1, 3, 3, 'FB_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (30, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (30, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 3.4 å·¥èºè·¯çº¿ç¼ç (PRO_ROUTE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (31, 'PRO_ROUTE_CODE', 'å·¥èºè·¯çº¿ç¼ç ', 'ç¨äºçæå·¥èºè·¯çº¿ç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (31, 1, 3, 3, 'RT_', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (31, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ============================================= |
| | | -- 4. è´¨é管çç¼ç è§å |
| | | -- ============================================= |
| | | |
| | | -- 4.1 æ¥ææ£éªåç¼ç (QC_IQC_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (32, 'QC_IQC_CODE', 'æ¥ææ£éªåç¼ç ', 'ç¨äºçææ¥ææ£éªåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (32, 1, 3, 4, 'IQC_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (32, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (32, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 4.2 è¿ç¨æ£éªåç¼ç (QC_IPQC_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (33, 'QC_IPQC_CODE', 'è¿ç¨æ£éªåç¼ç ', 'ç¨äºçæè¿ç¨æ£éªåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (33, 1, 3, 5, 'IPQC_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (33, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (33, 3, 4, 3, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 4.3 åºè´§æ£éªåç¼ç (QC_OQC_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (34, 'QC_OQC_CODE', 'åºè´§æ£éªåç¼ç ', 'ç¨äºçæåºè´§æ£éªåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (34, 1, 3, 5, 'OQC_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (34, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (34, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 4.4 éè´§æ£éªåç¼ç (QC_RQC_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (35, 'QC_RQC_CODE', 'éè´§æ£éªåç¼ç ', 'ç¨äºçæéè´§æ£éªåç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (35, 1, 3, 4, 'RQC_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (35, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (35, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 4.5 缺é·ç±»åç¼ç (QC_DEFECT_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (36, 'QC_DEFECT_CODE', '缺é·ç±»åç¼ç ', 'ç¨äºçæç¼ºé·ç±»åç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (36, 1, 3, 3, 'DFC', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (36, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 4.6 æ ·åæ£éªç»æç¼ç (QC_INDICATOR_RESULT_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (37, 'QC_INDICATOR_RESULT_CODE', 'æ ·åæ£éªç»æç¼ç ', 'ç¨äºçææ ·åæ£éªç»æç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (37, 1, 3, 4, 'QIR_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (37, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (37, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ============================================= |
| | | -- 5. 设å¤ç®¡çç¼ç è§å |
| | | -- ============================================= |
| | | |
| | | -- 5.1 设å¤ç¼ç (DV_MACHINERY_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (38, 'DV_MACHINERY_CODE', '设å¤ç¼ç ', 'ç¨äºçæè®¾å¤ç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (38, 1, 3, 3, 'MC_', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (38, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 5.2 设å¤ç±»åç¼ç (DV_MACHINERY_TYPE_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (39, 'DV_MACHINERY_TYPE_CODE', '设å¤ç±»åç¼ç ', 'ç¨äºçæè®¾å¤ç±»åç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (39, 1, 3, 3, 'MCT', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (39, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 5.3 ç¹æ£ä¿å
»é¡¹ç®ç¼ç (DV_SUBJECT_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (40, 'DV_SUBJECT_CODE', 'ç¹æ£ä¿å
»é¡¹ç®ç¼ç ', 'ç¨äºçæç¹æ£ä¿å
»é¡¹ç®ç¼ç ', 12, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (40, 1, 3, 3, 'SBJ', NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, serial_start_no, serial_step, cycle_flag, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (40, 2, 4, 6, NULL, 1, 1, b'0', 'æµæ°´å·', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- 5.4 ç»´ä¿®åç¼ç (DV_REPAIR_CODE) |
| | | INSERT INTO mes_md_auto_code_rule (id, code, name, description, max_length, padded, status, creator, create_time, updater, update_time, deleted) |
| | | VALUES (41, 'DV_REPAIR_CODE', 'ç»´ä¿®åç¼ç ', 'ç¨äºçæç»´ä¿®åç¼ç ', 16, b'0', 0, '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (41, 1, 3, 3, 'RP_', NULL, NULL, NULL, NULL, NULL, 'åºå®åç¼', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (41, 2, 2, 8, NULL, 'yyyyMMdd', NULL, NULL, NULL, NULL, 'æ¥æ', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | INSERT INTO mes_md_auto_code_part (rule_id, sort, type, length, fix_character, date_format, serial_start_no, serial_step, cycle_flag, cycle_method, remark, creator, create_time, updater, update_time, deleted) |
| | | VALUES (41, 3, 4, 4, NULL, NULL, 1, 1, b'1', 3, 'æµæ°´å·-æå¤©å¾ªç¯', '1', NOW(), '1', NOW(), b'0'); |
| | | |
| | | -- ============================================= |
| | | -- æ§è¡å®ææç¤º |
| | | -- ============================================= |
| | | SELECT 'MES ç¼ç è§ååå§å宿ï¼' AS result; |
| | | SELECT COUNT(*) AS rule_count FROM mes_md_auto_code_rule WHERE deleted = 0; |
| | | SELECT COUNT(*) AS part_count FROM mes_md_auto_code_part WHERE deleted = 0; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.crm.api.contract; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | |
| | | /** |
| | | * CRM åå API æ¥å£ |
| | | * |
| | | * @author èéæºç |
| | | */ |
| | | public interface CrmContractApi { |
| | | |
| | | String PREFIX = "/rpc-api/crm/contract"; |
| | | |
| | | /** |
| | | * æ´æ°ååç¶æ |
| | | * |
| | | * @param id ååç¼å· |
| | | * @param status ç¶æ |
| | | */ |
| | | CommonResult<Boolean> updateContractStatus(Long id, Integer status); |
| | | |
| | | /** |
| | | * æ ¹æ®éå®è®¢åç¼å·æ´æ°ååç¶æ |
| | | * |
| | | * @param orderId éå®è®¢åç¼å· |
| | | * @param status ç¶æ |
| | | */ |
| | | CommonResult<Boolean> updateContractStatusByOrderId(Long orderId, Integer status); |
| | | |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.module.crm.api.contract; |
| | | |
| | | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| | | import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | |
| | | /** |
| | | * CRM åå API å®ç°ç±» |
| | | * |
| | | * @author èéæºç |
| | | */ |
| | | @RestController |
| | | @RequestMapping(CrmContractApi.PREFIX) |
| | | @Validated |
| | | public class CrmContractApiImpl implements CrmContractApi { |
| | | |
| | | @Resource |
| | | @Lazy // å»¶è¿å è½½ï¼é¿å
循ç¯ä¾èµ |
| | | private CrmContractService contractService; |
| | | |
| | | @Override |
| | | public CommonResult<Boolean> updateContractStatus(Long id, Integer status) { |
| | | contractService.updateContractStatus(id, status); |
| | | return success(true); |
| | | } |
| | | |
| | | @Override |
| | | public CommonResult<Boolean> updateContractStatusByOrderId(Long orderId, Integer status) { |
| | | contractService.updateContractStatusByOrderId(orderId, status); |
| | | return success(true); |
| | | } |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| | | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import org.springframework.context.annotation.Lazy; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | |
| | | @Resource |
| | | private CrmContractMapper contractMapper; |
| | | @Resource |
| | | @Lazy // å»¶è¿å è½½ï¼é¿å
循ç¯ä¾èµ |
| | | private CrmReceivableService receivableService; |
| | | @Resource |
| | | private AdminUserApi adminUserApi; |
| | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤åå审æ¹") |
| | | @PreAuthorize("@ss.hasPermission('crm:contract:update')") |
| | | public CommonResult<Boolean> submitContract(@RequestParam("id") Long id) { |
| | | contractService.submitContract(id, getLoginUserId()); |
| | | public CommonResult<Boolean> submitContract(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | contractService.submitContract(id, processDefinitionKey, getLoginUserId()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·åååå®¡æ¹æµç¨å表") |
| | | @PreAuthorize("@ss.hasPermission('crm:contract:query')") |
| | | public CommonResult<List<Map<String, Object>>> getContractApproveProcessList() { |
| | | return success(contractService.getContractApproveProcessDefinitionList()); |
| | | } |
| | | |
| | | private List<CrmContractRespVO> buildContractDetailList(List<CrmContractDO> contractList) { |
| | | if (CollUtil.isEmpty(contractList)) { |
| | | return Collections.emptyList(); |
| | |
| | | @ExcelProperty("ååéé¢") |
| | | private BigDecimal totalPrice; |
| | | |
| | | @Schema(description = "å®ééé¢ï¼åä½ï¼å
", example = "1000.00") |
| | | @ExcelProperty("å®ééé¢") |
| | | private BigDecimal depositPrice; |
| | | |
| | | @Schema(description = "已忬¾éé¢", example = "5617") |
| | | @ExcelProperty("已忬¾éé¢") |
| | | private BigDecimal totalReceivablePrice; |
| | |
| | | @DiffLogField(name = "ååéé¢") |
| | | private BigDecimal totalPrice; |
| | | |
| | | @Schema(description = "å®ééé¢ï¼åä½ï¼å
", example = "1000.00") |
| | | @DiffLogField(name = "å®ééé¢") |
| | | private BigDecimal depositPrice; |
| | | |
| | | @Schema(description = "客æ·ç¾çº¦äººç¼å·", example = "18546") |
| | | @DiffLogField(name = "客æ·ç¾çº¦äºº", function = CrmContactParseFunction.NAME) |
| | | private Long signContactId; |
| | |
| | | import cn.iocoder.yudao.module.crm.controller.admin.quotation.vo.CrmSaleQuotationSaveReqVO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.quotation.CrmSaleQuotationDO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.quotation.CrmSaleQuotationProductDO; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| | | import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerService; |
| | | import cn.iocoder.yudao.module.crm.service.quotation.CrmSaleQuotationService; |
| | | import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi; |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | |
| | | private MdmItemApi mdmItemApi; |
| | | @Resource |
| | | private MdmUnitMeasureApi mdmUnitMeasureApi; |
| | | @Resource |
| | | private CrmCustomerService customerService; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "å建é宿¥ä»·å") |
| | |
| | | ExcelUtils.write(response, "é宿¥ä»·å.xls", "æ°æ®", CrmSaleQuotationRespVO.class, list); |
| | | } |
| | | |
| | | @PutMapping("/submit") |
| | | @Operation(summary = "æäº¤é宿¥ä»·å®¡æ¹") |
| | | @PreAuthorize("@ss.hasPermission('crm:sale-quotation:submit')") |
| | | public CommonResult<Boolean> submitSaleQuotation(@RequestParam("id") Long id, |
| | | @RequestParam("processDefinitionKey") String processDefinitionKey) { |
| | | saleQuotationService.submitSaleQuotation(id, processDefinitionKey, getLoginUserId()); |
| | | return success(true); |
| | | } |
| | | |
| | | @GetMapping("/approve-process-list") |
| | | @Operation(summary = "è·åé宿¥ä»·å®¡æ¹æµç¨å表") |
| | | @PreAuthorize("@ss.hasPermission('crm:sale-quotation:query')") |
| | | public CommonResult<List<Map<String, Object>>> getSaleQuotationApproveProcessList() { |
| | | return success(saleQuotationService.getSaleQuotationApproveProcessDefinitionList()); |
| | | } |
| | | |
| | | @PostMapping("/convert-contract") |
| | | @Operation(summary = "转为åå") |
| | | @Parameter(name = "id", description = "æ¥ä»·åç¼å·", required = true) |
| | |
| | | MapUtils.findAndThen(unitMap, item.getItemUnitId(), unit -> item.setItemUnitName(unit.getName())); |
| | | })); |
| | | } |
| | | // 2. å¡«å
å
³èä¿¡æ¯ |
| | | // 2. å¡«å
客æ·åç§° |
| | | if (saleQuotation.getCustomerId() != null) { |
| | | CrmCustomerDO customer = customerService.getCustomer(saleQuotation.getCustomerId()); |
| | | if (customer != null) { |
| | | respVO.setCustomerName(customer.getName()); |
| | | } |
| | | } |
| | | // 3. å¡«å
å
³èä¿¡æ¯ |
| | | fillSaleQuotationRelatedFields(respVO); |
| | | return respVO; |
| | | } |
| | |
| | | Map<Long, List<CrmSaleQuotationProductDO>> productMap = convertMultiMap(productList, CrmSaleQuotationProductDO::getQuotationId); |
| | | // 1.2 ç©æä¿¡æ¯ |
| | | Map<Long, MdmItemRespDTO> itemMap = mdmItemApi.getItemMap(convertSet(productList, CrmSaleQuotationProductDO::getItemId)); |
| | | // 1.3 ç¨æ·ä¿¡æ¯ |
| | | // 1.3 客æ·ä¿¡æ¯ |
| | | Map<Long, CrmCustomerDO> customerMap = customerService.getCustomerMap( |
| | | convertSet(pageResult.getList(), CrmSaleQuotationDO::getCustomerId)); |
| | | // 1.4 ç¨æ·ä¿¡æ¯ |
| | | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| | | convertSet(pageResult.getList(), CrmSaleQuotationDO::getOwnerUserId)); |
| | | // 1.4 é¨é¨ä¿¡æ¯ |
| | | // 1.5 é¨é¨ä¿¡æ¯ |
| | | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap( |
| | | convertSet(pageResult.getList(), CrmSaleQuotationDO::getOwnerUserId)); |
| | | |
| | |
| | | vo.setItems(BeanUtils.toBean(productMap.get(vo.getId()), CrmSaleQuotationRespVO.Item.class, |
| | | item -> MapUtils.findAndThen(itemMap, item.getItemId(), mdmItem -> item.setItemCode(mdmItem.getCode()) |
| | | .setItemName(mdmItem.getName()).setItemBarCode(mdmItem.getBarCode())))); |
| | | MapUtils.findAndThen(customerMap, vo.getCustomerId(), customer -> vo.setCustomerName(customer.getName())); |
| | | MapUtils.findAndThen(userMap, vo.getOwnerUserId(), user -> vo.setOwnerUserName(user.getNickname())); |
| | | MapUtils.findAndThen(deptMap, vo.getOwnerUserId(), dept -> vo.setOwnerUserDeptName(dept.getName())); |
| | | }); |
| | |
| | | */ |
| | | private BigDecimal totalPrice; |
| | | /** |
| | | * å®ééé¢ï¼åä½ï¼å
|
| | | */ |
| | | private BigDecimal depositPrice; |
| | | /** |
| | | * å
³è ERP éå®è®¢åç¼å· |
| | | */ |
| | | private Long orderId; |
| | |
| | | return selectOne(CrmContractDO::getBusinessId, businessId); |
| | | } |
| | | |
| | | default CrmContractDO selectByOrderId(Long orderId) { |
| | | return selectOne(CrmContractDO::getOrderId, orderId); |
| | | } |
| | | |
| | | default List<CrmContractDO> selectListByCustomerId(Long customerId) { |
| | | return selectList(CrmContractDO::getCustomerId, customerId); |
| | | } |
| | |
| | | ErrorCode CONTRACT_GENERATE_ORDER_FAIL_NOT_APPROVE = new ErrorCode(1_020_000_006, "çæéå®è®¢å失败ï¼åå ï¼ååæªå®¡æ¹éè¿"); |
| | | ErrorCode CONTRACT_GENERATE_ORDER_FAIL_EXISTS_ORDER = new ErrorCode(1_020_000_007, "çæéå®è®¢å失败ï¼åå ï¼å·²å
³èéå®è®¢åã{}ã"); |
| | | ErrorCode CONTRACT_GENERATE_ORDER_FAIL_NO_PRODUCT = new ErrorCode(1_020_000_008, "çæéå®è®¢å失败ï¼åå ï¼ååæ²¡æäº§åä¿¡æ¯"); |
| | | ErrorCode CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_020_000_009, "ååå®¡æ¹æµç¨ä¸åå¨ææªæ¿æ´»ï¼è¯·æ£æ¥ BPM é
ç½®"); |
| | | |
| | | // ========== 线索管ç 1-020-001-000 ========== |
| | | ErrorCode CLUE_NOT_EXISTS = new ErrorCode(1_020_001_000, "线索ä¸åå¨"); |
| | |
| | | ErrorCode SALE_QUOTATION_NO_EXISTS = new ErrorCode(1_020_015_001, "é宿¥ä»·åå·å·²åå¨"); |
| | | ErrorCode SALE_QUOTATION_UPDATE_FAIL_NOT_DRAFT = new ErrorCode(1_020_015_002, "é宿¥ä»·å({})䏿¯èç¨¿ç¶æï¼æ æ³ä¿®æ¹"); |
| | | ErrorCode SALE_QUOTATION_DELETE_FAIL_NOT_DRAFT = new ErrorCode(1_020_015_003, "é宿¥ä»·å({})䏿¯èç¨¿ç¶æï¼æ æ³å é¤"); |
| | | ErrorCode SALE_QUOTATION_SUBMIT_FAIL_NOT_DRAFT = new ErrorCode(1_020_015_004, "é宿¥ä»·å䏿¯èç¨¿ç¶æï¼æ æ³æäº¤å®¡æ¹"); |
| | | ErrorCode SALE_QUOTATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS = new ErrorCode(1_020_015_005, "é宿¥ä»·å䏿¯å®¡æ¹ä¸ç¶æï¼æ æ³æ´æ°å®¡æ¹ç¶æ"); |
| | | ErrorCode SALE_QUOTATION_BPM_CATEGORY_NOT_EXISTS = new ErrorCode(1_020_015_006, "é宿¥ä»·å®¡æ¹åç±»ä¸åå¨ï¼è¯·æ£æ¥ BPM é
ç½®"); |
| | | ErrorCode SALE_QUOTATION_BPM_PROCESS_DEFINITION_NOT_EXISTS = new ErrorCode(1_020_015_007, "é宿¥ä»·å®¡æ¹æµç¨ä¸åå¨ææªæ¿æ´»ï¼è¯·æ£æ¥ BPM é
ç½®"); |
| | | ErrorCode SALE_QUOTATION_NOT_APPROVE = new ErrorCode(1_020_015_008, "é宿¥ä»·åæªå®¡æ¹éè¿ï¼æ æ³è½¬åå"); |
| | | ErrorCode SALE_QUOTATION_CONTRACT_EXISTS = new ErrorCode(1_020_015_009, "é宿¥ä»·å已转ååï¼è¯·å¿é夿ä½"); |
| | | ErrorCode SALE_QUOTATION_ITEM_NOT_EXISTS = new ErrorCode(1_020_015_010, "ç©æä¸å卿æªå¯ç¨"); |
| | | ErrorCode SALE_QUOTATION_CONVERT_FAIL_NOT_DRAFT = new ErrorCode(1_020_015_004, "é宿¥ä»·å({})䏿¯èç¨¿ç¶æï¼æ æ³è½¬åå"); |
| | | ErrorCode SALE_QUOTATION_ITEM_NOT_EXISTS = new ErrorCode(1_020_015_005, "ç©æä¸å卿æªå¯ç¨"); |
| | | ErrorCode SALE_QUOTATION_CONTRACT_EXISTS = new ErrorCode(1_020_015_006, "é宿¥ä»·å已转ååï¼è¯·å¿é夿ä½"); |
| | | |
| | | } |
| | |
| | | DRAFT(0, "æªæäº¤"), |
| | | PROCESS(10, "审æ¹ä¸"), |
| | | APPROVE(20, "å®¡æ ¸éè¿"), |
| | | REJECT(30, "å®¡æ ¸ä¸éè¿"), |
| | | CANCEL(40, "已忶"); |
| | | REJECT(30, "å®¡æ ¸ä¸éè¿"), |
| | | CANCEL(40, "已忶"), |
| | | INVALID(50, "å·²ä½åº"); |
| | | |
| | | private final Integer status; |
| | | private final String name; |
| | |
| | | import java.util.Arrays; |
| | | |
| | | /** |
| | | * CRM é宿¥ä»·å®¡æ¹ç¶ææä¸¾ |
| | | * CRM é宿¥ä»·ç¶ææä¸¾ |
| | | * |
| | | * @author èéæºç |
| | | */ |
| | |
| | | public enum CrmSaleQuotationStatusEnum implements ArrayValuable<Integer> { |
| | | |
| | | DRAFT(0, "è稿"), |
| | | PROCESS(10, "审æ¹ä¸"), |
| | | APPROVE(20, "å·²éè¿"), |
| | | REJECT(30, "å·²æç»"), |
| | | CANCEL(40, "已忶"), |
| | | CONVERTED(50, "已转åå"); |
| | | CONVERTED(10, "已转åå"); |
| | | |
| | | private final Integer status; |
| | | private final String name; |
| | |
| | | return ARRAYS; |
| | | } |
| | | |
| | | } |
| | | } |
| | |
| | | /** |
| | | * åèµ·ååå®¡æ¹æµç¨ |
| | | * |
| | | * @param id ååç¼å· |
| | | * @param userId ç¨æ·ç¼å· |
| | | * @param id ååç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ Key |
| | | * @param userId ç¨æ·ç¼å· |
| | | */ |
| | | void submitContract(Long id, Long userId); |
| | | void submitContract(Long id, String processDefinitionKey, Long userId); |
| | | |
| | | /** |
| | | * è·åååå®¡æ¹æµç¨å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表 |
| | | */ |
| | | List<Map<String, Object>> getContractApproveProcessDefinitionList(); |
| | | |
| | | /** |
| | | * æ´æ°ååæµç¨å®¡æ¹ç»æ |
| | |
| | | */ |
| | | Long generateSaleOrder(Long id, Long userId); |
| | | |
| | | /** |
| | | * æ´æ°ååç¶æ |
| | | * |
| | | * @param id ååç¼å· |
| | | * @param status ç¶æ |
| | | */ |
| | | void updateContractStatus(Long id, Integer status); |
| | | |
| | | /** |
| | | * æ ¹æ®éå®è®¢åç¼å·æ´æ°ååç¶æ |
| | | * |
| | | * @param orderId éå®è®¢åç¼å· |
| | | * @param status ç¶æ |
| | | */ |
| | | void updateContractStatusByOrderId(Long orderId, Integer status); |
| | | |
| | | } |
| | |
| | | import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; |
| | | import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; |
| | | import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| | | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractPageReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractSaveReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractTransferReqVO; |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.Collection; |
| | | import java.util.Collections; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.Set; |
| | | |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| | |
| | | * BPM ååå®¡æ¹æµç¨æ è¯ |
| | | */ |
| | | public static final String BPM_PROCESS_DEFINITION_KEY = "crm-contract-audit"; |
| | | |
| | | /** |
| | | * BPM åå审æ¹åç±»ç¼ç |
| | | */ |
| | | private static final String CONTRACT_APPROVE_CATEGORY_CODE = "contract_approve"; |
| | | |
| | | @Resource |
| | | private CrmContractMapper contractMapper; |
| | |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | @Resource |
| | | private ErpSaleOrderApi saleOrderApi; |
| | | @Resource |
| | | private MdmItemApi mdmItemApi; |
| | |
| | | } |
| | | |
| | | // 2.1 æå
¥åå |
| | | CrmContractDO contract = BeanUtils.toBean(createReqVO, CrmContractDO.class).setNo(no); |
| | | CrmContractDO contract = BeanUtils.toBean(createReqVO, CrmContractDO.class) |
| | | .setNo(no) |
| | | .setAuditStatus(CrmAuditStatusEnum.DRAFT.getStatus()); // é»è®¤ä¸ºæªæäº¤ç¶æ |
| | | calculateTotalPrice(contract, contractProducts); |
| | | contractMapper.insert(contract); |
| | | // 2.2 æå
¥ååå
³èåå |
| | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @LogRecord(type = CRM_CONTRACT_TYPE, subType = CRM_CONTRACT_SUBMIT_SUB_TYPE, bizNo = "{{#id}}", |
| | | success = CRM_CONTRACT_SUBMIT_SUCCESS) |
| | | public void submitContract(Long id, Long userId) { |
| | | public void submitContract(Long id, String processDefinitionKey, Long userId) { |
| | | // 1. æ ¡éªå忝å¦å¨å®¡æ¹ |
| | | CrmContractDO contract = validateContractExists(id); |
| | | if (ObjUtil.notEqual(contract.getAuditStatus(), CrmAuditStatusEnum.DRAFT.getStatus())) { |
| | | throw exception(CONTRACT_SUBMIT_FAIL_NOT_DRAFT); |
| | | } |
| | | |
| | | // 2. å建ååå®¡æ¹æµç¨å®ä¾ |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(BPM_PROCESS_DEFINITION_KEY).setBusinessKey(String.valueOf(id))); |
| | | // 2. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateContractApproveCategoryAndProcessDefinition(); |
| | | |
| | | // 3. æ´æ°åå工使µç¼å· |
| | | // 3. æ ¡éªä¼ å
¥çæµç¨å®ä¹ Key æ¯å¦å±äºè¯¥åç±»ä¸å¤äºæ¿æ´»ç¶æ |
| | | ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey); |
| | | if (processDefinition == null) { |
| | | throw exception(CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 4. å建ååå®¡æ¹æµç¨å®ä¾ |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey).setBusinessKey(String.valueOf(id))); |
| | | |
| | | // 5. æ´æ°åå工使µç¼å· |
| | | contractMapper.updateById(new CrmContractDO().setId(id).setProcessInstanceId(processInstanceId) |
| | | .setAuditStatus(CrmAuditStatusEnum.PROCESS.getStatus())); |
| | | |
| | | // 3. è®°å½æ¥å¿ |
| | | // 6. è®°å½æ¥å¿ |
| | | LogRecordContext.putVariable("contractName", contract.getName()); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éª BPM åå审æ¹åç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | */ |
| | | private void validateContractApproveCategoryAndProcessDefinition() { |
| | | // 1. æ ¡éªåç±»æ¯å¦åå¨ |
| | | List<String> codes = Collections.singletonList(CONTRACT_APPROVE_CATEGORY_CODE); |
| | | Map<String, ?> categoryMap = bpmCategoryService.getCategoryMap(codes); |
| | | if (!categoryMap.containsKey(CONTRACT_APPROVE_CATEGORY_CODE)) { |
| | | throw exception(CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 2. æ ¡éªåç±»ä¸æ¯å¦æå¯ç¨çæµç¨å®ä¹ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(CONTRACT_APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | throw exception(CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 3. æ ¡éªæ¯å¦ææ¿æ´»ç¶æçæµç¨å®ä¹ |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | boolean hasActiveDefinition = processDefinitions.stream() |
| | | .anyMatch(pd -> !pd.isSuspended()); |
| | | if (!hasActiveDefinition) { |
| | | throw exception(CONTRACT_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getContractApproveProcessDefinitionList() { |
| | | // 1. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateContractApproveCategoryAndProcessDefinition(); |
| | | |
| | | // 2. è·ååç±»ä¸çæµç¨å®ä¹ä¿¡æ¯ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(CONTRACT_APPROVE_CATEGORY_CODE); |
| | | |
| | | // 3. è·åæµç¨å®ä¹è¯¦æ
|
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | |
| | | // 4. è¿æ»¤ï¼åªä¿çæ¿æ´»ç¶æï¼ä¸ç¸å key åªä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (ProcessDefinition pd : processDefinitions) { |
| | | if (pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | |
| | | // 5. è¿åæµç¨å®ä¹å表 |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | item.put("version", pd.getVersion()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | |
| | | createReqDTO.setContractNo(contract.getNo()); |
| | | createReqDTO.setSaleUserId(contract.getOwnerUserId()); |
| | | createReqDTO.setOrderTime(LocalDateTime.now().toString()); |
| | | createReqDTO.setDiscountPercent(contract.getDiscountPercent()); |
| | | createReqDTO.setDiscountPercent(contract.getDiscountPercent() != null ? contract.getDiscountPercent() : BigDecimal.ZERO); |
| | | createReqDTO.setDepositPrice(contract.getDepositPrice() != null ? contract.getDepositPrice() : BigDecimal.ZERO); |
| | | createReqDTO.setRemark("ç±ååã" + contract.getNo() + "ãèªå¨çæ"); |
| | | |
| | | // 5. æå»ºè®¢å项 |
| | |
| | | return orderId; |
| | | } |
| | | |
| | | @Override |
| | | public void updateContractStatus(Long id, Integer status) { |
| | | contractMapper.updateById(new CrmContractDO() |
| | | .setId(id) |
| | | .setAuditStatus(status)); |
| | | } |
| | | |
| | | @Override |
| | | public void updateContractStatusByOrderId(Long orderId, Integer status) { |
| | | CrmContractDO contract = contractMapper.selectByOrderId(orderId); |
| | | if (contract != null) { |
| | | contractMapper.updateById(new CrmContractDO() |
| | | .setId(contract.getId()) |
| | | .setAuditStatus(status)); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | package cn.iocoder.yudao.module.crm.service.contract.listener; |
| | | |
| | | import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEvent; |
| | | import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEventListener; |
| | | import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; |
| | | import cn.iocoder.yudao.module.crm.dal.mysql.contract.CrmContractMapper; |
| | | import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; |
| | | import cn.iocoder.yudao.module.crm.service.contract.CrmContractService; |
| | | import cn.iocoder.yudao.module.crm.service.contract.CrmContractServiceImpl; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.context.ApplicationListener; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * åå审æ¹çç»æççå¬å¨å®ç°ç±» |
| | | * åå审æ¹çç»æçå¬å¨å®ç°ç±» |
| | | * |
| | | * éè¿ businessKeyï¼ååIDï¼å¹é
ï¼è䏿¯åºå®çæµç¨å®ä¹ Keyï¼ |
| | | * è¿æ ·å¯ä»¥æ¯æåç±»ä¸ä»»æ Key çæµç¨æ¨¡åã |
| | | * |
| | | * @author HUIHUI |
| | | */ |
| | | @Component |
| | | public class CrmContractStatusListener extends BpmProcessInstanceStatusEventListener { |
| | | @Slf4j |
| | | public class CrmContractStatusListener implements ApplicationListener<BpmProcessInstanceStatusEvent> { |
| | | |
| | | @Resource |
| | | private CrmContractService contractService; |
| | | @Resource |
| | | private CrmContractMapper contractMapper; |
| | | |
| | | @Override |
| | | public String getProcessDefinitionKey() { |
| | | return CrmContractServiceImpl.BPM_PROCESS_DEFINITION_KEY; |
| | | } |
| | | public void onApplicationEvent(BpmProcessInstanceStatusEvent event) { |
| | | // éè¿ businessKey æ¥è¯¢åå |
| | | Long contractId; |
| | | try { |
| | | contractId = Long.parseLong(event.getBusinessKey()); |
| | | } catch (NumberFormatException e) { |
| | | return; // businessKey 䏿¯æ°åï¼å¿½ç¥ |
| | | } |
| | | |
| | | @Override |
| | | protected void onEvent(BpmProcessInstanceStatusEvent event) { |
| | | contractService.updateContractAuditStatus(Long.parseLong(event.getBusinessKey()), event.getStatus()); |
| | | CrmContractDO contract = contractMapper.selectById(contractId); |
| | | if (contract == null) { |
| | | return; // 䏿¯ååï¼å¿½ç¥ |
| | | } |
| | | |
| | | // åªæå®¡æ¹ä¸ç¶æçååæå¤ç |
| | | if (!CrmAuditStatusEnum.PROCESS.getStatus().equals(contract.getAuditStatus())) { |
| | | log.warn("[onApplicationEvent] åå({}) ä¸å¤äºå®¡æ¹ä¸ç¶æï¼å½åç¶æ: {}", contractId, contract.getAuditStatus()); |
| | | return; |
| | | } |
| | | |
| | | log.info("[onApplicationEvent] åå({}) 审æ¹ç¶ææ´æ°: {}", contractId, event.getStatus()); |
| | | // æ´æ°å®¡æ¹ç¶æ |
| | | contractService.updateContractAuditStatus(contractId, event.getStatus()); |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * CRM é宿¥ä»·å Service æ¥å£ |
| | |
| | | * @return 产åæç»å表 |
| | | */ |
| | | List<CrmSaleQuotationProductDO> getSaleQuotationProductListByQuotationIds(Collection<Long> quotationIds); |
| | | |
| | | /** |
| | | * æäº¤é宿¥ä»·åå®¡æ¹ |
| | | * |
| | | * @param id æ¥ä»·åç¼å· |
| | | * @param processDefinitionKey æµç¨å®ä¹ Key |
| | | * @param userId ç¨æ·ç¼å· |
| | | */ |
| | | void submitSaleQuotation(Long id, String processDefinitionKey, Long userId); |
| | | |
| | | /** |
| | | * æ´æ°é宿¥ä»·å审æ¹ç¶æ |
| | | * |
| | | * @param id æ¥ä»·åç¼å· |
| | | * @param bpmResult BPM 审æ¹ç»æ |
| | | */ |
| | | void updateSaleQuotationAuditStatus(Long id, Integer bpmResult); |
| | | |
| | | /** |
| | | * è·åé宿¥ä»·å®¡æ¹æµç¨å表 |
| | | * |
| | | * @return æµç¨å®ä¹å表 |
| | | */ |
| | | List<Map<String, Object>> getSaleQuotationApproveProcessDefinitionList(); |
| | | |
| | | /** |
| | | * 转为åå |
| | |
| | | package cn.iocoder.yudao.module.crm.service.quotation; |
| | | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.lang.Assert; |
| | | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| | | import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi; |
| | | import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| | | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| | | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmCategoryService; |
| | | import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.contract.vo.contract.CrmContractSaveReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.quotation.vo.CrmSaleQuotationPageReqVO; |
| | | import cn.iocoder.yudao.module.crm.controller.admin.quotation.vo.CrmSaleQuotationSaveReqVO; |
| | |
| | | import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO; |
| | | import jakarta.annotation.Resource; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.flowable.engine.repository.ProcessDefinition; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.validation.annotation.Validated; |
| | |
| | | @Validated |
| | | @Slf4j |
| | | public class CrmSaleQuotationServiceImpl implements CrmSaleQuotationService { |
| | | |
| | | /** |
| | | * é宿¥ä»· BPM åç±»ç¼ç |
| | | */ |
| | | private static final String SALE_QUOTATION_APPROVE_CATEGORY_CODE = "sale_quotation_approve"; |
| | | |
| | | @Resource |
| | | private CrmSaleQuotationMapper saleQuotationMapper; |
| | |
| | | private CrmPermissionService permissionService; |
| | | @Resource |
| | | private CrmContractService contractService; |
| | | |
| | | @Resource |
| | | private BpmCategoryService bpmCategoryService; |
| | | @Resource |
| | | private BpmProcessDefinitionService bpmProcessDefinitionService; |
| | | @Resource |
| | | private BpmProcessInstanceApi bpmProcessInstanceApi; |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | |
| | | throw exception(SALE_QUOTATION_ITEM_NOT_EXISTS); |
| | | } |
| | | item.setItemUnitId(mdmItem.getUnitMeasureId()); |
| | | item.setItemPrice(mdmItem.getSalesPrice()); |
| | | // ç©æåä»·ï¼å¦æ MDM 䏿²¡æåé»è®¤ä¸º 0 |
| | | item.setItemPrice(mdmItem.getSalesPrice() != null ? mdmItem.getSalesPrice() : BigDecimal.ZERO); |
| | | if (item.getQuotationPrice() != null && item.getCount() != null) { |
| | | item.setTotalPrice(MoneyUtils.priceMultiply(item.getQuotationPrice(), item.getCount())); |
| | | if (item.getTaxPercent() != null) { |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void submitSaleQuotation(Long id, String processDefinitionKey, Long userId) { |
| | | public Long convertToContract(Long id, Long userId) { |
| | | // 1. æ ¡éªæ¥ä»·ååå¨ä¸ä¸ºèç¨¿ç¶æ |
| | | CrmSaleQuotationDO saleQuotation = validateSaleQuotationExists(id); |
| | | if (!CrmSaleQuotationStatusEnum.DRAFT.getStatus().equals(saleQuotation.getStatus())) { |
| | | throw exception(SALE_QUOTATION_SUBMIT_FAIL_NOT_DRAFT); |
| | | } |
| | | |
| | | // 2. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateSaleQuotationApproveCategoryAndProcessDefinition(); |
| | | |
| | | // 3. æ ¡éªä¼ å
¥çæµç¨å®ä¹ Key æ¯å¦å±äºè¯¥åç±»ä¸å¤äºæ¿æ´»ç¶æ |
| | | ProcessDefinition processDefinition = bpmProcessDefinitionService.getActiveProcessDefinition(processDefinitionKey); |
| | | if (processDefinition == null) { |
| | | throw exception(SALE_QUOTATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 4. å建æµç¨å®ä¾ |
| | | String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, |
| | | new BpmProcessInstanceCreateReqDTO() |
| | | .setProcessDefinitionKey(processDefinitionKey) |
| | | .setBusinessKey(String.valueOf(id))); |
| | | |
| | | // 5. æ´æ°æ¥ä»·åç¶æ |
| | | saleQuotationMapper.updateById(new CrmSaleQuotationDO() |
| | | .setId(id) |
| | | .setProcessInstanceId(processInstanceId) |
| | | .setStatus(CrmSaleQuotationStatusEnum.PROCESS.getStatus())); |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éª BPM é宿¥ä»·å®¡æ¹åç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | */ |
| | | private void validateSaleQuotationApproveCategoryAndProcessDefinition() { |
| | | // 1. æ ¡éªåç±»æ¯å¦åå¨ |
| | | List<String> codes = Collections.singletonList(SALE_QUOTATION_APPROVE_CATEGORY_CODE); |
| | | Map<String, ?> categoryMap = bpmCategoryService.getCategoryMap(codes); |
| | | if (!categoryMap.containsKey(SALE_QUOTATION_APPROVE_CATEGORY_CODE)) { |
| | | throw exception(SALE_QUOTATION_BPM_CATEGORY_NOT_EXISTS); |
| | | } |
| | | |
| | | // 2. æ ¡éªåç±»ä¸æ¯å¦æå¯ç¨çæµç¨å®ä¹ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(SALE_QUOTATION_APPROVE_CATEGORY_CODE); |
| | | if (CollUtil.isEmpty(definitionInfoList)) { |
| | | throw exception(SALE_QUOTATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | |
| | | // 3. æ ¡éªæ¯å¦ææ¿æ´»ç¶æçæµç¨å®ä¹ |
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | boolean hasActiveDefinition = processDefinitions.stream() |
| | | .anyMatch(pd -> !pd.isSuspended()); |
| | | if (!hasActiveDefinition) { |
| | | throw exception(SALE_QUOTATION_BPM_PROCESS_DEFINITION_NOT_EXISTS); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void updateSaleQuotationAuditStatus(Long id, Integer bpmResult) { |
| | | // 1. æ ¡éªæ¥ä»·ååå¨ä¸ä¸ºå®¡æ¹ä¸ç¶æ |
| | | CrmSaleQuotationDO saleQuotation = validateSaleQuotationExists(id); |
| | | if (!CrmSaleQuotationStatusEnum.PROCESS.getStatus().equals(saleQuotation.getStatus())) { |
| | | log.error("[updateSaleQuotationAuditStatus] æ¥ä»·å({}) ä¸å¤äºå®¡æ¹ä¸", id); |
| | | throw exception(SALE_QUOTATION_UPDATE_AUDIT_STATUS_FAIL_NOT_PROCESS); |
| | | } |
| | | |
| | | // 2. 转æ¢å®¡æ¹ç»æ |
| | | Integer auditStatus = convertBpmResultToAuditStatus(bpmResult); |
| | | saleQuotationMapper.updateById(new CrmSaleQuotationDO() |
| | | .setId(id) |
| | | .setStatus(auditStatus)); |
| | | } |
| | | |
| | | /** |
| | | * BPM 审æ¹ç»æè½¬æ¢ |
| | | */ |
| | | private Integer convertBpmResultToAuditStatus(Integer bpmResult) { |
| | | Integer auditStatus = BpmTaskStatusEnum.APPROVE.getStatus().equals(bpmResult) |
| | | ? CrmSaleQuotationStatusEnum.APPROVE.getStatus() |
| | | : BpmTaskStatusEnum.REJECT.getStatus().equals(bpmResult) |
| | | ? CrmSaleQuotationStatusEnum.REJECT.getStatus() |
| | | : BpmTaskStatusEnum.CANCEL.getStatus().equals(bpmResult) |
| | | ? CrmSaleQuotationStatusEnum.CANCEL.getStatus() : null; |
| | | Assert.notNull(auditStatus, "BPM 审æ¹ç»æ({}) 转æ¢å¤±è´¥", bpmResult); |
| | | return auditStatus; |
| | | } |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getSaleQuotationApproveProcessDefinitionList() { |
| | | // 1. æ ¡éªåç±»åæµç¨å®ä¹æ¯å¦åå¨ |
| | | validateSaleQuotationApproveCategoryAndProcessDefinition(); |
| | | |
| | | // 2. è·ååç±»ä¸çæµç¨å®ä¹ä¿¡æ¯ |
| | | List<BpmProcessDefinitionInfoDO> definitionInfoList = bpmProcessDefinitionService |
| | | .getProcessDefinitionInfoListByCategory(SALE_QUOTATION_APPROVE_CATEGORY_CODE); |
| | | |
| | | // 3. è·åæµç¨å®ä¹è¯¦æ
|
| | | Set<String> processDefinitionIds = convertSet(definitionInfoList, BpmProcessDefinitionInfoDO::getProcessDefinitionId); |
| | | List<ProcessDefinition> processDefinitions = bpmProcessDefinitionService.getProcessDefinitionList(processDefinitionIds); |
| | | |
| | | // 4. è¿æ»¤ï¼åªä¿çæ¿æ´»ç¶æï¼ä¸ç¸å key åªä¿çææ°çæ¬ |
| | | Map<String, ProcessDefinition> latestVersionMap = new HashMap<>(); |
| | | for (ProcessDefinition pd : processDefinitions) { |
| | | if (pd.isSuspended()) { |
| | | continue; |
| | | } |
| | | ProcessDefinition existing = latestVersionMap.get(pd.getKey()); |
| | | if (existing == null || pd.getVersion() > existing.getVersion()) { |
| | | latestVersionMap.put(pd.getKey(), pd); |
| | | } |
| | | } |
| | | |
| | | // 5. è¿åæµç¨å®ä¹å表 |
| | | List<Map<String, Object>> result = new ArrayList<>(); |
| | | for (ProcessDefinition pd : latestVersionMap.values()) { |
| | | Map<String, Object> item = new HashMap<>(); |
| | | item.put("id", pd.getId()); |
| | | item.put("key", pd.getKey()); |
| | | item.put("name", pd.getName()); |
| | | item.put("version", pd.getVersion()); |
| | | result.add(item); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public Long convertToContract(Long id, Long userId) { |
| | | // 1. æ ¡éªæ¥ä»·ååå¨ä¸å·²å®¡æ¹éè¿ |
| | | CrmSaleQuotationDO saleQuotation = validateSaleQuotationExists(id); |
| | | if (!CrmSaleQuotationStatusEnum.APPROVE.getStatus().equals(saleQuotation.getStatus())) { |
| | | throw exception(SALE_QUOTATION_NOT_APPROVE); |
| | | throw exception(SALE_QUOTATION_CONVERT_FAIL_NOT_DRAFT, saleQuotation.getNo()); |
| | | } |
| | | // æ ¡éªæ¯å¦å·²è½¬åå |
| | | if (saleQuotation.getContractId() != null) { |
| | |
| | | }); |
| | | contractVO.setProducts(contractProducts); |
| | | |
| | | // 4. å建åå |
| | | // 4. å建ååï¼ä¼èªå¨æ£æµååå®¡æ¹æµç¨å¹¶æäº¤å®¡æ¹ï¼ |
| | | Long contractId = contractService.createContract(contractVO, userId); |
| | | |
| | | // 5. æ´æ°æ¥ä»·åå
³èä¿¡æ¯ |
| | |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/cancel") |
| | | @Operation(summary = "ä½åºéå®è®¢å") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:cancel')") |
| | | public CommonResult<Boolean> cancelSaleOrder(@RequestParam("id") Long id) { |
| | | saleOrderService.cancelSaleOrder(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @PutMapping("/enable") |
| | | @Operation(summary = "éæ°å¯ç¨éå®è®¢å") |
| | | @Parameter(name = "id", description = "ç¼å·", required = true) |
| | | @PreAuthorize("@ss.hasPermission('erp:sale-order:enable')") |
| | | public CommonResult<Boolean> enableSaleOrder(@RequestParam("id") Long id) { |
| | | saleOrderService.enableSaleOrder(id); |
| | | return success(true); |
| | | } |
| | | |
| | | @DeleteMapping("/delete") |
| | | @Operation(summary = "å é¤éå®è®¢å") |
| | | @Parameter(name = "ids", description = "ç¼å·æ°ç»", required = true) |
| | |
| | | @ExcelProperty("客æ·åç§°") |
| | | private String customerName; |
| | | |
| | | @Schema(description = "å
³èååç¼å·", example = "1") |
| | | private Long contractId; |
| | | @Schema(description = "åååå·", example = "HT001") |
| | | @ExcelProperty("åååå·") |
| | | private String contractNo; |
| | | |
| | | @Schema(description = "ç»ç®è´¦æ·ç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "311.89") |
| | | @ExcelProperty("ç»ç®è´¦æ·ç¼å·") |
| | | private Long accountId; |
| | |
| | | public enum ErpAuditStatus implements ArrayValuable<Integer> { |
| | | |
| | | PROCESS(10, "æªå®¡æ ¸"), // å®¡æ ¸ä¸ |
| | | APPROVE(20, "å·²å®¡æ ¸"); // å®¡æ ¸éè¿ |
| | | APPROVE(20, "å·²å®¡æ ¸"), // å®¡æ ¸éè¿ |
| | | CANCEL(30, "å·²ä½åº"); // å·²ä½åº/å·²æ¤é |
| | | |
| | | public static final Integer[] ARRAYS = Arrays.stream(values()).map(ErpAuditStatus::getStatus).toArray(Integer[]::new); |
| | | |
| | |
| | | ErrorCode SALE_ORDER_PROCESS_FAIL_EXISTS_OUT = new ErrorCode(1_020_201_008, "åå®¡æ ¸å¤±è´¥ï¼å·²åå¨å¯¹åºçéå®åºåºå"); |
| | | ErrorCode SALE_ORDER_ITEM_RETURN_FAIL_OUT_EXCEED = new ErrorCode(1_020_201_009, "éå®è®¢å项({})è¶
è¿æå¤§å
许éè´§æ°é({})"); |
| | | ErrorCode SALE_ORDER_PROCESS_FAIL_EXISTS_RETURN = new ErrorCode(1_020_201_010, "åå®¡æ ¸å¤±è´¥ï¼å·²åå¨å¯¹åºçéå®éè´§å"); |
| | | ErrorCode SALE_ORDER_CANCEL_FAIL_NOT_APPROVE = new ErrorCode(1_020_201_011, "ä½åºå¤±è´¥ï¼éå®è®¢å({})æªå®¡æ ¸ï¼åªæå·²å®¡æ ¸ç订åæè½ä½åº"); |
| | | ErrorCode SALE_ORDER_CANCEL_FAIL_EXISTS_OUT = new ErrorCode(1_020_201_012, "ä½åºå¤±è´¥ï¼å·²åå¨å¯¹åºçéå®åºåºå"); |
| | | ErrorCode SALE_ORDER_CANCEL_FAIL_EXISTS_RETURN = new ErrorCode(1_020_201_013, "ä½åºå¤±è´¥ï¼å·²åå¨å¯¹åºçéå®éè´§å"); |
| | | ErrorCode SALE_ORDER_CANCEL_FAIL = new ErrorCode(1_020_201_014, "ä½åºå¤±è´¥ï¼è¯·å·æ°é¡µé¢åéè¯"); |
| | | ErrorCode SALE_ORDER_ENABLE_FAIL_NOT_CANCEL = new ErrorCode(1_020_201_015, "å¯ç¨å¤±è´¥ï¼éå®è®¢å({})æªä½åºï¼åªæå·²ä½åºç订åæè½éæ°å¯ç¨"); |
| | | ErrorCode SALE_ORDER_ENABLE_FAIL = new ErrorCode(1_020_201_016, "å¯ç¨å¤±è´¥ï¼è¯·å·æ°é¡µé¢åéè¯"); |
| | | |
| | | // ========== ERP éå®åºåºï¼1-030-202-000ï¼ ========== |
| | | ErrorCode SALE_OUT_NOT_EXISTS = new ErrorCode(1_020_202_000, "éå®åºåºåä¸åå¨"); |
| | |
| | | void updateSaleOrderStatus(Long id, Integer status); |
| | | |
| | | /** |
| | | * ä½åºéå®è®¢å |
| | | * |
| | | * @param id ç¼å· |
| | | */ |
| | | void cancelSaleOrder(Long id); |
| | | |
| | | /** |
| | | * éæ°å¯ç¨éå®è®¢å |
| | | * |
| | | * @param id ç¼å· |
| | | */ |
| | | void enableSaleOrder(Long id); |
| | | |
| | | /** |
| | | * æ´æ°éå®è®¢åçåºåºæ°é |
| | | * |
| | | * @param id ç¼å· |
| | |
| | | import cn.iocoder.yudao.framework.common.util.number.MoneyUtils; |
| | | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| | | import cn.iocoder.yudao.module.crm.api.customer.CrmCustomerApi; |
| | | import cn.iocoder.yudao.module.crm.api.contract.CrmContractApi; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO; |
| | | import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderSaveReqVO; |
| | | import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; |
| | |
| | | private ErpProductService productService; |
| | | @Resource |
| | | private CrmCustomerApi customerApi; |
| | | @Resource |
| | | private CrmContractApi contractApi; |
| | | @Resource |
| | | private ErpAccountService accountService; |
| | | |
| | |
| | | throw exception(approve ? SALE_ORDER_APPROVE_FAIL : SALE_ORDER_PROCESS_FAIL); |
| | | } |
| | | // 1.3 åå¨éå®åºåºåï¼æ æ³åå®¡æ ¸ |
| | | if (!approve && saleOrder.getOutCount().compareTo(BigDecimal.ZERO) > 0) { |
| | | BigDecimal outCount = saleOrder.getOutCount() != null ? saleOrder.getOutCount() : BigDecimal.ZERO; |
| | | if (!approve && outCount.compareTo(BigDecimal.ZERO) > 0) { |
| | | throw exception(SALE_ORDER_PROCESS_FAIL_EXISTS_OUT); |
| | | } |
| | | // 1.4 åå¨éå®éè´§åï¼æ æ³åå®¡æ ¸ |
| | | if (!approve && saleOrder.getReturnCount().compareTo(BigDecimal.ZERO) > 0) { |
| | | BigDecimal returnCount = saleOrder.getReturnCount() != null ? saleOrder.getReturnCount() : BigDecimal.ZERO; |
| | | if (!approve && returnCount.compareTo(BigDecimal.ZERO) > 0) { |
| | | throw exception(SALE_ORDER_PROCESS_FAIL_EXISTS_RETURN); |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void cancelSaleOrder(Long id) { |
| | | // 1.1 æ ¡éªåå¨ |
| | | ErpSaleOrderDO saleOrder = validateSaleOrderExists(id); |
| | | // 1.2 æ ¡éªç¶æï¼åªæå·²å®¡æ ¸ç订åæè½ä½åº |
| | | if (!ErpAuditStatus.APPROVE.getStatus().equals(saleOrder.getStatus())) { |
| | | throw exception(SALE_ORDER_CANCEL_FAIL_NOT_APPROVE, saleOrder.getNo()); |
| | | } |
| | | // 1.3 åå¨éå®åºåºåï¼æ æ³ä½åº |
| | | BigDecimal outCount = saleOrder.getOutCount() != null ? saleOrder.getOutCount() : BigDecimal.ZERO; |
| | | if (outCount.compareTo(BigDecimal.ZERO) > 0) { |
| | | throw exception(SALE_ORDER_CANCEL_FAIL_EXISTS_OUT); |
| | | } |
| | | // 1.4 åå¨éå®éè´§åï¼æ æ³ä½åº |
| | | BigDecimal returnCount = saleOrder.getReturnCount() != null ? saleOrder.getReturnCount() : BigDecimal.ZERO; |
| | | if (returnCount.compareTo(BigDecimal.ZERO) > 0) { |
| | | throw exception(SALE_ORDER_CANCEL_FAIL_EXISTS_RETURN); |
| | | } |
| | | |
| | | // 2. æ´æ°ç¶æä¸ºå·²ä½åº |
| | | int updateCount = saleOrderMapper.updateByIdAndStatus(id, saleOrder.getStatus(), |
| | | new ErpSaleOrderDO().setStatus(ErpAuditStatus.CANCEL.getStatus())); |
| | | if (updateCount == 0) { |
| | | throw exception(SALE_ORDER_CANCEL_FAIL); |
| | | } |
| | | |
| | | // 3. åæ¥æ´æ°å
³èååç¶æä¸ºå·²ä½åº |
| | | if (saleOrder.getContractId() != null) { |
| | | contractApi.updateContractStatus(saleOrder.getContractId(), 50).getCheckedData(); // 50 = å·²ä½åº |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void enableSaleOrder(Long id) { |
| | | // 1.1 æ ¡éªåå¨ |
| | | ErpSaleOrderDO saleOrder = validateSaleOrderExists(id); |
| | | // 1.2 æ ¡éªç¶æï¼åªæå·²ä½åºç订åæè½éæ°å¯ç¨ |
| | | if (!ErpAuditStatus.CANCEL.getStatus().equals(saleOrder.getStatus())) { |
| | | throw exception(SALE_ORDER_ENABLE_FAIL_NOT_CANCEL, saleOrder.getNo()); |
| | | } |
| | | |
| | | // 2. æ´æ°ç¶æä¸ºå·²å®¡æ ¸ |
| | | int updateCount = saleOrderMapper.updateByIdAndStatus(id, saleOrder.getStatus(), |
| | | new ErpSaleOrderDO().setStatus(ErpAuditStatus.APPROVE.getStatus())); |
| | | if (updateCount == 0) { |
| | | throw exception(SALE_ORDER_ENABLE_FAIL); |
| | | } |
| | | |
| | | // 3. åæ¥æ´æ°å
³èååç¶æä¸ºå®¡æ ¸éè¿ |
| | | if (saleOrder.getContractId() != null) { |
| | | contractApi.updateContractStatus(saleOrder.getContractId(), 20).getCheckedData(); // 20 = å®¡æ ¸éè¿ |
| | | } |
| | | } |
| | | |
| | | private List<ErpSaleOrderItemDO> validateSaleOrderItems(List<ErpSaleOrderSaveReqVO.Item> list) { |
| | | // 1. æ ¡éªäº§ååå¨ |
| | | List<ErpProductDO> productList = productService.validProductList( |