Files
notes/work/移动杭研/开发记录/7.18.0/domain_request 分支梳理 2.md
T
2026-03-01 01:43:46 +08:00

5.4 KiB

sequenceDiagram
    autonumber

    participant U as User/前端
    participant C as NewWorkOrderController
    participant W as WorkOrderServiceImpl
    participant E as EnterpriseInfoDao
    participant BB as BBossInteractiveService
    participant DS as DomainOrderService
    participant CS as CustomService

    participant WOR as work_order(Repo)
    participant DOR as configure_list(DomainOrderRepository)
    participant SDR as speed_configure_domain(SpeedConfigureDomainDao)

    participant BSD as BatchSelfDomainService
    participant BSDao as batch_self_domain(BatchSelfDomainDao)

    participant LFS as LogOrderService
    participant LFR as log_file_resource(LogFileResourceRepository)
    participant FI as file_info(FileInfoDao)

    participant WOE as work_order_enterprise(WorkOrderEnterPriseDao)

    participant WM as WorkOrderManager
    participant DICP as DomainICPService
    participant PIS as portalInformationService

    participant BPM as BpmTaskDao
    participant ODao as OrderDao
    participant UR as UserRepository

    U->>C: POST /workorder/custom/save(workList)
    C->>C: checkParam(workList)
    C->>W: newOrderAllowed()
    C->>W: saveCustomWorkOrder(MutableHttpServletRequest, workList)

    W->>W: 校验当前用户 & 企业可操作性
    W->>E: findByEnterpriseId(workList.enterprise)
    E-->>W: Optional<EnterpriseInfo>

    alt workList.type == domain_request
        W->>W: recheckEnterprisePunishmentStatus(info)
        W->>BB: queryJointPunish(ecId)
        BB-->>W: JointPunishResponse

        W->>W: isModify = (workList.id != null)
        W->>DS: handleWithDomainOrder(workList, modelStr)

        alt isBatch == true
            DS->>W: getWorkOrderCode(domain_request)
            DS->>BSD: readBatchInformationFromExcel440(secInfoFile)
            BSD-->>DS: List<BatchSelfDomainVO>
            DS->>BSD: saveBatchDomains(batchVO, batchId=workOrder.code, provinceCodes, product, enterprise)
            BSD->>BSDao: saveAll(batch_self_domain)
            BSDao-->>BSD: saved
            DS->>DOR: save(configure_list with isBatch=true, batchId=code)
        else isBatch == false
            DS->>CS: getWorkOrder(domain_request, details, enterprise)
            CS-->>DS: WorkOrder(in memory)
            DS->>DOR: save(configure_list)
        end

        DS->>WOR: save(work_order)  %% (via cascade in configure_list.workOrder / or other path)
        DS->>DOR: save(domain_history create + (create且非海外时) icp check marker)

        alt isModify == true
            W->>W: deleteHistoryFileInfo(workList, domainOrderPO.id)
            W->>LFR: findByOrderId(configure_list.id)
            LFR-->>W: old LogFileResource list
            W->>FI: deleteAll(file_info by md5 diff)
            W->>LFR: deleteAllByOrderId(configure_list.id)
        end

        W->>LFS: saveFilesToTable(orderId=configure_list.id, md5List, type=configure)
        W->>LFR: saveAll(log_file_resource: normal attachments)
        opt fileId not empty
            W->>LFR: save(domain_config file link)
        end
        opt secInfoFileId not empty
            W->>LFR: saveAll(security_info file links)
        end

        W->>WOE: setNewWorkOrderEnterpriseForDR(workOrderId, enterpriseId, orgEnterId?)

        W->>WM: handleDomainConfigXinAnInfo(submitUserId, configure_list.id)
        WM->>DOR: findById(configure_list.id)
        WM->>UR: findById(submitUserId)

        alt operateType == CREATE
            alt overseas product
                WM->>DS: updateNextCheckUserInOrderSubmit(order, submit, CREATE)
            else non-overseas
                WM->>DS: updateCheckedIcpInfo(order)
                DS->>DICP: getDomainIcp(domains)
                DICP-->>DS: recordNumber map
                DS->>BSDao: saveAll(batch_self_domain recordNumber/icpEquals) %% batch
                DS->>DOR: save(configure_list recordNumber) %% non-batch
                DS->>DOR: save(domain_history isIcpCheckCompleted=true)

                alt checkDomainIcpEqual == true
                    WM->>DS: uploadInformation(order)
                    DS->>PIS: validateAndSyncInformation(vos, domains, enterpriseId, provinceCode?)
                    alt sync failed
                        DS->>DOR: update(domain_history.last.msg=error)
                        DS-->>WM: return (stop flow)
                    else sync ok
                        DS->>DOR: update(domain_history.last.msg=null)
                        WM->>DS: updateNextCheckUserInOrderSubmit(order, submit, CREATE)
                    end
                else icp incomplete
                    WM-->>W: (不进入信安同步与流转)
                end
            end
        else operateType != CREATE
            WM->>DS: updateNextCheckUserInOrderSubmit(order, submit, operateType)
        end

        W->>W: build domains from speedDomains + batch_self_domain
        W->>W: req.putHeader(domainInfo, enterpriseInfo)

        opt bpmTask exists && !isModify
            W->>BPM: findByCode(workOrder.code)
            BPM-->>W: BpmTaskPO
            W->>ODao: findByEcId(ecId)
            ODao-->>W: OrderInfo list
            W->>UR: findById(currentUserId)
            UR-->>W: nextApprover
            W->>WOR: save(work_order.approvingUser=nextApprover)
        end

        C-->>U: success
        Note over C,W: finally: logSubscribeService.updateSubscribeInfoForWorkOrder(domainInfo, enterpriseInfo, isSubscribe)
    else workList.type != domain_request
        W-->>C: (其它工单类型分支)
    end