Browse Source

创建库存导出任务

master
zhouhongjun 12 months ago
parent
commit
b720dc93f8
  1. 182
      code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/models/compare/vmi-job.js
  2. 109
      code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/models/vmi/balance-sum.js
  3. 32
      code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/router/business.js
  4. 75
      code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/views/compare/vmi-job.js
  5. 2
      code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/views/compare/vmi.js
  6. 44
      code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/views/vmi/balance-sum.js
  7. 16
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/Controls/CentralizedControlAppService.cs
  8. 2
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/Controls/CentralizedControl.cs

182
code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/models/compare/vmi-job.js

@ -0,0 +1,182 @@
import { version } from "../_options.js";
const version2 = Object.assign({}, version);
const year = {
title: "期间",
type: "string",
input: "select",
url: "settleaccount/centralized-control/get-all-year",
value: "year",
label: "year",
clearable: true,
};
const defaultCompareSchema = {
title: "数据比对",
properties: {
version: Object.assign(year, { rules: [{ required: true }] }),
},
};
const stateName = {
title: "状态",
type: "string",
input: "select",
clearable: true,
options: [
{ label: "执行完成(任务成功)", value: "Succeeded" },
{ label: "执行完成(任务失败)", value: "Failed" },
{ label: "执行中", value: "Processing" },
{ label: "等待执行", value: "Enqueued" },
],
};
const schema = {
title: "数据对比",
type: "object",
properties: {
type: {
title: "版本号",
type: "string",
},
taskId: {
title: "单据流水号",
type: "string",
},
email: {
title: "创建人",
type: "string",
},
createdAt: {
title: "创建时间",
type: "DateTime",
},
remark: {
title: "说明",
type: "string",
},
stateName,
},
};
const nameList = {
JisBBAC: "JisBBAC结算与发运数据对比",
JisHBPO: "JisHBPO结算与发运数据对比",
ZhiGongJianBBAC: "直供件BBAC结算与发运数据对比",
ZhiGongJianHBPO: "直供件HBPO结算与发运数据对比",
MaiDanJianBBAC: "买单件BBAC结算与发运数据对比",
MaiDanJianHBPO: "买单件HBPO结算与发运数据对比",
BeiJian: "备件结算与发运数据对比",
YinDuJian: "印度件结算与发运数据对比",
};
export default function (businessType, type) {
let compareService = "report/get-balance-sum";
let title = null;
let name = "生成库存余额";
const compareSchema = Object.assign({}, defaultCompareSchema);
if (type === "fa-yun") {
delete compareSchema.properties["downLineDateTime"];
if (businessType === "JisBBAC") {
compareService = "compare/edi-se-compare";
name = "JisBBACEDI与发运数据对比";
} else if (businessType === "JisHBPO") {
compareService = "compare/edi-se-compare";
name = "JisHBPOEDI与发运数据对比";
}
} else {
// if (businessType === "JisBBAC") {
// compareService = "compare/sa-se-compare";
// } else if (businessType === "JisHBPO") {
// compareService = "compare/sa-se-compare";
// } else {
// compareService = "compare/sa-se-compare";
// }
// name = nameList[businessType];
}
const queryUrl = "settleaccount/Job/list";
const deleteUrl = "settleaccount/Job/delete";
const compareUrl = `settleaccount/${compareService}`;
const queryMethod = "POST";
const deleteMethod = "POST";
const compareMethod = "POST";
return {
title,
name,
query: {
url: queryUrl,
method: queryMethod,
autoSubmit: true,
disableQueryOnLoad: false,
schema: {
title: "数据对比",
type: "object",
properties: {
type: Object.assign({ defaultSelected: false }, year),
name: {
type: "string",
hidden: true,
default: name,
},
businessType: {
type: "string",
hidden: true,
},
filters: {
type: "array",
hidden: true,
items: {
type: "object",
properties: {
logic: {
type: "int",
},
column: {
type: "string",
},
action: {
type: "int",
},
value: {
type: "string",
},
},
},
default: [],
},
skipCount: {
hidden: true,
default: 0,
},
maxResultCount: {
hidden: true,
default: 10,
},
sorting: {
hidden: true,
default: "createdAt",
},
},
},
},
table: {
schema: schema,
},
edit: {
deleteUrl,
compareUrl,
deleteMethod,
compareMethod,
schema: schema,
},
compare: {
schema: compareSchema,
},
};
}

109
code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/models/vmi/balance-sum.js

