首页 > 其他分享 >Look Up

Look Up

时间:2024-02-05 23:12:42浏览次数:25  
标签:stringify console log Up JSON let data Look

<template>
    <div>
        <div class="slds-form-element">
            <div class="slds-form-element__control">
                <div class="slds-combobox_container">
                    <div id="box" class={boxClass} aria-expanded="true" aria-haspopup="listbox" role="combobox">
                        {searchLabel}
                        <div class="slds-combobox__form-element slds-input-has-icon slds-input-has-icon_right" role="none">
                            <template if:true={isValue}>
                                <!-- height: 100%; -->
                                <div style="position: absolute;top: 0;left: 0;width: 100%;
                                background-color: rgb(201, 201, 201);pointer-events: none;">
                                    <div id="lookup-pill" class="slds-pill-container" style="position: relative;">
                                        <lightning-pill label={valueObj} name={valueObj} onremove={handleRemovePill} disabled={disabled}>
                                            <lightning-icon icon-name={iconName} alternative-text="acc"></lightning-icon>
                                        </lightning-pill>
                                    </div>
                                </div>
                            </template>
                            <template if:false={isValue}>
                                <div class="slds-p-top_none">
                                    <lightning-input class={inputClass} type="search" id="input" value={searchTerm}
                                        onclick={handleClick}  onchange={searchChange} onblur={onBlur} disabled={disabled}
                                        variant="label-hidden" autocomplete="off" placeholder="Search..." label='account search'>
                                    </lightning-input>
                                </div>
                            </template>
                        </div>
                        <div id="listbox-id-1" class="slds-dropdown slds-dropdown_length-with-icon-7 slds-dropdown_fluid" role="listbox" 
                        onm ouseleave={handleMouseleave} onm ouseenter={handleMouseenter}>
                            <ul class="slds-listbox slds-listbox_vertical" role="presentation">
                                <template for:each={options} for:item="item">
                                    <li key={item.Id} onclick={onSelect} data-id={item.Id} role="presentation">
                                        <span class="slds-lookup__item-action slds-lookup__item-action--label" role="option">
                                            <lightning-icon class="slds-icon slds-icon--small slds-icon-text-default" icon-name={iconName} alternative-text={objName} size="small"></lightning-icon>
                                            <span class="slds-truncate">{item.Name}</span>
                                        </span>
                                    </li>
                                </template>
                                <li class="sticky-li" onclick={newObject} data-id="NewRecord"  role="presentation">
                                    <span class="slds-lookup__item-action slds-lookup__item-action--label" role="option">
                                        <span class="slds-truncate">新建</span>
                                    </span>
                                </li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <template if:true={showModal}>
        <!-- Modal/Popup Box LWC starts here -->
        <section role="dialog" tabindex="-1" aria-labelledby="modal-heading-01" aria-modal="true" aria-describedby="modal-content-id-1" class="slds-modal slds-fade-in-open">
            <div class="slds-modal__container">
                <!-- Modal/Popup Box LWC header here -->
                <header class="slds-modal__header">
                    <button class="slds-button slds-button_icon slds-modal__close slds-button_icon-inverse" title="Close" onclick={closeModal}>
                        <lightning-icon icon-name="utility:close"
                            alternative-text="close"
                            variant="inverse"
                            size="small" ></lightning-icon>
                        <span class="slds-assistive-text">Close</span>
                    </button>
                    <h2 id="modal-heading-01" class="slds-text-heading_medium slds-hyphenate">新建客户人员</h2>
                </header>
                <!-- Modal/Popup Box LWC body starts here -->
                <div class="slds-modal__content slds-p-around_medium" id="modal-content-id-1">
                    <!-- <lightning-record-form  object-api-name="Agency_Contact__c" layout-type="Full" columns="2" mode="edit" no-save-button no-cancel-button>
                    </lightning-record-form> -->
                    <lightning-record-edit-form object-api-name="Contact">
                        <lightning-layout multiple-rows="true">
                            <lightning-layout-item size="6">
                                <lightning-input-field required="true" value={theContact.Name} onchange={fieldChange} field-name="LastName"></lightning-input-field>
                            </lightning-layout-item>
                            <!-- <lightning-layout-item size="6">
                                <lightning-input-field value={theContact.UnifiedI_Contact_ID__c} onchange={fieldChange} field-name="UnifiedI_Contact_ID__c"></lightning-input-field>
                            </lightning-layout-item> -->
                            <lightning-layout-item size="6">
                                <lightning-input-field required="true" value={theContact.AccountId} onchange={fieldChange} field-name="AccountId"></lightning-input-field>
                            </lightning-layout-item>
                            <!-- <lightning-layout-item size="6">
                                <lightning-input-field value={theContact.ServicePlatformCode__c} onchange={fieldChange} field-name="ServicePlatformCode__c"></lightning-input-field>
                            </lightning-layout-item> -->
                            <lightning-layout-item size="6">
                                <label for="custom-phone" class="slds-form-element__label slds-no-flex">手机号</label>
                                <lightning-input-field value={theContact.Phone} onchange={fieldChange} field-name="Phone" id="custom-phone" variant="label-hidden"></lightning-input-field>
                            </lightning-layout-item>
                            <!-- <lightning-layout-item size="6">
                                <lightning-input-field value={theContact.Strategic_dept_Class__c} onchange={fieldChange} field-name="Strategic_dept_Class__c"></lightning-input-field>
                            </lightning-layout-item> -->
                        </lightning-layout>
                    </lightning-record-edit-form>
                </div>
                <!-- Modal/Popup Box LWC footer starts here -->
                <footer class="slds-modal__footer">
                    <button class="slds-button slds-button_brand" onclick={sureSave}>保存</button>
                    <button class="slds-button slds-button_neutral" onclick={closeModal}>取消</button>
                </footer>
            </div>
        </section>
        <div class="slds-backdrop slds-backdrop_open"></div>
    </template>
