From de4a3a2c1b39c128d4ecd23367db5fcbda957bdd Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周二, 13 5月 2025 11:21:21 +0800
Subject: [PATCH] 临时提交

---
 HIAWms/hiawms_web/src/widgets/WmsTask/Models/WmsTaskDrawer.ts                                                        |   97 ++--
 HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs             |   42 ++
 HIAWms/hiawms_web/src/widgets/WmsTask/Controllers/ChangeToPlace.tsx                                                  |  166 ++++++++
 HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStockDetail.json                              |    3 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs                             |   49 ++
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs                                      |   34 +
 HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs                                         |   12 
 HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/Config.ts                          |   60 +++
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialStockAppService.cs                    |    8 
 HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/WmsTask/WmsTask.tsx                                                |   12 
 HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/WmsMaterialStockDetail.module.scss |  113 +++++
 HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsTaskController.cs                                                  |   12 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsTaskAppService.cs                             |    7 
 HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx                                            |    5 
 HIAWms/hiawms_web/src/widgets/WmsTask/Controllers/WmsTask.ts                                                         |   37 +
 HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/WmsMaterialStockDetail.tsx         |  317 +++++++++++++++
 HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog.tsx                 |   61 +++
 HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog.module.scss         |    3 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsTask/ChangeTaskToPlaceInput.cs                     |   40 ++
 HIAWms/hiawms_web/src/widgets/WmsTask/Models/Service/WmsTaskDrawer.ts                                                |   76 ++-
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/IWmsMaterialStockRepository.cs                          |   23 +
 21 files changed, 1,086 insertions(+), 91 deletions(-)