@ -0,0 +1,109 @@
import useVmi from "./vmi.js";
const schema = useVmi();
const baseUrl = "settleaccount/vmi";
const queryUrl = `${baseUrl}/balance`;
const detailsUrl = `${baseUrl}/get/%s`;
const createUrl = `${baseUrl}/create`;
const updateUrl = `${baseUrl}/update/%s`;
const deleteUrl = `${baseUrl}/delete-list`;
const importUrl = `${baseUrl}/code-setting-upload-excel-import`;
const exportUrl = `${baseUrl}/balance-export`;
const queryMethod = "POST";
const detailsMethod = "POST";
const createMethod = "POST";
const updateMethod = "POST";
const deleteMethod = "POST";
const importMethod = "POST";
const exportMethod = "POST";
export default function () {
return {
query: {
url: queryUrl,
method: queryMethod,
hasFilter: true,
schema: {
title: "寄售库存",
type: "object",
properties: {
filters: {
title: "项目",
type: "array",
hidden: true,
items: {
type: "object",
properties: {
logic: {
type: "int",
},
column: {
type: "string",
},
action: {
type: "int",
},
value: {
type: "string",
},
},
},
default: [
{
logic: "and",
column: "erpToLoc",
action: "like",
value: null,
readOnly: true,
},
{
logic: "and",
column: "realPartCode",
action: "like",
value: null,
readOnly: true,
},
{
logic: "and",
column: "vinCode",
action: "like",
value: null,
readOnly: true,
},
],
},
skipCount: {
hidden: true,
default: 0,
},
maxResultCount: {
hidden: true,
default: 10,
},
sorting: {
hidden: true,
},
},
},
},
table: {
schema: schema,
},
edit: {
detailsUrl,
createUrl,
updateUrl,
deleteUrl,
importUrl,
exportUrl,
detailsMethod,
createMethod,
updateMethod,
deleteMethod,
importMethod,
exportMethod,
schema: schema,
},
};
}

32
code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/router/business.js

