From d044dc871c16f05c9a1fb1489621020c91ec9d59 Mon Sep 17 00:00:00 2001
From: Mr.Shi <1878285526@qq.com>
Date: 星期三, 16 八月 2023 18:30:56 +0800
Subject: [PATCH] Merge branch 'master' of ssh://139.186.142.91:29418/productDev/dmMes

---
 web_standard/src/api/ext/userSalary.js                                                  |   16 
 server/src/main/java/doumeemes/service/ext/impl/CompanyExtServiceImpl.java              |    2 
 web_standard/src/views/ext/workingorderExt.vue                                          |    4 
 web_standard/src/views/business/workPlans.vue                                           |   16 
 server/src/main/java/doumeemes/service/ext/impl/WorkPlansExtServiceImpl.java            |   12 
 server/src/main/resources/mappers/WorkorderRecordExtMapper.xml                          |   12 
 web_standard/coderd.json                                                                |    2 
 web_standard/src/views/ext/workorderRecordExt.vue                                       |   18 
 platform_web/src/components/system/menu/OperaMenuH5Window.vue                           |   11 
 server/src/main/java/doumeemes/service/ext/CategoryExtService.java                      |    2 
 web_standard/src/views/.DS_Store                                                        |    0 
 server/src/main/java/doumeemes/config/shiro/ShiroRealm.java                             |    7 
 server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java          |    2 
 server/src/main/java/doumeemes/service/business/impl/WOutboundServiceImpl.java          |    3 
 server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java |  364 +++++-
 server/src/main/java/doumeemes/dao/business/model/Workorder.java                        |   26 
 web_standard/src/views/ext/userSalary.vue                                               |  219 ++++
 web_standard/src/views/ext/plansExt.vue                                                 |   47 
 server/src/main/java/doumeemes/service/business/impl/UnqualifiedRecordServiceImpl.java  |  124 ++
 server/src/main/java/doumeemes/dao/ext/beanDto/QueryWStockDto.java                      |    2 
 server/src/main/java/doumeemes/dao/business/model/SalaryParam.java                      |    2 
 server/src/main/java/doumeemes/api/ext/CategoryExtController.java                       |    9 
 platform_web/src/components/system/permission/OperaPermissionWindow.vue                 |    8 
 platform_web/src/components/business/OperaClientMangerWindow.vue                        |    1 
 server/src/main/java/doumeemes/dao/ext/dto/QueryBomExtDTO.java                          |    3 
 server/src/main/java/doumeemes/dao/ext/vo/CompanyExtListVO.java                         |    3 
 platform_web/src/views/system/permission.vue                                            |    2 
 server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java              |    2 
 web_standard/.env.production                                                            |   12 
 server/src/main/java/doumeemes/api/business/SalaryParamController.java                  |   28 
 web_standard/public/salary_import_template.xlsx                                         |    0 
 server/src/main/java/doumeemes/biz/system/impl/SystemMenuBizImpl.java                   |    4 
 server/src/main/java/doumeemes/core/utils/excel/EasyExcelUtil.java                      |    5 
 server/src/main/resources/mappers/PlansExtMapper.xml                                    |   28 
 platform_web/src/views/system/permissionCom.vue                                         |   99 +
 server/src/main/java/doumeemes/dao/business/model/UnqualifiedRecord.java                |   79 +
 server/src/main/java/doumeemes/dao/ext/vo/BomExtListVO.java                             |    7 
 server/src/main/resources/mappers/UserDeviceExtMapper.xml                               |    2 
 server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java            |    1 
 web_standard/src/components/ext/OrderDistrubution.vue                                   |    5 
 server/src/main/java/doumeemes/service/ext/impl/CategoryExtServiceImpl.java             |    6 
 server/src/main/java/doumeemes/dao/business/vo/WorkPlansVO.java                         |   30 
 web_standard/src/components/business/OperaSalaryParamWindow.vue                         |  254 +++++
 web_standard/.env.development                                                           |   11 
 server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java                       |   23 
 web_standard/src/components/common/Header.vue                                           |   51 
 web_standard/src/components/ext/OperaWorkorderDetailWindow.vue                          |  217 ++--
 .gitignore                                                                              |    1 
 web_standard/src/views/ext/salaryStatistic.vue                                          |  182 +++
 server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java                    |    8 
 server/src/main/java/doumeemes/api/business/UnqualifiedRecordController.java            |   71 +
 server/src/main/java/doumeemes/service/business/impl/CompanyServiceImpl.java            |   45 
 server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java                |   98 +
 server/src/main/java/doumeemes/service/business/UnqualifiedRecordService.java           |   97 +
 platform_web/src/views/system/menuH5.vue                                                |    2 
 server/src/main/java/doumeemes/dao/business/UnqualifiedRecordMapper.java                |   12 
 server/src/main/resources/mappers/SalaryParamMapper.xml                                 |    8 
 web_standard/src/components/ext/OrderQrCodeLabel.vue                                    |    2 
 server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java                    |    8 
 web_standard/src/assets/style/style.scss                                                |    2 
 server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java                  |   12 
 server/src/main/resources/mappers/WorkPlansExtMapper.xml                                |    6 
 server/src/main/java/doumeemes/dao/business/dto/CreateUnqualifiedDTO.java               |   23 
 server/src/main/java/doumeemes/dao/business/model/Plans.java                            |    4 
 server/src/main/java/doumeemes/service/business/impl/CompanyOpenServiceImpl.java        |   21 
 server/src/main/java/doumeemes/dao/ext/dto/QueryUserSalaryListDTO.java                  |    4 
 server/src/main/java/doumeemes/dao/ext/dto/QueryPlansExtDTO.java                        |    4 
 web_standard/src/api/business/salaryParam.js                                            |   40 
 server/src/main/java/doumeemes/dao/ext/dto/QueryBomDetailExtDTO.java                    |    2 
 server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java        |   76 +
 web_standard/src/views/business/salaryParam.vue                                         |  159 +++
 web_standard/src/api/ext/salaryStatistic.js                                             |   16 
 server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java                |    6 
 platform_web/.env.development                                                           |   15 
 /dev/null                                                                               |  162 ---
 server/src/main/java/doumeemes/api/ext/PlansExtController.java                          |    9 
 server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java           |    4 
 web_standard/src/utils/form.js                                                          |    9 
 web_standard/src/assets/style/lib.css                                                   |    1 
 server/src/main/java/doumeemes/dao/ext/vo/PlansExtListVO.java                           |   50 
 web_standard/src/views/ext/workorderPutRecordExt.vue                                    |   13 
 81 files changed, 2,334 insertions(+), 619 deletions(-)

diff --git a/.gitignore b/.gitignore
index 091cb8d..577c5c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
 /web_standard/doumeeplant_web
 /web_standard/.vscode
 .idea
+.DS_Store
\ No newline at end of file
diff --git a/platform_web/.env.development b/platform_web/.env.development
index 0e5af1b..f0c4c7b 100644
--- a/platform_web/.env.development
+++ b/platform_web/.env.development
@@ -13,20 +13,11 @@
 # 鎺ュ彛鍓嶇紑
 VUE_APP_API_PREFIX = ''
 
-#娴嬭瘯鏈嶅姟鍣�
-# VUE_APP_BASE_URL = 'http://139.186.142.91:10012/'
-#姹囨櫤
-#VUE_APP_BASE_URL = 'https://106.14.220.133:10012/'
 
-#浠诲悍鏈湴
-# VUE_APP_BASE_URL = 'http://192.168.0.15:10012/'
-# VUE_APP_BASE_URL = 'https://hsky.doumee.com/doumeeplant_api/'
 
 #姹熻悕鏈湴
-#VUE_APP_BASE_URL = 'http://192.168.0.12:10012/'
+#VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
+
 #鍒樼纾婃湰鍦�
-#VUE_APP_BASE_URL = 'http://192.168.0.18:10012/'
-#VUE_APP_BASE_URL = 'http://192.168.0.176:10012/'
-#VUE_APP_BASE_URL = 'http://6201h1b706.zicp.fun:19470/'
 VUE_APP_BASE_URL = 'http://192.168.0.18:10021/'
-VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
\ No newline at end of file
+# VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
\ No newline at end of file
diff --git a/platform_web/src/components/business/OperaClientMangerWindow.vue b/platform_web/src/components/business/OperaClientMangerWindow.vue
index 3b381aa..c1f562b 100644
--- a/platform_web/src/components/business/OperaClientMangerWindow.vue
+++ b/platform_web/src/components/business/OperaClientMangerWindow.vue
@@ -217,6 +217,7 @@
         this.form.fileurlfull = this.form.fileStoreAddr ? this.form.fileurlfull : ''
       })
     },
+    
     typeChange() {
       let tempDate = new Date();
       tempDate.setDate(tempDate.getDate() + (this.form.oepnType ? 365 : 15))
diff --git a/platform_web/src/components/system/menu/OperaMenuH5Window.vue b/platform_web/src/components/system/menu/OperaMenuH5Window.vue
index 2adcdd2..0c2c453 100644
--- a/platform_web/src/components/system/menu/OperaMenuH5Window.vue
+++ b/platform_web/src/components/system/menu/OperaMenuH5Window.vue
@@ -29,7 +29,7 @@
             @uploadBegin="isUploading=true"
           />
           <div style="display: flex; flex-direction: column-reverse;" v-if="!!form.icon">
-            <el-button style="margin-left: 5px; padding: 0 5px;" type="text" @click="form.icon=''">鍒犻櫎</el-button>
+            <el-button style="margin-left: 5px; padding: 0 5px;" type="text" @click="deletePic">鍒犻櫎</el-button>
           </div>
         </div>
       </el-form-item>
@@ -59,7 +59,8 @@
       // 闇�鎺掗櫎閫夋嫨鐨勮彍鍗旾D
       excludeMenuId: null,
       uploadData: {
-        floader: 'company/menu'
+        // floader: 'company/menu'
+        folder: 'company/menu'
       },
       parent: {},
       // 琛ㄥ崟鏁版嵁
@@ -98,7 +99,6 @@
       debugger
       this.title = title
       
-      console.log('-----',parent);
       this.visible = true
       // 鏂板缓锛宮enu涓虹┖鏃惰〃绀烘柊寤鸿彍鍗�
       if (target == null) {
@@ -109,6 +109,7 @@
           this.form.id = null
           this.form.parentId = parent == null ? null : parent.id
           this.parentName = parent == null ? null : parent.name
+          this.form.fullIcon = ''
         })
         return
       }
@@ -124,6 +125,10 @@
     uploadReverseSuccess(file) {
       this.form.icon = file.imgurl;
       this.form.fullIcon = file.imgurlfull;
+    },
+    deletePic() {
+      this.form.fullIcon=''
+      this.form.icon=''
     }
   },
 }
diff --git a/platform_web/src/components/system/permission/OperaPermissionWindow.vue b/platform_web/src/components/system/permission/OperaPermissionWindow.vue
index aec81be..0b29104 100644
--- a/platform_web/src/components/system/permission/OperaPermissionWindow.vue
+++ b/platform_web/src/components/system/permission/OperaPermissionWindow.vue
@@ -26,6 +26,12 @@
   name: 'OperaPermissionWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
+  props: {
+    type: {
+      type: Number|String,
+      default: 0
+    }
+  },
   data () {
     return {
       // 鍘熸潈闄愮爜
@@ -58,6 +64,7 @@
         this.$nextTick(() => {
           this.$refs.form.resetFields()
           this.form[this.configData['field.id']] = null
+          this.form.type = this.type
         })
         return
       }
@@ -67,6 +74,7 @@
         for (const key in this.form) {
           this.form[key] = target[key]
         }
+        this.form.type = this.type
       })
     },
     confirm () {
diff --git a/platform_web/src/views/system/menuH5.vue b/platform_web/src/views/system/menuH5.vue
index cfc1906..b023771 100644
--- a/platform_web/src/views/system/menuH5.vue
+++ b/platform_web/src/views/system/menuH5.vue
@@ -23,7 +23,7 @@
         <el-table-column prop="name" label="鑿滃崟鍚嶇О"  fixed="left" align="center" min-width="160px"></el-table-column>
         <el-table-column prop="icon" label="鍥炬爣" align="center" min-width="80px" class-name="table-column-icon">
           <template slot-scope="{row}">
-            <el-image v-if="row.icon != null && row.icon !== ''" style="width: 40px; height: 40px;" :src="row.icon"></el-image>
+            <el-image v-if="row.icon != null && row.icon !== ''" style="width: 40px; height: 40px;" :src="row.resourcePath + row.icon"></el-image>
             <template v-else>鏈缃�</template>
           </template>
         </el-table-column>
diff --git a/platform_web/src/views/system/permission.vue b/platform_web/src/views/system/permission.vue
index 39071c5..4f68f70 100644
--- a/platform_web/src/views/system/permission.vue
+++ b/platform_web/src/views/system/permission.vue
@@ -60,7 +60,7 @@
       ></pagination>
     </template>
     <!-- 鏂板缓/淇敼 -->
-    <OperaPermissionWindow ref="operaPermissionWindow" @success="handlePageChange"/>
+    <OperaPermissionWindow ref="operaPermissionWindow" :type="0" @success="handlePageChange"/>
   </TableLayout>
 </template>
 
diff --git a/platform_web/src/views/system/permissionCom.vue b/platform_web/src/views/system/permissionCom.vue
new file mode 100644
index 0000000..78201f2
--- /dev/null
+++ b/platform_web/src/views/system/permissionCom.vue
@@ -0,0 +1,99 @@
+<template>
+  <TableLayout :permissions="['system:permission:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="鏉冮檺缂栫爜" prop="code">
+        <el-input v-model="searchForm.code" v-trim placeholder="璇疯緭鍏ユ潈闄愮紪鐮�" @keypress.enter.native="search"/>
+      </el-form-item>
+      <el-form-item label="鏉冮檺鍚嶇О" prop="name">
+        <el-input v-model="searchForm.name" v-trim placeholder="璇疯緭鍏ユ潈闄愬悕绉�" @keypress.enter.native="search"/>
+      </el-form-item>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['system:permission:create', 'system:permission:delete']">
+        <li><el-button type="primary" @click="$refs.operaPermissionWindow.open('鏂板缓绯荤粺鏉冮檺')" icon="el-icon-plus" v-permissions="['system:permission:create']">鏂板缓</el-button></li>
+        <li><el-button @click="deleteByIdInBatch" v-permissions="['system:permission:delete']">鍒犻櫎</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        :default-sort = "{prop: 'createTime', order: 'descending'}"
+        stripe
+        border
+        @selection-change="handleSelectionChange"
+        @sort-change="handleSortChange"
+      >
+        <el-table-column type="selection" fixed="left" align="center" width="55"></el-table-column>
+        <el-table-column prop="code" label="鏉冮檺缂栫爜" fixed="left" align="center" min-width="200px"></el-table-column>
+        <el-table-column prop="name" label="鏉冮檺鍚嶇О" fixed="left" align="center" min-width="120px"></el-table-column>
+        <el-table-column prop="remark" label="鏉冮檺澶囨敞" align="center" min-width="120px"></el-table-column>
+        <el-table-column prop="createUser" label="鍒涘缓浜�" align="center" min-width="100px">
+          <template slot-scope="{row}">{{row.createUserInfo == null ? '' : row.createUserInfo.username}}</template>
+        </el-table-column>
+        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" align="center" min-width="140px" sortable="custom" sort-by="perm.CREATE_TIME"></el-table-column>
+        <el-table-column prop="updateUser" label="鏇存柊浜�" align="center" min-width="100px">
+          <template slot-scope="{row}">{{row.updateUserInfo == null ? '' : row.updateUserInfo.username}}</template>
+        </el-table-column>
+        <el-table-column prop="updateTime" label="鏇存柊鏃堕棿" align="center" min-width="140px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['system:permission:update', 'system:permission:delete'])"
+          label="鎿嶄綔"
+          align="center"
+          min-width="130"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button v-if="!row.fixed" type="text" @click="$refs.operaPermissionWindow.open('缂栬緫绯荤粺鏉冮檺', row)"  v-permissions="['system:permission:update']">缂栬緫</el-button>
+            <el-button v-if="!row.fixed" type="text" @click="deleteById(row)" style="color: red" v-permissions="['system:permission:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      ></pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaPermissionWindow ref="operaPermissionWindow" :type="1" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import Pagination from '@/components/common/Pagination'
+import TableLayout from '@/layouts/TableLayout'
+import BaseTable from '@/components/base/BaseTable'
+import OperaPermissionWindow from '@/components/system/permission/OperaPermissionWindow'
+export default {
+  name: 'SystemPermission',
+  extends: BaseTable,
+  components: { OperaPermissionWindow, TableLayout, Pagination },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        code: '',
+        name: '',
+        remark: '',
+        type: 1
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '鏉冮檺',
+      api: '/system/permission',
+      sorts: [{
+        property: 'perm.CREATE_TIME',
+        direction: 'DESC'
+      }]
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/server/src/main/java/doumeemes/api/business/SalaryParamController.java b/server/src/main/java/doumeemes/api/business/SalaryParamController.java
index d405ec3..6c7e751 100644
--- a/server/src/main/java/doumeemes/api/business/SalaryParamController.java
+++ b/server/src/main/java/doumeemes/api/business/SalaryParamController.java
@@ -11,13 +11,21 @@
 import doumeemes.dao.ext.dto.SalaryParamDTO;
 import doumeemes.service.business.SalaryParamService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -89,4 +97,24 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(salaryParamService.findById(id));
     }
+
+    @ApiOperation(value = "鎵归噺瀵煎叆璁″垝", notes = "鎵归噺瀵煎叆璁″垝", httpMethod = "POST", position = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
+    })
+    @PostMapping(value = "/importBatch", headers = "content-type=multipart/form-data")
+//    @RequiresPermissions("business:salaryparam:create")
+    public ApiResponse importBatch(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver();
+        if (multipartResovler.isMultipart(request)) {
+            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+            Iterator<String> it = multipartRequest.getFileNames();
+            while (it.hasNext()) {
+                MultipartFile file = multipartRequest.getFile((String) it.next());
+                salaryParamService.importPlans(file);
+                break;
+            }
+        }
+        return ApiResponse.success( null);
+    }
 }
diff --git a/server/src/main/java/doumeemes/api/business/UnqualifiedRecordController.java b/server/src/main/java/doumeemes/api/business/UnqualifiedRecordController.java
new file mode 100644
index 0000000..5fd198e
--- /dev/null
+++ b/server/src/main/java/doumeemes/api/business/UnqualifiedRecordController.java
@@ -0,0 +1,71 @@
+package doumeemes.api.business;
+
+import doumeemes.api.BaseController;
+import doumeemes.core.annotation.excel.ExcelExporter;
+import doumeemes.core.annotation.pr.PreventRepeat;
+import doumeemes.core.model.ApiResponse;
+import doumeemes.core.model.PageWrap;
+import doumeemes.core.model.PageData;
+import doumeemes.dao.business.model.UnqualifiedRecord;
+import doumeemes.service.business.UnqualifiedRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2023/08/16 14:15
+ */
+@Api(tags = "宸ュ崟绫�-鎶ュ伐涓嶈壇璁板綍绫诲瀷琛�")
+@RestController
+@RequestMapping("/business/unqualifiedRecord")
+public class UnqualifiedRecordController extends BaseController {
+
+    @Autowired
+    private UnqualifiedRecordService unqualifiedRecordService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:unqualifiedrecord:create")
+    public ApiResponse create(@RequestBody UnqualifiedRecord unqualifiedRecord) {
+        return ApiResponse.success(unqualifiedRecordService.create(unqualifiedRecord));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:unqualifiedrecord:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        unqualifiedRecordService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:unqualifiedrecord:update")
+    public ApiResponse updateById(@RequestBody UnqualifiedRecord unqualifiedRecord) {
+        unqualifiedRecordService.updateById(unqualifiedRecord);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:unqualifiedrecord:query")
+    public ApiResponse<PageData<UnqualifiedRecord>> findPage (@RequestBody PageWrap<UnqualifiedRecord> pageWrap) {
+        return ApiResponse.success(unqualifiedRecordService.findPage(pageWrap));
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:unqualifiedrecord:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(unqualifiedRecordService.findById(id));
+    }
+}
diff --git a/server/src/main/java/doumeemes/api/ext/CategoryExtController.java b/server/src/main/java/doumeemes/api/ext/CategoryExtController.java
index 48cbff8..ebb69c3 100644
--- a/server/src/main/java/doumeemes/api/ext/CategoryExtController.java
+++ b/server/src/main/java/doumeemes/api/ext/CategoryExtController.java
@@ -154,6 +154,15 @@
         return ApiResponse.success(categoryExtService.findPage(pageWrap));
     }
 
+    @ApiOperation("鍒楄〃鏌ヨ")
+    @PostMapping("/list")
+    @RequiresPermissions("ext:categoryext:query")
+    public ApiResponse<List<CategoryExtListVO>> list(@RequestBody QueryCategoryExtDTO queryCategoryExtDTO) {
+        queryCategoryExtDTO.setDeleted(Constants.ZERO);
+        queryCategoryExtDTO.setRootDepartId(getLoginUser().getRootDepartment().getId());
+        return ApiResponse.success(categoryExtService.findList(queryCategoryExtDTO));
+    }
+
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @RequiresPermissions("ext:categoryext:exportExcel")
diff --git a/server/src/main/java/doumeemes/api/ext/PlansExtController.java b/server/src/main/java/doumeemes/api/ext/PlansExtController.java
index d4b6aa7..27cc2d0 100644
--- a/server/src/main/java/doumeemes/api/ext/PlansExtController.java
+++ b/server/src/main/java/doumeemes/api/ext/PlansExtController.java
@@ -3,6 +3,7 @@
 import doumeemes.config.rocketmq.MqConfig;
 import doumeemes.config.rocketmq.RocketMessageProducer;
 import doumeemes.core.utils.DateUtil;
+import doumeemes.dao.business.dto.AutoWorkReportDTO;
 import doumeemes.dao.business.model.Workorder;
 import doumeemes.dao.ext.vo.PlansExtListCountVO;
 import doumeemes.dao.ext.vo.PlansExtListH5VO;
@@ -187,6 +188,7 @@
         plansExtService.backByIdInBatch(idList);
         return ApiResponse.success(null);
     }
+
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @RequiresPermissions("ext:plansext:query")
@@ -221,6 +223,13 @@
         return ApiResponse.success(plansExtService.pageCount(param));
     }
 
+    @ApiOperation("涓�閿姤宸�")
+    @PostMapping("/autoWorkReport")
+    public ApiResponse autoWorkReport (@RequestBody AutoWorkReportDTO autoWorkReportDTO) {
+        plansExtService.autoWorkReport(getLoginUser(),autoWorkReportDTO);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
     /**
      * 鎵归噺瀵煎叆璁″垝
      *
diff --git a/server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java b/server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java
index 3bbb7ee..4eec3eb 100644
--- a/server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java
+++ b/server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java
@@ -76,6 +76,14 @@
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鏍规嵁瀵硅薄淇℃伅鏌ヨ")
+    @PostMapping("/queryOne")
+    @RequiresPermissions("business:salaryparam:query")
+    public ApiResponse<SalaryParam> queryOne(@RequestBody SalaryParam salaryParam) {
+        SalaryParam data = salaryParamService.findOne(salaryParam);
+        return ApiResponse.success(data);
+    }
+
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @RequiresPermissions("business:salaryparam:query")
diff --git a/server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java b/server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java
index 1c7d59d..2bd7950 100644
--- a/server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java
+++ b/server/src/main/java/doumeemes/api/ext/WorkorderRecordExtController.java
@@ -224,6 +224,10 @@
         return ApiResponse.success(workorderRecordStandardService.choiceStockPageForWorkorder(pageWrap,getLoginUser()));
     }
 
-
+    @ApiOperation("鏍规嵁渚涢渶璁″垝鏌ヨ鍙敤搴撳瓨")
+    @PostMapping("/getStockByPlansForStandard")
+    public ApiResponse<PageData<WStockExtListVO>> getStockByPlansForStandard (@RequestBody PageWrap<QueryWStockDto> pageWrap) {
+        return ApiResponse.success(workorderRecordStandardService.choiceStockPageForPlans(pageWrap,getLoginUser()));
+    }
 
 }
diff --git a/server/src/main/java/doumeemes/biz/system/impl/SystemMenuBizImpl.java b/server/src/main/java/doumeemes/biz/system/impl/SystemMenuBizImpl.java
index 32f8fa9..2363d56 100644
--- a/server/src/main/java/doumeemes/biz/system/impl/SystemMenuBizImpl.java
+++ b/server/src/main/java/doumeemes/biz/system/impl/SystemMenuBizImpl.java
@@ -113,7 +113,7 @@
         String rPath =systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+systemDictDataBiz.queryByCode(Constants.OSS,Constants.MENU_IMG).getCode();
         for (SystemMenu menu : menus) {
             if(Constants.equalsInteger(menu.getType(),Constants.PlatType.companyH5) && StringUtils.isNotBlank(menu.getIcon())){
-                menu.setIcon(rPath+menu.getIcon());
+                menu.setIcon(menu.getIcon());
                 menu.setResourcePath(rPath);
             }
             if (menu.getParentId() == null) {
@@ -126,7 +126,7 @@
         menus.removeIf(menu -> menu.getParentId() == null);
         for (SystemMenuListVO child : rootMenus) {
             if(Constants.equalsInteger(child.getType(),Constants.PlatType.companyH5) && StringUtils.isNotBlank(child.getIcon())){
-                child.setIcon(rPath+child.getIcon());
+                child.setIcon(child.getIcon());
                 child.setResourcePath(rPath);
             }
             this.fillChildren(child, menus);
diff --git a/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java b/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
index 9b3e2f5..e130db9 100644
--- a/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
+++ b/server/src/main/java/doumeemes/config/shiro/ShiroRealm.java
@@ -37,6 +37,7 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 鑷畾涔塕ealm锛屽鐞嗚璇佸拰鏉冮檺
@@ -130,8 +131,10 @@
             if(com == null){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヨ处鎴峰紓甯革紒");
             }
-
-            if(com.getOepnValidDate().before(new Date())){
+            if(Constants.equalsInteger( com.getStatus(),Constants.ZERO) ){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氬凡杩囩鐢紒");
+            }
+            if(com.getOepnValidDate() != null && com.getOepnValidDate().before(new Date())){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ヤ紒涓氬凡杩囦娇鐢ㄦ湁鏁堟湡锛�");
             }
             //濡傛灉鏄紒涓氱敤鎴�
diff --git a/server/src/main/java/doumeemes/core/utils/excel/EasyExcelUtil.java b/server/src/main/java/doumeemes/core/utils/excel/EasyExcelUtil.java
index 952b0cf..ffde846 100644
--- a/server/src/main/java/doumeemes/core/utils/excel/EasyExcelUtil.java
+++ b/server/src/main/java/doumeemes/core/utils/excel/EasyExcelUtil.java
@@ -87,6 +87,9 @@
     }
 
     /**
+     *
+     * titleRows : 鏍囬鍗犲嚑琛�
+     * headerRows : 鍚屽崰鍑犺
      * excel甯歌瀵煎叆(榛樿鍙鍙栫涓�寮爏heet宸ヤ綔绨�)
      */
     public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){
@@ -150,4 +153,4 @@
         }
         return list;
     }