diff --git a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/Config.ts b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/Config.ts
new file mode 100644
index 0000000..035b581
--- /dev/null
+++ b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/Config.ts
@@ -0,0 +1,60 @@
+export const columns = [
+  {
+    type: 'seq',
+    width: 60,
+    title: '搴忓彿',
+  },
+  {
+    field: 'materialNo',
+    title: '鐗╂枡缂栧彿',
+  },
+  {
+    field: 'materialName',
+    title: '鐗╂枡鍚嶇О',
+  },
+  {
+    field: 'placeNo',
+    title: '搴撲綅缂栧彿',
+  },
+  {
+    field: 'placeStatusDesc',
+    title: '搴撲綅鐘舵��',
+  },
+  {
+    field: 'containerNo',
+    title: '瀹瑰櫒缂栧彿',
+  },
+  {
+    field: 'stockNumber',
+    title: '搴撳瓨鏁伴噺',
+  },
+  {
+    field: 'materialBatch',
+    title: '鐗╂枡鎵规',
+  },
+  {
+    field: 'materialModel',
+    title: '鍨嬪彿',
+  },
+  {
+    field: 'areaName',
+    title: '鎵�灞炲簱鍖�',
+  },
+  {
+    field: 'checkStatusDesc',
+    title: '妫�楠岀姸鎬�',
+  },
+  {
+    field: 'inStockTime',
+    title: '鍏ュ簱鏃堕棿',
+    width: 180,
+  },
+  {
+    field: 'isLockDesc',
+    title: '閿佸畾鐘舵��',
+  },
+  {
+    field: 'remark',
+    title: '澶囨敞',
+  },
+]
diff --git a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/WmsMaterialStockDetail.module.scss b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/WmsMaterialStockDetail.module.scss
new file mode 100644
index 0000000..365acbf
--- /dev/null
+++ b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/WmsMaterialStockDetail.module.scss
@@ -0,0 +1,113 @@
+.wmsMaterialStockContent {
+  width: 100%;
+  height: 80%;
+
+  .wmsMaterialStockList {
+    width: 100%;
+    height: calc(100% - 70px);
+  }
+  .headerContent {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    height: 43px;
+  }
+  .header {
+    margin-bottom: 12px;
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+  }
+}
+
+.tagBox {
+  width: auto;
+  min-width: 80px;
+  height: 24px;
+  background: #ffffff;
+  border-radius: 19px 19px 19px 19px;
+  opacity: 1;
+  border: 1px dashed #bcc4cc;
+  width: 50px;
+  height: 20px;
+  font-size: 14px;
+  font-family: PingFang SC, PingFang SC;
+  font-weight: 400;
+  color: #5a84ff;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  // cursor: pointer;
+}
+
+.group {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.groupTable {
+  width: 100%;
+}
+
+.overBox {
+  width: 100%;
+  height: calc(100% - 20px);
+  overflow: auto;
+  :global(.cs-collapse-item__header) {
+    background-color: #f1f1f1;
+    padding: 0 20px;
+    height: 35px;
+    font-size: 16px;
+    font-family: PingFang SC, PingFang SC;
+    font-weight: 500;
+  }
+  :global(.cs-collapse-item__content) {
+    padding-bottom: 0px;
+  }
+}
+.groupHeader {
+  width: 100%;
+  height: 30px;
+  background: #ccc;
+}
+
+.hideBlock {
+  display: none;
+}
+.queryForm {
+  padding: 10px;
+  background: #f5f7fa;
+  margin-bottom: 0px;
+  border-radius: 4px;
+  
+  .el-form-item {
+    margin-right: 20px;
+    margin-bottom: 0;
+    
+    // 缁熶竴杈撳叆妗嗗拰閫夋嫨妗嗙殑瀹藉害
+    .el-input, .el-select {
+      width: 200px; // 璁剧疆缁熶竴鐨勫搴�
+    }
+    
+    // 閫夋嫨妗嗗唴閮ㄨ緭鍏ユ鏍峰紡
+    .el-select .el-input__wrapper {
+      height: 32px; // 涓庤緭鍏ユ楂樺害涓�鑷�
+      padding: 1px 11px; // 涓庤緭鍏ユ鍐呰竟璺濅竴鑷�
+    }
+    
+    // 鏃ユ湡閫夋嫨鍣ㄥ搴�
+    .el-date-editor {
+      width: 220px;
+    }
+  }
+}
+
+// 濡傛灉闇�瑕佹洿绮剧‘鐨勬帶鍒讹紝鍙互鍗曠嫭璁剧疆
+.formItem {
+  width: 200px;
+  
+  &.el-input, &.el-select {
+    width: 100%;
+  }
+}
\ No newline at end of file
diff --git a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/WmsMaterialStockDetail.tsx b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/WmsMaterialStockDetail.tsx
new file mode 100644
index 0000000..40d7b2b
--- /dev/null
+++ b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStockDetail/WmsMaterialStockDetail.tsx
@@ -0,0 +1,317 @@
+import { computed, defineComponent, onMounted, reactive, ref } from 'vue'
+import type { Ref } from 'vue'
+import BaseTable from '@/components/Table/Table'
+import styles from './WmsMaterialStockDetail.module.scss'
+import { useWmsMaterialStock } from '../../../Controllers/WmsMaterialStock'
+import IconButton from '@/components/IconButton/IconButton'
+import WmsMaterialStockDrawer from '../Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer'
+import Search from '@/components/Search/Search'
+import { columns } from './Config'
+import TdButton from '@/components/TdButton/TdButton'
+import { vPermission } from '@/libs/Permission/Permission'
+import dayjs from 'dayjs'
+import {
+  ElDatePicker,
+  ElForm,
+  ElFormItem,
+  ElInput,
+  ElOption,
+  ElSelect,
+} from 'element-plus'
+import { getWmsEnumData } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
+
+interface RenderTableType {
+  url?: string
+  dataSource: Ref<any[]>
+  isDrag?: boolean
+  isChecked?: boolean
+  isHidePagination?: boolean
+  params?: Record<string, any>
+  autoHeight?: boolean
+}
+
+export default defineComponent({
+  name: 'WmsMaterialStock',
+  directives: {
+    permission: vPermission,
+  },
+  setup(props, ctx) {
+    const {
+      dataSource,
+      contextMenu,
+      dialogConfig,
+      tableRef,
+      current,
+      search,
+      sort,
+      headers,
+      onError,
+      onSearch,
+      onRowClick,
+      onConfirmWmsMaterialStock,
+      onCheck,
+      onAddWmsMaterialStock,
+      onExport,
+      openDetail,
+      onSuccess,
+      onBeforeUpload,
+    } = useWmsMaterialStock(props, ctx)
+
+    // 鏂板鐨勬煡璇㈡潯浠�
+    const queryForm = ref({
+      containerNo: '',
+      materialNo: '',
+      materialName: '',
+      containerType: '',
+      containerStatus: '',
+      storageTypeNo: 1,
+      placeStatus: '',
+      placeNo: '',
+      isLock: '',
+      emptyContainer: '',
+      dateRange: [],
+      filter: '',
+    })
+
+    const queryParams = computed(() => ({
+      ...queryForm.value,
+      containerType: queryForm.value.containerType || '', // 澶勭悊涓嬫媺
+      containerStatus: queryForm.value.containerStatus || '',
+      storageTypeNo: queryForm.value.storageTypeNo || 1, // 澶勭悊涓嬫媺
+      placeStatus: queryForm.value.placeStatus || '',
+      islock: queryForm.value.isLock || '',
+      emptyContainer: queryForm.value.emptyContainer || '',
+      startTime: queryForm.value.dateRange[0] || '',
+      endTime: queryForm.value.dateRange[1] || '',
+    }))
+
+    // 鍔ㄦ�佹灇涓鹃�夐」
+    const enumOptions = reactive({
+      containerType: [] as Array<{ label: string; value: any }>,
+      containerStatus: [] as Array<{ label: string; value: any }>,
+      storageTypeNo: [] as Array<{ label: string; value: any }>,
+      placeStatus: [] as Array<{ label: string; value: any }>,
+      yesOrNo: [] as Array<{ label: string; value: any }>,
+    })
+
+    // 鑾峰彇鏋氫妇鏁版嵁
+    const fetchEnumData = async () => {
+      try {
+        // 鑾峰彇鐗╂枡绫诲瀷鏋氫妇
+        const containerTypeData = await getWmsEnumData({
+          EnumName: 'ContainerTypeEnum',
+        })
+        enumOptions.containerType = containerTypeData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+        // 鑾峰彇鐗╂枡绫诲瀷鏋氫妇
+        const storageTypeNoData = await getWmsEnumData({
+          EnumName: 'PlaceTypeEnum',
+        })
+        enumOptions.storageTypeNo = storageTypeNoData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+
+        // 鑾峰彇閲囪喘绫诲瀷鏋氫妇
+        const placeStatusData = await getWmsEnumData({
+          EnumName: 'PlaceStatusEnum',
+        })
+        enumOptions.placeStatus = placeStatusData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+
+        // 鑾峰彇閲囪喘绫诲瀷鏋氫妇
+        const containerStatusData = await getWmsEnumData({
+          EnumName: 'ContainerStatusEnum',
+        })
+        enumOptions.containerStatus = containerStatusData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+
+        const yesNoData = await getWmsEnumData({
+          EnumName: 'YesNoEnum',
+        })
+        enumOptions.yesOrNo = yesNoData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+      } catch (error) {
+        console.error('鑾峰彇鏋氫妇鏁版嵁澶辫触:', error)
+      }
+    }
+
+    // 缁勪欢鎸傝浇鏃惰幏鍙栨灇涓炬暟鎹�
+    onMounted(() => {
+      fetchEnumData()
+      handleQuery()
+    })
+
+    // 鏂板鐨勬煡璇㈡柟娉�
+    const handleQuery = async () => {
+      console.log('鏌ヨ鏉′欢:', queryParams.value)
+      // tableRef.value.getTableList()
+      tableRef.value.getList(queryParams.value)
+    }
+
+    // 閲嶇疆鏌ヨ鏉′欢
+    const resetQuery = () => {
+      queryForm.value = {
+        containerNo: '',
+        materialNo: '',
+        materialName: '',
+        containerType: '',
+        containerStatus: '',
+        storageTypeNo: 1,
+        placeStatus: '',
+        placeNo: '',
+        isLock: '',
+        emptyContainer: '',
+        dateRange: [],
+        filter: '',
+      }
+    }
+    /**
+     * @returns 琛ㄦ牸
+     */
+    const RenderBaseTable = (props: RenderTableType) => {
+      const {
+        url,
+        dataSource,
+        isDrag,
+        isChecked,
+        isHidePagination,
+        params,
+        autoHeight,
+      } = props
+      props.params = {
+        ...queryParams.value,
+        ...params,
+      }
+      return (
+        <div
+          class={{
+            [styles.wmsMaterialStockList]: true,
+          }}
+        >
+          <BaseTable
+            ref={tableRef}
+            url={url}
+            sortUrlTpl="/api/v1/HIAWms/wmsMaterialStock/{id}/adjustsort/{sort}"
+            v-model:dataSource={dataSource.value}
+            columns={columns}
+            contextMenu={contextMenu}
+            params={params}
+            isDrag={isDrag}
+            isChecked={isChecked}
+            autoHeight={autoHeight}
+            onCheck={onCheck}
+            onRowClick={onRowClick}
+            isHidePagination={isHidePagination}
+            pageSize={20}
+            v-slots={{
+              inStockTime: ({ row }: any) => {
+                return (
+                  <div>
+                    {row.inStockTime != null
+                      ? dayjs(row.inStockTime).format('YYYY-MM-DD HH:mm:ss')
+                      : '-'}
+                  </div>
+                )
+              },
+              name: ({ row }: any) => {
+                return row?.name ? (
+                  <TdButton
+                    onClick={() => openDetail(row)}
+                    text={<span style="color:#5a84ff">璇︽儏</span>}
+                    icon="scale"
+                    tip={row?.name}
+                    hover
+                  >
+                    {row?.name}
+                  </TdButton>
+                ) : (
+                  '-'
+                )
+              },
+            }}
+          ></BaseTable>
+        </div>
+      )
+    }
+    return () => {
+      return (
+        <div class={styles.wmsMaterialStockContent}>
+          {/* 娣诲姞/缂栬緫 */}
+          <WmsMaterialStockDrawer
+            v-model={dialogConfig.visible}
+            title={dialogConfig.title}
+            row={current.value}
+            sort={sort.value}
+            onConfirm={onConfirmWmsMaterialStock}
+          />
+          {/* 楂樼骇鏌ヨ */}
+          {/* <WmsMaterialStockDetailDrawer
+            ref="wmsTaskQueryDrawerRef"
+            v-model={dialogConfigForQuery.visible}
+            title={dialogConfigForQuery.title}
+            row={current.value}
+            sort={sort.value}
+            onConfirmQuery={handleQuery}
+            onRestQuery={resetQuery}
+            onClose={closeQuery}
+          /> */}
+          <div class={styles.headerContent}>
+            <div class={styles.header}>
+              <IconButton
+                v-permission="wmsMaterialStock-add"
+                icon="add-p"
+                onClick={onAddWmsMaterialStock}
+                type="primary"
+              >
+                娣诲姞
+              </IconButton>
+              <el-divider direction="vertical" />
+              <el-upload
+                v-permission="wmsMaterialStock-import"
+                name="file"
+                accept=".xlsx,.xls,.csv"
+                show-file-list={false}
+                onError={onError}
+                onSuccess={onSuccess}
+                before-upload={onBeforeUpload}
+                headers={headers.value}
+                action="/api/v1/HIAWms/wmsMaterialStock/import"
+              >
+                <IconButton icon="in">瀵煎叆</IconButton>
+              </el-upload>
+
+              <IconButton
+                v-permission="wmsMaterialStock-output"
+                icon="out"
+                onClick={onExport}
+              >
+                瀵煎嚭
+              </IconButton>
+            </div>
+            {/* <Search
+              placeholder="璇疯緭鍏ュ叧閿瓧"
+              v-model={search.value}
+              onConfirm={onSearch}
+              style={{ marginTop: '-1px' }}
+            /> */}
+          </div>
+          <RenderBaseTable
+            url="/api/v1/HIAWms/wmsMaterialStock"
+            dataSource={dataSource}
+            isChecked={true}
+            isDrag={true}
+          />
+        </div>
+      )
+    }
+  },
+})
diff --git a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx
index 9bb4efb..ac9b87a 100644
--- a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx
+++ b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx
@@ -22,7 +22,10 @@
 })
 
 const entityNames = getEntityNames(Models)