</template>
/* eslint-disable no-console */
/* eslint-disable @lwc/lwc/no-async-operation */

import lookUp from '@salesforce/apex/LookUpUtilController.lookUp';
import getPIPLInfo from '@salesforce/apex/LookUpUtilController.getPIPLInfo';//deloitte-zhj 获取解密信息 2023/07/19 
import searchContactInit from '@salesforce/apex/LookUpUtilController.searchContactInit';//deloitte-zhj 搜索需要的PI数据 2023/07/19 
import searchContactByAccountId from '@salesforce/apex/LookUpUtilController.searchContactByAccountId';//deloitte-zhj 新建判断重复 2023/07/19 
import { AWSService } from 'c/piUtils';//deloitte-zhj 调用aws 2023/07/19 
import { getObjectInfo } from 'lightning/uiObjectInfoApi';
import { getRecord } from 'lightning/uiRecordApi';
import { NavigationMixin } from 'lightning/navigation';
import { api, LightningElement, track, wire } from 'lwc';
import saveContact from '@salesforce/apex/LwcDailyReportController.saveContact';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { refreshApex } from '@salesforce/apex';

export default class NewAccountButton extends NavigationMixin(LightningElement) {
    AWSService;
    @track theContact = {};
    @track showModal = false;
    //记录id
    @api valueId;
    @api objName;
    @api iconName;
    @api disabled;
    @api filter = '';
    //unique key used to mark the unique component. several component use this component need to mapping
    @api uniqueKey;
    //used to set the field to fetch.eg: ['Account.Name'] means we need to search account name field as filter
    @api fields;

    @api searchLabel;
    @track searchTerm;
    //record name value
    @track valueObj;
    //record href
    @track href;
    //fetch result
    @track options;
    //是否展示pill
    @track isValue = false;
    isCanCanle = true;
    @track blurTimeout;
    isOpen = false;
    get boxClass() {
        let classes = "slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click slds-has-focus";
        if (this.isOpen) {
            return classes + " slds-is-open";
        }
        return classes;
    }
    _passFilter;
    @api
    get passFilter() {
        return this._passFilter;
    }