-}
\ No newline at end of file
+}
diff --git a/server/src/main/java/doumeemes/dao/business/UnqualifiedRecordMapper.java b/server/src/main/java/doumeemes/dao/business/UnqualifiedRecordMapper.java
new file mode 100644
index 0000000..828d535
--- /dev/null
+++ b/server/src/main/java/doumeemes/dao/business/UnqualifiedRecordMapper.java
@@ -0,0 +1,12 @@
+package doumeemes.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import doumeemes.dao.business.model.UnqualifiedRecord;
+
+/**
+ * @author 姹熻箘韫�
+ * @since 2023/08/16 14:15
+ */
+public interface UnqualifiedRecordMapper extends BaseMapper<UnqualifiedRecord> {
+
+}
diff --git a/server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java b/server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java
index 1277da9..4026b98 100644
--- a/server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java
+++ b/server/src/main/java/doumeemes/dao/business/dto/AutoWorkReportDTO.java
@@ -1,5 +1,7 @@
 package doumeemes.dao.business.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import doumeemes.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -18,10 +20,20 @@
     @ApiModelProperty(value = "宸ュ簭璁″垝涓婚敭")
     private Integer plansId;
 
+    @ApiModelProperty(value = "璁惧涓婚敭", example = "1")
+    private Integer proGroupId;
+
+    @ApiModelProperty(value = "鐢熶骇浜哄憳缂栫爜闆嗗悎" )
+    @TableField(exist = false)
+    private List<Integer> proUserList;
+
     @ApiModelProperty(value = "鎶曟枡璁板綍")
     private List<MaterialListDTO> recordList ;
 
     @ApiModelProperty(value = "浜у嚭璁板綍")
     private CreateWorkorderRecordDTO createWorkorderRecordDTO;
 
+    @ApiModelProperty(value = "涓嶈壇鍝佸垎绫昏褰�")
+    private List<CreateUnqualifiedDTO> createUnqualifiedDTOList ;
+
 }
diff --git a/server/src/main/java/doumeemes/dao/business/dto/CreateUnqualifiedDTO.java b/server/src/main/java/doumeemes/dao/business/dto/CreateUnqualifiedDTO.java
new file mode 100644
index 0000000..079b616
--- /dev/null
+++ b/server/src/main/java/doumeemes/dao/business/dto/CreateUnqualifiedDTO.java
@@ -0,0 +1,23 @@
+package doumeemes.dao.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2022/05/12 10:18
+ */
+@Data
+public class CreateUnqualifiedDTO {
+
+    @ApiModelProperty(value = "涓嶈壇绫诲埆涓婚敭"  )
+    private Integer categoryId;
+
+    @ApiModelProperty(value = "妫�楠屼笉鍚堟牸鏁伴噺")
+    private BigDecimal unQualifiedNum;
+
+
+
+}
diff --git a/server/src/main/java/doumeemes/dao/business/model/Plans.java b/server/src/main/java/doumeemes/dao/business/model/Plans.java
index a3ddc57..05b1fc1 100644
--- a/server/src/main/java/doumeemes/dao/business/model/Plans.java
+++ b/server/src/main/java/doumeemes/dao/business/model/Plans.java
@@ -3,6 +3,7 @@
 import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.baomidou.mybatisplus.annotation.TableField;
 import doumeemes.core.annotation.excel.ExcelColumn;
+import doumeemes.dao.ext.vo.BomExtListVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -160,4 +161,7 @@
     @ApiModelProperty(value = "鎴愬搧璁″垝涓婚敭锛堝叧鑱攚ork_plans琛級", example = "1")
     private Integer workPlansId;
 
+    @ApiModelProperty(value = "鍏宠仈BOM瀵硅薄",hidden = true)
+    @TableField(exist = false)
+    private BomExtListVO bomModel;
 }
diff --git a/server/src/main/java/doumeemes/dao/business/model/SalaryParam.java b/server/src/main/java/doumeemes/dao/business/model/SalaryParam.java
index 19f8762..9b815db 100644
--- a/server/src/main/java/doumeemes/dao/business/model/SalaryParam.java
+++ b/server/src/main/java/doumeemes/dao/business/model/SalaryParam.java
@@ -83,7 +83,7 @@
 
     @ApiModelProperty(value = "鏍囧噯鏃堕暱锛堢锛�")
     @ExcelColumn(name="鏍囧噯鏃堕暱锛堢锛�")
-    private String times;
+    private Integer times;
 
     @ApiModelProperty(value = "涓嶈壇鍝佹槸鍚﹁鍏� 0鍚� 1鏄�")
     @ExcelColumn(name="涓嶈壇鍝佹槸鍚﹁鍏� 0鍚� 1鏄�")
diff --git a/server/src/main/java/doumeemes/dao/business/model/UnqualifiedRecord.java b/server/src/main/java/doumeemes/dao/business/model/UnqualifiedRecord.java
new file mode 100644
index 0000000..485712f
--- /dev/null
+++ b/server/src/main/java/doumeemes/dao/business/model/UnqualifiedRecord.java
@@ -0,0 +1,79 @@
+package doumeemes.dao.business.model;
+
+import doumeemes.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 宸ュ崟绫�-鎶ュ伐涓嶈壇璁板綍绫诲瀷琛�
+ * @author 姹熻箘韫�
+ * @since 2023/08/16 14:15
+ */
+@Data
+@ApiModel("宸ュ崟绫�-鎶ュ伐涓嶈壇璁板綍绫诲瀷琛�")
+@TableName("`unqualified_record`")
+public class UnqualifiedRecord {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
+    @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
+    private Integer deleted;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createTime;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "涓荤粍缁囩紪鐮侊紙鍏宠仈department琛ㄦ牴缁勭粐锛�", example = "1")
+    @ExcelColumn(name="涓荤粍缁囩紪鐮侊紙鍏宠仈department琛ㄦ牴缁勭粐锛�")
+    private Integer rootDepartId;
+
+    @ApiModelProperty(value = "鍏徃绾х粍缁囩紪鐮侊紙鍏宠仈department琛級", example = "1")
+    @ExcelColumn(name="鍏徃绾х粍缁囩紪鐮侊紙鍏宠仈department琛級")
+    private Integer departId;
+
+    @ApiModelProperty(value = "宸ュ崟涓婚敭", example = "1")
+    @ExcelColumn(name="宸ュ崟涓婚敭")
+    private Integer workorderId;
+
+    @ApiModelProperty(value = "浜у嚭璁板綍涓婚敭", example = "1")
+    @ExcelColumn(name="浜у嚭璁板綍涓婚敭")
+    private Integer recordId;
+
+    @ApiModelProperty(value = "绫诲埆涓婚敭", example = "1")
+    @ExcelColumn(name="绫诲埆涓婚敭")
+    private Integer categoryId;
+
+    @ApiModelProperty(value = "妫�楠屼笉鍚堟牸鏁伴噺", example = "1")
+    @ExcelColumn(name="妫�楠屼笉鍚堟牸鏁伴噺")
+    private BigDecimal unqualifiedNum;
+
+}
diff --git a/server/src/main/java/doumeemes/dao/business/model/Workorder.java b/server/src/main/java/doumeemes/dao/business/model/Workorder.java
index a9f914a..47a525a 100644
--- a/server/src/main/java/doumeemes/dao/business/model/Workorder.java
+++ b/server/src/main/java/doumeemes/dao/business/model/Workorder.java
@@ -225,30 +225,4 @@
     @TableField(exist = false)
     private List<WorkorderUser>  workorderUserList;
 
-
-    @ApiModelProperty(value = "鎶ュ伐鏃堕暱锛堢锛�", example = "1")
-    @ExcelColumn(name="鎶ュ伐鏃堕暱锛堢锛�")
-    private Integer duration;
-
-    @ApiModelProperty(value = "宸ヨ祫缁撴灉锛堝厓)", example = "1")
-    @ExcelColumn(name="宸ヨ祫缁撴灉锛堝厓)")
-    private Integer salary;
-    @ApiModelProperty(value = "宸ヨ祫鍗曚环锛堝厓)", example = "1")
-    @ExcelColumn(name="宸ヨ祫鍗曚环锛堝厓)")
-    private Integer salaryPrice;
-    @ApiModelProperty(value = "鏍囧噯鏁伴噺", example = "1")
-    @ExcelColumn(name="鏍囧噯鏁伴噺")
-    private Integer salaryNum;
-
-    @ApiModelProperty(value = "鏍囧噯鏃堕暱锛堢锛�")
-    @ExcelColumn(name="鏍囧噯鏃堕暱锛堢锛�")
-    private String salaryTimes;
-
-    @ApiModelProperty(value = "涓嶈壇鍝佹槸鍚﹁鍏� 0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="涓嶈壇鍝佹槸鍚﹁鍏� 0鍚� 1鏄�")
-    private Integer salaryUnqualified;
-
-    @ApiModelProperty(value = "璁′环鏂瑰紡 0璁′欢 1璁℃椂", example = "1")
-    @ExcelColumn(name="璁′环鏂瑰紡 0璁′欢 1璁℃椂")
-    private Integer salaryType;
 }
diff --git a/server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java b/server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java
index e3d3525..3f79317 100644
--- a/server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java
+++ b/server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java
@@ -14,14 +14,15 @@
 public class SalaryParamVO {
 
     @ApiModelProperty(value = "涓婚敭")
+    @ExcelColumn(name="搴忓彿",index = 1)
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�",index = 11)
     private String createUserName;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿",index = 10, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
     @ApiModelProperty(value = "涓荤粍缁囩紪鐮侊紙鍏宠仈department琛ㄦ牴缁勭粐锛�")
@@ -39,42 +40,42 @@
     private Integer procedureId;
 
     @ApiModelProperty(value = "宸ュ簭缂栫爜锛堝叧鑱攑rocedure琛級")
-    @ExcelColumn(name="宸ュ簭缂栫爜锛堝叧鑱攑rocedure琛級")
+//    @ExcelColumn(name="宸ュ簭缂栫爜锛堝叧鑱攑rocedure琛級")
     @NotEmpty(message = "宸ュ簭缂栫爜涓嶈兘涓虹┖")
     private Integer procedureCode;
 
     @ApiModelProperty(value = "宸ュ簭缂栫爜锛堝叧鑱攑rocedure琛級")
-    @ExcelColumn(name="宸ュ簭缂栫爜锛堝叧鑱攑rocedure琛級")
+    @ExcelColumn(name="宸ュ簭鍚嶇О",index =5)
     private String procedureName;
 
     @ApiModelProperty(value = "浜у搧鍚嶇О" )
-    @Excel(name="浜у搧鍚嶇О",orderNum ="3")
+    @ExcelColumn(name="鐗╂枡鍚嶇О",index =3)
     private String materialName;
 
     @ApiModelProperty(value = "浜у搧缂栫爜" )
-    @Excel(name="浜у搧缂栫爜",orderNum ="4")
+    @ExcelColumn(name="鐗╂枡缂栫爜",index =4)
     private String materialCode;
 
     @ApiModelProperty(value = "鐗╂枡缂栫爜锛堝叧鑱攎aterial_distribute琛級", example = "1")
     private Integer materialId;
 
     @ApiModelProperty(value = "宸ヨ祫鍗曚环锛堝厓)")
-    @ExcelColumn(name="宸ヨ祫鍗曚环锛堝厓)")
+    @ExcelColumn(name="宸ヨ祫鍗曚环锛堝厓)",index =6)
     private BigDecimal salary;
 
     @ApiModelProperty(value = "鏍囧噯鏁伴噺")
-    @ExcelColumn(name="鏍囧噯鏁伴噺")
+    @ExcelColumn(name="鏍囧噯浜у嚭",index =7)
     private Integer num;
 
     @ApiModelProperty(value = "鏍囧噯鏃堕暱锛堢锛�")
-    @ExcelColumn(name="鏍囧噯鏃堕暱锛堢锛�")
+    @ExcelColumn(name="鏍囧噯鏃堕暱锛堢锛�",index =8)
     private String times;
 
     @ApiModelProperty(value = "涓嶈壇鍝佹槸鍚﹁鍏� 0鍚� 1鏄�")
-    @ExcelColumn(name="涓嶈壇鍝佹槸鍚﹁鍏� 0鍚� 1鏄�")
+    @ExcelColumn(name="涓嶈壇鍝佹槸鍚﹁鍏� 0鍚� 1鏄�",index = 9 ,valueMapping = "0=鍚�;1=鏄�")
     private Integer unqualified;
 
     @ApiModelProperty(value = "璁′环鏂瑰紡 0璁′欢 1璁℃椂")
-    @ExcelColumn(name="璁′环鏂瑰紡 0璁′欢 1璁℃椂")
+    @ExcelColumn(name="璁′环鏂瑰紡",index = 2 ,valueMapping = "0=璁′欢;1=璁℃椂")
     private Integer type;
 }
diff --git a/server/src/main/java/doumeemes/dao/business/vo/WorkPlansVO.java b/server/src/main/java/doumeemes/dao/business/vo/WorkPlansVO.java
index 3b72cd2..b9107ac 100644
--- a/server/src/main/java/doumeemes/dao/business/vo/WorkPlansVO.java
+++ b/server/src/main/java/doumeemes/dao/business/vo/WorkPlansVO.java
@@ -57,7 +57,7 @@
     private Integer factoryId;
 
     @ApiModelProperty(value = "宸ュ巶鍚嶇О", example = "1")
-    @ExcelColumn(name="宸ュ巶鍚嶇О",index = 4,width =15)
+    @ExcelColumn(name="宸ュ巶鍚嶇О",index = 5,width =15)
     private String factoryName;
 
     @ApiModelProperty(value = "鏉ユ簮 0浜哄伐鍒涘缓銆�1Excel瀵煎叆", example = "1")
@@ -67,12 +67,12 @@
     @ExcelColumn(name="璁″垝缂栫爜",index = 0,width =15)
     private String planCode;
 
-    @ApiModelProperty(value = "璁″垝鏃ユ湡")
-    @ExcelColumn(name="璁″垝鏃ユ湡",index = 3,width =15)
+    @ApiModelProperty(value = "璁″垝瀹屾垚鏃ユ湡")
+    @ExcelColumn(name="璁″垝鏃ユ湡",index = 4,width =15)
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDate;
     @ApiModelProperty(value = "璁″垝寮�濮嬫棩鏈�")
-    @ExcelColumn(name="璁″垝寮�濮嬫棩鏈�",index = 17,width =15)
+    @ExcelColumn(name="璁″垝寮�濮嬫棩鏈�",index = 3,width =15)
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date startDate;
     @ApiModelProperty(value = "閿�鍞崟鍙�" )
@@ -94,26 +94,26 @@
     private Integer unitId;
 
     @ApiModelProperty(value = "鍗曚綅缂栫爜鍚嶇О", example = "1")
-    @ExcelColumn(name="鍗曚綅鍚嶇О",index = 6,width =15)
+    @ExcelColumn(name="鍗曚綅鍚嶇О",index = 7,width =15)
     private String unitName;
 
     @ApiModelProperty(value = "璁″垝鏁伴噺", example = "1")
-    @ExcelColumn(name="璁″垝鏁伴噺",index = 5,width =15)
+    @ExcelColumn(name="璁″垝鏁伴噺",index = 6,width =15)
     private Integer num;
 
     @ApiModelProperty(value = "鎵规鍙�")
-    @ExcelColumn(name="鎵规鍙�",index = 7,width =15)
+    @ExcelColumn(name="鎵规鍙�",index = 8,width =15)
     private String batch;
 
     @ApiModelProperty(value = "鐘舵�� 1=宸茬敓鎴�;2=宸插彂甯冦��3宸插彇娑堛��4宸插垎閰嶃��5宸叉殏鍋溿��6宸插畬宸ャ��7宸插叆搴撱��8宸插叧闂�", example = "1")
-    @ExcelColumn(name="璁″垝鐘舵��",valueMapping = "0=宸茬敓鎴�;1=鎵ц涓�;3=宸插彇娑�;4=宸插垎閰�;5=宸叉殏鍋�;6=宸插畬宸�;7=宸插叆搴�;8=宸插叧闂�;",index = 8,width =15)
+    @ExcelColumn(name="璁″垝鐘舵��",valueMapping = "0=宸茬敓鎴�;1=鎵ц涓�;3=宸插彇娑�;4=宸插垎閰�;5=宸叉殏鍋�;6=宸插畬宸�;7=宸插叆搴�;8=宸插叧闂�;",index = 9,width =15)
     private Integer status;
 
     @ApiModelProperty(value = "瀵煎叆鎵瑰彿锛堝叧鑱攑lan_import琛�)", example = "1")
     private Integer importId;
 
     @ApiModelProperty(value = "鏄惁鏆傚仠 0鏈殏鍋� 1宸叉殏鍋�", example = "1")
-    @ExcelColumn(name="鏄惁鏆傚仠",valueMapping = "0=鍚�;1=鏄�",index = 9,width =15)
+    @ExcelColumn(name="鏄惁鏆傚仠",valueMapping = "0=鍚�;1=鏄�",index = 10,width =15)
     private Integer paused;
 
     @ApiModelProperty(value = "璁″垝鍛樼紪鐮侊紙涓巗ystem_user琛ㄥ叧鑱旓級", example = "1")
@@ -123,31 +123,31 @@
     private Integer urgent;
 
     @ApiModelProperty(value = "璁″垝鍛樺鍚�", example = "1")
-    @ExcelColumn(name="璁″垝鍛樺鍚�",index = 14,width =15)
+    @ExcelColumn(name="璁″垝鍛樺鍚�",index = 15,width =15)
     private String userName;
 
     @ApiModelProperty(value = "璁″垝鍛樻墜鏈哄彿", example = "1")
-    @ExcelColumn(name="璁″垝鍛樻墜鏈哄彿",index = 15,width =15)
+    @ExcelColumn(name="璁″垝鍛樻墜鏈哄彿",index = 16,width =15)
     private String userMobile;
 
     @ApiModelProperty(value = "璁″垝鍙戝竷鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    @ExcelColumn(name="璁″垝鍙戝竷鏃堕棿",index = 13,width =15)
+    @ExcelColumn(name="璁″垝鍙戝竷鏃堕棿",index = 14,width =15)
     private Date publishDate;
 
     @ApiModelProperty(value = "鐢ㄦ埛閮ㄩ棬鍚嶇О", example = "1")
     private String userDepartName;
 
     @ApiModelProperty(value = "瀹屽伐鏁伴噺", example = "1")
-    @ExcelColumn(name="瀹屽伐鏁伴噺" ,index = 10,width =15)
+    @ExcelColumn(name="瀹屽伐鏁伴噺" ,index = 11,width =15)
     private Integer finishNum;
 
     @ApiModelProperty(value = "瀹屽伐鍚堟牸鏁伴噺", example = "1")
-    @ExcelColumn(name="瀹屽伐鍚堟牸鏁伴噺",index = 11,width =15)
+    @ExcelColumn(name="瀹屽伐鍚堟牸鏁伴噺",index = 12,width =15)
     private Integer finishQualifiedNum;
 
     @ApiModelProperty(value = "瀹屽伐涓嶈壇鏁伴噺", example = "1")
-    @ExcelColumn(name="瀹屽伐涓嶈壇鏁伴噺",index = 12,width =15)
+    @ExcelColumn(name="瀹屽伐涓嶈壇鏁伴噺",index = 13,width =15)
     private Integer finishUnQualifiedNum;
 
     @ApiModelProperty(value = "瀛愯鍒掓槑缁嗕俊鎭�", example = "1")
diff --git a/server/src/main/java/doumeemes/dao/ext/beanDto/QueryWStockDto.java b/server/src/main/java/doumeemes/dao/ext/beanDto/QueryWStockDto.java
index 4dbcd75..d1b5074 100644
--- a/server/src/main/java/doumeemes/dao/ext/beanDto/QueryWStockDto.java
+++ b/server/src/main/java/doumeemes/dao/ext/beanDto/QueryWStockDto.java
@@ -80,5 +80,7 @@
     @ApiModelProperty(value = "宸ュ崟涓婚敭")
     private Integer workorderId;
 
+    @ApiModelProperty(value = "宸ュ簭璁″垝涓婚敭")
+    private Integer plansId;
 
 }
diff --git a/server/src/main/java/doumeemes/dao/ext/dto/QueryBomDetailExtDTO.java b/server/src/main/java/doumeemes/dao/ext/dto/QueryBomDetailExtDTO.java
index d5e345e..c02597a 100644
--- a/server/src/main/java/doumeemes/dao/ext/dto/QueryBomDetailExtDTO.java
+++ b/server/src/main/java/doumeemes/dao/ext/dto/QueryBomDetailExtDTO.java
@@ -256,6 +256,8 @@
     @ApiModelProperty(value = "宸ュ崟缂栫爜", example = "1",hidden = true)
     private Integer workorderId;
 
+    @ApiModelProperty(value = "宸ュ簭璁″垝涓婚敭", example = "1",hidden = true)
+    private Integer plansId;
     @ApiModelProperty(value = "鐗╂枡娓呭崟淇℃伅琛ㄦ渶鍚庡惎鐢ㄦ椂闂�")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date bmodelValidTime;
diff --git a/server/src/main/java/doumeemes/dao/ext/dto/QueryBomExtDTO.java b/server/src/main/java/doumeemes/dao/ext/dto/QueryBomExtDTO.java
index 3800a9a..b3a00a3 100644
--- a/server/src/main/java/doumeemes/dao/ext/dto/QueryBomExtDTO.java
+++ b/server/src/main/java/doumeemes/dao/ext/dto/QueryBomExtDTO.java
@@ -1,5 +1,7 @@
 package doumeemes.dao.ext.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import doumeemes.dao.ext.vo.BomExtListVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -286,4 +288,5 @@
     @ApiModelProperty(value = "鐗╂枡娓呭崟淇℃伅琛ㄤ富閿�", example = "1")
     private Integer bmodelId;
 
+
 }
diff --git a/server/src/main/java/doumeemes/dao/ext/dto/QueryPlansExtDTO.java b/server/src/main/java/doumeemes/dao/ext/dto/QueryPlansExtDTO.java
index 65687e6..7a2e907 100644
--- a/server/src/main/java/doumeemes/dao/ext/dto/QueryPlansExtDTO.java
+++ b/server/src/main/java/doumeemes/dao/ext/dto/QueryPlansExtDTO.java
@@ -441,8 +441,8 @@
     private String mixParam;
     @ApiModelProperty(value = "寮�濮嬫椂闂�")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date startDate;
+    private String planDateStartDate;
     @ApiModelProperty(value = "鎴鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date endDate;
+    private String planDateEndDate;
 }
diff --git a/server/src/main/java/doumeemes/dao/ext/dto/QueryUserSalaryListDTO.java b/server/src/main/java/doumeemes/dao/ext/dto/QueryUserSalaryListDTO.java
index 049cf7d..7551472 100644
--- a/server/src/main/java/doumeemes/dao/ext/dto/QueryUserSalaryListDTO.java
+++ b/server/src/main/java/doumeemes/dao/ext/dto/QueryUserSalaryListDTO.java
@@ -28,10 +28,10 @@
     private Integer rootDepartId;
     @ApiModelProperty(value = "寮�濮嬫椂闂�")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date startDate;
+    private String startDate;
     @ApiModelProperty(value = "缁撴潫鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date endDate;
+    private String endDate;
     @ApiModelProperty(value = "鏁版嵁鏉冮檺閮ㄩ棬缂栫爜闆嗗悎" ,hidden = true)
     private List<Integer> departIds;
 
diff --git a/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java b/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java
index 59044f2..851d29e 100644
--- a/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java
+++ b/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java
@@ -1,6 +1,7 @@
 package doumeemes.dao.ext.dto;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 
@@ -12,6 +13,7 @@
  */
 @Data
 @ApiModel("缁╂晥宸ヨ祫閰嶇疆瀵煎叆")
+@ExcelTarget("SalaryParamImportDTO")
 public class SalaryParamImportDTO {
 
     @Excel(name="璁′环鏂瑰紡",orderNum ="1")
@@ -20,10 +22,10 @@
     @Excel(name="宸ュ巶鍚嶇О",orderNum ="2")
     private String departName;
 
-    @Excel(name="浜у搧鍚嶇О",orderNum ="3")
+    @Excel(name="鐗╂枡鍚嶇О",orderNum ="3")
     private String materialName;
 
-    @Excel(name="浜у搧缂栫爜",orderNum ="4")
+    @Excel(name="鐗╂枡缂栫爜",orderNum ="4")
     private String materialCode;
 
     @Excel(name="宸ュ簭鍚嶇О",orderNum ="5")
@@ -33,7 +35,7 @@
     private BigDecimal salary;
 
     @Excel(name="鏍囧噯浜у嚭",orderNum ="7")
-    private Integer NUM;
+    private String num;
 
     @Excel(name="鏍囧噯宸ユ椂",orderNum ="8")
     private String timesName;
diff --git a/server/src/main/java/doumeemes/dao/ext/vo/BomExtListVO.java b/server/src/main/java/doumeemes/dao/ext/vo/BomExtListVO.java
index 830af01..174a563 100644
--- a/server/src/main/java/doumeemes/dao/ext/vo/BomExtListVO.java
+++ b/server/src/main/java/doumeemes/dao/ext/vo/BomExtListVO.java
@@ -60,8 +60,8 @@
     @ExcelColumn(name="鍏徃绾х粍缁囩紪鐮侊紙鍏宠仈department琛級")
     private Integer departId;
 
-    @ApiModelProperty(value = "鐗╂枡ID锛堝叧鑱攎aterial琛級", example = "1")
-    @ExcelColumn(name="鐗╂枡ID锛堝叧鑱攎aterial琛級")
+    @ApiModelProperty(value = "鐗╂枡ID锛堣瀛楁鍏宠仈 material_distribute 琛↖D 锛侊紒锛侊紒 锛�", example = "1")
+    @ExcelColumn(name="鐗╂枡ID锛堝叧鑱攎aterial_distribute琛級")
     private Integer materialId;
 
     @ApiModelProperty(value = "鐗堟湰鍙�")
@@ -157,5 +157,6 @@
     @ApiModelProperty(value = "宸ュ簭鍚嶇О")
     private String procedureName;
 
-
+    @ApiModelProperty(value = "material id")
+    private Integer realMaterialId;
 }
diff --git a/server/src/main/java/doumeemes/dao/ext/vo/CompanyExtListVO.java b/server/src/main/java/doumeemes/dao/ext/vo/CompanyExtListVO.java
index 7df00ab..f58062f 100644
--- a/server/src/main/java/doumeemes/dao/ext/vo/CompanyExtListVO.java
+++ b/server/src/main/java/doumeemes/dao/ext/vo/CompanyExtListVO.java
@@ -165,4 +165,7 @@
     @ApiModelProperty(value = "缇氱緤骞冲彴搴旂敤鍙傛暟锛宩son鏍煎紡瀛樺偍{app_key:,aes_key:,app_secret:}" )
     private String lingyangInfo;
 
+    @ApiModelProperty(value = "鐘舵�� 1 寮�鍚� 0 绂佺敤")
+    private Integer status;
+
 }