-const nameToLabelMap = [{ name: 'WmsMaterialStock', label: '搴撳瓨' }]
+const nameToLabelMap = [
+  { name: 'WmsMaterialStock', label: '搴撳瓨' },
+  { name: 'WmsMaterialStockDetail', label: '搴撳瓨鏄庣粏' },
+]
 
 export default defineComponent({
   name: 'WmsMaterialStock',
diff --git a/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStockDetail.json b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStockDetail.json
new file mode 100644
index 0000000..454b838
--- /dev/null
+++ b/HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStockDetail.json
@@ -0,0 +1,3 @@
+{
+  "name": "WmsMaterialStockDetail"
+}
diff --git a/HIAWms/hiawms_web/src/widgets/WmsTask/Controllers/ChangeToPlace.tsx b/HIAWms/hiawms_web/src/widgets/WmsTask/Controllers/ChangeToPlace.tsx
new file mode 100644
index 0000000..aaac6f4
--- /dev/null
+++ b/HIAWms/hiawms_web/src/widgets/WmsTask/Controllers/ChangeToPlace.tsx
@@ -0,0 +1,166 @@
+import {
+  ref,
+  onMounted,
+  reactive,
+  computed,
+  Ref,
+  watch,
+  SetupContext,
+  h,
+} from 'vue'
+import { injectModel } from '@/libs/Provider/Provider'
+import { WmsTaskDrawer } from '../Models/WmsTaskDrawer'
+import { ElMessage } from 'element-plus'
+import isEqual from 'lodash/isEqual'
+import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
+import { cloneDeep } from 'lodash'
+
+export const ChangeToPlace = (props: any, ctx?: any) => {
+  const wmsTaskDrawer = injectModel<WmsTaskDrawer>('wmsTaskDrawer')
+  /**
+   * 鐢ㄦ潵瀵规瘮鐨勫垵濮嬪寲鏁版嵁
+   */
+  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 visible = computed({
+    get() {
+      return props.modelValue
+    },
+    set(val) {
+      ctx.emit('update:modelValue', val)
+    },
+  })
+  /**
+   * 娣诲姞鐨刦orm瀛楁
+   */
+  const formItems = reactive([
+    {
+      label: '浠诲姟鍙�',
+      prop: 'taskNo',
+      el: 'input',
+      disabled: disabled,
+      placeholder: '璇疯緭鍏ヤ换鍔″彿',
+      rules: [{ required: true, message: '浠诲姟鍙蜂笉鑳戒负绌�', trigger: 'blur' }],
+    },
+    {
+      label: '璧峰搴撲綅',
+      prop: 'sourcePlace',
+      el: 'input',
+      disabled: disabled,
+      rules: [{ required: true, message: '璧峰搴撲綅涓嶈兘涓虹┖', trigger: 'blur' }],
+      placeholder: '璇疯緭鍏ヨ捣濮嬪簱浣�',
+    },
+    {
+      label: '鐩爣搴撲綅',
+      prop: 'toPlace',
+      el: 'input',
+      // disabled: disabled,
+      rules: [{ required: true, message: '鐩爣搴撲綅涓嶈兘涓虹┖', trigger: 'blur' }],
+      placeholder: '璇疯緭鍏ョ洰鏍囧簱浣�',
+    },
+    {
+      label: '鍨嬪彿',
+      prop: 'mutableParam1',
+      el: 'input',
+      disabled: disabled,
+      placeholder: '璇疯緭鍏ュ彲鍙樺彉閲�1',
+    },
+  ])
+  /**
+   * 鏍¢獙鏄惁鏈夋暟鎹彉鍖�
+   */
+  const checkIsEqualObject = () => {
+    const data = {
+      formData: formData.value,
+    }
+    const check = isEqual(initiateData.value, data)
+    return check
+  }
+
+  const onClose = (done: () => void) => {
+    if (visible.value) {
+      if (checkIsEqualObject()) {
+        visible.value = false
+        done && done()
+      } else {
+        ConfirmBox('鏄惁淇濆瓨璁剧疆锛�')
+          .then(() => {
+            onConfirm()
+          })
+          .catch(() => {
+            visible.value = false
+            done && done()
+          })
+      }
+    }
+  }
+  /**
+   * 淇濆瓨
+   */
+  const onConfirm = async () => {
+    await formRef.value?.validate()
+    const data = {
+      taskNo: formData.value.taskNo,
+      sourcePlace: formData.value.sourcePlace,
+      toPlace: formData.value.toPlace,
+      mutableParam1: formData.value.mutableParam1,
+    }
+    const id = current.value.id
+    await wmsTaskDrawer.changeTaskToPlace(data)
+    ElMessage.success('淇敼鎴愬姛')
+    ctx.emit('confirm')
+  }
+
+  const updateCheckData = () => {
+    initiateData.value = {
+      formData: {
+        ...formData.value,
+      },
+    }
+  }
+  /**
+   * 寮圭獥鎵撳紑鑾峰彇璇︽儏
+   */
+  const onOpenChange = async () => {
+    if (current.value) {
+      const res = await wmsTaskDrawer.getWmsTaskDetail(current.value)
+
+      formData.value = {
+        taskNo: res.taskNo,
+        sourcePlace: res.sourcePlace,
+        toPlace: res.toPlace,
+        mutableParam1: res.mutableParam1,
+        id: res.id,
+      }
+      if (res.taskStatus != 1) {
+        disabled.value = true
+      }
+      updateCheckData()
+    } else {
+      ElMessage.warning('璇峰厛閫夋嫨涓�鏉℃暟鎹�')
+      visible.value = false
+      return
+    }
+  }
+
+  watch(() => current.value, onOpenChange)
+
+  return {
+    formItems,
+    formData,
+    visible,
+    formRef,
+    onOpenChange,
+    onClose,
+    onConfirm,
+  }
+}
diff --git a/HIAWms/hiawms_web/src/widgets/WmsTask/Controllers/WmsTask.ts b/HIAWms/hiawms_web/src/widgets/WmsTask/Controllers/WmsTask.ts
index 5233f95..c81cd4e 100644
--- a/HIAWms/hiawms_web/src/widgets/WmsTask/Controllers/WmsTask.ts
+++ b/HIAWms/hiawms_web/src/widgets/WmsTask/Controllers/WmsTask.ts
@@ -67,6 +67,11 @@
     title: '',
   })
 