    set passFilter(newValue) {
        this._passFilter = newValue;
        this.filter = newValue;
    }
    //css:
    // @track boxClass = 'slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click slds-has-focus';
    @track inputClass = '';

    //deloitte-zhj staticResourceContact 2023/07/19 
    @track staticResourceContact;
    @track txId;

    //deloitte-zhj 解密 2023/07/19 start
    @wire(lookUp, { searchTerm: '$searchTerm', objName: '$objName', filter: '$filter' })
    wiredRecords({ error, data }) {
        console.log('enter wiredRecords');
        if (data) {
            let that = this;
            console.log('data = ' + JSON.stringify(data))
            let dataClone = this.deepClone(data);
            //搜索,需要把对应account下面进行了PIPL的数据查出来,需要搜索值和accountid都存在才行
            console.log('this.filter = ' + this.filter)
            console.log('this.searchTerm = ' + this.searchTerm)
            if (this.filter) {
                searchContactInit({
                    accountId: this.filter
                }).then((r) => {
                    r = JSON.parse(JSON.stringify(r));
                    console.log('r = ' + JSON.stringify(r))
                    if (r.status == 'Success') {
                        let awsIdToContactMap = r.entity.awsIdToContactMap;
                        let conAWSIds = r.entity.conAWSIds;
                        console.log('awsIdToContactMap = ' + awsIdToContactMap);
                        console.log('conAWSIds = ' + conAWSIds);
                        that.AWSService.search(that.staticResourceContact.searchUrl, {
                            dataIds: conAWSIds,
                            contactName: that.searchTerm
                        }, function (data) {
                            console.log('data = ' + JSON.stringify(data));
                            if (data.object) {
                                let limit = data.object.length > 50 ? 50 : data.object.length;//最多找20条
                                for(let i=0; i < limit; i++){
                                    if(awsIdToContactMap.hasOwnProperty(data.object[i].dataId)){
                                        let PIData = {};
                                        PIData.Id = awsIdToContactMap[data.object[i].dataId].Id;
                                        PIData.Name = data.object[i].lastName;
                                        PIData.AWSDataId = data.object[i].dataId;
                                        dataClone.push(PIData)
                                    }
                                }
                                console.log('dataClone = ' + JSON.stringify(dataClone));
                            }
                            that.executeWiredRecords(dataClone);
                        }, that.staticResourceContact.token)
                    } else {
                        console.log('r.msg = ' + r.msg)
                    }
                })
            } else {
                this.executeWiredRecords(dataClone)
            }
        } else if (error) {
            this.error = error;
            this.record = undefined;
            console.log("wire.error", this.error);
        } else {
            console.log('啥都没有');
        }
    }
    deepClone(obj) {
        return JSON.parse(JSON.stringify(obj));
    }
    executeWiredRecords(dataClone) {
        let arr = [];
        for (var i in dataClone) {
            if (dataClone[i].AWSDataId)
                arr.push(dataClone[i].AWSDataId)
        }
        console.log('arr = ' + arr);
        let that = this;
        if (arr.length != 0) {
            this.AWSService.search(this.staticResourceContact.searchUrl, {
                dataIds: arr
            }, function (dataAWS) {
                console.log('dataAWS = ' + JSON.stringify(dataAWS));
                if (dataAWS && dataAWS.object && dataAWS.object.length > 0) {
                    let awsMap = {};
                    for (let di in dataAWS.object) {
                        awsMap[dataAWS.object[di].dataId] = dataAWS.object[di];
                    }
                    console.log('awsMap = ' + JSON.stringify(awsMap));
                    for (var i in dataClone) {
                        if (awsMap.hasOwnProperty(dataClone[i].AWSDataId)) {
                            dataClone[i].Name = awsMap[dataClone[i].AWSDataId].lastName
                        }
                    }
                    console.log('dataClone = ' + JSON.stringify(dataClone));
                    that.record = dataClone;
                    console.log('that.record = ' + JSON.stringify(that.record));
                    that.error = undefined;
                    that.options = that.record;
                    console.log("common this.options", JSON.stringify(that.options));
                } else {
                    that.record = dataClone;
                    that.error = undefined;
                    that.options = that.record;
                    console.log("common this.options", JSON.stringify(that.options));
                }
            }, this.staticResourceContact.token)
        } else {
            this.record = dataClone;
            this.error = undefined;
            this.options = this.record;
            console.log("common this.options", JSON.stringify(this.options));
        }
    }
    //deloitte-zhj 解密 2023/07/19 end

