😎新增产品管理、项目管理工艺路线定时同步功能
This commit is contained in:
parent
4b1d0fb58d
commit
0712217e09
@ -13,6 +13,7 @@ using Vistar.Application.SapService.Dto;
|
||||
using Vistar.Application.Common;
|
||||
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
|
||||
using static Elastic.Clients.Elasticsearch.JoinField;
|
||||
using Qiniu.CDN;
|
||||
|
||||
namespace Vistar.Application.Service.MaterialManagement;
|
||||
|
||||
@ -52,8 +53,8 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
_sapService = sapService;
|
||||
_obj118Rep = obj118Rep;
|
||||
_dataValidationService = dataValidationService;
|
||||
_obj122Rep= obj122Rep;
|
||||
_obj121Rep= obj121Rep;
|
||||
_obj122Rep = obj122Rep;
|
||||
_obj121Rep = obj121Rep;
|
||||
}
|
||||
/// <summary>
|
||||
/// 分页查询产品管理
|
||||
@ -94,7 +95,7 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
fld004629 = DateTime.Now,
|
||||
fld004312 = "N",
|
||||
fld004313 = lengthError,
|
||||
fld004311="失败"
|
||||
fld004311 = "失败"
|
||||
})
|
||||
.Where(it => it.idRecord == input.idRecord)
|
||||
.ExecuteCommandAsync().ConfigureAwait(false);
|
||||
@ -233,14 +234,16 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
itemDataList.Add(itemData);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(ParentData.fld005288)) {
|
||||
if (!string.IsNullOrEmpty(ParentData.fld005288))
|
||||
{
|
||||
var configid = await _configurationsRep.AsQueryable().Where(x => x.ObjectId == 110 && x.ConfigLabel == "mBOM").FirstAsync();
|
||||
var BomData = await _configurationDataRep.AsQueryable().Where(x => x.ConfigId == configid.ConfigID && x.ParentGuid == input[0].ParentGuid && x.isDeleted == false && x.ParentVersion == Convert.ToInt32(ParentData.fld005288)).ToListAsync();
|
||||
for (int i = 0; i < BomData.Count; i++)
|
||||
{
|
||||
|
||||
var itemList= itemDataList.Where(x=>x.IDNRK == BomData[i].PartNumber).ToList();
|
||||
if (itemList.Count == 0) {
|
||||
|
||||
var itemList = itemDataList.Where(x => x.IDNRK == BomData[i].PartNumber).ToList();
|
||||
if (itemList.Count == 0)
|
||||
{
|
||||
var Verification = await _dataValidationService.VerificationMaterial(BomData[i].ChildObjID, BomData[i].PartNumber, BomData[i].ChildGuid);
|
||||
if (Verification == "不存在")
|
||||
{
|
||||
@ -262,7 +265,7 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
};
|
||||
itemDataList.Add(itemData);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -297,7 +300,7 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
fld004315 = codeVal,
|
||||
fld004316 = "N",
|
||||
fld004317 = apiOutput.msg,
|
||||
fld005288= input[0].ParentVersion.ToString()////////////////////////////////////////////////////////////xinixnixn
|
||||
fld005288 = input[0].ParentVersion.ToString()////////////////////////////////////////////////////////////xinixnixn
|
||||
})
|
||||
.Where(it => it.idRecord == ParentData.idRecord)
|
||||
.ExecuteCommandAsync();
|
||||
@ -528,7 +531,7 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
.ExecuteCommandAsync();
|
||||
var output = new SapOutput()
|
||||
{
|
||||
parameter= sapOutput.parameter,
|
||||
parameter = sapOutput.parameter,
|
||||
materialCode = input[0]._System_objNBS,
|
||||
code = codeVal,
|
||||
msg = msg,
|
||||
@ -554,7 +557,7 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
var configid = await _configurationsRep.AsQueryable().Where(x => x.ObjectId == 110 && x.ConfigLabel == "mBOM").FirstAsync();
|
||||
|
||||
var materialData = await _obj110Rep.AsQueryable()
|
||||
.Where(x => x.CheckedStatus == false && x.deleted == false && x.IsLatestVersion == true &&x.fld004311=="成功" && (x.fld004316 == "A" || x.fld004316 == "M"))
|
||||
.Where(x => x.CheckedStatus == false && x.deleted == false && x.IsLatestVersion == true && x.fld004311 == "成功" && (x.fld004316 == "A" || x.fld004316 == "M"))
|
||||
.ToListAsync();
|
||||
var groupedData = materialData.GroupBy(item => item.RecordGuid)
|
||||
.Select(group => group.OrderByDescending(item => item.VersionIndex).First())
|
||||
@ -569,7 +572,7 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
// 查询 BOM
|
||||
var bomData = await _configurationDataRep.AsQueryable()
|
||||
.Where(x => x.ConfigId == configid.ConfigID && x.ParentGuid == item.RecordGuid && x.isDeleted == false && x.ParentVersion == versionIndex).ToListAsync();
|
||||
if (bomData.Count==0)
|
||||
if (bomData.Count == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -600,8 +603,8 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
ZYFMK = bomItem.fld004941
|
||||
};
|
||||
itemDataList.Add(itemData);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// 获取时间戳精确到毫秒,sap 要求每次调用生成不重复 guid
|
||||
string millisecondTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
|
||||
var isreq = new IS_REQ
|
||||
@ -645,7 +648,7 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
|
||||
var output = new SapOutput
|
||||
{
|
||||
parameter= apiOutput.parameter,
|
||||
parameter = apiOutput.parameter,
|
||||
materialCode = item._System_objNBS,
|
||||
code = codeVal,
|
||||
msg = msg,
|
||||
@ -769,4 +772,124 @@ public class ProductManagementService : IDynamicApiController, ITransient
|
||||
};
|
||||
return output;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 产品管理-定时同步工艺路线到SAP
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[ApiDescriptionSettings(Name = "TimingSyncToSAPProcessRoute"), HttpGet]
|
||||
[DisplayName("产品管理-定时同步工艺路线到SAP")]
|
||||
[AllowAnonymous]
|
||||
public async Task<List<SapOutput>> TimingSyncToSAPProcessRoute()
|
||||
{
|
||||
var sapOutputList = new List<SapOutput>();
|
||||
var sapUserName = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
|
||||
// 配置
|
||||
var configid = await _configurationsRep.AsQueryable().Where(x => x.ObjectId == 110 && x.ConfigLabel == "pBOM").FirstAsync();
|
||||
|
||||
//查询需要同步的产品
|
||||
var materialData = await _obj110Rep.AsQueryable()
|
||||
.Where(x => x.CheckedStatus == false && x.deleted == false && x.IsLatestVersion == true && x.fld004311 == "成功" && (x.fld004320 == "A" || x.fld004320 == "M"))
|
||||
.ToListAsync();
|
||||
//分组查询最大版本的物料
|
||||
var groupedData = materialData.GroupBy(item => item.RecordGuid)
|
||||
.Select(group => group.OrderByDescending(item => item.VersionIndex).First())
|
||||
.ToList();
|
||||
|
||||
foreach (var item in groupedData)
|
||||
{
|
||||
// 获取版本号
|
||||
var versionIndex = item.VersionIndex;
|
||||
// 查询 BOM
|
||||
var processRouteData = await _configurationDataRep.AsQueryable()
|
||||
.Where(x => x.ConfigId == configid.ConfigID && x.ParentGuid == item.RecordGuid && x.isDeleted == false && x.ParentVersion == versionIndex).ToListAsync();
|
||||
if (processRouteData.Count == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var itemDataList = new List<SapProcessRouteItemData>();
|
||||
|
||||
foreach (var processRouteItem in processRouteData)
|
||||
{
|
||||
var verification = await _dataValidationService.VerificationMaterial(processRouteItem.ChildObjID, processRouteItem.PartNumber, processRouteItem.ChildGuid);
|
||||
if (verification == "不存在")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
//获取工序描述
|
||||
var procedureDescription = await _obj122Rep.AsQueryable().Where(x => x.RecordGuid == processRouteItem.ChildGuid).ToListAsync();
|
||||
//获取工作中心
|
||||
var workCenter = await _obj121Rep.AsQueryable().Where(x => x.RecordGuid == procedureDescription[0].fld005059_Rec).ToListAsync();
|
||||
var itemData = new SapProcessRouteItemData()
|
||||
{
|
||||
VORNR = processRouteItem.Marker,
|
||||
LTXA1 = procedureDescription[0]._System_ObjDescription,
|
||||
ARBPL = workCenter[0]._System_objNBS,
|
||||
VGW01 = processRouteItem.fld004994.ToString(),
|
||||
VGE01 = processRouteItem.fld004995,
|
||||
STEUS = processRouteItem.fld004996,
|
||||
BMSCH = processRouteItem.fld005296.ToString()
|
||||
|
||||
};
|
||||
itemDataList.Add(itemData);
|
||||
}
|
||||
//获取时间戳精确到毫秒,sap要求每次调用生成不重复guid
|
||||
string millisecondTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
|
||||
|
||||
var Datuv = item.fld004945.ToString();
|
||||
|
||||
if (!string.IsNullOrEmpty(Datuv))
|
||||
{
|
||||
Datuv = item.fld004945.ToDateTime().ToString("yyyy-MM-dd");
|
||||
}
|
||||
var isreq = new SapProcessRouteIS_REQ()
|
||||
{
|
||||
ReqKeyId = "",
|
||||
BusinessId = "",
|
||||
MessageId = "",
|
||||
SndPrn = "PLM",
|
||||
RcvPrn = "SAP",
|
||||
ReqUser = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName),
|
||||
Note1 = "",
|
||||
Note2 = "",
|
||||
Note3 = "",
|
||||
Zwbid = millisecondTimestamp,
|
||||
Matnr = item._System_objNBS,
|
||||
Werks = item.fld004325,
|
||||
Datuv = Datuv,
|
||||
Plnal = "",
|
||||
|
||||
ItemList = itemDataList
|
||||
};
|
||||
|
||||
var apiOutput = await _sapService.SapProcessRouteApi(isreq);
|
||||
string codeVal = apiOutput.code == "S" ? "成功" : "失败";
|
||||
await _obj110Rep.AsUpdateable()
|
||||
.SetColumns(it => new Obj110
|
||||
{
|
||||
fld004632 = DateTime.Now,
|
||||
fld004319 = codeVal,
|
||||
fld004320 = "N",
|
||||
fld004321 = apiOutput.msg
|
||||
})
|
||||
.Where(it => it.idRecord == item.idRecord)
|
||||
.ExecuteCommandAsync();
|
||||
var msg = apiOutput.msg;
|
||||
if (apiOutput.msg == "")
|
||||
{
|
||||
msg = "同步成功";
|
||||
}
|
||||
var output = new SapOutput()
|
||||
{
|
||||
parameter = apiOutput.parameter,
|
||||
code = codeVal,
|
||||
msg = msg,
|
||||
result = apiOutput.result
|
||||
};
|
||||
|
||||
sapOutputList.Add(output);
|
||||
}
|
||||
return sapOutputList;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -158,8 +158,8 @@ public class ProjectManagementService : IDynamicApiController, ITransient
|
||||
.SetColumns(it => new Obj109
|
||||
{
|
||||
fld004508 = DateTime.Now,
|
||||
fld004507=msg,
|
||||
fld004509=codeVal,
|
||||
fld004507 = msg,
|
||||
fld004509 = codeVal,
|
||||
fld004510 = "N"
|
||||
})
|
||||
.Where(it => it.idRecord == input.idRecord)
|
||||
@ -740,4 +740,122 @@ public class ProjectManagementService : IDynamicApiController, ITransient
|
||||
return output;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 项目管理-定时同步工艺路线到SAP
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[ApiDescriptionSettings(Name = "TimingSyncToSAPProcessRoute"), HttpGet]
|
||||
[DisplayName("项目管理-定时同步工艺路线到SAP")]
|
||||
[AllowAnonymous]
|
||||
public async Task<List<SapOutput>> TimingSyncToSAPProcessRoute()
|
||||
{
|
||||
var sapOutputList = new List<SapOutput>();
|
||||
var sapUserName = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName);
|
||||
// 配置
|
||||
var configid = await _configurationsRep.AsQueryable().Where(x => x.ObjectId == 109 && x.ConfigLabel == "pBOM").FirstAsync();
|
||||
|
||||
//查询需要同步的产品
|
||||
var materialData = await _obj109Rep.AsQueryable()
|
||||
.Where(x => (x.CheckedStatus == 0 || x.CheckedStatus == 1) && x.deleted == false && x.IsLatestVersion == true && x.fld005040 == "发布" && x.fld004511 == "成功" && (x.fld004514 == "A" || x.fld004514 == "M"))
|
||||
.ToListAsync();
|
||||
//分组查询最大版本的物料
|
||||
var groupedData = materialData.GroupBy(item => item.RecordGuid)
|
||||
.Select(group => group.OrderByDescending(item => item.VersionIndex).First())
|
||||
.ToList();
|
||||
|
||||
foreach (var item in groupedData)
|
||||
{
|
||||
// 获取版本号
|
||||
var versionIndex = item.VersionIndex;
|
||||
// 查询 BOM
|
||||
var processRouteData = await _configurationDataRep.AsQueryable()
|
||||
.Where(x => x.ConfigId == configid.ConfigID && x.ParentGuid == item.RecordGuid && x.isDeleted == false && x.ParentVersion == versionIndex).ToListAsync();
|
||||
if (processRouteData.Count == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var itemDataList = new List<SapProcessRouteItemData>();
|
||||
|
||||
foreach (var processRouteItem in processRouteData)
|
||||
{
|
||||
var verification = await _dataValidationService.VerificationMaterial(processRouteItem.ChildObjID, processRouteItem.PartNumber, processRouteItem.ChildGuid);
|
||||
if (verification == "不存在")
|
||||
{
|
||||
continue;
|
||||
}
|
||||
//获取工序描述
|
||||
var procedureDescription = await _obj122Rep.AsQueryable().Where(x => x.RecordGuid == processRouteItem.ChildGuid).ToListAsync();
|
||||
//获取工作中心
|
||||
var workCenter = await _obj121Rep.AsQueryable().Where(x => x.RecordGuid == procedureDescription[0].fld005059_Rec).ToListAsync();
|
||||
var itemData = new SapProcessRouteItemData()
|
||||
{
|
||||
VORNR = processRouteItem.Marker,
|
||||
LTXA1 = procedureDescription[0]._System_ObjDescription,
|
||||
ARBPL = workCenter[0]._System_objNBS,
|
||||
VGW01 = processRouteItem.fld004994.ToString(),
|
||||
VGE01 = processRouteItem.fld004995,
|
||||
STEUS = processRouteItem.fld004996,
|
||||
BMSCH = processRouteItem.fld005296.ToString()
|
||||
|
||||
};
|
||||
itemDataList.Add(itemData);
|
||||
}
|
||||
//获取时间戳精确到毫秒,sap要求每次调用生成不重复guid
|
||||
string millisecondTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
|
||||
|
||||
var Datuv = item.fld004949.ToString();
|
||||
|
||||
if (!string.IsNullOrEmpty(Datuv))
|
||||
{
|
||||
Datuv = item.fld004949.ToDateTime().ToString("yyyy-MM-dd");
|
||||
}
|
||||
var isreq = new SapProcessRouteIS_REQ()
|
||||
{
|
||||
ReqKeyId = "",
|
||||
BusinessId = "",
|
||||
MessageId = "",
|
||||
SndPrn = "PLM",
|
||||
RcvPrn = "SAP",
|
||||
ReqUser = await _sysConfigService.GetConfigValueByCode<string>(ConfigConst.SapUserName),
|
||||
Note1 = "",
|
||||
Note2 = "",
|
||||
Note3 = "",
|
||||
Zwbid = millisecondTimestamp,
|
||||
Matnr = item._System_objNBS,
|
||||
Werks = item.fld004522,
|
||||
Datuv = Datuv,
|
||||
Plnal = "",
|
||||
|
||||
ItemList = itemDataList
|
||||
};
|
||||
|
||||
var apiOutput = await _sapService.SapProcessRouteApi(isreq);
|
||||
string codeVal = apiOutput.code == "S" ? "成功" : "失败";
|
||||
await _obj109Rep.AsUpdateable()
|
||||
.SetColumns(it => new Obj109
|
||||
{
|
||||
fld004518 = DateTime.Now,
|
||||
fld004515 = codeVal,
|
||||
fld004517 = "N",
|
||||
fld004516 = apiOutput.msg
|
||||
})
|
||||
.Where(it => it.idRecord == item.idRecord)
|
||||
.ExecuteCommandAsync();
|
||||
var msg = apiOutput.msg;
|
||||
if (apiOutput.msg == "")
|
||||
{
|
||||
msg = "同步成功";
|
||||
}
|
||||
var output = new SapOutput()
|
||||
{
|
||||
parameter = apiOutput.parameter,
|
||||
code = codeVal,
|
||||
msg = msg,
|
||||
result = apiOutput.result
|
||||
};
|
||||
|
||||
sapOutputList.Add(output);
|
||||
}
|
||||
return sapOutputList;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,465 @@
|
||||
<template>
|
||||
<div class="projectManagement-container">
|
||||
<el-card shadow="hover"
|
||||
:body-style="{ padding: '20px 20px 16px 10px', display: 'flex', width: '100%', height: '100%', alignItems: 'start' }">
|
||||
<el-form :model="state.queryParams" ref="queryForm" :show-message="false" :inlineMessage="true"
|
||||
label-width="auto" style="flex: 1 1 0%" @submit.prevent="handleQuery">
|
||||
<el-row :gutter="10">
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="5" :xl="6" class="mb5">
|
||||
<el-form-item label="项目编号" prop="_System_objNBS">
|
||||
<el-input v-model="state.queryParams._System_objNBS" placeholder="项目编号" clearable
|
||||
@keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="5" :xl="6" class="mb5">
|
||||
<el-form-item label="项目描述" prop="fld004502">
|
||||
<el-input v-model="state.queryParams.fld004502" placeholder="项目描述" clearable
|
||||
@keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="5" :xl="6" class="mb5">
|
||||
<el-form-item label="创建时间" prop="fld004683">
|
||||
<el-date-picker type="daterange" v-model="state.queryParams.fld004683Range"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" unlink-panels />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="6" class="mb5">
|
||||
<el-button type="primary" icon="ele-Search" @click="handleQuery"
|
||||
v-auth="'projectManagement/page'" :loading="options.loading"> 查询 </el-button>
|
||||
<el-button icon="ele-Refresh" @click="resetQuery" :loading="options.loading"> 重置 </el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="full-table" shadow="hover" style="margin-top: 5px">
|
||||
<vxe-grid ref="xGrid" class="xGrid-style" v-bind="options" v-on="gridEvents">
|
||||
<template #toolbar_tools>
|
||||
<el-button style="position: absolute; left: 0" icon="ele-Promotion" size="small" text=""
|
||||
type="success" @click="batchSyncToSAP" v-auth="'projectManagement/batchSyncToSAP'"> 批量同步到SAP
|
||||
</el-button>
|
||||
</template>
|
||||
<template #row_buttons="{ row }">
|
||||
<el-tooltip content="同步BOM" placement="top">
|
||||
<el-button icon="ele-MessageBox" size="small" text="" type="primary" @click="getBOM(row)"
|
||||
v-auth="'projectManagement/getBOM'" v-if="(row.fld004514=='A'||row.fld004514=='M')&&row.fld004509=='成功'">
|
||||
同步BOM </el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="工艺路线" placement="top">
|
||||
<el-button icon="ele-MessageBox" size="small" text="" type="primary" @click="examineProcessRoute(row)"
|
||||
v-if="(row.fld004517=='A'||row.fld004517=='M')&&row.fld004509=='成功'">
|
||||
工艺路线 </el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip content="同步到ERP" placement="top">
|
||||
<el-button icon="ele-Promotion" size="small" text="" type="success" @click="syncToSAP(row)"
|
||||
v-auth="'projectManagement/syncToSAP'" v-if="row.fld004510=='A'||row.fld004510=='M'"> 同步到SAP </el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</vxe-grid>
|
||||
</el-card>
|
||||
|
||||
<!-- 添加 drawer 抽屉 -->
|
||||
<el-drawer v-model="showBom" title="BOM 详情" :direction="'rtl'" :visible.sync="false" size="50%">
|
||||
<!-- 这里可以放置 BOM 的具体内容 -->
|
||||
<el-card class="full-table" shadow="hover" style="margin-top: 5px;height: 100%;">
|
||||
<el-form :model="stateBom.queryParams" ref="queryForm" :show-message="false" :inlineMessage="true"
|
||||
label-width="auto" style="flex: 1 1 0%" @submit.prevent="handleQueryBom">
|
||||
<el-input v-model="stateBom.queryParams.ParentGuid" placeholder="父GUID" @click="handleQueryBom" />
|
||||
</el-form>
|
||||
|
||||
<vxe-grid ref="bomxGrid" v-bind="bomOptions" v-on="gridEvents">
|
||||
<template #toolbar_tools>
|
||||
<el-button style="position: absolute; left: 0" icon="ele-Promotion" size="small" text=""
|
||||
type="success" @click="syncToSAPBom" v-auth="'projectManagement/syncToSAPBom'"> BOM同步到SAP
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-grid>
|
||||
</el-card>
|
||||
</el-drawer>
|
||||
|
||||
<el-drawer v-model="showProcessRoute" title="工艺路线" :direction="'rtl'" :visible.sync="false" size="50%">
|
||||
<!-- 这里可以放置 BOM 的具体内容 -->
|
||||
<el-card class="full-table" shadow="hover" style="margin-top: 5px;height: 100%;">
|
||||
<el-form :model="stateProcessRoute.queryParams" ref="queryForm" :show-message="false" :inlineMessage="true"
|
||||
label-width="auto" style="flex: 1 1 0%" @submit.prevent="handleQueryProcessRoute">
|
||||
<el-input v-model="stateProcessRoute.queryParams.ParentGuid" placeholder="父GUID" @click="handleQueryProcessRoute" />
|
||||
</el-form>
|
||||
|
||||
<vxe-grid ref="processRoutexGrid" v-bind="processRouteOptions" v-on="gridEvents">
|
||||
<template #toolbar_tools>
|
||||
<el-button style="position: absolute; left: 0" icon="ele-Promotion" size="small" text=""
|
||||
type="success" @click="syncToSAPprocessRoute" v-auth="'projectManagement/syncToSAPProcessRoute'"> 工艺路线同步到SAP
|
||||
</el-button>
|
||||
</template>
|
||||
</vxe-grid>
|
||||
</el-card>
|
||||
</el-drawer>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup name="projectManagement">
|
||||
import { onMounted, reactive, ref } from 'vue';
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
import { auth } from '/@/utils/authFunction';
|
||||
|
||||
import { VxeGridInstance, VxeGridListeners, VxeGridPropTypes } from 'vxe-table';
|
||||
import { useVxeTable } from '/@/hooks/useVxeTableOptionsHook';
|
||||
import { Local } from '/@/utils/storage';
|
||||
|
||||
import { formatDate } from '/@/utils/formatTime';
|
||||
import { PageProjectManagement, SyncToSAPProjectManagement, GetBOMProjectManagement, BatchSyncToSAPProjectManagement, SyncToSAPBomProjectManagement ,GetetProcessRouteProjectManagement,SyncToSAPProcessRouteProjectManagement} from '/@/api/materialManagement/projectManagement';
|
||||
import { disable } from 'ol/rotationconstraint';
|
||||
|
||||
// 子窗口对象
|
||||
const xGrid = ref<VxeGridInstance>();
|
||||
const editDialogRef = ref();
|
||||
|
||||
let bomTypeList: any;
|
||||
|
||||
// 变量
|
||||
const state = reactive({
|
||||
showAdvanceQueryUI: false,
|
||||
queryParams: {
|
||||
searchKey: undefined,
|
||||
_System_objNBS: undefined,
|
||||
fld004502: undefined,
|
||||
fld004683: undefined,
|
||||
fld004683Range: undefined,
|
||||
},
|
||||
localPageParam: {
|
||||
pageSize: 50 as number,
|
||||
defaultSort: { field: 'createTime', order: 'asc', descStr: 'desc' },
|
||||
},
|
||||
visible: false,
|
||||
title: '',
|
||||
});
|
||||
|
||||
// 重置操作
|
||||
const resetQuery = async () => {
|
||||
state.queryParams.searchKey = undefined,
|
||||
state.queryParams._System_objNBS = undefined,
|
||||
state.queryParams.fld004502 = undefined,
|
||||
state.queryParams.fld004683 = undefined,
|
||||
await xGrid.value?.commitProxy('reload');
|
||||
};
|
||||
|
||||
// 表格事件
|
||||
const gridEvents: VxeGridListeners = {
|
||||
// 只对 pager-config 配置时有效,分页发生改变时会触发该事件
|
||||
async pageChange({ pageSize }) {
|
||||
state.localPageParam.pageSize = pageSize;
|
||||
Local.set(localPageParamKey, state.localPageParam);
|
||||
},
|
||||
// 当排序条件发生变化时会触发该事件
|
||||
async sortChange({ field, order }) {
|
||||
state.localPageParam.defaultSort = { field: field, order: order!, descStr: 'desc' };
|
||||
Local.set(localPageParamKey, state.localPageParam);
|
||||
},
|
||||
};
|
||||
|
||||
// 本地存储参数
|
||||
const localPageParamKey = 'localPageParam:projectManagement';
|
||||
|
||||
// 表格参数配置
|
||||
const options = useVxeTable(
|
||||
{
|
||||
id: 'projectManagement',
|
||||
name: '项目管理',
|
||||
columns: [
|
||||
{ type: 'checkbox', title: '', width: 60},
|
||||
{ type: 'seq', title: '序号', width: 60 },
|
||||
{ field: '_System_objNBS', title: '项目编号', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: '_System_ObjDescription', title: '项目名称', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004683', title: '创建时间', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004509', title: '物料同步状态', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004508', title: '物料同步时间', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004510', title: '物料同步标识', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004507', title: '物料同步信息', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
|
||||
{ field: 'fld004511', title: 'BOM同步状态', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004513', title: 'BOM同步时间', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004514', title: 'BOM同步标识', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004512', title: 'BOM同步信息', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
|
||||
{ field: 'fld004515', title: '工艺同步状态', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004518', title: '工艺同步时间', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004517', title: '工艺同步标识', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'fld004516', title: '工艺同步信息', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
|
||||
{ title: '操作', fixed: 'right', width: 300, showOverflow: true, slots: { default: 'row_buttons' } },
|
||||
],
|
||||
},
|
||||
// vxeGrid配置参数(此处可覆写任何参数),参考vxe-table官方文档
|
||||
{
|
||||
// 代理配置
|
||||
proxyConfig: { autoLoad: true, ajax: { query: ({ page, sort }) => handleQueryApi(page, sort) } },
|
||||
// 排序配置
|
||||
sortConfig: { defaultSort: Local.get(localPageParamKey)?.defaultSort || state.localPageParam.defaultSort },
|
||||
// 分页配置
|
||||
pagerConfig: { pageSize: Local.get(localPageParamKey)?.pageSize || state.localPageParam.pageSize },
|
||||
// 工具栏配置
|
||||
toolbarConfig: { export: false },
|
||||
// 行设置
|
||||
// rowConfig: { height: 80 },
|
||||
}
|
||||
);
|
||||
|
||||
// 页面初始化
|
||||
onMounted(() => {
|
||||
});
|
||||
|
||||
// 查询api
|
||||
const handleQueryApi = async (page: VxeGridPropTypes.ProxyAjaxQueryPageParams, sort: VxeGridPropTypes.ProxyAjaxQuerySortCheckedParams) => {
|
||||
const params = Object.assign(state.queryParams, { page: page.currentPage, pageSize: page.pageSize, field: sort.field, order: sort.order, descStr: 'desc' });
|
||||
var data = PageProjectManagement(params)
|
||||
return data;
|
||||
};
|
||||
|
||||
// 查询操作
|
||||
const handleQuery = async (reset = false) => {
|
||||
options.loading = true;
|
||||
await xGrid.value?.commitProxy('query');
|
||||
options.loading = false;
|
||||
};
|
||||
|
||||
// 同步到SAP
|
||||
const syncToSAP = async (row: any) => {
|
||||
options.loading = true;
|
||||
ElMessageBox.confirm(`确定要同步物料吗?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
})
|
||||
.then(async () => {
|
||||
var data = await SyncToSAPProjectManagement(row);
|
||||
await handleQuery();
|
||||
if (data.data.result.code == "成功") {
|
||||
ElMessage.success("同步成功");
|
||||
} else {
|
||||
ElMessage.error("同步失败");
|
||||
}
|
||||
})
|
||||
.catch(() => { });
|
||||
options.loading = false;
|
||||
|
||||
};
|
||||
|
||||
//物料批量同步到SAP
|
||||
const batchSyncToSAP = async () => {
|
||||
options.loading = true;
|
||||
var data = xGrid.value?.getCheckboxRecords();
|
||||
|
||||
ElMessageBox.confirm(`确定要批量同步物料吗?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
})
|
||||
.then(async () => {
|
||||
var output = await BatchSyncToSAPProjectManagement(data);
|
||||
await handleQuery();
|
||||
var succeed = 0;
|
||||
var error = 0;
|
||||
for (let i = 0; i < output.data.result.length; i++) {
|
||||
var code = output.data.result[i].code
|
||||
if (code == "成功") {
|
||||
succeed++
|
||||
} else {
|
||||
error++
|
||||
}
|
||||
}
|
||||
ElMessageBox.alert("同步成功:" + succeed + ";" + "同步失败:" + error, '批量同步结果', {
|
||||
// 如果你想禁用它的自动对焦
|
||||
// autofocus: false,
|
||||
confirmButtonText: 'OK'
|
||||
})
|
||||
})
|
||||
.catch(() => { });
|
||||
options.loading = false;
|
||||
}
|
||||
|
||||
// 变量
|
||||
const stateBom = reactive({
|
||||
showAdvanceQueryUI: false,
|
||||
queryParams: {
|
||||
PartNumber: undefined,
|
||||
Description: undefined,
|
||||
ParentGuid: undefined
|
||||
},
|
||||
localPageParam: {
|
||||
pageSize: 50 as number,
|
||||
defaultSort: { field: 'createTime', order: 'asc', descStr: 'desc' },
|
||||
},
|
||||
visible: false,
|
||||
title: '',
|
||||
});
|
||||
const showBom = ref(false);
|
||||
// 查看BOM
|
||||
const getBOM = async (row: any) => {
|
||||
stateBom.queryParams.ParentGuid = row.recordGuid;
|
||||
showBom.value = true;
|
||||
await handleQueryBom();
|
||||
};
|
||||
|
||||
// 本地存储参数
|
||||
const localPageParamKeyBom = 'localPageParam:projectManagementBom';
|
||||
|
||||
// 表格参数配置
|
||||
const bomOptions = useVxeTable(
|
||||
{
|
||||
id: 'projectManagementBom',
|
||||
name: '项目管理',
|
||||
columns: [
|
||||
{ type: 'seq', title: '序号', width: 60 },
|
||||
{ field: 'partNumber', title: '物料编码', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'description', title: '物料描述', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'quantity', title: '数量', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
],
|
||||
},
|
||||
// vxeGrid配置参数(此处可覆写任何参数),参考vxe-table官方文档
|
||||
{
|
||||
// 代理配置
|
||||
proxyConfig: { autoLoad: true, ajax: { query: ({ page, sort }) => handleBOMQueryApi(page, sort) } },
|
||||
// 排序配置
|
||||
sortConfig: { defaultSort: Local.get(localPageParamKeyBom)?.defaultSort || stateBom.localPageParam.defaultSort },
|
||||
// 分页配置
|
||||
pagerConfig: { pageSize: Local.get(localPageParamKeyBom)?.pageSize || stateBom.localPageParam.pageSize },
|
||||
// 工具栏配置
|
||||
toolbarConfig: { export: false },
|
||||
// 行设置
|
||||
// rowConfig: { height: 80 },
|
||||
}
|
||||
);
|
||||
|
||||
// BOM 查询 API
|
||||
const handleBOMQueryApi = async (page: VxeGridPropTypes.ProxyAjaxQueryPageParams, sort: VxeGridPropTypes.ProxyAjaxQuerySortCheckedParams) => {
|
||||
const params = Object.assign(stateBom.queryParams, { page: page.currentPage, pageSize: page.pageSize, field: sort.field, order: sort.order, descStr: 'desc' });
|
||||
var data = GetBOMProjectManagement(params);
|
||||
return data;
|
||||
};
|
||||
|
||||
const bomxGrid = ref<VxeGridInstance>();
|
||||
|
||||
const handleQueryBom = async (reset = false) => {
|
||||
bomOptions.loading = true;
|
||||
await bomxGrid.value?.commitProxy('query');
|
||||
bomOptions.loading = false;
|
||||
};
|
||||
|
||||
//Bom同步到sap
|
||||
const syncToSAPBom = async () => {
|
||||
options.loading = true;
|
||||
var data = bomxGrid.value?.getTableData().fullData;
|
||||
ElMessageBox.confirm(`确定要同步BOM吗?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
})
|
||||
.then(async () => {
|
||||
var output = await SyncToSAPBomProjectManagement(data);
|
||||
await handleQuery();
|
||||
if (output.data.result.code == "成功") {
|
||||
ElMessage.success("同步成功");
|
||||
} else {
|
||||
ElMessage.error("同步失败");
|
||||
}
|
||||
})
|
||||
.catch(() => { });
|
||||
options.loading = false;
|
||||
}
|
||||
|
||||
// 工艺路线查询操作
|
||||
//父Guid
|
||||
const processRoutexGrid = ref<VxeGridInstance>();
|
||||
// 查看BOM
|
||||
const examineProcessRoute = async (row: any) => {
|
||||
stateProcessRoute.queryParams.ParentGuid = row.recordGuid;
|
||||
showProcessRoute.value = true;
|
||||
await handleQueryProcessRoute();
|
||||
};
|
||||
|
||||
const showProcessRoute = ref(false);
|
||||
|
||||
// 变量
|
||||
const stateProcessRoute = reactive({
|
||||
showAdvanceQueryUI: false,
|
||||
queryParams: {
|
||||
PartNumber: undefined,
|
||||
Description: undefined,
|
||||
ParentGuid: undefined
|
||||
},
|
||||
localPageParam: {
|
||||
pageSize: 50 as number,
|
||||
defaultSort: { field: 'createTime', order: 'asc', descStr: 'desc' },
|
||||
},
|
||||
visible: false,
|
||||
title: '',
|
||||
});
|
||||
|
||||
// 本地存储参数
|
||||
const localPageParamKeyProcessRoute = 'localPageParam:projectManagementProcessRoute';
|
||||
|
||||
// 表格参数配置
|
||||
const processRouteOptions = useVxeTable(
|
||||
{
|
||||
id: 'projectManagementProcessRoute',
|
||||
name: '项目管理',
|
||||
columns: [
|
||||
{ type: 'seq', title: '序号', width: 60 },
|
||||
{ field: 'partNumber', title: '物料编码', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'description', title: '物料描述', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
{ field: 'quantity', title: '数量', minWidth: 100, showOverflow: 'tooltip', sortable: false },
|
||||
],
|
||||
},
|
||||
// vxeGrid配置参数(此处可覆写任何参数),参考vxe-table官方文档
|
||||
{
|
||||
// 代理配置
|
||||
proxyConfig: { autoLoad: true, ajax: { query: ({ page, sort }) => handleProcessRouteQueryApi(page, sort) } },
|
||||
// 排序配置
|
||||
sortConfig: { defaultSort: Local.get(localPageParamKeyProcessRoute)?.defaultSort || stateBom.localPageParam.defaultSort },
|
||||
// 分页配置
|
||||
pagerConfig: { pageSize: Local.get(localPageParamKeyProcessRoute)?.pageSize || stateBom.localPageParam.pageSize },
|
||||
// 工具栏配置
|
||||
toolbarConfig: { export: false },
|
||||
// 行设置
|
||||
// rowConfig: { height: 80 },
|
||||
}
|
||||
);
|
||||
|
||||
// 工艺路线 查询 API
|
||||
const handleProcessRouteQueryApi = async (page: VxeGridPropTypes.ProxyAjaxQueryPageParams, sort: VxeGridPropTypes.ProxyAjaxQuerySortCheckedParams) => {
|
||||
const params = Object.assign(stateProcessRoute.queryParams, { page: page.currentPage, pageSize: page.pageSize, field: sort.field, order: sort.order, descStr: 'desc' });
|
||||
var data = GetetProcessRouteProjectManagement(params);
|
||||
return data;
|
||||
};
|
||||
|
||||
const handleQueryProcessRoute = async (reset = false) => {
|
||||
processRouteOptions.loading = true;
|
||||
await processRoutexGrid.value?.commitProxy('query');
|
||||
processRouteOptions.loading = false;
|
||||
};
|
||||
|
||||
//工艺路线同步到sap
|
||||
const syncToSAPprocessRoute = async () => {
|
||||
options.loading = true;
|
||||
var data = processRoutexGrid.value?.getTableData().fullData;
|
||||
ElMessageBox.confirm(`确定要同步工艺路线吗?`, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
})
|
||||
.then(async () => {
|
||||
var output = await SyncToSAPProcessRouteProjectManagement(data);
|
||||
await handleQuery();
|
||||
if (output.data.result.code == "成功") {
|
||||
ElMessage.success("同步成功");
|
||||
} else {
|
||||
ElMessage.error("同步失败");
|
||||
}
|
||||
})
|
||||
.catch(() => { });
|
||||
options.loading = false;
|
||||
}
|
||||
|
||||
|
||||
</script>
|
Loading…
Reference in New Issue
Block a user