+  const dialogChangeToPlaceConfig = reactive({
+    visible: false,
+    title: '',
+    isAdd: false,
+  })
   /**
    * 鍒嗛〉鏁版嵁
    */
@@ -84,6 +89,14 @@
     sort.value = row.sort
   }
 
+  const openChangToPlace = (row: any) => {
+    current.value = row
+    dialogChangeToPlaceConfig.visible = true
+    dialogChangeToPlaceConfig.title = '淇敼鐩爣搴撲綅'
+    dialogChangeToPlaceConfig.isAdd = false
+    console.log('row', row)
+  }
+
   const contextMenu = [
     {
       label: '灞曞紑璇︽儏',
@@ -95,18 +108,16 @@
       divided: true,
       icon: 'o',
     },
-    // {
-    //   label: '鍚戜笂娣诲姞',
-    //   fn: (c: CurrentType, pageNum: number) => {
-    //     current.value = null
-    //     sort.value = c.index + 1 + (pageNum - 1) * 50
-    //     dialogConfig.visible = true
-    //     dialogConfig.title = '娣诲姞'
-    //     dialogConfig.isAdd = false
-    //   },
-    //   divided: true,
-    //   icon: 'up',
-    // },
+    {
+      label: '淇敼鐩爣搴撲綅',
+      fn: (c: CurrentType) => {
+        current.value = null
+        sort.value = c.row.sort
+        nextTick(() => openChangToPlace(c.row))
+      },
+      divided: true,
+      icon: 'up',
+    },
     {
       label: '寮哄埗瀹屾垚',
       fn: async (c: CurrentType) => {
@@ -278,6 +289,7 @@
     dialogConfig,
     dialogConfigForQuery,
     dialogSettingConfig,
+    dialogChangeToPlaceConfig,
     tableRef,
     current,
     search,
@@ -289,6 +301,7 @@
     onError,
     onSuccess,
     openDetail,
+    openChangToPlace,
     onSearch,
     onExport,
     onRowClick,
diff --git a/HIAWms/hiawms_web/src/widgets/WmsTask/Models/Service/WmsTaskDrawer.ts b/HIAWms/hiawms_web/src/widgets/WmsTask/Models/Service/WmsTaskDrawer.ts
index 3ccea93..00f8f6d 100644
--- a/HIAWms/hiawms_web/src/widgets/WmsTask/Models/Service/WmsTaskDrawer.ts
+++ b/HIAWms/hiawms_web/src/widgets/WmsTask/Models/Service/WmsTaskDrawer.ts
@@ -1,34 +1,42 @@
-import { Base } from '@/libs/Base/Base' 
-const request = Base.request 
- 
-/** 
- * 娣诲姞 
- * @returns 
- */ 
-export const addWmsTask = (data: any) => { 
-  return request.post('/api/v1/HIAWms/wmsTask', data) 
-} 
- 
-/** 
- * 鑾峰彇璇︽儏 
- * @returns 
- */ 
-export const getWmsTask = (id: string) => { 
-  return request.get(`/api/v1/HIAWms/wmsTask/${id}`) 
-} 
- 
-/** 
- * 鏇存柊 
- * @returns 
- */ 
-export const updateWmsTask = (id: string, data: Record<string, any>) => { 
-  return request.put(`/api/v1/HIAWms/wmsTask/${id}`, data) 
-} 
- 
-/** 
- * 鑾峰彇鏋氫妇 
- * @returns 
- */ 
-export const getWmsEnumData = (data: any) => { 
-  return request.post('/api/v1/HIAWms/WmsEnum', data) 
-} 
+import { Base } from '@/libs/Base/Base'
+const request = Base.request
+
+/**
+ * 娣诲姞
+ * @returns
+ */
+export const addWmsTask = (data: any) => {
+  return request.post('/api/v1/HIAWms/wmsTask', data)
+}
+
+/**
+ * 鑾峰彇璇︽儏
+ * @returns
+ */
+export const getWmsTask = (id: string) => {
+  return request.get(`/api/v1/HIAWms/wmsTask/${id}`)
+}
+
+/**
+ * 鏇存柊
+ * @returns
+ */
+export const updateWmsTask = (id: string, data: Record<string, any>) => {
+  return request.put(`/api/v1/HIAWms/wmsTask/${id}`, data)
+}
+
+/**
+ * 鑾峰彇鏋氫妇
+ * @returns
+ */
+export const getWmsEnumData = (data: any) => {
+  return request.post('/api/v1/HIAWms/WmsEnum', data)
+}
+
+/**
+ * 淇敼鐩爣搴撲綅
+ * @returns
+ */
+export const changeToPlace = (data: any) => {
+  return request.post('/api/v1/HIAWms/wmsTask/ChangeTaskToPlace', data)
+}
diff --git a/HIAWms/hiawms_web/src/widgets/WmsTask/Models/WmsTaskDrawer.ts b/HIAWms/hiawms_web/src/widgets/WmsTask/Models/WmsTaskDrawer.ts
index 08058db..67f06f9 100644
--- a/HIAWms/hiawms_web/src/widgets/WmsTask/Models/WmsTaskDrawer.ts
+++ b/HIAWms/hiawms_web/src/widgets/WmsTask/Models/WmsTaskDrawer.ts
@@ -1,44 +1,53 @@
-import { Base } from '@/libs/Base/Base' 
-import { 
-  addWmsTask, 
-  getWmsTask, 
-  updateWmsTask, 
-  getWmsEnumData, 
-} from './Service/WmsTaskDrawer' 
-import { useGlobalState } from '@/libs/Store/Store' 
- 
-export class WmsTaskDrawer extends Base<{ [key: string]: any }> { 
-  constructor() { 
-    super({ 
-      data: [], 
-      wmsTask: {}, 
-    }) 
-  } 
- 
-  /** 
-   * 娣诲姞 
-   * @param data 
-   */ 
-  async addWmsTask(data: Record<string, any>) { 
-    return addWmsTask(data) 
-  } 
-  /** 
-   * 鏇存柊 
-   * @param data 
-   */ 
-  async updateWmsTask(id: string, data: Record<string, any>) { 
-    return updateWmsTask(id, data) 
-  } 
- 
-  /** 
-   * 鑾峰彇璇︽儏 
-   */ 
-  async getWmsTaskDetail(current: any, id?: string) { 
-    return getWmsTask(id || current?.id) 
-  } 
- 
-  //  鑾峰彇鏋氫妇鍊� 
-  async getWmsEnumData(data: Record<string, any>) { 
-    return getWmsEnumData(data) 
-  } 
-} 
+import { Base } from '@/libs/Base/Base'
+import {
+  addWmsTask,
+  getWmsTask,
+  updateWmsTask,
+  getWmsEnumData,
+  changeToPlace,
+} from './Service/WmsTaskDrawer'
+import { useGlobalState } from '@/libs/Store/Store'
+
+export class WmsTaskDrawer extends Base<{ [key: string]: any }> {
+  constructor() {
+    super({
+      data: [],
+      wmsTask: {},
+    })
+  }
+
+  /**
+   * 娣诲姞
+   * @param data
+   */
+  async addWmsTask(data: Record<string, any>) {
+    return addWmsTask(data)
+  }
+  /**
+   * 鏇存柊
+   * @param data
+   */
+  async updateWmsTask(id: string, data: Record<string, any>) {
+    return updateWmsTask(id, data)
+  }
+
+  /**
+   * 鏇存柊
+   * @param data
+   */
+  async changeTaskToPlace(data: Record<string, any>) {
+    return changeToPlace(data)
+  }
+
+  /**
+   * 鑾峰彇璇︽儏
+   */
+  async getWmsTaskDetail(current: any, id?: string) {
+    return getWmsTask(id || current?.id)
+  }
+
+  //  鑾峰彇鏋氫妇鍊�
+  async getWmsEnumData(data: Record<string, any>) {
+    return getWmsEnumData(data)
+  }
+}
diff --git a/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog.module.scss b/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog.module.scss
new file mode 100644
index 0000000..177adca
--- /dev/null
+++ b/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog.module.scss
@@ -0,0 +1,3 @@
+.drawer { 
+  width: 800px; 
+} 
diff --git a/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog.tsx b/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog.tsx
new file mode 100644
index 0000000..43716d7
--- /dev/null
+++ b/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog.tsx
@@ -0,0 +1,61 @@
+import { SetupContext, defineComponent } from 'vue'
+import BaseDrawer from '@/components/BaseDrawer/BaseDrawer'
+import styles from './ChangeToPlaceDialog.module.scss'
+import { ChangeToPlace } from '../../../../Controllers/ChangeToPlace.tsx'
+import DyForm from '@/components/DyForm/DyForm'
+
+// @ts-ignore
+export default defineComponent<{
+  [key: string]: any
+}>({
+  name: '寮圭獥',
+  props: {
+    modelValue: {
+      type: Boolean,
+      default: false,
+    },
+    title: {
+      type: String,
+      default: '',
+    },
+    row: {
+      type: Object,
+    },
+    sort: {
+      type: Number,
+      default: 0,
+    },
+  },
+  emits: ['update:modelValue', 'close', 'submit', 'confirm'],
+  setup(props: Record<string, any>, ctx: SetupContext) {
+    const {
+      onClose,
+      onConfirm,
+      onOpenChange,
+      formRef,
+      visible,
+      formItems,
+      formData,
+    } = ChangeToPlace(props, ctx)
+    return () => (
+      <BaseDrawer
+        class={styles.drawer}
+        size="800px"
+        title={props.title || '娣诲姞'}
+        v-model={visible.value}
+        close-on-click-modal={true}
+        onConfirm={onConfirm}
+        onOpen={onOpenChange}
+        before-close={onClose}
+        onClose={onClose}
+      >
+        <DyForm
+          ref={formRef}
+          formData={formData.value}
+          labelWidth="150px"
+          formItemProps={formItems}
+        ></DyForm>
+      </BaseDrawer>
+    )
+  },
+})
diff --git a/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/WmsTask/WmsTask.tsx b/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/WmsTask/WmsTask.tsx
index 5cca268..e62dc46 100644
--- a/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/WmsTask/WmsTask.tsx
+++ b/HIAWms/hiawms_web/src/widgets/WmsTask/Views/Pages/WmsTask/WmsTask.tsx
@@ -5,6 +5,7 @@
 import { useWmsTask } from '../../../Controllers/WmsTask'
 import IconButton from '@/components/IconButton/IconButton'
 import WmsTaskDrawer from '../Dialog/WmsTaskDrawer/WmsTaskDrawer'
+import ChangeToPlaceDialog from '../Dialog/ChangeToPlaceDialog/ChangeToPlaceDialog'
 import WmsTaskQueryDrawer from '../Dialog/WmsTaskQueryDrawer/WmsTaskQueryDrawer'
 import Search from '@/components/Search/Search'
 import { columns } from './Config'
@@ -43,6 +44,7 @@
       contextMenu,
       dialogConfig,
       dialogConfigForQuery,
+      dialogChangeToPlaceConfig,
       tableRef,
       current,
       search,
@@ -264,6 +266,16 @@
             onRestQuery={resetQuery}
             onClose={closeQuery}
           />
+          <ChangeToPlaceDialog
+            ref="changeToPlace"
+            v-model={dialogChangeToPlaceConfig.visible}
+            title={dialogChangeToPlaceConfig.title}
+            row={current.value}
+            sort={sort.value}
+            onConfirmQuery={handleQuery}
+            onRestQuery={resetQuery}
+            onClose={closeQuery}
+          />
 
           <div class={styles.headerContent}>
             <div class={styles.header}>
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsTask/ChangeTaskToPlaceInput.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsTask/ChangeTaskToPlaceInput.cs
new file mode 100644
index 0000000..888ba02
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsTask/ChangeTaskToPlaceInput.cs
@@ -0,0 +1,40 @@
+锘縰sing CMS.Plugin.HIAWms.Domain.Shared.Enums;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask
+{
+    /// <summary>
+    /// 淇敼鐩爣搴撲綅鍙傛暟
+    /// </summary>
+    public class ChangeTaskToPlaceInput
+    {
+
+        /// <summary>
+        /// 浠诲姟鍙�
+        /// </summary>
+        public string TaskNo { get; set; }
+
+        /// <summary>
+        /// 浠诲姟绫诲瀷
+        /// </summary>
+        public TaskTypeEnum TaskType { get; set; }
+        /// <summary>
+        /// 璧峰搴撲綅
+        /// </summary>
+        public string? SourcePlace { get; set; }
+
+        /// <summary>
+        /// 鐩爣搴撲綅
+        /// </summary>
+        public string? ToPlace { get; set; }
+
+        /// <summary>
+        /// 鍙彉鍙橀噺1
+        /// </summary>
+        public string? MutableParam1 { get; set; }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialStockAppService.cs
index 7269cab..d297289 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialStockAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialStockAppService.cs
@@ -1,4 +1,5 @@
 using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
+using Volo.Abp.Application.Dtos;
 using Volo.Abp.Application.Services;
 
 namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
@@ -16,6 +17,13 @@
     Task<List<WmsMaterialStockDto>> CloneAsync(IEnumerable<Guid> ids);
 
     /// <summary>
+    /// 鑾峰彇搴撳瓨鏄庣粏
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStocksInput input);
+
+    /// <summary>
     /// Deletes the many asynchronous.
     /// </summary>
     /// <param name="ids">The ids.</param>
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsTaskAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsTaskAppService.cs
index b01823b..425e4c7 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsTaskAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsTaskAppService.cs
@@ -57,4 +57,11 @@
     /// <param name="input"></param>
     /// <returns></returns>
     Task CancelTaskAysnc(WmsTaskStatusDto input);
+
+    /// <summary>
+    /// 淇敼鐩爣搴撲綅
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    Task ChangeTaskToPlaceAsync(ChangeTaskToPlaceInput input);
 } 
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
index 491abba..334b107 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
@@ -1,4 +1,5 @@
 using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask;
 using CMS.Plugin.HIAWms.Application.Contracts.Services;
 using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialStocks;
 using CMS.Plugin.HIAWms.Domain.WmsAreas;
@@ -6,8 +7,11 @@
 using CMS.Plugin.HIAWms.Domain.WmsMaterials;
 using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks;
 using CMS.Plugin.HIAWms.Domain.WmsPlaces;
+using CMS.Plugin.HIAWms.Domain.WmsTask;
 using CmsQueryExtensions;
+using CmsQueryExtensions.Extension;
 using Microsoft.Extensions.DependencyInjection;
+using System.Linq.Expressions;
 using System.Text.Json;
 using Volo.Abp;
 using Volo.Abp.Application.Dtos;
@@ -71,6 +75,51 @@
         return new PagedResultDto<WmsMaterialStockDto>(count, ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(list));
     }
 
+    public async Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStocksInput input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(WmsMaterialStock.Sort);
+        }
+
+        #region 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+        var whereConditions = DynamicGetQueryParams(input);
+
+        #endregion
+
+        var count = await _wmsmaterialstockRepository.GetDetailCountAsync(whereConditions);
+        var list = await _wmsmaterialstockRepository.GetStockDetailListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
+
+        return new PagedResultDto<WmsMaterialStockDto>(count, ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(list));
+    }
+
+    /// <summary>  
+    /// 鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+    /// </summary>  
+    /// <param name="input">杈撳叆鍙傛暟</param>  
+    /// <returns></returns>  
+    private FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> DynamicGetQueryParams(GetWmsMaterialStocksInput input)
+    {
+        //鍔ㄦ�佹瀯閫犳煡璇㈡潯浠�  
+        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterialStock, GetWmsMaterialStocksInput>(input);
+        if (!whereConditions.IsSuccess)
+        {
+            throw new Exception("鍔ㄦ�佹瀯閫犳煡璇㈡潯浠跺け璐�:" + whereConditions.ErrMsg);
+        }
+
+        //涔熷彲鍐嶆鑷畾涔夋瀯寤烘煡璇㈡潯浠�  
+        Expression<Func<WmsMaterialStock, bool>> extendExpression = a => a.IsDeleted == false ;
+        // 浣跨敤 System.Linq.PredicateBuilder 鐨� And 
+        var pres = (System.Linq.Expressions.Expression<Func<WmsMaterialStock, bool>>)(whereConditions.data);
+        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
+
+        return whereConditions;
+    }
+
     /// <inheritdoc />
     public virtual async Task<WmsMaterialStockDto> CreateAsync(WmsMaterialStockCreateDto input)
     {
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs
index d3d4886..a23e39d 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs
@@ -694,4 +694,38 @@
         await uow.SaveChangesAsync();
         await uow.CompleteAsync();
     }