diff --git a/server/src/main/java/doumeemes/dao/ext/vo/PlansExtListVO.java b/server/src/main/java/doumeemes/dao/ext/vo/PlansExtListVO.java
index e07774a..697f643 100644
--- a/server/src/main/java/doumeemes/dao/ext/vo/PlansExtListVO.java
+++ b/server/src/main/java/doumeemes/dao/ext/vo/PlansExtListVO.java
@@ -71,7 +71,7 @@
     private Integer lessDistributNum;
 
     @ApiModelProperty(value = "璁″垝绫诲瀷 0姝e父1寮傚父2杩斿伐", example = "1")
-    @ExcelColumn(name="璁″垝绫诲瀷",valueMapping = "0=姝e父;1=寮傚父;2=杩斿伐;",index = 11,width =15)
+    @ExcelColumn(name="璁″垝绫诲瀷",valueMapping = "0=姝e父;1=寮傚父;2=杩斿伐;",index = 12,width =15)
     private Integer type;
 
     @ApiModelProperty(value = "鐢熶骇宸ュ簭缂栫爜锛堝叧鑱攑rocedures琛級", example = "1")
@@ -84,15 +84,15 @@
     private Integer unitId;
 
     @ApiModelProperty(value = "璁″垝鏁伴噺", example = "1")
-    @ExcelColumn(name="璁″垝鏁伴噺",index = 6,width =15)
+    @ExcelColumn(name="璁″垝鏁伴噺",index = 7,width =15)
     private Integer num;
 
     @ApiModelProperty(value = "鎵规鍙�")
-    @ExcelColumn(name="鐢熶骇鎵规鍙�",index = 8,width =15)
+    @ExcelColumn(name="鐢熶骇鎵规鍙�",index = 9,width =15)
     private String batch;
 
     @ApiModelProperty(value = "浼樺厛绾э紙鎺掑簭鐮侊級瀛楁", example = "1")
-    @ExcelColumn(name="浼樺厛绾�",index = 9,width =15)
+    @ExcelColumn(name="浼樺厛绾�",index = 10,width =15)
     private Integer urgent;
 
     @ApiModelProperty(value = "瀵煎叆鎵瑰彿锛堝叧鑱攑lan_import琛�)", example = "1")
@@ -102,14 +102,14 @@
     private Integer userId;
 
     @ApiModelProperty(value = "鐘舵�� 0宸茬敓鎴愩��1宸插彂甯冦��2宸叉挙鍥炪��3宸插彇娑堛��4宸插垎閰嶃��5宸叉殏鍋溿��6宸插畬宸ャ��7宸插叆搴撱��8宸插叧闂�", example = "1")
-    @ExcelColumn(name="璁″垝鐘舵��",valueMapping = "0=宸茬敓鎴�;1=宸插彂甯�;2=宸叉挙鍥�;3=宸插彇娑�;4=宸插垎閰�;5=宸叉殏鍋�;6=宸插畬宸�;7=宸插叆搴�;8=宸插叧闂�;",index = 10,width =15)
+    @ExcelColumn(name="璁″垝鐘舵��",valueMapping = "0=宸茬敓鎴�;1=宸插彂甯�;2=宸叉挙鍥�;3=宸插彇娑�;4=宸插垎閰�;5=宸叉殏鍋�;6=宸插畬宸�;7=宸插叆搴�;8=宸插叧闂�;",index = 11,width =15)
     private Integer status;
 
     @ApiModelProperty(value = "杩斾慨鐢宠鍗曞彿锛堝叧鑱攂ackorder琛級", example = "1")
     private Integer backorderId;
 
     @ApiModelProperty(value = "璁″垝鍙戝竷鏃堕棿")
-    @ExcelColumn(name="鍙戝竷鏃ユ湡",index = 15,width =15)
+    @ExcelColumn(name="鍙戝竷鏃ユ湡",index = 16,width =15)
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date publishDate;
 
@@ -133,20 +133,29 @@
     @ApiModelProperty(value = "宸插畬宸ユ暟閲�", example = "0")
     private Integer  doneNum;
     @ApiModelProperty(value = "鍚堟牸鏁伴噺", example = "0")
-    @ExcelColumn(name="鍚堟牸鏁伴噺",index = 13,width =15)
+    @ExcelColumn(name="鍚堟牸鏁伴噺",index = 14,width =15)
     private Integer  qulifiedNum;
     @ApiModelProperty(value = "涓嶈壇鏁伴噺", example = "0")
-    @ExcelColumn(name="涓嶈壇鏁伴噺",index = 14,width =15)
+    @ExcelColumn(name="涓嶈壇鏁伴噺",index = 15,width =15)
     private Integer  unqulifiedNum;
     @ApiModelProperty(value = "宸插垎閰嶇敓浜ф暟閲�", example = "1",hidden = true)
     private Integer distributNum;
     @ApiModelProperty(value = "宸ュ崟宸插垎閰嶇敓浜ф暟閲�", example = "1",hidden = true)
     private Integer workorderDistributNum;
     @ApiModelProperty(value = "宸插垎閰嶆湭瀹屽伐鐢熶骇鏁伴噺", example = "1",hidden = true)
-    @ExcelColumn(name="宸插垎閰嶆湭瀹屽伐鐢熶骇鏁伴噺",index = 12,width =15)
+    @ExcelColumn(name="宸插垎閰嶆湭瀹屽伐鐢熶骇鏁伴噺",index = 13,width =15)
     private Integer distributNoDoneNum;
     @ApiModelProperty(value = "搴撳瓨鏄惁婊¤冻 0涓嶆弧瓒� 1婊¤冻", example = "0")
     private Integer  isStock;
+    @ApiModelProperty(value = "鏄惁寤舵湡")
+    private Boolean hasExpire;
+    @ApiModelProperty(value = "鎴愬搧璁″垝寮�濮嬫棩鏈�")
+    @ExcelColumn(name="璁″垝鏃ユ湡",index = 4,width =15)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private  Date workPlanPlanDate;
+    @ApiModelProperty(value = "鎴愬搧璁″垝寮�濮嬫棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private  Date workPlanStartDate;
 
 
     @ExcelColumn(name="鐗╂枡鍚嶇О",index = 1,width =15)
@@ -155,19 +164,34 @@
     @ExcelColumn(name="鐗╂枡缂栫爜",index = 2,width =15)
     private String materialCode;
 
-    @ExcelColumn(name="宸ュ巶",index = 4,width =15)
+    @ExcelColumn(name="宸ュ巶",index = 5,width =15)
     private String factoryName;
 
-    @ExcelColumn(name="宸ュ簭",index = 5,width =15)
+    @ExcelColumn(name="宸ュ簭",index = 6,width =15)
     private String produceName;
 
-    @ExcelColumn(name="璁″垝鍛�",index = 16,width =15)
+    @ExcelColumn(name="璁″垝鍛�",index = 17,width =15)
     private String planUserName;
 
-    @ExcelColumn(name="鍗曚綅鍚嶇О",index = 7,width =15)
+    @ExcelColumn(name="鍗曚綅鍚嶇О",index = 8,width =15)
     private String unitName;
 
     @ExcelColumn(name="鎴愬搧璁″垝缂栫爜")
     private String workPlanCode;
 
+    @ExcelColumn(name="閿�鍞鍗�")
+    private String salesOrder;
+
+    @ApiModelProperty(value = "鎴愬搧璁″垝缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date workPlanEndDate;
+
+    @ApiModelProperty(value = "宸茬敓浜ф暟閲�")
+    private Integer produceNum;
+
+    @ApiModelProperty(value = "鏄惁鏈塨om閰嶇疆 0鏃� 1鏈�", example = "1")
+    private Integer hasBom;
+    @ApiModelProperty(value = "bom鎶曟枡鏂瑰紡 0鎺ㄥ紡 1鎷夊紡", example = "1")
+    private Integer bomType;
+
 }
diff --git a/server/src/main/java/doumeemes/service/business/UnqualifiedRecordService.java b/server/src/main/java/doumeemes/service/business/UnqualifiedRecordService.java
new file mode 100644
index 0000000..0024bb7
--- /dev/null
+++ b/server/src/main/java/doumeemes/service/business/UnqualifiedRecordService.java
@@ -0,0 +1,97 @@
+package doumeemes.service.business;
+
+import doumeemes.core.model.PageData;
+import doumeemes.core.model.PageWrap;
+import doumeemes.dao.business.model.UnqualifiedRecord;
+import java.util.List;
+
+/**
+ * 宸ュ崟绫�-鎶ュ伐涓嶈壇璁板綍绫诲瀷琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @since 2023/08/16 14:15
+ */
+public interface UnqualifiedRecordService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param unqualifiedRecord 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(UnqualifiedRecord unqualifiedRecord);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param unqualifiedRecord 瀹炰綋瀵硅薄
+     */
+    void delete(UnqualifiedRecord unqualifiedRecord);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param unqualifiedRecord 瀹炰綋瀵硅薄
+     */
+    void updateById(UnqualifiedRecord unqualifiedRecord);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param unqualifiedRecords 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<UnqualifiedRecord> unqualifiedRecords);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return UnqualifiedRecord
+     */
+    UnqualifiedRecord findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param unqualifiedRecord 瀹炰綋瀵硅薄
+     * @return UnqualifiedRecord
+     */
+    UnqualifiedRecord findOne(UnqualifiedRecord unqualifiedRecord);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param unqualifiedRecord 瀹炰綋瀵硅薄
+     * @return List<UnqualifiedRecord>
+     */
+    List<UnqualifiedRecord> findList(UnqualifiedRecord unqualifiedRecord);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<UnqualifiedRecord>
+     */
+    PageData<UnqualifiedRecord> findPage(PageWrap<UnqualifiedRecord> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param unqualifiedRecord 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(UnqualifiedRecord unqualifiedRecord);
+}
diff --git a/server/src/main/java/doumeemes/service/business/impl/CompanyOpenServiceImpl.java b/server/src/main/java/doumeemes/service/business/impl/CompanyOpenServiceImpl.java
index ab6ebbd..0dd3049 100644
--- a/server/src/main/java/doumeemes/service/business/impl/CompanyOpenServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/business/impl/CompanyOpenServiceImpl.java
@@ -11,14 +11,18 @@
 import doumeemes.dao.business.model.Company;
 import doumeemes.dao.business.model.CompanyLog;
 import doumeemes.dao.business.model.CompanyOpen;
+import doumeemes.dao.ext.vo.CompanyExtListVO;
 import doumeemes.service.business.CompanyLogService;
 import doumeemes.service.business.CompanyOpenService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import doumeemes.service.ext.DepartmentExtService;
 import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -43,6 +47,10 @@
 
     @Autowired
     CompanyLogService companyLogService;
+
+    @Autowired
+    @Lazy
+    private DepartmentExtService departmentExtService;
 
     @Override
     public Integer create(CompanyOpen companyOpen) {
@@ -90,7 +98,7 @@
         company.setOepnValidDate(companyOpen.getValidDate());
         company.setOepnType(companyOpen.getOepnType());
         companyMapper.updateById(company);
-
+        Company company1 = companyMapper.selectById(companyOpen.getCompanyId());
 
         CompanyLog companyLog = new CompanyLog();
         companyLog.setDeleted((byte) Constants.ZERO);
@@ -103,6 +111,15 @@
         companyLog.setUpdateType(Constants.CompanyUpdateType.UPDATE_VAIL_DATE.getKey());
         companyLog.setDetail("鏈夋晥鏈熶粠"+format.format(cyResult.getOepnValidDate())+"鏃ヨ皟鏁磋嚦"+format.format(companyOpen.getValidDate()));
         companyLogService.create(companyLog);
+
+        initRedisCache(company1);
+    }
+
+    private void initRedisCache(Company com) {
+        CompanyExtListVO c = new CompanyExtListVO();
+        BeanUtils.copyProperties(com,c);
+        departmentExtService.loadComDepart(c);
+        departmentExtService.initCompnayCodesByCom(com);
     }
 
     @Override
@@ -131,7 +148,7 @@
         QueryWrapper<CompanyOpen> wrapper = new QueryWrapper<>(companyOpen);
         return companyOpenMapper.selectList(wrapper);
     }
-  
+
     @Override
     public PageData<CompanyOpen> findPage(PageWrap<CompanyOpen> pageWrap) {
         IPage<CompanyOpen> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
diff --git a/server/src/main/java/doumeemes/service/business/impl/CompanyServiceImpl.java b/server/src/main/java/doumeemes/service/business/impl/CompanyServiceImpl.java
index 726b6bf..256c3b0 100644
--- a/server/src/main/java/doumeemes/service/business/impl/CompanyServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/business/impl/CompanyServiceImpl.java
@@ -14,6 +14,7 @@
 import doumeemes.dao.business.model.CompanyLog;
 import doumeemes.dao.business.model.Multifiles;
 import doumeemes.dao.ext.dto.DingDingConfig;
+import doumeemes.dao.ext.vo.CompanyExtListVO;
 import doumeemes.service.business.CompanyLogService;
 import doumeemes.service.business.CompanyService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -21,9 +22,12 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import doumeemes.service.business.MultifilesService;
+import doumeemes.service.ext.DepartmentExtService;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -46,6 +50,10 @@
 
     @Autowired
     private CompanyLogService companyLogService;
+
+    @Autowired
+    @Lazy
+    private DepartmentExtService departmentExtService;
 
 
     @Override
@@ -115,36 +123,35 @@
         update.setStatus(company.getStatus());
         update.setDingdingInfo(company.getDingdingInfo());
         companyMapper.updateById(update);
-
 //        鏇存柊璁板綍
-
+        CompanyLog companyLog = new CompanyLog();
+        companyLog.setDeleted((byte)Constants.ZERO);
+        companyLog.setUpdateUser(principal.getId());
+        companyLog.setCreateUser(principal.getId());
+        companyLog.setCreateTime(new Date());
+        companyLog.setUpdateTime(new Date());
+        companyLog.setCompanyId(company.getId());
         if(Objects.nonNull(company.getStatus())){
-            CompanyLog companyLog = new CompanyLog();
-            companyLog.setDeleted((byte)Constants.ZERO);
-            companyLog.setUpdateUser(principal.getId());
-            companyLog.setCreateUser(principal.getId());
-            companyLog.setCreateTime(new Date());
-            companyLog.setUpdateTime(new Date());
             companyLog.setRemark(company.getStatus() == 1 ? "鏁版嵁鍚敤" : "鏁版嵁绂佺敤");
-            companyLog.setCompanyId(company.getId());
             companyLog.setUpdateType(company.getStatus() == 1 ? Constants.CompanyUpdateType.UPDATE_ENABLE.getKey()
                     : Constants.CompanyUpdateType.UPDATE_DISABLE.getKey());
             companyLog.setDetail(company.getStatus() == 1 ? "鏁版嵁鍚敤" : "鏁版嵁绂佺敤");
-            companyLogService.create(companyLog);
         }else {
-            CompanyLog companyLog = new CompanyLog();
-            companyLog.setDeleted((byte)Constants.ZERO);
-            companyLog.setUpdateUser(principal.getId());
-            companyLog.setCreateUser(principal.getId());
-            companyLog.setCreateTime(new Date());
-            companyLog.setUpdateTime(new Date());
             companyLog.setRemark("鏇存柊浼佷笟鏁版嵁");
-            companyLog.setCompanyId(company.getId());
             companyLog.setUpdateType(Constants.CompanyUpdateType.UPDATE_CONTENT.getKey());
             companyLog.setDetail("鏇存柊浼佷笟鏁版嵁");
-            companyLogService.create(companyLog);
         }
+        companyLogService.create(companyLog);
+        Company company1 = companyMapper.selectById(company.getId());
+        initRedisCache(company1);
+    }
 
+
+    private void initRedisCache(Company com) {
+        CompanyExtListVO c = new CompanyExtListVO();
+        BeanUtils.copyProperties(com,c);
+        departmentExtService.loadComDepart(c);
+        departmentExtService.initCompnayCodesByCom(com);
     }
 
     private Boolean isParseObject(String dingdingInfo){
@@ -185,7 +192,7 @@
         QueryWrapper<Company> wrapper = new QueryWrapper<>(company);
         return companyMapper.selectList(wrapper);
     }
