sql/mysql/20261027_business_requirements.sql
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,93 @@ -- åéèç©çº¿ç¼ä¸å¡éæ±æ©å± -- æ§è¡å请å¤ä»½æµè¯åºãèæ¬ä½¿ç¨ä¿¡æ¯_schema夿忮µï¼æ¯æé夿§è¡ã SET @db_name = DATABASE(); -- è´¢å¡åæ®ä¸éè´ãéå®ãä»å¨åæ®å ³è SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE erp_purchase_invoice ADD COLUMN arrival_notice_id BIGINT NULL COMMENT ''å ³èå ¥åºå'' AFTER purchase_order_id', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'erp_purchase_invoice' AND column_name = 'arrival_notice_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE crm_invoice ADD COLUMN sale_order_id BIGINT NULL COMMENT ''å ³èéå®è®¢å'' AFTER contract_id', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'crm_invoice' AND column_name = 'sale_order_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE crm_invoice ADD COLUMN sale_out_id BIGINT NULL COMMENT ''å ³èåºåºå'' AFTER sale_order_id', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'crm_invoice' AND column_name = 'sale_out_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE crm_invoice ADD COLUMN contract_amount DECIMAL(18,2) NULL COMMENT ''ååéé¢'' AFTER price', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'crm_invoice' AND column_name = 'contract_amount'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE crm_invoice ADD COLUMN prepayment_amount DECIMAL(18,2) NULL COMMENT ''é¢ä»æ¬¾éé¢'' AFTER contract_amount', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'crm_invoice' AND column_name = 'prepayment_amount'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE crm_invoice ADD COLUMN delivery_amount DECIMAL(18,2) NULL COMMENT ''å°è´§æ¬¾éé¢'' AFTER prepayment_amount', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'crm_invoice' AND column_name = 'delivery_amount'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE crm_invoice ADD COLUMN acceptance_amount DECIMAL(18,2) NULL COMMENT ''éªæ¶æ¬¾éé¢'' AFTER delivery_amount', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'crm_invoice' AND column_name = 'acceptance_amount'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- æ¯ä¸ªä»æ¬¾èç¹çæ¶é´ CREATE TABLE IF NOT EXISTS crm_invoice_payment_node ( id BIGINT NOT NULL AUTO_INCREMENT, invoice_id BIGINT NOT NULL COMMENT 'å¼ç¥¨ç³è¯·/å票ç¼å·', node_type TINYINT NOT NULL COMMENT '1é¢ä»æ¬¾ 2å°è´§æ¬¾ 3éªæ¶æ¬¾', amount DECIMAL(18,2) NOT NULL DEFAULT 0, node_time DATETIME NULL, remark VARCHAR(500) DEFAULT '', creator VARCHAR(64) DEFAULT '', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updater VARCHAR(64) DEFAULT '', update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, deleted BIT(1) NOT NULL DEFAULT b'0', PRIMARY KEY (id), KEY idx_invoice_node (invoice_id, node_type, deleted) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='éå®åç¥¨ä»æ¬¾èç¹'; -- å®ååé¦ãå¤çç»æåæµç¨çç SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE after_sale_ticket ADD COLUMN feedback_description TEXT NULL COMMENT ''客æ·è¯æ±åé¦æè¿°'' AFTER issue_description', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'after_sale_ticket' AND column_name = 'feedback_description'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE after_sale_ticket ADD COLUMN result_description TEXT NULL COMMENT ''å¤çç»ææè¿°'' AFTER feedback_description', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'after_sale_ticket' AND column_name = 'result_description'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; CREATE TABLE IF NOT EXISTS after_sale_ticket_process ( id BIGINT NOT NULL AUTO_INCREMENT, ticket_id BIGINT NOT NULL, process_type VARCHAR(32) NOT NULL COMMENT 'åçãå¤çãå®¡æ ¸ãå ³éç', process_status TINYINT NULL, process_description TEXT, attachment_count INT NOT NULL DEFAULT 0, operator_user_id BIGINT NULL, process_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, creator VARCHAR(64) DEFAULT '', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updater VARCHAR(64) DEFAULT '', update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, deleted BIT(1) NOT NULL DEFAULT b'0', PRIMARY KEY (id), KEY idx_ticket_process (ticket_id, process_time, deleted) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='å®åå·¥åæµè½¬è®°å½'; -- 离è交æ¥ï¼åæ¶è®°å½åå·¥ãç¨æ·åæ°æ®äº¤æ¥ç¶æ SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE hrm_resignation_application ADD COLUMN handover_employee_id BIGINT NULL COMMENT ''交æ¥åå·¥ID'' AFTER handover_user_id', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'hrm_resignation_application' AND column_name = 'handover_employee_id'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET @sql = (SELECT IF(COUNT(*) = 0, 'ALTER TABLE hrm_resignation_application ADD COLUMN handover_data_status TINYINT NOT NULL DEFAULT 0 COMMENT ''ç¨æ·æ°æ®äº¤æ¥ç¶æï¼0æªå¼å§ 10è¿è¡ä¸ 20已宿'' AFTER handover_status', 'SELECT 1') FROM information_schema.columns WHERE table_schema = @db_name AND table_name = 'hrm_resignation_application' AND column_name = 'handover_data_status'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 设å¤å°è´¦å·²æ code åæ®µï¼è®¡éå¨å ·å·²æ Excel å¯¼å ¥è¡¨åï¼å ¬åé件使ç¨ç³»ç»åå¨é件表ç»å®ã yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/vo/ticket/AfterSaleTicketRespVO.java
@@ -54,6 +54,12 @@ @Schema(description = "é®é¢æè¿°", example = "æ¶å°è´§ååç°äº§åè¡¨é¢æåç") private String issueDescription; @Schema(description = "客æ·è¯æ±åé¦æè¿°") private String feedbackDescription; @Schema(description = "å¤çç»ææè¿°") private String resultDescription; @Schema(description = "严éç¨åº¦: 0-轻微 1-ä¸è¬ 2-严é 3-è´å½", example = "1") private Integer severityLevel; yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/controller/admin/ticket/vo/ticket/AfterSaleTicketSaveReqVO.java
@@ -50,6 +50,12 @@ @Schema(description = "é®é¢æè¿°", example = "æ¶å°è´§ååç°äº§åè¡¨é¢æåç") private String issueDescription; @Schema(description = "客æ·è¯æ±åé¦æè¿°") private String feedbackDescription; @Schema(description = "å¤çç»ææè¿°") private String resultDescription; @Schema(description = "严éç¨åº¦: 0-轻微 1-ä¸è¬ 2-严é 3-è´å½", example = "1") private Integer severityLevel; yudao-module-aftersales/src/main/java/cn/iocoder/yudao/module/aftersales/dal/dataobject/ticket/AfterSaleTicketDO.java
@@ -70,6 +70,12 @@ * é®é¢æè¿° */ private String issueDescription; /** 客æ·è¯æ±åé¦æè¿° */ private String feedbackDescription; /** å¤çç»ææè¿° */ private String resultDescription; /** * 严éç¨åº¦: 0-轻微 1-ä¸è¬ 2-严é 3-è´å½ */ yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOANoticeController.java
@@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.OaNoticeSaveReqVO; import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.OaNoticeDO; import cn.iocoder.yudao.module.bpm.service.oa.OaNoticeService; import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -28,6 +29,9 @@ @Resource private OaNoticeService oaNoticeService; @Resource private StorageAttachmentApi storageAttachmentApi; @PostMapping("/create") @Operation(summary = "å建éç¥å ¬å") @@ -65,7 +69,9 @@ @Parameter(name = "id", description = "ç¼å·", required = true, example = "1024") public CommonResult<OaNoticeRespVO> getNotice(@RequestParam("id") Long id) { OaNoticeDO notice = oaNoticeService.getNotice(id, getLoginUserId()); return success(BeanUtils.toBean(notice, OaNoticeRespVO.class)); OaNoticeRespVO respVO = BeanUtils.toBean(notice, OaNoticeRespVO.class); respVO.setAttachmentList(storageAttachmentApi.listAttachments("oa_notice", id)); return success(respVO); } @GetMapping("/my-unread-count") yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/OaNoticeRespVO.java
@@ -5,6 +5,7 @@ import java.time.LocalDateTime; import java.util.List; import cn.iocoder.yudao.module.system.api.storage.dto.StorageBlobRespDTO; @Schema(description = "管çåå° - éç¥å ¬å Response VO") @Data @@ -49,4 +50,7 @@ @Schema(description = "å½åç¨æ·æ¯å¦å·²è¯»", example = "true") private Boolean isRead; @Schema(description = "éä»¶å表") private List<StorageBlobRespDTO> attachmentList; } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/OaNoticeSaveReqVO.java
@@ -42,4 +42,7 @@ @Schema(description = "æå®ç¨æ·IDå表ï¼sendScope=2æ¶å¿ å¡«ï¼", example = "[1, 2, 3]") private List<Long> userIds; @Schema(description = "éä»¶ BlobId å表") private List<Long> blobIds; } yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/OaNoticeServiceImpl.java
@@ -17,6 +17,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.notify.NotifyMessageMapper; import cn.iocoder.yudao.module.system.service.notify.NotifySendService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -54,6 +55,9 @@ @Resource private NotifyMessageMapper notifyMessageMapper; @Resource private StorageAttachmentApi storageAttachmentApi; @Override @Transactional(rollbackFor = Exception.class) public Long createNotice(Long userId, OaNoticeSaveReqVO createReqVO) { @@ -64,6 +68,7 @@ notice.setPublishTime(LocalDateTime.now()); } oaNoticeMapper.insert(notice); storageAttachmentApi.bindAttachments("file", "oa_notice", notice.getId(), createReqVO.getBlobIds()); // æå®äººåå ¥å ³è表 if (OaNoticeSendScopeEnum.SPECIFIED.getScope().equals(createReqVO.getSendScope()) @@ -93,6 +98,7 @@ updateObj.setPublishTime(LocalDateTime.now()); } oaNoticeMapper.updateById(updateObj); storageAttachmentApi.updateAttachments("file", "oa_notice", updateReqVO.getId(), updateReqVO.getBlobIds()); // æ´æ°æå®äººå ³è oaNoticeUserMapper.deleteByNoticeId(updateReqVO.getId()); @@ -120,6 +126,7 @@ public void deleteNotice(Long id) { validateNoticeExists(id); oaNoticeMapper.deleteById(id); storageAttachmentApi.deleteAttachmentsByRecord("oa_notice", id); oaNoticeUserMapper.deleteByNoticeId(id); } yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/invoice/vo/invoice/CrmInvoiceRespVO.java
@@ -44,6 +44,15 @@ @ExcelProperty("å¼ç¥¨éé¢") private BigDecimal price; @Schema(description = "ååéé¢") private BigDecimal contractAmount; @Schema(description = "é¢ä»æ¬¾éé¢") private BigDecimal prepaymentAmount; @Schema(description = "å°è´§æ¬¾éé¢") private BigDecimal deliveryAmount; @Schema(description = "éªæ¶æ¬¾éé¢") private BigDecimal acceptanceAmount; @Schema(description = "å¼ç¥¨æ¥æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-02-02") @ExcelProperty("å¼ç¥¨æ¥æ") private LocalDateTime invoiceTime; @@ -57,6 +66,10 @@ @Schema(description = "ååç¼å·", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") @ExcelProperty("ååç¼å·") private Long contractId; @Schema(description = "å ³èéå®è®¢å") private Long saleOrderId; @Schema(description = "å ³èåºåºå") private Long saleOutId; @Schema(description = "ååä¿¡æ¯") private CrmContractRespVO contract; yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/invoice/vo/invoice/CrmInvoiceSaveReqVO.java
@@ -25,6 +25,12 @@ @NotNull(message = "ååç¼å·ä¸è½ä¸ºç©º") private Long contractId; @Schema(description = "å ³èéå®è®¢å") private Long saleOrderId; @Schema(description = "å ³èåºåºå") private Long saleOutId; @Schema(description = "è´è´£äººç¼å·", example = "25682") private Long ownerUserId; @@ -42,6 +48,18 @@ @NotNull(message = "å¼ç¥¨éé¢ä¸è½ä¸ºç©º") private BigDecimal price; @Schema(description = "ååéé¢") private BigDecimal contractAmount; @Schema(description = "é¢ä»æ¬¾éé¢") private BigDecimal prepaymentAmount; @Schema(description = "å°è´§æ¬¾éé¢") private BigDecimal deliveryAmount; @Schema(description = "éªæ¶æ¬¾éé¢") private BigDecimal acceptanceAmount; @Schema(description = "å¼ç¥¨æ¥æ", requiredMode = Schema.RequiredMode.REQUIRED, example = "2024-02-02") @NotNull(message = "å¼ç¥¨æ¥æä¸è½ä¸ºç©º") private LocalDateTime invoiceTime; yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/invoice/CrmInvoiceDO.java
@@ -49,6 +49,12 @@ * å ³è {@link CrmContractDO#getId()} */ private Long contractId; /** å ³èéå®è®¢å */ private Long saleOrderId; /** å ³èåºåºå */ private Long saleOutId; /** * è´è´£äººç¼å·ï¼å ³è {@link AdminUserRespDTO#getId()} */ @@ -72,6 +78,11 @@ * å¼ç¥¨éé¢ï¼åä½ï¼å */ private BigDecimal price; private BigDecimal contractAmount; private BigDecimal prepaymentAmount; private BigDecimal deliveryAmount; private BigDecimal acceptanceAmount; /** * å¼ç¥¨æ¥æ */ yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/vo/invoice/ErpPurchaseInvoiceSaveReqVO.java
@@ -22,6 +22,9 @@ @NotNull(message = "éè´è®¢åç¼å·ä¸è½ä¸ºç©º") private Long purchaseOrderId; @Schema(description = "å ³èå ¥åºå") private Long arrivalNoticeId; @Schema(description = "å票å·ç ", example = "02564178") private String invoiceNo; yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/purchase/ErpPurchaseInvoiceDO.java
@@ -45,6 +45,9 @@ * å ³è {@link ErpPurchaseOrderDO#getId()} */ private Long purchaseOrderId; /** å ³èå ¥åºå */ private Long arrivalNoticeId; /** * å票å·ç */ yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/approval/vo/HrmResignationApplicationRespVO.java
@@ -48,11 +48,17 @@ @Schema(description = "交æ¥äººID", example = "1") private Long handoverUserId; @Schema(description = "交æ¥åå·¥ID") private Long handoverEmployeeId; @Schema(description = "交æ¥äººå§å", example = "æå") private String handoverUserName; @Schema(description = "交æ¥ç¶æ", example = "0") private Integer handoverStatus; @Schema(description = "ç¨æ·æ°æ®äº¤æ¥ç¶æï¼0æªå¼å§ 10è¿è¡ä¸ 20已宿") private Integer handoverDataStatus; @Schema(description = "交æ¥ç¶æåç§°", example = "æªå¼å§") private String handoverStatusName; @@ -81,4 +87,4 @@ @Schema(description = "å建æ¶é´", example = "2024-01-01 09:00:00") private LocalDateTime createTime; } } yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/approval/vo/HrmResignationApplicationSaveReqVO.java
@@ -36,6 +36,9 @@ @Schema(description = "交æ¥äººID", example = "1") private Long handoverUserId; @Schema(description = "交æ¥åå·¥ID", example = "1") private Long handoverEmployeeId; @Schema(description = "交æ¥è¯´æ", example = "交æ¥è¯´æ") private String handoverRemark; @@ -45,4 +48,4 @@ @Schema(description = "夿³¨", example = "夿³¨ä¿¡æ¯") private String remark; } } yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/dataobject/approval/HrmResignationApplicationDO.java
@@ -78,6 +78,9 @@ */ private Long handoverUserId; /** 交æ¥åå·¥ID */ private Long handoverEmployeeId; /** * 交æ¥ç¶æ * @@ -85,6 +88,9 @@ */ private Integer handoverStatus; /** ç¨æ·æ°æ®äº¤æ¥ç¶æï¼0æªå¼å§ 10è¿è¡ä¸ 20已宿 */ private Integer handoverDataStatus; /** * 交æ¥è¯´æ */