+
+    /// <summary>
+    /// 淇敼鐩爣搴撲綅
+    /// </summary>
+    /// <param name="input"></param>
+    /// <returns></returns>
+    /// <exception cref="UserFriendlyException"></exception>
+    public async Task ChangeTaskToPlaceAsync(ChangeTaskToPlaceInput input)
+    {
+        var task = await wmsTaskRepository.FindByNameAsync(input.TaskNo); 
+        if (task == null)
+        {
+            throw new UserFriendlyException("浠诲姟淇℃伅涓嶅瓨鍦�");
+        }
+
+        if (task.TaskStatus != WmsTaskStatus.WEIZHIXING)
+        {
+            throw new UserFriendlyException("宸插紑濮嬫垨鑰呯粨鏉熺殑浠诲姟涓嶅厑璁镐慨鏀�");
+        }
+
+        var toplaceStock = await _wmsMaterialStockRepository.GetStockListAsync(new WmsMaterialStock { PlaceNo = input.ToPlace });
+        if (toplaceStock != null && toplaceStock.Count>0)
+        {
+            var model = toplaceStock.FirstOrDefault();
+            if (model.MaterialModel != input.MutableParam1)
+            {
+                throw new UserFriendlyException("鐩爣搴撲綅鍨嬪彿涓庡綋鍓嶅瀷鍙蜂笉涓�鑷翠笉鍏佽淇敼");
+            }
+        }
+
+        task.ToPlace = input.ToPlace;
+
+        await wmsTaskRepository.UpdateAsync(task);
+    }
 }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/IWmsMaterialStockRepository.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/IWmsMaterialStockRepository.cs