-  
+
     @Override
     public PageData<Company> findPage(PageWrap<Company> pageWrap) {
         IPage<Company> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
diff --git a/server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java b/server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java
index 95da0cb..d98d0ca 100644
--- a/server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java
@@ -29,10 +29,8 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.math.BigDecimal;
+import java.util.*;
 
 /**
  * 璁剧疆绫�-缁╂晥宸ヨ祫閰嶇疆琛⊿ervice瀹炵幇
@@ -56,19 +54,24 @@
 
     @Override
     public Integer create(SalaryParam salaryParam) {
+
+
         LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
 
         SalaryParam insert = new SalaryParam();
+        insert.setRootDepartId(salaryParam.getRootDepartId());
+        insert.setDepartId(salaryParam.getDepartId());
+        insert.setProcedureId(salaryParam.getProcedureId());
+        insert.setMaterialId(salaryParam.getMaterialId());
         insert.setDeleted((byte) Constants.ZERO);
+        if(findOne(insert) != null){
+            throw  new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"鍚屼竴涓墿鏂欏湪鐩稿悓宸ュ簭涓嶈兘閲嶅閰嶇疆鍝︼紒");
+        }
         insert.setCreateUser(principal.getId());
         insert.setCreateTime(new Date());
         insert.setUpdateUser(principal.getId());
         insert.setUpdateTime(new Date());
         insert.setRemark(salaryParam.getRemark());
-        insert.setRootDepartId(salaryParam.getRootDepartId());
-        insert.setDepartId(salaryParam.getDepartId());
-        insert.setProcedureId(salaryParam.getProcedureId());
-        insert.setMaterialId(salaryParam.getMaterialId());
         insert.setSalary(salaryParam.getSalary());
         insert.setNum(salaryParam.getNum());
         insert.setTimes(salaryParam.getTimes());
@@ -111,9 +114,9 @@
                 .set(SalaryParam::getUpdateTime,new Date())
                 .set(SalaryParam::getUpdateUser,principal.getId())
                 .set(SalaryParam::getType,salaryParam.getType())
-                .set(SalaryParam::getDepartId,salaryParam.getDepartId())
-                .set(SalaryParam::getMaterialId,salaryParam.getMaterialId())
-                .set(SalaryParam::getProcedureId,salaryParam.getProcedureId())
+//                .set(SalaryParam::getDepartId,salaryParam.getDepartId())
+//                .set(SalaryParam::getMaterialId,salaryParam.getMaterialId())
+//                .set(SalaryParam::getProcedureId,salaryParam.getProcedureId())
                 .set(SalaryParam::getSalary,salaryParam.getSalary())
                 .set(SalaryParam::getNum,salaryParam.getNum())
                 .set(SalaryParam::getTimes,salaryParam.getTimes())
@@ -139,6 +142,7 @@
     @Override
     public SalaryParam findOne(SalaryParam salaryParam) {
         QueryWrapper<SalaryParam> wrapper = new QueryWrapper<>(salaryParam);
+        wrapper.last("limit 1");
         return salaryParamMapper.selectOne(wrapper);
     }
 
@@ -180,7 +184,7 @@
                 || Objects.isNull(s.getDepartName())
                 || Objects.isNull(s.getMaterialCode())
                 || Objects.isNull(s.getProcedureName())
-                || Objects.isNull(s.getNUM())){
+                || Objects.isNull(s.getNum())){
                 throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵煎叆鏁版嵁鍐呭鏈夎锛�");
             }
         });
@@ -216,7 +220,7 @@
             proceduresWrapper.lambda()
                     .eq(Procedures::getName,salaryParamImportDTO.getProcedureName())
                     .eq(Procedures::getRootDepartId,department.getRootId())
-                    .eq(Procedures::getDepartId,department.getId())
+                    .eq(Procedures::getOrgId,department.getId())
                     .last("limit 1");
             Procedures procedures = proceduresMapper.selectOne(proceduresWrapper);
             if (Objects.isNull(procedures)){
@@ -228,13 +232,49 @@
             salaryParam.setProcedureId(procedures.getId());
             salaryParam.setMaterialId(material.getId());
             salaryParam.setSalary(salaryParamImportDTO.getSalary());
-            salaryParam.setNum(salaryParamImportDTO.getNUM());
-            //todo
-//            salaryParam.setTimes();
-//            salaryParam.setUnqualified(salaryParamImportDTO.getUnqualified() );
-//            salaryParam.setType(salaryParamImportDTO.getType());
+            salaryParam.setNum(new BigDecimal(salaryParamImportDTO.getNum()));
+            salaryParam.setTimes(getIntegerTimes(salaryParamImportDTO.getTimesName()));
+            Integer unqualified = Optional.ofNullable(salaryParamImportDTO.getUnqualified()).map(s -> {
+                if ("鍚�".equals(s)) {
+                    return 0;
+                } else {
+                    return 1;
+                }
+            }).orElse(0);
+            salaryParam.setUnqualified(unqualified);
+
+            Integer type = Optional.ofNullable(salaryParamImportDTO.getUnqualified()).map(s -> {
+                if ("璁′欢".equals(s)) {
+                    return 0;
+                } else {
+                    return 1;
+                }
+            }).orElse(0);
+            salaryParam.setType(type);
             create(salaryParam);
         }
 
     }
+
+    private Integer getIntegerTimes(String a) {
+        int h =0,m=0,s=0;
+        try{
+            int hIndex =a.lastIndexOf("灏忔椂");
+            int mIndex=a.lastIndexOf("鍒嗛挓");
+            int sIndex =a.lastIndexOf("绉�");
+            if( hIndex>0){
+                h = Integer.parseInt(a.substring(0,hIndex));
+            }
+            if(mIndex > hIndex){
+                m = Integer.parseInt(a.substring(hIndex >=0?hIndex+2:0,mIndex));
+            }
+            if(sIndex > mIndex){
+               s = Integer.parseInt(a.substring(mIndex >= 0 ? mIndex+2 : 0, sIndex));
+            }
+            return  h*3600+m*60+s;
+        }catch (Exception e){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鏃堕暱銆�"+a+"銆戞牸寮忎笉姝g‘锛�" );
+        }
+
+    }
 }
diff --git a/server/src/main/java/doumeemes/service/business/impl/UnqualifiedRecordServiceImpl.java b/server/src/main/java/doumeemes/service/business/impl/UnqualifiedRecordServiceImpl.java
new file mode 100644
index 0000000..d0fa52f
--- /dev/null
+++ b/server/src/main/java/doumeemes/service/business/impl/UnqualifiedRecordServiceImpl.java
@@ -0,0 +1,124 @@
+package doumeemes.service.business.impl;
+
+import doumeemes.core.model.PageData;
+import doumeemes.core.model.PageWrap;
+import doumeemes.core.utils.Utils;
+import doumeemes.dao.business.UnqualifiedRecordMapper;
+import doumeemes.dao.business.model.UnqualifiedRecord;
+import doumeemes.service.business.UnqualifiedRecordService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 宸ュ崟绫�-鎶ュ伐涓嶈壇璁板綍绫诲瀷琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @since 2023/08/16 14:15
+ */
+@Service
+public class UnqualifiedRecordServiceImpl implements UnqualifiedRecordService {
+
+    @Autowired
+    private UnqualifiedRecordMapper unqualifiedRecordMapper;
+
+    @Override
+    public Integer create(UnqualifiedRecord unqualifiedRecord) {
+        unqualifiedRecordMapper.insert(unqualifiedRecord);
+        return unqualifiedRecord.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        unqualifiedRecordMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(UnqualifiedRecord unqualifiedRecord) {
+        UpdateWrapper<UnqualifiedRecord> deleteWrapper = new UpdateWrapper<>(unqualifiedRecord);
+        unqualifiedRecordMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        unqualifiedRecordMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(UnqualifiedRecord unqualifiedRecord) {
+        unqualifiedRecordMapper.updateById(unqualifiedRecord);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<UnqualifiedRecord> unqualifiedRecords) {
+        if (CollectionUtils.isEmpty(unqualifiedRecords)) {
+            return;
+        }
+        for (UnqualifiedRecord unqualifiedRecord: unqualifiedRecords) {
+            this.updateById(unqualifiedRecord);
+        }
+    }
+
+    @Override
+    public UnqualifiedRecord findById(Integer id) {
+        return unqualifiedRecordMapper.selectById(id);
+    }
+
+    @Override
+    public UnqualifiedRecord findOne(UnqualifiedRecord unqualifiedRecord) {
+        QueryWrapper<UnqualifiedRecord> wrapper = new QueryWrapper<>(unqualifiedRecord);
+        return unqualifiedRecordMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<UnqualifiedRecord> findList(UnqualifiedRecord unqualifiedRecord) {
+        QueryWrapper<UnqualifiedRecord> wrapper = new QueryWrapper<>(unqualifiedRecord);
+        return unqualifiedRecordMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<UnqualifiedRecord> findPage(PageWrap<UnqualifiedRecord> pageWrap) {
+        IPage<UnqualifiedRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<UnqualifiedRecord> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        queryWrapper.lambda()
+                .eq(pageWrap.getModel().getId() != null, UnqualifiedRecord::getId, pageWrap.getModel().getId())
+                .eq(pageWrap.getModel().getDeleted() != null, UnqualifiedRecord::getDeleted, pageWrap.getModel().getDeleted())
+                .eq(pageWrap.getModel().getCreateUser() != null, UnqualifiedRecord::getCreateUser, pageWrap.getModel().getCreateUser())
+                .ge(pageWrap.getModel().getCreateTime() != null, UnqualifiedRecord::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()))
+                .le(pageWrap.getModel().getCreateTime() != null, UnqualifiedRecord::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()))
+                .eq(pageWrap.getModel().getUpdateUser() != null, UnqualifiedRecord::getUpdateUser, pageWrap.getModel().getUpdateUser())
+                .ge(pageWrap.getModel().getUpdateTime() != null, UnqualifiedRecord::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()))
+                .le(pageWrap.getModel().getUpdateTime() != null, UnqualifiedRecord::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()))
+                .eq(pageWrap.getModel().getRemark() != null, UnqualifiedRecord::getRemark, pageWrap.getModel().getRemark())
+                .eq(pageWrap.getModel().getRootDepartId() != null, UnqualifiedRecord::getRootDepartId, pageWrap.getModel().getRootDepartId())
+                .eq(pageWrap.getModel().getDepartId() != null, UnqualifiedRecord::getDepartId, pageWrap.getModel().getDepartId())
+                .eq(pageWrap.getModel().getWorkorderId() != null, UnqualifiedRecord::getWorkorderId, pageWrap.getModel().getWorkorderId())
+                .eq(pageWrap.getModel().getRecordId() != null, UnqualifiedRecord::getRecordId, pageWrap.getModel().getRecordId())
+                .eq(pageWrap.getModel().getCategoryId() != null, UnqualifiedRecord::getCategoryId, pageWrap.getModel().getCategoryId())
+                .eq(pageWrap.getModel().getUnqualifiedNum() != null, UnqualifiedRecord::getUnqualifiedNum, pageWrap.getModel().getUnqualifiedNum())
+        ;
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(unqualifiedRecordMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(UnqualifiedRecord unqualifiedRecord) {
+        QueryWrapper<UnqualifiedRecord> wrapper = new QueryWrapper<>(unqualifiedRecord);
+        return unqualifiedRecordMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/src/main/java/doumeemes/service/business/impl/WOutboundServiceImpl.java b/server/src/main/java/doumeemes/service/business/impl/WOutboundServiceImpl.java
index d82226a..67abb5c 100644
--- a/server/src/main/java/doumeemes/service/business/impl/WOutboundServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/business/impl/WOutboundServiceImpl.java
@@ -2126,6 +2126,9 @@
             WOutboundInBodyBean wOutboundInBodyBean = wOutboundInBodyBeans.get(Constants.ZERO);
             //绱鍏ュ簱鏁伴噺
             wOutboundInBodyBean.setNum(wOutboundInBodyBeans.stream().map(s -> s.getNum()).reduce(BigDecimal.ZERO, BigDecimal::add));
+            if(wOutboundInBodyBean.getNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏁伴噺寮傚父,璇锋鏌ユ暟閲�!");
+            }
             WOutboundDetail wOutboundDetail = new WOutboundDetail();
             //鏌ヨ鐗╂枡鏁版嵁
             MaterialDistribute materialDistribute = materialDistributeMapper.selectById(wOutboundInBodyBean.getMaterialId());
diff --git a/server/src/main/java/doumeemes/service/ext/CategoryExtService.java b/server/src/main/java/doumeemes/service/ext/CategoryExtService.java
index ec98c94..d5f239d 100644
--- a/server/src/main/java/doumeemes/service/ext/CategoryExtService.java
+++ b/server/src/main/java/doumeemes/service/ext/CategoryExtService.java
@@ -33,4 +33,6 @@
     CategoryExtListVO getByCategoryId(Integer comid, Integer id);
     CategoryExtListVO getByCategoryId(Integer comid, Integer id,List<CategoryExtListVO> allList);
     void loadAll();
+
+    List<CategoryExtListVO> findList(QueryCategoryExtDTO queryCategoryExtDTO);
 }
diff --git a/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java b/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
index f3ffd3a..8473bf7 100644
--- a/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
+++ b/server/src/main/java/doumeemes/service/ext/WorkorderRecordStandardService.java
@@ -36,4 +36,6 @@
     List<WorkorderRecord> getWorkorderRecordList(Integer workorderId);
 
     PageData<WStockExtListVO> choiceStockPageForWorkorder(PageWrap<QueryWStockDto> pageWrap, LoginUserInfo userInfo);
+
+    PageData<WStockExtListVO> choiceStockPageForPlans(PageWrap<QueryWStockDto> pageWrap,LoginUserInfo userInfo);
 }
diff --git a/server/src/main/java/doumeemes/service/ext/impl/CategoryExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/CategoryExtServiceImpl.java
index b906671..d8ac8f3 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/CategoryExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/CategoryExtServiceImpl.java
@@ -49,6 +49,12 @@
     }
 
     @Override
+    public List<CategoryExtListVO> findList(QueryCategoryExtDTO queryCategoryExtDTO) {
+        List<CategoryExtListVO> result = categoryExtMapper.selectList(queryCategoryExtDTO);
+        return result;
+    }
+
+    @Override
     public List<CategoryExtListVO> getListByType(String type,Integer rootDepartId,String cateType,String id) {
         QueryCategoryExtDTO queryCategoryExtDTO=new QueryCategoryExtDTO();
         queryCategoryExtDTO.setDeleted(Constants.ZERO);
diff --git a/server/src/main/java/doumeemes/service/ext/impl/CompanyExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/CompanyExtServiceImpl.java
index b890b41..211c2c9 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/CompanyExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/CompanyExtServiceImpl.java
@@ -590,7 +590,7 @@
             return companyInfoListVO;
         }
         String rPath =systemDictDataBiz.queryByCode(Constants.OSS,Constants.RESOURCE_PATH).getCode()+systemDictDataBiz.queryByCode(Constants.OSS,Constants.MENU_IMG).getCode();
-        companyInfoListVO.setFileurlfull(rPath+"/"+companyInfoListVO.getFileStoreAddr());
+        companyInfoListVO.setFileurlfull(rPath+companyInfoListVO.getFileStoreAddr());
 
         companyInfoListVO.setSystemUrl( systemDictDataBiz.queryByCode(Constants.EDGP_PARAM,Constants.SYSTEM_URL).getCode()+companyInfoListVO.getId());
 
diff --git a/server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java
index d918101..aedce83 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/DepartmentExtServiceImpl.java
@@ -37,6 +37,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.PostConstruct;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -443,6 +444,7 @@
             //鍔犲叆redis缂撳瓨锛屽瓨鍌ㄤ紒涓氫俊鎭�
             RedisUtil.addObject(redisTemplate,Constants.RedisKeys.COM_DEPART_TREE_KEY+com.getId(),rootDepart);
     }
+    @PostConstruct
     @Override
     public  void loadAllDepart() {
         QueryCompanyExtDTO dto = new QueryCompanyExtDTO();
@@ -796,7 +798,7 @@
             for (Department department:departmentList ) {
                 this.dealDepartmentData(department,user);
             }
-        } 
+        }
     }
 
     public void dealDepartmentData(Department department,LoginUserInfo user){
diff --git a/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
index e6ac936..d283106 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/PlansExtServiceImpl.java
@@ -16,6 +16,8 @@
 import doumeemes.core.utils.excel.EasyExcelUtil;
 import doumeemes.core.utils.redis.RedisUtil;
 import doumeemes.dao.business.PlansMapper;
+import doumeemes.dao.business.UnqualifiedRecordMapper;
+import doumeemes.dao.business.WorkorderMapper;
 import doumeemes.dao.business.dto.*;
 import doumeemes.dao.business.model.*;
 import doumeemes.dao.ext.*;
@@ -34,6 +36,7 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -64,7 +67,8 @@
     private WorkorderHistoryExtMapper workorderHistoryExtMapper;
     @Autowired
     private WorkorderRecordExtMapper workorderRecordExtMapper;
-
+    @Autowired
+    private WorkorderMapper workorderMapper;
     @Autowired
     private RouteProcedureExtMapper routeProcedureExtMapper;
     @Autowired
@@ -89,6 +93,8 @@
     private WStockExtService  wStockExtService;
     @Autowired
     private WorkorderRecordStandardService workorderRecordStandardService;
+    @Autowired
+    private UnqualifiedRecordMapper unqualifiedRecordMapper;
 
     @Override
     public  PlansExtListVO findById(Integer id){
@@ -139,6 +145,19 @@
 //        //缁熻宸插畬宸ユ暟閲�
 //        param.setStatus(Constants.WORKORDER_STATUS.done);
 //        plan.setDoneNum(workorderExtMapper.sumOrderNum(param));
+        QueryBomExtDTO bb = new QueryBomExtDTO();
+        bb.setDepartId(plan.getDepartId());
+        bb.setDeleted(Constants.ZERO);
+        bb.setRootDepartId(user.getRootDepartment().getId());
+        bb.setMaterialId(plan.getMaterialId());
+        bb.setProcedureId(plan.getProcedureId());
+        BomExtListVO versionBom = bomExtMapper.selectByModel( bb);
+        if(versionBom == null || StringUtils.isBlank(versionBom.getVersion()) || versionBom.getBomVersionId() == null){
+            plan.setHasBom(Constants.ZERO);
+        }else {
+            plan.setBomType(Constants.formatIntegerNum(versionBom.getType()));
+            plan.setHasBom(Constants.ONE);
+        }
         return plan;
     }
 
@@ -197,6 +216,14 @@
 //                p.setDistributNum(tp.getDistributNum());
 //                p.setDoneNum(tp.getDoneNum());
                 p.setIsStock(wStockExtService.isStockForPlan(p));
+                p.setHasExpire(false);
+                p.setStatus(Constants.formatIntegerNum(p.getStatus()));
+                if ( !p.getStatus().equals(Constants.PLAN_STATUS.done) &&
+                        !p.getStatus().equals(Constants.PLAN_STATUS.close)){
+                    if (Objects.nonNull(p.getPlanDate())){
+                        p.setHasExpire(DateUtil.toDateLocalDateTime(p.getWorkPlanPlanDate()).toLocalDate().isBefore(LocalDate.now()));
+                    }
+                }
             }
         }
         return PageData.from(new PageInfo<>(result));
@@ -592,7 +619,7 @@
         if(Constants.equalsInteger(mp.getPaused(),Constants.ONE)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璁″垝宸叉殏鍋滐紒");
         }
-        if(Constants.formatIntegerNum(mp.getDistributNum())+thisPlanNum > Constants.formatIntegerNum(mp.getNum())){
+        if(Constants.formatIntegerNum(mp.getWorkorderDistributNum())+thisPlanNum > Constants.formatIntegerNum(mp.getNum())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝绱鍒嗛厤鏁伴噺澶т簬璁″垝鏁伴噺锛�");
         }
         if(!Constants.equalsInteger(mp.getStatus(),Constants.PLAN_STATUS.publish)&&!Constants.equalsInteger(mp.getStatus(),Constants.PLAN_STATUS.distribute)){
@@ -678,9 +705,9 @@
         if(ulist == null){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝鐢熶骇浜哄憳淇℃伅涓嶆纭紝璇峰埛鏂伴〉闈㈤噸璇曪紒");
         }
-        if(ulist.size() < param.getProUserList().size()){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝瀛樺湪鐢熶骇浜哄憳淇℃伅涓嶆纭紝璇峰埛鏂伴〉闈㈤噸璇曪紒");
-        }
+//        if(ulist.size() < param.getProUserList().size()){
+//            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝瀛樺湪鐢熶骇浜哄憳淇℃伅涓嶆纭紝璇峰埛鏂伴〉闈㈤噸璇曪紒");
+//        }
         List<WorkorderUser> userList = new ArrayList<>();
         for(UserDeviceExtListVO uModel : ulist){
             WorkorderUser u = new WorkorderUser();
@@ -1507,7 +1534,7 @@
     }
     /**
      * 鎭㈠璁″垝
-     * @param p
+     * @param
      */
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     @Override
@@ -1563,14 +1590,18 @@
         if(Objects.isNull(plans)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌宸ュ簭璁″垝鏁版嵁");
         }
-        if(plans.getStatus().equals(Constants.PLAN_STATUS.create)){
+        if(!(plans.getStatus().equals(Constants.PLAN_STATUS.create)||plans.getStatus().equals(Constants.PLAN_STATUS.publish)||plans.getStatus().equals(Constants.PLAN_STATUS.distribute))){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸ュ簭璁″垝宸叉祦杞紝鏃犳硶鎿嶄綔");
+        }
+        if(plans.getPaused().equals(Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸ュ簭璁″垝宸叉殏鍋滐紝鏃犳硶鎿嶄綔");
         }
         if(Objects.isNull(autoWorkReportDTO.getCreateWorkorderRecordDTO())){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍙傛暟閿欒锛氫骇鍑烘暟鎹�");
         }
         //鏌ヨ宸ュ簭璁″垝宸插垎閰嶆暟閲�
-        List<Workorder> workorderList = workorderExtMapper.selectList(new QueryWrapper<Workorder>().eq("PLAN_ID",plans.getId()));
+        List<Workorder> workorderList = workorderMapper.selectList(new QueryWrapper<Workorder>().eq("PLAN_ID",plans.getId())
+                .eq("STATUS",Constants.WORKORDER_STATUS.baogong));
         //鏈浜у嚭鏁伴噺
         BigDecimal num = autoWorkReportDTO.getCreateWorkorderRecordDTO().getQualifiedNum().add(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum());
         if(num.compareTo(BigDecimal.ZERO)<=Constants.ZERO){
@@ -1585,11 +1616,9 @@
         Workorder param = new Workorder();
         param.setPlanId(autoWorkReportDTO.getPlansId());
         param.setPlanDate(new Date());
-        List<Integer> proUserList = new ArrayList<Integer>();
-        //TODO
-        proUserList.add(user.getId());
-        param.setProUserList(proUserList);
-        param.setPlanNum(plans.getNum());
+        param.setProGroupId(autoWorkReportDTO.getProGroupId());
+        param.setProUserList(autoWorkReportDTO.getProUserList());
+        param.setPlanNum(num.intValue());
         //鐢熸垚宸ュ崟淇℃伅
         Workorder workorder = this.distributeDone(user,param,plans.getNum());
         //宸ュ崟鎶曟枡璁板綍
@@ -1600,11 +1629,48 @@
             workorderRecordStandardService.createMaterialStandard(createMaterialDTO);
         }
         //宸ュ崟浜у嚭璁板綍
-        workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user);
+        autoWorkReportDTO.getCreateWorkorderRecordDTO().setWorkorderId(workorder.getId());
+        WorkorderRecord workorderRecord = workorderRecordStandardService.createWorkorderRecord(autoWorkReportDTO.getCreateWorkorderRecordDTO(),user);
         //宸ュ崟鎶ュ伐
         workorderRecordStandardService.comfirmDone(workorder);
-
-
+        //鏇存柊宸ュ崟鐘舵��
+        if(num.compareTo(BigDecimal.valueOf(surplusNum))==Constants.ZERO){
+            plans.setStatus(Constants.PLAN_STATUS.done);
+        }else{
+            if(plans.getStatus().equals(Constants.PLAN_STATUS.create)){
+                plans.setStatus(Constants.PLAN_STATUS.distribute);
+            }
+        }
+        plansExtMapper.updateById(plans);
+        //瀛樺偍鎶ュ伐涓嶈壇椤规暟鎹�
+        if(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){
+            if(!Objects.isNull(autoWorkReportDTO.getCreateUnqualifiedDTOList())&&autoWorkReportDTO.getCreateUnqualifiedDTOList().size()>Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓嶈壇椤归敊璇細璇锋鏌ヤ笉鑹」鏁版嵁");
+            }
+        }else{
+            List<CreateUnqualifiedDTO> createUnqualifiedDTOList = autoWorkReportDTO.getCreateUnqualifiedDTOList();
+            BigDecimal unqualified = createUnqualifiedDTOList.stream().map(s -> s.getUnQualifiedNum()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            if(unqualified.compareTo(autoWorkReportDTO.getCreateWorkorderRecordDTO().getUnQualifiedNum())!=Constants.ZERO){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓嶈壇椤归敊璇細璇锋鏌ヤ笉鑹」鏁版嵁");
+            }
+            for (CreateUnqualifiedDTO createUnqualifiedDTO:createUnqualifiedDTOList) {
+                if(createUnqualifiedDTO.getUnQualifiedNum().compareTo(BigDecimal.ZERO)==Constants.ZERO
+                ||Objects.isNull(createUnqualifiedDTO.getCategoryId())){
+                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"涓嶈壇椤归敊璇細璇锋鏌ヤ笉鑹」鏁版嵁");
+                }
+                UnqualifiedRecord unqualifiedRecord = new UnqualifiedRecord();
+                unqualifiedRecord.setDeleted(Constants.ZERO);
+                unqualifiedRecord.setCreateUser(user.getId());
+                unqualifiedRecord.setCreateTime(new Date());
+                unqualifiedRecord.setRootDepartId(plans.getRootDepartId());
+                unqualifiedRecord.setDepartId(plans.getDepartId());
+                unqualifiedRecord.setWorkorderId(workorder.getId());
+                unqualifiedRecord.setRecordId(workorderRecord.getId());
+                unqualifiedRecord.setCategoryId(createUnqualifiedDTO.getCategoryId());
+                unqualifiedRecord.setUnqualifiedNum(createUnqualifiedDTO.getUnQualifiedNum());
+                unqualifiedRecordMapper.insert(unqualifiedRecord);
+            }
+        }
     }
 
 
diff --git a/server/src/main/java/doumeemes/service/ext/impl/WorkPlansExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/WorkPlansExtServiceImpl.java
index f33817e..4885ee4 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkPlansExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkPlansExtServiceImpl.java
@@ -175,12 +175,16 @@
                     i.setFinishUnQualifiedNum(Objects.isNull(plansExtListVO.getUnqulifiedNum())?Constants.ZERO:plansExtListVO.getUnqulifiedNum());
                     i.setFinishNum(Objects.isNull(plansExtListVO.getDoneNum())?Constants.ZERO:plansExtListVO.getDoneNum());
                 }
-                if (Objects.nonNull(i.getPlanDate())){
-                    i.setHasExpire(DateUtil.toDateLocalDateTime(i.getPlanDate()).toLocalDate().isBefore(LocalDate.now()));
-                }else {
-                    i.setHasExpire(false);
+                i.setHasExpire(false);
+                i.setStatus(Constants.formatIntegerNum(i.getStatus()));
+                if ( !i.getStatus().equals(Constants.WORKPLANHISTORY_TYPE.done) &&
+                        !i.getStatus().equals(Constants.WORKPLANHISTORY_TYPE.close)){
+                    if (Objects.nonNull(i.getPlanDate())){
+                        i.setHasExpire(DateUtil.toDateLocalDateTime(i.getPlanDate()).toLocalDate().isBefore(LocalDate.now()));
+                    }
                 }
 
+
             });
         }
         return PageData.from(new PageInfo<>(result));
diff --git a/server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java
index dd32a26..b5e1a8a 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderExtServiceImpl.java
@@ -343,6 +343,7 @@
         result.setStartNum(workorderExtMapper.selectCount(param));
         param.setStatusList(new ArrayList<>());
         param.getStatusList().add(Constants.WORKORDER_STATUS.done);
+        param.getStatusList().add(Constants.WORKORDER_STATUS.producing);
         param.getStatusList().add(Constants.WORKORDER_STATUS.check);
         //杩涜涓暟閲�
         result.setIngNum(workorderExtMapper.selectCount(param));
diff --git a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
index 8ec0cff..596283d 100644
--- a/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/ext/impl/WorkorderRecordStandardServiceImpl.java
@@ -83,6 +83,10 @@
     private MaterialExtMapper materialExtMapper;
     @Autowired
     private SalaryParamMapper salaryParamMapper;
+    @Autowired
+    private PlansExtMapper plansExtMapper;
+    @Autowired
+    private DeviceExtMapper deviceExtMapper;
 
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     @Override
@@ -188,6 +192,14 @@
         return mp;
     }
 
