生产领料-输出按钮调整

This commit is contained in:
mzr 2025-09-19 14:22:39 +08:00
parent 98d1c7b5ba
commit aacecc1202
2 changed files with 1083 additions and 1086 deletions

View File

@ -19,7 +19,8 @@ const AREA = {
bodyPageArea: '50080105_onhandbody',
dataSource: 'mmpac.mmpac.issue.data',
issueAppcode: '50080105'
issueAppcode: '50080105',
nodekey: 'scll01'
};
const PK = {
pickmHeadPK: 'cpickmid',
@ -48,6 +49,7 @@ const BUTTON = {
copy: 'CopyRow', //复制
deleteLine: 'DelRow', //删行|移除
refresh: 'Refersh', //刷新
Output: 'Output', //输出
bodyOnhandQuery: 'BodyIssueATPHideShowAction', //存量查拣
UnPlaseBtns: ['BodyIssueATPHideShowAction', 'DelRow', 'CopyRow'],
PlaseBtns: ['PasteThis', 'PasteCancel'],
@ -61,7 +63,8 @@ const URL = {
issueReserveMaterial: '/nccloud/mmpac/issue/issueReserveMaterialAction.do',
queryDirectTrans: '/nccloud/mmpac/issue/issueDirectTransQuery.do',
issueDirectTrans: '/nccloud/mmpac/issue/issueDirectTransAction.do',
checkIsNccNative:'/nccloud/mmpac/issue/checkIsNccNative.do',
checkIsNccNative: '/nccloud/mmpac/issue/checkIsNccNative.do',
pickmPrint: '/nccloud/mmpac/issue/printAction.do',
//编辑事件
issuePickmBeforeEditEvent: '/nccloud/mmpac/issue/issueBeforeEditForPickm.do',
issuePickmAfterEditEvent: '/nccloud/mmpac/issue/issueAfterEditForPickm.do',
@ -76,7 +79,7 @@ const URL = {
isseQueryFromPutPlan: '/nccloud/mmpac/issue/isseQueryFromPutPlan.do',
isseQueryFromDispatchlist: '/nccloud/mmpac/issue/isseQueryFromDispatchlist.do',
issueQueryFromDirectTrans: '/nccloud/mmpac/issue/issueQueryFromDirectTrans.do',
issueQueryFromPutPlanDirectTrans:'/nccloud/mmpac/issue/issueQueryFromPutPlanDirectTrans.do'
issueQueryFromPutPlanDirectTrans: '/nccloud/mmpac/issue/issueQueryFromPutPlanDirectTrans.do'
};
//单据类型
const BILLTYPE = {
@ -99,14 +102,14 @@ const issuePickmField = {
'pk_org', 'cpickmid', 'vbillcode', 'vbusitypeid', 'cdeptid', 'cdeptvid'
],
item: ['pk_org', 'cpickmid', 'cpickm_bid', 'vrowno', 'cbmaterialid', 'cbmaterialvid', 'cbunitid', 'cbastunitid', 'vbchangerate',
'cbvendorid', 'cbvendorvid','cbproductorid', 'cbprojectid', 'cbcustomerid','cbcustomervid', 'cbqualitylevelid', 'cbffileid',
'cbvendorid', 'cbvendorvid', 'cbproductorid', 'cbprojectid', 'cbcustomerid', 'cbcustomervid', 'cbqualitylevelid', 'cbffileid',
'vbfree1', 'vbfree2', 'vbfree3', 'vbfree4', 'vbfree5', 'vbfree6', 'vbfree7', 'vbfree8', 'vbfree9', 'vbfree10',
'cdeliverorgid', 'cdeliverorgvid', 'coutstockid', 'csupplyorgid', 'csupplyorgvid', 'cinstockid', 'clocationid','cinlocationid',
'cdeliverorgid', 'cdeliverorgvid', 'coutstockid', 'csupplyorgid', 'csupplyorgvid', 'cinstockid', 'clocationid', 'cinlocationid',
'pk_batchcode', 'vbatchcode', 'cstockmanid', 'nbccknum', 'nbcckastnum', 'vbnote', 'boverissue', 'fissueflag',
'drequiredate','cwkid','nthisarrangenum','nthisarrangeastnum','ctplcustomerid','cvmivenderid',
'drequiredate', 'cwkid', 'nthisarrangenum', 'nthisarrangeastnum', 'ctplcustomerid', 'cvmivenderid',
'vbdef1', 'vbdef2', 'vbdef3', 'vbdef4', 'vbdef5', 'vbdef6', 'vbdef7', 'vbdef8', 'vbdef9', 'vbdef10',
'vbdef11', 'vbdef12', 'vbdef13', 'vbdef14', 'vbdef15', 'vbdef16', 'vbdef17', 'vbdef18', 'vbdef19', 'vbdef20',
'cpickbillid','vpickbillcode', 'vpickbilltype', 'cpickbillrowid','vpickbillrowno','nthisneednum','nthisneedastnum']
'cpickbillid', 'vpickbillcode', 'vpickbilltype', 'cpickbillrowid', 'vpickbillrowno', 'nthisneednum', 'nthisneedastnum']
};
//缓存
const CACHE = {
@ -140,6 +143,18 @@ const pickmBodyCustAndSupFild = {
cvendorid: 'cbvendorid',
cvendorvid: 'cbvendorvid'
};
export { AREA, STATUS, URL, BUTTON, PK, BILLTYPE, FIELD, CACHE, issuePickmField,pickmBodyfixAssts ,pickmBodyCustAndSupFild};
export {
AREA,
STATUS,
URL,
BUTTON,
PK,
BILLTYPE,
FIELD,
CACHE,
issuePickmField,
pickmBodyfixAssts,
pickmBodyCustAndSupFild
};
/*auVpq9xwZL1gPRSzNVP/w0hBm26YHXsnVMAUlT2iQRQ=*/

View File

@ -1,13 +1,18 @@
/*9LNhEcWwOPqFwoyI0rg5Tvi1KVVJuZ+O99DtbZayIQc=*/
import { serachPickm_btnClick, serachReqpickm_btnClick, serachDirectTrans_btnClick, directTransBtnClick } from './index.js';
import { ajax, cacheTools } from 'nc-lightapp-front';
import { BUTTON, BILLTYPE, AREA, URL, CACHE, issuePickmField } from '../../constance';
import { getLangByResId } from '../../../../../mmpub/mmpub/pub/tool/multiLangUtil';
import { rowCopyPasteUtils } from '../../../../../mmpub/mmpub/pub/tool/editTableTools/rowCopyPasteUtils';
import { showSuccessInfo, showWarningInfo, showWarningDialog } from '../../../../../mmpub/mmpub/pub/tool/messageUtil';
import { getDefData, setDefData } from '../../../../../mmpub/mmpub/pub/cache';
import { buttonControl } from '../viewController/buttonController';
import { output} from 'nc-lightapp-front';
import {
serachPickm_btnClick,
serachReqpickm_btnClick,
serachDirectTrans_btnClick,
directTransBtnClick
} from './index.js';
import {ajax, cacheTools} from 'nc-lightapp-front';
import {BUTTON, BILLTYPE, AREA, URL, CACHE, issuePickmField} from '../../constance';
import {getLangByResId} from '../../../../../mmpub/mmpub/pub/tool/multiLangUtil';
import {rowCopyPasteUtils} from '../../../../../mmpub/mmpub/pub/tool/editTableTools/rowCopyPasteUtils';
import {showSuccessInfo, showWarningInfo, showWarningDialog} from '../../../../../mmpub/mmpub/pub/tool/messageUtil';
import {getDefData, setDefData} from '../../../../../mmpub/mmpub/pub/cache';
import {buttonControl} from '../viewController/buttonController';
import {output} from 'nc-lightapp-front';
export default function onList_BtnClicks(props, btncode, text, record, index) {
@ -67,8 +72,7 @@ export default function onList_BtnClicks(props, btncode, text, record, index) {
} else {
serachReqpickm_btnClick.call(this, true)
}
}
else if (this.state.tabType == BILLTYPE.directTrans) {
} else if (this.state.tabType == BILLTYPE.directTrans) {
let allData = this.props.editTable.getAllData(AREA.directTransViewTableArea);
if (allData && allData.rows && allData.rows.length > 0) {
/**国际化:当前单据已有领料数据,重新查询将被清空,您确定继续吗? */
@ -95,7 +99,8 @@ export default function onList_BtnClicks(props, btncode, text, record, index) {
break;
case BUTTON.copy:
//清空出库数量,主数量
let newRecord = JSON.parse(JSON.stringify(record));;
let newRecord = JSON.parse(JSON.stringify(record));
;
if (this.state.tabType == BILLTYPE.pickm) {
newRecord.values['nbcckastnum'].value = 0;
newRecord.values['nbccknum'].value = 0;
@ -128,7 +133,7 @@ export default function onList_BtnClicks(props, btncode, text, record, index) {
buttonControl.call(this, '0');
} else if (this.state.tabType == BILLTYPE.reqpickm) {
buttonControl.call(this, '1');
}else if (this.state.tabType == BILLTYPE.directTrans) {
} else if (this.state.tabType == BILLTYPE.directTrans) {
buttonControl.call(this, '2');
}
@ -143,62 +148,37 @@ export default function onList_BtnClicks(props, btncode, text, record, index) {
);
break;
// 输出功能
case "Output":
case BUTTON.Output:
let isAll = false;
let tableData = [];
let oids=[];
let selectedRow = this.props.editTable.getCheckedRows(AREA.pickmViewTableArea);;
let oids = [];
let selectedRow = this.props.editTable.getCheckedRows(AREA.pickmViewTableArea);
;
let indexs = [];
if (!selectedRow || selectedRow.length < 1) {
isAll = true;
tableData = this.props.editTable.getAllRows(AREA.pickmViewTableArea);
}else{
} else {
tableData = this.props.editTable.getCheckedRows(AREA.pickmViewTableArea);
}
tableData.forEach((row) => {
oids.push(row.data.values.cpickm_bid.value);
});
let printdata={
funcode: "50080105",
nodekey: "10086",
let printdata = {
funcode: AREA.issueAppcode,
nodekey: AREA.nodekey,
oids: oids,
outputType: "output",
};
//小应用编码//小应用编码
//默认模板分配的key//需要输出的单据主键//输出类型 --默认output
output({ url: "/nccloud/mmpac/issue/printAction.do", data: printdata });
output({url: URL.pickmPrint, data: printdata});
break;
default:
break;
}
}
// function onOutput() {
// let isAll = false;
// let tableData = [];
// let oids=[];
// let selectedRow = this.props.editTable.getCheckedRows(AREA.pickmViewTableArea);;
// let indexs = [];
// if (!selectedRow || selectedRow.length < 1) {
// isAll = true;
// tableData = this.props.editTable.getAllRows(AREA.pickmViewTableArea);
// }
// tableData.forEach((row) => {
// oids.push(row.values.cpickm_bid.value);
// });
// let printdata={
// funcode: this.config.moduleId,
// appcode: this.config.moduleId,
// nodekey: nodekey,
// oids: oids,
// outputType: "output",
// };
// //小应用编码//小应用编码
// //默认模板分配的key//需要输出的单据主键//输出类型 --默认output
// output({ url: urls['print'], data: printdata });
// };
//下游单据
function downStreamBill() {
ajax({
@ -225,7 +205,7 @@ function downStreamBill() {
id: ic4DIds[0]
});
} else {
let param = { linktype: '4D', linkids: ic4DIds };
let param = {linktype: '4D', linkids: ic4DIds};
cacheTools.set('param', param);
this.props.openTo(null, {
appcode: '400801214',
@ -247,7 +227,7 @@ function downStreamBill() {
id: ic4kIds[0]
});
} else {
let param = { linktype: '4K', linkids: ic4kIds };
let param = {linktype: '4K', linkids: ic4kIds};
cacheTools.set('param', param);
this.props.openTo(null, {
appcode: '400801606',
@ -268,7 +248,7 @@ function downStreamBill() {
id: ic4455Ids[0]
});
} else {
let param = { linktype: '4455', linkids: ic4455Ids };
let param = {linktype: '4455', linkids: ic4455Ids};
cacheTools.set('param', param);
this.props.openTo(null, {
appcode: '400801200',
@ -300,7 +280,7 @@ function downStreamBill() {
id: ic4kIdsFor55AC[0]
});
} else {
let param = { linktype: '4K', linkids: ic4kIdsFor55AC };
let param = {linktype: '4K', linkids: ic4kIdsFor55AC};
cacheTools.set('param', param);
this.props.openTo(null, {
appcode: '400801606',
@ -322,7 +302,7 @@ function downStreamBill() {
id: ic5xIdsFor55AC[0]
});
} else {
let param = { linktype: '5X', linkids: ic5xIdsFor55AC };
let param = {linktype: '5X', linkids: ic5xIdsFor55AC};
cacheTools.set('param', param);
this.props.openTo(null, {
appcode: '400900800',
@ -354,7 +334,7 @@ function downStreamBill() {
id: ic4kIdsForDirect[0]
});
} else {
let param = { linktype: '4K', linkids: ic4kIdsForDirect };
let param = {linktype: '4K', linkids: ic4kIdsForDirect};
cacheTools.set('param', param);
this.props.openTo(null, {
appcode: '400801606',
@ -376,7 +356,7 @@ function downStreamBill() {
id: ic5xIdsForDirect[0]
});
} else {
let param = { linktype: '5X', linkids: ic5xIdsForDirect };
let param = {linktype: '5X', linkids: ic5xIdsForDirect};
cacheTools.set('param', param);
this.props.openTo(null, {
appcode: '400900800',
@ -407,8 +387,7 @@ async function reserveIssue() {
if (!selectedRow || selectedRow.length < 1) {
isAll = true;
tableData = this.props.editTable.getAllRows(AREA.reqpickmViewTableArea);
}
else {
} else {
selectedRow.map((item) => {
tableData.push(item.data);
indexs.push(item.index);
@ -452,13 +431,12 @@ async function reserveIssue() {
}
if (isAll) {
this.props.editTable.setTableData(AREA.reqpickmViewTableArea, res.data[AREA.reqpickmViewTableArea]);
}
else {
} else {
let updateArray = [];
let rows = res.data[AREA.reqpickmViewTableArea].rows;
for (let j = 0; j < rows.length; j++) {
let row = rows[j];
let obj = { index: indexs[j], data: row };
let obj = {index: indexs[j], data: row};
updateArray.push(obj);
}
if (updateArray.length > 0) {
@ -483,8 +461,7 @@ async function destIssue(flag) {
if (!selectedRow || selectedRow.length < 1) {
isAll = true;
tableData = this.props.editTable.getAllRows(AREA.pickmViewTableArea);
}
else {
} else {
selectedRow.map((item) => {
tableData.push(item.data);
indexMap.set(item.data.values.cpickm_bid.value, item.index);
@ -508,7 +485,7 @@ async function destIssue(flag) {
issuePickmField.item.forEach((feild) => {
item[feild] = row.values[feild] && row.values[feild].value ? row.values[feild].value : null;
});
issueParams.push({ headValue: head, itemValue: item });
issueParams.push({headValue: head, itemValue: item});
});
let requestData = {};
let pageCode = AREA.pickmPageArea;
@ -560,8 +537,7 @@ async function destIssue(flag) {
}
if (isAll) {
this.props.editTable.setTableData(AREA.pickmViewTableArea, res.data[AREA.pickmViewTableArea]);
}
else {
} else {
let delArray = [];
let updateArray = [];
let rows = res.data[AREA.pickmViewTableArea].rows;
@ -569,7 +545,7 @@ async function destIssue(flag) {
let row = rows[j];
if (indexMap.has(row.values.cpickm_bid.value)) {
let ii = indexMap.get(row.values.cpickm_bid.value);
let obj = { index: ii, data: row };
let obj = {index: ii, data: row};
updateArray.push(obj);
let i = indexs.indexOf(ii);
indexs.splice(i, 1);
@ -665,6 +641,7 @@ async function delrow(index) {
}
})
}
//存量查拣
function onHandBtnClick() {
let selectData = getSelectRows.call(this);
@ -685,7 +662,7 @@ function onHandBtnClick() {
}
let onHandRows = getOnHandData.call(this, realRows);
this.setState({
headRows: { rows: onHandRows }
headRows: {rows: onHandRows}
});
this.toggleOnhandShow();
}
@ -708,7 +685,7 @@ function bodyOnhandQuery(record, index) {
}
let onHandRows = getOnHandData.call(this, realRows);
this.setState({
headRows: { rows: onHandRows },
headRows: {rows: onHandRows},
onhandRecord: index
});
this.toggleOnhandShow();
@ -723,8 +700,7 @@ function getStockAccountNum() {
if (!selectedRow || selectedRow.length < 1) {
isAll = true;
tableData = this.props.editTable.getAllRows(getModuleId.call(this));
}
else {
} else {
selectedRow.map((item) => {
tableData.push(item.data);
});
@ -739,8 +715,7 @@ function getStockAccountNum() {
requestData.tabType = 0;
if (this.state.tabType == BILLTYPE.pickm) {
pageCode = AREA.pickmPageArea;
}
else {
} else {
pageCode = AREA.directTransPageArea;
}
if (!pageType) {
@ -762,7 +737,7 @@ function getStockAccountNum() {
});
isautombc = row.values[isautombc] && row.values[isautombc].value ? row.values[isautombc].value : null;
iscmrow = row.values[iscmrow] && row.values[iscmrow].value ? row.values[iscmrow].value : null
issueParams.push({ headValue: head, itemValue: item, isautombc: isautombc, iscmrow: iscmrow });
issueParams.push({headValue: head, itemValue: item, isautombc: isautombc, iscmrow: iscmrow});
});
requestData.tabType = 0;
requestData.issuePickmDatas = issueParams;
@ -782,7 +757,8 @@ function getStockAccountNum() {
areacode: getModuleId.call(this)
}
}
};
}
;
ajax({
url: URL.queryIssueObtainStockAccountNum,
data: requestData,
@ -799,7 +775,7 @@ function getStockAccountNum() {
tableData[j].values['instockastnum'] = rows[j].values.instockastnum;
tableData[j].values['sumstocknum'] = rows[j].values.sumstocknum;
tableData[j].values['sumstockastnum'] = rows[j].values.sumstockastnum;
let obj = { index: j, data: tableData[j] };
let obj = {index: j, data: tableData[j]};
updateArray.push(obj);
//this.props.editTable.setValByKeyAndIndex(getModuleId.call(this), j, 'deliverystocknum', rows[j].values.deliverystocknum);
//this.props.editTable.setValByKeyAndIndex(getModuleId.call(this), j, 'deliverystockastnum', rows[j].values.deliverystockastnum);
@ -820,8 +796,7 @@ function getStockAccountNum() {
}
if (pageType) {
showSuccessInfo(getLangByResId(this, '50080105-000007'));
}
else {
} else {
showSuccessInfo(getLangByResId(this, '50090105-000007'));
}
}
@ -862,7 +837,7 @@ function getOnHandData(selectData) {
if (this.state.tabType == BILLTYPE.pickm || this.state.tabType == BILLTYPE.directTrans) {
let cache = getDefData(AREA.dataSource, CACHE.issuePickmCache);
selectData.forEach((item) => {
let onhandDim = { values: {} };
let onhandDim = {values: {}};
//集团
onhandDim.values.pk_group = item.values.pk_group;
// 物料ID
@ -895,11 +870,17 @@ function getOnHandData(selectData) {
onhandDim.values.crowno = item.values.vrowno;
// 待处理主数量
if (item.values.nthisneednum && item.values.nthisneednum.value) {
onhandDim.values.onhandshouldnum = parseFloat(item.values.nthisneednum.value) > 0 ? item.values.nthisneednum : { value: '0', scale: '2' };
onhandDim.values.onhandshouldnum = parseFloat(item.values.nthisneednum.value) > 0 ? item.values.nthisneednum : {
value: '0',
scale: '2'
};
}
//待处理数量
if (item.values.nthisneedastnum && item.values.nthisneedastnum.value) {
onhandDim.values.onhandshouldassnum = parseFloat(item.values.nthisneedastnum.value) > 0 ? item.values.nthisneedastnum : { value: '0', scale: '2' };
onhandDim.values.onhandshouldassnum = parseFloat(item.values.nthisneedastnum.value) > 0 ? item.values.nthisneedastnum : {
value: '0',
scale: '2'
};
}
//物料辅助属性
onhandDim.values.cproductorid = item.values.cbproductorid;
@ -921,31 +902,31 @@ function getOnHandData(selectData) {
if (item.values.nnum && item.values.nnum.value && item.values.onhandshouldnum && item.values.onhandshouldnum.value) {
if (parseFloat(item.values.nnum.value) > parseFloat(item.values.onhandshouldnum.value)) {
if (pageType) {
item.values.fulfiltype = { value: getLangByResId(this, '50080105-000003') }; /* 国际化处理: 已超出*/
item.values.fulfiltype = {value: getLangByResId(this, '50080105-000003')}; /* 国际化处理: 已超出*/
} else {
item.values.fulfiltype = { value: getLangByResId(this, '50090105-000003') }; /* 国际化处理: 已超出*/
item.values.fulfiltype = {value: getLangByResId(this, '50090105-000003')}; /* 国际化处理: 已超出*/
}
} else if (parseFloat(item.values.nnum.value) == parseFloat(item.values.onhandshouldnum.value)) {
if (pageType) {
item.values.fulfiltype = { value: getLangByResId(this, '50080105-000004') }; /* 国际化处理: 已满足*/
item.values.fulfiltype = {value: getLangByResId(this, '50080105-000004')}; /* 国际化处理: 已满足*/
} else {
item.values.fulfiltype = { value: getLangByResId(this, '50090105-000004') }; /* 国际化处理: 已满足*/
item.values.fulfiltype = {value: getLangByResId(this, '50090105-000004')}; /* 国际化处理: 已满足*/
}
} else {
if (pageType) {
item.values.fulfiltype = { value: getLangByResId(this, '50080105-000005') }; /* 国际化处理: 未满足*/
item.values.fulfiltype = {value: getLangByResId(this, '50080105-000005')}; /* 国际化处理: 未满足*/
} else {
item.values.fulfiltype = { value: getLangByResId(this, '50090105-000005') }; /* 国际化处理: 未满足*/
item.values.fulfiltype = {value: getLangByResId(this, '50090105-000005')}; /* 国际化处理: 未满足*/
}
}
} else {
item.values.fulfiltype = { value: '' };
item.values.fulfiltype = {value: ''};
}
realRows.push(onhandDim);
});
} else if (this.state.tabType == BILLTYPE.reqpickm) {
selectData.forEach((item) => {
let onhandDim = { values: {} };
let onhandDim = {values: {}};
//集团
onhandDim.values.pk_group = item.values.pk_group;
// 库存组织
@ -1000,30 +981,31 @@ function getOnHandData(selectData) {
if (item.values.nnum && item.values.nnum.value && item.values.onhandshouldnum && item.values.onhandshouldnum.value) {
if (parseFloat(item.values.nnum.value) > parseFloat(item.values.onhandshouldnum.value)) {
if (pageType) {
item.values.fulfiltype = { value: getLangByResId(this, '50080105-000003') }; /* 国际化处理: 已超出*/
item.values.fulfiltype = {value: getLangByResId(this, '50080105-000003')}; /* 国际化处理: 已超出*/
} else {
item.values.fulfiltype = { value: getLangByResId(this, '50090105-000003') }; /* 国际化处理: 已超出*/
item.values.fulfiltype = {value: getLangByResId(this, '50090105-000003')}; /* 国际化处理: 已超出*/
}
} else if (parseFloat(item.values.nnum.value) == parseFloat(item.values.onhandshouldnum.value)) {
if (pageType) {
item.values.fulfiltype = { value: getLangByResId(this, '50080105-000004') }; /* 国际化处理: 已满足*/
item.values.fulfiltype = {value: getLangByResId(this, '50080105-000004')}; /* 国际化处理: 已满足*/
} else {
item.values.fulfiltype = { value: getLangByResId(this, '50090105-000004') }; /* 国际化处理: 已满足*/
item.values.fulfiltype = {value: getLangByResId(this, '50090105-000004')}; /* 国际化处理: 已满足*/
}
} else {
if (pageType) {
item.values.fulfiltype = { value: getLangByResId(this, '50080105-000005') }; /* 国际化处理: 未满足*/
item.values.fulfiltype = {value: getLangByResId(this, '50080105-000005')}; /* 国际化处理: 未满足*/
} else {
item.values.fulfiltype = { value: getLangByResId(this, '50090105-000005') }; /* 国际化处理: 未满足*/
item.values.fulfiltype = {value: getLangByResId(this, '50090105-000005')}; /* 国际化处理: 未满足*/
}
}
} else {
item.values.fulfiltype = { value: '' };
item.values.fulfiltype = {value: ''};
}
realRows.push(onhandDim);
});
}
return realRows;
}
/*9LNhEcWwOPqFwoyI0rg5Tvi1KVVJuZ+O99DtbZayIQc=*/