index 181ada8..a8ab1c7 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/IWmsMaterialStockRepository.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/IWmsMaterialStockRepository.cs
@@ -1,3 +1,5 @@
+using CmsQueryExtensions.Extension;
+using System.Linq.Expressions;
 using Volo.Abp.Domain.Repositories;
 using Volo.Abp.Specifications;
 
@@ -57,6 +59,27 @@
     /// <param name="stock"></param>
     /// <returns></returns>
     Task<List<WmsMaterialStock>> GetStockListAsync(WmsMaterialStock? stock);
+
+    /// <summary>
+    /// 鏌ヨ搴撳瓨鏄庣粏
+    /// </summary>
+    /// <param name="whereConditions"></param>
+    /// <param name="sorting"></param>
+    /// <param name="maxResultCount"></param>
+    /// <param name="skipCount"></param>
+    /// <param name="includeDetails"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    Task<List<WmsMaterialStock>> GetStockDetailListAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
+
+    /// <summary>
+    /// 鑾峰彇搴撳瓨鎬绘暟
+    /// </summary>
+    /// <param name="whereConditions"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    Task<long> GetDetailCountAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, CancellationToken cancellationToken = default);
+
     /// <summary>
     /// Gets the count asynchronous.
     /// </summary>
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs
index 117a125..202ee99 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs
@@ -1,6 +1,9 @@
 using System.Linq.Dynamic.Core;