    //To get preselected or selected record
    @wire(getRecord, { recordId: '$valueId', fields: '$fields' })
    wiredOptions({ error, data }) {
        console.log('wiredOptions');
        if (data) {
            console.log('wiredOptions data = ' + JSON.stringify(data))
            //deloitte-zhj 解密 2023/07/19 start
            if (data.fields.AWS_Data_Id__c && data.fields.AWS_Data_Id__c.value && data.fields.Name.value.includes('***')) {
                console.log('data.fields.AWS_Data_Id__c.value = ' + data.fields.AWS_Data_Id__c.value)
                let that = this;
                this.AWSService.query(this.staticResourceContact.queryUrl, data.fields.AWS_Data_Id__c.value, function (dataAWS) {
                    console.log('queryLeadFromAWSIFS data = ' + JSON.stringify(dataAWS));
                    if (dataAWS.object) {
                        //data.fields.Name.value = dataAWS.object['lastName'];
                        that.record = data;
                        console.log('that.record =  ' + JSON.stringify(that.record));
                        that.error = undefined;
                        that.valueObj = dataAWS.object['lastName'];
                        that.href = '/' + that.record.id;
                        that.isValue = true;
                    } else {
                        that.record = data;
                        that.error = undefined;
                        that.valueObj = that.record.fields.Name.value;
                        that.href = '/' + that.record.id;
                        that.isValue = true;
                    }
                }, this.staticResourceContact.token)
            } else {
                this.record = data;
                this.error = undefined;
                this.valueObj = this.record.fields.Name.value;
                this.href = '/' + this.record.id;
                this.isValue = true;
            }
            //deloitte-zhj 解密 2023/07/19 end
        } else if (error) {
            this.error = error;
            this.record = undefined;
        }
    }


    //deloitte-zhj 获取PIPL需要的数据 2023/07/19 start
    connectedCallback() {
        console.log('enter connectedCallback')
        this.AWSService = new AWSService();
        getPIPLInfo().then((r) => {
            r = JSON.parse(JSON.stringify(r));
            console.log('r = ' + JSON.stringify(r))
            if (r.status == 'Success') {
                this.staticResourceContact = JSON.parse(r.entity.staticResourceContact);
                console.log('this.staticResourceContact.searchUrl = ' + this.staticResourceContact.searchUrl)
            } else {
                console.log('error msg = ' + r.msg)
            }
        })
    }
    //deloitte-zhj 获取PIPL需要的数据 2023/07/19 end

    handleClick() {
        console.log("In handleClick");
        if(this.disabled){
            return;
        }
        this.searchTerm = '';
        this.inputClass = 'slds-has-focus';
        this.isOpen = true;
        //deloitte-zhj refresh wiredRecords start 
        this.searchTerm = 'refresh';
        this.searchTerm = '';
        refreshApex(this.wiredRecords);
        //deloitte-zhj refresh wiredRecords end
        // this.boxClass = 'slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click slds-has-focus slds-is-open';
    }

    onSelect(event) {
        console.log("In onSelect");
        let ele = event.currentTarget;
        let selectedId = ele.dataset.id;
        let key = this.uniqueKey;
        console.log("key = " + key);
        console.log("selectedId = " + selectedId);
        const valueSelectedEvent = new CustomEvent('valueselect', {
            detail: { selectedId, key },
        });
        this.dispatchEvent(valueSelectedEvent);
        this.isOpen = false;
        // this.boxClass = 'slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click slds-has-focus';
    }

