diff --git a/ant-design-vue-jeecg/src/views/system/report/InventoryClassificationDetail.vue b/ant-design-vue-jeecg/src/views/system/report/InventoryClassificationDetail.vue
new file mode 100644
index 0000000..12c78b9
--- /dev/null
+++ b/ant-design-vue-jeecg/src/views/system/report/InventoryClassificationDetail.vue
@@ -0,0 +1,165 @@
+<template>
+  <a-card :bordered="false" :class="'cust-erp-sub-tab'">
+    <!-- 操作按钮区域 -->
+    <!--    <div class="table-operator" v-if="mainId">
+          <a-button type="primary" icon="download" @click="handleExportXls('库存分类报表详情')">导出</a-button>
+        </div>-->
+
+    <!-- table区域-begin -->
+    <div>
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        :rowKey="(record,index) => {return record.zoneCode + '_' + record.materialCode + '_' + record.materialSpec + '_' + record.materialUnit}"
+        class="j-table-force-nowrap"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        @change="handleTableChange">
+
+        <span slot="inventoryStatus_dictText" slot-scope="inventoryStatus_dictText">
+          <a-tag :key="inventoryStatus_dictText" :color="getStatusColor(inventoryStatus_dictText)">
+            {{ inventoryStatus_dictText }}
+          </a-tag>
+        </span>
+
+        <span slot="companyCode" slot-scope="companyCode">
+          <a-tag :key="companyCode" color="blue">
+            {{ solutionCompany(companyCode) }}
+          </a-tag>
+        </span>
+
+        <span slot="zoneCode" slot-scope="zoneCode">
+          <a-tag :key="zoneCode" color="blue">
+            {{ solutionZoneCode(zoneCode) }}
+          </a-tag>
+        </span>
+      </a-table>
+    </div>
+
+    <inventoryDetail-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></inventoryDetail-modal>
+  </a-card>
+</template>
+
+<script>
+
+import {JeecgListMixin} from '@/mixins/JeecgListMixin'
+import InventoryDetailModal from '@views/system/inventory/modules/InventoryDetailModal'
+import {getCompanyList} from '@/api/api'
+
+export default {
+  name: 'InventoryClassificationDetail',
+  mixins: [JeecgListMixin],
+  components: {InventoryDetailModal},
+  props: {
+    mainId: {
+      type: String,
+      default: '',
+      required: false
+    }
+  },
+  watch: {
+    mainId: {
+      immediate: true,
+      handler(val) {
+        if (!this.mainId) {
+          this.clearList()
+        } else {
+          this.queryParam['materialTypeCode'] = val.split("_")[0];
+          this.loadData(1)
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      description: '库存分类报表详情页面',
+      disableMixinCreated: true,
+      companyList: [],
+      zoneList: [],
+      // 表头
+      columns: [
+        {
+          title: '物料编码',
+          align: "center",
+          dataIndex: 'materialCode'
+        },
+        {
+          title: '物料名称',
+          align: "center",
+          dataIndex: 'materialName'
+        },
+        {
+          title: '物料规格',
+          align: "center",
+          dataIndex: 'materialSpec'
+        },
+        {
+          title: '物料单位',
+          align: "center",
+          dataIndex: 'materialUnit'
+        },
+        {
+          title: '库存总数量',
+          align: "center",
+          dataIndex: 'qty'
+        }
+      ],
+      url: {
+        list: '/report/listInventoryClassificationDetail',
+      },
+      dictOptions: {
+        containerStatus: []
+      }
+    }
+  },
+  created() {
+    this.loadFrom();
+  },
+  computed: {
+    importExcelUrl() {
+      return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`
+    }
+  },
+  methods: {
+    getStatusColor(status) {
+      const colors = {
+        '良品': 'green',
+        '报废品': 'purple',
+        '待确认	': 'grey',
+        '次品': 'red',
+        default: 'blue'
+      };
+      return colors[status] || colors.default;
+    },
+    loadFrom() {
+      getCompanyList().then(res => {
+        if (res.success) {
+          this.companyList = res.result
+        }
+      })
+    },
+    solutionCompany(value) {
+      let actions = []
+      Object.keys(this.companyList).some(key => {
+        if (this.companyList[key].code === '' + value) {
+          actions.push(this.companyList[key].name)
+          return true
+        }
+      })
+      return actions.join('')
+    },
+    clearList() {
+      this.dataSource = []
+      this.selectedRowKeys = []
+      this.ipagination.current = 1
+    }
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
diff --git a/ant-design-vue-jeecg/src/views/system/report/ReportInventoryClassificationList.vue b/ant-design-vue-jeecg/src/views/system/report/ReportInventoryClassificationList.vue
index 445569b..768ef96 100644
--- a/ant-design-vue-jeecg/src/views/system/report/ReportInventoryClassificationList.vue
+++ b/ant-design-vue-jeecg/src/views/system/report/ReportInventoryClassificationList.vue
@@ -5,17 +5,17 @@
       <a-form layout="inline" @keyup.enter.native="searchQuery">
         <a-row :gutter="24">
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
-              <a-form-item label="物料类别">
-                <a-select
-                  show-search
-                  placeholder="请选择物料类别"
-                  option-filter-prop="children"
-                  v-model="queryParam.materialTypeCode">
-                  <a-select-option v-for="item in materialTypeList" :key="item.code" :value="item.code">
-                    {{ item.code }} {{ item.name }}
-                  </a-select-option>
-                </a-select>
-              </a-form-item>
+            <a-form-item label="物料类别">
+              <a-select
+                show-search
+                placeholder="请选择物料类别"
+                option-filter-prop="children"
+                v-model="queryParam.materialTypeCode">
+                <a-select-option v-for="item in materialTypeList" :key="item.code" :value="item.code">
+                  {{ item.code }} {{ item.name }}
+                </a-select-option>
+              </a-select>
+            </a-form-item>
           </a-col>
           <a-col :xl="6" :lg="7" :md="8" :sm="24">
             <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
@@ -34,12 +34,14 @@
         size="middle"
         :scroll="{x:true}"
         bordered
-        rowKey="id"
+        rowKey="materialTypeCode"
         :columns="columns"
         :dataSource="dataSource"
         :pagination="ipagination"
         :loading="loading"
         class="j-table-force-nowrap"
+        :customRow="clickThenSelect"
+        :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio' }"
         @change="handleTableChange">
 
         <span slot="zoneCode" slot-scope="zoneCode">
@@ -52,6 +54,12 @@
         </template>
       </a-table>
     </div>
+
+    <a-tabs defaultActiveKey="1">
+      <a-tab-pane tab="库存分类详情" key="1">
+        <InventoryClassificationDetail :mainId="selectedMainId"/>
+      </a-tab-pane>
+    </a-tabs>
   </a-card>
 </template>
 
@@ -61,14 +69,16 @@ import '@/assets/less/TableExpand.less'
 import {mixinDevice} from '@/utils/mixin'
 import {JeecgListMixin} from '@/mixins/JeecgListMixin'
 import {getMaterialTypeList, getZoneList} from '@/api/api'
+import InventoryClassificationDetail from "./InventoryClassificationDetail";
 
 export default {
   name: 'ReportInventoryClassificationList',
   mixins: [JeecgListMixin, mixinDevice],
-  components: {},
+  components: {InventoryClassificationDetail},
   data() {
     return {
       description: '库存分类报表页面',
+      selectedMainId: '',
       zoneList: [],
       zoneOptions: [],
       materialTypeList: [],
@@ -130,6 +140,15 @@ export default {
     },
   },
   methods: {
+    searchQuery() {
+      this.loadData(1);
+      this.onClearSelected();
+    },
+    searchReset() {
+      this.queryParam = {}
+      this.loadData(1);
+      this.onClearSelected();
+    },
     loadFrom() {
       getMaterialTypeList().then((res) => {
         if (res.success) {
@@ -159,7 +178,26 @@ export default {
         }
       })
       return actions.join('')
-    }
+    },
+    clickThenSelect(record) {
+      return {
+        on: {
+          click: () => {
+            this.onSelectChange(record.materialTypeCode.split(','), [record])
+          }
+        }
+      }
+    },
+    onSelectChange(selectedRowKeys, selectionRows) {
+      this.selectedMainId = selectionRows[0].materialTypeCode
+      this.selectedRowKeys = selectedRowKeys
+      this.selectionRows = selectionRows
+    },
+    onClearSelected() {
+      this.selectedMainId = ''
+      this.selectedRowKeys = []
+      this.selectionRows = []
+    },
   }
 }
 </script>
diff --git a/ant-design-vue-jeecg/src/views/system/report/ReportInventoryDailyList.vue b/ant-design-vue-jeecg/src/views/system/report/ReportInventoryDailyList.vue
index 0b7dab9..1623a5d 100644
--- a/ant-design-vue-jeecg/src/views/system/report/ReportInventoryDailyList.vue
+++ b/ant-design-vue-jeecg/src/views/system/report/ReportInventoryDailyList.vue
@@ -71,7 +71,6 @@
         </template>
       </a-table>
     </div>
-    <inventory-transaction-modal ref="modalForm" @ok="modalFormOk"></inventory-transaction-modal>
   </a-card>
 </template>
 
diff --git a/ant-design-vue-jeecg/src/views/system/report/ReportPerformanceAssessmentList.vue b/ant-design-vue-jeecg/src/views/system/report/ReportPerformanceAssessmentList.vue
index a98aa87..b5ef4b9 100644
--- a/ant-design-vue-jeecg/src/views/system/report/ReportPerformanceAssessmentList.vue
+++ b/ant-design-vue-jeecg/src/views/system/report/ReportPerformanceAssessmentList.vue
@@ -26,7 +26,7 @@
         size="middle"
         :scroll="{x:true}"
         bordered
-        rowKey="id"
+        rowKey="userName"
         :columns="columns"
         :dataSource="dataSource"
         :pagination="ipagination"
@@ -55,12 +55,12 @@ import {JeecgListMixin} from '@/mixins/JeecgListMixin'
 import {getMaterialTypeList, getZoneList} from '@/api/api'
 
 export default {
-  name: 'ReportInventoryClassificationList',
+  name: 'ReportPerformanceAssessmentList',
   mixins: [JeecgListMixin, mixinDevice],
   components: {},
   data() {
     return {
-      description: '库存分类报表页面',
+      description: '绩效考核报表页面',
       zoneList: [],
       zoneOptions: [],
       materialTypeList: [],
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/InventoryDetailMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/InventoryDetailMapper.java
index aee2119..7ad4e47 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/InventoryDetailMapper.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/InventoryDetailMapper.java
@@ -25,4 +25,11 @@ public interface InventoryDetailMapper extends BaseMapper<InventoryDetail> {
      * @return 库存分类报表信息
      */
     List<ReportInventoryClassificationDto> selectReportClassification(@Param("materialTypeCode") String materialTypeCode);
+
+    /**
+     * 根据物料类别查询库存详情
+     * @param materialTypeCode 物料类别编码
+     * @return 库存详情信息
+     */
+    List<InventoryDetail> selectByMaterialTypeCode(String materialTypeCode);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/xml/InventoryDetailMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/xml/InventoryDetailMapper.xml
index af717b1..1badcc7 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/xml/InventoryDetailMapper.xml
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/mapper/xml/InventoryDetailMapper.xml
@@ -29,4 +29,21 @@
         </if>
         GROUP BY type
     </select>
+
+    <select id="selectByMaterialTypeCode"
+            resultType="org.jeecg.modules.wms.inventory.inventoryHeader.entity.InventoryDetail">
+        SELECT
+        inventory_detail.material_code,
+        inventory_detail.material_name,
+        inventory_detail.material_unit,
+        inventory_detail.material_spec,
+        SUM( qty ) AS qty
+        FROM inventory_detail
+        INNER JOIN material ON material.code = inventory_detail.material_code
+        <if test="materialTypeCode != null and materialTypeCode !=''">
+            and material.type = #{materialTypeCode}
+        </if>
+        INNER JOIN material_type ON material_type.code = material.type
+        GROUP BY inventory_detail.material_code
+    </select>
 </mapper>
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
index 4319517..e0201c2 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/IInventoryDetailService.java
@@ -140,4 +140,12 @@ public interface IInventoryDetailService extends IService<InventoryDetail> {
      * @return 库存分类报表信息
      */
     List<ReportInventoryClassificationDto> getInventoryClassifyReport(String materialTypeCode);
+
+    /**
+     * 库存分类详情报表查询
+     *
+     * @param materialTypeCode 物料类别编码
+     * @return 库存分类报表信息
+     */
+    List<InventoryDetail> getByMaterialTypeCode(String materialTypeCode);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
index a6c4520..f561b41 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/service/impl/InventoryDetailServiceImpl.java
@@ -11,6 +11,7 @@ import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import cn.hutool.core.util.StrUtil;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.wms.config.container.entity.Container;
@@ -495,4 +496,9 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe
     public List<ReportInventoryClassificationDto> getInventoryClassifyReport(String materialTypeCode) {
         return super.baseMapper.selectReportClassification(materialTypeCode);
     }
+
+    @Override
+    public List<InventoryDetail> getByMaterialTypeCode(String materialTypeCode) {
+        return super.baseMapper.selectByMaterialTypeCode(materialTypeCode);
+    }
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/controller/ReportController.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/controller/ReportController.java
index 4a36be7..20d756d 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/controller/ReportController.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/controller/ReportController.java
@@ -36,6 +36,7 @@ import org.jeecg.modules.wms.report.dto.ReportInventoryClassificationDto;
 import org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto;
 import org.jeecg.modules.wms.stocktaking.cycleCountDetail.service.ICycleCountDetailChildService;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService;
+import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskHeaderHistoryService;
 import org.jeecg.utils.HuahengJwtUtil;
 import org.jeecg.utils.StringUtils;
 import org.jeecg.utils.constant.QuantityConstant;
@@ -67,7 +68,7 @@ public class ReportController extends JeecgController<InventoryTransaction, IInv
     @Resource
     private IMaterialService materialService;
     @Resource
-    private ITaskHeaderService taskHeaderService;
+    private ITaskHeaderHistoryService taskHeaderHistoryService;
     @Resource
     private ILocationService locationService;
     @Resource
@@ -225,12 +226,24 @@ public class ReportController extends JeecgController<InventoryTransaction, IInv
     }
 
     /**
+     * 库存分类报表列表详情查询
+     */
+    @GetMapping(value = "/listInventoryClassificationDetail")
+    public Result listInventoryClassificationDetail(String materialTypeCode, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                              @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        List<InventoryDetail> inventoryClassifyReportList = inventoryDetailService.getByMaterialTypeCode(materialTypeCode);
+        Page<InventoryDetail> page = new Page<>(pageNo, pageSize);
+        page.setRecords(inventoryClassifyReportList);
+        return Result.OK(page);
+    }
+
+    /**
      * 绩效考核报表列表查询
      */
     @GetMapping(value = "/listPerformanceAssessment")
     public Result listPerformanceAssessment(String realName, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                               @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
-        List<ReportPerformanceAssessmentDto> performanceAssessmentReportList = taskHeaderService.getPerformanceAssessmentReport(realName);
+        List<ReportPerformanceAssessmentDto> performanceAssessmentReportList = taskHeaderHistoryService.getPerformanceAssessmentReport(realName);
         Page<ReportPerformanceAssessmentDto> page = new Page<>(pageNo, pageSize);
         page.setRecords(performanceAssessmentReportList);
         return Result.OK(page);
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/dto/ReportPerformanceAssessmentDto.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/dto/ReportPerformanceAssessmentDto.java
index b0d347e..8c43203 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/dto/ReportPerformanceAssessmentDto.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/report/dto/ReportPerformanceAssessmentDto.java
@@ -16,7 +16,7 @@ public class ReportPerformanceAssessmentDto implements Serializable {
     private String realName;
 
     /**
-     * 任务总数
+     * 任务总数(只包含入库类型与出库类的)
      */
     private Integer sumTaskQty;
 
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/TaskHeaderMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/TaskHeaderMapper.java
index 65a188a..a6a02ff 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/TaskHeaderMapper.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/TaskHeaderMapper.java
@@ -15,10 +15,4 @@ import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
  */
 public interface TaskHeaderMapper extends BaseMapper<TaskHeader> {
 
-    /**
-     * 绩效考核报表查询
-     * @param realName 用户姓名
-     * @return 绩效考核报表信息
-     */
-    List<ReportPerformanceAssessmentDto> selectPerformanceAssessment(@Param("realName") String realName);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/xml/TaskHeaderMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/xml/TaskHeaderMapper.xml
index 50e418f..d8179cd 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/xml/TaskHeaderMapper.xml
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/mapper/xml/TaskHeaderMapper.xml
@@ -2,18 +2,4 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.wms.task.taskHeader.mapper.TaskHeaderMapper">
 
-    <select id="selectPerformanceAssessment"
-            resultType="org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto">
-        SELECT sys_user.realname,
-        COUNT(task_header.create_by) AS sumTaskQty,
-        COUNT(IF((task_header.task_type = 100 OR task_header.task_type = 200 OR task_header.task_type = 500), task_header.create_by, NULL)) AS receiptTaskQty,
-        COUNT(IF((task_header.task_type = 300 OR task_header.task_type = 400 OR task_header.task_type = 600), task_header.create_by, NULL)) AS shipmentTaskQty
-        FROM sys_user
-        LEFT JOIN task_header ON sys_user.realname = task_header.create_by
-        <if test="realName != null and realName != ''">
-            <bind name="realName" value="'%' + realName + '%'"/>
-            WHERE sys_user.realname LIKE #{realName}
-        </if>
-        GROUP BY sys_user.realname
-    </select>
 </mapper>
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
index dbd0078..c1e7fe4 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/ITaskHeaderService.java
@@ -454,11 +454,4 @@ public interface ITaskHeaderService extends IService<TaskHeader> {
     List<String> findCommonData(List<String> dataList1, List<String> dataList2, boolean flag);
 
     boolean delMain (Integer id);
-
-    /**
-     * 绩效考核报表查询
-     * @param realName 用户姓名
-     * @return 绩效考核报表信息
-     */
-    List<ReportPerformanceAssessmentDto> getPerformanceAssessmentReport(String realName);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
index 03df444..36b1163 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
@@ -1,12 +1,16 @@
 package org.jeecg.modules.wms.task.taskHeader.service.impl;
 
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.stream.Collectors;
-
-import javax.annotation.Resource;
-
+import cn.hutool.core.collection.ListUtil;
+import cn.monitor4all.logRecord.annotation.OperationLog;
+import cn.monitor4all.logRecord.context.LogRecordContext;
+import com.alibaba.fastjson.JSON;
+import com.aliyun.oss.ServiceException;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.wms.api.wcs.service.LocationAllocationService;
@@ -75,23 +79,17 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.alibaba.fastjson.JSON;
-import com.aliyun.oss.ServiceException;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-import cn.monitor4all.logRecord.annotation.OperationLog;
-import cn.monitor4all.logRecord.context.LogRecordContext;
-import lombok.extern.slf4j.Slf4j;
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 任务表
- * @Author:      jeecg-boot
- * @Date:        2022-11-10
- * @Version:     V1.0
+ * @Author: jeecg-boot
+ * @Date: 2022-11-10
+ * @Version: V1.0
  */
 @Slf4j
 @Service
@@ -217,7 +215,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 如果库位是锁定的,那么这个库位一定是被某个任务占用。
-     * @param  location
+     *
+     * @param location
      * @return
      */
     @Override
@@ -324,11 +323,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
 
         Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_TRANSFER, containerCode, fromLocationCode, toLocationCode,
-            warehouseCode);
+                warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
-        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult();
         String zoneCode = taskLockEntity.getZoneCode();
         // 4. 判断源库位旁边有托盘但是没有任务,那么不允许移库
         TaskHeader taskHeader = new TaskHeader();
@@ -396,11 +395,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             toLocationCode = fromLocationCode;
         }
         Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_CHECK_OUT, containerCode, fromLocationCode, toLocationCode,
-            warehouseCode);
+                warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
-        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult();
         String zoneCode = taskLockEntity.getZoneCode();
         Port port = portService.getPortByCode(toPortCode, zoneCode, warehouseCode);
         if (port == null) {
@@ -458,11 +457,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             toLocationCode = fromLocationCode;
         }
         Result result =
-            taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_QUALITY, containerCode, fromLocationCode, toLocationCode, warehouseCode);
+                taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_QUALITY, containerCode, fromLocationCode, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
-        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult();
         String zoneCode = taskLockEntity.getZoneCode();
         Port port = portService.getPortByCode(toPortCode, QuantityConstant.PORT_TYPE_PICK, zoneCode, warehouseCode);
         if (port == null) {
@@ -486,7 +485,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
         LambdaQueryWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
         inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getContainerCode, containerCode).eq(InventoryDetail::getWarehouseCode, warehouseCode)
-            .eq(InventoryDetail::getLocationCode, fromLocationCode);
+                .eq(InventoryDetail::getLocationCode, fromLocationCode);
         List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
         List<TaskDetail> taskDetailList = new ArrayList<>();
         if (inventoryDetailList.size() != 0) {
@@ -545,7 +544,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.error("创建跨站任务时,起始站台和目标站台不能相同");
         }
         Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_OVER_STATION, containerCode, QuantityConstant.EMPTY_STRING,
-            QuantityConstant.EMPTY_STRING, warehouseCode);
+                QuantityConstant.EMPTY_STRING, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -621,7 +620,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         int high = locationHigh.getHigh();
         boolean bypass = false;
         String toLocationCode =
-            allocationService.allocation(allocationRule, locationTypeCodeList, high, zoneCode, roadWays, warehouseCode, containerCode, null, null, bypass);
+                allocationService.allocation(allocationRule, locationTypeCodeList, high, zoneCode, roadWays, warehouseCode, containerCode, null, null, bypass);
         if (StringUtils.isEmpty(toLocationCode)) {
             throw new JeecgBootException("创建空托盘组入库任务时,目标库位为空");
         }
@@ -643,11 +642,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
         log.info("开始创建空托盘组入库任务,容器编码" + containerCode + ",库位编码" + toLocationCode);
         Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT, containerCode,
-            QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode);
+                QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
-        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult();
         String zoneCode = taskLockEntity.getZoneCode();
         TaskHeader taskHeader = new TaskHeader();
         taskHeader.setWarehouseCode(warehouseCode);
@@ -680,11 +679,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.error("创建空托盘组出库任务时,仓库编码为空");
         }
         Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT, containerCode,
-            QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode);
+                QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
-        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult();
         String zoneCode = taskLockEntity.getZoneCode();
         Container container = containerService.getContainerByCode(containerCode, warehouseCode);
         String fromLocationCode = container.getLocationCode();
@@ -757,13 +756,13 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
         // 5、删除容器上的库位编码,并设置状态为空闲,填充度状态为空盘
         boolean success = containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY,
-            QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, warehouseCode);
+                QuantityConstant.STATUS_CONTAINER_FILL_EMPTY, warehouseCode);
         if (!success) {
             throw new JeecgBootException("处理空出失败, 更新容器状态失败");
         }
         // 6、删除库位上的容器编码,并设置状态为空闲
         success =
-            locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
+                locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
         if (!success) {
             throw new JeecgBootException("处理空出失败, 更新库位状态失败");
         }
@@ -778,7 +777,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         // 8、删除库存详情失败
         List<InventoryDetail> inventoryDetailList = inventoryDetailService.getInventoryDetailListByContainerCode(containerCode, warehouseCode);
         if (inventoryDetailList.size() != 0) {
-            List<Integer> idList = inventoryDetailList.stream().map(InventoryDetail::getId).collect(Collectors.toList());;
+            List<Integer> idList = inventoryDetailList.stream().map(InventoryDetail::getId).collect(Collectors.toList());
+            ;
             success = inventoryDetailService.removeByIds(idList);
             if (!success) {
                 throw new JeecgBootException("处理空出失败, 删除库存详情失败");
@@ -837,7 +837,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 }
             }
         }
-        ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(taskHeader.getReceiptContainerHeaderId());;
+        ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(taskHeader.getReceiptContainerHeaderId());
+        ;
         if (receiptContainerHeader != null) {
             success = receiptContainerHeaderService.updateStatusById(QuantityConstant.RECEIPT_CONTAINER_FINISHED, receiptContainerHeader.getId());
             if (!success) {
@@ -983,7 +984,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     public TaskHeader getUnCompleteTaskByFromLocationCode(String fromLocationCode, String warehouseCode) {
         LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
         taskHeaderLambdaQueryWrapper.eq(TaskHeader::getFromLocationCode, fromLocationCode).eq(TaskHeader::getWarehouseCode, warehouseCode).lt(TaskHeader::getStatus,
-            QuantityConstant.TASK_STATUS_COMPLETED);
+                QuantityConstant.TASK_STATUS_COMPLETED);
         TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
         return taskHeader;
     }
@@ -992,7 +993,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     public TaskHeader getUnCompleteTaskByToLocationCode(String toLocationCode, String warehouseCode) {
         LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
         taskHeaderLambdaQueryWrapper.eq(TaskHeader::getToLocationCode, toLocationCode).eq(TaskHeader::getWarehouseCode, warehouseCode).lt(TaskHeader::getStatus,
-            QuantityConstant.TASK_STATUS_COMPLETED);
+                QuantityConstant.TASK_STATUS_COMPLETED);
         TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
         return taskHeader;
     }
@@ -1010,7 +1011,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     public TaskHeader getUnCompleteTaskByContainerCode(String containerCode, String warehouseCode) {
         LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
         taskHeaderLambdaQueryWrapper.eq(TaskHeader::getContainerCode, containerCode).eq(TaskHeader::getWarehouseCode, warehouseCode).lt(TaskHeader::getStatus,
-            QuantityConstant.TASK_STATUS_COMPLETED);
+                QuantityConstant.TASK_STATUS_COMPLETED);
         TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
         return taskHeader;
     }
@@ -1019,7 +1020,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     public TaskHeader getUnCompleteTaskByPreTaskNo(int preTaskNo, String warehouseCode) {
         LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
         taskHeaderLambdaQueryWrapper.eq(TaskHeader::getPreTaskNo, preTaskNo).eq(TaskHeader::getWarehouseCode, warehouseCode).lt(TaskHeader::getStatus,
-            QuantityConstant.TASK_STATUS_COMPLETED);
+                QuantityConstant.TASK_STATUS_COMPLETED);
         TaskHeader taskHeader = taskHeaderService.getOne(taskHeaderLambdaQueryWrapper);
         return taskHeader;
     }
@@ -1215,9 +1216,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
      * 创建空托盘入库
      * 1. 判断托盘号、库位编码是否满足要求
      * 2. 创建任务,锁定容器、库位
-     * @param  containerCode
-     * @param  toLocationCode
-     * @param  warehouseCode
+     *
+     * @param containerCode
+     * @param toLocationCode
+     * @param warehouseCode
      * @return
      */
     @Override
@@ -1243,7 +1245,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
 
         Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_EMPTYRECEIPT, containerCode, QuantityConstant.EMPTY_STRING,
-            toLocationCode, warehouseCode);
+                toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -1274,9 +1276,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 创建空托盘出库
-     * @param  containerCode
-     * @param  toPortCode
-     * @param  warehouseCode
+     *
+     * @param containerCode
+     * @param toPortCode
+     * @param warehouseCode
      * @return
      */
     @Override
@@ -1295,11 +1298,11 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         Container container = containerService.getContainerByCode(containerCode, warehouseCode);
         String fromLocationCode = container.getLocationCode();
         Result result = taskHeaderService.createTaskLockContainerAndLocation(QuantityConstant.TASK_TYPE_EMPTYSHIPMENT, containerCode, QuantityConstant.EMPTY_STRING,
-            QuantityConstant.EMPTY_STRING, warehouseCode);
+                QuantityConstant.EMPTY_STRING, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
-        TaskLockEntity taskLockEntity = (TaskLockEntity)result.getResult();
+        TaskLockEntity taskLockEntity = (TaskLockEntity) result.getResult();
         String zoneCode = taskLockEntity.getZoneCode();
         Port port = portService.getPortByCode(toPortCode, zoneCode, warehouseCode);
         if (port == null) {
@@ -1339,8 +1342,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
         LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery();
         containerLambdaQueryWrapper.eq(Container::getStatus, QuantityConstant.STATUS_CONTAINER_EMPTY).ne(Container::getLocationCode, QuantityConstant.EMPTY_STRING)
-            .eq(Container::getFillStatus, QuantityConstant.STATUS_CONTAINER_FILL_EMPTY).eq(Container::getWarehouseCode, warehouseCode)
-            .orderByAsc(Container::getUpdateTime);
+                .eq(Container::getFillStatus, QuantityConstant.STATUS_CONTAINER_FILL_EMPTY).eq(Container::getWarehouseCode, warehouseCode)
+                .orderByAsc(Container::getUpdateTime);
         List<Container> containerList = containerService.list(containerLambdaQueryWrapper);
         List<Container> removeContainerList = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(containerList)) {
@@ -1372,16 +1375,17 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 完成入库任务
-     * @param  taskHeader 任务
-     * @return            AjaxResult 完成入库任务结果
+     *
+     * @param taskHeader 任务
+     * @return AjaxResult 完成入库任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
     @OperationLog(bizId = "''", bizType = "'任务追踪'", tag = "'入库任务完成'", extra = "#extraJsonString1",
-        msg = "#taskHeader == null ? '' : '任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()",
-        recordReturnValue = true)
+            msg = "#taskHeader == null ? '' : '任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()",
+            recordReturnValue = true)
     @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'入库任务完成'", extra = "#extraJsonString1",
-        msg = "'任务ID:' + #taskHeader.getId() + ',库位编码:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()", recordReturnValue = true)
+            msg = "'任务ID:' + #taskHeader.getId() + ',库位编码:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()", recordReturnValue = true)
     @OperationLog(bizId = "''", bizType = "'入库单追踪'", tag = "'详情入库完成'", extra = "#extraJsonString2", msg = "''", recordReturnValue = true)
     public Result completeReceiptTask(TaskHeader taskHeader) {
         if (taskHeader == null) {
@@ -1403,7 +1407,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             int allow = parameterConfigurationService.getValueIntByCode(QuantityConstant.RULE_CALL_BOX_ALLOW_EMPTY);
             if (allow == QuantityConstant.RULE_ALLOW_EMPTY) {
                 Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), taskType, containerCode,
-                    fromLocationCode, toLocationCode, warehouseCode);
+                        fromLocationCode, toLocationCode, warehouseCode);
                 if (!result.isSuccess()) {
                     throw new JeecgBootException(result.getMessage());
                 }
@@ -1548,7 +1552,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
         }
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), taskType, containerCode, fromLocationCode,
-            toLocationCode, warehouseCode);
+                toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -1566,17 +1570,18 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 完成出库任务
-     * @param  taskHeader 任务
-     * @return            result 完成出库任务
+     *
+     * @param taskHeader 任务
+     * @return result 完成出库任务
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
     @OperationLog(bizId = "''", bizType = "'任务追踪'", tag = "'出库任务完成'", extra = "#extraJsonString1",
-        msg = "#taskHeader == null ? '' : '任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()",
-        recordReturnValue = true)
+            msg = "#taskHeader == null ? '' : '任务类型:' + #taskHeader.getTaskType() + ',起始库位:' + #taskHeader.getFromLocationCode() + ',目标库位:' + #taskHeader.getToLocationCode() + ',容器编码:' + #taskHeader.getContainerCode()",
+            recordReturnValue = true)
     @OperationLog(bizId = "''", bizType = "'出库单追踪'", tag = "'出库任务完成'", extra = "#extraJsonString1",
-        msg = "'任务ID:' + #taskHeader.getId() + ',库位编码:' + #taskHeader.getFromLocationCode() + ',容器编码:' + #taskHeader.getContainerCode() + ',目标出入口:' + #taskHeader.getToPortCode()",
-        recordReturnValue = true)
+            msg = "'任务ID:' + #taskHeader.getId() + ',库位编码:' + #taskHeader.getFromLocationCode() + ',容器编码:' + #taskHeader.getContainerCode() + ',目标出入口:' + #taskHeader.getToPortCode()",
+            recordReturnValue = true)
     @OperationLog(bizId = "''", bizType = "'出库单追踪'", tag = "'详情出库完成'", extra = "#extraJsonString2", msg = "''", recordReturnValue = true)
     public Result completeShipmentTask(TaskHeader taskHeader) {
         if (taskHeader == null) {
@@ -1614,7 +1619,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                         throw new JeecgBootException("完成出库任务,更新出库组盘头失败");
                     }
                     List<ShipmentContainerAdvice> shipmentContainerAdviceList =
-                        shipmentContainerAdviceService.getShipmentContainerAdviceListByShipmentContainerId(shipmentContainerHeader.getId());
+                            shipmentContainerAdviceService.getShipmentContainerAdviceListByShipmentContainerId(shipmentContainerHeader.getId());
                     for (ShipmentContainerAdvice shipmentContainerAdvice : shipmentContainerAdviceList) {
                         if (!shipmentContainerAdviceService.updateStatusById(QuantityConstant.SHIPMENT_CONTAINER_FINISHED, shipmentContainerAdvice.getId())) {
                             throw new JeecgBootException("完成出库任务,更新出库预配盘失败");
@@ -1638,7 +1643,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                     }
                 }
                 Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), taskType, containerCode,
-                    fromLocationCode, toLocationCode, warehouseCode);
+                        fromLocationCode, toLocationCode, warehouseCode);
                 if (!result.isSuccess()) {
                     throw new JeecgBootException(result.getMessage());
                 }
@@ -1809,7 +1814,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
         }
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), taskType, containerCode, fromLocationCode,
-            toLocationCode, warehouseCode);
+                toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -1885,8 +1890,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 InventoryDetail inventoryDetail1 = inventoryDetailList.get(i);
                 InventoryDetail inventoryDetail2 = inventoryDetailList.get(j);
                 if (inventoryDetail1.getMaterialCode().equals(inventoryDetail2.getMaterialCode()) && inventoryDetail1.getBatch().equals(inventoryDetail2.getBatch())
-                    && inventoryDetail1.getLot().equals(inventoryDetail2.getLot()) && inventoryDetail1.getProject().equals(inventoryDetail2.getProject())
-                    && inventoryDetail1.getInventoryStatus().equals(inventoryDetail2.getInventoryStatus())) {
+                        && inventoryDetail1.getLot().equals(inventoryDetail2.getLot()) && inventoryDetail1.getProject().equals(inventoryDetail2.getProject())
+                        && inventoryDetail1.getInventoryStatus().equals(inventoryDetail2.getInventoryStatus())) {
                     // 属性一样的库存,相加合并。
                     if (StringUtils.isNotEmpty(inventoryDetail1.getSn())) {
                         if (!inventoryDetail1.getSn().equals(inventoryDetail2.getSn())) {
@@ -1931,6 +1936,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 锁定容器和库位分4种情况,入库任务、出库任务、分拣任务、换站任务
+     *
      * @param
      */
     @Override
@@ -2147,7 +2153,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Result completeTaskUnLockContainerAndLocation(String containerFillStatus, int taskType, String containerCode, String fromLocationCode,
-        String toLocationCode, String warehouseCode) {
+                                                         String toLocationCode, String warehouseCode) {
         boolean success = false;
         if (StringUtils.isEmpty(containerCode)) {
             return Result.error("任务类型" + taskType + "完成任务时, 容器编码为空");
@@ -2193,7 +2199,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 break;
             case QuantityConstant.TASK_TYPE_OVER_STATION:
                 success = containerService.updateLocationCodeAndStatus(containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_CONTAINER_EMPTY,
-                    warehouseCode);
+                        warehouseCode);
                 break;
         }
         if (!success) {
@@ -2205,7 +2211,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
                 return Result.error("任务类型" + taskType + "完成任务时," + toLocationCode + "目标库位不存在");
             }
             success =
-                locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
+                    locationService.updateContainerCodeAndStatus(fromLocationCode, QuantityConstant.EMPTY_STRING, QuantityConstant.STATUS_LOCATION_EMPTY, warehouseCode);
             if (!success) {
                 throw new JeecgBootException("任务类型" + taskType + "完成任务时,更新源库位失败");
             }
@@ -2356,7 +2362,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
-        TaskHeader taskHeader = (TaskHeader)result.getResult();
+        TaskHeader taskHeader = (TaskHeader) result.getResult();
         if (taskHeader.getTaskType() == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) {
             if (port == null) {
                 throw new JeecgBootException("快速入库, 生成补充任务时必须有入库口");
@@ -2426,7 +2432,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             shipmentDetailList.add(shipmentDetail);
             shipmentQtyList.add(qty);
             List<InventoryDetail> inventoryDetailList =
-                inventoryDetailService.getInventoryDetailListByMaterialCodeToShipment(materialCode, zoneCode, qty, warehouseCode);
+                    inventoryDetailService.getInventoryDetailListByMaterialCodeToShipment(materialCode, zoneCode, qty, warehouseCode);
             List<InventoryDetail> removeInventoryDetailList = new ArrayList<>();
             for (InventoryDetail inventoryDetail : inventoryDetailList) {
                 if (roadWay.intValue() == inventoryDetail.getRoadWay().intValue()) {
@@ -2462,7 +2468,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             ShipmentDetail shipmentDetail = shipmentDetailService.getById(shipmentDetailId);
             BigDecimal shipQty = shipmentQtyList.get(i);
             InventoryDetail inventoryDetail =
-                inventoryDetailService.getInventoryDetailByMaterialCodeToShipment(switchContainerCode, shipmentDetail.getMaterialCode(), shipQty, warehouseCode);
+                    inventoryDetailService.getInventoryDetailByMaterialCodeToShipment(switchContainerCode, shipmentDetail.getMaterialCode(), shipQty, warehouseCode);
             CombinationModel combinationModel = new CombinationModel();
             combinationModel.setShipmentDetail(shipmentDetail);
             combinationModel.setInventoryDetail(inventoryDetail);
@@ -2555,8 +2561,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 完成空托盘入库任务
-     * @param  taskHeader 任务
-     * @return            Result 完成入库任务结果
+     *
+     * @param taskHeader 任务
+     * @return Result 完成入库任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -2575,7 +2582,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.error("完成空托盘入库任务时, 目标库位编码为空");
         }
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_EMPTYRECEIPT,
-            containerCode, QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode);
+                containerCode, QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -2590,7 +2597,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     /**
      * 盘点完成
      * 盘点有差异完成时状态为105
-     * @param  taskHeader
+     *
+     * @param taskHeader
      * @return
      */
     @Override
@@ -2870,7 +2878,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         cycleCountHeaderService.updataHeaderStatus(cycleCountDetail.getCycleCountHeadCode());
 
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_CHECK_OUT,
-            containerCode, fromLocationCode, toLocationCode, warehouseCode);
+                containerCode, fromLocationCode, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -2884,8 +2892,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 完成空托盘出库任务
-     * @param  taskHeader 任务
-     * @return            Result 完成出库任务结果
+     *
+     * @param taskHeader 任务
+     * @return Result 完成出库任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -2921,7 +2930,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.error("完成空托盘出库任务时," + toPortCode + "目标出库口不存在");
         }
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_EMPTYSHIPMENT,
-            containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode);
+                containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -2935,8 +2944,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 完成移库任务
-     * @param  taskHeader 任务
-     * @return            Result 完成移库任务结果
+     *
+     * @param taskHeader 任务
+     * @return Result 完成移库任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -2963,7 +2973,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         List<InventoryTransaction> inventoryTransactionList = new ArrayList<>();
         LambdaUpdateWrapper<InventoryDetail> inventoryDetailLambdaUpdateWrapper = Wrappers.lambdaUpdate();
         inventoryDetailLambdaUpdateWrapper.eq(InventoryDetail::getWarehouseCode, warehouseCode).eq(InventoryDetail::getContainerCode, containerCode)
-            .eq(InventoryDetail::getLocationCode, fromLocationCode);
+                .eq(InventoryDetail::getLocationCode, fromLocationCode);
         List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaUpdateWrapper);
         for (InventoryDetail inventoryDetail : inventoryDetailList) {
             inventoryDetail.setLocationCode(toLocationCode);
@@ -2994,7 +3004,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
         }
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_TRANSFER,
-            containerCode, fromLocationCode, toLocationCode, warehouseCode);
+                containerCode, fromLocationCode, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -3008,8 +3018,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 完成出库查看任务
-     * @param  taskHeader 任务
-     * @return            Result 完成出库查看任务结果
+     *
+     * @param taskHeader 任务
+     * @return Result 完成出库查看任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -3040,7 +3051,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         boolean success = false;
         LambdaUpdateWrapper<InventoryDetail> inventoryDetailLambdaQueryWrapper = Wrappers.lambdaUpdate();
         inventoryDetailLambdaQueryWrapper.eq(InventoryDetail::getWarehouseCode, warehouseCode).eq(InventoryDetail::getContainerCode, containerCode)
-            .eq(InventoryDetail::getLocationCode, fromLocationCode);
+                .eq(InventoryDetail::getLocationCode, fromLocationCode);
         List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailLambdaQueryWrapper);
         if (inventoryDetailList.size() != 0) {
             List<InventoryDetail> inventoryDetailList1 = new ArrayList<>();
@@ -3067,7 +3078,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         }
 
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_CHECK_OUT,
-            containerCode, fromLocationCode, toLocationCode, warehouseCode);
+                containerCode, fromLocationCode, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -3082,8 +3093,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 完成跨站任务
-     * @param  taskHeader 任务
-     * @return            Result 完成跨站任务结果
+     *
+     * @param taskHeader 任务
+     * @return Result 完成跨站任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -3118,7 +3130,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.error("创建跨站任务时,目标站台为空");
         }
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_OVER_STATION,
-            containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode);
+                containerCode, QuantityConstant.EMPTY_STRING, QuantityConstant.EMPTY_STRING, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -3133,8 +3145,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 完成空托盘组入库任务
-     * @param  taskHeader 任务
-     * @return            Result 完成空托盘组入库任务结果
+     *
+     * @param taskHeader 任务
+     * @return Result 完成空托盘组入库任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -3161,7 +3174,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             return Result.error("完成空托盘组入库任务时,没有找到库位" + toLocationCode);
         }
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_MANY_EMPTYRECEIPT,
-            containerCode, QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode);
+                containerCode, QuantityConstant.EMPTY_STRING, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -3176,8 +3189,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 完成空托盘组出库任务
-     * @param  taskHeader 任务
-     * @return            Result 完成空托盘组出库任务结果
+     *
+     * @param taskHeader 任务
+     * @return Result 完成空托盘组出库任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -3222,7 +3236,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             throw new JeecgBootException("完成空托盘组出库任务时, 更新任务失败");
         }
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_MANY_EMPTYSHIPMENT,
-            containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode);
+                containerCode, fromLocationCode, QuantityConstant.EMPTY_STRING, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -3361,7 +3375,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
             }
         }
         Result result = taskHeaderService.completeTaskUnLockContainerAndLocation(taskHeader.getContainerFillStatus(), QuantityConstant.TASK_TYPE_QUALITY,
-            containerCode, fromLocationCode, toLocationCode, warehouseCode);
+                containerCode, fromLocationCode, toLocationCode, warehouseCode);
         if (!result.isSuccess()) {
             throw new JeecgBootException(result.getMessage());
         }
@@ -3375,8 +3389,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 取消入库任务
-     * @param  taskHeader 任务
-     * @return            Result 取消入库任务结果
+     *
+     * @param taskHeader 任务
+     * @return Result 取消入库任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -3395,8 +3410,9 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 取消出库任务
-     * @param  taskHeader 任务
-     * @return            Result 取消出库任务结果
+     *
+     * @param taskHeader 任务
+     * @return Result 取消出库任务结果
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -3418,7 +3434,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
         log.info("开始取消盘点任务");
         LambdaQueryWrapper<CycleCountDetail> cycleCountDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
         cycleCountDetailLambdaQueryWrapper.eq(CycleCountDetail::getContainerCode, taskHeader.getContainerCode()).ne(CycleCountDetail::getEnableStatus,
-            QuantityConstant.SHIPMENT_RECEIVE_SUCCESS);
+                QuantityConstant.SHIPMENT_RECEIVE_SUCCESS);
         CycleCountDetail cycleCountDetail = cycleCountDetailService.getOne(cycleCountDetailLambdaQueryWrapper);
         if (cycleCountDetail == null) {
             throw new JeecgBootException("取消盘点任务,没有找到盘点明细");
@@ -3474,7 +3490,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
 
     /**
      * 取消任务,恢复容器和库位状态
-     * @param  taskHeader
+     *
+     * @param taskHeader
      * @return
      */
     @Override
@@ -3526,12 +3543,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea
     public boolean updateById(TaskHeader taskHeader) {
         LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
         taskHeaderLambdaQueryWrapper.eq(TaskHeader::getId, taskHeader.getId()).lt(taskHeader.getStatus() != null, TaskHeader::getStatus,
-            QuantityConstant.TASK_STATUS_COMPLETED);
+                QuantityConstant.TASK_STATUS_COMPLETED);
         return super.update(taskHeader, taskHeaderLambdaQueryWrapper);
     }
-
-    @Override
-    public List<ReportPerformanceAssessmentDto> getPerformanceAssessmentReport(String realName) {
-        return super.baseMapper.selectPerformanceAssessment(realName);
-    }
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/TaskHeaderHistoryMapper.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/TaskHeaderHistoryMapper.java
index 95bdce3..b1bbfb4 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/TaskHeaderHistoryMapper.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/TaskHeaderHistoryMapper.java
@@ -1,8 +1,12 @@
 package org.jeecg.modules.wms.task.taskHeaderHistory.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto;
 import org.jeecg.modules.wms.task.taskHeaderHistory.entity.TaskHeaderHistory;
 
+import java.util.List;
+
 /**
  * @Description: task_header_history
  * @Author: jeecg-boot
@@ -11,4 +15,13 @@ import org.jeecg.modules.wms.task.taskHeaderHistory.entity.TaskHeaderHistory;
  */
 public interface TaskHeaderHistoryMapper extends BaseMapper<TaskHeaderHistory> {
 
+    /**
+     * 绩效考核报表查询
+     * @param realName 用户姓名
+     * @param taskTypeList 任务类型
+     * @return 绩效考核报表信息
+     */
+    List<ReportPerformanceAssessmentDto> selectPerformanceAssessment(@Param("realName") String realName,
+                                                                     @Param("receiptTaskInternalType") Integer receiptTaskInternalType,
+                                                                     @Param("shipmentTaskInternalType") Integer shipmentTaskInternalType);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/xml/TaskHeaderHistoryMapper.xml b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/xml/TaskHeaderHistoryMapper.xml
index 44c2901..4abc6aa 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/xml/TaskHeaderHistoryMapper.xml
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/mapper/xml/TaskHeaderHistoryMapper.xml
@@ -2,4 +2,24 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.wms.task.taskHeaderHistory.mapper.TaskHeaderHistoryMapper">
 
+    <select id="selectPerformanceAssessment"
+            resultType="org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto">
+        SELECT sys_user.realname,
+        COUNT(task_header_history.create_by) AS sumTaskQty,
+        COUNT(IF((task_header_history.innernal_task_type = #{receiptTaskInternalType}),
+        task_header_history.create_by, NULL)) AS receiptTaskQty,
+        COUNT(IF((task_header_history.innernal_task_type = #{shipmentTaskInternalType}),
+        task_header_history.create_by, NULL)) AS shipmentTaskQty
+        FROM sys_user
+        LEFT JOIN task_header_history ON sys_user.realname = task_header_history.create_by
+        and task_header_history.innernal_task_type IN
+        (#{receiptTaskInternalType}, #{shipmentTaskInternalType})
+        <where>
+            <if test="realName != null and realName != ''">
+                <bind name="realName" value="'%' + realName + '%'"/>
+                and sys_user.realname LIKE #{realName}
+            </if>
+        </where>
+        GROUP BY sys_user.realname
+    </select>
 </mapper>
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/ITaskHeaderHistoryService.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/ITaskHeaderHistoryService.java
index 78c4f36..8b14ca1 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/ITaskHeaderHistoryService.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/ITaskHeaderHistoryService.java
@@ -1,5 +1,6 @@
 package org.jeecg.modules.wms.task.taskHeaderHistory.service;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto;
 import org.jeecg.modules.wms.task.taskHeaderHistory.entity.TaskDetailHistory;
 import org.jeecg.modules.wms.task.taskHeaderHistory.entity.TaskHeaderHistory;
 
@@ -39,4 +40,10 @@ public interface ITaskHeaderHistoryService extends IService<TaskHeaderHistory> {
 
 	void saveById(Integer id);
 
+	/**
+	 * 绩效考核报表查询:只包含入库(整盘入库、补充入库、空容器入库)与出库(整盘出库、分拣出库、空容器出库)类型的
+	 * @param realName 用户姓名
+	 * @return 绩效考核报表信息
+	 */
+	List<ReportPerformanceAssessmentDto> getPerformanceAssessmentReport(String realName);
 }
diff --git a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/impl/TaskHeaderHistoryServiceImpl.java b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/impl/TaskHeaderHistoryServiceImpl.java
index ec281f7..6f159ea 100644
--- a/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/impl/TaskHeaderHistoryServiceImpl.java
+++ b/huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeaderHistory/service/impl/TaskHeaderHistoryServiceImpl.java
@@ -1,12 +1,15 @@
 package org.jeecg.modules.wms.task.taskHeaderHistory.service.impl;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
 import javax.annotation.Resource;
 
+import cn.hutool.core.collection.ListUtil;
 import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.wms.report.dto.ReportPerformanceAssessmentDto;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskDetail;
 import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader;
 import org.jeecg.modules.wms.task.taskHeader.service.ITaskDetailService;
@@ -17,6 +20,7 @@ import org.jeecg.modules.wms.task.taskHeaderHistory.mapper.TaskDetailHistoryMapp
 import org.jeecg.modules.wms.task.taskHeaderHistory.mapper.TaskHeaderHistoryMapper;
 import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskDetailHistoryService;
 import org.jeecg.modules.wms.task.taskHeaderHistory.service.ITaskHeaderHistoryService;
+import org.jeecg.utils.constant.QuantityConstant;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -112,4 +116,9 @@ public class TaskHeaderHistoryServiceImpl extends ServiceImpl<TaskHeaderHistoryM
         }
 
     }
+
+    @Override
+    public List<ReportPerformanceAssessmentDto> getPerformanceAssessmentReport(String realName) {
+        return super.baseMapper.selectPerformanceAssessment(realName, QuantityConstant.TASK_INTENERTYPE_RECEIPT, QuantityConstant.TASK_INTENERTYPE_SHIPMENT);
+    }
 }