@ -50,6 +50,19 @@ function createCompareFaYun(path, business, client, title = "EDI与发运对比"
}; };
} }
function createCompareVmi(path, business, client, title = "库存余额任务") {
return {
...createPage(path, `title=${title}&businessType=${business}&client=${client}`),
component: "/compare/vmi",
children: [
createButton("query", "title=查询&isTop=true"),
createButton("compare", "title=生成数据&isTop=true"),
createButton("delete", "title=删除&isTop=true"),
createButton("export", "title=下载&pattern=file&disabled=o=>o.stateName!='Succeeded'"),
],
};
}
function createCompareJieSuan(path, business, client, title = "EDI、发运与结算比对") { function createCompareJieSuan(path, business, client, title = "EDI、发运与结算比对") {
return { return {
...createPage(path, `title=${title}&businessType=${business}&client=${client}`), ...createPage(path, `title=${title}&businessType=${business}&client=${client}`),
@ -414,6 +427,25 @@ export default [
...createPage("balance", "title=库存余额查询"), ...createPage("balance", "title=库存余额查询"),
children: [createButton("query", "title=查询&isTop=true"), createButton("export", "title=导出&isTop=true&pattern=paged")], children: [createButton("query", "title=查询&isTop=true"), createButton("export", "title=导出&isTop=true&pattern=paged")],
}, },
// {
// ...createPage("balance-sum", "title=库存余额报表查询"),
// children:
// [
// createButton("query", "title=查询&isTop=true"),
// createButton("compare", "title=生成比对&isTop=true"),
// createButton("delete", "title=删除&isTop=true"),
// createButton("export", "title=下载&pattern=file&disabled=o=>o.stateName!='Succeeded'"),
// ],
// },
{
...createRoute("contrast", "title=库存任务"),
children: [
createCompareVmi("bbac_sa_detail_jobservice", "Vmi", "bbac", "库存余额任务"),
],
},
{ {
...createPage("sum", "title=库存余额汇总"), ...createPage("sum", "title=库存余额汇总"),
children: [createButton("query", "title=查询&isTop=true"), createButton("export", "title=导出&isTop=true&pattern=paged")], children: [createButton("query", "title=查询&isTop=true"), createButton("export", "title=导出&isTop=true&pattern=paged")],

75
code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/views/compare/vmi-job.js

@ -0,0 +1,75 @@
import AppList from "../../components/list/index.js";
import AppForm from "../../components/form/index.js";
import html from "html";
import { useRoute } from "vue-router";
import useConfig from "../../models/compare/vmi-job.js";
import { ref, onMounted, onUnmounted } from "vue";
import { schemaToModel } from "../../utils/index.js";
import request from "../../request/index.js";
export default function (type) {
return {
components: { AppList, AppForm },
template: html`<app-list ref="appListRef" :config="config" @command="onCommand" />
<el-dialog v-model="dialogVisable" align-center :close-on-click-modal="false" destroy-on-close style="width:40%;height:50%;">
<template #header> <span class="el-dialog__title"> 库存余额任务 </span> </template>
<el-scrollbar>
<app-form ref="formRef" :mode="create" label-position="left" :schema="schema" v-model="model" :hideButton="true" @submit="submit" />
</el-scrollbar>
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="submit"> {{$t('confirm')}} </el-button>
</span>
</template>
</el-dialog>`,
styles: html`<style>
.el-dialog__body {
height: calc(100% - 120px);
}
</style>`,
setup() {
const route = useRoute();
const businessType = route.meta.businessType;
const dialogVisable = ref(false);
const loading = ref(false);
const config = useConfig(businessType, type);
const schema = config.compare.schema;
const defaultModel = schemaToModel(schema);
const model = ref(null);
const formRef = ref(null);
const onCommand = async (item, rows) => {
console.log(item.path, item, rows);
if (item.path === "compare") {
model.value = Object.assign({}, defaultModel);
dialogVisable.value = true;
}
};
const submit = async () => {
try {
const valid = await formRef.value.validate();
if (valid) {
loading.value = true;
}
const url = config.edit.compareUrl;
const data = Object.assign(model.value);
const result = await request(url, data, { method: "POST" }, true);
if (!result.errors) {
dialogVisable.value = false;
await load();
}
} catch (error) {
console.log(error);
} finally {
loading.value = false;
}
};
//
const appListRef = ref(null);
const event = "SaSeCompare";
onMounted(() => PubSub.subscribe(event, async () => await appListRef.value.load()));
onUnmounted(() => PubSub.unsubscribe(event));
return { config, onCommand, appListRef, dialogVisable, loading, schema, model, formRef, submit };
},
};
}

2
code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/views/compare/vmi.js

@ -0,0 +1,2 @@
import useCompare from "./vmi-job.js";
export default useCompare("fa-yun");

44
code/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/wwwroot/views/vmi/balance-sum.js

@ -0,0 +1,44 @@
import AppList from "../../components/list/index.js";
import html from "html";
import { ref, onMounted, onUnmounted } from "vue";
import { useRoute } from "vue-router";
import { ElNotification } from "element-plus";
import request from "../../request/index.js";
export default {
components: { AppList },
template: html`<app-list v-if="config" :config="config" @command="onCommand" />`,
setup() {
const config = ref(null);
const route = useRoute();
const onCommand = async (item, rows) => {
console.log(item.path, item, rows);
};
const showMessage = async (data) => {
await ElNotification.closeAll();
ElNotification({
position: "bottom-right",
title: "提示",
message: `待同步库存数量: ${data}`,
duration: 0,
});
};
const event = "VmiBalance";
onMounted(async () => {
const model = "vmi/balance";
const useConfig = (await import(`../../models/${model}.js`)).default;
config.value = useConfig(route.meta?.businessType, route.meta);
const result = await request("settleaccount/vmi-async-message/get-message-count", null, { method: "POST" });
if (!result.errors) {
// showMessage(result.data);
}
PubSub.subscribe(event, async (_, data) => {
if (route.path === "/vmi/balance") {
// showMessage(data);
}
});
});
onUnmounted(() => PubSub.unsubscribe(event));
return { config, onCommand };
},
};

16
code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/Controls/CentralizedControlAppService.cs

@ -75,6 +75,22 @@ namespace Win.Sfs.SettleAccount.Entities.Controls
return new ListResultDto<CentralizedControlDto>(dtos); return new ListResultDto<CentralizedControlDto>(dtos);
} }
[HttpPost]
public async Task<ListResultDto<CentralizedControlDto>> GetAllYearAsync()
{
var entities = await _repository.GetAllAsync(true).ConfigureAwait(false);
var year_entities = entities.OrderBy(t => t.Year).ToList().Select(t=>t.Year).Distinct().ToList();
List<CentralizedControl> year_list=new List<CentralizedControl>();
foreach (var item in year_entities)
{
CentralizedControl year = new CentralizedControl();
year.Year = item;
year_list.Add(year);
}
var dtos = ObjectMapper.Map<List<CentralizedControl>, List<CentralizedControlDto>>(year_list);
return new ListResultDto<CentralizedControlDto>(dtos);
}
/// <summary> /// <summary>
/// 获取列表 /// 获取列表
/// </summary> /// </summary>

2
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/Controls/CentralizedControl.cs

@ -11,7 +11,7 @@ namespace Win.Sfs.SettleAccount.Entities.Controls
/// <summary> /// <summary>
///年度 ///年度
/// </summary> /// </summary>
public string Year { get; protected set; } public string Year { get; set; }
/// <summary> /// <summary>
/// 期间 /// 期间

Loading…
Cancel
Save