    searchChange(event) {
        this.searchTerm = event.target.value;
    }

    onBlur() {
        if (!this.isCanCanle) {
            return;
        }
        this.isOpen = false;
        // this.boxClass = 'slds-combobox slds-dropdown-trigger slds-dropdown-trigger_click slds-has-focus';
    }
    @api
    handleRemovePill() {
        console.log("In handleRemovePill");
        this.isValue = false;
        let selectedId = '';
        let key = this.uniqueKey;
        const valueSelectedEvent = new CustomEvent('valueselect', {
            detail: { selectedId, key },
        });
        this.dispatchEvent(valueSelectedEvent);
    }

    newObject() {
        this.isOpen = false;
        this.showModal = true;
        // const newEvent = new CustomEvent('newrecord', {
        //     detail: { key :this.uniqueKey},
        // });
        // this.dispatchEvent(newEvent);
    }
    closeModal() {
        console.log('closeModal');
        this.showModal = false;
    }
    handleMouseleave() {
        this.isCanCanle = true;
    }
    handleMouseenter(event) {
        this.isCanCanle = false;
    }
    sureSave(event) {
        event.preventDefault();//很重要 如果没得这个会导致页面刷新!
        console.log('submitDetails');
        let flag = true;
        let requiredFieldList = this.template.querySelectorAll('lightning-input-field');
        requiredFieldList.forEach(ele => {
            if (ele.required == true && this.stringIsEmpty(ele.value)) {
                ele.reportValidity();
                flag = false;
            }
        });
        console.log(flag);
        if (flag) {
            let payloadForNewPI = [];
            let PIData = {};
            PIData['lastName'] = this.theContact['LastName']
            PIData['phone'] = this.theContact['Phone']
            payloadForNewPI.push(PIData);
            payloadForNewPI = JSON.stringify(payloadForNewPI);
            console.log('payloadForNewPI = ' + payloadForNewPI)
            console.log('this.theContact[AccountId] = ' + this.theContact['AccountId'])
            let that = this;
            //deloitte-zhj 新建判断重复并且进行加密 2023/07/19 start
            searchContactByAccountId({
                accountId: this.theContact['AccountId'],
            }).then((resultAccount) => {
                resultAccount = JSON.parse(JSON.stringify(resultAccount));
                if (resultAccount.status == 'fail') {
                    that.showToast(resultAccount.message, 'Error');
                    console.log()
                    return
                }
                let accountName = resultAccount.accountName;
                let dataIdManageCodeMap = resultAccount.dataIdManageCodeMap;
                let contactList = '';
                for (var i = 0; i < resultAccount.contactList.length; i++) {
                    if (resultAccount.contactList[i].AWS_Data_Id__c)
                        contactList += ',' + resultAccount.contactList[i].AWS_Data_Id__c;
                }
                contactList = contactList.substring(1);
                payloadForNewPI = JSON.parse(payloadForNewPI);
                payloadForNewPI[0].contactIds = contactList;
                payloadForNewPI[0].isMobileVerif = resultAccount.isMobileVerif;
                payloadForNewPI[0].isNameMobileVerif = resultAccount.isNameMobileVerif;
                payloadForNewPI = JSON.stringify(payloadForNewPI);
                //AWS加密
                that.AWSService.post(that.staticResourceContact.newUrl + 'V2', payloadForNewPI, (resultAWS) => {
                    if (resultAWS && resultAWS.object) {
                        //判断已存在相同名字的联系人
                        let errorMsg = '';
                        if (resultAWS.status == '129') {
                            errorMsg = '客户 [ ' + accountName + ' ],已存在相同名字的联系人 人员管理编码 [' + dataIdManageCodeMap[resultAWS.object[0].dataId] + ' ] ,不能重复创建,请了解';
                            that.showToast('Error',errorMsg)
                            return
                        }
                        if (resultAWS.status == '130') {
                            if (resultAWS.object[0] && resultAWS.object[0].sfRecordId != null && resultAWS.object[0].sfRecordId != '') {
                                errorMsg = '已找到重复值: UniqueNumber__c 与记录值重复,ID 为: ' + resultAWS.object[0].sfRecordId + '客户人员信息';
                            }
                            else {
                                errorMsg = '数据中存在重复的电话号码';
                            }
                            that.showToast('Error',errorMsg)
                            return
                        }
                        console.log('resultAWS = ' + JSON.stringify(resultAWS));
                        that.theContact['LastName'] = resultAWS.object[0]['lastName'];
                        that.theContact['Phone'] = resultAWS.object[0]['phone'];
                        that.theContact['AWS_Data_Id__c'] = resultAWS.object[0]['dataId'];
                        that.txId = resultAWS.txId;
                        console.log('that.theContact = ' + that.theContact)
                        //保存到后端
                        saveContact({ contactJson: JSON.stringify(that.theContact) })
                            .then(result => {
                                if (result.code === 200) {
                                    //deloitte-zhj 新建判断重复并且进行加密成功之后需要进行事务确认 2023/07/19 start
                                    that.AWSService.confirm(true, result.msg, that.txId, that.staticResourceContact.token, that.staticResourceContact.transactionUrl, function (resultConfirm) {
                                        console.log('resultConfirm = ' + JSON.stringify(resultConfirm))
                                        that.showToast('success', '保存成功');
                                        let selectedId = result.msg;
                                        let key = that.uniqueKey;
                                        const valueSelectedEvent = new CustomEvent('valueselect', {
                                            detail: { selectedId, key },
                                        });
                                        that.dispatchEvent(valueSelectedEvent);
                                        that.isOpen = false;
                                    });
                                    //deloitte-zhj 新建判断重复并且进行加密成功之后需要进行事务确认 2023/07/19 end
                                } else {
                                    that.showToast('error', '保存失败,' + result.msg);
                                }
                                that.showModal = false;
                            })
                            .catch(error => {
                                that.showToast('error', '保存失败,' + error);
                                that.showModal = false;
                            });
                    } else {
                        console.log('result = ' + JSON.stringify(result));
                    }
                }, that.staticResourceContact.token);
            });
            //deloitte-zhj 新建判断重复并且进行加密 2023/07/19 end

        }
    }
    stringIsEmpty(str) {
        if (str === '' || str === undefined || str === null) {
            return true;
        } else {
            return false;
        }
    }
    showToast(variant, mes) {
        const event = new ShowToastEvent({
            message: mes,
            variant: variant,
        });
        this.dispatchEvent(event);
    }
    //字段信息改变
    async fieldChange(event) {
        const { value } = event.detail;
        const { fieldName } = event.target || event.currentTarget;
        let checked = event.target.value || event.currentTarget.value;
        if (value == undefined && checked != undefined) {
            this.theContact[fieldName] = checked;
        } else {
            this.theContact[fieldName] = value instanceof Array ? value[0] : value;
        }
    }
}
.sticky-li {
    position: sticky;
    /* top: 0; */
    bottom: 0;
    background-color: #fff;
    z-index: 999;
}
.custom-pill {
    position: relative; /* 设置相对定位 */
}