+    private void getPlansAndValid(LoginUserInfo user, Plans mp)  throws  BusinessException{
+        if(mp== null){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇ヨ褰曚笉瀛樺湪锛�");
+        }
+        if(Constants.equalsInteger(mp.getPaused(),Constants.ONE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝宸ュ崟宸叉殏鍋滐紒");
+        }
+    }
 
     private QueryBomDetailExtDTO initBomParam(LoginUserInfo user, Workorder mp)  throws BusinessException{
         QueryBomExtDTO bb = new QueryBomExtDTO();
@@ -207,6 +219,27 @@
         bom.setBomId(versionBom.getBomVersionId());
 //        bom.setProcedureId(mp.getProcedureId());
         bom.setWorkorderId(mp.getId());
+        return bom;
+    }
+
+    private QueryBomDetailExtDTO initBomParamForPlans(LoginUserInfo user, Plans plans)  throws BusinessException{
+        QueryBomExtDTO bb = new QueryBomExtDTO();
+        bb.setDepartId(plans.getDepartId());
+        bb.setDeleted(Constants.ZERO);
+        bb.setRootDepartId(user.getRootDepartment().getId());
+        bb.setMaterialId(plans.getMaterialId());
+        bb.setProcedureId(plans.getProcedureId());
+        BomExtListVO versionBom = bomExtMapper.selectByModel( bb);
+        if(versionBom == null || StringUtils.isBlank(versionBom.getVersion()) || versionBom.getBomVersionId() == null){
+            return  null;
+            // throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠墿鏂橞OM淇℃伅閰嶇疆鏈夎锛岃鑱旂郴绠$悊鍛橈紒");
+        }
+        plans.setBomModel(versionBom);
+        QueryBomDetailExtDTO  bom = new QueryBomDetailExtDTO();
+        bom.setDeleted(Constants.ZERO);
+        bom.setBomId(versionBom.getBomVersionId());
+//        bom.setProcedureId(mp.getProcedureId());
+        bom.setPlansId(plans.getId());
         return bom;
     }
 
@@ -281,7 +314,6 @@
     }
 
     private void updateOrderInfo(LoginUserInfo user, Workorder mp,int status) {
-
         List<WorkorderHistory> whList = new ArrayList<>();
         //宸ュ崟鍘嗗彶鏁版嵁
         Workorder order = new Workorder();
@@ -299,7 +331,7 @@
             order.setStatus(Constants.WORKORDER_STATUS.material);
         }else if(status ==Constants.WORKORDER_HISTORY_STATUS.done){
             order.setStatus(Constants.WORKORDER_STATUS.done);
-        }else if(status ==Constants.WORKORDER_HISTORY_STATUS.material){
+        }else if(status ==Constants.WORKORDER_HISTORY_STATUS.material ||status ==Constants.WORKORDER_HISTORY_STATUS.produce){
             //鎶曟枡鎿嶄綔
             if(Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.create)
                     ||Constants.equalsInteger(mp.getStatus(),Constants.WORKORDER_STATUS.material)){
@@ -637,13 +669,13 @@
             if (bomDetailList == null || bomDetailList.size() == 0) {
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝璇ョ敓浜х墿鏂欑殑bom閰嶇疆鏈夎锛岃鑱旂郴绠$悊鍛橈紒");
             }
-            for (BomDetailExtListVO i :bomDetailList) {
-                //鏌ヨ鏄惁鎶曟枡
-                if(workorderRecordExtMapper.selectCount(new QueryWrapper<WorkorderRecord>()
-                        .eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",i.getMaterialId()).eq("TYPE",Constants.ZERO))<=0){
-                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鏈姇鏂橞OM鐗╂枡锛屾棤娉曡繘琛屾姤宸�");
-                }
-            }
+//            for (BomDetailExtListVO i :bomDetailList) {
+//                //鏌ヨ鏄惁鎶曟枡
+//                if(workorderRecordExtMapper.selectCount(new QueryWrapper<WorkorderRecord>()
+//                        .eq("DELETED",Constants.ZERO).eq("MATERIAL_ID",i.getMaterialId()).eq("TYPE",Constants.ZERO))<=0){
+//                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪鏈姇鏂橞OM鐗╂枡锛屾棤娉曡繘琛屾姤宸�");
+//                }
+//            }
         }
 
         WOutbound outbound = new WOutbound();
@@ -762,6 +794,126 @@
 
 
 
+//    private void dealAppliancePro(Workorder mp
+//            , LoginUserInfo user
+//            , List<WorkorderRecordExtListVO> allRecordList
+//            , List<Appliances> updateApplianceList
+//            , List<Appliances> updateApplianceProList
+//            ,   List<WOutboundDetail> outboundDetailList
+//            ,   List<WStock> stockList) {
+//        WOutbound outbound = new WOutbound();
+//        outbound.setDeleted(Constants.ZERO);
+//        outbound.setCreateTime(DateUtil.getCurrentDate());
+//        outbound.setDealDate(outbound.getCreateTime());
+//        outbound.setValidDate(outbound.getCreateTime());
+//        outbound.setCreateUser(user.getId());
+//        outbound.setRootDepartId(mp.getRootDepartId());
+//        outbound.setDepartId(mp.getDepartId());
+//        outbound.setStatus(Constants.WOUTBOUND_STATUS.dealed);
+//        outbound.setType(Constants.WOUTBOUND_TYPE.in);
+//        //2022骞�7鏈�1鏃�14:42:41 鍔犲叆鍗曟嵁绫诲埆
+//        outbound.setBillType(Constants.WOUTBOUND_BILLTYPE.workerOrderIn);
+//        outbound.setCode(wOutboundService.getNextInCode(user.getCompany().getId()));
+//        outbound.setOrigin(Constants.ONE);
+//        outbound.setOriginType(Constants.WOUTBOUND_ORIGIN_TYPE.produce);
+//        outbound.setOriginCode(mp.getCode());
+//        outbound.setOriginId(mp.getId());
+//        outbound.setPlanDate(DateUtil.getCurrentDate());
+//        outbound.setProcedureId(mp.getProcedureId());
+//        outbound.setUserId(user.getId());
+//        outbound.setWarehouseId(mp.getFinishWarehouseId());
+//        wOutboundService.create(outbound);
+//
+//        List<WOutboundDetail> detailList = new ArrayList<>();
+//        List<WOutboundRecord> recordList = new ArrayList<>();
+//        for(WorkorderRecordExtListVO tModel :allRecordList){
+//            if(Constants.equalsInteger(tModel.getType(),Constants.WORKORDER_RECORD_TYPE.produce)){
+//                if(tModel.getNum().compareTo(BigDecimal.ZERO)<=Constants.ZERO){
+//                    continue;
+//                }
+//                //濡傛灉鏄骇鍑�
+//                mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum()));
+//
+//                //鐗╂枡+鎵规+宸ュ簭+璐ㄩ噺灞炴�у幓閲�
+//                WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList);
+//                if(detail!=null){
+//                    detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum()));
+//                }else{
+//                    detail = new WOutboundDetail();
+//                    detail.setDeleted(Constants.ZERO);
+//                    detail.setCreateTime(DateUtil.getCurrentDate());
+//                    detail.setCreateUser(user.getId());
+//                    detail.setOutboundId(outbound.getId());
+//                    detail.setRootDepartId(outbound.getRootDepartId());
+//                    detail.setWarehouseId(outbound.getWarehouseId());
+//                    detail.setLocationId(mp.getFinishWarehouseLocationId());
+//                    detail.setNum(tModel.getNum());
+//                    detail.setStatus(Constants.ONE);
+//                    detail.setDoneNum(tModel.getNum());
+//                    detail.setDoneDate(new Date());
+//                    detail.setUnitId(tModel.getUnitId());
+//                    detail.setBatch(tModel.getMaterialBatch());
+//                    detail.setProcedureId(tModel.getProcedureId());
+//                    detail.setMaterialId(tModel.getMaterialId());
+//                    detail.setQualityType(tModel.getDoneType());
+//                    detail.setWOutboundRecordInList(new ArrayList<>());
+//                    detailList.add(detail);
+//                }
+//
+//                WOutboundRecord record = new WOutboundRecord();
+//                record.setDeleted(Constants.ZERO);
+//                record.setCreateTime(DateUtil.getCurrentDate());
+//                record.setCreateUser(user.getId());
+//                record.setAppliancesId(tModel.getAppliancesId());
+//                record.setBatch(detail.getBatch());
+//                record.setRootDepartId(mp.getRootDepartId());
+//                record.setNum(tModel.getNum());
+//                record.setOutboundId(detail.getOutboundId());
+//                record.setUnitId(detail.getUnitId());
+//                record.setWarehouseId(detail.getWarehouseId());
+//                record.setMaterialId(detail.getMaterialId());
+//                record.setProcedureId(detail.getProcedureId());
+//                record.setLocationId(detail.getLocationId());
+//                record.setQualityType(detail.getQualityType());
+//                detail.getWOutboundRecordInList().add(record);
+//
+//                WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
+//                        tModel.getProcedureId(),tModel.getDoneType(),stockList);
+//                if(stock!=null){
+//                    //濡傛灉搴撳瓨瀵硅薄宸插瓨鍦紝鐩存帴澧炲姞瀵瑰簲鐨勫簱瀛橀噺
+//                    stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum())));
+//                }else{
+//                    stock = new WStock();
+//                    stock.setMaterialId(detail.getMaterialId());
+//                    stock.setBatch(detail.getBatch());
+//                    stock.setWarehouseId(outbound.getWarehouseId());
+//                    stock.setLocationId(mp.getFinishWarehouseLocationId());
+//                    stock.setUnitId(detail.getUnitId());
+//                    stock.setNum(Constants.formatBigdecimal(tModel.getNum()));
+//                    stock.setProcedureId(tModel.getProcedureId());
+//                    stock.setQualityType(tModel.getDoneType());
+//                    //寰呮洿鏂板簱瀛樹俊鎭�
+//                    stockList.add(stock);
+//                }
+//            }
+//        }
+//        for(WOutboundDetail detail : detailList){
+//            wOutboundDetailExtMapper.insert(detail);
+//            //璁板綍搴撳瓨鍙樺姩璁板綍
+//            wStockRecordExtService.saveRecord(Constants.ONE,detail.getId(),user);
+//            if(detail.getWOutboundRecordInList()!=null){
+//                for(WOutboundRecord r : detail.getWOutboundRecordInList()){
+//                    r.setDetailId(detail.getId());
+//                    wOutboundRecordExtMapper.insert(r);
+//                }
+//            }
+//        }
+//        if(Constants.formatIntegerNum(mp.getHasProduceNum()) >Constants.formatIntegerNum(mp.getPlanNum())){
+//            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠殑浜у嚭鏁伴噺涓嶈兘澶т簬宸ュ崟璁″垝鏁伴噺锛�");
+//        }
+//    }
+
+
     private void dealAppliancePro(Workorder mp
             , LoginUserInfo user
             , List<WorkorderRecordExtListVO> allRecordList
@@ -801,78 +953,10 @@
                 }
                 //濡傛灉鏄骇鍑�
                 mp.setHasProduceNum(Constants.formatBigdecimal(tModel.getNum()).intValue()+Constants.formatIntegerNum(mp.getHasProduceNum()));
-                if(tModel.getDoneType() == null){
-                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝宸ヨ鍣ㄥ叿銆�"+tModel.getAmodel().getCode()+"銆戜骇鍑鸿川閲忓睘鎬т负绌猴紝鏃犳硶鎶ュ伐锛�");
-                }
-                if(!Constants.equalsInteger(tModel.getDoneType(),Constants.ZERO)){
-                    //濡傛灉涓嶈壇锛岀疮璁″伐鍗曠殑涓嶈壇浜у嚭
-                    mp.setUnqualifiedNum(Constants.formatIntegerNum(mp.getUnqualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue()));
-                }else{
-                    //濡傛灉鏄悎鏍硷紝绱宸ュ崟鐨勫悎鏍兼暟閲�
-                    mp.setQualifiedNum(Constants.formatIntegerNum(mp.getQualifiedNum())+(Constants.formatBigdecimal(tModel.getNum()).intValue()));
-                }
-
-                //鐗╂枡+鎵规+宸ュ簭+璐ㄩ噺灞炴�у幓閲�
-                WOutboundDetail detail =getWoutbondDetailByList(tModel,detailList);
-                if(detail!=null){
-                    detail.setNum(Constants.formatBigdecimal(detail.getNum()).add(tModel.getNum()));
-                }else{
-                    detail = new WOutboundDetail();
-                    detail.setDeleted(Constants.ZERO);
-                    detail.setCreateTime(DateUtil.getCurrentDate());
-                    detail.setCreateUser(user.getId());
-                    detail.setOutboundId(outbound.getId());
-                    detail.setRootDepartId(outbound.getRootDepartId());
-                    detail.setWarehouseId(outbound.getWarehouseId());
-                    detail.setLocationId(mp.getFinishWarehouseLocationId());
-                    detail.setNum(tModel.getNum());
-                    detail.setStatus(Constants.ONE);
-                    detail.setDoneNum(tModel.getNum());
-                    detail.setDoneDate(new Date());
-                    detail.setUnitId(tModel.getUnitId());
-                    detail.setBatch(tModel.getMaterialBatch());
-                    detail.setProcedureId(tModel.getProcedureId());
-                    detail.setMaterialId(tModel.getMaterialId());
-                    detail.setQualityType(tModel.getDoneType());
-                    detail.setWOutboundRecordInList(new ArrayList<>());
-                    detailList.add(detail);
-                }
-
-                WOutboundRecord record = new WOutboundRecord();
-                record.setDeleted(Constants.ZERO);
-                record.setCreateTime(DateUtil.getCurrentDate());
-                record.setCreateUser(user.getId());
-                record.setAppliancesId(tModel.getAppliancesId());
-                record.setBatch(detail.getBatch());
-                record.setRootDepartId(mp.getRootDepartId());
-                record.setNum(tModel.getNum());
-                record.setOutboundId(detail.getOutboundId());
-                record.setUnitId(detail.getUnitId());
-                record.setWarehouseId(detail.getWarehouseId());
-                record.setMaterialId(detail.getMaterialId());
-                record.setProcedureId(detail.getProcedureId());
-                record.setLocationId(detail.getLocationId());
-                record.setQualityType(detail.getQualityType());
-                detail.getWOutboundRecordInList().add(record);
-
-                WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
-                        tModel.getProcedureId(),tModel.getDoneType(),stockList);
-                if(stock!=null){
-                    //濡傛灉搴撳瓨瀵硅薄宸插瓨鍦紝鐩存帴澧炲姞瀵瑰簲鐨勫簱瀛橀噺
-                    stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum())));
-                }else{
-                    stock = new WStock();
-                    stock.setMaterialId(detail.getMaterialId());
-                    stock.setBatch(detail.getBatch());
-                    stock.setWarehouseId(outbound.getWarehouseId());
-                    stock.setLocationId(mp.getFinishWarehouseLocationId());
-                    stock.setUnitId(detail.getUnitId());
-                    stock.setNum(Constants.formatBigdecimal(tModel.getNum()));
-                    stock.setProcedureId(tModel.getProcedureId());
-                    stock.setQualityType(tModel.getDoneType());
-                    //寰呮洿鏂板簱瀛樹俊鎭�
-                    stockList.add(stock);
-                }
+                //浜у嚭鍚堟牸
+               this.createOutDetail(user,outbound,mp,tModel,Constants.ZERO,detailList,stockList);
+               //浜у嚭涓嶈壇
+                this.createOutDetail(user,outbound,mp,tModel,Constants.ONE,detailList,stockList);
             }
         }
         for(WOutboundDetail detail : detailList){
@@ -890,6 +974,68 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ュ伐鍗曠殑浜у嚭鏁伴噺涓嶈兘澶т簬宸ュ崟璁″垝鏁伴噺锛�");
         }
     }
+
+
+    public void createOutDetail(LoginUserInfo user,WOutbound outbound,Workorder mp,WorkorderRecordExtListVO tModel,Integer doneType
+            ,List<WOutboundDetail> detailList,List<WStock> stockList ){
+        //鐗╂枡+鎵规+宸ュ簭+璐ㄩ噺灞炴�у幓閲�
+        WOutboundDetail detail =  new WOutboundDetail();
+        detail.setDeleted(Constants.ZERO);
+        detail.setCreateTime(DateUtil.getCurrentDate());
+        detail.setCreateUser(user.getId());
+        detail.setOutboundId(outbound.getId());
+        detail.setRootDepartId(outbound.getRootDepartId());
+        detail.setWarehouseId(outbound.getWarehouseId());
+        detail.setLocationId(mp.getFinishWarehouseLocationId());
+        detail.setNum(BigDecimal.valueOf(doneType.equals(Constants.ZERO)?tModel.getQualifiedNum():tModel.getUnqualifiedNum()));
+        detail.setStatus(Constants.ONE);
+        detail.setDoneNum(detail.getNum());
+        detail.setDoneDate(new Date());
+        detail.setUnitId(tModel.getUnitId());
+        detail.setBatch(tModel.getMaterialBatch());
+        detail.setProcedureId(tModel.getProcedureId());
+        detail.setMaterialId(tModel.getMaterialId());
+        detail.setQualityType(doneType);
+        detail.setWOutboundRecordInList(new ArrayList<>());
+        detailList.add(detail);
+
+        WOutboundRecord record = new WOutboundRecord();
+        record.setDeleted(Constants.ZERO);
+        record.setCreateTime(DateUtil.getCurrentDate());
+        record.setCreateUser(user.getId());
+        record.setAppliancesId(tModel.getAppliancesId());
+        record.setBatch(detail.getBatch());
+        record.setRootDepartId(mp.getRootDepartId());
+        record.setNum(tModel.getNum());
+        record.setOutboundId(detail.getOutboundId());
+        record.setUnitId(detail.getUnitId());
+        record.setWarehouseId(detail.getWarehouseId());
+        record.setMaterialId(detail.getMaterialId());
+        record.setProcedureId(detail.getProcedureId());
+        record.setLocationId(detail.getLocationId());
+        record.setQualityType(detail.getQualityType());
+        detail.getWOutboundRecordInList().add(record);
+
+        WStock stock = getFromStockList(mp.getFinishWarehouseLocationId(),detail.getWarehouseId(),detail.getMaterialId(),detail.getBatch(),
+                tModel.getProcedureId(),tModel.getDoneType(),stockList);
+        if(stock!=null){
+            //濡傛灉搴撳瓨瀵硅薄宸插瓨鍦紝鐩存帴澧炲姞瀵瑰簲鐨勫簱瀛橀噺
+            stock.setNum(Constants.formatBigdecimal(stock.getNum()).add(Constants.formatBigdecimal(tModel.getNum())));
+        }else{
+            stock = new WStock();
+            stock.setMaterialId(detail.getMaterialId());
+            stock.setBatch(detail.getBatch());
+            stock.setWarehouseId(outbound.getWarehouseId());
+            stock.setLocationId(mp.getFinishWarehouseLocationId());
+            stock.setUnitId(detail.getUnitId());
+            stock.setNum(Constants.formatBigdecimal(tModel.getNum()));
+            stock.setProcedureId(tModel.getProcedureId());
+            stock.setQualityType(tModel.getDoneType());
+            //寰呮洿鏂板簱瀛樹俊鎭�
+            stockList.add(stock);
+        }
+    }
+
 
     private WStock initMaterialNum(Integer materialId, BigDecimal num) {
         WStock s = new WStock();
@@ -1111,7 +1257,52 @@
         return PageData.from(new PageInfo<>(result));
     }
 
-
+    @Override
+    public PageData<WStockExtListVO> choiceStockPageForPlans(PageWrap<QueryWStockDto> pageWrap,LoginUserInfo userInfo) {
+        Plans plans =plansExtMapper.selectById(pageWrap.getModel().getPlansId());
+        if(Objects.isNull(plans)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌宸ュ簭璁″垝淇℃伅锛�");
+        }
+        Device device = deviceExtMapper.selectById(pageWrap.getModel().getDeviceId());
+        if(Objects.isNull(plans)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌璁惧淇℃伅锛�");
+        }
+        //鏌ヨ骞堕獙璇佸伐鍗曚俊鎭�
+        this.getPlansAndValid(userInfo,plans);
+        //鏌ヨ鍏ㄩ儴bom缁勬垚鏁版嵁锛屽鏋滄湁BOM閰嶇疆锛屾寜鐓OM缁勬垚杩涜鎶曟枡锛屽鏋滄病鏈塀OM閰嶇疆锛屽垯鎶曟枡鐗╂枡涓哄緟鐢熶骇搴撲綅鐨勭墿鏂欐湰韬�
+        QueryBomDetailExtDTO bdparam = initBomParamForPlans(userInfo,plans);
+        List<BomDetailExtListVO> bomDetailList = null;
+        if(bdparam!=null){
+            bomDetailList = bomDetailExtMapper.selectList(bdparam);
+            List<Integer> materialDistributeId = bomDetailList.stream().map(BomDetailExtListVO::getMaterialId).collect(Collectors.toList());
+            pageWrap.getModel().setMaterialDistributeId(materialDistributeId);
+        }else{
+            //鏌ヨ鐗╂枡BOM淇℃伅
+            Bom bom = bomExtMapper.selectOne(new QueryWrapper<Bom>().eq("MATERIAL_ID",plans.getMaterialId()).eq("DELETED",Constants.ZERO).last(" limit 1 "));
+            if(Objects.isNull(bom)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌BOM淇℃伅锛�");
+            }
+            RouteProcedure currentRouteProcedure   = routeProcedureExtMapper.selectOne(new QueryWrapper<RouteProcedure>()
+                    .eq("ROUTE_ID",bom.getRouteId())
+                    .eq("PROCEDURE_ID",plans.getProcedureId())
+                    .last(" limit 1 ")
+            );
+            if(currentRouteProcedure!=null){
+                RouteProcedure routeProcedure   = routeProcedureExtMapper.selectOne(new QueryWrapper<RouteProcedure>()
+                        .eq("ROUTE_ID",currentRouteProcedure.getRouteId()).apply(" SORTNUM <  " + currentRouteProcedure.getSortnum() ).eq("STATUS",Constants.ONE).orderByDesc(" SORTNUM ").last(" limit 1  ")
+                );
+                if(Objects.isNull(routeProcedure)){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈煡璇㈠埌鐢熶骇鐗╂枡涓婁竴姝ュ伐搴忎俊鎭紒");
+                }
+                pageWrap.getModel().setProcedureId(routeProcedure.getProcedureId());
+                pageWrap.getModel().setMaterialId(plans.getMaterialId());
+            }
+        }
+        pageWrap.getModel().setLocationId(device.getProduceWarehouseLocationId());
+        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
+        List<WStockExtListVO> result = wStockExtMapper.choiceStockList(pageWrap.getModel());
+        return PageData.from(new PageInfo<>(result));
+    }
 
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -1170,18 +1361,21 @@
         workorderRecord.setSalaryPrice(salaryParam.getSalary());
         workorderRecord.setSalaryType(salaryParam.getType());
         workorderRecord.setSalaryUnqualified(salaryParam.getUnqualified());
-
         //璁′欢宸ヨ祫
         if(salaryParam.getType().equals(Constants.ZERO)){
             workorderRecord.setSalaryNum(salaryParam.getNum());
-            workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ZERO?num:createWorkorderRecordDTO.getUnQualifiedNum()));
+            workorderRecord.setSalary(salaryParam.getSalary().multiply(salaryParam.getUnqualified()==Constants.ONE?num:createWorkorderRecordDTO.getQualifiedNum()));
         }else{
             workorderRecord.setDuration(createWorkorderRecordDTO.getDuration());
             workorderRecord.setSalary(BigDecimal.valueOf(createWorkorderRecordDTO.getDuration()).multiply(salaryParam.getSalary()).divide(new BigDecimal(3600)));
         }
-
+        //鎻掑叆宸ュ崟鎿嶄綔璁板綍锛屽苟涓斿垽鏂槸鍚︽洿鏀逛负宸ュ崟鐨勭姸鎬併�愮敓浜т腑銆�
+        updateOrderInfo(loginUserInfo,workorder,Constants.WORKORDER_HISTORY_STATUS.produce);
         workorderRecordExtMapper.insert(workorderRecord);
         return workorderRecord;
     }
+    
+    
+    
 
 }
diff --git a/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java b/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
index 8a1ca5c..83c9733 100644
--- a/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/system/impl/WxLoginServiceImpl.java
@@ -134,7 +134,7 @@
             loginLog.setSuccess(Boolean.TRUE);
             systemLoginLogService.create(loginLog);
             String session = (String)subject.getSession().getId();