+using System.Linq.Expressions;
 using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks;
+using CMS.Plugin.HIAWms.Domain.WmsTask;
 using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
+using CmsQueryExtensions.Extension;
 using DatabaseSchemaReader.Filters;
 using Microsoft.EntityFrameworkCore;
 using SqlKata;
@@ -253,9 +256,48 @@
        .WhereIf(!string.IsNullOrEmpty(stock?.AreaName), u => u.AreaName.Contains(stock.AreaName))
        .WhereIf(stock.IsLock > 0, u => u.IsLock == stock.IsLock)
        .Where(u => !u.IsDeleted)
+       .OrderByDescending(x=>x.InStockTime)
        .ToListAsync();
         return baseQuery;
     }
+
+    /// <summary>
+    /// 查询库存明细
+    /// </summary>
+    /// <param name="whereConditions"></param>
+    /// <param name="sorting"></param>
+    /// <param name="maxResultCount"></param>
+    /// <param name="skipCount"></param>
+    /// <param name="includeDetails"></param>
+    /// <param name="cancellationToken"></param>
+    /// <returns></returns>
+    public async Task<List<WmsMaterialStock>> GetStockDetailListAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
+    {
+        return await (await GetDbSetAsync())
+            .IncludeDetails(includeDetails)
+            .WhereIf(whereConditions != null, whereConditions.data)
+            .Where(x => !x.IsDeleted)
+            .OrderBy(x=>x.PlaceNo)
+            .ThenByDescending(x => x.CreationTime)
+            .PageBy(skipCount, maxResultCount)
+            .ToListAsync(GetCancellationToken(cancellationToken));
+    }
+
+    /// <summary> 
+    /// 获取总数库存管理 
+    /// </summary> 
+    /// <param name="whereConditions"></param> 
+    /// <param name="cancellationToken"></param> 
+    /// <returns></returns> 
+    public async Task<long> GetDetailCountAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, CancellationToken cancellationToken = default)
+    {
+        return await (await GetQueryableAsync())
+            .WhereIf(whereConditions != null, whereConditions.data)
+            .Where(x => !x.IsDeleted)
+            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
+    }
+
+
     /// <inheritdoc />
     public override async Task<IQueryable<WmsMaterialStock>> WithDetailsAsync()
     {
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs
index 2b88542..e47bac5 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs
@@ -58,6 +58,18 @@
         }
 
         /// <summary>
+        /// 鍝嚭鏉ユ槑缁�
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("StockDetail")]
+        public async Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStocksInput input)
+        {
+            return await _wmsmaterialstockAppService.GetStockDetailAsync(input);
+        }
+
+        /// <summary>
         /// 鍒涘缓wmsmaterialstock.
         /// </summary>
         /// <param name="input">杈撳叆.</param>
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsTaskController.cs b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsTaskController.cs
index dc8ece5..5704659 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsTaskController.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsTaskController.cs
@@ -208,5 +208,17 @@
         {
             await _wmsTaskAppService.CancelTaskAysnc(input);
         }
+
+        /// <summary>
+        /// 淇敼浠诲姟鐩爣搴撲綅
+        /// </summary>
+        /// <param name="input"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [Route("ChangeTaskToPlace")]
+        public async Task ChangeTaskToPlaceAsync(ChangeTaskToPlaceInput input)
+        {
+            await _wmsTaskAppService.ChangeTaskToPlaceAsync(input);
+        }
     } 
 } 

--
Gitblit v1.9.3