.custom-pill::before {
    content: ""; /* 添加伪元素内容 */
    position: absolute; /* 设置绝对定位,覆盖在 pill 元素之上 */
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.2); /* 设置遮罩层颜色,这里使用淡灰色带透明度 */
    pointer-events: none; /* 确保遮罩层不会阻止用户操作 */
}
<c-other-look-up disabled={isAccDis} unique-key="AccountID" value-id={filter} obj-name="Account"
                                        icon-name="standard:account" search-label="" onvalueselect={handleAccSelection} fields={AccountFields}></c-other-look-up>

 

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back

标签:stringify,console,log,Up,JSON,let,data,Look
From: https://www.cnblogs.com/ahoTang/p/18008988

相关文章

  • ReentrantLock源码分析、LockSuppor、ReentrantReadWriteLock、锁优化的方法
    ReentrantLock类图我们看一下重入锁ReentrantLock类关系图,它是实现了Lock接口的类。NonfairSync和FairSync都继承自抽象类Sync,在ReentrantLock中有非公平锁NonfairSync和公平锁FairSync的实现。在重入锁ReentrantLock类关系图中,我们可以看到NonfairSync和FairSync都继承自抽象......
  • ReentrantLock源码分析、LockSuppor、ReentrantReadWriteLock、锁优化的方法
    ReentrantLock类图我们看一下重入锁ReentrantLock类关系图,它是实现了Lock接口的类。NonfairSync和FairSync都继承自抽象类Sync,在ReentrantLock中有非公平锁NonfairSync和公平锁FairSync的实现。在重入锁ReentrantLock类关系图中,我们可以看到NonfairSync和FairSync都继承自抽象......
  • offline 2 online | AWAC:基于 AWR 的 policy update + online 补充数据集
    论文题目:AWAC:AcceleratingOnlineReinforcementLearningwithOfflineDatasetsICLR2021reject,34666,但是是师兄推荐的offline2online文章。pdf版本:https://arxiv.org/pdf/2006.09359.pdfhtml版本:https://ar5iv.labs.arxiv.org/html/2006.09359openreview:ht......
  • Linq GroupBy() 和 ToLookup()
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;publicclassProgram{publicstaticvoidMain(){varlist=newList<Product>{newProduct{Id=1,Name="Name1",Category="A"},newProduct{......
  • Linux Control Groups
    前言本文主要会介绍笔者在学习LinuxCgroups时所总结的知识点,其中会涉及到Cgroups中的抽象概念、使用规则、实现原理以及API等方面的相关内容。笔者也会将自己的理解在文中进行阐述,这也算是在和大家交流心得的一个过程。若文中有错误的理解和概念,请大家及时纠正;吸纳大家的建议,对......
  • Nginx--upstream健康检查
    nginx判断节点失效状态:Nginx默认判断失败节点状态以connectrefuse和timeout状态为准,不以HTTP错误状态进行判断失败,因为HTTP只要能返回状态说明该节点还可以正常连接,所以nginx判断其还是存活状态;除非添加了proxy_next_upstream指令设置对404、502、503、504、500和timeout......
  • ERROR [ExceptionHandler] ER_NOT_SUPPORTED_AUTH_MODE: Client does not support aut
    nestjs连接数据库时报错原因:mysql8.0版本的密码加密方式不同了解决办法就是指定加密方式重新设置一下密码。命令行设置:ALTERUSER'root'@'localhost'IDENTIFIEDWITHmysql_native_passwordBY'password1234'刷新命令:FLUSHPRIVILEGESwindows用户可以图形界面从新配置一下......
  • Drvsetup.dll 是 Windows 操作系统中的一个动态链接库文件,用于设备驱动程序的安装和配
     Drvsetup.dll是Windows操作系统中的一个动态链接库文件,用于设备驱动程序的安装和配置过程中。该文件通常位于C:\Windows\System32文件夹下。Drvsetup.dll主要负责设备驱动程序的安装和配置过程中的一些核心功能,包括驱动程序的复制、注册、配置和卸载等。在设备驱动程序......
  • [office] 学会LOOKUP函数这个高级用法,多条件查询就很容易了!
    如下表,是某快递公司价格表,每当查询价格时,会涉及很多条件,始发地、目的地、重量区域等,在全部条件判断完之后,还得与最低价进行比较,取两者之间的最大值。价格表如下:查询表如下:举例,始发地为义乌,目的地是北京,重量为1680.57,对应价格为1.6。金额为:=1680.57*1.6,算出金额之后,再与最低价200相......
  • PowerShell 中使用相关命令管理 FFU(Full Flash Update)映像
    PowerShell中使用相关命令管理FFU(FullFlashUpdate)映像的示例:获取系统中的Windows映像信息:powershellCopyCodeGet-WindowsImage挂载指定的Windows映像:powershellCopyCodeMount-WindowsImage-ImagePath"C:\path\to\image.ffu"-Index1-Path"C:\mount"......