-            wxLoginVO.setLoginStatus(Constants.ONE);
+            wxLoginVO.setLoginStatus(Constants.ZERO);
             wxLoginVO.setSession(session);
             return wxLoginVO;
         }catch (AuthenticationException e) {
diff --git a/server/src/main/resources/mappers/PlansExtMapper.xml b/server/src/main/resources/mappers/PlansExtMapper.xml
index 7e4878d..3556f9a 100644
--- a/server/src/main/resources/mappers/PlansExtMapper.xml
+++ b/server/src/main/resources/mappers/PlansExtMapper.xml
@@ -123,7 +123,7 @@
   <select id="selectByModel" parameterType="doumeemes.dao.ext.dto.QueryPlansExtDTO" resultMap="PlansExtListVO">
   SELECT
   `a`.*
-    ,(  SELECT sum( b.PLAN_NUM ) FROM  workorder b  WHERE b.deleted = 0 AND b.PLAN_ID = a.id and b.status !=6) AS workorderDistributNum
+    ,ifnull((  SELECT sum( b.PLAN_NUM ) FROM  workorder b  WHERE b.deleted = 0 AND b.PLAN_ID = a.id and b.status not in (7,8) ),0) AS workorderDistributNum
     from plans a
     <where>
     <if test="id != null">
@@ -363,11 +363,13 @@
       `usermodel`.`SYSTEMID` AS USERMODEL_SYSTEMID,
       `usermodel`.`INVALID_TIME` AS USERMODEL_INVALID_TIME,
       `usermodel`.`TYPE` AS USERMODEL_TYPE
-    ,(  SELECT sum( b.PLAN_NUM ) FROM  workorder b  WHERE b.deleted = 0 AND b.PLAN_ID = a.id  and b.status !=6) AS workorderDistributNum ,
+    , ifnull((  SELECT sum( b.PLAN_NUM ) FROM  workorder b  WHERE b.deleted = 0  AND b.PLAN_ID = a.id  and b.status !=6),0) AS workorderDistributNum ,
     `mmodel`.name as materialName , `mmodel`.code as materialCode ,`fmodel`.name as factoryName , `pmodel`.name as produceName ,
       concat(`usermodel`.realname,' ',`usermodel`.mobile) as planUserName , `umodel`.name as unitName ,
-      w.PLAN_CODE as workPlanCode
-
+      w.PLAN_CODE as workPlanCode , w.SALESORDER as salesOrder ,
+      w.START_DATE as workPlanStartDate  , w.PLAN_DATE as workPlanEndDate,
+      w.`PLAN_DATE` as workPlanPlanDate,
+      ifnull((select  sum(worder.PLAN_NUM) from workorder worder where worder.PLAN_ID = a.id and worder.STATUS not in (7,8)  ),0) as produceNum
     FROM `plans` `a`
     LEFT JOIN `department` `dmodel` ON a.DEPART_ID=dmodel.ID
     LEFT JOIN `material_distribute` `mdmodel` ON a.MATERIAL_ID=mdmodel.ID
@@ -420,6 +422,12 @@
       </if>
       <if test="planDate != null">
         AND `a`.`PLAN_DATE` = #{planDate}
+      </if>
+      <if test="planDateStartDate != null and planDateStartDate != ''">
+        AND `a`.`PLAN_DATE` >= concat(#{planDateStartDate},' 00:00:00')
+      </if>
+      <if test="planDateEndDate != null and planDateEndDate != ''">
+        AND concat(#{planDateEndDate},' 23:59:59') >= `a`.`PLAN_DATE`
       </if>
       <if test="materialId != null">
         AND `a`.`MATERIAL_ID` = #{materialId}
@@ -763,12 +771,12 @@
       <if test="usermodelInvalidTime != null">
         AND `usermodel`.`INVALID_TIME` = #{usermodelInvalidTime}
       </if>
-      <if test="startDate != null">
-        AND `a`.`PLAN_DATE` >= #{startDate}
-      </if>
-      <if test="endDate != null">
-        AND   #{endDate} >= `a`.`PLAN_DATE`
-      </if>
+<!--      <if test="startDate != null">-->
+<!--        AND `a`.`PLAN_DATE` >= #{startDate}-->
+<!--      </if>-->
+<!--      <if test="endDate != null">-->
+<!--        AND   #{endDate} >= `a`.`PLAN_DATE`-->
+<!--      </if>-->
       <if test="mixParam != null and mixParam!=''">
         AND  (mmodel.name like concat('%',#{mixParam},'%') or mmodel.code like concat('%',#{mixParam},'%') or pmodel.name like concat('%',#{mixParam},'%'))
       </if>
diff --git a/server/src/main/resources/mappers/SalaryParamMapper.xml b/server/src/main/resources/mappers/SalaryParamMapper.xml
index 45c8024..34d04dd 100644
--- a/server/src/main/resources/mappers/SalaryParamMapper.xml
+++ b/server/src/main/resources/mappers/SalaryParamMapper.xml
@@ -13,14 +13,16 @@
         from
             salary_param sp
         LEFT JOIN procedures p on p.ID = sp.PROCEDURE_ID
-        LEFT JOIN material m on m.ID = sp.MATERIAL_ID
+        LEFT JOIN material_distribute md on md.ID = sp.MATERIAL_ID
+        LEFT JOIN material m on m.ID = md.MATERIAL_ID
         LEFT JOIN `system_user` su  on su.ID = sp.CREATE_USER
         where
         sp.DELETED = 0
         <if test="model.keyWord != null and model.keyWord != ''">
-           ( and  p`NAME` like concat('%',#{model.keyWord},'%')
-            or   p.`CODE` = #{model.keyWord})</if>
+           and  ( m.`NAME` like concat('%',#{model.keyWord},'%')
+            or   m.`CODE` = #{model.keyWord})</if>
         <if test="model.procedureName != null and model.procedureName != ''"> and p.`NAME` like concat('%',#{model.procedureName},'%')</if>
         <if test="model.type != null"> and sp.`TYPE` = #{model.type}</if>
+        order by sp.CREATE_TIME desc
     </select>
 </mapper>
diff --git a/server/src/main/resources/mappers/UserDeviceExtMapper.xml b/server/src/main/resources/mappers/UserDeviceExtMapper.xml
index 7259c9f..6b93738 100644
--- a/server/src/main/resources/mappers/UserDeviceExtMapper.xml
+++ b/server/src/main/resources/mappers/UserDeviceExtMapper.xml
@@ -201,7 +201,7 @@
         AND `umodel`.`ROOT_DEPART_ID` = #{umodelRootDepartId}
       </if>
       <if test="umodelName != null and umodelName != ''">
-        AND `umodel`.`NAME` = #{umodelName}
+        AND `umodel`.`NAME` like concat('%', #{umodelName} , '%')
       </if>
       <if test="umodelPhone != null and umodelPhone != ''">
         AND `umodel`.`PHONE` = #{umodelPhone}
diff --git a/server/src/main/resources/mappers/WorkPlansExtMapper.xml b/server/src/main/resources/mappers/WorkPlansExtMapper.xml
index 5ff0a6b..82f864a 100644
--- a/server/src/main/resources/mappers/WorkPlansExtMapper.xml
+++ b/server/src/main/resources/mappers/WorkPlansExtMapper.xml
@@ -156,10 +156,10 @@
         AND `a`.`SALESORDER` like concat('%',#{salesorder},'%')
       </if>
       <if test="startDateStart != null and startDateStart != ''">
-        AND `a`.`START_DATE` >= concat(#{planDateStart},' 00:00:00')
+        AND `a`.`START_DATE` >= concat(#{startDateStart},' 00:00:00')
       </if>
       <if test="startDateEnd != null and startDateEnd != ''">
-        AND concat(#{planDateEnd},' 23:59:59') >= `a`.`START_DATE`
+        AND concat(#{startDateEnd},' 23:59:59') >= `a`.`START_DATE`
       </if>
       <if test="planDateStart != null and planDateStart != ''">
         AND `a`.`PLAN_DATE` >= concat(#{planDateStart},' 00:00:00')
@@ -168,7 +168,7 @@
         AND concat(#{planDateEnd},' 23:59:59') >= `a`.`PLAN_DATE`
       </if>
     </where>
-        order by a.PLAN_DATE desc, a.CREATE_TIME  desc
+        order by a.START_DATE desc, a.CREATE_TIME  desc
   </select>
 
 
diff --git a/server/src/main/resources/mappers/WorkorderRecordExtMapper.xml b/server/src/main/resources/mappers/WorkorderRecordExtMapper.xml
index c8fb3d7..edb56c3 100644
--- a/server/src/main/resources/mappers/WorkorderRecordExtMapper.xml
+++ b/server/src/main/resources/mappers/WorkorderRecordExtMapper.xml
@@ -453,11 +453,11 @@
     <if test="materialName != null and materialName !=''">
       AND  (c.`name` like concat('%', #{materialName},'%') or c.`code` like concat('%', #{materialName},'%'))
     </if>
-    <if test="startDate != null">
-      AND  a.`CREATE_TIME` >= #{startDate}
+    <if test="startDate != null and startDate != ''">
+      AND  a.`CREATE_TIME` >= concat(#{startDate},' 00:00:00')
     </if>
-    <if test="endDate != null">
-      AND   #{endDate} >= a.`CREATE_TIME`
+    <if test="endDate != null and endDate != ''">
+      AND   concat(#{endDate},' 23:59:59') >= a.`CREATE_TIME`
     </if>
     <if test="userId != null">
       AND  a.`CREATE_USER` = #{userId}
@@ -479,10 +479,10 @@
       AND  `CREATE_USER` = #{userId}
     </if>
     <if test="startDate != null">
-      AND  a.`CREATE_TIME` >= #{startDate}
+      AND  `CREATE_TIME` >= #{startDate}
     </if>
     <if test="endDate != null">
-      AND   #{endDate} >= a.`CREATE_TIME`
+      AND   #{endDate} >= `CREATE_TIME`
     </if>
     group by  `CREATE_USER`
    <!-- order by `CREATE_TIME` desc-->
diff --git a/web_standard/.env.development b/web_standard/.env.development
index 8b6e81c..1d2c18a 100644
--- a/web_standard/.env.development
+++ b/web_standard/.env.development
@@ -13,16 +13,15 @@
 # 鎺ュ彛鍓嶇紑
 VUE_APP_API_PREFIX = ''
 
-# 娴嬭瘯鏈嶅姟鍣�
-# VUE_APP_BASE_URL = 'http://139.186.142.91:10012/'
-# 姹囨櫤
-# VUE_APP_BASE_URL = 'https://106.14.220.133:10012/'
-
 # 鐒︽澗
 # VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
 
 # 浠诲悍
 VUE_APP_BASE_URL = 'http://192.168.0.15:10021/'
 
-# VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
+# 姹熻悕
+# VUE_APP_BASE_URL = 'http://192.168.0.35:10021/'
+
+# 娴嬭瘯鏈嶅姟鍣�
+VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
 
diff --git a/web_standard/.env.production b/web_standard/.env.production
index b412c72..b575403 100644
--- a/web_standard/.env.production
+++ b/web_standard/.env.production
@@ -8,21 +8,9 @@
 VUE_APP_ROUTER_MODE = 'hash'
 
 # 椤圭洰涓婁笅鏂囪矾寰�
-# VUE_APP_CONTEXT_PATH = '/doumeeplant_web/'
 VUE_APP_CONTEXT_PATH = '/web/'
 
 # 鎺ュ彛鍓嶇紑
 VUE_APP_API_PREFIX = '/doumeeplant'
-
-# 娴嬭瘯鏈嶅姟鍣�
-# VUE_APP_BASE_URL = 'http://139.186.142.91:10012/'
-# 婕旂ず鏈嶅姟鍣�
-# VUE_APP_BASE_URL = 'http://121.41.112.139:10012/'
-# 姝e紡鐜
-# VUE_APP_BASE_URL = 'http://127.0.0.1:10012/'
-#鑹句附鏍兼柉 https://hsky.doumee.com/doumeeplant_api/doc.html
-# VUE_APP_BASE_URL = 'https://hsky.doumee.com/doumeeplant_api/'
-
-# VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
 
 VUE_APP_BASE_URL = 'https://www.mes.red/doumeeplant/'
diff --git a/web_standard/coderd.json b/web_standard/coderd.json
index 12a424d..36dcaf5 100644
--- a/web_standard/coderd.json
+++ b/web_standard/coderd.json
@@ -4,7 +4,7 @@
     "alias": "eva",
     "command": "page",
     "option": {
-      "resources": "workorder_check_attr_ext"
+      "resources": "salary_param"
     }
   }
 }
\ No newline at end of file
diff --git a/web_standard/public/salary_import_template.xlsx b/web_standard/public/salary_import_template.xlsx
new file mode 100644
index 0000000..8d89b12
--- /dev/null
+++ b/web_standard/public/salary_import_template.xlsx
Binary files differ
diff --git a/web_standard/src/api/business/salaryParam.js b/web_standard/src/api/business/salaryParam.js
new file mode 100644
index 0000000..6a34dd9
--- /dev/null
+++ b/web_standard/src/api/business/salaryParam.js
@@ -0,0 +1,40 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/salaryParam/page', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/business/salaryParam/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/salaryParam/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/salaryParam/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/salaryParam/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+  return request.get('/business/salaryParam/delete/batch', {
+    params: {
+      ids
+    }
+  })
+}
diff --git a/web_standard/src/api/ext/salaryStatistic.js b/web_standard/src/api/ext/salaryStatistic.js
new file mode 100644
index 0000000..039e54e
--- /dev/null
+++ b/web_standard/src/api/ext/salaryStatistic.js
@@ -0,0 +1,16 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/ext/workorderRecordExt/salaryStatistic', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/ext/workorderRecordExt/exportSalaryStatistics', data, {
+    trim: true,
+    download: true
+  })
+}
diff --git a/web_standard/src/api/ext/userSalary.js b/web_standard/src/api/ext/userSalary.js
new file mode 100644
index 0000000..c04cc1c
--- /dev/null
+++ b/web_standard/src/api/ext/userSalary.js
@@ -0,0 +1,16 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/ext/workorderRecordExt/userSalary', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/ext/workorderRecordExt/exportUserSalary', data, {
+    trim: true,
+    download: true
+  })
+}
diff --git a/web_standard/src/assets/style/lib.css b/web_standard/src/assets/style/lib.css
index f05ad44..92404e1 100644
--- a/web_standard/src/assets/style/lib.css
+++ b/web_standard/src/assets/style/lib.css
@@ -115,6 +115,7 @@
 .success{ color: #70B603; }
 .waring{ color: #F59A23; }
 .error{ color: #f00; }
+.c1{color: #111}.c2{color: #222}.c3{ color: #333;}.c6{ color: #666;}.cc{ color: #ccc;}.cf{ color: #fff;}
 /* /deep/ .uicon-close .u-icon--right{ position: absolute; right: 30px; top: 30px; z-index: 999;} */
 .popCloseBtn{ position: absolute; width:50px; height:50px; right: 20px; top: 20px;}
 .fixedHeader{ position: absolute; left: 0; top: 0;}
diff --git a/web_standard/src/assets/style/style.scss b/web_standard/src/assets/style/style.scss
index 4d1e4fa..69c3973 100644
--- a/web_standard/src/assets/style/style.scss
+++ b/web_standard/src/assets/style/style.scss
@@ -89,7 +89,7 @@
 .el-date-editor--daterange.el-input__inner,
 .el-date-editor--timerange.el-input,
 .el-date-editor--timerange.el-input__inner {
-  width: 220px !important;
+  width: 240px !important;
 }
 
 .el-input__inner {
diff --git a/web_standard/src/components/business/OperaSalaryParamWindow.vue b/web_standard/src/components/business/OperaSalaryParamWindow.vue
new file mode 100644
index 0000000..9d2c21a
--- /dev/null
+++ b/web_standard/src/components/business/OperaSalaryParamWindow.vue
@@ -0,0 +1,254 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="璁′环鏂瑰紡" prop="type">
+        <el-select v-model="form.type" placeholder="璇烽�夋嫨璁′环鏂瑰紡" clearable>
+          <el-option
+            v-for="item in type"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="宸ュ巶" prop="departId">
+        <el-select v-model="form.departId" placeholder="璇烽�夋嫨宸ュ巶" :disabled="isEdit" clearable @change="selectFactoey">
+          <el-option
+            v-for="item in factories"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鐗╂枡" prop="materialId">
+        <el-select v-model="form.materialId" placeholder="璇烽�夋嫨鐗╂枡" :disabled="isEdit" clearable @change="selectMaterial">
+          <el-option
+            v-for="item in materials"
+            :key="item.realMaterialId"
+            :label="item.mmodel.name"
+            :value="item.realMaterialId"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="宸ュ簭" prop="procedureId">
+        <el-select v-model="form.procedureId" placeholder="璇烽�夋嫨宸ュ簭" :disabled="isEdit" clearable>
+          <el-option
+            v-for="item in productes"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="宸ヨ祫鍗曚环锛堝厓)" prop="salary">
+        <el-input v-model="form.salary" placeholder="璇疯緭鍏ュ伐璧勫崟浠凤紙鍏�)" @input="inputZAction(form, 'salary')" v-trim/>
+      </el-form-item>
+      <el-form-item label="鏍囧噯鏁堢巼" prop="num">
+        <div style="display: flex;">
+          <el-input v-model="form.num" v-trim/>/
+          <el-input v-model="form.hours" v-trim/><div class="unit">灏忔椂</div>
+          <el-input v-model="form.minute" v-trim/><div class="unit">鍒嗛挓</div>
+          <el-input v-model="form.second" v-trim/><div>绉�</div>
+        </div>
+      </el-form-item>
+      <el-form-item label="涓嶈壇鍝佹槸鍚﹁鍏�" prop="unqualified">
+        <el-switch v-model="form.unqualified" :inactive-value="0" :active-value="1"></el-switch>
+        <!-- <el-input v-model="form.unqualified" placeholder="璇疯緭鍏ヤ笉鑹搧鏄惁璁″叆 0鍚� 1鏄�" v-trim/> -->
+      </el-form-item>
+      
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { getDepartmentListByConditon } from '@/api/ext/departmentExt'
+import { getBomMaterialList } from '@/api/ext/bomExt'
+import { routeExt as proceList } from '@/api/ext/routeProcedureExt'
+import { numRule } from '@/utils/form'
+export default {
+  name: 'OperaSalaryParamWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        materialId: '',
+        createUser: '',
+        createTime: '',
+        updateUser: '',
+        updateTime: '',
+        remark: '',
+        rootDepartId: '',
+        departId: '',
+        procedureId: '',
+        bomId: '',
+        salary: '',
+        num: '',
+        times: '',
+        hours: '',
+        minute: '',
+        second: '',
+        unqualified: 0,
+        type: ''
+      },
+      isEdit: false,
+      type: [
+        { label: '璁′欢', value: 0 },
+        { label: '璁℃椂', value: 1 },
+      ],
+      factories: [],
+      materials: [],
+      productes: [],
+      // 楠岃瘉瑙勫垯
+      rules: {
+        departId: [
+          { required: true, validator: numRule, message: '璇烽�夋嫨宸ュ巶', tigger: 'change' }
+        ],
+        materialId: [
+          { required: true, validator: numRule, message: '璇烽�夋嫨鐗╂枡', tigger: 'change' }
+        ],
+        procedureId: [
+          { required: true, validator: numRule, message: '璇烽�夋嫨宸ュ簭', tigger: 'change' }
+        ],
+        salary: [
+          { required: true, validator: numRule, message: '璇疯緭鍏ュ伐璧勫崟浠�', tigger: 'blur' }
+        ],
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/salaryParam',
+      'field.id': 'id'
+    })
+    this.initData()
+  },
+  methods: {
+    open (title, target) {
+      this.title = title
+      this.visible = true
+      this.isEdit = false
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+          this.form.times = ''
+          this.form.second = ''
+          this.form.minute = ''
+          this.form.hours = ''
+          this.form.departId = this.factories[0]?this.factories[0].id:''
+          this.selectFactoey(this.form.departId)
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        this.isEdit = true
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        let { times } = target
+        this.form.second = +times%60
+        let lesMin = Math.floor(+times/60)
+        this.form.minute = lesMin%60
+        this.form.hours = Math.floor(lesMin/60)
+        this.selectFactoey(this.form.departId, true)
+        
+      })
+    },
+    initData() {
+      getDepartmentListByConditon({ type: 1 })
+        .then(res => {
+          this.factories = res
+        })
+        .catch(err => {
+          console.log(err)
+        })
+    },
+    selectFactoey (v, isEdit=false) {
+      
+      // console.log(v)
+      if (!isEdit) {
+        this.materials = []
+        this.form.materialId = ''
+        this.form.procedureId = ''
+        this.productes = []
+      }
+      getBomMaterialList({ departId: v })
+        .then(res => {
+          // console.log(res)
+          this.materials = res
+          // if (!isEdit) {
+          //   this.form.materialId = res[0]?res[0].materialId:''
+          // }
+          // this.selectMaterial(this.form.materialId)
+        })
+        .catch(err => {
+          console.log(err)
+        })
+    },
+    selectMaterial (id, isEdit) {
+     
+      let routeId;
+      for (const item of this.materials) {
+        if (item.realMaterialId === id) {
+          routeId = item.routeId
+        }
+      }
+      proceList(routeId)
+        .then(res => {
+          // console.log(res)
+          this.productes = res.proceList
+          if (!isEdit) {
+            // debugger
+            this.form.procedureId = this.productes[0]?this.productes[0].id:''
+          }
+        }).catch(err => {
+          console.log(err)
+        })
+    },
+    // 2浣嶆湁鏁堥攢鍞紙姝o級
+    inputZAction(item, key) {
+      item[key] = item[key].replace(/[^\d.]/g, '')
+                      .replace(/\.{2,}/g, '.')
+                      .replace('.', '$#$')
+                      .replace(/\./g, '')
+                      .replace('$#$', '.')
+                      .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
+                      .replace(/^\./g, '')
+    },
+    confirm () {
+      // console.log((+this.form.hours) * 3600);
+      // console.log((+this.form.minute) * 60);
+      // console.log(this.form.second);
+      this.form.times = (+this.form.hours) * 3600 + (+this.form.minute)* 60 + (+this.form.second)
+      if (this.form.id == null || this.form.id === '') {
+        this.__confirmCreate()
+        return
+      }
+      this.__confirmEdit()
+    },
+  },
+}
+</script>
+
+<style>
+.unit {
+  white-space: nowrap;
+}
+</style>
diff --git a/web_standard/src/components/common/Header.vue b/web_standard/src/components/common/Header.vue
index ebab123..82597f4 100644
--- a/web_standard/src/components/common/Header.vue
+++ b/web_standard/src/components/common/Header.vue
@@ -8,14 +8,18 @@
           {{title}}
         </h2>
         <div class="user">
-          <div class="user_help" @click="jumpWord">
-            <img src="@/assets/images/ic_help@2x.png" alt="" />
-            <span>甯姪鏂囨。</span>
+          <div class="help" @click="jumpWord">
+            <div class="user_help">
+              <img src="@/assets/images/ic_help@2x.png" alt="" />
+              <span>甯姪鏂囨。</span>
+            </div>
+            <span class="ml5 mr5">|</span>
+            <span>浼佷笟浠g爜锛� {{ tempId }}</span>
           </div>
-          <div style="margin-right: 10px;">浼佷笟浠g爜锛� {{ tempId }}</div>
+          <!-- <div style="margin-right: 10px;">浼佷笟浠g爜锛� {{ tempId }}</div> -->
           <el-dropdown trigger="click" style="margin-right: 20px;" v-userState @command="select">
             <span class="el-dropdown-link">
-            {{ tempC }}<i class="el-icon-arrow-down el-icon--right"></i>
+            <span class="c2 f16">{{ tempC }}</span><i class="el-icon-arrow-down el-icon--right"></i>
             </span>
             <el-dropdown-menu slot="dropdown">
               <el-dropdown-item v-for="(item, index) in cList" :key="index" :command='item.id'>{{ item.name }}</el-dropdown-item>
@@ -131,7 +135,7 @@
   created () {
     if (this.userInfo.curComDepartment) {
       this.tempC = this.userInfo.curComDepartment.name
-      this.tempId = this.userInfo.curComDepartment.id
+      this.tempId = this.userInfo.company.id
     }
     getDepartmentListByConditon({
       type: 0
@@ -276,30 +280,41 @@
       // width: 30%;
       flex-shrink: 0;
       // text-align: right;
+      vertical-align: middle;
       display: flex;
       align-items: center;
-      .user_help {
-        width: 111px;
-        height: 36px;
+      .help {
         display: flex;
+        height: 29px;
+        line-height: 38px;
         align-items: center;
         justify-content: center;
-        background: #F7F7F7;
-        border-radius: 4px;
+        vertical-align: middle;
         margin-right: 30px;
-        cursor: pointer;
-        img {
-          width: 16px;
-          height: 16px;
-          margin-right: 7px !important;
-        }
         span {
-          font-size: 16px;
+          font-size: 12px;
           font-family: PingFangSC-Regular, PingFang SC;
           font-weight: 400;
+          vertical-align: middle;
           color: #666666;
         }
+        .user_help {
+          // width: 111px;
+          
+          // background: #F7F7F7;
+         
+          
+          cursor: pointer;
+          img {
+            width: 16px;
+            height: 16px;
+            margin-right: 7px !important;
+            vertical-align: middle;
+          }
+          
+        }
       }
+      
       .el-dropdown {
         flex-shrink: 0;
         top: 2px;
diff --git a/web_standard/src/components/ext/OperaWorkorderDetailWindow.vue b/web_standard/src/components/ext/OperaWorkorderDetailWindow.vue
index a189878..a5bfa91 100644
--- a/web_standard/src/components/ext/OperaWorkorderDetailWindow.vue
+++ b/web_standard/src/components/ext/OperaWorkorderDetailWindow.vue
@@ -1,28 +1,23 @@
 <template>
-  <GlobalWindow
-    :title="title"
-    width="1182px"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    @confirm="confirm"
-  >
+  <GlobalWindow :title="title" width="1182px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
     <div style="min-width:1150px">
       <el-form :model="form" ref="form" label-width="100px" label-suffix="锛�" inline>
         <div style="margin-bottom:15px">
           <span class="text-code">{{ form.procedureName + ' | ' + form.mmodel.name + ' ' + form.mmodel.code }}</span>
           <!-- 0宸插垱寤恒��1宸插鏂欍��2宸插畬宸ユ銆�3宸叉楠屻��4宸叉姤宸ャ�併��6宸插彇娑� -->
-          <span v-if="form.status==0" style="background-color: #305ED5;" class="status-log">宸插垱寤�</span>
-          <span v-else-if="form.status==6" style="background-color: #BBBBBB;" class="status-log">宸插彇娑�</span>
-          <span v-else style="background-color: #03AF76;" class="status-log">{{ form.status==1 ? '宸插鏂�' : form.status==2 ? '宸插畬宸ユ' : form.status==3 ? '宸叉楠�' : '宸叉姤宸�' }}</span>
+          <span v-if="form.status == 0" style="background-color: #305ED5;" class="status-log">宸插垱寤�</span>
+          <span v-else-if="form.status == 6" style="background-color: #BBBBBB;" class="status-log">宸插彇娑�</span>
+          <span v-else style="background-color: #03AF76;" class="status-log">{{ form.status == 1 ? '宸插鏂�' : form.status == 2 ?
+            '宸插畬宸ユ' : form.status == 3 ? '宸叉楠�' : '宸叉姤宸�' }}</span>
           <!-- <span v-if="form.status==3" style="background-color: #BBBBBB;" class="status-log">宸插彇娑�</span> -->
         </div>
-        <el-form-item label="宸ュ崟缂栧彿" prop="workorderCode" class="count-style" >
+        <el-form-item label="宸ュ崟缂栧彿" prop="workorderCode" class="count-style">
           {{ form.code }}
         </el-form-item>
-        <el-form-item label="鐢熶骇鏃ユ湡" prop="proTime" class="count-style" >
+        <el-form-item label="鐢熶骇鏃ユ湡" prop="proTime" class="count-style">
           {{ form.planDate }}
         </el-form-item>
-        <el-form-item label="鐢熶骇鎵规鍙�" prop="batch" class="count-style" >
+        <el-form-item label="鐢熶骇鎵规鍙�" prop="batch" class="count-style">
           {{ form.batch }}
         </el-form-item>
         <!-- <el-form-item label="璁″垝浜哄憳" prop="planUser" class="count-style" >
@@ -31,8 +26,8 @@
         <el-form-item label="璁″垝鏃ユ湡" prop="planDate" class="count-style" >
           {{ form.pmodel.createTime }}
         </el-form-item> -->
-        <el-form-item label="鐢熶骇鏁伴噺" prop="machine" class="count-style" >
-          {{ form.planNum ? (form.planNum + (form.umodel.name ? form.umodel.name : '')) : '0'  }}
+        <el-form-item label="鐢熶骇鏁伴噺" prop="machine" class="count-style">
+          {{ form.planNum ? (form.planNum + (form.umodel.name ? form.umodel.name : '')) : '0' }}
         </el-form-item>
         <!-- <el-form-item label="璁″垝鏁伴噺" prop="planNum" class="count-style" >
           {{ form.pmodel.num }}
@@ -43,42 +38,36 @@
         <!-- <el-form-item label="鍙戝竷鏃ユ湡" prop="startDate" class="count-style" >
           {{ form.pmodel.publishDate }}
         </el-form-item> -->
-        <el-form-item label="鍘熷伐鍗曞彿" prop="originWorkorderId" class="count-style" >
+        <el-form-item label="鍘熷伐鍗曞彿" prop="originWorkorderId" class="count-style">
           {{ form.originWorkorderId }}
         </el-form-item>
-        <el-form-item label="鍒嗛厤浜哄憳" prop="distributeUser" class="count-style" >
+        <el-form-item label="鍒嗛厤浜哄憳" prop="distributeUser" class="count-style">
           {{ form.userName }}
         </el-form-item>
-        <el-form-item label="鍒嗛厤鏃堕棿" prop="distributeTime" class="count-style" >
+        <el-form-item label="鍒嗛厤鏃堕棿" prop="distributeTime" class="count-style">
           {{ form.createTime }}
         </el-form-item>
-        <el-form-item label="鐢熶骇浜哄憳" prop="proUser" class="count-style" >
-  
+        <el-form-item label="鐢熶骇浜哄憳" prop="proUser" class="count-style">
+
           <div v-for="(item, index) in form.proUserList" :key="index">{{ item.proUserDepartName }}</div>
           <!-- {{ form.proUserName + (form.proUserDepartName ? ('/' + form.proUserDepartName) : '') }} -->
         </el-form-item>
-        <el-form-item label="鐢熶骇璁惧" prop="machine" class="count-style" >
-          {{ form.pgmodel && `銆�${form.pgmodel.code}銆�${form.pgmodel.name}`}}
+        <el-form-item label="鐢熶骇璁惧" prop="machine" class="count-style">
+          {{ form.pgmodel && `銆�${form.pgmodel.code}銆�${form.pgmodel.name}` }}
         </el-form-item>
-        
-        <el-form-item label="鍚堟牸鏁伴噺" prop="qualifiedNum" class="count-style" >
+
+        <el-form-item label="鍚堟牸鏁伴噺" prop="qualifiedNum" class="count-style">
           {{ form.qualifiedNum ? (form.qualifiedNum + (form.umodel.name ? form.umodel.name : '')) : '0' }}
         </el-form-item>
-        <el-form-item label="涓嶈壇鏁伴噺" prop="unqualifiedNum" class="count-style" >
+        <el-form-item label="涓嶈壇鏁伴噺" prop="unqualifiedNum" class="count-style">
           {{ form.unqualifiedNum ? (form.unqualifiedNum + (form.umodel.name ? form.umodel.name : '')) : '0' }}
         </el-form-item>
       </el-form>
       <!-- 琛ㄦ牸鍜屽垎椤� -->
       <el-tabs v-model="activeName" @tab-click="handleClick">
         <el-tab-pane label="鐢熶骇鎶ュ伐" name="first">
-          <el-table
-            v-loading="isSearch"
-            :data="report"
-            border
-            show-summary
-            :summary-method="getReportSummaries"
-          >
-          <!-- stripe -->
+          <el-table v-loading="isSearch" :data="report" border show-summary :summary-method="getReportSummaries">
+            <!-- stripe -->
             <el-table-column prop="createTime" label="鎶ュ伐鏃堕棿" min-width="140px"></el-table-column>
             <el-table-column label="鐢熶骇浜哄憳" show-overflow-tooltip min-width="100px">
               <template slot-scope="{row}">
@@ -86,11 +75,27 @@
               </template>
             </el-table-column>
             <el-table-column prop="machine" label="鐢熶骇璁惧" min-width="100px">
-              {{ form.pgmodel && `銆�${form.pgmodel.code}銆�${form.pgmodel.name}`}}
+              {{ form.pgmodel && `銆�${form.pgmodel.code}銆�${form.pgmodel.name}` }}
             </el-table-column>
             <!-- <el-table-column prop="amodel.code" label="宸ヨ瀹瑰櫒缂栧彿" show-overflow-tooltip="" min-width="100px"></el-table-column> -->
             <el-table-column prop="mmodel.name" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="100px"></el-table-column>
-            <el-table-column prop="doneType" label="鎶ュ伐绫诲瀷" min-width="60px">
+            <el-table-column prop="qualifiedNum" label="鍚堟牸鏁伴噺" min-width="100px">
+              <template slot-scope="{row}">
+                <span class="valid-style">{{ row.qualifiedNum + row.umodel.name }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="unqualifiedNum" label="涓嶈壇鏁伴噺" min-width="100px">
+              <template slot-scope="{row}">
+                <span class="unvalid-style">{{ row.unqualifiedNum + row.umodel.name }}</span>
+                <!-- <span :class="row.materialDonetype==0 ? 'valid-style' : ''">{{ row.num + row.umodel.name }}</span> -->
+              </template>
+            </el-table-column>
+            <el-table-column prop="num" label="鎶ュ伐鏁伴噺" min-width="100px">
+              <template slot-scope="{row}">
+                <span>{{ row.num + row.umodel.name }}</span>
+              </template>
+            </el-table-column>
+            <!-- <el-table-column prop="doneType" label="鎶ュ伐绫诲瀷" min-width="60px">
               <template slot-scope="{row}">
                 <span v-if="row.doneType==0" class="valid-style">鍚堟牸</span>
                 <span v-else-if="row.doneType==1" class="unvalid-style">涓嶈壇</span>
@@ -102,15 +107,11 @@
               <template slot-scope="{row}">
                 <span :class="row.doneType==0 ? 'valid-style' : (row.doneType==1 ? 'unvalid-style' :(row.doneType==2 ? 'scrap-style' : ''))">{{ row.num ? (row.num + (row.umodel.name ? row.umodel.name : '')) : '0' }}</span>
               </template>
-            </el-table-column>
+            </el-table-column> -->
           </el-table>
         </el-tab-pane>
         <el-tab-pane label="鐢熶骇妫�楠�" name="second">
-          <el-table
-            v-loading="isSearch"
-            :data="verify"
-            stripe
-            border>
+          <el-table v-loading="isSearch" :data="verify" stripe border>
             <el-table-column prop="code" label="妫�楠岃褰曠紪鍙�" min-width="140px"></el-table-column>
             <el-table-column prop="createTime" label="妫�楠屾椂闂�" min-width="140px"></el-table-column>
             <el-table-column prop="smodelRealName" label="妫�楠屼汉鍛�" min-width="100px"></el-table-column>
@@ -138,30 +139,23 @@
             </el-table-column>
             <el-table-column prop="devmodel.code" label="鐢熶骇璁惧" min-width="100px">
               <template slot-scope="{row}">
-                {{ row.devmodel && `銆�${row.devmodel.code}銆�${row.devmodel.name}`}}
+                {{ row.devmodel && `銆�${row.devmodel.code}銆�${row.devmodel.name}` }}
               </template>
             </el-table-column>
             <!-- <el-table-column prop="proUserids" label="鐢熶骇浜哄憳" show-overflow-tooltip min-width="100px"></el-table-column> -->
           </el-table>
         </el-tab-pane>
         <el-tab-pane label="鐢熶骇鎶曟枡" name="third">
-          <el-table
-            v-loading="isSearch"
-            :data="feeds"
-            stripe
-            border
-            show-summary
-            :summary-method="getPutSummaries"
-          >
+          <el-table v-loading="isSearch" :data="feeds" stripe border show-summary :summary-method="getPutSummaries">
             <el-table-column prop="createTime" label="鎶曟枡鏃堕棿" min-width="140px"></el-table-column>
             <!-- <el-table-column prop="amodel.code" label="宸ヨ瀹瑰櫒缂栧彿" min-width="100px"></el-table-column> -->
             <el-table-column prop="mmodel.name" label="鐗╂枡鍚嶇О" min-width="100px"></el-table-column>
             <el-table-column prop="promodel.name" label="宸ュ簭鍚嶇О" min-width="100px"></el-table-column>
             <el-table-column label="璐ㄩ噺灞炴��" min-width="100px">
               <template slot-scope="{row}">
-                <span v-if="row.materialDonetype==0" class="valid-style">鍚堟牸</span>
-                <span v-else-if="row.materialDonetype==1" class="unvalid-style">涓嶈壇</span>
-                <span v-else-if="row.materialDonetype==2" class="scrap-style">鎶ュ簾</span>
+                <span v-if="row.materialDonetype == 0" class="valid-style">鍚堟牸</span>
+                <span v-else-if="row.materialDonetype == 1" class="unvalid-style">涓嶈壇</span>
+                <span v-else-if="row.materialDonetype == 2" class="scrap-style">鎶ュ簾</span>
                 <span v-else>-</span>
               </template>
             </el-table-column>
@@ -178,12 +172,7 @@
           </el-table>
         </el-tab-pane>
         <el-tab-pane label="鐢熶骇鐐规" name="fourth">
-          <el-table
-            v-loading="isSearch"
-            :data="check"
-            stripe
-            border
-          >
+          <el-table v-loading="isSearch" :data="check" stripe border>
             <el-table-column prop="createTime" label="璁板綍鏃堕棿" min-width="140px"></el-table-column>
             <el-table-column prop="userName" label="鎿嶄綔浜哄憳" min-width="100px"></el-table-column>
             <el-table-column prop="attrName" label="妫�鐐瑰睘鎬�" min-width="100px"></el-table-column>
@@ -203,12 +192,8 @@
             <el-table-column prop="value" align="left"></el-table-column>
           </el-table> -->
         </el-tab-pane>
-        <Pagination
-          style="margin-top:10px"
-          @size-change="handleSizeChange"
-          @current-change="handlePageChange"
-          :pagination="pagination"
-        ></Pagination>
+        <Pagination style="margin-top:10px" @size-change="handleSizeChange" @current-change="handlePageChange"
+          :pagination="pagination"></Pagination>
       </el-tabs>
     </div>
     <div slot="footer" class="window__header">
@@ -229,7 +214,7 @@
   name: 'OperaWorkorderDetailWindow',
   extends: BaseOpera,
   components: { GlobalWindow, Pagination },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
@@ -287,7 +272,7 @@
     }
   },
   inject: ['origins'],
-  created () {
+  created() {
     this.config({
       api: '/ext/materialExt',
       'field.id': 'id'
@@ -302,39 +287,39 @@
     //   })
   },
   methods: {
-    open (title, target) {
+    open(title, target) {
       this.title = title
       this.visible = true
       this.activeName = 'first',
-      // 缂栬緫
-      this.$nextTick(() => {
-        for (const key in this.form) {
-          this.form[key] = target[key]
-        }
-        // console.log('this.form', this.form)
-        workorderRecordExtPage(
-          {
-            capacity: this.pagination.pageSize,
-            model: {
-              type: 1,
-              workorderId: this.form.id
-            },
-            page: this.pagination.pageIndex,
-            sorts: null
-          })
-          .then(res => {
-            // console.log(res)
-            this.report = res.records
-            this.pagination.pageIndex = res.page
-            this.pagination.total = res.total
-            this.pagination.pageSize = res.capacity
-          })
-          .catch(err => {
-            console.log(err)
-          })
-      })
+        // 缂栬緫
+        this.$nextTick(() => {
+          for (const key in this.form) {
+            this.form[key] = target[key]
+          }
+          // console.log('this.form', this.form)
+          workorderRecordExtPage(
+            {
+              capacity: this.pagination.pageSize,
+              model: {
+                type: 1,
+                workorderId: this.form.id
+              },
+              page: this.pagination.pageIndex,
+              sorts: null
+            })
+            .then(res => {
+              // console.log(res)
+              this.report = res.records
+              this.pagination.pageIndex = res.page
+              this.pagination.total = res.total
+              this.pagination.pageSize = res.capacity
+            })
+            .catch(err => {
+              console.log(err)
+            })
+        })
     },
-    cancel () {
+    cancel() {
       this.$refs.form.resetFields()
       this.activeName = 'first'
       this.pagination.pageIndex = 1
@@ -342,21 +327,21 @@
       this.pagination.total = 0
       this.visible = false
     },
-    statusToStr (status) {
+    statusToStr(status) {
       for (const item of this.status) {
         if (item.id === status) {
           return item.name
         }
       }
     },
-    originToStr (id) {
+    originToStr(id) {
       for (const item of this.origins()) {
         if (item.id === id) {
           return item.code
         }
       }
     },
-    columnStyle ({ row, column, rowIndex, columnIndex }) {
+    columnStyle({ row, column, rowIndex, columnIndex }) {
       if (rowIndex % 2 === 0) {
         // 淇敼姣忚绗竴涓崟鍏冩牸鐨勮儗鏅壊
         return 'background:#f3f6fc;'
@@ -364,22 +349,22 @@
         return 'background:#ffffff;'
       }
     },
-    handleClick (tab, event) {
+    handleClick(tab, event) {
       this.pagination.pageIndex = 1
       this.pagination.pageSize = 10
       this.pagination.total = 0
       this.search()
     },
-    handleSizeChange (pageSize) {
+    handleSizeChange(pageSize) {
       this.pagination.pageSize = pageSize
       this.search()
     },
-    handlePageChange (pageIndex) {
+    handlePageChange(pageIndex) {
       this.pagination.pageIndex = pageIndex
       // console.log('鑾峰彇鏁版嵁')
       this.search()
     },
-    search () {
+    search() {
       if (this.activeName === 'first') {
         workorderRecordExtPage(
           {
@@ -389,7 +374,7 @@
               workorderId: this.form.id
             },
             page: this.pagination.pageIndex,
-            sorts: [{direction: "DESC", property: "CREATE_TIME"}]
+            sorts: [{ direction: "DESC", property: "CREATE_TIME" }]
           })
           .then(res => {
             // console.log(res)
@@ -408,7 +393,7 @@
             workorderId: this.form.id
           },
           page: this.pagination.pageIndex,
-          sorts: [{direction: "DESC", property: "CREATE_TIME"}]
+          sorts: [{ direction: "DESC", property: "CREATE_TIME" }]
         })
           .then(res => {
             // console.log(res.records)
@@ -429,7 +414,7 @@
               workorderId: this.form.id
             },
             page: this.pagination.pageIndex,
-            sorts: [{direction: "DESC", property: "CREATE_TIME"}]
+            sorts: [{ direction: "DESC", property: "CREATE_TIME" }]
           })
           .then(res => {
             // console.log(res)
@@ -449,7 +434,7 @@
               workorderId: this.form.id
             },
             page: this.pagination.pageIndex,
-            sorts: [{direction: "DESC", property: "CREATE_TIME"}]
+            sorts: [{ direction: "DESC", property: "CREATE_TIME" }]
           })
           .then(res => {
             // console.log(res)
@@ -463,7 +448,7 @@
           })
       }
     },
-    getPutSummaries (param) {
+    getPutSummaries(param) {
       const { columns, data } = param;
       const sums = [];
       columns.forEach((column, index) => {
@@ -476,7 +461,7 @@
         } else if (index === 5) {
           sums[index] = '-';
           return;
-        } 
+        }
         const values = data.map(item => Number(item[column.property]));
         if (!values.every(value => isNaN(value))) {
           sums[index] = 0
@@ -489,15 +474,12 @@
       });
       return sums
     },
-    getReportSummaries (param) {
+    getReportSummaries(param) {
       const { columns, data } = param;
       const sums = [];
       columns.forEach((column, index) => {
         if (index === 0) {
           sums[index] = '鍚堣';
-          return;
-        } else if (index === 4) {
-          sums[index] = '-';
           return;
         }
         const values = data.map(item => Number(item[column.property]));
@@ -522,21 +504,24 @@
   width: 23%;
   // height: 32px;
 }
+
 ::v-deep .el-form-item {
   margin-bottom: 8px !important;
 }
+
 .text-code {
   color: #333;
   font-weight: 500;
   padding-right: 15px;
   font-size: 15px;
-  vertical-align:middle;
+  vertical-align: middle;
 }
+
 .status-log {
   padding: 1px 5px;
   border-radius: 3px;
   font-size: 12px;
-  color:#fff;
-  vertical-align:middle;
+  color: #fff;
+  vertical-align: middle;
 }
 </style>
diff --git a/web_standard/src/components/ext/OrderDistrubution.vue b/web_standard/src/components/ext/OrderDistrubution.vue
index 97946e5..9d055e4 100644
--- a/web_standard/src/components/ext/OrderDistrubution.vue
+++ b/web_standard/src/components/ext/OrderDistrubution.vue
@@ -109,9 +109,12 @@
         this.form.planDate = new Date()
         this.form.planId = target.id
         this.form.planNum = target.num - target.distributNum
-        getDeviceByCondition({})
+        getDeviceByCondition({procedureId: target.procedureId})
           .then(res => {
+
             this.device = res
+            this.form.proGroupId = res[0] ? res[0].id : ''
+            this.getUser(this.form.proGroupId)
           })
           .catch(err => {
             console.log(err)
diff --git a/web_standard/src/components/ext/OrderQrCodeLabel.vue b/web_standard/src/components/ext/OrderQrCodeLabel.vue
index a7e2675..225d6fc 100644
--- a/web_standard/src/components/ext/OrderQrCodeLabel.vue
+++ b/web_standard/src/components/ext/OrderQrCodeLabel.vue
@@ -93,7 +93,7 @@
                 <tr>
                   <td>鎵撳嵃淇℃伅</td>
                   <td style="text-align:left; line-height:16px;" colspan="2">
-                    <div>{{ userInfo.realname + ', ' + current}}</div>
+                    <div>{{ userInfo.companyUser.name + ', ' + current}}</div>
                   </td>
                 </tr>
               </tbody>
diff --git a/web_standard/src/components/ext/addProcesRoute.vue b/web_standard/src/components/ext/addProcesRoute.vue
deleted file mode 100644
index bd2da93..0000000
--- a/web_standard/src/components/ext/addProcesRoute.vue
+++ /dev/null
@@ -1,162 +0,0 @@
-<template>
-  <GlobalWindow
-    :title="title"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    :width="width"
-    @confirm="confirm"
-  >
-    <div class="text">鍩烘湰淇℃伅</div>
-    <el-form聽ref="searchForm"聽聽:model="searchForm"聽label-width="140px"聽inline>
-      <el-form-item聽label="宸ヨ壓鍚嶇О:"聽prop="rmodelName"聽required="true">
-        <el-input聽v-model="searchForm.rmodelName"聽placeholder="璇疯緭鍏ュ伐鑹哄悕绉�"聽@keypress.enter.native="search"></el-input>
-      </el-form-item>
-      <el-form-item聽label="宸ヨ壓缂栫爜锛�"聽prop="procedureId"聽required="true">
-    聽聽<GlobalWindow
-    聽聽聽聽:title="title"
-    聽聽聽聽:visible.sync="visible"
-    聽聽聽聽:confirm-working="isWorking"
-    聽聽聽聽:width="width"
-    聽聽聽聽@confirm="confirm"
-    聽聽>
-    聽聽聽聽<div聽class="text">鍩烘湰淇℃伅</div>
-    聽聽聽聽聽<el-form聽ref="searchForm"聽聽:model="searchForm"聽label-width="140px"聽inline>
-      聽聽聽聽聽聽<el-form-item聽label="宸ヨ壓鍚嶇О:"聽prop="rmodelName"聽required="true">
-      聽聽聽聽聽聽聽聽<el-input聽v-model="searchForm.rmodelName"聽placeholder="璇疯緭鍏ュ伐鑹哄悕绉�"聽@keypress.enter.native="search"></el-input>
-      聽聽聽聽聽聽</el-form-item>
-    聽聽聽聽聽聽聽聽<el-form-item聽label="宸ヨ壓缂栫爜锛�"聽prop="procedureId"聽required="true">
-    聽聽<GlobalWindow
-    聽聽聽聽:title="title"
-    聽聽聽聽:visible.sync="visible"
-    聽聽聽聽:confirm-working="isWorking"
-    聽聽聽聽:width="width"
-    聽聽聽聽@confirm="confirm"
-    聽聽>
-<!-- 聽聽聽聽<div聽class="text">鍩烘湰淇℃伅</div>
-聽聽聽聽聽<el-form聽ref="searchForm"聽聽:model="searchForm"聽label-width="140px"聽inline>
-聽聽聽聽聽聽聽聽聽聽聽聽<el-form-item聽label="宸ヨ壓鍚嶇О:"聽prop="rmodelName"聽required="true">
-聽聽聽聽聽聽聽聽<el-input聽v-model="searchForm.rmodelName"聽placeholder="璇疯緭鍏ュ伐鑹哄悕绉�"聽@keypress.enter.native="search"></el-input>
-聽聽聽聽聽聽</el-form-item>
-聽聽聽聽聽聽聽聽<el-form-item聽label="宸ヨ壓缂栫爜锛�"聽prop="procedureId"聽required="true">
->>>>>>> .r46706
-聽聽聽聽聽聽聽聽<el-input聽v-model="searchForm.procedureId"聽placeholder="璇疯緭鍏ュ伐鑹虹紪鐮�"聽@keypress.enter.native="search"></el-input>
-聽聽聽聽聽聽</el-form-item>
-聽聽聽聽聽聽聽聽聽聽<el-form-item聽label="鎵�灞炲伐鍘傦細"聽prop="procedureId"聽required="true">
-聽聽聽聽聽聽聽聽<el-input聽v-model="searchForm.dmodelCompanyId"聽placeholder="璇疯緭鍏ユ墍灞炲伐鍘�"聽@keypress.enter.native="search"></el-input>
-聽聽聽聽聽聽</el-form-item>
-聽聽聽聽聽聽聽聽<div聽class="text聽title"><span>宸ュ簭鍒楄〃</span></div>
-聽聽聽聽聽聽聽聽<div聽style="padding-top:20px">
-聽聽聽聽聽聽聽<el-button聽type="primary"聽聽@click="drawer聽=聽true"聽>娣诲姞宸ュ簭
-聽聽聽聽聽聽聽聽聽<el-drawer
-聽聽聽聽聽title="鎴戞槸鏍囬"
-聽聽聽聽聽:visible.sync="drawer"
-聽聽聽聽聽size='50%'
-聽聽聽聽聽modal="false"
-聽聽聽聽:with-header="false">
-聽聽聽聽<span>鎴戞潵鍟�!</span>
-聽聽聽聽聽聽<div聽class="demo-drawer__footer">
-聽聽聽聽聽聽<el-button聽@click="cancelForm">鍙柭犳秷</el-button>
-聽聽聽聽聽聽<el-button聽type="primary"聽@click="$refs.drawer.closeDrawer()"聽:loading="loading">{{聽loading聽?聽'鎻愪氦涓�...'聽:聽'纭犲畾'聽}}</el-button>
-聽聽聽聽</div>
-聽聽聽聽</el-drawer>
-聽聽聽聽聽聽聽</el-button>
-聽聽聽聽聽聽聽<el-button聽type="primary"聽plain>涓婄Щ</el-button>
-聽聽聽聽聽聽聽<el-button聽type="primary"聽plain>涓嬬Щ</el-button>
-聽聽聽聽聽聽聽</div>
-聽聽聽聽聽聽聽聽聽聽<template聽v-slot:table-wrap>
-聽聽聽聽聽聽<el-table
-聽聽聽聽聽聽聽聽:data="list"
-聽聽聽聽聽聽聽聽stripe
-聽聽聽聽聽聽聽聽border
-聽聽聽聽聽聽聽聽@selection-change="handleSelectionChange"
-聽聽聽聽聽聽>
-聽聽聽聽聽聽聽聽<el-table-column聽type="selection"聽width="55"聽fixed="left"></el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column聽label="鐗╂枡淇℃伅"聽min-width="140px">
-聽聽聽聽聽聽聽聽</el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column聽prop="origin"聽label="浜х敓鏂瑰紡"聽min-width="100px">
-聽聽聽聽聽聽聽聽</el-table-column>
-聽聽聽聽聽聽聽聽</el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column聽label="琚浆鎹㈠睘鎬�"聽min-width="100px">
-聽聽聽聽聽聽聽聽</el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column聽prop="convertedName"聽label="琚浆鎹㈠崟浣�"聽min-width="100px"></el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column聽prop="convertedNum"聽label="琚浆鎹㈡暟鍊�"聽min-width="100px"></el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column聽label="杞崲灞炴��"聽min-width="100px">
-聽聽聽聽聽聽聽聽</el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column聽prop="unitName"聽label="杞崲鍗曚綅"聽min-width="100px"></el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column聽prop="unitNum"聽label="杞崲鏁板��"聽min-width="100px"></el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column聽prop="convertedTime"聽label="杞崲鏃堕棿"聽min-width="140px"></el-table-column>
-聽聽聽聽聽聽聽聽<el-table-column
-聽聽聽聽聽聽聽聽聽聽label="鎿嶄綔"
-聽聽聽聽聽聽聽聽聽聽min-width="120"
-聽聽聽聽聽聽聽聽聽聽fixed="right"
-聽聽聽聽聽聽聽聽>
-聽聽聽聽聽聽聽聽聽聽<template聽slot-scope="{row}">
-聽聽聽聽聽聽聽聽聽聽聽聽<el-button聽type="text"聽@click="$refs.operaUnitConversionExtWindow.open('缂栬緫鍗曚綅杞崲',聽row)">缂栬緫</el-button>
-聽聽聽聽聽聽聽聽聽聽聽聽<el-button聽type="text"聽@click="deleteById(row)">鍒犻櫎</el-button>
-聽聽聽聽聽聽聽聽聽聽</template>
-聽聽聽聽聽聽聽聽</el-table-column>
-聽聽聽聽聽聽</el-table>
-聽聽聽聽聽聽<pagination
-聽聽聽聽聽聽聽聽@size-change="handleSizeChange"
-聽聽聽聽聽聽聽聽@current-change="handlePageChange"
-聽聽聽聽聽聽聽聽:pagination="tableData.pagination"
-聽聽聽聽聽聽>
-聽聽聽聽聽聽</pagination>
-聽聽聽聽</template>
-聽聽聽聽聽聽<section>
-聽聽聽聽聽聽聽聽<el-button聽type="primary"聽@click="search">鏌ユ壘</el-button>
-聽聽聽聽聽聽聽聽<el-button聽type="primary"聽@click="reset">娓呯┖</el-button>
-聽聽聽聽聽聽</section>
-聽聽聽聽</el-form> -->
-聽聽</GlobalWindow>
-</template>
-
-<script>
-import BaseOpera from "@/components/base/BaseOpera";
-import GlobalWindow from "@/components/common/GlobalWindow";
-export default {
-  name: "OperaRouteProcedureExtWindow",
-  extends: BaseOpera,
-  components: { GlobalWindow },
-  data() {
-    return {
-      width: "86%",
-      drawer: false,
-      searchForm: {
-        rmodelName: "",
-        routeId: "",
-        procedureId: "",
-        dmodelCompanyId: "",
-        activeIndex: "1",
-        activeIndex2: "1",
-        id: null,
-        deleted: "",
-        //聽rmodelName:聽'',
-      },
-
-      rules: {},
-    };
-  },
-  methods: {},
-  created() {
-    this.config({
-      api: "/ext/routeProcedureExt",
-      "field.id": "id",
-    });
-  },
-};
-</script>
-
-<style聽lang="scss"聽scoped>
-.text {
-  font-weight: 500;
-}
-.title {
-  width: 80px;
-  height: 30px;
-  border-bottom: 4px聽solid聽#2E68EC;
-  text-align: center;
-  color: #2e68ec;
-  padding-top: 20px;
-}
-</style>
diff --git a/web_standard/src/utils/form.js b/web_standard/src/utils/form.js
index 4d6b612..667e154 100644
--- a/web_standard/src/utils/form.js
+++ b/web_standard/src/utils/form.js
@@ -35,3 +35,12 @@
   }
   callback()
 }
+
+export function numRule(rule, value, callback) {
+  // debugger
+  if (value == null || value < 0 || !value) {
+    callback(new Error())
+  } else {
+    callback()
+  }
+}
diff --git a/web_standard/src/views/.DS_Store b/web_standard/src/views/.DS_Store
index c35a195..deaf3ff 100644
--- a/web_standard/src/views/.DS_Store
+++ b/web_standard/src/views/.DS_Store
Binary files differ
diff --git a/web_standard/src/views/business/salaryParam.vue b/web_standard/src/views/business/salaryParam.vue
new file mode 100644
index 0000000..c690bb2
--- /dev/null
+++ b/web_standard/src/views/business/salaryParam.vue
@@ -0,0 +1,159 @@
+<template>
+  <TableLayout :permissions="['business:salaryparam:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      
+      <el-form-item label="鐗╂枡淇℃伅" prop="keyWord">
+        <el-input v-model="searchForm.keyWord" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�/缂栫爜" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="宸ュ簭" prop="procedureName">
+        <el-input v-model="searchForm.procedureName" placeholder="璇疯緭鍏ュ伐搴�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="璁′环鏂瑰紡" prop="type">
+        <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨璁′环鏂瑰紡" clearable>
+          <el-option
+            v-for="item in type"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          >
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:salaryparam:create', 'business:salaryparam:delete', 'business:salaryparam:exportExcel', 'business:salaryparam:importExcel']">
+        <li><el-button type="primary" @click="$refs.operaSalaryParamWindow.open('鏂板缓缁╂晥宸ヨ祫閰嶇疆')" v-permissions="['business:salaryparam:create']">鏂板缓</el-button></li>
+        <li><el-button type="primary" @click="deleteByIdInBatch" v-permissions="['business:salaryparam:delete']">鎵归噺鍒犻櫎</el-button></li>
+        <li>
+          <el-button type="primary" :loading="isWorking.export" v-permissions="['business:salaryparam:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+        </li>
+        <li v-permissions="['business:salaryparam:importExcel']">
+          <ImportButton
+            text="瀵煎叆"
+            template-name="salary_import_template.xlsx"
+            template-path="/template/salary_import_template.xlsx"
+            action="/business/salaryParam/importBatch"
+            @success="search"
+          />
+        </li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        border
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="selection" width="55"></el-table-column>
+        <el-table-column prop="id" label="搴忓彿"  min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="璁′环鏂瑰紡" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.type == 0 ? '璁′欢' : '璁℃椂' }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" min-width="140px"></el-table-column>
+        <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="procedureName" label="宸ュ簭鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="salary" label="宸ヨ祫鍗曚环锛堝厓)" min-width="100px"></el-table-column>
+        <el-table-column prop="num" label="鏍囧噯浜у嚭" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.num == 0 ? '-' : row.num }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="times" label="鏍囧噯宸ユ椂" min-width="100px">
+          <template slot-scope="{row}">
+            {{ timesToStr(row.times) }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="unqualified" label="涓嶈壇鍝佹槸鍚﹁鍏�" min-width="110px">
+          <template slot-scope="{row}">
+            {{ row.unqualified == 0 ? '鍚�' : '鏄�' }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="createUserName" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <!-- <el-table-column prop="updateTime" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
+        <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="rootDepartId" label="涓荤粍缁囩紪鐮侊紙鍏宠仈department琛ㄦ牴缁勭粐锛�" min-width="100px"></el-table-column>
+        <el-table-column prop="departId" label="宸ュ巶缂栫爜锛堝叧鑱攄epartment琛級" min-width="100px"></el-table-column>
+        <el-table-column prop="bomId" label="bom缂栫爜锛堝叧鑱攂om琛級" min-width="100px"></el-table-column> -->
+        
+        <el-table-column
+          v-if="containPermissions(['business:salaryparam:update', 'business:salaryparam:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaSalaryParamWindow.open('缂栬緫缁╂晥宸ヨ祫閰�', row)" v-permissions="['business:salaryparam:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" v-permissions="['business:salaryparam:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaSalaryParamWindow ref="operaSalaryParamWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import ImportButton from '@/components/common/ImportButton'
+import OperaSalaryParamWindow from '@/components/business/OperaSalaryParamWindow'
+export default {
+  name: 'SalaryParam',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaSalaryParamWindow, ImportButton },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        keyWord: '',
+        procedureName: '',
+        type: ''
+      },
+      type: [
+        { label: '璁′欢', value: '0' },
+        { label: '璁℃椂', value: '1' },
+      ]
+    }
+  },
+  created () {
+    this.config({
+      module: '璁剧疆绫�-缁╂晥宸ヨ祫閰嶇疆琛�',
+      api: '/business/salaryParam',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+    timesToStr(times) {
+      
+      if (times==0||!times) {
+        return '-'
+      }
+      let sec = times%60
+      let lesMin = Math.floor(times/60)
+      let min = lesMin%60
+      let hours =  Math.floor(lesMin/60)
+      return `${hours}鏃�${min}鍒�${sec}绉抈
+    }
+  },
+}
+</script>
diff --git a/web_standard/src/views/business/workPlans.vue b/web_standard/src/views/business/workPlans.vue
index bbf64f7..360a5f5 100644
--- a/web_standard/src/views/business/workPlans.vue
+++ b/web_standard/src/views/business/workPlans.vue
@@ -26,6 +26,9 @@
       <el-form-item label="鎵规鍙�" prop="batch">
         <el-input v-model="searchForm.batch" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
       </el-form-item>
+      <el-form-item label="閿�鍞崟鍙�" prop="salesorder">
+        <el-input v-model="searchForm.salesorder" placeholder="璇疯緭鍏�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
       <el-form-item label="璁″垝鏃ユ湡" prop="planDate">
         <el-date-picker style="width: 300px;" @change="changeDate" v-model="searchForm.planDate" type="datetimerange"
           value-format="yyyy-MM-dd" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡">
@@ -45,7 +48,7 @@
           <ImportButton
             text="瀵煎叆"
             template-name="workplans_import_template.xlsx"
-            template-path="template/workplans_import_template.xlsx"
+            template-path="/template/workplans_import_template.xlsx"
             action="/business/workPlans/importBatch"
             @success="search"
           />
@@ -57,11 +60,12 @@
       </ul>
       <el-table v-loading="isWorking.search" :data="tableData.list" border stripe @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="planCode" label="鎴愬搧璁″垝缂栫爜" min-width="150px">
+        <el-table-column prop="planCode" label="鎴愬搧璁″垝缂栫爜" min-width="190px">
           <template slot-scope="{row}">
             <el-button type="text" @click="$refs.plannedProgress.open('璁″垝鎵ц杩涘害', row)">
               <span class="long-title-style">{{ row.planCode }}</span>
             </el-button>
+            <el-tag type="danger" size="mini" v-if="row.hasExpire">寤舵湡</el-tag>
           </template>
         </el-table-column>
         <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" min-width="100px"></el-table-column>
@@ -109,16 +113,15 @@
             <span v-else>-</span>
           </template>
         </el-table-column>
-        <el-table-column label="浼樺厛绾�" min-width="80px">
-          <template slot-scope="{row}">
+        <el-table-column prop="urgent" label="浼樺厛绾�" min-width="80px">
+          <!-- <template slot-scope="{row}">
             <span v-if="row.urgent">{{ row.urgent }}</span>
             <span v-else>-</span>
-          </template>
+          </template> -->
         </el-table-column>
         <el-table-column label="鏆傚仠" min-width="80px">
           <template slot-scope="{row}">
             {{ row.paused==0?'鍚�':'鏄�' }}
-           
           </template>
         </el-table-column>
 
@@ -185,6 +188,7 @@
         factoryId: '',
         materialId: '',
         batch: '',
+        salesorder: '',
         planStatus: '',
         planCode: ''
       },
diff --git a/web_standard/src/views/ext/plansExt.vue b/web_standard/src/views/ext/plansExt.vue
index 53e384c..f8dcf28 100644
--- a/web_standard/src/views/ext/plansExt.vue
+++ b/web_standard/src/views/ext/plansExt.vue
@@ -100,7 +100,11 @@
         @row-style="rowStyle"
       >
         <el-table-column type="selection" fixed="left" width="55"></el-table-column>
-        <el-table-column prop="id" label="璁″垝搴忓彿" fixed="left" min-width="80px"></el-table-column>
+        <el-table-column prop="id" label="璁″垝搴忓彿" fixed="left" min-width="80px">
+          <template slot-scope="{row}">
+            <span>{{ row.id }}</span><el-tag type="danger" size="mini" v-if="row.hasExpire">寤舵湡</el-tag>
+          </template>
+        </el-table-column>
         <el-table-column prop="mmodel.name" fixed="left" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="140px">
           <template slot-scope="{row}">
             <el-button type="text" class="materail" @click="showPlan(row.id)">
@@ -110,36 +114,35 @@
         </el-table-column>
         <el-table-column prop="mmodel.code" label="鐗╂枡缂栫爜" min-width="160px">
         </el-table-column>
-        <el-table-column prop="planDate" label="璁″垝鏃ユ湡" min-width="100px"></el-table-column>
+        
         <el-table-column prop="fmodel.name" label="宸ュ巶" min-width="100px"></el-table-column>
         <el-table-column prop="pmodel.name" label="宸ュ簭" show-overflow-tooltip min-width="100px">
           <template slot-scope="{row}">
             <span class="long-title-style">{{ row.pmodel ? row.pmodel.name : '-' }}</span>
           </template>
         </el-table-column>
+        <el-table-column prop="batch" label="鐢熶骇鎵规鍙�" show-overflow-tooltip min-width="140px"></el-table-column>
         <el-table-column prop="num" label="璁″垝鏁伴噺" min-width="100px">
           <template slot-scope="{row}">
             <span>{{ row.num + (row.umodel ? row.umodel.name : '') }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="batch" label="鐢熶骇鎵规鍙�" show-overflow-tooltip min-width="140px"></el-table-column>
-        <el-table-column prop="urgent" label="浼樺厛绾�" min-width="60px"></el-table-column>
+        <el-table-column prop="workPlanStartDate" label="璁″垝寮�濮嬫棩鏈�" min-width="100px">
+          <!-- <template slot-scope="{row}">
+            {{ row.workPlanStartDate ? row.workPlanStartDate.substring(0, row.workPlanStartDate.length-9) : '-' }}
+          </template> -->
+        </el-table-column>
+        <el-table-column prop="workPlanEndDate" label="璁″垝缁撴潫鏃ユ湡" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.workPlanStartDate ? row.workPlanStartDate.substring(0, row.workPlanStartDate.length-9) : '-' }}
+          </template>
+        </el-table-column>
+        
         <el-table-column label="璁″垝鐘舵��" min-width="80px">
           <template slot-scope="{row}">
             {{ statusToStr(row.status) }}
           </template>
         </el-table-column>
-        <el-table-column label="璁″垝绫诲瀷" min-width="80px">
-          <template slot-scope="{row}">
-            <span :style="typeColor(row.type)">{{ typeToStr(row.type) }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column label="鏆傚仠" min-width="60px">
-          <template slot-scope="{row}">
-            {{ row.paused == 0 ? '鍚�' : '鏄�' }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="workPlanCode" label="鎴愬搧璁″垝缂栫爜" min-width="140px"></el-table-column>
         <el-table-column prop="distributNoDoneNum" label="宸插垎閰嶆湭鎶ュ伐鏁伴噺" min-width="140px">
           <template slot-scope="{row}">
             <span>{{row.distributNoDoneNum ? (row.distributNoDoneNum + (row.umodel ? row.umodel.name : '')) : '-' }}</span>
@@ -153,6 +156,18 @@
         <el-table-column prop="unqulifiedNum" label="涓嶈壇鏁伴噺" min-width="100px">
           <template slot-scope="{row}">
             <span>{{row.unqulifiedNum ? (row.unqulifiedNum + (row.umodel ? row.umodel.name : '')) : '-' }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="urgent" label="浼樺厛绾�" min-width="60px"></el-table-column>
+        <el-table-column label="鏆傚仠" min-width="60px">
+          <template slot-scope="{row}">
+            {{ row.paused == 0 ? '鍚�' : '鏄�' }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="workPlanCode" label="涓昏鍒掔紪鐮�" min-width="140px"></el-table-column>
+        <el-table-column label="绫诲瀷" min-width="80px">
+          <template slot-scope="{row}">
+            <span :style="typeColor(row.type)">{{ typeToStr(row.type) }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="publishDate" label="鍙戝竷鏃ユ湡" min-width="100px">
@@ -559,7 +574,7 @@
         if (index === 0) {
           sums[index] = '鍚堣';
           return;
-        } else if (index === 1 || index === 8 || index === 9 || index === 16 || index === 17) {
+        } else if (index === 1 || index === 6 || index === 8 || index === 9 || index === 14 || index === 16 || index === 17) {
           sums[index] = '-';
           return;
         } else if (index === 8 ) {
diff --git a/web_standard/src/views/ext/salaryStatistic.vue b/web_standard/src/views/ext/salaryStatistic.vue
new file mode 100644
index 0000000..e58ab8d
--- /dev/null
+++ b/web_standard/src/views/ext/salaryStatistic.vue
@@ -0,0 +1,182 @@
+<template>
+  <TableLayout v-permissions="['ext:workorderrecordext:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" label-suffix="锛�" inline>
+      <el-form-item label="鐢熶骇浜哄憳" prop="userId">
+        <el-select v-model="searchForm.userId" clearable filterable placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in proUsers"
+            :key="item.id"
+            :label="item.name"
+            :value="item.userId">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鐗╂枡缂栫爜" prop="mmodelCode">
+        <el-input v-model="searchForm.mmodelCode" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="宸ュ簭" prop="procedureId">
+        <el-select v-model="searchForm.procedureId" filterable clearable placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="(item, index) in procedures"
+            :key="index"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鎶ュ伐鏃堕棿">
+        <el-date-picker
+          v-model="planDate"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          range-separator="~"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+          @change="dateChange"
+        ></el-date-picker>
+      </el-form-item>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar">
+        <!-- v-permissions="['ext:workorderrecordext:exportExcel']" -->
+        <li ><el-button type="primary" :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        border
+      >
+        <el-table-column type="index" :index="customIndex" label="搴忓彿" fixed="left" min-width="80px">
+          
+        </el-table-column>
+        <el-table-column prop="userInfo.userName" label="鐢熶骇浜哄憳" min-width="100px"></el-table-column>
+        <el-table-column prop="userInfo.departName" label="閮ㄩ棬" min-width="100px"> </el-table-column>
+        <el-table-column prop="jijianSalary" label="璁′欢宸ヨ祫" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.jijianSalary / 100 }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="jishiSalary" label="璁℃椂宸ヨ祫" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.jishiSalary / 100 }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="num" label="鎶ュ伐鍗曟�绘暟" min-width="100px"></el-table-column>
+        <el-table-column prop="totalSalary" label="灏忚宸ヨ祫(鍏�)" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.totalSalary / 100 }}
+          </template>
+        </el-table-column>
+       
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      ></pagination>
+    </template>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import { productesGroup } from '@/api/ext/proceduresExt'
+import { companyUserExtAllUser } from '@/api/ext/companyUserExt'
+export default {
+  name: 'WorkorderRecordExt',
+  extends: BaseTable,
+  components: { TableLayout, Pagination },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        procedureId: '',
+        userId: '',
+        startDate: '',
+        endDate: '',
+        materialId: '',
+      },
+      procedures: [
+      ],
+      proUsers: [
+      ],
+   
+      orderStatus:[
+        // 0宸插垱寤恒��1宸查鏂欍��2宸插畬宸ユ銆�3宸叉楠屻��4宸茶繑宸ャ��5宸插叆搴撱��6宸叉殏鍋溿��7宸插彇娑堛��8宸插叧闂�
+        //  0宸插垱寤恒��1宸插鏂欍��2宸插畬宸ユ銆�3宸叉楠屻��4宸叉姤宸ャ��5宸插叆搴撱��6宸插彇娑�
+        { name: '宸插垱寤�', id: 0 },
+        { name: '宸插鏂�', id: 1 },
+        { name: '宸插畬宸ユ', id: 2 },
+        { name: '宸叉楠�', id: 3 },
+        { name: '宸叉姤宸�', id: 4 },
+        { name: '宸插彇娑�', id: 6 }
+      ],
+      planDate: []
+    }
+  },
+  created () {
+    this.config({
+      module: '鎶ュ伐璁板綍',
+      api: '/ext/salaryStatistic',
+      'field.id': 'id',
+      'field.main': 'name',
+      sorts: [{ direction: 'DESC', property: 'CREATE_TIME' }]
+    })
+    
+    this.search()
+  },
+  activated() {
+    productesGroup({})
+      .then(res => {
+        this.procedures = res
+      })
+      .catch(err => {
+        console.log(err)
+      })
+    companyUserExtAllUser({ departmentId: this.$store.state.userInfo.curComDepartment.id })
+      .then(res => {
+        this.proUsers = res
+      })
+      .catch(err => {
+        console.log(err)
+      })
+  },
+  methods: {
+    dateChange (v) {
+      // console.log('鏃ユ湡閫夋嫨浜�')
+      this.searchForm.startDate = v[0]
+      this.searchForm.endDate = v[1]
+    },
+    reset () {
+      // console.log('rest', this.searchDate)
+      this.planDate = []
+      this.searchForm.startDate = ''
+      this.searchForm.endDate = ''
+      this.$refs.searchForm.resetFields()
+      this.search()
+    },
+    statusToStr (row) {
+      for (const item of this.orderStatus) {
+        if (item.id === row.omodel.status) {
+          return item.name
+        }
+      }
+      return '-'
+    },
+    customIndex(index) {
+      console.log();
+      return (this.tableData.pagination.pageIndex-1) * this.tableData.pagination.pageSize + index + 1
+    }
+  }
+}
+
+</script>
diff --git a/web_standard/src/views/ext/userSalary.vue b/web_standard/src/views/ext/userSalary.vue
new file mode 100644
index 0000000..9564fda
--- /dev/null
+++ b/web_standard/src/views/ext/userSalary.vue
@@ -0,0 +1,219 @@
+<template>
+  <TableLayout v-permissions="['ext:workorderrecordext:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" label-suffix="锛�" inline>
+      <el-form-item label="鐢熶骇浜哄憳" prop="userId">
+        <el-select v-model="searchForm.userId" clearable filterable placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in proUsers"
+            :key="item.id"
+            :label="item.name"
+            :value="item.userId">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鐗╂枡淇℃伅" prop="materialName">
+        <el-input v-model="searchForm.materialName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�/缂栫爜" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="宸ュ簭" prop="procedureId">
+        <el-select v-model="searchForm.procedureId" filterable clearable placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="(item, index) in procedures"
+            :key="index"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鎶ュ伐鏃堕棿">
+        <el-date-picker
+          v-model="planDate"
+          type="daterange"
+          value-format="yyyy-MM-dd"
+          range-separator="~"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+          @change="dateChange"
+        ></el-date-picker>
+      </el-form-item>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar">
+        <!-- v-permissions="['ext:workorderrecordext:exportExcel']" -->
+        <li ><el-button type="primary" :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        border
+      >
+        <el-table-column type="index" :index="customIndex" label="搴忓彿" fixed="left" min-width="80px"></el-table-column>
+        <el-table-column prop="userInfo.userName" label="鐢熶骇浜哄憳" min-width="100px"></el-table-column>
+        <el-table-column prop="userInfo.departName" label="閮ㄩ棬" min-width="100px"> </el-table-column>
+        <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" min-width="140px"></el-table-column>
+        <el-table-column prop="procedureName" label="宸ュ簭鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="workorderCode" label="宸ュ崟缂栫爜" min-width="150px"></el-table-column>
+        <el-table-column prop="unitName" label="鍗曚綅" min-width="100px"></el-table-column>
+        <el-table-column prop="num" label="鎶ュ伐鏁�" min-width="100px"></el-table-column>
+        <el-table-column prop="qualifiedNum" label="鑹搧鏁�" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.qualifiedNum || 0 }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="unQualifiedNum" label="涓嶈壇鍝佹暟" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.unQualifiedNum || 0 }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="rate" label="鍚堟牸鐜�(%)" min-width="100px"></el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      ></pagination>
+    </template>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import { getDeviceByCondition } from '@/api/ext/deviceExt'
+import { productesGroup } from '@/api/ext/proceduresExt'
+import { companyUserExtAllUser } from '@/api/ext/companyUserExt'
+import { addPrecision } from '@/utils/util'
+export default {
+  name: 'WorkorderRecordExt',
+  extends: BaseTable,
+  components: { TableLayout, Pagination },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        procedureId: '',
+        userId: '',
+        startDate: '',
+        endDate: '',
+        materialName: '',
+      },
+      procedures: [
+      ],
+      proUsers: [
+      ],
+   
+      orderStatus:[
+        // 0宸插垱寤恒��1宸查鏂欍��2宸插畬宸ユ銆�3宸叉楠屻��4宸茶繑宸ャ��5宸插叆搴撱��6宸叉殏鍋溿��7宸插彇娑堛��8宸插叧闂�
+        //  0宸插垱寤恒��1宸插鏂欍��2宸插畬宸ユ銆�3宸叉楠屻��4宸叉姤宸ャ��5宸插叆搴撱��6宸插彇娑�
+        { name: '宸插垱寤�', id: 0 },
+        { name: '宸插鏂�', id: 1 },
+        { name: '宸插畬宸ユ', id: 2 },
+        { name: '宸叉楠�', id: 3 },
+        { name: '宸叉姤宸�', id: 4 },
+        { name: '宸插彇娑�', id: 6 }
+      ],
+      planDate: []
+    }
+  },
+  created () {
+    this.config({
+      module: '鎶ュ伐璁板綍',
+      api: '/ext/userSalary',
+      'field.id': 'id',
+      'field.main': 'name',
+      sorts: [{ direction: 'DESC', property: 'CREATE_TIME' }]
+    })
+    let tempDate = new Date()
+    let year = tempDate.getFullYear()
+    let month = tempDate.getMonth() + 1
+    let day = tempDate.getDate()
+    this.searchForm.startDate = `${year}-${month}-01`
+    this.searchForm.endDate = `${year}-${month}-${day}`
+    this.planDate = [this.searchForm.startDate, this.searchForm.endDate]
+    this.search()
+  },
+  activated() {
+    productesGroup({})
+      .then(res => {
+        this.procedures = res
+      })
+      .catch(err => {
+        console.log(err)
+      })
+    companyUserExtAllUser({ departmentId: this.$store.state.userInfo.curComDepartment.id })
+      .then(res => {
+        this.proUsers = res
+      })
+      .catch(err => {
+        console.log(err)
+      })
+  },
+  methods: {
+    dateChange (v) {
+      // console.log('鏃ユ湡閫夋嫨浜�')
+      this.searchForm.startDate = v[0]
+      this.searchForm.endDate = v[1]
+    },
+    reset () {
+      // console.log('rest', this.searchDate)
+      this.planDate = []
+      this.searchForm.startDate = ''
+      this.searchForm.endDate = ''
+      this.$refs.searchForm.resetFields()
+      this.search()
+    },
+    statusToStr (row) {
+      for (const item of this.orderStatus) {
+        if (item.id === row.omodel.status) {
+          return item.name
+        }
+      }
+      return '-'
+    },
+    getSummaries (param) {
+      const { columns, data } = param;
+      const sums = [];
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = '鍚堣';
+          return;
+        } else if (index === 4 || index === 8 || index === 6 || index === 10) {
+          // || index === 8 || index === 9 || index === 16 || index === 17
+          sums[index] = '-';
+          return;
+        }
+        const values = data.map(item => {
+          if (index === 6) {
+            return Number(item.omodel.planNum)
+          } else {
+            return Number(item[column.property])
+          }
+          
+        });
+        if (!values.every(value => isNaN(value))) {
+          sums[index] = 0
+          values.forEach(item => {
+            sums[index] = addPrecision(item, sums[index])
+          })
+        } else {
+          sums[index] = '-';
+        }
+      });
+      return sums
+    },
+    customIndex(index) {
+      console.log();
+      return (this.tableData.pagination.pageIndex-1) * this.tableData.pagination.pageSize + index + 1
+    }
+  }
+}
+
+</script>
diff --git a/web_standard/src/views/ext/workingorderExt.vue b/web_standard/src/views/ext/workingorderExt.vue
index 524d150..8fce261 100644
--- a/web_standard/src/views/ext/workingorderExt.vue
+++ b/web_standard/src/views/ext/workingorderExt.vue
@@ -282,7 +282,7 @@
         status: '',
         mixParam: '',
         pgmodelId: '',
-        statusList: [0,1,2,3]
+        statusList: [0,1,2,3,7]
       },
       origins: [],
       types: [
@@ -307,7 +307,7 @@
         { name: '宸叉楠�', id: 3 },
         // { name: '宸叉姤宸�', id: 4 },
         // { name: '宸插叆搴�', id: 5 },
-        // { name: '宸插彇娑�', id: 6 }
+        { name: '鐢熶骇涓�', id: 7 }
       ],
       productes: [
       ],
diff --git a/web_standard/src/views/ext/workorderPutRecordExt.vue b/web_standard/src/views/ext/workorderPutRecordExt.vue
index 4debc12..b618fe0 100644
--- a/web_standard/src/views/ext/workorderPutRecordExt.vue
+++ b/web_standard/src/views/ext/workorderPutRecordExt.vue
@@ -120,19 +120,18 @@
             <span class="long-title-style">{{ row.procedureName }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="doneType" label="璐ㄩ噺灞炴��" min-width="100px">
+        <el-table-column prop="qualifiedNum" label="鍚堟牸鏁伴噺" min-width="100px">
           <template slot-scope="{row}">
-            <span v-if="row.materialDonetype==0" class="valid-style">鍚堟牸</span>
-            <span v-else-if="row.materialDonetype==1" class="unvalid-style">涓嶈壇</span>
-            <!-- <span v-else-if="row.doneType==2" class="scrap-style">鎶ュ簾</span> -->
-            <span v-else>-</span>
+            <span class="valid-style">{{ row.qualifiedNum + row.umodel.name }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="num" label="鏁伴噺" min-width="100px">
+        <el-table-column prop="unqualifiedNum" label="涓嶈壇鏁伴噺" min-width="100px">
           <template slot-scope="{row}">
-            <span :class="row.materialDonetype==0 ? 'valid-style' : 'unvalid-style'">{{ row.num + row.umodel.name }}</span>
+            <span class="unvalid-style">{{ row.num + row.umodel.name}}</span>
+            <!-- <span :class="row.materialDonetype==0 ? 'valid-style' : ''">{{ row.num + row.umodel.name }}</span> -->
           </template>
         </el-table-column>
+        <el-table-column prop="num" label="鎶ュ伐鏁伴噺" min-width="100px"></el-table-column>
         <!-- <el-table-column prop="amodel.code" label="宸ヨ鍣ㄥ叿" min-width="100px"></el-table-column> -->
         <el-table-column prop="deviceCode" label="璁惧" show-overflow-tooltip min-width="100px">
           <template slot-scope="{row}">
diff --git a/web_standard/src/views/ext/workorderRecordExt.vue b/web_standard/src/views/ext/workorderRecordExt.vue
index 31273cf..02af8b7 100644
--- a/web_standard/src/views/ext/workorderRecordExt.vue
+++ b/web_standard/src/views/ext/workorderRecordExt.vue
@@ -112,7 +112,7 @@
           </template>
         </el-table-column>
         <el-table-column prop="procedureName" label="鐢熶骇鍛樺伐" min-width="100px"></el-table-column>
-        <el-table-column prop="doneType" label="鎶ュ伐绫诲瀷" min-width="100px">
+        <!-- <el-table-column prop="doneType" label="鎶ュ伐绫诲瀷" min-width="100px">
           <template slot-scope="{row}">
             <span v-if="row.doneType==0" class="valid-style">鍚堟牸</span>
             <span v-else-if="row.doneType==1" class="unvalid-style">涓嶈壇</span>
@@ -124,6 +124,22 @@
           <template slot-scope="{row}">
             <span :class="row.doneType==0 ? 'valid-style' : (row.doneType==1 ? 'unvalid-style' : (row.doneType==2 ? 'scrap-style' : ''))">{{ row.num + row.umodel.name }}</span>
           </template>
+        </el-table-column> -->
+        <el-table-column prop="qualifiedNum" label="鍚堟牸鏁伴噺" min-width="100px">
+          <template slot-scope="{row}">
+            <span class="valid-style">{{ row.qualifiedNum + row.umodel.name }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="unqualifiedNum" label="涓嶈壇鏁伴噺" min-width="100px">
+          <template slot-scope="{row}">
+            <span class="unvalid-style">{{ row.unqualifiedNum + row.umodel.name}}</span>
+            <!-- <span :class="row.materialDonetype==0 ? 'valid-style' : ''">{{ row.num + row.umodel.name }}</span> -->
+          </template>
+        </el-table-column>
+        <el-table-column prop="num" label="鎶ュ伐鏁伴噺" min-width="100px">
+          <template slot-scope="{row}">
+            <span>{{ row.num + row.umodel.name}}</span>
+          </template>
         </el-table-column>
         <!-- <el-table-column prop="amodel.code" label="宸ヨ鍣ㄥ叿" min-width="100px"></el-table-column> -->
         <el-table-column prop="deviceCode" label="璁惧" show-overflow-tooltip min-width="100px">

--
Gitblit v1.9.3