zs
2025-05-16 7d410c1f0d4e36f8281ce2277f355c9abf1c231b
Merge branch 'master' of http://222.71.245.114:9086/r/HIA24016N_PipeLineDemo
已添加5个文件
已修改42个文件
3240 ■■■■■ 文件已修改
CommonDLL/CmsQueryExtensions.dll 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/.vscode/settings.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/LMesOperateController.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrder.ts 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrderQueryDrawer.tsx 693 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/CallMaterialOrder.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/Service/CallMaterialOrder.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Views/Pages/Dialog/CallMaterialOrderQueryDrawer/CallMaterialOrderQueryDrawer.tsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordDrawer.tsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordQueryDrawer.tsx 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/CallMaterialOrderRecord.tsx 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/Config.ts 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/Dialog/CallMaterialOrderRecordQueryDrawer/CallMaterialOrderRecordQueryDrawer.tsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/GetCallMaterialOrderInput.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/MyCallMaterialOutput.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/CallMaterialByDataIdentifierInput.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/CMS.Plugin.PipeLineLems.Application.csproj 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs 658 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs 647 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/CMS.Plugin.PipeLineLems.csproj 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/CMSPluginEntry.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecord导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrder导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/queryExtensions/CmsQueryExtensions/Entitys/CmsApiResponse.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/queryExtensions/CmsQueryExtensions/Utils/HttpApiRequest.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CommonDLL/CmsQueryExtensions.dll
Binary files differ
HIAWms/hiawms_web/.vscode/settings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
{}
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/LMesOperateController.cs
@@ -1,6 +1,7 @@
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CmsQueryExtensions.Entitys;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
@@ -32,9 +33,29 @@
        /// <returns></returns>
        [HttpPost]
        [Route("LMesCallMaterial")]
        public async Task<List<CallMaterialOutput>> LMesCallMaterialAsync(List<LMesCallMaterialInput> input)
        public async Task<CmsApiResponse<List<CallMaterialOutput>>> LMesCallMaterialAsync(List<LMesCallMaterialInput> input)
        {
            return await _mesOperateAppService.LMesCallMaterialAsync(input);
            try
            {
                var list = await _mesOperateAppService.LMesCallMaterialAsync(input);
                return new CmsApiResponse<List<CallMaterialOutput>>()
                {
                    Data = list,
                    Code = 200,
                    Message = "LMes叫料成功"
                };
            }
            catch (Exception ex)
            {
                //throw; //不要抛出异常,否则对方会接收失败呢
                return new CmsApiResponse<List<CallMaterialOutput>>()
                {
                    Data = null,
                    Code = 500,
                    Message = ex.Message
                };
            }
        }
    }
}
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrder.ts
@@ -160,7 +160,9 @@
      `是否要叫料${names.length ? names.join(',') : ''}` 
    ).then(async () => { 
      const ids = selection.value.map((item: { id: string }) => item.id) 
      await callMaterialOrder.callMaterialByDataIdentifier(ids[0])
      await callMaterialOrder.callMaterialByDataIdentifier({
        id:ids[0]
      })
      ElMessage.success('叫料成功') 
      tableRef.value.getList() 
    }) 
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Controllers/CallMaterialOrderQueryDrawer.tsx
@@ -1,293 +1,400 @@
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { CallMaterialOrderDrawer } from '../Models/CallMaterialOrderDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
export const useCallMaterialOrderQueryDrawer = (props: any, ctx?: any) => {
  const callMaterialOrderDrawer = injectModel<CallMaterialOrderDrawer>('CallMaterialOrderDrawer')
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
    const datePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="daterange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const dateTimePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="datetimerange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * é«˜çº§æŸ¥è¯¢çš„form字段
   */
  const formItems = reactive([
                    {
                   label: '原料标识',
                   prop: 'dataIdentifier',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入原料标识',
                },
                {
                   label: '原料型号',
                   prop: 'materialMode',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入原料型号',
                },
                {
                   label: '叫料状态',
                   prop: 'callMaterialStatus',
                   el: 'select',
                   clearable:true,
                   option: [],
                   //disabled: disabled,
                   placeholder: '请输入叫料状态',
                },
                {
                   label: '叫料数量',
                   prop: 'quantity',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(inputNumber, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   step: 1,
                   precision: 0,
                   //disabled: disabled,
                   placeholder: '请输入叫料数量',
                },
                {
                   label: 'WMS返回结果',
                   prop: 'wmsRetResult',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入WMS返回结果',
                },
                {
                   label: 'WMS任务号',
                   prop: 'wmsTaskNo',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入WMS任务号',
                },
                {
                   label: '创建时间',
                   prop: 'creationTime',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(dateTimePickerRange, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   //disabled: disabled,
                   placeholder: '请输入创建时间',
                },
                {
                   label: '修改时间',
                   prop: 'lastModificationTime',
                   el: (props: any, { attrs }: SetupContext) => {
                     return h(dateTimePickerRange, {
                       ...props,
                       clearable: true,
                       ...attrs,
                     })
                   },
                   width: '100%',
                   //disabled: disabled,
                   placeholder: '请输入修改时间',
                },
                {
                   label: '创建人',
                   prop: 'creatorName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入创建人',
                },
                {
                   label: '修改人',
                   prop: 'lastModifierName',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入修改人',
                },
                {
                   label: '备注',
                   prop: 'remark',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入备注',
                },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData=()=>{
    const data = {
      dataIdentifier: formData.value.dataIdentifier || '',
materialMode: formData.value.materialMode || '',
callMaterialStatus: formData.value.callMaterialStatus || '',
quantity: formData.value.quantity || '',
wmsRetResult: formData.value.wmsRetResult || '',
wmsTaskNo: formData.value.wmsTaskNo || '',
creationTime: formData.value.creationTime || '',
lastModificationTime: formData.value.lastModificationTime || '',
creatorName: formData.value.creatorName || '',
lastModifierName: formData.value.lastModifierName || '',
remark: formData.value.remark || '',
    }
    return data;
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      visible.value = false
      const data =commonGetFormData();
      ctx.emit('close', data)
    }
  }
  /**
   * ç¡®è®¤æŸ¥è¯¢
   */
  const onConfirmQuery = async () => {
    const data =commonGetFormData();
    ctx.emit('confirmQuery', data)
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    formData.value.dataIdentifier = ''
formData.value.materialMode = ''
formData.value.callMaterialStatus = ''
formData.value.quantity = ''
formData.value.wmsRetResult = ''
formData.value.wmsTaskNo = ''
formData.value.deletionTime = ''
formData.value.operationRemark = ''
formData.value.deleteRemark = ''
formData.value.remark = ''
formData.value.extraField1 = ''
formData.value.extraField2 = ''
formData.value.extraField3 = ''
    //向父组件发送自定义事件
    ctx.emit('restQuery');
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const callMaterialStatusEnumEnum = await callMaterialOrderDrawer.getWmsEnumData({
 EnumName: 'CallMaterialStatusEnum',
})
updateFormItemOptions('callMaterialStatus', callMaterialStatusEnumEnum)
  }
  commonQueryEnumForFrom()
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}
import {
  ref,
  onMounted,
  reactive,
  computed,
  Ref,
  watch,
  SetupContext,
  h,
} from 'vue'
import { injectModel } from '@/libs/Provider/Provider'
import { CallMaterialOrderDrawer } from '../Models/CallMaterialOrderDrawer'
import { ElMessage } from 'element-plus'
import isEqual from 'lodash/isEqual'
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
import { cloneDeep } from 'lodash'
// å¼•入公共选项配置
import {
  FILTER_MODE_OPTIONS_STRING,
  FILTER_MODE_OPTIONS_NUM,
  FILTER_MODE_OPTIONS_BOOL,
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions'
import { BOOLEAN_OPTIONS } from '@/utils/commonOptionConstants'
export const useCallMaterialOrderQueryDrawer = (props: any, ctx?: any) => {
  const callMaterialOrderDrawer = injectModel<CallMaterialOrderDrawer>(
    'CallMaterialOrderDrawer'
  )
  /**
   * ç”¨æ¥å¯¹æ¯”的初始化数据
   */
  const initiateData: Ref<Record<string, any>> = ref({})
  const formData = ref<Record<string, any>>({})
  // ref
  const formRef = ref()
  const disabled = ref(false)
  const current = computed(() => {
    return props.row || null
  })
  const inputNumber = (attrs) => {
    return (
      <el-input-number
        min="1"
        step="1"
        precision="0"
        {...attrs}
      ></el-input-number>
    )
  }
  const datePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="daterange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const dateTimePickerRange = (attrs) => {
    return (
      <el-date-picker
        type="datetimerange"
        value-format="YYYY-MM-DD HH:mm:ss"
        start-placeholder="开始日期"
        end-placeholder="结束日期"
        {...attrs}
      ></el-date-picker>
    )
  }
  const visible = computed({
    get() {
      return props.modelValue
    },
    set(val) {
      ctx.emit('update:modelValue', val)
    },
  })
  /**
   * é«˜çº§æŸ¥è¯¢çš„form字段
   */
  const formItems = reactive([
    {
      label: '原料标识',
      prop: 'dataIdentifier',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入原料标识',
      highSelectAttrs: {
        prop: 'dataIdentifier_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '原料型号',
      prop: 'materialMode',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入原料型号',
      highSelectAttrs: {
        prop: 'materialMode_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '原料批次',
      prop: 'materialBatch',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入原料批次',
      highSelectAttrs: {
        prop: 'materialBatch_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '叫料状态',
      prop: 'callMaterialStatus',
      el: 'select',
      clearable: true,
      option: [],
      //disabled: disabled,
      placeholder: '请输入叫料状态',
      highSelectAttrs: {
        prop: 'callMaterialStatus_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_BOOL,
      },
    },
    {
      label: '叫料数量',
      prop: 'quantity',
      el: (props: any, { attrs }: SetupContext) => {
        return h(inputNumber, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      step: 1,
      precision: 0,
      //disabled: disabled,
      placeholder: '请输入叫料数量',
      highSelectAttrs: {
        prop: 'quantity_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_NUM,
      },
    },
    {
      label: 'WMS返回结果',
      prop: 'wmsRetResult',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入WMS返回结果',
      highSelectAttrs: {
        prop: 'wmsRetResult_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: 'WMS任务号',
      prop: 'wmsTaskNo',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入WMS任务号',
      highSelectAttrs: {
        prop: 'wmsTaskNo_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '创建时间',
      prop: 'creationTime',
      el: (props: any, { attrs }: SetupContext) => {
        return h(dateTimePickerRange, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      //disabled: disabled,
      placeholder: '请输入创建时间',
      isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    },
    {
      label: '修改时间',
      prop: 'lastModificationTime',
      el: (props: any, { attrs }: SetupContext) => {
        return h(dateTimePickerRange, {
          ...props,
          clearable: true,
          ...attrs,
        })
      },
      width: '100%',
      //disabled: disabled,
      placeholder: '请输入修改时间',
      isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
    },
    {
      label: '创建人',
      prop: 'creatorName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入创建人',
      highSelectAttrs: {
        prop: 'creatorName_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '修改人',
      prop: 'lastModifierName',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入修改人',
      highSelectAttrs: {
        prop: 'lastModifierName_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
    {
      label: '备注',
      prop: 'remark',
      el: 'input',
      //disabled: disabled,
      placeholder: '请输入备注',
      highSelectAttrs: {
        prop: 'remark_FilterMode',
        el: 'select',
        placeholder: '请选择',
        options: FILTER_MODE_OPTIONS_STRING,
      },
    },
  ])
  /**
   * æ ¡éªŒæ˜¯å¦æœ‰æ•°æ®å˜åŒ–
   */
  const checkIsEqualObject = () => {
    const data = {
      formData: formData.value,
    }
    const check = isEqual(initiateData.value, data)
    return check
  }
  const commonGetFormData = () => {
    const data = {
      dataIdentifier: formData.value.dataIdentifier || '',
      dataIdentifier_FilterMode: formData.value.dataIdentifier_FilterMode || '',
      materialMode: formData.value.materialMode || '',
      materialMode_FilterMode: formData.value.materialMode_FilterMode || '',
      materialBatch: formData.value.materialBatch || '',
      materialBatch_FilterMode: formData.value.materialBatch_FilterMode || '',
      callMaterialStatus: formData.value.callMaterialStatus || '',
      callMaterialStatus_FilterMode:
        formData.value.callMaterialStatus_FilterMode || '',
      quantity: formData.value.quantity || '',
      quantity_FilterMode: formData.value.quantity_FilterMode || '',
      wmsRetResult: formData.value.wmsRetResult || '',
      wmsRetResult_FilterMode: formData.value.wmsRetResult_FilterMode || '',
      wmsTaskNo: formData.value.wmsTaskNo || '',
      wmsTaskNo_FilterMode: formData.value.wmsTaskNo_FilterMode || '',
      creationTime: formData.value.creationTime || '',
      lastModificationTime: formData.value.lastModificationTime || '',
      creatorName: formData.value.creatorName || '',
      creatorName_FilterMode: formData.value.creatorName_FilterMode || '',
      lastModifierName: formData.value.lastModifierName || '',
      lastModifierName_FilterMode:
        formData.value.lastModifierName_FilterMode || '',
      remark: formData.value.remark || '',
      remark_FilterMode: formData.value.remark_FilterMode || '',
    }
    return data
  }
  const onClose = (done: () => void) => {
    if (visible.value) {
      visible.value = false
      const data = commonGetFormData()
      ctx.emit('close', data)
    }
  }
  /**
   * ç¡®è®¤æŸ¥è¯¢
   */
  const onConfirmQuery = async () => {
    const data = commonGetFormData()
    ctx.emit('confirmQuery', data)
  }
  /**
   * é‡ç½®å…¬å…±select查询
   */
  const onResetForHighSelect = async () => {
    formData.value.dataIdentifier_FilterMode = 1
    formData.value.materialMode_FilterMode = 1
    formData.value.materialBatch_FilterMode = 1
    formData.value.callMaterialStatus_FilterMode = 2
    formData.value.quantity_FilterMode = 2
    formData.value.wmsRetResult_FilterMode = 1
    formData.value.wmsTaskNo_FilterMode = 1
    formData.value.creatorName_FilterMode = 1
    formData.value.lastModifierName_FilterMode = 1
    formData.value.remark_FilterMode = 1
  }
  /**
   * é‡ç½®æŸ¥è¯¢
   */
  const onReset = async () => {
    formData.value = {}
    onResetForHighSelect() //重置公共select查询
    formData.value.dataIdentifier = ''
    formData.value.materialMode = ''
    formData.value.materialBatch = ''
    formData.value.callMaterialStatus = ''
    formData.value.quantity = ''
    formData.value.wmsRetResult = ''
    formData.value.wmsTaskNo = ''
    formData.value.creationTime = ''
    formData.value.lastModificationTime = ''
    formData.value.creatorName = ''
    formData.value.lastModifierName = ''
    formData.value.remark = ''
    //向父组件发送自定义事件
    ctx.emit('restQuery')
  }
  const updateCheckData = () => {
    initiateData.value = {
      formData: {
        ...formData.value,
      },
    }
  }
  const updateFormItemOptions = (propName: string, enumData: any[]) => {
    const item = formItems.find((item) => item.prop === propName)
    if (item && enumData) {
      item.options = enumData.map((item) => ({
        label: item.description,
        value: item.value,
      }))
    }
  }
  /**
   * é€šç”¨æŸ¥è¯¢æžšä¸¾
   */
  const commonQueryEnumForFrom = async () => {
    const callMaterialStatusEnumEnum =
      await callMaterialOrderDrawer.getWmsEnumData({
        EnumName: 'CallMaterialStatusEnum',
      })
    updateFormItemOptions('callMaterialStatus', callMaterialStatusEnumEnum)
  }
  commonQueryEnumForFrom()
  onResetForHighSelect() //重置公共select查询
  /**
   * å¼¹çª—打开获取详情
   */
  const onOpen = async () => {
    disabled.value = false
    updateCheckData()
  }
  watch(() => current.value, onOpen)
  return {
    formItems,
    formData,
    visible,
    formRef,
    onOpen,
    onClose,
    onConfirmQuery,
    onReset,
  }
}
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/CallMaterialOrder.ts
@@ -22,8 +22,8 @@
    return deleteCallMaterialOrders(ids) 
  } 
  async callMaterialByDataIdentifier(ids: string) {
    return callMaterialByDataIdentifier(ids)
  async callMaterialByDataIdentifier(data: any) {
    return callMaterialByDataIdentifier(data)
  } 
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Models/Service/CallMaterialOrder.ts
@@ -25,8 +25,8 @@
 * callMaterialByDataIdentifier 
 * @returns 
 */ 
export const callMaterialByDataIdentifier = (id: string) => {
  return request.put(`/api/v1/PipeLineLems/callMaterialOrder/callMaterialByDataIdentifier/${id}`)
export const callMaterialByDataIdentifier = (data: any) => {
  return request.post('/api/v1/PipeLineLems/WorkPlanPublic/callMaterial', data)
 
/** 
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrder/Views/Pages/Dialog/CallMaterialOrderQueryDrawer/CallMaterialOrderQueryDrawer.tsx
@@ -5,7 +5,7 @@
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer' 
import styles from './CallMaterialOrderQueryDrawer.module.scss' 
import { useCallMaterialOrderQueryDrawer } from '../../../../Controllers/CallMaterialOrderQueryDrawer.tsx' 
import DyForm from '@/components/DyForm/DyForm'
import DyFormForHighQuery from '@/components/DyFormForHighQuery/DyFormForHighQuery'
 
// @ts-ignore 
export default defineComponent<{ 
@@ -59,12 +59,12 @@
        before-close={onClose} 
        onClose={onClose} 
      > 
        <DyForm
        <DyFormForHighQuery
          ref={formRef} 
          formData={formData.value} 
          labelWidth="106px" 
          formItemProps={formItems} 
        ></DyForm>
        ></DyFormForHighQuery>
      </BaseQueryDrawer> 
    ) 
  }, 
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordDrawer.tsx
@@ -14,6 +14,10 @@
import isEqual from 'lodash/isEqual' 
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' 
import { cloneDeep } from 'lodash' 
// å¼•入公共选项配置
import {
  BOOLEAN_OPTIONS_AddEdit
} from '@/utils/commonOptionConstants';
 
export const useCallMaterialOrderRecordDrawer = (props: any, ctx?: any) => { 
  const callMaterialOrderRecordDrawer = injectModel<CallMaterialOrderRecordDrawer>('callMaterialOrderRecordDrawer') 
@@ -90,6 +94,13 @@
                   el: 'input', 
                   //disabled: disabled, 
                   placeholder: '请输入原料型号', 
                },
                {
                   label: '原料批次',
                   prop: 'materialBatch',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入原料批次',
                }, 
                { 
                   label: '叫料状态', 
@@ -176,6 +187,7 @@
    const data = { 
      dataIdentifier: formData.value.dataIdentifier, 
materialMode: formData.value.materialMode, 
materialBatch: formData.value.materialBatch,
callMaterialStatus: formData.value.callMaterialStatus, 
quantity: formData.value.quantity, 
wmsRetResult: formData.value.wmsRetResult, 
@@ -229,6 +241,7 @@
      formData.value = { 
        dataIdentifier: res.dataIdentifier, 
materialMode: res.materialMode, 
materialBatch: res.materialBatch,
callMaterialStatus: res.callMaterialStatus, 
quantity: res.quantity, 
wmsRetResult: res.wmsRetResult, 
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Controllers/CallMaterialOrderRecordQueryDrawer.tsx
@@ -14,6 +14,15 @@
import isEqual from 'lodash/isEqual' 
import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' 
import { cloneDeep } from 'lodash' 
// å¼•入公共选项配置
import {
  FILTER_MODE_OPTIONS_STRING,
  FILTER_MODE_OPTIONS_NUM,
  FILTER_MODE_OPTIONS_BOOL
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions';
import {
  BOOLEAN_OPTIONS
} from '@/utils/commonOptionConstants';
 
export const useCallMaterialOrderRecordQueryDrawer = (props: any, ctx?: any) => { 
  const callMaterialOrderRecordDrawer = injectModel<CallMaterialOrderRecordDrawer>('CallMaterialOrderRecordDrawer') 
@@ -84,6 +93,12 @@
                   el: 'input', 
                   //disabled: disabled, 
                   placeholder: '请输入原料标识', 
                   highSelectAttrs:{
                     prop: 'dataIdentifier_FilterMode',
                     el: 'select',
                     placeholder: '请选择',
                     options:FILTER_MODE_OPTIONS_STRING
                   }
                }, 
                { 
                   label: '原料型号', 
@@ -91,6 +106,25 @@
                   el: 'input', 
                   //disabled: disabled, 
                   placeholder: '请输入原料型号', 
                   highSelectAttrs:{
                     prop: 'materialMode_FilterMode',
                     el: 'select',
                     placeholder: '请选择',
                     options:FILTER_MODE_OPTIONS_STRING
                   }
                },
                {
                   label: '原料批次',
                   prop: 'materialBatch',
                   el: 'input',
                   //disabled: disabled,
                   placeholder: '请输入原料批次',
                   highSelectAttrs:{
                     prop: 'materialBatch_FilterMode',
                     el: 'select',
                     placeholder: '请选择',
                     options:FILTER_MODE_OPTIONS_STRING
                   }
                }, 
                { 
                   label: '叫料状态', 
@@ -100,6 +134,12 @@
                   option: [], 
                   //disabled: disabled, 
                   placeholder: '请输入叫料状态', 
                   highSelectAttrs:{
                     prop: 'callMaterialStatus_FilterMode',
                     el: 'select',
                     placeholder: '请选择',
                     options:FILTER_MODE_OPTIONS_BOOL
                   }
                }, 
                { 
                   label: '叫料数量', 
@@ -116,6 +156,12 @@
                   precision: 0, 
                   //disabled: disabled, 
                   placeholder: '请输入叫料数量', 
                   highSelectAttrs:{
                     prop: 'quantity_FilterMode',
                     el: 'select',
                     placeholder: '请选择',
                     options:FILTER_MODE_OPTIONS_NUM
                   }
                }, 
                { 
                   label: 'WMS返回结果', 
@@ -123,6 +169,12 @@
                   el: 'input', 
                   //disabled: disabled, 
                   placeholder: '请输入WMS返回结果', 
                   highSelectAttrs:{
                     prop: 'wmsRetResult_FilterMode',
                     el: 'select',
                     placeholder: '请选择',
                     options:FILTER_MODE_OPTIONS_STRING
                   }
                }, 
                { 
                   label: 'WMS任务号', 
@@ -130,6 +182,12 @@
                   el: 'input', 
                   //disabled: disabled, 
                   placeholder: '请输入WMS任务号', 
                   highSelectAttrs:{
                     prop: 'wmsTaskNo_FilterMode',
                     el: 'select',
                     placeholder: '请选择',
                     options:FILTER_MODE_OPTIONS_STRING
                   }
                }, 
                { 
                   label: '创建时间', 
@@ -144,6 +202,7 @@
                   width: '100%',
                   //disabled: disabled, 
                   placeholder: '请输入创建时间', 
                   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
                }, 
                { 
                   label: '修改时间', 
@@ -158,6 +217,7 @@
                   width: '100%',
                   //disabled: disabled, 
                   placeholder: '请输入修改时间', 
                   isDateControl: true, // æ˜¾å¼æ ‡è®°ä¸ºæ—¥æœŸæŽ§ä»¶
                }, 
                { 
                   label: '创建人', 
@@ -165,6 +225,12 @@
                   el: 'input', 
                   //disabled: disabled, 
                   placeholder: '请输入创建人', 
                   highSelectAttrs:{
                     prop: 'creatorName_FilterMode',
                     el: 'select',
                     placeholder: '请选择',
                     options:FILTER_MODE_OPTIONS_STRING
                   }
                }, 
                { 
                   label: '备注', 
@@ -172,6 +238,12 @@
                   el: 'input', 
                   //disabled: disabled, 
                   placeholder: '请输入备注', 
                   highSelectAttrs:{
                     prop: 'remark_FilterMode',
                     el: 'select',
                     placeholder: '请选择',
                     options:FILTER_MODE_OPTIONS_STRING
                   }
                },  
  ]) 
  /** 
@@ -187,15 +259,25 @@
  const commonGetFormData=()=>{ 
    const data = { 
      dataIdentifier: formData.value.dataIdentifier || '', 
dataIdentifier_FilterMode: formData.value.dataIdentifier_FilterMode || '',
materialMode: formData.value.materialMode || '', 
materialMode_FilterMode: formData.value.materialMode_FilterMode || '',
materialBatch: formData.value.materialBatch || '',
materialBatch_FilterMode: formData.value.materialBatch_FilterMode || '',
callMaterialStatus: formData.value.callMaterialStatus || '', 
callMaterialStatus_FilterMode: formData.value.callMaterialStatus_FilterMode || '',
quantity: formData.value.quantity || '', 
quantity_FilterMode: formData.value.quantity_FilterMode || '',
wmsRetResult: formData.value.wmsRetResult || '', 
wmsRetResult_FilterMode: formData.value.wmsRetResult_FilterMode || '',
wmsTaskNo: formData.value.wmsTaskNo || '', 
wmsTaskNo_FilterMode: formData.value.wmsTaskNo_FilterMode || '',
creationTime: formData.value.creationTime || '', 
lastModificationTime: formData.value.lastModificationTime || '', 
creatorName: formData.value.creatorName || '', 
remark: formData.value.remark || '',
creatorName_FilterMode: formData.value.creatorName_FilterMode || '',
remark: formData.value.remark || '',
remark_FilterMode: formData.value.remark_FilterMode || '',
    } 
    return data; 
  } 
@@ -213,22 +295,37 @@
    const data =commonGetFormData(); 
    ctx.emit('confirmQuery', data) 
  } 
  /**
   * é‡ç½®å…¬å…±select查询
   */
  const onResetForHighSelect = async () => {
    formData.value.dataIdentifier_FilterMode = 1
formData.value.materialMode_FilterMode = 1
formData.value.materialBatch_FilterMode = 1
formData.value.callMaterialStatus_FilterMode = 2
formData.value.quantity_FilterMode = 2
formData.value.wmsRetResult_FilterMode = 1
formData.value.wmsTaskNo_FilterMode = 1
formData.value.creatorName_FilterMode = 1
formData.value.remark_FilterMode = 1
  }
  /** 
   * é‡ç½®æŸ¥è¯¢ 
   */ 
  const onReset = async () => { 
    formData.value = {} 
    onResetForHighSelect();//重置公共select查询
    formData.value.dataIdentifier = '' 
formData.value.materialMode = '' 
formData.value.materialBatch = ''
formData.value.callMaterialStatus = '' 
formData.value.quantity = '' 
formData.value.wmsRetResult = '' 
formData.value.wmsTaskNo = '' 
formData.value.deletionTime = ''
formData.value.remark = ''
formData.value.extraField1 = ''
formData.value.extraField2 = ''
formData.value.extraField3 = ''
formData.value.creationTime = ''
formData.value.lastModificationTime = ''
formData.value.creatorName = ''
formData.value.remark = ''
    //向父组件发送自定义事件 
    ctx.emit('restQuery'); 
  } 
@@ -260,6 +357,7 @@
 
  } 
  commonQueryEnumForFrom() 
  onResetForHighSelect();//重置公共select查询
  /** 
   * å¼¹çª—打开获取详情 
   */ 
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/CallMaterialOrderRecord.tsx
@@ -23,6 +23,10 @@
  ElFormItem, 
} from 'element-plus' 
import { injectModel } from '@/libs/Provider/Provider' 
// å¼•入公共选项配置
import {
  FILTER_MODE_OPTIONS_STRING
} from '@/components/DyFormForHighQuery/DyFormForHighQueryOptions';
 
interface RenderTableType { 
  url?: string 
@@ -68,13 +72,14 @@
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶ 
    const queryForm = ref({ 
      searchVal: '', 
      str_searchFormInputAttrs:[]
      str_searchFormInputAttrs:[],
      searchVal_FilterMode:''
    }) 
    //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题) 
    const _searchFormInputAttrs = ref([ 
     'DataIdentifier','MaterialMode','WmsRetResult','WmsTaskNo','CreatorName','Remark'
     'DataIdentifier','MaterialMode','MaterialBatch','WmsRetResult','WmsTaskNo','CreatorName','Remark'
    ]); 
    const searchFormInputAttrs_Placeholder = ref('请输入原料标识/原料型号/WMS返回结果/WMS任务号/创建人/备注');
    const searchFormInputAttrs_Placeholder = ref('请输入原料标识/原料型号/原料批次/WMS返回结果/WMS任务号/创建人/备注');
     
 
    // åŠ¨æ€æžšä¸¾é€‰é¡¹ 
@@ -98,16 +103,20 @@
      } 
    } 
 
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
    })
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({ searchVal: '',str_searchFormInputAttrs:[],searchVal_FilterMode:'' });
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
      queryForm.value.searchVal_FilterMode = FILTER_MODE_OPTIONS_STRING[0]?.value || '';
      _curHighQueryData.value.searchVal_FilterMode = queryForm.value.searchVal_FilterMode;
      _curHighQueryData.value.str_searchFormInputAttrs = _searchFormInputAttrs.value;
    })
 
    // å®šä¹‰å“åº”式查询数据
    const _curHighQueryData = ref({ searchVal: '',str_searchFormInputAttrs:[] });
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(主页面中的按钮【查询】) 
    const handleQueryForMain = async () => { 
      _curHighQueryData.value.searchVal = queryForm.value.searchVal; 
      _curHighQueryData.value.searchVal_FilterMode = queryForm.value.searchVal_FilterMode;
      _curHighQueryData.value.str_searchFormInputAttrs = _searchFormInputAttrs.value; 
      tableRef.value.getList(_curHighQueryData.value) 
    } 
@@ -120,6 +129,7 @@
    // æ–°ç‰ˆçš„æŸ¥è¯¢é‡ç½® 
    const resetQuery = () => { 
      queryForm.value.searchVal = '' 
      queryForm.value.searchVal_FilterMode = FILTER_MODE_OPTIONS_STRING[0]?.value || '';
      queryForm.value.str_searchFormInputAttrs=_searchFormInputAttrs.value; 
    } 
     //新版的导出方法 
@@ -137,6 +147,7 @@
    const commonSaveCurHighQueryData=(filteredData={})=>{ 
      _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData }; 
      _curHighQueryData.value.searchVal = queryForm.value.searchVal 
      _curHighQueryData.value.searchVal_FilterMode = queryForm.value.searchVal_FilterMode
      _curHighQueryData.value.str_searchFormInputAttrs =_searchFormInputAttrs.value; 
    } 
     //获取高级查询弹出框的查询值 
@@ -150,6 +161,7 @@
      ) 
      //组合模糊查询 
      filteredData.searchVal = queryForm.value.searchVal 
      filteredData.searchVal_FilterMode = queryForm.value.searchVal_FilterMode
      filteredData.str_searchFormInputAttrs =_searchFormInputAttrs.value; 
      return filteredData; 
    } 
@@ -271,7 +283,7 @@
 
          <div class={styles.headerContent}> 
            <div class={styles.header}> 
              {/* <IconButton
              <IconButton
                v-permission="callMaterialOrderRecord-add" 
                icon="add-p" 
                onClick={onAddCallMaterialOrderRecord} 
@@ -281,8 +293,7 @@
              </IconButton> 
              <el-divider direction="vertical" /> 
 
              <el-divider direction="vertical" />  */}
              {/* <el-upload
              <el-upload
                v-permission="callMaterialOrderRecord-import" 
                name="file" 
                accept=".xlsx,.xls,.csv" 
@@ -294,7 +305,7 @@
                action="/api/v1/PipeLineLems/callMaterialOrderRecord/import" 
              > 
                <IconButton icon="in">导入</IconButton> 
              </el-upload>  */}
              </el-upload>
 
              <IconButton 
                v-permission="callMaterialOrderRecord-output" 
@@ -320,6 +331,21 @@
                /> 
                </el-tooltip> 
              </ElFormItem> 
              <ElFormItem label="" style="width:100px;">
                   <ElSelect
                                v-model={queryForm.value.searchVal_FilterMode}
                                placeholder="请选择"
                                class={styles.formItem}
                              >
                                {FILTER_MODE_OPTIONS_STRING.map((option) => (
                                  <ElOption
                                    key={option.value}
                                    label={option.label}
                                    value={option.value}
                                  />
                                ))}
                              </ElSelect>
              </ElFormItem>
              <IconButton type="primary" icon="search" onClick={handleQueryForMain}> 
                æŸ¥è¯¢ 
              </IconButton> 
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/CallMaterialOrderRecord/Config.ts
@@ -15,6 +15,11 @@
  width:160, 
}, 
  field: 'materialBatch',
  title: '原料批次',
  width:160,
},
{
  field: 'callMaterialStatusDesc', 
  title: '叫料状态', 
  width:160, 
PipeLineLems/pipelinelems_web/src/widgets/CallMaterialOrderRecord/Views/Pages/Dialog/CallMaterialOrderRecordQueryDrawer/CallMaterialOrderRecordQueryDrawer.tsx
@@ -5,7 +5,7 @@
import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer' 
import styles from './CallMaterialOrderRecordQueryDrawer.module.scss' 
import { useCallMaterialOrderRecordQueryDrawer } from '../../../../Controllers/CallMaterialOrderRecordQueryDrawer.tsx' 
import DyForm from '@/components/DyForm/DyForm'
import DyFormForHighQuery from '@/components/DyFormForHighQuery/DyFormForHighQuery'
 
// @ts-ignore 
export default defineComponent<{ 
@@ -59,12 +59,12 @@
        before-close={onClose} 
        onClose={onClose} 
      > 
        <DyForm
        <DyFormForHighQuery
          ref={formRef} 
          formData={formData.value} 
          labelWidth="106px" 
          formItemProps={formItems} 
        ></DyForm>
        ></DyFormForHighQuery>
      </BaseQueryDrawer> 
    ) 
  }, 
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateDto.cs
@@ -14,4 +14,9 @@
    /// æ˜¯å¦ç¦ç”¨ 
    /// </summary> 
    public bool? IsDisabled { get; set; } = false; 
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    public string CreatorName { get; set; }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderCreateOrUpdateDtoBase.cs
@@ -20,6 +20,11 @@
        public string? MaterialMode { get; set; }
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡
        /// </summary>
        public string? MaterialBatch { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
@@ -29,15 +34,10 @@
        /// </summary>
        public int Quantity { get; set; }
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    public string CreatorName { get; set; }
    /// <summary>
    /// WMS返回结果
    /// </summary>
    public string? WmsRetResult { get; set; }
        /// <summary>
        /// WMS返回结果
        /// </summary>
        public string? WmsRetResult { get; set; }
        /// <summary>
        /// WMS任务号
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderDto.cs
@@ -23,6 +23,11 @@
        public string? MaterialMode { get; set; }
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡
        /// </summary>
        public string? MaterialBatch { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderExportModel.cs
@@ -23,6 +23,12 @@
        public string MaterialMode { get; set; }
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡
        /// </summary>
        [ExcelColumn(Name = "原料批次", Width = 25)]
        public string MaterialBatch { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        [ExcelColumn(Name = "叫料状态", Width = 25)]
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/CallMaterialOrderUpdateDto.cs
@@ -10,4 +10,9 @@
    /// å¹¶å‘戳 
    /// </summary> 
    public string ConcurrencyStamp { get; set; } 
    /// <summary>
    /// ä¿®æ”¹äºº
    /// </summary>
    public string LastModifierName { get; set; }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/GetCallMaterialOrderInput.cs
@@ -65,6 +65,16 @@
        public SearchFilterModeEnum MaterialMode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡
        /// </summary>
        public string MaterialBatch { get; set; }
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialBatch_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum?  CallMaterialStatus { get; set; }
@@ -109,7 +119,7 @@
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> CreationTime { get; set; }
        public string CreationTime { get; set; }
        /// <summary>
@@ -127,7 +137,7 @@
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> LastModificationTime { get; set; }
        public string LastModificationTime { get; set; }
        /// <summary>
@@ -165,7 +175,7 @@
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> DeletionTime { get; set; }
        public string DeletionTime { get; set; }
        /// <summary>
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrder/MyCallMaterialOutput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder
{
    /// <summary>
    /// å«æ–™è¿”回
    /// </summary>
    public class MyCallMaterialOutput : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
    {
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç¼–号
        /// </summary>
        public virtual string MaterialId { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public virtual string MaterialName { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        public string ContainerNo { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        public string MaterialBatch { get; set; }
        /// <summary>
        /// åž‹å·
        /// </summary>
        public string MaterialModel { get; set; }
        /// <summary>
        /// åº“位编号
        /// </summary>
        public string PlaceNo { get; set; }
        /// <summary>
        /// å…¥åº“æ—¶é—´
        /// </summary>
        public DateTime? InStockTime { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public string TaskNo { get; set; }
        /// <summary>
        /// æ¥æºå•据号
        /// </summary>
        public string? SourceOrderNo { get; set; }
        /// <summary>
        /// PLC任务号
        /// </summary>
        public int PlcTaskId { get; set; }
        public string ConcurrencyStamp
        {
            get
            ;
            set;
        }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateDto.cs
@@ -14,4 +14,9 @@
    /// æ˜¯å¦ç¦ç”¨ 
    /// </summary> 
    public bool? IsDisabled { get; set; } = false; 
    /// <summary>
    /// åˆ›å»ºäºº
    /// </summary>
    public string CreatorName { get; set; }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordCreateOrUpdateDtoBase.cs
@@ -20,6 +20,11 @@
        public string? MaterialMode { get; set; }
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡
        /// </summary>
        public string? MaterialBatch { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordDto.cs
@@ -23,6 +23,11 @@
        public string? MaterialMode { get; set; }
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡
        /// </summary>
        public string? MaterialBatch { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum CallMaterialStatus { get; set; }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordExportModel.cs
@@ -23,6 +23,12 @@
        public string MaterialMode { get; set; }
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡
        /// </summary>
        [ExcelColumn(Name = "原料批次", Width = 25)]
        public string MaterialBatch { get; set; }
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        [ExcelColumn(Name = "叫料状态", Width = 25)]
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/CallMaterialOrderRecordUpdateDto.cs
@@ -10,4 +10,9 @@
    /// å¹¶å‘戳 
    /// </summary> 
    public string ConcurrencyStamp { get; set; } 
    /// <summary>
    /// ä¿®æ”¹äºº
    /// </summary>
    public string LastModifierName { get; set; }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/CallMaterialOrderRecord/GetCallMaterialOrderRecordInput.cs
@@ -65,6 +65,16 @@
        public SearchFilterModeEnum MaterialMode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡
        /// </summary>
        public string MaterialBatch { get; set; }
        /// <summary>
        /// åŽŸæ–™æ‰¹æ¬¡-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialBatch_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å«æ–™çŠ¶æ€
        /// </summary>
        public CallMaterialStatusEnum?  CallMaterialStatus { get; set; }
@@ -109,7 +119,7 @@
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> CreationTime { get; set; }
        public string CreationTime { get; set; }
        /// <summary>
@@ -127,7 +137,7 @@
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> LastModificationTime { get; set; }
        public string LastModificationTime { get; set; }
        /// <summary>
@@ -165,7 +175,7 @@
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> DeletionTime { get; set; }
        public string DeletionTime { get; set; }
        /// <summary>
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/CallMaterialByDataIdentifierInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan
{
    /// <summary>
    /// å«æ–™è¾“入参数模型
    /// </summary>
    [Serializable]
    public class CallMaterialByDataIdentifierInput
    {
        /// <summary>
        /// åŽŸæ–™æ ‡è¯†
        /// </summary>
        public string DataIdentifier { get; set; }
        /// <summary>
        /// ID
        /// </summary>
        public Guid Id { get; set; }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderAppService.cs
@@ -1,66 +1,78 @@
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder;
using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder;
using Volo.Abp.Application.Services;
using CmsQueryExtensions.Entitys;
using System.Linq.Expressions;
using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder;
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services;
/// <summary> 
/// å«æ–™å•表应用服务接口 
/// </summary> 
public interface ICallMaterialOrderAppService : ICrudAppService<CallMaterialOrderDto, Guid, GetCallMaterialOrderInput, CallMaterialOrderCreateDto, CallMaterialOrderUpdateDto>
{
public interface ICallMaterialOrderAppService : ICrudAppService<CallMaterialOrderDto, Guid, GetCallMaterialOrderInput, CallMaterialOrderCreateDto, CallMaterialOrderUpdateDto>
{
    /// <summary> 
    /// å…‹éš†å«æ–™å•表 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids);
    Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser);
    /// <summary> 
    /// åˆ é™¤å«æ–™å•表 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    Task DeleteManyAsync(IEnumerable<Guid> ids);
    Task<CallMaterialOrder> FindByWmsTaskNoAsync(string wmsTaskNo);
    Task CallMaterialByDataIdentifier(Guid id);
    Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser);
    /// <summary>
    /// ç‰©ç†åˆ é™¤å«æ–™å•表
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤å«æ–™å•表(直接删除,不软删除)
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default);
    /// <summary> 
    /// è°ƒæ•´æŽ’序叫料单表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <param name="sort"></param> 
    /// <returns></returns> 
    Task AdjustSortAsync(Guid id, int sort);
    Task AdjustSortAsync(Guid id, int sort);
    /// <summary> 
    /// å¯¼å…¥å«æ–™å•表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    Task ImportAsync(CallMaterialOrdersImportModel input);
    Task ImportAsync(CallMaterialOrdersImportModel input, MyCurrentUser myCurrentUser);
    /// <summary> 
    /// å¯¼å‡ºå«æ–™å•表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderInput input);
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderInput input);
    /// <summary> 
    /// æ ¹æ®æ¡ä»¶èŽ·å–å«æ–™å•è¡¨åˆ—è¡¨ 
    /// </summary> 
    /// <param name="whereConditions"></param> 
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default);
    Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary> 
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªå«æ–™å•è¡¨ 
    /// </summary> 
@@ -69,5 +81,5 @@
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
}
    Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Services/ICallMaterialOrderRecordAppService.cs
@@ -1,5 +1,8 @@
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
using Volo.Abp.Application.Services; 
using CmsQueryExtensions.Entitys;
using System.Linq.Expressions;
using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord;
 
namespace CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
 
@@ -13,14 +16,31 @@
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids);
    Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser);
 
    /// <summary> 
    /// åˆ é™¤å«æ–™è®°å½•表 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    Task DeleteManyAsync(IEnumerable<Guid> ids);
    Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser);
    /// <summary>
    /// ç‰©ç†åˆ é™¤å«æ–™è®°å½•表
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤å«æ–™è®°å½•表(直接删除,不软删除)
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default);
 
    /// <summary> 
    /// è°ƒæ•´æŽ’序叫料记录表 
@@ -35,7 +55,7 @@
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    Task ImportAsync(CallMaterialOrderRecordsImportModel input);
    Task ImportAsync(CallMaterialOrderRecordsImportModel input, MyCurrentUser myCurrentUser);
 
    /// <summary> 
    /// å¯¼å‡ºå«æ–™è®°å½•表 
@@ -43,4 +63,23 @@
    /// <param name="input"></param> 
    /// <returns></returns> 
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderRecordInput input); 
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–å«æ–™è®°å½•è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<CallMaterialOrderRecord>> GetListByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªå«æ–™è®°å½•è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    Task<CallMaterialOrderRecord> GetSingleByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/CMS.Plugin.PipeLineLems.Application.csproj
@@ -19,6 +19,15 @@
    </ItemGroup>
    <ItemGroup>
      <Reference Include="CMS.Plugin.HIAWms.Abstractions">
        <HintPath>..\..\..\..\..\..\Program Files\CMS Editor\plugins\cms.plugin.hiawms\net6.0\CMS.Plugin.HIAWms.Abstractions.dll</HintPath>
      </Reference>
      <Reference Include="CMS.Plugin.HIAWms.Application">
        <HintPath>..\..\..\..\..\..\Program Files\CMS Editor\plugins\cms.plugin.hiawms\net6.0\CMS.Plugin.HIAWms.Application.dll</HintPath>
      </Reference>
      <Reference Include="CMS.Plugin.HIAWms.Application.Contracts">
        <HintPath>..\..\..\..\..\..\Program Files\CMS Editor\plugins\cms.plugin.hiawms\net6.0\CMS.Plugin.HIAWms.Application.Contracts.dll</HintPath>
      </Reference>
      <Reference Include="CmsQueryExtensions">
        <HintPath>..\..\..\..\CommonDLL\CmsQueryExtensions.dll</HintPath>
      </Reference>
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderAppService.cs
@@ -1,140 +1,129 @@
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using CMS.Plugin.PipeLineLems.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectMapping;
namespace CMS.Plugin.PipeLineLems.Application.Implements;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using CMS.Plugin.PipeLineLems.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrder;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectMapping;
using CmsQueryExtensions.Entitys;
namespace CMS.Plugin.PipeLineLems.Application.Implements;
/// <summary> 
/// å«æ–™å•表应用服务 
/// </summary> 
public class CallMaterialOrderAppService : CMSPluginAppService, ICallMaterialOrderAppService
{
    private readonly ICallMaterialOrderRepository _callMaterialOrderRepository;
    private readonly SharedService _sharedService;
    private readonly IServiceProvider _serviceProvider;
public class CallMaterialOrderAppService : CMSPluginAppService, ICallMaterialOrderAppService
{
    private readonly ICallMaterialOrderRepository _callMaterialOrderRepository;
    /// <summary> 
    /// Initializes a new instance of the <see cref="CallMaterialOrderAppService"/> class. 
    /// </summary> 
    /// <param name="CallMaterialOrderRepository">The task job repository.</param> 
    public CallMaterialOrderAppService(ICallMaterialOrderRepository callMaterialOrderRepository, SharedService sharedService, IServiceProvider serviceProvider)
    {
        _callMaterialOrderRepository = callMaterialOrderRepository;
        _sharedService = sharedService;
        _serviceProvider = serviceProvider;
    }
    public CallMaterialOrderAppService(ICallMaterialOrderRepository callMaterialOrderRepository)
    {
        _callMaterialOrderRepository = callMaterialOrderRepository;
    }
    /// <summary> 
    /// èŽ·å–æŒ‡å®šå«æ–™å•è¡¨ 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual async Task<CallMaterialOrderDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(await _callMaterialOrderRepository.GetAsync(id));
    }
    public virtual async Task CallMaterialByDataIdentifier(Guid id)
    {
        await _sharedService.CallMaterialByDataIdentifier(id, _serviceProvider);
    }
    public virtual async Task<CallMaterialOrder> FindByWmsTaskNoAsync(string wmsTaskNo)
    {
        return await _callMaterialOrderRepository.FindByWmsTaskNoAsync(wmsTaskNo);
    }
    public virtual async Task<CallMaterialOrderDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(await _callMaterialOrderRepository.GetAsync(id));
    }
    /// <summary> 
    /// åˆ†é¡µèŽ·å–å«æ–™å•è¡¨ 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public virtual async Task<PagedResultDto<CallMaterialOrderDto>> GetListAsync(GetCallMaterialOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(CallMaterialOrder.Sort);
        }
    public virtual async Task<PagedResultDto<CallMaterialOrderDto>> GetListAsync(GetCallMaterialOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(CallMaterialOrder.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶  
        //动态构造查询条件  
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _callMaterialOrderRepository.GetCountAsync(whereConditions);
        var list = await _callMaterialOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<CallMaterialOrderDto>(count, ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(list));
    }
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _callMaterialOrderRepository.GetCountAsync(whereConditions);
        var list = await _callMaterialOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<CallMaterialOrderDto>(count, ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(list));
    }
    /// <summary>  
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶  
    /// </summary>  
    /// <param name="input">输入参数</param>  
    /// <returns></returns>  
    private FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> DynamicGetQueryParams(GetCallMaterialOrderInput input)
    {
    private FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> DynamicGetQueryParams(GetCallMaterialOrderInput input)
    {
        //动态构造查询条件  
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrder, GetCallMaterialOrderInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrder, GetCallMaterialOrderInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件  
        Expression<Func<CallMaterialOrder, bool>> extendExpression = a => a.IsDeleted == false;
        Expression<Func<CallMaterialOrder, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And 
        var pres = (System.Linq.Expressions.Expression<Func<CallMaterialOrder, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
        var pres = (System.Linq.Expressions.Expression<Func<CallMaterialOrder, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <summary> 
    /// æ–°å»ºå«æ–™å•表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public virtual async Task<CallMaterialOrderDto> CreateAsync(CallMaterialOrderCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await _callMaterialOrderRepository.NameExistAsync(input.DataIdentifier);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
        }
        var maxSort = await _callMaterialOrderRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<CallMaterialOrderCreateDto, CallMaterialOrder>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await _callMaterialOrderRepository.InsertAsync(insertObj);
    public virtual async Task<CallMaterialOrderDto> CreateAsync(CallMaterialOrderCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await _callMaterialOrderRepository.NameExistAsync(input.DataIdentifier);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
        }
        var maxSort = await _callMaterialOrderRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<CallMaterialOrderCreateDto, CallMaterialOrder>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        insertObj.CreatorName = input.CreatorName;//创建人
        await _callMaterialOrderRepository.InsertAsync(insertObj);
        //if (input.Sort.HasValue && insertObj.Sort != maxSort) 
        //{ 
        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort); 
        //} 
        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(insertObj);
    }
        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(insertObj);
    }
    /// <summary> 
    /// æ›´æ–°å«æ–™å•表 
    /// </summary> 
@@ -142,302 +131,331 @@
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public virtual async Task<CallMaterialOrderDto> UpdateAsync(Guid id, CallMaterialOrderUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await _callMaterialOrderRepository.GetAsync(id);
        var exist = await _callMaterialOrderRepository.NameExistAsync(input.DataIdentifier, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
        updateObj.DataIdentifier = input.DataIdentifier;
    public virtual async Task<CallMaterialOrderDto> UpdateAsync(Guid id, CallMaterialOrderUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await _callMaterialOrderRepository.GetAsync(id);
        var exist = await _callMaterialOrderRepository.NameExistAsync(input.DataIdentifier, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
                updateObj.DataIdentifier = input.DataIdentifier;
        updateObj.MaterialMode = input.MaterialMode;
        updateObj.MaterialBatch = input.MaterialBatch;
        updateObj.CallMaterialStatus = input.CallMaterialStatus;
        updateObj.Quantity = input.Quantity;
        updateObj.WmsRetResult = input.WmsRetResult;
        updateObj.WmsTaskNo = input.WmsTaskNo;
        updateObj.Remark = input.Remark;
        await _callMaterialOrderRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(updateObj);
    }
        updateObj.LastModifierName = input.LastModifierName;//修改人
        await _callMaterialOrderRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<CallMaterialOrder, CallMaterialOrderDto>(updateObj);
    }
    /// <summary> 
    /// å…‹éš†å«æ–™å•表 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    public async Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids)
    {
    public async Task<List<CallMaterialOrderDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser)
    {
        //var callMaterialOrders = new List<CallMaterialOrder>(); 
        //if (ids != null) 
        //{ 
        //    var sort = await callMaterialOrderRepository.GetMaxSortAsync();
        //    var sort = await _callMaterialOrderRepository.GetMaxSortAsync();
        //    foreach (var id in ids) 
        //    { 
        //        var CallMaterialOrder = await callMaterialOrderRepository.FindAsync(id);
        //        var CallMaterialOrder = await _callMaterialOrderRepository.FindAsync(id);
        //        if (CallMaterialOrder != null) 
        //        { 
        //            var name = CallMaterialOrder.Name + CallMaterialOrderConsts.CloneTag; 
        //            var notExist = false; 
        //            while (!notExist) 
        //            { 
        //                var exist = await callMaterialOrderRepository.NameExistAsync(name);
        //                var exist = await _callMaterialOrderRepository.NameExistAsync(name);
        //                if (exist || callMaterialOrders.Any(x => x.Name == name)) 
        //                { 
        //                    name += CallMaterialOrderConsts.CloneTag; 
        //                    continue; 
        //                } 
        //                notExist = true; 
        //            } 
        //            //CallMaterialOrder = await callMaterialOrderRepository.InsertAsync(CallMaterialOrder.Clone(GuidGenerator.Create(), name, sort++));
        //            //CallMaterialOrder = await _callMaterialOrderRepository.InsertAsync(CallMaterialOrder.Clone(GuidGenerator.Create(), name, sort++));
        //            callMaterialOrders.Add(CallMaterialOrder); 
        //        } 
        //    } 
        //} 
        //return ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(callMaterialOrders); 
        return new List<CallMaterialOrderDto>();
    }
        return new List<CallMaterialOrderDto>();
    }
    /// <summary> 
    /// åˆ é™¤å•个叫料单表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual Task DeleteAsync(Guid id)
    {
        return _callMaterialOrderRepository.DeleteAsync(id);
    }
    public virtual Task DeleteAsync(Guid id)
    {
        return _callMaterialOrderRepository.DeleteAsync(id);
    }
    /// <summary> 
    /// åˆ é™¤å¤šä¸ªå«æ–™å•表 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    public async Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
     /// <summary>
    /// ç‰©ç†åˆ é™¤å«æ–™å•表
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default)
    {
        _callMaterialOrderRepository.DeletePermanentlyAsync(id);
    }
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤å«æ–™å•表(直接删除,不软删除)
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default)
    {
        _callMaterialOrderRepository.BatchDeletePermanentlyAsync(ids);
    }
    /// <summary> 
    /// è°ƒæ•´æŽ’序叫料单表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <param name="sort"></param> 
    /// <returns></returns> 
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _callMaterialOrderRepository.GetListAsync(null, nameof(CallMaterialOrder.Sort));
        if (list != null && list.Any())
        {
            var initSort = 1;
            list.ForEach(x => x.AdjustSort(initSort++));
            var entity = list.FirstOrDefault(x => x.Id == id);
            if (entity != null)
            {
                if (sort == 1)
                {
                    list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                }
                else if (entity.Sort > sort)
                {
                    list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                else if (entity.Sort < sort)
                {
                    list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                entity.AdjustSort(sort);
            }
        }
        await _callMaterialOrderRepository.UpdateManyAsync(list);
    }
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _callMaterialOrderRepository.GetListAsync(null, nameof(CallMaterialOrder.Sort));
        if (list != null && list.Any())
        {
            var initSort = 1;
            list.ForEach(x => x.AdjustSort(initSort++));
            var entity = list.FirstOrDefault(x => x.Id == id);
            if (entity != null)
            {
                if (sort == 1)
                {
                    list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                }
                else if (entity.Sort > sort)
                {
                    list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                else if (entity.Sort < sort)
                {
                    list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                entity.AdjustSort(sort);
            }
        }
        await _callMaterialOrderRepository.UpdateManyAsync(list);
    }
    /// <summary> 
    /// å¯¼å…¥å«æ–™å•表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public async Task ImportAsync(CallMaterialOrdersImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var callMaterialOrderCreateDtos = new List<(int RowIndex, CallMaterialOrderCreateDto Item)>();
        var callMaterialOrderUpdateDtos = new List<(int RowIndex, Guid Id, CallMaterialOrderUpdateDto Item)>();
        var importItems = input.CallMaterialOrders;
        if (importItems != null && importItems.Any())
        {
    public async Task ImportAsync(CallMaterialOrdersImportModel input, MyCurrentUser myCurrentUser)
    {
        Check.NotNull(input, nameof(input));
        var callMaterialOrderCreateDtos = new List<(int RowIndex, CallMaterialOrderCreateDto Item)>();
        var callMaterialOrderUpdateDtos = new List<(int RowIndex, Guid Id, CallMaterialOrderUpdateDto Item)>();
        var importItems = input.CallMaterialOrders;
        if (importItems != null && importItems.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ 
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复 
            var duplicateCallMaterialOrders = importItems.GroupBy(x => x.DataIdentifier).Where(x => x.Count() > 1).ToList();
            if (duplicateCallMaterialOrders?.Any() == true)
            {
                var duplicateCallMaterialOrderMsgs = duplicateCallMaterialOrders.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateCallMaterialOrderMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:CallMaterialOrder名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldCallMaterialOrder = await _callMaterialOrderRepository.FindByNameAsync(impItem.DataIdentifier);
                if (oldCallMaterialOrder != null)
                {
                    var callMaterialOrderUpdateDto = new CallMaterialOrderUpdateDto
                    {
            var duplicateCallMaterialOrders = importItems.GroupBy(x => x.DataIdentifier).Where(x => x.Count() > 1).ToList();
            if (duplicateCallMaterialOrders?.Any() == true)
            {
                var duplicateCallMaterialOrderMsgs = duplicateCallMaterialOrders.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateCallMaterialOrderMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:CallMaterialOrder名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldCallMaterialOrder = await _callMaterialOrderRepository.FindByNameAsync(impItem.DataIdentifier);
                if (oldCallMaterialOrder != null)
                {
                    var callMaterialOrderUpdateDto = new CallMaterialOrderUpdateDto
                    {
                        DataIdentifier = impItem.DataIdentifier,
                        MaterialMode = impItem.MaterialMode,
                        CallMaterialStatus = impItem.CallMaterialStatus,
                        Quantity = impItem.Quantity,
                        WmsRetResult = impItem.WmsRetResult,
                        WmsTaskNo = impItem.WmsTaskNo,
                        Remark = impItem.Remark,
                    };
                    callMaterialOrderUpdateDtos.Add((impItem.RowIndex, oldCallMaterialOrder.Id, callMaterialOrderUpdateDto));
                }
                else
                {
                    var callMaterialOrderCreateDto = new CallMaterialOrderCreateDto
                    {
MaterialMode = impItem.MaterialMode,
MaterialBatch = impItem.MaterialBatch,
CallMaterialStatus = impItem.CallMaterialStatus,
Quantity = impItem.Quantity,
WmsRetResult = impItem.WmsRetResult,
WmsTaskNo = impItem.WmsTaskNo,
Remark = impItem.Remark,
                    };
                    callMaterialOrderUpdateDtos.Add((impItem.RowIndex, oldCallMaterialOrder.Id, callMaterialOrderUpdateDto));
                }
                else
                {
                    var callMaterialOrderCreateDto = new CallMaterialOrderCreateDto
                    {
                        DataIdentifier = impItem.DataIdentifier,
                        MaterialMode = impItem.MaterialMode,
                        CallMaterialStatus = impItem.CallMaterialStatus,
                        Quantity = impItem.Quantity,
                        WmsRetResult = impItem.WmsRetResult,
                        WmsTaskNo = impItem.WmsTaskNo,
                        Remark = impItem.Remark,
                    };
                    callMaterialOrderCreateDtos.Add((impItem.RowIndex, callMaterialOrderCreateDto));
                }
            }
        }
MaterialMode = impItem.MaterialMode,
MaterialBatch = impItem.MaterialBatch,
CallMaterialStatus = impItem.CallMaterialStatus,
Quantity = impItem.Quantity,
WmsRetResult = impItem.WmsRetResult,
WmsTaskNo = impItem.WmsTaskNo,
Remark = impItem.Remark,
                    };
                    callMaterialOrderCreateDtos.Add((impItem.RowIndex, callMaterialOrderCreateDto));
                }
            }
        }
        // æ–°å¢ž 
        foreach (var callMaterialOrderDto in callMaterialOrderCreateDtos)
        {
            try
            {
                await CreateAsync(callMaterialOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{callMaterialOrderDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        foreach (var callMaterialOrderDto in callMaterialOrderCreateDtos)
        {
            try
            {
                callMaterialOrderDto.Item.CreatorName = myCurrentUser.UserAccount;//创建人
                await CreateAsync(callMaterialOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{callMaterialOrderDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–° 
        foreach (var callMaterialOrderDto in callMaterialOrderUpdateDtos)
        {
            try
            {
                await UpdateAsync(callMaterialOrderDto.Id, callMaterialOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{callMaterialOrderDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
        foreach (var callMaterialOrderDto in callMaterialOrderUpdateDtos)
        {
            try
            {
                callMaterialOrderDto.Item.LastModifierName = myCurrentUser.UserAccount;//修改人
                await UpdateAsync(callMaterialOrderDto.Id, callMaterialOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{callMaterialOrderDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <summary> 
    /// å¯¼å‡ºå«æ–™å•表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(CallMaterialOrder.Sort);
        }
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(CallMaterialOrder.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶  
        //动态构造查询条件  
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _callMaterialOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = "叫料单";
        return (sheets, fileName);
    }
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _callMaterialOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<CallMaterialOrder>, List<CallMaterialOrderDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = "叫料单";
        return (sheets, fileName);
    }
    /// <summary> 
    /// æ ¡éªŒå«æ–™å•表,当新建或更新时 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    protected Task CheckCreateOrUpdateDtoAsync(CallMaterialOrderCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.DataIdentifier, "原料标识", 256);
    protected Task CheckCreateOrUpdateDtoAsync(CallMaterialOrderCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
                Check.NotNullOrWhiteSpace(input.DataIdentifier, "原料标识", 256);
        Check.NotNull(input.CallMaterialStatus, "叫料状态");
        Check.NotNull(input.Quantity, "叫料数量");
        return Task.CompletedTask;
    }
    /// <summary>
        return Task.CompletedTask;
    }
     /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–å«æ–™å•è¡¨åˆ—è¡¨ 
    /// </summary> 
    /// <param name="whereConditions"></param> 
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    public async Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await _callMaterialOrderRepository.GetListByFilterAsync(whereConditions);
    }
    public async Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await _callMaterialOrderRepository.GetListByFilterAsync(whereConditions);
    }
    /// <summary> 
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªå«æ–™å•è¡¨ 
    /// </summary> 
@@ -446,8 +464,8 @@
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public async Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        return await _callMaterialOrderRepository.GetSingleByFilterAsync(whereConditions, is​MultipleThrowException);
    }
}
    public async Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        return await _callMaterialOrderRepository.GetSingleByFilterAsync(whereConditions, is​MultipleThrowException);
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/CallMaterialOrderRecordAppService.cs
@@ -1,127 +1,129 @@
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using CMS.Plugin.PipeLineLems.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectMapping;
namespace CMS.Plugin.PipeLineLems.Application.Implements;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using CMS.Plugin.PipeLineLems.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.PipeLineLems.Domain.CallMaterialOrderRecord;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectMapping;
using CmsQueryExtensions.Entitys;
namespace CMS.Plugin.PipeLineLems.Application.Implements;
/// <summary> 
/// å«æ–™è®°å½•表应用服务 
/// </summary> 
public class CallMaterialOrderRecordAppService : CMSPluginAppService, ICallMaterialOrderRecordAppService
{
    private readonly ICallMaterialOrderRecordRepository callMaterialOrderRecordRepository;
public class CallMaterialOrderRecordAppService : CMSPluginAppService, ICallMaterialOrderRecordAppService
{
    private readonly ICallMaterialOrderRecordRepository _callMaterialOrderRecordRepository;
    /// <summary> 
    /// Initializes a new instance of the <see cref="CallMaterialOrderRecordAppService"/> class. 
    /// </summary> 
    /// <param name="CallMaterialOrderRecordRepository">The task job repository.</param> 
    public CallMaterialOrderRecordAppService(ICallMaterialOrderRecordRepository _CallMaterialOrderRecordRepository)
    {
        callMaterialOrderRecordRepository = _CallMaterialOrderRecordRepository;
    }
    public CallMaterialOrderRecordAppService(ICallMaterialOrderRecordRepository callMaterialOrderRecordRepository)
    {
        _callMaterialOrderRecordRepository = callMaterialOrderRecordRepository;
    }
    /// <summary> 
    /// èŽ·å–æŒ‡å®šå«æ–™è®°å½•è¡¨ 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual async Task<CallMaterialOrderRecordDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(await callMaterialOrderRecordRepository.GetAsync(id));
    }
    public virtual async Task<CallMaterialOrderRecordDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(await _callMaterialOrderRecordRepository.GetAsync(id));
    }
    /// <summary> 
    /// åˆ†é¡µèŽ·å–å«æ–™è®°å½•è¡¨ 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public virtual async Task<PagedResultDto<CallMaterialOrderRecordDto>> GetListAsync(GetCallMaterialOrderRecordInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(CallMaterialOrderRecord.Sort);
        }
    public virtual async Task<PagedResultDto<CallMaterialOrderRecordDto>> GetListAsync(GetCallMaterialOrderRecordInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(CallMaterialOrderRecord.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶  
        //动态构造查询条件  
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await callMaterialOrderRecordRepository.GetCountAsync(whereConditions);
        var list = await callMaterialOrderRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<CallMaterialOrderRecordDto>(count, ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(list));
    }
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await _callMaterialOrderRecordRepository.GetCountAsync(whereConditions);
        var list = await _callMaterialOrderRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<CallMaterialOrderRecordDto>(count, ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(list));
    }
    /// <summary>  
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶  
    /// </summary>  
    /// <param name="input">输入参数</param>  
    /// <returns></returns>  
    private FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> DynamicGetQueryParams(GetCallMaterialOrderRecordInput input)
    {
    private FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> DynamicGetQueryParams(GetCallMaterialOrderRecordInput input)
    {
        //动态构造查询条件  
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrderRecord, GetCallMaterialOrderRecordInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<CallMaterialOrderRecord, GetCallMaterialOrderRecordInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件  
        Expression<Func<CallMaterialOrderRecord, bool>> extendExpression = a => a.IsDeleted == false;
        Expression<Func<CallMaterialOrderRecord, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And 
        var pres = (System.Linq.Expressions.Expression<Func<CallMaterialOrderRecord, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
        var pres = (System.Linq.Expressions.Expression<Func<CallMaterialOrderRecord, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <summary> 
    /// æ–°å»ºå«æ–™è®°å½•表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public virtual async Task<CallMaterialOrderRecordDto> CreateAsync(CallMaterialOrderRecordCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await callMaterialOrderRecordRepository.NameExistAsync(input.DataIdentifier);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
        }
        var maxSort = await callMaterialOrderRecordRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<CallMaterialOrderRecordCreateDto, CallMaterialOrderRecord>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await callMaterialOrderRecordRepository.InsertAsync(insertObj);
    public virtual async Task<CallMaterialOrderRecordDto> CreateAsync(CallMaterialOrderRecordCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await _callMaterialOrderRecordRepository.NameExistAsync(input.DataIdentifier);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
        }
        var maxSort = await _callMaterialOrderRecordRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<CallMaterialOrderRecordCreateDto, CallMaterialOrderRecord>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        insertObj.CreatorName = input.CreatorName;//创建人
        await _callMaterialOrderRecordRepository.InsertAsync(insertObj);
        //if (input.Sort.HasValue && insertObj.Sort != maxSort) 
        //{ 
        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort); 
        //} 
        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(insertObj);
    }
        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(insertObj);
    }
    /// <summary> 
    /// æ›´æ–°å«æ–™è®°å½•表 
    /// </summary> 
@@ -129,288 +131,341 @@
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public virtual async Task<CallMaterialOrderRecordDto> UpdateAsync(Guid id, CallMaterialOrderRecordUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await callMaterialOrderRecordRepository.GetAsync(id);
        var exist = await callMaterialOrderRecordRepository.NameExistAsync(input.DataIdentifier, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
                updateObj.DataIdentifier = input.DataIdentifier;
    public virtual async Task<CallMaterialOrderRecordDto> UpdateAsync(Guid id, CallMaterialOrderRecordUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await _callMaterialOrderRecordRepository.GetAsync(id);
        var exist = await _callMaterialOrderRecordRepository.NameExistAsync(input.DataIdentifier, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.DataIdentifier]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
        updateObj.DataIdentifier = input.DataIdentifier;
        updateObj.MaterialMode = input.MaterialMode;
        updateObj.MaterialBatch = input.MaterialBatch;
        updateObj.CallMaterialStatus = input.CallMaterialStatus;
        updateObj.Quantity = input.Quantity;
        updateObj.WmsRetResult = input.WmsRetResult;
        updateObj.WmsTaskNo = input.WmsTaskNo;
        updateObj.Remark = input.Remark;
        await callMaterialOrderRecordRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(updateObj);
    }
        await _callMaterialOrderRecordRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<CallMaterialOrderRecord, CallMaterialOrderRecordDto>(updateObj);
    }
    /// <summary> 
    /// å…‹éš†å«æ–™è®°å½•表 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    public async Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids)
    {
    public async Task<List<CallMaterialOrderRecordDto>> CloneAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser)
    {
        //var callMaterialOrderRecords = new List<CallMaterialOrderRecord>(); 
        //if (ids != null) 
        //{ 
        //    var sort = await callMaterialOrderRecordRepository.GetMaxSortAsync();
        //    var sort = await _callMaterialOrderRecordRepository.GetMaxSortAsync();
        //    foreach (var id in ids) 
        //    { 
        //        var CallMaterialOrderRecord = await callMaterialOrderRecordRepository.FindAsync(id);
        //        var CallMaterialOrderRecord = await _callMaterialOrderRecordRepository.FindAsync(id);
        //        if (CallMaterialOrderRecord != null) 
        //        { 
        //            var name = CallMaterialOrderRecord.Name + CallMaterialOrderRecordConsts.CloneTag; 
        //            var notExist = false; 
        //            while (!notExist) 
        //            { 
        //                var exist = await callMaterialOrderRecordRepository.NameExistAsync(name);
        //                var exist = await _callMaterialOrderRecordRepository.NameExistAsync(name);
        //                if (exist || callMaterialOrderRecords.Any(x => x.Name == name)) 
        //                { 
        //                    name += CallMaterialOrderRecordConsts.CloneTag; 
        //                    continue; 
        //                } 
        //                notExist = true; 
        //            } 
        //            //CallMaterialOrderRecord = await callMaterialOrderRecordRepository.InsertAsync(CallMaterialOrderRecord.Clone(GuidGenerator.Create(), name, sort++));
        //            //CallMaterialOrderRecord = await _callMaterialOrderRecordRepository.InsertAsync(CallMaterialOrderRecord.Clone(GuidGenerator.Create(), name, sort++));
        //            callMaterialOrderRecords.Add(CallMaterialOrderRecord); 
        //        } 
        //    } 
        //} 
        //return ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(callMaterialOrderRecords); 
        return new List<CallMaterialOrderRecordDto>();
    }
        return new List<CallMaterialOrderRecordDto>();
    }
    /// <summary> 
    /// åˆ é™¤å•个叫料记录表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual Task DeleteAsync(Guid id)
    {
        return callMaterialOrderRecordRepository.DeleteAsync(id);
    }
    public virtual Task DeleteAsync(Guid id)
    {
        return _callMaterialOrderRecordRepository.DeleteAsync(id);
    }
    /// <summary> 
    /// åˆ é™¤å¤šä¸ªå«æ–™è®°å½•表 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    public async Task DeleteManyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    /// <summary>
    /// ç‰©ç†åˆ é™¤å«æ–™è®°å½•表
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task DeletePermanentlyAsync(Guid id, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default)
    {
        _callMaterialOrderRecordRepository.DeletePermanentlyAsync(id);
    }
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤å«æ–™è®°å½•表(直接删除,不软删除)
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, MyCurrentUser myCurrentUser, CancellationToken cancellationToken = default)
    {
        _callMaterialOrderRecordRepository.BatchDeletePermanentlyAsync(ids);
    }
    /// <summary> 
    /// è°ƒæ•´æŽ’序叫料记录表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <param name="sort"></param> 
    /// <returns></returns> 
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await callMaterialOrderRecordRepository.GetListAsync(null, nameof(CallMaterialOrderRecord.Sort));
        if (list != null && list.Any())
        {
            var initSort = 1;
            list.ForEach(x => x.AdjustSort(initSort++));
            var entity = list.FirstOrDefault(x => x.Id == id);
            if (entity != null)
            {
                if (sort == 1)
                {
                    list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                }
                else if (entity.Sort > sort)
                {
                    list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                else if (entity.Sort < sort)
                {
                    list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                entity.AdjustSort(sort);
            }
        }
        await callMaterialOrderRecordRepository.UpdateManyAsync(list);
    }
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _callMaterialOrderRecordRepository.GetListAsync(null, nameof(CallMaterialOrderRecord.Sort));
        if (list != null && list.Any())
        {
            var initSort = 1;
            list.ForEach(x => x.AdjustSort(initSort++));
            var entity = list.FirstOrDefault(x => x.Id == id);
            if (entity != null)
            {
                if (sort == 1)
                {
                    list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                }
                else if (entity.Sort > sort)
                {
                    list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                else if (entity.Sort < sort)
                {
                    list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
                    list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
                }
                entity.AdjustSort(sort);
            }
        }
        await _callMaterialOrderRecordRepository.UpdateManyAsync(list);
    }
    /// <summary> 
    /// å¯¼å…¥å«æ–™è®°å½•表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public async Task ImportAsync(CallMaterialOrderRecordsImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var callMaterialOrderRecordCreateDtos = new List<(int RowIndex, CallMaterialOrderRecordCreateDto Item)>();
        var callMaterialOrderRecordUpdateDtos = new List<(int RowIndex, Guid Id, CallMaterialOrderRecordUpdateDto Item)>();
        var importItems = input.CallMaterialOrderRecords;
        if (importItems != null && importItems.Any())
        {
    public async Task ImportAsync(CallMaterialOrderRecordsImportModel input, MyCurrentUser myCurrentUser)
    {
        Check.NotNull(input, nameof(input));
        var callMaterialOrderRecordCreateDtos = new List<(int RowIndex, CallMaterialOrderRecordCreateDto Item)>();
        var callMaterialOrderRecordUpdateDtos = new List<(int RowIndex, Guid Id, CallMaterialOrderRecordUpdateDto Item)>();
        var importItems = input.CallMaterialOrderRecords;
        if (importItems != null && importItems.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ 
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复 
            var duplicateCallMaterialOrderRecords = importItems.GroupBy(x => x.DataIdentifier).Where(x => x.Count() > 1).ToList();
            if (duplicateCallMaterialOrderRecords?.Any() == true)
            {
                var duplicateCallMaterialOrderRecordMsgs = duplicateCallMaterialOrderRecords.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateCallMaterialOrderRecordMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:CallMaterialOrderRecord名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldCallMaterialOrderRecord = await callMaterialOrderRecordRepository.FindByNameAsync(impItem.DataIdentifier);
                if (oldCallMaterialOrderRecord != null)
                {
                    var callMaterialOrderRecordUpdateDto = new CallMaterialOrderRecordUpdateDto
                    {
            var duplicateCallMaterialOrderRecords = importItems.GroupBy(x => x.DataIdentifier).Where(x => x.Count() > 1).ToList();
            if (duplicateCallMaterialOrderRecords?.Any() == true)
            {
                var duplicateCallMaterialOrderRecordMsgs = duplicateCallMaterialOrderRecords.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateCallMaterialOrderRecordMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.DataIdentifier.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:CallMaterialOrderRecord名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldCallMaterialOrderRecord = await _callMaterialOrderRecordRepository.FindByNameAsync(impItem.DataIdentifier);
                if (oldCallMaterialOrderRecord != null)
                {
                    var callMaterialOrderRecordUpdateDto = new CallMaterialOrderRecordUpdateDto
                    {
                        DataIdentifier = impItem.DataIdentifier,
MaterialMode = impItem.MaterialMode,
CallMaterialStatus = impItem.CallMaterialStatus,
Quantity = impItem.Quantity,
WmsRetResult = impItem.WmsRetResult,
WmsTaskNo = impItem.WmsTaskNo,
Remark = impItem.Remark,
                    };
                    callMaterialOrderRecordUpdateDtos.Add((impItem.RowIndex, oldCallMaterialOrderRecord.Id, callMaterialOrderRecordUpdateDto));
                }
                else
                {
                    var callMaterialOrderRecordCreateDto = new CallMaterialOrderRecordCreateDto
                    {
                        MaterialMode = impItem.MaterialMode,
                        MaterialBatch = impItem.MaterialBatch,
                        CallMaterialStatus = impItem.CallMaterialStatus,
                        Quantity = impItem.Quantity,
                        WmsRetResult = impItem.WmsRetResult,
                        WmsTaskNo = impItem.WmsTaskNo,
                        Remark = impItem.Remark,
                    };
                    callMaterialOrderRecordUpdateDtos.Add((impItem.RowIndex, oldCallMaterialOrderRecord.Id, callMaterialOrderRecordUpdateDto));
                }
                else
                {
                    var callMaterialOrderRecordCreateDto = new CallMaterialOrderRecordCreateDto
                    {
                        DataIdentifier = impItem.DataIdentifier,
MaterialMode = impItem.MaterialMode,
CallMaterialStatus = impItem.CallMaterialStatus,
Quantity = impItem.Quantity,
WmsRetResult = impItem.WmsRetResult,
WmsTaskNo = impItem.WmsTaskNo,
Remark = impItem.Remark,
                    };
                    callMaterialOrderRecordCreateDtos.Add((impItem.RowIndex, callMaterialOrderRecordCreateDto));
                }
            }
        }
                        MaterialMode = impItem.MaterialMode,
                        MaterialBatch = impItem.MaterialBatch,
                        CallMaterialStatus = impItem.CallMaterialStatus,
                        Quantity = impItem.Quantity,
                        WmsRetResult = impItem.WmsRetResult,
                        WmsTaskNo = impItem.WmsTaskNo,
                        Remark = impItem.Remark,
                    };
                    callMaterialOrderRecordCreateDtos.Add((impItem.RowIndex, callMaterialOrderRecordCreateDto));
                }
            }
        }
        // æ–°å¢ž 
        foreach (var callMaterialOrderRecordDto in callMaterialOrderRecordCreateDtos)
        {
            try
            {
                await CreateAsync(callMaterialOrderRecordDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{callMaterialOrderRecordDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        foreach (var callMaterialOrderRecordDto in callMaterialOrderRecordCreateDtos)
        {
            try
            {
                callMaterialOrderRecordDto.Item.CreatorName = myCurrentUser.UserAccount;//创建人
                await CreateAsync(callMaterialOrderRecordDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{callMaterialOrderRecordDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–° 
        foreach (var callMaterialOrderRecordDto in callMaterialOrderRecordUpdateDtos)
        {
            try
            {
                await UpdateAsync(callMaterialOrderRecordDto.Id, callMaterialOrderRecordDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{callMaterialOrderRecordDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
        foreach (var callMaterialOrderRecordDto in callMaterialOrderRecordUpdateDtos)
        {
            try
            {
                callMaterialOrderRecordDto.Item.LastModifierName = myCurrentUser.UserAccount;//修改人
                await UpdateAsync(callMaterialOrderRecordDto.Id, callMaterialOrderRecordDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{callMaterialOrderRecordDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <summary> 
    /// å¯¼å‡ºå«æ–™è®°å½•表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderRecordInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(CallMaterialOrderRecord.Sort);
        }
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetCallMaterialOrderRecordInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(CallMaterialOrderRecord.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶  
        //动态构造查询条件  
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await callMaterialOrderRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = "叫料记录";
        return (sheets, fileName);
    }
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _callMaterialOrderRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<CallMaterialOrderRecord>, List<CallMaterialOrderRecordDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = "叫料记录";
        return (sheets, fileName);
    }
    /// <summary> 
    /// æ ¡éªŒå«æ–™è®°å½•表,当新建或更新时 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    protected Task CheckCreateOrUpdateDtoAsync(CallMaterialOrderRecordCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
                Check.NotNullOrWhiteSpace(input.DataIdentifier, "原料标识", 256);
    protected Task CheckCreateOrUpdateDtoAsync(CallMaterialOrderRecordCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.DataIdentifier, "原料标识", 256);
        Check.NotNull(input.CallMaterialStatus, "叫料状态");
        Check.NotNull(input.Quantity, "叫料数量");
        return Task.CompletedTask;
    }
}
        return Task.CompletedTask;
    }
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–å«æ–™è®°å½•è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<CallMaterialOrderRecord>> GetListByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await _callMaterialOrderRecordRepository.GetListByFilterAsync(whereConditions);
    }
    /// <summary>
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªå«æ–™è®°å½•è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task<CallMaterialOrderRecord> GetSingleByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        return await _callMaterialOrderRecordRepository.GetSingleByFilterAsync(whereConditions, is​MultipleThrowException);
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/SharedService.cs
@@ -25,6 +25,12 @@
using CMS.Plugin.TraceManagement.Abstractions;
using CMS.Plugin.ProductManagement.Abstractions.Models;
using CMS.Plugin.MaterialManagement.Abstractions;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
using System.Collections.Generic;
using CMS.Plugin.HIAWms.Abstractions;
using Newtonsoft.Json;
using CmsQueryExtensions;
namespace CMS.Plugin.PipeLineLems.Application.Implements;
@@ -437,9 +443,9 @@
    /// <param name="_serviceProvider">服务提供者</param>
    /// <returns>操作结果</returns>
    /// <exception cref="UserFriendlyException">当数据不存在或状态不允许叫料时抛出</exception>
    public async Task<MesOrderResponse> CallMaterialByDataIdentifier(Guid id, IServiceProvider _serviceProvider)
    public async Task<MesOrderResponse> CallMaterial(CallMaterialByDataIdentifierInput input, IServiceProvider _serviceProvider, MyCurrentUser myCurrentUser)
    {
        if (string.IsNullOrEmpty(id.ToString()))
        if (string.IsNullOrEmpty(input.Id.ToString()))
        {
            throw new UserFriendlyException("原料标识不能为空");
        }
@@ -451,7 +457,7 @@
        // æŸ¥æ‰¾æ•°æ®
        var callMaterialOrder = await callMaterialOrderRepository.GetAsync(id);
        var callMaterialOrder = await callMaterialOrderRepository.GetAsync(input.Id);
        if (callMaterialOrder == null)
        {
            throw new UserFriendlyException($"找不到叫料记录");
@@ -460,10 +466,38 @@
        // éªŒè¯çŠ¶æ€
        if (callMaterialOrder.CallMaterialStatus != Domain.Shared.Enums.CallMaterialStatusEnum.未执行)
        {
            throw new UserFriendlyException($"原料标识为 '{callMaterialOrder.DataIdentifier}' çš„叫料记录状态为 '{callMaterialOrder.CallMaterialStatus}',不允许叫料");
            //throw new UserFriendlyException($"原料标识为 '{callMaterialOrder.DataIdentifier}' çš„叫料记录状态为 '{callMaterialOrder.CallMaterialStatus}',不允许叫料");
        }
        //TODO:这里调用wms的叫料接口
        try
        {
            List<LMesCallMaterialInput> param = new List<LMesCallMaterialInput>() {
             new LMesCallMaterialInput(){
                     DataIdentifier=callMaterialOrder.DataIdentifier,
                      MaterialMode="Q235B-Φ89×4",
             }
        };
            string baseUrl = @"http://127.0.0.1:18000/api/v1/HIAWms/";
            string url = baseUrl + "lMesOperate/LMesCallMaterial";
            string json = JsonConvert.SerializeObject(param);
            var result = HttpApiRequest.HttpPost(url, json);
            var res = JsonConvert.DeserializeObject<CmsApiResponse<List<MyCallMaterialOutput>>>(result);
            if (res.Code == 200)
            {
                var retData = res.Data;
                callMaterialOrder.MaterialBatch = retData[0].MaterialBatch;
            }
            else {
                throw new UserFriendlyException(res.Message);
            }
        }
        catch (Exception)
        {
            throw;
        }
        // æ›´æ–°æ•°æ®
        callMaterialOrder.MaterialBatch = GenerateRandomBatch();//wms返回的原料批次
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrder/ICallMaterialOrderRepository.cs
@@ -15,10 +15,8 @@
    /// <param name="name"></param> 
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    Task<CallMaterialOrder> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    Task<CallMaterialOrder> FindByWmsTaskNoAsync(string wmsTaskNo, CancellationToken cancellationToken = default);
    Task<CallMaterialOrder> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary> 
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨å«æ–™å•表 
    /// </summary> 
@@ -31,11 +29,8 @@
    /// èŽ·å–æœ€å¤§æŽ’åºå«æ–™å•è¡¨ 
    /// </summary> 
    /// <returns></returns> 
    Task<int> GetMaxSortAsync();
    Task<int> GetMaxSortAsync();
    /// <summary> 
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨å«æ–™å•è¡¨ 
    /// </summary> 
@@ -54,16 +49,33 @@
    /// <param name="whereConditions"></param> 
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> whereConditions, CancellationToken cancellationToken = default);
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrder, bool>>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    /// ç‰©ç†åˆ é™¤å«æ–™å•表
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤å«æ–™å•表(直接删除,不软删除)
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default);
    /// <summary> 
    /// æ ¹æ®æ¡ä»¶èŽ·å–å«æ–™å•è¡¨åˆ—è¡¨ 
    /// </summary> 
    /// <param name="whereConditions"></param> 
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default);
    Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary> 
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªå«æ–™å•è¡¨ 
    /// </summary> 
@@ -72,5 +84,5 @@
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
    Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Domain/CallMaterialOrderRecord/ICallMaterialOrderRecordRepository.cs
@@ -50,4 +50,39 @@
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<CallMaterialOrderRecord, bool>>> whereConditions, CancellationToken cancellationToken = default); 
    /// <summary>
    /// ç‰©ç†åˆ é™¤å«æ–™è®°å½•表
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤å«æ–™è®°å½•表(直接删除,不软删除)
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–å«æ–™è®°å½•è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<CallMaterialOrderRecord>> GetListByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, CancellationToken cancellationToken = default);
    /// <summary>
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªå«æ–™è®°å½•è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    Task<CallMaterialOrderRecord> GetSingleByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default);
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRecordRepository.cs
@@ -4,6 +4,7 @@
using Microsoft.EntityFrameworkCore; 
using System.Linq.Dynamic.Core; 
using System.Linq.Expressions; 
using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; 
using Volo.Abp.EntityFrameworkCore; 
 
@@ -110,4 +111,108 @@
        return (await GetQueryableAsync()) 
            .Where(x => !x.IsDeleted).IncludeDetails(); 
    } 
    /// <summary>
    /// ç‰©ç†åˆ é™¤å«æ–™è®°å½•表
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default)
    {
        var entity = await (await GetDbSetAsync())
            .FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted, GetCancellationToken(cancellationToken));
        if (entity == null)
        {
            throw new Volo.Abp.Domain.Entities.EntityNotFoundException(typeof(CallMaterialOrderRecord), id);
        }
        // 2. èŽ·å– DbContext å¹¶æ‰§è¡Œåˆ é™¤
        var dbContext = await GetDbContextAsync();
        // ç›´æŽ¥æ‰§è¡Œ SQL åˆ é™¤
        var sql = $"DELETE FROM scms_callmaterialorderrecords WHERE Id ='{entity.Id.ToString()}'";
        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken);
    }
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤å«æ–™è®°å½•表(直接删除,不软删除)
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default)
    {
        // 1. æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„实体(未软删除的记录)
        var entities = await (await GetDbSetAsync())
            .Where(x => ids.Contains(x.Id) && !x.IsDeleted)
            .ToListAsync(GetCancellationToken(cancellationToken));
        if (!entities.Any())
        {
            // å¦‚果没有需要删除的记录,直接返回(避免不必要的数据库操作)
            return;
        }
        // 2. èŽ·å– DbContext å¹¶æ‰§è¡Œæ‰¹é‡åˆ é™¤
        var dbContext = await GetDbContextAsync();
        var idsToDelete = entities.Select(e => e.Id).ToList();
        // ç›´æŽ¥æ‰§è¡Œ SQL åˆ é™¤
        var sql = $"DELETE FROM scms_callmaterialorderrecords WHERE Id IN ({string.Join(",", idsToDelete.Select(id => $"'{id}'"))})";
        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken);
    }
    /// <summary>
    /// æ ¹æ®æ¡ä»¶èŽ·å–å«æ–™è®°å½•è¡¨åˆ—è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<CallMaterialOrderRecord>> GetListByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .WhereIf(whereConditions != null, whereConditions)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x => x.CreationTime)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªå«æ–™è®°å½•è¡¨
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="isMultipleThrowException">是否查询出多条就报错</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task<CallMaterialOrderRecord> GetSingleByFilterAsync(Expression<Func<CallMaterialOrderRecord, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        if (is​MultipleThrowException)
        {
            var entitys = await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .ToListAsync(GetCancellationToken(cancellationToken));
            if (entitys?.Count > 1)
            {
                throw new UserFriendlyException("查询到多条记录");
            }
            return entitys?.FirstOrDefault();
        }
        else
        {
            return await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
        }
    }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreCallMaterialOrderRepository.cs
@@ -3,8 +3,8 @@
using CmsQueryExtensions.Extension; 
using Microsoft.EntityFrameworkCore; 
using System.Linq.Dynamic.Core; 
using System.Linq.Expressions;
using Volo.Abp;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; 
using Volo.Abp.EntityFrameworkCore; 
 
@@ -38,17 +38,8 @@
            .Where(x => !x.IsDeleted) 
            .OrderByDescending(x=>x.CreationTime)  
            .FirstOrDefaultAsync(t => t.DataIdentifier == name, GetCancellationToken(cancellationToken)); 
    }
    public virtual async Task<CallMaterialOrder> FindByWmsTaskNoAsync(string wmsTaskNo, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x => x.CreationTime)
            .FirstOrDefaultAsync(t => t.WmsTaskNo == wmsTaskNo, GetCancellationToken(cancellationToken));
    }
    }
    /// <summary> 
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨å«æ–™å•表 
    /// </summary> 
@@ -119,24 +110,77 @@
    { 
        return (await GetQueryableAsync()) 
            .Where(x => !x.IsDeleted).IncludeDetails(); 
    }
    }
    /// <summary>
    /// ç‰©ç†åˆ é™¤å«æ–™å•表
    /// </summary>
    /// <param name="id">主键ID</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken = default)
    {
        var entity = await (await GetDbSetAsync())
            .FirstOrDefaultAsync(x => x.Id == id && !x.IsDeleted, GetCancellationToken(cancellationToken));
        if (entity == null)
        {
            throw new Volo.Abp.Domain.Entities.EntityNotFoundException(typeof(CallMaterialOrder), id);
        }
        // 2. èŽ·å– DbContext å¹¶æ‰§è¡Œåˆ é™¤
        var dbContext = await GetDbContextAsync();
        // ç›´æŽ¥æ‰§è¡Œ SQL åˆ é™¤
        var sql = $"DELETE FROM scms_callmaterialorders WHERE Id ='{entity.Id.ToString()}'";
        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken);
    }
    /// <summary>
    /// æ‰¹é‡ç‰©ç†åˆ é™¤å«æ–™å•表(直接删除,不软删除)
    /// </summary>
    /// <param name="ids">要删除的主键ID列表</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task BatchDeletePermanentlyAsync(IEnumerable<Guid> ids, CancellationToken cancellationToken = default)
    {
        // 1. æŸ¥è¯¢ç¬¦åˆæ¡ä»¶çš„实体(未软删除的记录)
        var entities = await (await GetDbSetAsync())
            .Where(x => ids.Contains(x.Id) && !x.IsDeleted)
            .ToListAsync(GetCancellationToken(cancellationToken));
        if (!entities.Any())
        {
            // å¦‚果没有需要删除的记录,直接返回(避免不必要的数据库操作)
            return;
        }
        // 2. èŽ·å– DbContext å¹¶æ‰§è¡Œæ‰¹é‡åˆ é™¤
        var dbContext = await GetDbContextAsync();
        var idsToDelete = entities.Select(e => e.Id).ToList();
        // ç›´æŽ¥æ‰§è¡Œ SQL åˆ é™¤
        var sql = $"DELETE FROM scms_callmaterialorders WHERE Id IN ({string.Join(",", idsToDelete.Select(id => $"'{id}'"))})";
        await dbContext.Database.ExecuteSqlRawAsync(sql, cancellationToken);
    }
    /// <summary> 
    /// æ ¹æ®æ¡ä»¶èŽ·å–å«æ–™å•è¡¨åˆ—è¡¨ 
    /// </summary> 
    /// <param name="whereConditions"></param> 
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    public async Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .WhereIf(whereConditions != null, whereConditions)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x => x.CreationTime)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    public async Task<List<CallMaterialOrder>> GetListByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .WhereIf(whereConditions != null, whereConditions)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x => x.CreationTime)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary> 
    ///  æ ¹æ®æ¡ä»¶èŽ·å–å•ä¸ªå«æ–™å•è¡¨ 
    /// </summary> 
@@ -145,30 +189,30 @@
    /// <param name="cancellationToken"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public async Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        if (is​MultipleThrowException)
        {
            var entitys = await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .ToListAsync(GetCancellationToken(cancellationToken));
            if (entitys?.Count > 1)
            {
                throw new UserFriendlyException("查询到多条记录");
            }
            return entitys?.FirstOrDefault();
        }
        else
        {
            return await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
        }
    }
    public async Task<CallMaterialOrder> GetSingleByFilterAsync(Expression<Func<CallMaterialOrder, bool>> whereConditions, bool is​MultipleThrowException = false, CancellationToken cancellationToken = default)
    {
        if (is​MultipleThrowException)
        {
            var entitys = await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .ToListAsync(GetCancellationToken(cancellationToken));
            if (entitys?.Count > 1)
            {
                throw new UserFriendlyException("查询到多条记录");
            }
            return entitys?.FirstOrDefault();
        }
        else
        {
            return await (await GetDbSetAsync())
                .IncludeDetails()
                .WhereIf(whereConditions != null, whereConditions)
                .Where(x => !x.IsDeleted)
                .OrderByDescending(x => x.CreationTime)
                .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
        }
    }
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/CMS.Plugin.PipeLineLems.csproj
@@ -56,6 +56,21 @@
    </ItemGroup>
    <ItemGroup>
      <Reference Include="CMS.Plugin.HIAWms.Abstractions">
        <HintPath>..\..\..\..\..\..\Program Files\CMS Editor\plugins\cms.plugin.hiawms\net6.0\CMS.Plugin.HIAWms.Abstractions.dll</HintPath>
      </Reference>
      <Reference Include="CMS.Plugin.HIAWms.Application">
        <HintPath>..\..\..\..\..\..\Program Files\CMS Editor\plugins\cms.plugin.hiawms\net6.0\CMS.Plugin.HIAWms.Application.dll</HintPath>
      </Reference>
      <Reference Include="CMS.Plugin.HIAWms.Application.Contracts">
        <HintPath>..\..\..\..\HIAWms\server\src\CMS.Plugin.HIAWms.Application.Contracts\bin\Debug\net6.0\CMS.Plugin.HIAWms.Application.Contracts.dll</HintPath>
      </Reference>
      <Reference Include="CMS.Plugin.HIAWms.Domain">
        <HintPath>..\..\..\..\..\..\Program Files\CMS Editor\plugins\cms.plugin.hiawms\net6.0\CMS.Plugin.HIAWms.Domain.dll</HintPath>
      </Reference>
      <Reference Include="CMS.Plugin.HIAWms.EntityFrameworkCore">
        <HintPath>..\..\..\..\..\..\Program Files\CMS Editor\plugins\cms.plugin.hiawms\net6.0\CMS.Plugin.HIAWms.EntityFrameworkCore.dll</HintPath>
      </Reference>
      <Reference Include="CmsQueryExtensions">
        <HintPath>..\..\..\..\CommonDLL\CmsQueryExtensions.dll</HintPath>
      </Reference>
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/CMSPluginEntry.cs
@@ -24,6 +24,12 @@
using Volo.Abp.Modularity.PlugIns;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using CMS.Plugin.PipeLineLems.Application.Implements;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Application.Implements;
using CMS.Plugin.HIAWms.Domain.WmsTask;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.Abstractions;
namespace CMS.Plugin.PipeLineLems;
@@ -51,6 +57,13 @@
        context.Services.AddSingleton<IProjectService, PipeLineLemsProjectService>();
        context.Services.AddScoped<IMesAppService, MesAppService>();
        context.Services.AddScoped<IWorkPlanAppService, WorkPlanAppService>();
        //context.Services.AddScoped<ILMesOperateAppService, LMesOperateAppService>();
        //context.Services.AddScoped<IWmsTaskRepository, EfCoreWmsTaskRepository>();
        //context.Services.AddScoped<IWmsMaterialRepository, EfCoreWmsMaterialRepository>();
        //context.Services.AddScoped<IWmsInOutStockOrderAppService, WmsInOutStockOrderAppService>();
        //context.Services.AddScoped<IWmsOutStockAppService, WmsOutStockAppService>();
        context.Services.AddScoped<IEFDataProvider>(p =>
        {
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderController.cs
@@ -1,5 +1,6 @@
using Ao.Lang; 
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; 
using CMS.Framework.AspNetCore.Users;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrder; 
using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
using Microsoft.AspNetCore.Authorization; 
@@ -9,6 +10,7 @@
using System.Reflection; 
using Volo.Abp; 
using Volo.Abp.Application.Dtos; 
using CmsQueryExtensions.Entitys;
 
namespace CMS.Plugin.PipeLineLems.Controller 
@@ -24,39 +26,34 @@
    public class CallMaterialOrderController : ControllerBase 
    { 
        private readonly ICallMaterialOrderAppService _callMaterialOrderAppService; 
        private readonly ICurrentUser _currentUser;
 
        /// <summary> 
        /// Initializes a new instance of the <see cref="CallMaterialOrderController"/> class. 
        /// </summary> 
        /// <param name="callMaterialOrderAppService">The callMaterialOrder application service.</param> 
        public CallMaterialOrderController(ICallMaterialOrderAppService callMaterialOrderAppService)
        public CallMaterialOrderController(ICallMaterialOrderAppService callMaterialOrderAppService, ICurrentUser currentUser)
        { 
            _callMaterialOrderAppService = callMaterialOrderAppService; 
            _currentUser = currentUser;
        } 
 
        /// <summary> 
        /// èŽ·å–å«æ–™å•è¡¨ 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="id">主键ID</param>
        /// <returns></returns> 
        [HttpGet] 
        [Route("{id}")] 
        public virtual Task<CallMaterialOrderDto> GetAsync(Guid id) 
        { 
            return _callMaterialOrderAppService.GetAsync(id); 
        }
        [HttpPut]
        [Route("CallMaterialByDataIdentifier/{id}")]
        public virtual Task CallMaterialByDataIdentifier(Guid id)
        {
            return _callMaterialOrderAppService.CallMaterialByDataIdentifier(id);
        }
        }
        /// <summary> 
        /// åˆ†é¡µèŽ·å–å«æ–™å•è¡¨çš„åˆ—è¡¨. 
        /// </summary> 
        /// <param name="input">输入.</param>
        /// <param name="input">查询参数</param>
        /// <returns></returns> 
        [HttpGet] 
        [Route("Page")] 
@@ -68,71 +65,90 @@
        /// <summary> 
        /// åˆ›å»ºå«æ–™å•表 
        /// </summary> 
        /// <param name="input">输入.</param>
        /// <param name="input">创建参数</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpPost] 
        public virtual Task<CallMaterialOrderDto> CreateAsync(CallMaterialOrderCreateDto input) 
        { 
            input.CreatorName = _currentUser.UserAccount;//创建人
            return _callMaterialOrderAppService.CreateAsync(input); 
        } 
 
        /// <summary> 
        /// æ›´æ–°å«æ–™å•表 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <param name="id">主键ID</param>
        /// <param name="input">更新参数</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpPut] 
        [Route("{id}")] 
        public virtual Task<CallMaterialOrderDto> UpdateAsync(Guid id, CallMaterialOrderUpdateDto input) 
        { 
            input.LastModifierName = _currentUser.UserAccount;//修改人
            return _callMaterialOrderAppService.UpdateAsync(id, input); 
        } 
 
        /// <summary> 
        /// å…‹éš†å«æ–™å•表 
        /// </summary> 
        /// <param name="ids">Id集合.</param>
        /// <param name="ids">Id集合</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpPost] 
        [Route("Clone")] 
        public virtual Task<List<CallMaterialOrderDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) 
        { 
            return _callMaterialOrderAppService.CloneAsync(ids);
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            return _callMaterialOrderAppService.CloneAsync(ids, myCurrentUser);
        } 
 
        /// <summary> 
        /// åˆ é™¤å«æ–™å•表 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="id">主键ID</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpDelete] 
        [Route("{id}")] 
        public virtual Task DeleteAsync(Guid id) 
        { 
            return _callMaterialOrderAppService.DeleteAsync(id);
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            //return _wmsMaterialAppService.DeleteAsync(id,myCurrentUser);//逻辑删除
            return _callMaterialOrderAppService.DeletePermanentlyAsync(id, myCurrentUser);//物理删除
        } 
 
        /// <summary> 
        /// æ‰¹é‡åˆ é™¤å«æ–™å•表 
        /// </summary> 
        /// <param name="ids">The ids.</param>
        /// <param name="ids">主键ID集合</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpDelete] 
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) 
        { 
            return _callMaterialOrderAppService.DeleteManyAsync(ids);
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            // return _wmsMaterialAppService.DeleteManyAsync(ids,myCurrentUser);//逻辑删除
            return _callMaterialOrderAppService.BatchDeletePermanentlyAsync(ids, myCurrentUser);//物理删除
        } 
 
        /// <summary> 
        /// è°ƒæ•´æŽ’序叫料单表 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="id">主键ID</param>
        /// <returns></returns> 
        [HttpPut] 
        [Route("{id}/AdjustSort/{sort}")] 
@@ -162,10 +178,15 @@
                throw new UserFriendlyException("请检查导入的表格"); 
            } 
 
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            await _callMaterialOrderAppService.ImportAsync(new CallMaterialOrdersImportModel 
            { 
                CallMaterialOrders = callMaterialOrderRows, 
            });
           },myCurrentUser);
 
            return Ok(); 
        } 
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/CallMaterialOrderRecordController.cs
@@ -1,5 +1,6 @@
using Ao.Lang; 
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters; 
using CMS.Framework.AspNetCore.Users;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.CallMaterialOrderRecord; 
using CMS.Plugin.PipeLineLems.Application.Contracts.Services; 
using Microsoft.AspNetCore.Authorization; 
@@ -9,6 +10,7 @@
using System.Reflection; 
using Volo.Abp; 
using Volo.Abp.Application.Dtos; 
using CmsQueryExtensions.Entitys;
 
namespace CMS.Plugin.PipeLineLems.Controller 
@@ -24,20 +26,22 @@
    public class CallMaterialOrderRecordController : ControllerBase 
    { 
        private readonly ICallMaterialOrderRecordAppService _callMaterialOrderRecordAppService; 
        private readonly ICurrentUser _currentUser;
 
        /// <summary> 
        /// Initializes a new instance of the <see cref="CallMaterialOrderRecordController"/> class. 
        /// </summary> 
        /// <param name="callMaterialOrderRecordAppService">The callMaterialOrderRecord application service.</param> 
        public CallMaterialOrderRecordController(ICallMaterialOrderRecordAppService callMaterialOrderRecordAppService)
        public CallMaterialOrderRecordController(ICallMaterialOrderRecordAppService callMaterialOrderRecordAppService, ICurrentUser currentUser)
        { 
            _callMaterialOrderRecordAppService = callMaterialOrderRecordAppService; 
            _currentUser = currentUser;
        } 
 
        /// <summary> 
        /// èŽ·å–å«æ–™è®°å½•è¡¨ 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="id">主键ID</param>
        /// <returns></returns> 
        [HttpGet] 
        [Route("{id}")] 
@@ -49,7 +53,7 @@
        /// <summary> 
        /// åˆ†é¡µèŽ·å–å«æ–™è®°å½•è¡¨çš„åˆ—è¡¨. 
        /// </summary> 
        /// <param name="input">输入.</param>
        /// <param name="input">查询参数</param>
        /// <returns></returns> 
        [HttpGet] 
        [Route("Page")] 
@@ -61,71 +65,90 @@
        /// <summary> 
        /// åˆ›å»ºå«æ–™è®°å½•表 
        /// </summary> 
        /// <param name="input">输入.</param>
        /// <param name="input">创建参数</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpPost] 
        public virtual Task<CallMaterialOrderRecordDto> CreateAsync(CallMaterialOrderRecordCreateDto input) 
        { 
            input.CreatorName = _currentUser.UserAccount;//创建人
            return _callMaterialOrderRecordAppService.CreateAsync(input); 
        } 
 
        /// <summary> 
        /// æ›´æ–°å«æ–™è®°å½•表 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <param name="id">主键ID</param>
        /// <param name="input">更新参数</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpPut] 
        [Route("{id}")] 
        public virtual Task<CallMaterialOrderRecordDto> UpdateAsync(Guid id, CallMaterialOrderRecordUpdateDto input) 
        { 
            input.LastModifierName = _currentUser.UserAccount;//修改人
            return _callMaterialOrderRecordAppService.UpdateAsync(id, input); 
        } 
 
        /// <summary> 
        /// å…‹éš†å«æ–™è®°å½•表 
        /// </summary> 
        /// <param name="ids">Id集合.</param>
        /// <param name="ids">Id集合</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpPost] 
        [Route("Clone")] 
        public virtual Task<List<CallMaterialOrderRecordDto>> CloneAsync([FromBody] IEnumerable<Guid> ids) 
        { 
            return _callMaterialOrderRecordAppService.CloneAsync(ids);
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            return _callMaterialOrderRecordAppService.CloneAsync(ids, myCurrentUser);
        } 
 
        /// <summary> 
        /// åˆ é™¤å«æ–™è®°å½•表 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="id">主键ID</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpDelete] 
        [Route("{id}")] 
        public virtual Task DeleteAsync(Guid id) 
        { 
            return _callMaterialOrderRecordAppService.DeleteAsync(id);
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            //return _wmsMaterialAppService.DeleteAsync(id,myCurrentUser);//逻辑删除
            return _callMaterialOrderRecordAppService.DeletePermanentlyAsync(id, myCurrentUser);//物理删除
        } 
 
        /// <summary> 
        /// æ‰¹é‡åˆ é™¤å«æ–™è®°å½•表 
        /// </summary> 
        /// <param name="ids">The ids.</param>
        /// <param name="ids">主键ID集合</param>
        /// <returns></returns> 
       [Authorize]
        [Authorize]
        [HttpDelete] 
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids) 
        { 
            return _callMaterialOrderRecordAppService.DeleteManyAsync(ids);
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            // return _wmsMaterialAppService.DeleteManyAsync(ids,myCurrentUser);//逻辑删除
            return _callMaterialOrderRecordAppService.BatchDeletePermanentlyAsync(ids, myCurrentUser);//物理删除
        } 
 
        /// <summary> 
        /// è°ƒæ•´æŽ’序叫料记录表 
        /// </summary> 
        /// <param name="id">标识符.</param>
        /// <param name="id">主键ID</param>
        /// <returns></returns> 
        [HttpPut] 
        [Route("{id}/AdjustSort/{sort}")] 
@@ -155,10 +178,15 @@
                throw new UserFriendlyException("请检查导入的表格"); 
            } 
 
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            await _callMaterialOrderRecordAppService.ImportAsync(new CallMaterialOrderRecordsImportModel 
            { 
                CallMaterialOrderRecords = callMaterialOrderRecordRows, 
            });
           },myCurrentUser);
 
            return Ok(); 
        } 
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs
@@ -47,7 +47,7 @@
        [HttpPost]
        public virtual async Task<MesOrderResponse> GetWorkPlanAsync([FromBody] List<WorkPlanInput> input)
        {
            return await _mesAppService.CreateAsync(input,"","");
            return await _mesAppService.CreateAsync(input, "", "");
        }
        /// <summary>
@@ -67,5 +67,26 @@
            };
            return await sharedService.CommonPick(_serviceProvider, input, myCurrentUser);
        }
        /// <summary>
        /// å«æ–™
        /// </summary>
        /// <param name="input">标识符.</param>
        /// <returns></returns>
        [Authorize]
        [HttpPost]
        [Route("CallMaterial")]
        public virtual async Task<MesOrderResponse> CallMaterial([FromBody] CallMaterialByDataIdentifierInput input)
        {
            MyCurrentUser myCurrentUser = new MyCurrentUser()
            {
                UserAccount = _currentUser.UserAccount,
                UserId = _currentUser.UserId
            };
            return await sharedService.CallMaterial(input, _serviceProvider, myCurrentUser);
        }
    }
}
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/ProjectService/PipeLineLemsProjectService.cs
@@ -326,7 +326,7 @@
                try
                {
                    //根据wms任务号寻找 å«æ–™å·¥å•
                    callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo);
                    callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.WmsTaskNo == myTaskNo);
                    if (callMaterialOrder == null) return;//结束
