docs/clean_business_data.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,330 @@ -- ============================================= -- ä¸å¡æ°æ®æ¸ çåå¨è¿ç¨ -- 说æï¼ -- 1. ä» æ¸ çãä¸å¡åæ®/è¿è¡æ°æ®ãï¼ä¿çãåºç¡æ°æ®/é ç½®/ä¸»æ°æ®ã -- 2. ä¿çèå´ï¼BPM é ç½®ãBI 大å±ãGoView 大å±ãåå ¸/èå/è§è²/ç¨æ·ã -- ç©æ/åç±»/åä½/ä»åº/åºä½/车é´/å·¥ä½ç«/设å¤/å·¥å ·/å·¥åº/å·¥èº/è´¨æ£æ¹æ¡/缺é·/ææ ã -- ç¼ç è§åãæ¡ç é ç½®ãå®ç¯é ç½®ãçç»æçãBOM/SOP/SIPã -- CRM 客æ·/è系人/åæºç¶æ/ååé ç½®/客æ·éå¶/å ¬æµ·é ç½®ã -- ERP ä¾åºå/ç»ç®è´¦æ·ãSRM ä¾åºå主表/åç±»/æææ é ç½®ã -- HRM å工档æ¡åèå¤/èªèµ/社ä¿/ç¨çé ç½®ãAI 模å/å·¥å ·/è§è²/ç¥è¯åº/工使µã -- IM ææè¯/表æ å ãéç¥å ¬åå 容ãç³»ç»æéç¨æ·ä½ç³»ç -- 3. è¥åå¨è¿ç¨å·²åå¨ï¼è¯·å æ§è¡ DROP PROCEDURE sp_clean_business_data; åæ§è¡æ¬èæ¬ -- ============================================= CREATE DEFINER=`root`@`%` PROCEDURE `sp_clean_business_data`() BEGIN SET FOREIGN_KEY_CHECKS = 0; -- ============================================================ -- 1. ç³»ç»è¿è¡æ°æ®ï¼æ¥å¿ / Token / éªè¯ç / ç«å ä¿¡ / 社交ç»å®ï¼ -- ============================================================ TRUNCATE TABLE system_login_log; TRUNCATE TABLE system_operate_log; TRUNCATE TABLE system_notify_message; TRUNCATE TABLE system_oauth2_access_token; TRUNCATE TABLE system_oauth2_refresh_token; TRUNCATE TABLE system_oauth2_code; TRUNCATE TABLE system_oauth2_approve; TRUNCATE TABLE system_sms_code; TRUNCATE TABLE system_sms_log; TRUNCATE TABLE system_mail_log; TRUNCATE TABLE system_social_user; TRUNCATE TABLE system_social_user_bind; TRUNCATE TABLE infra_api_access_log; TRUNCATE TABLE infra_api_error_log; TRUNCATE TABLE infra_job_log; -- ============================================================ -- 2. æä»¶ä¸éä»¶ -- ============================================================ TRUNCATE TABLE system_storage_attachment; TRUNCATE TABLE system_storage_blob; TRUNCATE TABLE storage_attachment; TRUNCATE TABLE storage_blob; TRUNCATE TABLE infra_file; TRUNCATE TABLE infra_file_content; -- ============================================================ -- 3. BPM æµç¨å®ä¾ä¸å®¡æ¹åå² -- ä¿çï¼æµç¨å®ä¹/表å/åç±»/表达å¼/çå¬å¨/ç¨æ·ç»/ä¸å¡éä»¶é ç½® -- ============================================================ TRUNCATE TABLE bpm_oa_leave; TRUNCATE TABLE bpm_process_instance_copy; TRUNCATE TABLE act_hi_procinst; TRUNCATE TABLE act_hi_taskinst; TRUNCATE TABLE act_hi_actinst; TRUNCATE TABLE act_hi_varinst; TRUNCATE TABLE act_hi_identitylink; TRUNCATE TABLE act_hi_comment; TRUNCATE TABLE act_hi_detail; TRUNCATE TABLE act_hi_attachment; TRUNCATE TABLE act_hi_entitylink; TRUNCATE TABLE act_hi_tsk_log; TRUNCATE TABLE act_ru_task; TRUNCATE TABLE act_ru_execution; TRUNCATE TABLE act_ru_actinst; TRUNCATE TABLE act_ru_variable; TRUNCATE TABLE act_ru_identitylink; TRUNCATE TABLE act_ru_job; TRUNCATE TABLE act_ru_timer_job; TRUNCATE TABLE act_ru_deadletter_job; TRUNCATE TABLE act_ru_suspended_job; TRUNCATE TABLE act_ru_external_job; TRUNCATE TABLE act_ru_history_job; TRUNCATE TABLE act_ru_event_subscr; TRUNCATE TABLE act_ru_entitylink; TRUNCATE TABLE act_evt_log; -- ============================================================ -- 4. MES ç产模å â ä¸å¡åæ® -- ============================================================ TRUNCATE TABLE mes_pro_work_order_param_record_detail; TRUNCATE TABLE mes_pro_work_order_param_record; TRUNCATE TABLE mes_pro_work_order_process; TRUNCATE TABLE mes_pro_work_order_bom; TRUNCATE TABLE mes_pro_work_order; TRUNCATE TABLE mes_pro_task_issue; TRUNCATE TABLE mes_pro_task; TRUNCATE TABLE mes_pro_feedback; TRUNCATE TABLE mes_pro_mps_merge_item; TRUNCATE TABLE mes_pro_mps; TRUNCATE TABLE mes_pro_card_process; TRUNCATE TABLE mes_pro_card; TRUNCATE TABLE mes_pro_work_record_log; TRUNCATE TABLE mes_pro_work_record; TRUNCATE TABLE mes_pro_andon_record; -- ============================================================ -- 5. MES ä»åºæ¨¡å â ä¸å¡åæ® -- ============================================================ TRUNCATE TABLE mes_wm_transaction; TRUNCATE TABLE mes_wm_stock_reserve; TRUNCATE TABLE mes_wm_material_stock; TRUNCATE TABLE mes_wm_sn; TRUNCATE TABLE mes_wm_batch; TRUNCATE TABLE mes_wm_barcode; TRUNCATE TABLE mes_wm_stock_taking_task_result; TRUNCATE TABLE mes_wm_stock_taking_task_line; TRUNCATE TABLE mes_wm_stock_taking_task; TRUNCATE TABLE mes_wm_stock_taking_plan_param; TRUNCATE TABLE mes_wm_stock_taking_plan; TRUNCATE TABLE mes_wm_package_line; TRUNCATE TABLE mes_wm_package; TRUNCATE TABLE mes_wm_item_receipt_detail; TRUNCATE TABLE mes_wm_item_receipt_line; TRUNCATE TABLE mes_wm_item_receipt; TRUNCATE TABLE mes_wm_item_consume_detail; TRUNCATE TABLE mes_wm_item_consume_line; TRUNCATE TABLE mes_wm_item_consume; TRUNCATE TABLE mes_wm_product_produce_detail; TRUNCATE TABLE mes_wm_product_produce_line; TRUNCATE TABLE mes_wm_product_produce; TRUNCATE TABLE mes_wm_product_issue_detail; TRUNCATE TABLE mes_wm_product_issue_line; TRUNCATE TABLE mes_wm_product_issue; TRUNCATE TABLE mes_wm_product_receipt_detail; TRUNCATE TABLE mes_wm_product_receipt_line; TRUNCATE TABLE mes_wm_product_receipt; TRUNCATE TABLE mes_wm_product_sales_detail; TRUNCATE TABLE mes_wm_product_sales_line; TRUNCATE TABLE mes_wm_product_sales; TRUNCATE TABLE mes_wm_misc_receipt_detail; TRUNCATE TABLE mes_wm_misc_receipt_line; TRUNCATE TABLE mes_wm_misc_receipt; TRUNCATE TABLE mes_wm_misc_issue_detail; TRUNCATE TABLE mes_wm_misc_issue_line; TRUNCATE TABLE mes_wm_misc_issue; TRUNCATE TABLE mes_wm_outsource_receipt_detail; TRUNCATE TABLE mes_wm_outsource_receipt_line; TRUNCATE TABLE mes_wm_outsource_receipt; TRUNCATE TABLE mes_wm_outsource_issue_detail; TRUNCATE TABLE mes_wm_outsource_issue_line; TRUNCATE TABLE mes_wm_outsource_issue; TRUNCATE TABLE mes_wm_return_vendor_detail; TRUNCATE TABLE mes_wm_return_vendor_line; TRUNCATE TABLE mes_wm_return_vendor; TRUNCATE TABLE mes_wm_return_issue_detail; TRUNCATE TABLE mes_wm_return_issue_line; TRUNCATE TABLE mes_wm_return_issue; TRUNCATE TABLE mes_wm_return_sales_detail; TRUNCATE TABLE mes_wm_return_sales_line; TRUNCATE TABLE mes_wm_return_sales; TRUNCATE TABLE mes_wm_sales_notice_line; TRUNCATE TABLE mes_wm_sales_notice; TRUNCATE TABLE mes_wm_transfer_detail; TRUNCATE TABLE mes_wm_transfer_line; TRUNCATE TABLE mes_wm_transfer; TRUNCATE TABLE mes_wm_arrival_notice_line; TRUNCATE TABLE mes_wm_arrival_notice; -- ============================================================ -- 6. MES è´¨æ£æ¨¡å â ä¸å¡åæ® -- ============================================================ TRUNCATE TABLE mes_qc_indicator_result_detail; TRUNCATE TABLE mes_qc_indicator_result; TRUNCATE TABLE mes_qc_defect_record; TRUNCATE TABLE mes_qc_ncr; TRUNCATE TABLE mes_qc_iqc_line; TRUNCATE TABLE mes_qc_iqc; TRUNCATE TABLE mes_qc_ipqc_line; TRUNCATE TABLE mes_qc_ipqc; TRUNCATE TABLE mes_qc_oqc_line; TRUNCATE TABLE mes_qc_oqc; TRUNCATE TABLE mes_qc_rqc_line; TRUNCATE TABLE mes_qc_rqc; -- ============================================================ -- 7. MES è®¾å¤æ¨¡å â ç¹æ£/ä¿å »/ç»´ä¿®/è®¡éæ£æµè®°å½ -- ============================================================ TRUNCATE TABLE mes_dv_check_record_line; TRUNCATE TABLE mes_dv_check_record; TRUNCATE TABLE mes_dv_mainten_record_line; TRUNCATE TABLE mes_dv_mainten_record; TRUNCATE TABLE mes_dv_repair_line; TRUNCATE TABLE mes_dv_repair; TRUNCATE TABLE mes_dv_metering_check; -- ============================================================ -- 8. MES å·¥èº/设计模å â ä¸å¡åæ®ï¼ç¼ç çæè®°å½ä¸ºæµæ°´æ°æ®ï¼ -- ============================================================ TRUNCATE TABLE mes_pd_archive; TRUNCATE TABLE mes_pd_document_audit; TRUNCATE TABLE mes_pd_document; TRUNCATE TABLE mes_pd_project; TRUNCATE TABLE mes_md_auto_code_record; -- ============================================================ -- 9. CRM 模å â ä¸å¡åæ® -- ä¿çï¼crm_customer / crm_contact / crm_business_status(_type) -- / crm_contract_config / crm_customer_limit_config / crm_customer_pool_config -- ============================================================ TRUNCATE TABLE crm_receivable_plan; TRUNCATE TABLE crm_receivable; TRUNCATE TABLE crm_contract_product; TRUNCATE TABLE crm_contract; TRUNCATE TABLE crm_sale_quotation_product; TRUNCATE TABLE crm_sale_quotation; TRUNCATE TABLE crm_business_product; TRUNCATE TABLE crm_contact_business; TRUNCATE TABLE crm_business; TRUNCATE TABLE crm_clue; TRUNCATE TABLE crm_follow_up_record; TRUNCATE TABLE crm_invoice; TRUNCATE TABLE crm_sales_target; TRUNCATE TABLE crm_permission; -- ============================================================ -- 10. å®å模å â ä¸å¡åæ® -- ============================================================ TRUNCATE TABLE after_sale_return_item; TRUNCATE TABLE after_sale_return; TRUNCATE TABLE after_sale_ticket_item; TRUNCATE TABLE after_sale_ticket; TRUNCATE TABLE after_sale_repair; TRUNCATE TABLE after_sale_permission; -- ============================================================ -- 11. ERP 模å â ä¸å¡åæ® -- ä¿çï¼erp_supplier / erp_account -- ============================================================ TRUNCATE TABLE erp_finance_payment_item; TRUNCATE TABLE erp_finance_payment; TRUNCATE TABLE erp_finance_receipt_item; TRUNCATE TABLE erp_finance_receipt; TRUNCATE TABLE erp_purchase_order_items; TRUNCATE TABLE erp_purchase_order; TRUNCATE TABLE erp_purchase_request_items; TRUNCATE TABLE erp_purchase_request; TRUNCATE TABLE erp_sale_order_items; TRUNCATE TABLE erp_sale_order; TRUNCATE TABLE erp_purchase_invoice; -- ============================================================ -- 12. SRM 模å â ä¸å¡åæ® -- ä¿çï¼srm_supplier / srm_supplier_contact / srm_supplier_category -- / srm_tender_config -- ============================================================ TRUNCATE TABLE srm_bid_award; TRUNCATE TABLE srm_bid_evaluation; TRUNCATE TABLE srm_bid_open; TRUNCATE TABLE srm_tender_bid; TRUNCATE TABLE srm_tender_material; TRUNCATE TABLE srm_tender_project; TRUNCATE TABLE srm_delivery_plan; TRUNCATE TABLE srm_purchase_collaboration; TRUNCATE TABLE srm_supplier_quote; TRUNCATE TABLE srm_supplier_evaluation; TRUNCATE TABLE srm_supplier_certificate; TRUNCATE TABLE srm_supplier_apply; -- ============================================================ -- 13. HRM 模å â ä¸å¡åæ® -- ä¿çï¼hrm_employee åæ¡£æ¡åè¡¨ï¼æè²/å·¥ä½ç»å/ç´§æ¥è系人/ -- 社ä¿å ¬ç§¯é/èªé ¬æ¡£æ¡/ååï¼ãèå¤è忥/è§åã请åç±»åé ç½®ã -- èªé ¬ç»æã社ä¿å ¬ç§¯éæ¹æ¡ã个ç¨ç¨çé ç½® -- ============================================================ TRUNCATE TABLE hrm_salary_payment_detail; TRUNCATE TABLE hrm_salary_payment; TRUNCATE TABLE hrm_salary_calculation; TRUNCATE TABLE hrm_attendance_summary; TRUNCATE TABLE hrm_attendance_record; TRUNCATE TABLE hrm_attendance_exception; TRUNCATE TABLE hrm_leave_application; TRUNCATE TABLE hrm_resignation_application; TRUNCATE TABLE hrm_transfer_application; -- ============================================================ -- 14. AI 模å â 对è¯ä¸çæå 容 -- ä¿çï¼ai_api_key / ai_model / ai_tool / ai_chat_role -- / ai_knowledge(_document/_segment) / ai_workflow -- ============================================================ TRUNCATE TABLE ai_chat_message; TRUNCATE TABLE ai_chat_conversation; TRUNCATE TABLE ai_image; TRUNCATE TABLE ai_mind_map; TRUNCATE TABLE ai_music; TRUNCATE TABLE ai_write; -- ============================================================ -- 15. IM 模å â ä¼è¯ä¸æ¶æ¯ -- ä¿çï¼im_sensitive_word / im_face_pack / im_face_pack_item -- ============================================================ TRUNCATE TABLE im_group_message_receipt; TRUNCATE TABLE im_group_message; TRUNCATE TABLE im_private_message; TRUNCATE TABLE im_message_file; TRUNCATE TABLE im_group_request; TRUNCATE TABLE im_group_member; TRUNCATE TABLE im_group; TRUNCATE TABLE im_friend_request; TRUNCATE TABLE im_friend; TRUNCATE TABLE im_conversation_read; TRUNCATE TABLE im_conversation; TRUNCATE TABLE im_channel_message; TRUNCATE TABLE im_channel_material; TRUNCATE TABLE im_channel; TRUNCATE TABLE im_rtc_participant; TRUNCATE TABLE im_rtc_call; TRUNCATE TABLE im_user_online; TRUNCATE TABLE im_face_user_item; -- ============================================================ -- 16. OA 已读/æå®äººå ³èï¼ä¿çéç¥å ¬åå 容 oa_notice / system_noticeï¼ -- ============================================================ TRUNCATE TABLE oa_notice_read; TRUNCATE TABLE oa_notice_user; -- ============================================================ -- 17. ç¤ºä¾æ°æ® -- ============================================================ TRUNCATE TABLE yudao_demo01_contact; TRUNCATE TABLE yudao_demo02_category; TRUNCATE TABLE yudao_demo03_course; TRUNCATE TABLE yudao_demo03_grade; TRUNCATE TABLE yudao_demo03_student; SET FOREIGN_KEY_CHECKS = 1; SELECT 'ä¸å¡æ°æ®æ¸ ç宿' AS result; END docs/mdm_item_sync_switch.md
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,62 @@ # MDM ç©æåæ¥ç¶æå¼å ³ - å端èè°æ¹æ¡ ## æ¶åé¡µé¢ - åºç¡æ°æ® â ç©æç®¡çï¼`basicData/mdm`ï¼MDM ç©æä¸»æ°æ®åè¡¨é¡µï¼ - ç©ææ°å¢ / ç¼è¾å¼¹çªï¼`basicData/mdm/modules/form.vue`ï¼ ## èæ¯ ç©æç®¡çå表页åæç"åæ¥ç¶æ"å为åªè¯»æ ç¾ï¼å·²åæ¥/æªåæ¥ï¼ï¼æ¬æ¬¡æ¹ä¸º**坿ä½çå¼å ³ï¼Switchï¼**ï¼ç¨æ·å¯ç´æ¥å¨å表ä¸åæ¢ç©ææ¯å¦åæ¥å° MESãåæ¶**æ°å¢/ç¼è¾ç©æå¼¹çª**ä¸ä¹å¢å "忥å°MES"å¼å ³ï¼å建æä¿åç©ææ¶æå¼å ³å³å®æ¯å¦åæ¥å° MESã ## API | æ¹æ³ | è·¯å¾ | 说æ | |------|------|------| | POST | /mdm/item/create | åå»ºç©æï¼`syncMes` 为 true æ¶åæ¥å° MES | | PUT | /mdm/item/update | ç¼è¾ç©æï¼`syncMes` 为 true æ¶åæ¥å° MESï¼ä¸º false æ¶åæ¶åæ¥ï¼ä» MES å é¤ï¼ | | PUT | /mdm/item/update-sync | æ´æ°ç©æåæ¥ç¶æï¼å表页å¼å ³è°ç¨ï¼ | **update-sync 请æ±åæ°ï¼** | åæ° | ç±»å | å¿ å¡« | 说æ | |------|------|------|------| | id | Long | æ¯ | ç©æç¼å· | | sync | Boolean | æ¯ | true=åæ¥å° MESï¼false=忶忥ï¼ä» MES å é¤è¯¥ç©æï¼ | **create / update æ°å¢è¯·æ±åæ°ï¼** | åæ° | ç±»å | å¿ å¡« | 说æ | |------|------|------|------| | syncMes | Boolean | å¦ | æ¯å¦åæ¥å° MESï¼é»è®¤ trueï¼false=ä¸åæ¥ / 忶忥 | **ååºï¼** `{ "code": 0, "data": true, "msg": "" }` **ååºå段说æï¼** | åæ®µ | ç±»å | 说æ | |------|------|------| | syncedMes | Boolean | å页æ¥å£ `GET /mdm/item/page`ãè¯¦æ æ¥å£ `GET /mdm/item/get` å·²è¿åï¼è¡¨ç¤ºå½åæ¯å¦å·²åæ¥ï¼MES 表åå¨è¯¥ç©æè®°å½å³ trueï¼ | ## åæ®µå±ç¤ºè§å | åæ®µ | å±ç¤ºä½ç½® | 说æ | |------|----------|------| | åæ¥ç¶æ | å表页åºå®å³å | Switch å¼å ³ï¼æå¼=已忥ï¼å ³é=æªåæ¥ï¼åæ¢ä¸æ¾ç¤º loading | | 忥å°MES | æ°å¢ / ç¼è¾å¼¹çª | Switch å¼å ³ï¼æå¼åä¿åæ¶åæ¥å° MESï¼ç¼è¾æ¶é»è®¤åæ¾å½ååæ¥ç¶æ | ## ä¸å¡è§å说æ | åºæ¯ | è§å | |------|------| | æå¼å¼å ³ï¼åè¡¨ï¼ | å° MDM ç©ææ°æ®ï¼å«æ¹æ¬¡é ç½®ï¼éæ°åæ¥å° MESï¼`syncedMes` å为 true | | å ³éå¼å ³ï¼åè¡¨ï¼ | ä» MES å é¤è¯¥ç©æï¼çº§èå é¤å ¶ BOM / SOP / SIP / æ¹æ¬¡é ç½®ï¼`syncedMes` å为 false | | æ°å¢ç©æ | 表å"忥å°MES"å¼å ³é»è®¤æå¼ï¼å ³éååªå»º MDM ç©æï¼ä¸åæ¥å° MES | | ç¼è¾ç©æ | å¼å ³é»è®¤åæ¾å½ååæ¥ç¶æï¼æå¼ä¿å=åæ¥ï¼æ´æ° MESï¼ï¼å ³éä¿å=忶忥ï¼ä» MES å é¤ï¼ | | æä½æé | å表å¼å ³ä¾èµæéç¹ `mdm:item:update` | ## 注æäºé¡¹ - åè¡¨å ³éå¼å ³åé弹确认æç¤ºï¼æç¡®åç¥ä¼ä» MES å é¤ç©æåå ³èé ç½®ï¼BOM/SOP/SIP/æ¹æ¬¡é ç½®ï¼ï¼é¿å 误æä½ã - è¥ MES è¯¥ç©æå·²è¢«å·¥åãBOM çä¸å¡å¼ç¨ï¼å é¤åç¸å ³ä¸å¡æ°æ®å¯è½åå½±åï¼å±ä¸å¡ä¾§æ¢æè¡ä¸ºã - ç¼è¾ç©ææ¶å ³é"忥å°MES"å¼å ³å¹¶ä¿åï¼ä¼ä» MES å é¤è¯¥ç©æï¼åæ¶åæ¥ï¼ï¼å表å¼å ³å为"æªåæ¥"ã yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/quotation/CrmSaleQuotationController.java
@@ -90,10 +90,24 @@ @DeleteMapping("/delete") @Operation(summary = "å é¤é宿¥ä»·å") @Parameter(name = "ids", description = "ç¼å·æ°ç»", required = true) @Parameter(name = "id", description = "å个ç¼å·", required = false) @Parameter(name = "ids", description = "ç¼å·æ°ç»", required = false) @PreAuthorize("@ss.hasPermission('crm:sale-quotation:delete')") public CommonResult<Boolean> deleteSaleQuotation(@RequestParam("ids") List<Long> ids) { saleQuotationService.deleteSaleQuotation(ids); public CommonResult<Boolean> deleteSaleQuotation( @RequestParam(value = "id", required = false) Long id, @RequestParam(value = "ids", required = false) List<Long> ids) { // æ¯æå个idæå¤ä¸ªids List<Long> deleteIds = new java.util.ArrayList<>(); if (id != null) { deleteIds.add(id); } if (ids != null && !ids.isEmpty()) { deleteIds.addAll(ids); } if (deleteIds.isEmpty()) { throw new IllegalArgumentException("请æ±åæ°ç¼ºå¤±:id æ ids"); } saleQuotationService.deleteSaleQuotation(deleteIds); return success(true); } yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
@@ -272,16 +272,22 @@ if (CollUtil.isEmpty(permissions)) { throw exception(CRM_PERMISSION_NOT_EXISTS); } // æ ¡éªï¼æ°æ®æéçæ¨¡åæ°æ®ç¼å·æ¯ä¸è´çä¸å¯è½åå¨ä¸¤ä¸ª if (convertSet(permissions, CrmPermissionDO::getBizId).size() > 1) { // æ ¡éªï¼æ°æ®æéå¿ é¡»å±äºåä¸ä¸ªä¸å¡ç±»åãå䏿¡ä¸å¡æ°æ® if (convertSet(permissions, CrmPermissionDO::getBizType).size() > 1 || convertSet(permissions, CrmPermissionDO::getBizId).size() > 1) { throw exception(CRM_PERMISSION_DELETE_FAIL); } // æ ¡éªæä½äººæ¯å¦ä¸ºè´è´£äºº CrmPermissionDO permission = permissionMapper.selectByBizAndUserId(permissions.get(0).getBizType(), permissions.get(0).getBizId(), userId); if (permission == null) { throw exception(CRM_PERMISSION_DELETE_DENIED); // è´è´£äººåªè½éè¿è½¬ç§»æä½åæ´ï¼ä¸è½ç´æ¥ç§»åºå¢é if (anyMatch(permissions, permission -> CrmPermissionLevelEnum.isOwner(permission.getLevel()))) { throw exception(CRM_PERMISSION_DELETE_SELF_PERMISSION_FAIL_EXIST_OWNER); } if (!CrmPermissionLevelEnum.isOwner(permission.getLevel())) { Integer bizType = permissions.get(0).getBizType(); Long bizId = permissions.get(0).getBizId(); CrmPermissionDO operatorPermission = permissionMapper.selectByBizAndUserId(bizType, bizId, userId); boolean isOwner = operatorPermission != null && CrmPermissionLevelEnum.isOwner(operatorPermission.getLevel()); if (!isOwner && !isSubordinateOwner(bizType, bizId, userId)) { throw exception(CRM_PERMISSION_DELETE_DENIED); } @@ -289,6 +295,17 @@ permissionMapper.deleteByIds(ids); } /** å½åç¨æ·çä¸å±æ¯å¦ä¸ºè¯¥ä¸å¡æ°æ®çè´è´£äºº */ private boolean isSubordinateOwner(Integer bizType, Long bizId, Long userId) { Set<Long> subordinateUserIds = convertSet(adminUserApi.getUserListBySubordinate(userId), AdminUserRespDTO::getId); if (CollUtil.isEmpty(subordinateUserIds)) { return false; } return anyMatch(permissionMapper.selectByBizTypeAndBizId(bizType, bizId), permission -> subordinateUserIds.contains(permission.getUserId()) && CrmPermissionLevelEnum.isOwner(permission.getLevel())); } @Override public void deleteSelfPermission(Long id, Long userId) { // æ ¡éªæ°æ®åå¨ä¸æ¯èªå·± yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/MdmItemController.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemRespVO; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemSaveReqVO; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemStatusUpdateReqVO; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemSyncUpdateReqVO; import cn.iocoder.yudao.module.mdm.dal.dataobject.category.MdmItemCategoryDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemBatchConfigDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO; @@ -80,6 +81,14 @@ return success(true); } @PutMapping("/update-sync") @Operation(summary = "æ´æ°ç©æåæ¥ç¶æ") @PreAuthorize("@ss.hasPermission('mdm:item:update')") public CommonResult<Boolean> updateItemSync(@Valid @RequestBody MdmItemSyncUpdateReqVO reqVO) { itemService.updateItemSync(reqVO.getId(), reqVO.getSync()); return success(true); } @DeleteMapping("/delete") @Operation(summary = "å é¤ç©æ") @Parameter(name = "id", description = "ç¼å·", required = true, example = "1") yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/controller/admin/item/vo/MdmItemSyncUpdateReqVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package cn.iocoder.yudao.module.mdm.controller.admin.item.vo; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import lombok.Data; @Schema(description = "管çåå° - MDM ç©æåæ¥ç¶ææ´æ° Request VO") @Data public class MdmItemSyncUpdateReqVO { @Schema(description = "ç©æç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotNull(message = "ç©æç¼å·ä¸è½ä¸ºç©º") private Long id; @Schema(description = "æ¯å¦åæ¥å° MES", requiredMode = Schema.RequiredMode.REQUIRED, example = "true") @NotNull(message = "åæ¥ç¶æä¸è½ä¸ºç©º") private Boolean sync; } yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemService.java
@@ -50,6 +50,14 @@ void deleteItem(Long id); /** * æ´æ°ç©æåæ¥ç¶æï¼åæ¥/åæ¶åæ¥å° MESï¼ * * @param id ç©æç¼å· * @param sync true=åæ¥å° MESï¼false=忶忥ï¼ä» MES å é¤ï¼ */ void updateItemSync(Long id, Boolean sync); /** * æ¹éå é¤ç©æ * * @param ids ç¼å·å表 yudao-module-mdm/src/main/java/cn/iocoder/yudao/module/mdm/service/item/MdmItemServiceImpl.java
@@ -9,6 +9,7 @@ import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemPageReqVO; import cn.iocoder.yudao.module.mdm.controller.admin.item.vo.MdmItemSaveReqVO; import cn.iocoder.yudao.module.mdm.dal.dataobject.category.MdmItemCategoryDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemBatchConfigDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.item.MdmItemDO; import cn.iocoder.yudao.module.mdm.dal.dataobject.unit.MdmUnitMeasureDO; import cn.iocoder.yudao.module.mdm.dal.mysql.item.MdmItemBatchConfigMapper; @@ -77,9 +78,11 @@ // ä¿åæ¹æ¬¡é ç½®ï¼å¦ææï¼ saveBatchConfig(item.getId(), createReqVO); // å§ç»åæ¥å° MES createReqVO.setId(item.getId()); syncItemToMes(createReqVO); // å¾é忥æ¶ï¼åæ¥å° MES if (Boolean.TRUE.equals(createReqVO.getSyncMes())) { createReqVO.setId(item.getId()); syncItemToMes(createReqVO); } return item.getId(); } @@ -98,8 +101,12 @@ // ä¿åæ¹æ¬¡é ç½®ï¼å¦ææï¼ saveBatchConfig(updateReqVO.getId(), updateReqVO); // å§ç»åæ¥å° MES syncItemToMes(updateReqVO); // æ ¹æ®åæ¥å¼å ³å³å®ï¼æå¼ååæ¥å° MESï¼å ³éå忶忥ï¼ä» MES å é¤ï¼ if (Boolean.TRUE.equals(updateReqVO.getSyncMes())) { syncItemToMes(updateReqVO); } else { mesMdItemApi.deleteItem(updateReqVO.getId()); } } private void validateItemSaveData(MdmItemSaveReqVO reqVO) { @@ -185,6 +192,35 @@ mesMdItemApi.deleteItem(id); } @Override @Transactional(rollbackFor = Exception.class) public void updateItemSync(Long id, Boolean sync) { // æ ¡éªåå¨ MdmItemDO item = validateItemExists(id); if (Boolean.TRUE.equals(sync)) { // åæ¥å° MESï¼ä» DB 读å宿´ç©ææ°æ®ç»è£ åèµ° syncItemToMes MdmItemSaveReqVO reqVO = BeanUtils.toBean(item, MdmItemSaveReqVO.class); // DO åæ®µå为 highValueï¼ä¸ VO ç isHighValue ä¸èªå¨å¹é ï¼æå¨è¡¥é½ reqVO.setIsHighValue(item.getHighValue()); // è¡¥é½æ¹æ¬¡å±æ§é ç½® MdmItemBatchConfigDO config = itemBatchConfigMapper.selectOne( MdmItemBatchConfigDO::getItemId, id); if (config != null) { reqVO.setProduceDateFlag(config.getProduceDateFlag()); reqVO.setExpireDateFlag(config.getExpireDateFlag()); reqVO.setReceiptDateFlag(config.getReceiptDateFlag()); reqVO.setVendorFlag(config.getVendorFlag()); reqVO.setPurchaseOrderCodeFlag(config.getPurchaseOrderCodeFlag()); reqVO.setLotNumberFlag(config.getLotNumberFlag()); reqVO.setQualityStatusFlag(config.getQualityStatusFlag()); } syncItemToMes(reqVO); } else { // 忶忥ï¼ä» MES å é¤è¯¥ç©æï¼MES æ æ¤ç©ææ¶å é¨ä¸ºç©ºæä½ï¼ mesMdItemApi.deleteItem(id); } } /** * æ ¡éªç©ææªè¢«ä¸å¡å¼ç¨ï¼éå®ãéè´ãç产ãè´¨æ£ãåºåçï¼ * yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/vo/MesWmReturnVendorRespVO.java
@@ -3,7 +3,6 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDate; import java.time.LocalDateTime; @Schema(description = "管çåå° - MES ä¾åºåéè´§å Response VO") @@ -35,7 +34,7 @@ private String vendorNickname; @Schema(description = "éè´§æ¥æ") private LocalDate returnDate; private LocalDateTime returnDate; @Schema(description = "éè´§åå ", example = "è´¨éä¸åæ ¼") private String returnReason; yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/returnvendor/vo/MesWmReturnVendorSaveReqVO.java
@@ -5,7 +5,7 @@ import jakarta.validation.constraints.NotNull; import lombok.Data; import java.time.LocalDate; import java.time.LocalDateTime; @Schema(description = "管çåå° - MES ä¾åºåéè´§åæ°å¢/ä¿®æ¹ Request VO") @Data @@ -31,7 +31,7 @@ @Schema(description = "éè´§æ¥æ", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "éè´§æ¥æä¸è½ä¸ºç©º") private LocalDate returnDate; private LocalDateTime returnDate; @Schema(description = "éè´§åå ", example = "è´¨éä¸åæ ¼") private String returnReason; yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/returnvendor/MesWmReturnVendorDO.java
@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.*; import java.time.LocalDate; import java.time.LocalDateTime; import cn.iocoder.yudao.module.mes.enums.DictTypeConstants; /** @@ -49,7 +49,7 @@ /** * éè´§æ¥æ */ private LocalDate returnDate; private LocalDateTime returnDate; /** * éè´§åå */ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/item/MesMdItemMapper.java
@@ -7,6 +7,8 @@ import cn.iocoder.yudao.module.mes.controller.admin.md.item.vo.MesMdItemPageReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.Collection; import java.util.Collections; @@ -55,6 +57,19 @@ } /** * æ ID æ¥è¯¢è®°å½ï¼ä¸è¿æ»¤é»è¾å é¤ï¼å«å·²å é¤è¡ï¼ * ç¨äº"忶忥ï¼é»è¾å é¤ï¼å鿰忥"æ¶å¤æä¸»é®æ¯å¦è¢«å ç¨ */ @Select("SELECT * FROM mes_md_item WHERE id = #{id} LIMIT 1") MesMdItemDO selectAnyById(Long id); /** * æ¢å¤é»è¾å é¤çè®°å½ï¼deleted ç½® 0ï¼ */ @Update("UPDATE mes_md_item SET deleted = 0, update_time = NOW() WHERE id = #{id}") int restoreById(Long id); /** * æ¹éæ¥è¯¢å·²åå¨ç MDM ç©æ ID éå * * @param mdmItemIds MDM ç©æ ID å表 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/item/MesMdItemServiceImpl.java
@@ -80,6 +80,12 @@ updateItem(createReqVO); return createReqVO.getId(); } // åå¨é»è¾å é¤è®°å½ï¼åæ¶åæ¥å鿰忥ï¼ï¼æ¢å¤è¯¥è®°å½åèµ°æ´æ°ï¼é¿å 主é®å²çª if (itemMapper.selectAnyById(createReqVO.getId()) != null) { itemMapper.restoreById(createReqVO.getId()); updateItem(createReqVO); return createReqVO.getId(); } } // æå ¥