@@ -446,7 +446,7 @@
                try
                {
                    //根据wms任务号寻找 å«æ–™å·¥å•
                    callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo);
                    callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.WmsTaskNo == myTaskNo);
                    if (callMaterialOrder == null) return;//结束
@@ -599,7 +599,7 @@
                try
                {
                    //根据wms任务号寻找 å«æ–™å·¥å•
                    callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo);
                    callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.WmsTaskNo == myTaskNo);
                    if (callMaterialOrder == null) return;//结束
@@ -718,7 +718,7 @@
                try
                {
                    //根据wms任务号寻找 å«æ–™å·¥å•
                    callMaterialOrder = await callMaterialOrderAppService.FindByWmsTaskNoAsync(myTaskNo);
                    callMaterialOrder = await callMaterialOrderAppService.GetSingleByFilterAsync(x => x.WmsTaskNo == myTaskNo);
                    if (callMaterialOrder == null) return;//结束
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderRecordµ¼³öÄ£°å.xlsx
Binary files differ
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Resources/Templates/CallMaterialOrderµ¼³öÄ£°å.xlsx
Binary files differ
Weben_CMSרÓôúÂëÉú³ÉÆ÷/queryExtensions/CmsQueryExtensions/Entitys/CmsApiResponse.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
using System;
namespace CmsQueryExtensions.Entitys;
/// <summary>
/// CMS的API å“åº”实体类
/// </summary>
public class CmsApiResponse<T>
{
    /// <summary>
    /// é”™è¯¯ä¿¡æ¯ï¼ˆå¦‚ "该型号物料信息不存在")
    /// </summary>
    public string Message { get; set; }
    /// <summary>
    /// è¿”回的数据(可能为 null)
    /// </summary>
    public T Data { get; set; }
    /// <summary>
    /// è‡ªå®šä¹‰çŠ¶æ€ç ï¼ˆå¦‚ 200 è¡¨ç¤ºæˆåŠŸï¼Œä½†ä¸šåŠ¡é€»è¾‘å¯èƒ½è¿”å›žé”™è¯¯ï¼‰
    /// </summary>
    public int Code { get; set; } = 200;
}
///// <summary>
///// é”™è¯¯è¯¦æƒ…实体类
///// </summary>
//public class ResponseError
//{
//    /// <summary>
//    /// é”™è¯¯ä»£ç ï¼ˆå¯èƒ½ä¸º null)
//    /// </summary>
//    public string Code { get; set; }
//    /// <summary>
//    /// é”™è¯¯æ¶ˆæ¯ï¼ˆå¦‚ "该型号物料信息不存在")
//    /// </summary>
//    public string Message { get; set; }
//    /// <summary>
//    /// é”™è¯¯è¯¦æƒ…(可能为空)
//    /// </summary>
//    public string Details { get; set; }
//    /// <summary>
//    /// é¢å¤–数据(可能为 null)
//    /// </summary>
//    public object Data { get; set; }
//    /// <summary>
//    /// éªŒè¯é”™è¯¯ï¼ˆå¯èƒ½ä¸º null)
//    /// </summary>
//    public object ValidationErrors { get; set; }
//}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/queryExtensions/CmsQueryExtensions/Utils/HttpApiRequest.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
// éº»çœç†å·¥å­¦é™¢è®¸å¯è¯
//
// ç‰ˆæƒæ‰€æœ‰ (c) 2021-2023 zuohuaijun,大名科技(天津)有限公司  è”系电话/微信:18020030720  QQ:515096995
//
// ç‰¹æ­¤å…è´¹æŽˆäºˆèŽ·å¾—æœ¬è½¯ä»¶çš„ä»»ä½•äººä»¥å¤„ç†æœ¬è½¯ä»¶çš„æƒåˆ©ï¼Œä½†é¡»éµå®ˆä»¥ä¸‹æ¡ä»¶ï¼šåœ¨æ‰€æœ‰å‰¯æœ¬æˆ–é‡è¦éƒ¨åˆ†çš„è½¯ä»¶ä¸­å¿…é¡»åŒ…æ‹¬ä¸Šè¿°ç‰ˆæƒå£°æ˜Žå’Œæœ¬è®¸å¯å£°æ˜Žã€‚
//
// è½¯ä»¶æŒ‰â€œåŽŸæ ·â€æä¾›ï¼Œä¸æä¾›ä»»ä½•å½¢å¼çš„æ˜Žç¤ºæˆ–æš—ç¤ºçš„ä¿è¯ï¼ŒåŒ…æ‹¬ä½†ä¸é™äºŽå¯¹é€‚é”€æ€§ã€é€‚ç”¨æ€§å’Œéžä¾µæƒçš„ä¿è¯ã€‚
// åœ¨ä»»ä½•情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
using Newtonsoft.Json;
using System.Net;
using System.Text;
namespace CmsQueryExtensions;
public class HttpApiRequest
{
    public static string HttpGet(string url)
    {
        string result = "";
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "GET";
        req.ContentType = "application/json";
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Stream stream = resp.GetResponseStream();
        //获取响应内容
        using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
        {
            result = reader.ReadToEnd();
        }
        return result;
    }
    public static string HttpPost(string url, string jsondata)
    {
        string result = "";
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        //  HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        req.Method = "POST";
        req.ContentType = "application/json";
        if (!string.IsNullOrWhiteSpace(jsondata))
        {
            byte[] data = Encoding.UTF8.GetBytes(jsondata);
            req.ContentLength = data.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
        }
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Stream stream = resp.GetResponseStream();
        //获取响应内容
        using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
        {
            result = reader.ReadToEnd();
        }
        return result;
    }
}