Commit a35b246f659ac8e6d464d52d1e1acdb506fb0b38

Authored by 谭毅彬
2 parents a5a15cbe cdd83c0a

Merge branch 'develop' of http://www.huahengrobot.com:90/wms/wms4.git into develop

Showing 19 changed files with 343 additions and 368 deletions
ant-design-vue-jeecg/src/views/system/inventory/InventoryChildList.vue
1 <template> 1 <template>
2 - <a-card :bordered="false">  
3 - <!-- 查询区域 -->  
4 - <div class="table-page-search-wrapper">  
5 - <a-form layout="inline" @keyup.enter.native="searchQuery">  
6 - <a-row :gutter="24">  
7 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
8 - <a-form-item label="货主">  
9 - <a-select  
10 - show-search  
11 - placeholder="请选择货主"  
12 - option-filter-prop="children"  
13 - v-model="queryParam.companyCode">  
14 - <a-select-option v-for="item in companyList" :key="item.name" :value="item.code">{{  
15 - item.name  
16 - }}  
17 - </a-select-option>  
18 - </a-select>  
19 - </a-form-item>  
20 - </a-col>  
21 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
22 - <a-form-item label="库区">  
23 - <a-select  
24 - show-search  
25 - placeholder="请选择库区"  
26 - option-filter-prop="children"  
27 - v-model="queryParam.zoneCode">  
28 - <a-select-option v-for="item in zoneList" :key="item.name" :value="item.code">  
29 - {{item.name}}  
30 - </a-select-option>  
31 - </a-select>  
32 - </a-form-item>  
33 - </a-col>  
34 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
35 - <a-form-item label="库位编码">  
36 - <a-input placeholder="请输入库位编码" v-model="queryParam.locationCode"></a-input>  
37 - </a-form-item>  
38 - </a-col>  
39 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
40 - <a-form-item label="容器编码">  
41 - <a-input placeholder="请输入容器编码" v-model="queryParam.containerCode"></a-input>  
42 - </a-form-item>  
43 - </a-col>  
44 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
45 - <a-form-item label="库存状态">  
46 - <j-dict-select-tag placeholder="请选择库存状态" v-model="queryParam.inventoryStatus" dictCode="inventory_status"/>  
47 - </a-form-item>  
48 - </a-col>  
49 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
50 - <a-form-item label="物料编码">  
51 - <a-input placeholder="请输入物料编码" v-model="queryParam.materialCode"></a-input>  
52 - </a-form-item>  
53 - </a-col>  
54 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
55 - <a-form-item label="物料名称">  
56 - <a-input placeholder="请输入物料名称" v-model="queryParam.materialName"></a-input>  
57 - </a-form-item>  
58 - </a-col>  
59 - <template v-if="toggleSearchStatus">  
60 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
61 - <a-form-item label="物料规格">  
62 - <a-input placeholder="请输入物料规格" v-model="queryParam.materialSpec"></a-input>  
63 - </a-form-item>  
64 - </a-col>  
65 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
66 - <a-form-item label="物料单位">  
67 - <a-input placeholder="请输入物料单位" v-model="queryParam.materialUnit"></a-input>  
68 - </a-form-item>  
69 - </a-col>  
70 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
71 - <a-form-item label="容器状态">  
72 - <j-dict-select-tag placeholder="请选择容器状态" v-model="queryParam.containerStatus" dictCode="container_status"/>  
73 - </a-form-item>  
74 - </a-col>  
75 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
76 - <a-form-item label="库龄(天)">  
77 - <a-input placeholder="请输入库龄(天)" v-model="queryParam.inventoryAge"></a-input>  
78 - </a-form-item>  
79 - </a-col>  
80 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
81 - <a-form-item label="唯一号">  
82 - <a-input placeholder="请输入唯一号" v-model="queryParam.uniqueCode"></a-input>  
83 - </a-form-item>  
84 - </a-col>  
85 - <a-col :xl="10" :lg="11" :md="12" :sm="24">  
86 - <a-form-item label="创建日期">  
87 - <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择开始时间" class="query-group-cust" v-model="queryParam.createTime_begin"></j-date>  
88 - <span class="query-group-split-cust"></span>  
89 - <j-date :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择结束时间" class="query-group-cust" v-model="queryParam.createTime_end"></j-date>  
90 - </a-form-item>  
91 - </a-col>  
92 - </template>  
93 - <a-col :xl="6" :lg="7" :md="8" :sm="24">  
94 - <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">  
95 - <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>  
96 - <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>  
97 - <a @click="handleToggleSearch" style="margin-left: 8px">  
98 - {{ toggleSearchStatus ? '收起' : '展开' }}  
99 - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>  
100 - </a>  
101 - </span>  
102 - </a-col>  
103 - </a-row>  
104 - </a-form>  
105 - </div>  
106 - <!-- 查询区域-END -->  
107 - 2 + <a-card :bordered="false" :class="'cust-erp-sub-tab'">
108 <!-- 操作按钮区域 --> 3 <!-- 操作按钮区域 -->
109 - <div class="table-operator">  
110 - <a-button v-has="'inventoryChild:superSearch'" @click="handleAdd" type="primary" icon="plus">新增</a-button>  
111 - <a-button v-has="'inventoryChild:export'" type="primary" icon="download" @click="handleExportXls('库存明细')">导出</a-button>  
112 - <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">  
113 - <a-button v-has="'inventoryChild:import'" type="primary" icon="import">导入</a-button> 4 + <div class="table-operator" v-if="mainId">
  5 + <a-button v-has="'inventoryDetail:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
  6 + <a-button v-has="'inventoryDetail:export'" type="primary" icon="download" @click="handleExportXls('库存详情')"
  7 + >导出
  8 + </a-button
  9 + >
  10 + <a-button v-has="'inventoryDetail:export'" type="primary" icon="download" @click="handleExportXls('库存详情')">导出</a-button>
  11 + <a-upload
  12 + v-has="'inventoryDetail:import'"
  13 + name="file"
  14 + :showUploadList="false"
  15 + :multiple="false"
  16 + :headers="tokenHeader"
  17 + :action="importExcelUrl"
  18 + @change="handleImportExcel"
  19 + >
  20 + <a-button type="primary" icon="import">导入</a-button>
114 </a-upload> 21 </a-upload>
115 <a-dropdown v-if="selectedRowKeys.length > 0"> 22 <a-dropdown v-if="selectedRowKeys.length > 0">
116 - <a-menu slot="overlay">  
117 - <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item> 23 + <a-menu slot="overlay" v-has="'inventoryDetail:deleteBatch'">
  24 + <a-menu-item key="1" @click="batchDel">
  25 + <a-icon type="delete"/>
  26 + 删除
  27 + </a-menu-item>
118 </a-menu> 28 </a-menu>
119 - <a-button v-has="'inventoryChild:delete'" style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button> 29 + <a-button style="margin-left: 8px">
  30 + 批量操作
  31 + <a-icon type="down"/>
  32 + </a-button>
120 </a-dropdown> 33 </a-dropdown>
121 </div> 34 </div>
122 35
123 <!-- table区域-begin --> 36 <!-- table区域-begin -->
124 <div> 37 <div>
125 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> 38 <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
126 - <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项 39 + <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
  40 + <a style="font-weight: 600">{{ selectedRowKeys.length }}</a> 项
127 <a style="margin-left: 24px" @click="onClearSelected">清空</a> 41 <a style="margin-left: 24px" @click="onClearSelected">清空</a>
128 </div> 42 </div>
129 43
130 <a-table 44 <a-table
131 ref="table" 45 ref="table"
132 size="middle" 46 size="middle"
133 - :scroll="{x:true}"  
134 bordered 47 bordered
135 rowKey="id" 48 rowKey="id"
  49 + :scroll="{ x: true }"
136 :columns="columns" 50 :columns="columns"
137 :dataSource="dataSource" 51 :dataSource="dataSource"
138 :pagination="ipagination" 52 :pagination="ipagination"
139 :loading="loading" 53 :loading="loading"
140 - :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"  
141 - class="j-table-force-nowrap"  
142 - @change="handleTableChange"> 54 + :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
  55 + @change="handleTableChange"
  56 + >
  57 + <span slot="inventoryStatus_dictText" slot-scope="inventoryStatus_dictText">
  58 + <a-tag :key="inventoryStatus_dictText" :color="getStatusColor(inventoryStatus_dictText)">
  59 + {{ inventoryStatus_dictText }}
  60 + </a-tag>
  61 + </span>
143 62
144 <span slot="companyCode" slot-scope="companyCode"> 63 <span slot="companyCode" slot-scope="companyCode">
145 <a-tag :key="companyCode" color="blue"> 64 <a-tag :key="companyCode" color="blue">
@@ -147,197 +66,248 @@ @@ -147,197 +66,248 @@
147 </a-tag> 66 </a-tag>
148 </span> 67 </span>
149 68
150 - <span slot="zoneCode" slot-scope="zoneCode">  
151 - <a-tag :key="zoneCode" color=blue>  
152 - {{ solutionZoneCode(zoneCode) }}  
153 - </a-tag>  
154 - </span>  
155 -  
156 <template slot="htmlSlot" slot-scope="text"> 69 <template slot="htmlSlot" slot-scope="text">
157 <div v-html="text"></div> 70 <div v-html="text"></div>
158 </template> 71 </template>
159 <template slot="imgSlot" slot-scope="text"> 72 <template slot="imgSlot" slot-scope="text">
160 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span> 73 <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
161 - <img v-else :src="getImgView(text)" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> 74 + <img
  75 + v-else
  76 + :src="getImgView(text)"
  77 + height="25px"
  78 + alt=""
  79 + style="max-width:80px;font-size: 12px;font-style: italic;"
  80 + />
162 </template> 81 </template>
163 <template slot="fileSlot" slot-scope="text"> 82 <template slot="fileSlot" slot-scope="text">
164 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span> 83 <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
165 - <a-button  
166 - v-else  
167 - :ghost="true"  
168 - type="primary"  
169 - icon="download"  
170 - size="small"  
171 - @click="downloadFile(text)"> 84 + <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
172 下载 85 下载
173 </a-button> 86 </a-button>
174 </template> 87 </template>
  88 +
175 <span slot="action" slot-scope="text, record"> 89 <span slot="action" slot-scope="text, record">
176 - <a v-has="'inventoryChild:edit'" @click="handleEdit(record)">编辑</a> 90 + <a v-has="'inventoryDetail:edit'" @click="handleEdit(record)">编辑<a-divider type="vertical"/></a>
  91 + <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
  92 + <a v-has="'inventoryDetail:delete'">删除</a>
  93 + </a-popconfirm>
177 </span> 94 </span>
178 </a-table> 95 </a-table>
179 </div> 96 </div>
180 97
181 - <inventory-child-modal ref="modalForm" @ok="modalFormOk"></inventory-child-modal> 98 + <inventoryDetail-modal ref="modalForm" @ok="modalFormOk" :mainId="mainId"></inventoryDetail-modal>
182 </a-card> 99 </a-card>
183 </template> 100 </template>
184 101
185 <script> 102 <script>
186 -  
187 -import '@/assets/less/TableExpand.less'  
188 -import { mixinDevice } from '@/utils/mixin'  
189 -import { JeecgListMixin } from '@/mixins/JeecgListMixin'  
190 -import InventoryChildModal from './modules/InventoryChildModal'  
191 -import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'  
192 -  
193 -import {getCompanyList, getZoneList} from "@api/api"; 103 +import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  104 +import InventoryDetailModal from './modules/InventoryDetailModal'
  105 +import {getCompanyList, getZoneList} from '@/api/api'
194 106
195 export default { 107 export default {
196 - name: 'InventoryChildList',  
197 - mixins:[JeecgListMixin, mixinDevice],  
198 - components: {  
199 - InventoryChildModal 108 + name: 'InventoryDetailList',
  109 + mixins: [JeecgListMixin],
  110 + components: {InventoryDetailModal},
  111 + props: {
  112 + mainId: {
  113 + type: String,
  114 + default: '',
  115 + required: false
  116 + }
  117 + },
  118 + watch: {
  119 + mainId: {
  120 + immediate: true,
  121 + handler(val) {
  122 + if (!this.mainId) {
  123 + this.clearList()
  124 + } else {
  125 + this.queryParam['inventoryHeaderId'] = val
  126 + this.loadData(1)
  127 + }
  128 + }
  129 + }
200 }, 130 },
201 - data () { 131 + data() {
202 return { 132 return {
203 - zoneList: [], 133 + description: '库存表管理页面',
  134 + disableMixinCreated: true,
204 companyList: [], 135 companyList: [],
205 - description: '库存明细管理页面',  
206 // 表头 136 // 表头
207 columns: [ 137 columns: [
208 { 138 {
209 - title: '#',  
210 - dataIndex: '',  
211 - key:'rowIndex',  
212 - width:60,  
213 - align:"center",  
214 - customRender:function (t,r,index) {  
215 - return parseInt(index)+1;  
216 - }  
217 - },  
218 - {  
219 - title:'货主',  
220 - align:"center",  
221 - dataIndex: 'companyCode'  
222 - },  
223 - {  
224 - title:'库区',  
225 - align:"center",  
226 - dataIndex: 'zoneCode' 139 + title: '库存详情ID',
  140 + align: 'center',
  141 + dataIndex: 'id'
227 }, 142 },
228 { 143 {
229 - title:'容器状态',  
230 - align:"center",  
231 - dataIndex: 'containerStatus_dictText' 144 + title: '货主',
  145 + align: 'center',
  146 + dataIndex: 'companyCode',
  147 + key: 'companyCode',
  148 + scopedSlots: {customRender: 'companyCode'}
232 }, 149 },
  150 + // {
  151 + // title: '库区',
  152 + // align: "center",
  153 + // dataIndex: 'zoneCode'
  154 + // },
233 { 155 {
234 - title:'容器编码',  
235 - align:"center", 156 + title: '容器编码',
  157 + align: 'center',
236 dataIndex: 'containerCode' 158 dataIndex: 'containerCode'
237 }, 159 },
238 { 160 {
239 - title:'库位编码',  
240 - align:"center", 161 + title: '库位编码',
  162 + align: 'center',
241 dataIndex: 'locationCode' 163 dataIndex: 'locationCode'
242 }, 164 },
243 { 165 {
244 - title:'物料编码',  
245 - align:"center", 166 + title: '物料编码',
  167 + align: 'center',
246 dataIndex: 'materialCode' 168 dataIndex: 'materialCode'
247 }, 169 },
248 { 170 {
249 - title:'物料名称',  
250 - align:"center", 171 + title: '物料名称',
  172 + align: 'center',
251 dataIndex: 'materialName' 173 dataIndex: 'materialName'
252 }, 174 },
253 { 175 {
254 - title:'物料规格',  
255 - align:"center", 176 + title: '物料规格',
  177 + align: 'center',
256 dataIndex: 'materialSpec' 178 dataIndex: 'materialSpec'
257 }, 179 },
258 { 180 {
259 - title:'物料单位',  
260 - align:"center", 181 + title: '物料单位',
  182 + align: 'center',
261 dataIndex: 'materialUnit' 183 dataIndex: 'materialUnit'
262 }, 184 },
263 { 185 {
264 - title:'库存状态',  
265 - align:"center",  
266 - dataIndex: 'inventoryStatus_dictText' 186 + title: '数量',
  187 + align: 'center',
  188 + dataIndex: 'qty'
267 }, 189 },
268 { 190 {
269 - title:'库龄(天)',  
270 - align:"center",  
271 - dataIndex: 'inventoryAge' 191 + title: '任务锁定数量',
  192 + align: 'center',
  193 + dataIndex: 'taskQty'
272 }, 194 },
273 { 195 {
274 - title:'唯一号',  
275 - align:"center",  
276 - dataIndex: 'uniqueCode' 196 + title: '托盘填充度',
  197 + align: 'center',
  198 + dataIndex: 'fillDensity',
  199 + customRender: text => {
  200 + return text == null ? '' : text + '%'
  201 + }
277 }, 202 },
278 { 203 {
279 - title:'创建人',  
280 - align:"center", 204 + title: '库存状态',
  205 + align: 'center',
  206 + dataIndex: 'inventoryStatus_dictText',
  207 + scopedSlots: {customRender: 'inventoryStatus_dictText'}
  208 + },
  209 + {
  210 + title: '批次',
  211 + align: 'center',
  212 + dataIndex: 'batch'
  213 + },
  214 + {
  215 + title: '序列号',
  216 + align: "center",
  217 + dataIndex: 'sn'
  218 + },
  219 + {
  220 + title: '入库日期',
  221 + align: 'center',
  222 + dataIndex: 'receiptDate'
  223 + },
  224 + {
  225 + title: '库龄(天)',
  226 + align: 'center',
  227 + dataIndex: 'inventoryAge'
  228 + },
  229 + {
  230 + title: '创建人',
  231 + align: 'center',
281 dataIndex: 'createBy' 232 dataIndex: 'createBy'
282 }, 233 },
283 { 234 {
284 - title:'创建日期',  
285 - align:"center", 235 + title: '创建日期',
  236 + align: 'center',
286 dataIndex: 'createTime' 237 dataIndex: 'createTime'
287 }, 238 },
288 { 239 {
289 - title:'更新人',  
290 - align:"center", 240 + title: '更新人',
  241 + align: 'center',
291 dataIndex: 'updateBy' 242 dataIndex: 'updateBy'
292 }, 243 },
293 { 244 {
294 - title:'更新日期',  
295 - align:"center", 245 + title: '更新日期',
  246 + align: 'center',
296 dataIndex: 'updateTime' 247 dataIndex: 'updateTime'
297 }, 248 },
298 { 249 {
299 title: '操作', 250 title: '操作',
300 dataIndex: 'action', 251 dataIndex: 'action',
301 - align:"center",  
302 - fixed:"right",  
303 - width:147,  
304 - scopedSlots: { customRender: 'action' } 252 + align: 'center',
  253 + fixed: 'right',
  254 + width: 147,
  255 + scopedSlots: {customRender: 'action'}
305 } 256 }
306 ], 257 ],
307 url: { 258 url: {
308 - list: "/inventory/inventoryChild/list",  
309 - delete: "/inventory/inventoryChild/delete",  
310 - deleteBatch: "/inventory/inventoryChild/deleteBatch",  
311 - exportXlsUrl: "/inventory/inventoryChild/exportXls",  
312 - importExcelUrl: "inventory/inventoryChild/importExcel",  
313 - 259 + list: '/inventory/inventoryHeader/listInventoryDetailByMainId',
  260 + delete: '/inventory/inventoryHeader/deleteInventoryDetail',
  261 + deleteBatch: '/inventory/inventoryHeader/deleteBatchInventoryDetail',
  262 + exportXlsUrl: '/inventory/inventoryHeader/exportInventoryDetail',
  263 + importUrl: '/inventory/inventoryHeader/importInventoryDetail'
314 }, 264 },
315 - dictOptions:{},  
316 - superFieldList:[], 265 + dictOptions: {
  266 + containerStatus: []
  267 + }
317 } 268 }
318 }, 269 },
319 created() { 270 created() {
320 - this.getSuperFieldList();  
321 - this.loadFrom(); 271 + this.loadFrom()
322 }, 272 },
323 computed: { 273 computed: {
324 - importExcelUrl: function(){  
325 - return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;  
326 - }, 274 + importExcelUrl() {
  275 + return `${window._CONFIG['domianURL']}/${this.url.importUrl}/${this.mainId}`
  276 + }
327 }, 277 },
328 methods: { 278 methods: {
  279 + getStatusColor(status) {
  280 + const colors = {
  281 + '良品': 'green',
  282 + '报废品': 'purple',
  283 + '待确认 ': 'grey',
  284 + '次品': 'red',
  285 + default: 'blue'
  286 + };
  287 + return colors[status] || colors.default;
  288 + },
329 loadFrom() { 289 loadFrom() {
330 - getZoneList().then((res) => {  
331 - if (res.success) {  
332 - this.zoneList = res.result  
333 - }  
334 - }); 290 + // getZoneList().then((res) => {
  291 + // if (res.success) {
  292 + // this.zoneList = res.result
  293 + // }
  294 + // });
335 getCompanyList().then(res => { 295 getCompanyList().then(res => {
336 if (res.success) { 296 if (res.success) {
337 this.companyList = res.result 297 this.companyList = res.result
338 } 298 }
339 }) 299 })
340 }, 300 },
  301 + // solutionZoneCode(value) {
  302 + // var actions = []
  303 + // Object.keys(this.zoneList).some((key) => {
  304 + // if (this.zoneList[key].code == ('' + value)) {
  305 + // actions.push(this.zoneList[key].name)
  306 + // return true
  307 + // }
  308 + // })
  309 + // return actions.join('')
  310 + // },
341 solutionCompany(value) { 311 solutionCompany(value) {
342 var actions = [] 312 var actions = []
343 Object.keys(this.companyList).some(key => { 313 Object.keys(this.companyList).some(key => {
@@ -348,41 +318,14 @@ export default { @@ -348,41 +318,14 @@ export default {
348 }) 318 })
349 return actions.join('') 319 return actions.join('')
350 }, 320 },
351 - solutionZoneCode(value) {  
352 - var actions = []  
353 - Object.keys(this.zoneList).some((key) => {  
354 - if (this.zoneList[key].code == ('' + value)) {  
355 - actions.push(this.zoneList[key].name)  
356 - return true  
357 - }  
358 - })  
359 - return actions.join('')  
360 - },  
361 - initDictConfig(){  
362 - },  
363 - getSuperFieldList(){  
364 - let fieldList=[];  
365 - fieldList.push({type:'string',value:'companyCode',text:'货主',dictCode:''})  
366 - fieldList.push({type:'string',value:'zoneCode',text:'库区',dictCode:''})  
367 - fieldList.push({type:'string',value:'containerStatus',text:'容器状态',dictCode:'container_status'})  
368 - fieldList.push({type:'string',value:'containerCode',text:'容器编码',dictCode:''})  
369 - fieldList.push({type:'string',value:'locationCode',text:'库位编码',dictCode:''})  
370 - fieldList.push({type:'string',value:'materialCode',text:'物料编码',dictCode:''})  
371 - fieldList.push({type:'string',value:'materialName',text:'物料名称',dictCode:''})  
372 - fieldList.push({type:'string',value:'materialSpec',text:'物料规格',dictCode:''})  
373 - fieldList.push({type:'string',value:'materialUnit',text:'物料单位',dictCode:''})  
374 - fieldList.push({type:'string',value:'inventoryStatus',text:'库存状态',dictCode:'inventory_status'})  
375 - fieldList.push({type:'int',value:'inventoryAge',text:'库龄(天)',dictCode:''})  
376 - fieldList.push({type:'string',value:'uniqueCode',text:'唯一号',dictCode:''})  
377 - fieldList.push({type:'string',value:'createBy',text:'创建人',dictCode:''})  
378 - fieldList.push({type:'datetime',value:'createTime',text:'创建日期'})  
379 - fieldList.push({type:'string',value:'updateBy',text:'更新人',dictCode:''})  
380 - fieldList.push({type:'datetime',value:'updateTime',text:'更新日期'})  
381 - this.superFieldList = fieldList 321 + clearList() {
  322 + this.dataSource = []
  323 + this.selectedRowKeys = []
  324 + this.ipagination.current = 1
382 } 325 }
383 } 326 }
384 } 327 }
385 </script> 328 </script>
386 <style scoped> 329 <style scoped>
387 - @import '~@assets/less/common.less'; 330 +@import '~@assets/less/common.less';
388 </style> 331 </style>
389 \ No newline at end of file 332 \ No newline at end of file
ant-design-vue-jeecg/src/views/system/inventory/InventoryDetailList.vue
@@ -189,9 +189,9 @@ export default { @@ -189,9 +189,9 @@ export default {
189 dataIndex: 'batch' 189 dataIndex: 'batch'
190 }, 190 },
191 // { 191 // {
192 - // title: '唯一号', 192 + // title: '序列号',
193 // align: "center", 193 // align: "center",
194 - // dataIndex: 'uniqueCode' 194 + // dataIndex: 'sn'
195 // }, 195 // },
196 { 196 {
197 title: '入库日期', 197 title: '入库日期',
ant-design-vue-jeecg/src/views/system/inventory/SimpleInventoryDetailList.vue
@@ -77,8 +77,8 @@ @@ -77,8 +77,8 @@
77 </a-form-item> 77 </a-form-item>
78 </a-col> 78 </a-col>
79 <!-- <a-col :xl="6" :lg="7" :md="8" :sm="24"> 79 <!-- <a-col :xl="6" :lg="7" :md="8" :sm="24">
80 - <a-form-item label="唯一号">  
81 - <a-input placeholder="请输入唯一号" v-model="queryParam.uniqueCode"></a-input> 80 + <a-form-item label="序列号">
  81 + <a-input placeholder="请输入序列号" v-model="queryParam.sn"></a-input>
82 </a-form-item> 82 </a-form-item>
83 </a-col> --> 83 </a-col> -->
84 <a-col :xl="12" :lg="14" :md="16" :sm="24"> 84 <a-col :xl="12" :lg="14" :md="16" :sm="24">
@@ -320,9 +320,9 @@ export default { @@ -320,9 +320,9 @@ export default {
320 dataIndex: 'batch' 320 dataIndex: 'batch'
321 }, 321 },
322 // { 322 // {
323 - // title:'唯一号', 323 + // title:'序列号',
324 // align:"center", 324 // align:"center",
325 - // dataIndex: 'uniqueCode' 325 + // dataIndex: 'sn'
326 // }, 326 // },
327 { 327 {
328 title: '入库日期', 328 title: '入库日期',
@@ -443,7 +443,7 @@ export default { @@ -443,7 +443,7 @@ export default {
443 fieldList.push({type: 'BigDecimal', value: 'taskQty', text: '任务锁定数量', dictCode: ''}) 443 fieldList.push({type: 'BigDecimal', value: 'taskQty', text: '任务锁定数量', dictCode: ''})
444 fieldList.push({type: 'string', value: 'inventoryStatus', text: '库存状态', dictCode: 'inventory_status'}) 444 fieldList.push({type: 'string', value: 'inventoryStatus', text: '库存状态', dictCode: 'inventory_status'})
445 fieldList.push({type: 'string', value: 'batch', text: '批次', dictCode: ''}) 445 fieldList.push({type: 'string', value: 'batch', text: '批次', dictCode: ''})
446 - // fieldList.push({type:'string',value:'uniqueCode',text:'唯一号',dictCode:''}) 446 + // fieldList.push({type:'string',value:'sn',text:'序列号',dictCode:''})
447 fieldList.push({type: 'datetime', value: 'receiptDate', text: '入库日期'}) 447 fieldList.push({type: 'datetime', value: 'receiptDate', text: '入库日期'})
448 fieldList.push({type: 'int', value: 'inventoryAge', text: '库龄(天)', dictCode: ''}) 448 fieldList.push({type: 'int', value: 'inventoryAge', text: '库龄(天)', dictCode: ''})
449 fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''}) 449 fieldList.push({type: 'string', value: 'createBy', text: '创建人', dictCode: ''})
ant-design-vue-jeecg/src/views/system/inventory/modules/InventoryChildForm.vue
@@ -59,8 +59,8 @@ @@ -59,8 +59,8 @@
59 </a-form-model-item> 59 </a-form-model-item>
60 </a-col> 60 </a-col>
61 <a-col :span="24"> 61 <a-col :span="24">
62 - <a-form-model-item label="唯一号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="uniqueCode">  
63 - <a-input v-model="model.uniqueCode" placeholder="请输入唯一号" ></a-input> 62 + <a-form-model-item label="序列号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sn">
  63 + <a-input v-model="model.sn" placeholder="请输入序列号" ></a-input>
64 </a-form-model-item> 64 </a-form-model-item>
65 </a-col> 65 </a-col>
66 </a-row> 66 </a-row>
@@ -106,8 +106,8 @@ validatorRules: { @@ -106,8 +106,8 @@ validatorRules: {
106 materialName: [ 106 materialName: [
107 { required: true, message: '请输入物料名称!'}, 107 { required: true, message: '请输入物料名称!'},
108 ], 108 ],
109 - uniqueCode: [  
110 - { required: true, message: '请输入唯一号!'}, 109 + sn: [
  110 + { required: true, message: '请输入序列号!'},
111 ], 111 ],
112 }, 112 },
113 url: { 113 url: {
@@ -160,7 +160,7 @@ validatorRules: { @@ -160,7 +160,7 @@ validatorRules: {
160 that.confirmLoading = false; 160 that.confirmLoading = false;
161 }) 161 })
162 } 162 }
163 - 163 +
164 }) 164 })
165 }, 165 },
166 } 166 }
ant-design-vue-jeecg/src/views/system/inventory/subTables/InventoryDetailSubTable.vue
@@ -2,33 +2,33 @@ @@ -2,33 +2,33 @@
2 <a-card :bordered="false" :class="'cust-erp-sub-tab'"> 2 <a-card :bordered="false" :class="'cust-erp-sub-tab'">
3 <!-- 操作按钮区域 --> 3 <!-- 操作按钮区域 -->
4 <div class="table-operator" v-if="mainId"> 4 <div class="table-operator" v-if="mainId">
5 - <!-- <a-button v-has="'inventoryDetail:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button> --> 5 + <a-button v-has="'inventoryDetail:add'" @click="handleAdd" type="primary" icon="plus">新增</a-button>
6 <a-button type="primary" icon="download" @click="handleExportXls('库存详情')">导出</a-button> 6 <a-button type="primary" icon="download" @click="handleExportXls('库存详情')">导出</a-button>
7 </div> 7 </div>
8 8
9 <!-- table区域-begin --> 9 <!-- table区域-begin -->
10 <div> 10 <div>
11 - <a-table 11 + <a-table
12 ref="table" 12 ref="table"
13 size="middle" 13 size="middle"
14 bordered 14 bordered
15 rowKey="id" 15 rowKey="id"
16 - :scroll="{ x: true }" 16 + :scroll="{x:true}"
17 :columns="columns" 17 :columns="columns"
18 :dataSource="dataSource" 18 :dataSource="dataSource"
19 :pagination="ipagination" 19 :pagination="ipagination"
20 :loading="loading" 20 :loading="loading"
21 - @change="handleTableChange"  
22 - class='j-table-force-nowrap'  
23 - >  
24 -  
25 - <span slot="inventoryStatus_dictText" slot-scope="inventoryStatus_dictText"> 21 + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
  22 + @change="handleTableChange">
  23 +
  24 + <span slot="inventoryStatus_dictText" slot-scope="inventoryStatus_dictText">
26 <a-tag :key="inventoryStatus_dictText" :color="getStatusColor(inventoryStatus_dictText)"> 25 <a-tag :key="inventoryStatus_dictText" :color="getStatusColor(inventoryStatus_dictText)">
27 {{ inventoryStatus_dictText }} 26 {{ inventoryStatus_dictText }}
28 </a-tag> 27 </a-tag>
29 </span> 28 </span>
30 - 29 +
31 <span slot="companyCode" slot-scope="companyCode"> 30 <span slot="companyCode" slot-scope="companyCode">
  31 +
32 <a-tag :key="companyCode" color="blue"> 32 <a-tag :key="companyCode" color="blue">
33 {{ solutionCompany(companyCode) }} 33 {{ solutionCompany(companyCode) }}
34 </a-tag> 34 </a-tag>
@@ -47,13 +47,17 @@ @@ -47,13 +47,17 @@
47 </template> 47 </template>
48 48
49 <script> 49 <script>
  50 +
50 import { JeecgListMixin } from '@/mixins/JeecgListMixin' 51 import { JeecgListMixin } from '@/mixins/JeecgListMixin'
51 import InventoryDetailModal from '../modules/InventoryDetailModal' 52 import InventoryDetailModal from '../modules/InventoryDetailModal'
  53 +
52 import { getCompanyList, getZoneList } from '@/api/api' 54 import { getCompanyList, getZoneList } from '@/api/api'
53 55
54 export default { 56 export default {
  57 +
55 name: 'InventoryDetailSubTable', 58 name: 'InventoryDetailSubTable',
56 mixins: [JeecgListMixin], 59 mixins: [JeecgListMixin],
  60 +
57 components: { InventoryDetailModal }, 61 components: { InventoryDetailModal },
58 props: { 62 props: {
59 mainId: { 63 mainId: {
@@ -69,6 +73,7 @@ export default { @@ -69,6 +73,7 @@ export default {
69 if (!this.mainId) { 73 if (!this.mainId) {
70 this.clearList() 74 this.clearList()
71 } else { 75 } else {
  76 +
72 this.queryParam['zoneCode'] = val.split("_")[0]; 77 this.queryParam['zoneCode'] = val.split("_")[0];
73 this.queryParam['materialCode'] = val.split("_")[1]; 78 this.queryParam['materialCode'] = val.split("_")[1];
74 this.loadData(1) 79 this.loadData(1)
@@ -78,6 +83,7 @@ export default { @@ -78,6 +83,7 @@ export default {
78 }, 83 },
79 data() { 84 data() {
80 return { 85 return {
  86 +
81 description: '库存物料汇总详情页面', 87 description: '库存物料汇总详情页面',
82 disableMixinCreated: true, 88 disableMixinCreated: true,
83 companyList: [], 89 companyList: [],
@@ -86,18 +92,22 @@ export default { @@ -86,18 +92,22 @@ export default {
86 columns: [ 92 columns: [
87 { 93 {
88 title: '库存详情ID', 94 title: '库存详情ID',
  95 +
89 align: 'center', 96 align: 'center',
90 dataIndex: 'id' 97 dataIndex: 'id'
91 }, 98 },
92 { 99 {
93 title: '货主', 100 title: '货主',
  101 +
94 align: 'center', 102 align: 'center',
95 dataIndex: 'companyCode', 103 dataIndex: 'companyCode',
96 key: 'companyCode', 104 key: 'companyCode',
  105 +
97 scopedSlots: { customRender: 'companyCode' } 106 scopedSlots: { customRender: 'companyCode' }
98 }, 107 },
99 { 108 {
100 title: '库区', 109 title: '库区',
  110 +
101 align: 'center', 111 align: 'center',
102 dataIndex: 'zoneCode', 112 dataIndex: 'zoneCode',
103 key: 'zoneCode', 113 key: 'zoneCode',
@@ -123,11 +133,6 @@ export default { @@ -123,11 +133,6 @@ export default {
123 align: 'center', 133 align: 'center',
124 dataIndex: 'materialName' 134 dataIndex: 'materialName'
125 }, 135 },
126 - // {  
127 - // title: '物料规格',  
128 - // align: 'center',  
129 - // dataIndex: 'materialSpec'  
130 - // },  
131 { 136 {
132 title: '物料单位', 137 title: '物料单位',
133 align: 'center', 138 align: 'center',
@@ -160,9 +165,9 @@ export default { @@ -160,9 +165,9 @@ export default {
160 dataIndex: 'batch' 165 dataIndex: 'batch'
161 }, 166 },
162 { 167 {
163 - title: '唯一号', 168 + title: '序列号',
164 align: 'center', 169 align: 'center',
165 - dataIndex: 'uniqueCode' 170 + dataIndex: 'sn'
166 }, 171 },
167 { 172 {
168 title: '入库日期', 173 title: '入库日期',
@@ -191,21 +196,12 @@ export default { @@ -191,21 +196,12 @@ export default {
191 }, 196 },
192 { 197 {
193 title: '更新日期', 198 title: '更新日期',
194 - align: 'center' 199 + align: 'center',
  200 + dataIndex: 'updateTime'
195 }, 201 },
196 - // {  
197 - // title: '操作',  
198 - // dataIndex: 'action',  
199 - // align: 'center',  
200 - // fixed: 'right',  
201 - // width: 147,  
202 - // scopedSlots: { customRender: 'action' }  
203 - // }  
204 ], 202 ],
205 url: { 203 url: {
206 - list: '/InventoryMaterialSummary/inventoryMaterialSummary/inventoryMaterialSummaryChild',  
207 - exportXlsUrl: '/inventory/inventoryHeader/exportInventoryDetail',  
208 - importUrl: '/inventory/inventoryHeader/importInventoryDetail' 204 + importUrl: "/inventory/inventoryHeader/importInventoryDetail",
209 }, 205 },
210 dictOptions: { 206 dictOptions: {
211 containerStatus: [] 207 containerStatus: []
@@ -213,7 +209,7 @@ export default { @@ -213,7 +209,7 @@ export default {
213 } 209 }
214 }, 210 },
215 created() { 211 created() {
216 - this.loadFrom() 212 + this.loadFrom();
217 }, 213 },
218 computed: { 214 computed: {
219 importExcelUrl() { 215 importExcelUrl() {
@@ -232,6 +228,7 @@ export default { @@ -232,6 +228,7 @@ export default {
232 return colors[status] || colors.default; 228 return colors[status] || colors.default;
233 }, 229 },
234 loadFrom() { 230 loadFrom() {
  231 +
235 getCompanyList().then(res => { 232 getCompanyList().then(res => {
236 if (res.success) { 233 if (res.success) {
237 this.companyList = res.result 234 this.companyList = res.result
@@ -244,6 +241,7 @@ export default { @@ -244,6 +241,7 @@ export default {
244 }) 241 })
245 }, 242 },
246 solutionCompany(value) { 243 solutionCompany(value) {
  244 +
247 let actions = [] 245 let actions = []
248 Object.keys(this.companyList).some(key => { 246 Object.keys(this.companyList).some(key => {
249 if (this.companyList[key].code === '' + value) { 247 if (this.companyList[key].code === '' + value) {
ant-design-vue-jeecg/src/views/system/receipt/ReceiptContainerHeaderList.vue
@@ -117,8 +117,8 @@ @@ -117,8 +117,8 @@
117 </a-button> 117 </a-button>
118 </template> 118 </template>
119 <span slot="action" slot-scope="text, record"> 119 <span slot="action" slot-scope="text, record">
120 - <a v-if="record.status == 0 && record.taskType == 200" @click="selectFillPort(record)" v-has="'receiptContainerHeader:fill'"><a-button type="primary">生成任务</a-button> <a-divider type="vertical"/></a>  
121 - <a v-else-if="record.status == 0" @click="selectContainerStatus(record)" v-has="'receiptContainerHeader:fill'"><a-button type="primary">生成任务</a-button> <a-divider type="vertical"/></a> 120 + <a v-if="record.status == 0 && record.taskType == 200" @click="selectFillPort(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button> <a-divider type="vertical"/></a>
  121 + <a v-else-if="record.status == 0" @click="selectContainerStatus(record)" v-has="'receiptContainerHeader:createTask'"><a-button type="primary">生成任务</a-button> <a-divider type="vertical"/></a>
122 <!-- <a v-if="record.status == 0 && record.taskType == 200" @click="selectPort(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>--> 122 <!-- <a v-if="record.status == 0 && record.taskType == 200" @click="selectPort(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>-->
123 <!-- <a v-else-if="record.status == 0" @click="createTask(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>--> 123 <!-- <a v-else-if="record.status == 0" @click="createTask(record)" v-has="'receiptContainerHeader:createTask'">生成任务<a-divider type="vertical"/></a>-->
124 <a-popconfirm v-if="record.status == 0" v-has="'receiptContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)"> 124 <a-popconfirm v-if="record.status == 0" v-has="'receiptContainerHeader:delete'" title="确定取消配盘吗?" @confirm="() => handleDelete(record.id)">
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java
@@ -123,6 +123,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @@ -123,6 +123,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
123 if (roadWays == null || roadWays.size() == 0) { 123 if (roadWays == null || roadWays.size() == 0) {
124 throw new JeecgBootException("分配库位时, 巷道为空"); 124 throw new JeecgBootException("分配库位时, 巷道为空");
125 } 125 }
  126 + Collections.shuffle(roadWays);
126 Integer roadWay = locationAllocationService.getRoadWay(roadWays, warehouseCode); 127 Integer roadWay = locationAllocationService.getRoadWay(roadWays, warehouseCode);
127 // 优先找外侧库位 128 // 优先找外侧库位
128 LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); 129 LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
@@ -176,6 +177,10 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @@ -176,6 +177,10 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
176 roadWays = locationList.stream().map(Location::getRoadWay).distinct().collect(toList()); 177 roadWays = locationList.stream().map(Location::getRoadWay).distinct().collect(toList());
177 } 178 }
178 String lastString = "ORDER BY high asc, layer asc, id asc limit 1"; 179 String lastString = "ORDER BY high asc, layer asc, id asc limit 1";
  180 + if (roadWays == null || roadWays.size() == 0) {
  181 + throw new JeecgBootException("分配库位时, 巷道为空");
  182 + }
  183 + Collections.shuffle(roadWays);
179 Integer roadWay = locationAllocationService.getRoadWay(roadWays, warehouseCode); 184 Integer roadWay = locationAllocationService.getRoadWay(roadWays, warehouseCode);
180 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); 185 LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery();
181 locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) 186 locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay)
@@ -194,11 +199,18 @@ public class LocationAllocationServiceImpl implements LocationAllocationService @@ -194,11 +199,18 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
194 @Override 199 @Override
195 @Transactional(rollbackFor = Exception.class) 200 @Transactional(rollbackFor = Exception.class)
196 public Integer getRoadWay(List<Integer> roadWays, String warehouseCode) { 201 public Integer getRoadWay(List<Integer> roadWays, String warehouseCode) {
  202 + if (StringUtils.isEmpty(roadWays)) {
  203 + throw new JeecgBootException("分配库位错误,没有巷道");
  204 + }
  205 + int roadWay = roadWays.get(0);
197 if (roadWays.size() == 1) { 206 if (roadWays.size() == 1) {
198 - return roadWays.get(0); 207 + return roadWay;
199 } 208 }
200 roadWays = locationAllocationService.removeRoadWaysByPreLocations(roadWays, warehouseCode); 209 roadWays = locationAllocationService.removeRoadWaysByPreLocations(roadWays, warehouseCode);
201 - int roadWay = getRoadWayByMaxFreeLocation(roadWays, warehouseCode); 210 + if (StringUtils.isEmpty(roadWays)) {
  211 + return roadWay;
  212 + }
  213 + roadWay = getRoadWayByMaxFreeLocation(roadWays, warehouseCode);
202 return roadWay; 214 return roadWay;
203 } 215 }
204 216
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
@@ -119,6 +119,7 @@ public class WcsServiceImpl implements WcsService { @@ -119,6 +119,7 @@ public class WcsServiceImpl implements WcsService {
119 String height = warecellDomain.getHeight(); 119 String height = warecellDomain.getHeight();
120 String taskNo = warecellDomain.getTaskNo(); 120 String taskNo = warecellDomain.getTaskNo();
121 String locationCode = null; 121 String locationCode = null;
  122 + Integer preTaskNo = 0;
122 List<Integer> roadWays = warecellDomain.getRoadWays(); 123 List<Integer> roadWays = warecellDomain.getRoadWays();
123 if (height == null) { 124 if (height == null) {
124 return Result.error("分配库位时,高度为空"); 125 return Result.error("分配库位时,高度为空");
@@ -139,6 +140,13 @@ public class WcsServiceImpl implements WcsService { @@ -139,6 +140,13 @@ public class WcsServiceImpl implements WcsService {
139 } 140 }
140 int taskType = taskHeader.getTaskType(); 141 int taskType = taskHeader.getTaskType();
141 String containerCode = taskHeader.getContainerCode(); 142 String containerCode = taskHeader.getContainerCode();
  143 + String toLocationCode = taskHeader.getToLocationCode();
  144 + if (StringUtils.isNotEmpty(toLocationCode)) {
  145 + WcsTask wcsTask2 = new WcsTask();
  146 + wcsTask2.setToLocationCode(toLocationCode);
  147 + wcsTask2.setPreTaskNo(String.valueOf(preTaskNo));
  148 + return Result.OK(wcsTask2);
  149 + }
142 Container container = containerService.getContainerByCode(containerCode, warehouseCode); 150 Container container = containerService.getContainerByCode(containerCode, warehouseCode);
143 if (container == null) { 151 if (container == null) {
144 return Result.error("分配库位时,任务托盘为空"); 152 return Result.error("分配库位时,任务托盘为空");
@@ -228,7 +236,6 @@ public class WcsServiceImpl implements WcsService { @@ -228,7 +236,6 @@ public class WcsServiceImpl implements WcsService {
228 // 修改任务明细目标库位 236 // 修改任务明细目标库位
229 Location location = locationService.getLocationByCode(locationCode, warehouseCode); 237 Location location = locationService.getLocationByCode(locationCode, warehouseCode);
230 int rowFlag = location.getRowFlag().intValue(); 238 int rowFlag = location.getRowFlag().intValue();
231 - Integer preTaskNo = 0;  
232 // 如果是外侧库位,那么就要判断该库位对应的内侧库位是不是有托盘 239 // 如果是外侧库位,那么就要判断该库位对应的内侧库位是不是有托盘
233 if (rowFlag == QuantityConstant.ROW_OUT) { 240 if (rowFlag == QuantityConstant.ROW_OUT) {
234 Location insideLocation = locationService.getInsideNear(location); 241 Location insideLocation = locationService.getInsideNear(location);
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryChild/entity/InventoryChild.java
1 package org.jeecg.modules.wms.inventory.inventoryChild.entity; 1 package org.jeecg.modules.wms.inventory.inventoryChild.entity;
2 2
3 import java.io.Serializable; 3 import java.io.Serializable;
4 -import java.io.UnsupportedEncodingException;  
5 import java.util.Date; 4 import java.util.Date;
6 -import java.math.BigDecimal; 5 +
  6 +import org.jeecg.common.aspect.annotation.Dict;
  7 +import org.jeecgframework.poi.excel.annotation.Excel;
  8 +
7 import com.baomidou.mybatisplus.annotation.IdType; 9 import com.baomidou.mybatisplus.annotation.IdType;
8 import com.baomidou.mybatisplus.annotation.TableId; 10 import com.baomidou.mybatisplus.annotation.TableId;
9 import com.baomidou.mybatisplus.annotation.TableName; 11 import com.baomidou.mybatisplus.annotation.TableName;
10 -import lombok.Data;  
11 -import com.fasterxml.jackson.annotation.JsonFormat;  
12 -import org.springframework.format.annotation.DateTimeFormat;  
13 -import org.jeecgframework.poi.excel.annotation.Excel;  
14 -import org.jeecg.common.aspect.annotation.Dict; 12 +
15 import io.swagger.annotations.ApiModel; 13 import io.swagger.annotations.ApiModel;
16 import io.swagger.annotations.ApiModelProperty; 14 import io.swagger.annotations.ApiModelProperty;
  15 +import lombok.Data;
17 import lombok.EqualsAndHashCode; 16 import lombok.EqualsAndHashCode;
18 import lombok.experimental.Accessors; 17 import lombok.experimental.Accessors;
19 18
20 /** 19 /**
21 * @Description: 库存明细 20 * @Description: 库存明细
22 - * @Author: jeecg-boot  
23 - * @Date: 2023-03-24  
24 - * @Version: V1.0 21 + * @Author: jeecg-boot
  22 + * @Date: 2023-03-24
  23 + * @Version: V1.0
25 */ 24 */
26 @Data 25 @Data
27 @TableName("inventory_child") 26 @TableName("inventory_child")
28 @Accessors(chain = true) 27 @Accessors(chain = true)
29 @EqualsAndHashCode(callSuper = false) 28 @EqualsAndHashCode(callSuper = false)
30 -@ApiModel(value="inventory_child对象", description="库存明细") 29 +@ApiModel(value = "inventory_child对象", description = "库存明细")
31 public class InventoryChild implements Serializable { 30 public class InventoryChild implements Serializable {
32 private static final long serialVersionUID = 1L; 31 private static final long serialVersionUID = 1L;
33 32
34 - /**主键*/  
35 - @TableId(type = IdType.ASSIGN_ID) 33 + /** 主键 */
  34 + @TableId(type = IdType.ASSIGN_ID)
36 @ApiModelProperty(value = "主键") 35 @ApiModelProperty(value = "主键")
37 private String id; 36 private String id;
38 - /**库存头ID*/  
39 - @Excel(name = "库存头ID", width = 15) 37 + /** 库存头ID */
  38 + @Excel(name = "库存头ID", width = 15)
40 @ApiModelProperty(value = "库存头ID") 39 @ApiModelProperty(value = "库存头ID")
41 private Integer inventoryHeaderId; 40 private Integer inventoryHeaderId;
42 - /**仓库编码*/  
43 - @Excel(name = "仓库编码", width = 15) 41 + /** 仓库编码 */
  42 + @Excel(name = "仓库编码", width = 15)
44 @ApiModelProperty(value = "仓库编码") 43 @ApiModelProperty(value = "仓库编码")
45 private String warehouseCode; 44 private String warehouseCode;
46 - /**货主*/  
47 - @Excel(name = "货主", width = 15) 45 + /** 货主 */
  46 + @Excel(name = "货主", width = 15)
48 @ApiModelProperty(value = "货主") 47 @ApiModelProperty(value = "货主")
49 private String companyCode; 48 private String companyCode;
50 - /**库区*/  
51 - @Excel(name = "库区", width = 15) 49 + /** 库区 */
  50 + @Excel(name = "库区", width = 15)
52 @ApiModelProperty(value = "库区") 51 @ApiModelProperty(value = "库区")
53 private String zoneCode; 52 private String zoneCode;
54 - /**容器状态*/  
55 - @Excel(name = "容器状态", width = 15, dicCode = "container_status")  
56 - @Dict(dicCode = "container_status") 53 + /** 容器状态 */
  54 + @Excel(name = "容器状态", width = 15, dicCode = "container_status")
  55 + @Dict(dicCode = "container_status")
57 @ApiModelProperty(value = "容器状态") 56 @ApiModelProperty(value = "容器状态")
58 private String containerStatus; 57 private String containerStatus;
59 - /**容器编码*/  
60 - @Excel(name = "容器编码", width = 15) 58 + /** 容器编码 */
  59 + @Excel(name = "容器编码", width = 15)
61 @ApiModelProperty(value = "容器编码") 60 @ApiModelProperty(value = "容器编码")
62 private String containerCode; 61 private String containerCode;
63 - /**库位编码*/  
64 - @Excel(name = "库位编码", width = 15) 62 + /** 库位编码 */
  63 + @Excel(name = "库位编码", width = 15)
65 @ApiModelProperty(value = "库位编码") 64 @ApiModelProperty(value = "库位编码")
66 private String locationCode; 65 private String locationCode;
67 - /**物料编码*/  
68 - @Excel(name = "物料编码", width = 15) 66 + /** 物料编码 */
  67 + @Excel(name = "物料编码", width = 15)
69 @ApiModelProperty(value = "物料编码") 68 @ApiModelProperty(value = "物料编码")
70 private String materialCode; 69 private String materialCode;
71 - /**物料名称*/  
72 - @Excel(name = "物料名称", width = 15) 70 + /** 物料名称 */
  71 + @Excel(name = "物料名称", width = 15)
73 @ApiModelProperty(value = "物料名称") 72 @ApiModelProperty(value = "物料名称")
74 private String materialName; 73 private String materialName;
75 - /**物料规格*/  
76 - @Excel(name = "物料规格", width = 15) 74 + /** 物料规格 */
  75 + @Excel(name = "物料规格", width = 15)
77 @ApiModelProperty(value = "物料规格") 76 @ApiModelProperty(value = "物料规格")
78 private String materialSpec; 77 private String materialSpec;
79 - /**物料单位*/  
80 - @Excel(name = "物料单位", width = 15) 78 + /** 物料单位 */
  79 + @Excel(name = "物料单位", width = 15)
81 @ApiModelProperty(value = "物料单位") 80 @ApiModelProperty(value = "物料单位")
82 private String materialUnit; 81 private String materialUnit;
83 - /**库存状态*/  
84 - @Excel(name = "库存状态", width = 15, dicCode = "inventory_status")  
85 - @Dict(dicCode = "inventory_status") 82 + /** 库存状态 */
  83 + @Excel(name = "库存状态", width = 15, dicCode = "inventory_status")
  84 + @Dict(dicCode = "inventory_status")
86 @ApiModelProperty(value = "库存状态") 85 @ApiModelProperty(value = "库存状态")
87 private String inventoryStatus; 86 private String inventoryStatus;
88 - /**库龄(天)*/  
89 - @Excel(name = "库龄(天)", width = 15) 87 + /** 库龄(天) */
  88 + @Excel(name = "库龄(天)", width = 15)
90 @ApiModelProperty(value = "库龄(天)") 89 @ApiModelProperty(value = "库龄(天)")
91 private Integer inventoryAge; 90 private Integer inventoryAge;
92 - /**唯一号*/  
93 - @Excel(name = "唯一号", width = 15)  
94 - @ApiModelProperty(value = "唯一号")  
95 - private String uniqueCode;  
96 - /**创建人*/ 91 + /** 序列号 */
  92 + @Excel(name = "序列号", width = 15)
  93 + @ApiModelProperty(value = "序列号")
  94 + private String sn;
  95 + /** 创建人 */
97 @ApiModelProperty(value = "创建人") 96 @ApiModelProperty(value = "创建人")
98 private String createBy; 97 private String createBy;
99 - /**创建日期*/ 98 + /** 创建日期 */
100 @ApiModelProperty(value = "创建日期") 99 @ApiModelProperty(value = "创建日期")
101 private Date createTime; 100 private Date createTime;
102 - /**更新人*/ 101 + /** 更新人 */
103 @ApiModelProperty(value = "更新人") 102 @ApiModelProperty(value = "更新人")
104 private String updateBy; 103 private String updateBy;
105 - /**更新日期*/ 104 + /** 更新日期 */
106 @ApiModelProperty(value = "更新日期") 105 @ApiModelProperty(value = "更新日期")
107 private Date updateTime; 106 private Date updateTime;
108 } 107 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryHeader/entity/InventoryDetail.java
@@ -106,14 +106,17 @@ public class InventoryDetail implements Serializable { @@ -106,14 +106,17 @@ public class InventoryDetail implements Serializable {
106 @Excel(name = "项目号", width = 15) 106 @Excel(name = "项目号", width = 15)
107 @ApiModelProperty(value = "项目号") 107 @ApiModelProperty(value = "项目号")
108 private String project; 108 private String project;
109 - /** 唯一号 */  
110 - @Excel(name = "唯一号", width = 15)  
111 - @ApiModelProperty(value = "唯一号")  
112 - private String uniqueCode; 109 + /** 序列号 */
  110 + @Excel(name = "序列号", width = 15)
  111 + @ApiModelProperty(value = "序列号")
  112 + private String sn;
113 /** 箱码 */ 113 /** 箱码 */
114 @Excel(name = "箱码", width = 15) 114 @Excel(name = "箱码", width = 15)
115 @ApiModelProperty(value = "箱码") 115 @ApiModelProperty(value = "箱码")
116 private String boxCode; 116 private String boxCode;
  117 + @Excel(name = "收货日期", width = 15)
  118 + @ApiModelProperty(value = "收货日期")
  119 + private Date receiveTime;
117 /** 入库日期 */ 120 /** 入库日期 */
118 @Excel(name = "入库日期", width = 15) 121 @Excel(name = "入库日期", width = 15)
119 @ApiModelProperty(value = "入库日期") 122 @ApiModelProperty(value = "入库日期")
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/inventory/inventoryTransaction/entity/InventoryTransaction.java
@@ -125,10 +125,10 @@ public class InventoryTransaction implements Serializable { @@ -125,10 +125,10 @@ public class InventoryTransaction implements Serializable {
125 @Excel(name = "项目号", width = 15) 125 @Excel(name = "项目号", width = 15)
126 @ApiModelProperty(value = "项目号") 126 @ApiModelProperty(value = "项目号")
127 private String project; 127 private String project;
128 - /** 唯一号 */  
129 - @Excel(name = "唯一号", width = 15)  
130 - @ApiModelProperty(value = "唯一号")  
131 - private String uniqueCode; 128 + /** 序列号 */
  129 + @Excel(name = "序列号", width = 15)
  130 + @ApiModelProperty(value = "序列号")
  131 + private String sn;
132 /** 备用字段1 */ 132 /** 备用字段1 */
133 @Excel(name = "备用字段1", width = 15) 133 @Excel(name = "备用字段1", width = 15)
134 @ApiModelProperty(value = "备用字段1") 134 @ApiModelProperty(value = "备用字段1")
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/monitor/operation/service/impl/OperationLogServiceImpl.java
@@ -48,7 +48,7 @@ public class OperationLogServiceImpl extends ServiceImpl&lt;OperationLogMapper, Ope @@ -48,7 +48,7 @@ public class OperationLogServiceImpl extends ServiceImpl&lt;OperationLogMapper, Ope
48 switch (logDTO.getTag()) { 48 switch (logDTO.getTag()) {
49 case "入库组盘": 49 case "入库组盘":
50 message = "容器编码:{},物料编码:{},数量:{}"; 50 message = "容器编码:{},物料编码:{},数量:{}";
51 - operationLogList.addAll(createOperationLogs(logDTO, ReceiptContainerDetail.class, "getUniqueCode", message, "getReferCode", 51 + operationLogList.addAll(createOperationLogs(logDTO, ReceiptContainerDetail.class, "getsn", message, "getReferCode",
52 "getReceiptCode", "getWarehouseCode", "getContainerCode", "getMaterialCode", "getQty")); 52 "getReceiptCode", "getWarehouseCode", "getContainerCode", "getMaterialCode", "getQty"));
53 break; 53 break;
54 } 54 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/controller/ReceiptContainerHeaderController.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.wms.receipt.receiptContainerHeader.controller; @@ -2,6 +2,7 @@ package org.jeecg.modules.wms.receipt.receiptContainerHeader.controller;
2 2
3 import java.io.IOException; 3 import java.io.IOException;
4 import java.util.Arrays; 4 import java.util.Arrays;
  5 +import java.util.Date;
5 import java.util.List; 6 import java.util.List;
6 import java.util.Map; 7 import java.util.Map;
7 import java.util.stream.Collectors; 8 import java.util.stream.Collectors;
@@ -208,6 +209,7 @@ public class ReceiptContainerHeaderController extends JeecgController&lt;ReceiptCon @@ -208,6 +209,7 @@ public class ReceiptContainerHeaderController extends JeecgController&lt;ReceiptCon
208 @PostMapping(value = "/addReceiptContainerDetail") 209 @PostMapping(value = "/addReceiptContainerDetail")
209 @RequiresPermissions("receiptContainerDetail:add") 210 @RequiresPermissions("receiptContainerDetail:add")
210 public Result<String> addReceiptContainerDetail(@RequestBody ReceiptContainerDetail receiptContainerDetail) { 211 public Result<String> addReceiptContainerDetail(@RequestBody ReceiptContainerDetail receiptContainerDetail) {
  212 + receiptContainerDetail.setReceiveTime(new Date());
211 receiptContainerDetailService.save(receiptContainerDetail); 213 receiptContainerDetailService.save(receiptContainerDetail);
212 return Result.OK("添加成功!"); 214 return Result.OK("添加成功!");
213 } 215 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/entity/ReceiptContainerDetail.java
@@ -97,9 +97,12 @@ public class ReceiptContainerDetail implements Serializable { @@ -97,9 +97,12 @@ public class ReceiptContainerDetail implements Serializable {
97 @Excel(name = "项目号", width = 15) 97 @Excel(name = "项目号", width = 15)
98 @ApiModelProperty(value = "项目号") 98 @ApiModelProperty(value = "项目号")
99 private String project; 99 private String project;
100 - @Excel(name = "唯一号", width = 15)  
101 - @ApiModelProperty(value = "唯一号")  
102 - private String uniqueCode; 100 + @Excel(name = "序列号", width = 15)
  101 + @ApiModelProperty(value = "序列号")
  102 + private String sn;
  103 + @Excel(name = "收货日期", width = 15)
  104 + @ApiModelProperty(value = "收货日期")
  105 + private Date receiveTime;
103 /** 备用字段1 */ 106 /** 备用字段1 */
104 @Excel(name = "备用字段1", width = 15) 107 @Excel(name = "备用字段1", width = 15)
105 @ApiModelProperty(value = "备用字段1") 108 @ApiModelProperty(value = "备用字段1")
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptContainerHeader/service/impl/ReceiptContainerHeaderServiceImpl.java
@@ -179,6 +179,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai @@ -179,6 +179,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
179 taskDetail.setBatch(receiptContainerDetail.getBatch()); 179 taskDetail.setBatch(receiptContainerDetail.getBatch());
180 taskDetail.setLot(receiptContainerDetail.getLot()); 180 taskDetail.setLot(receiptContainerDetail.getLot());
181 taskDetail.setProject(receiptContainerDetail.getProject()); 181 taskDetail.setProject(receiptContainerDetail.getProject());
  182 + taskDetail.setReceiveTime(receiptContainerDetail.getReceiveTime());
182 taskDetailList.add(taskDetail); 183 taskDetailList.add(taskDetail);
183 ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId()); 184 ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
184 if (receiptDetail == null) { 185 if (receiptDetail == null) {
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/domain/Receive.java
1 package org.jeecg.modules.wms.receipt.receiving.domain; 1 package org.jeecg.modules.wms.receipt.receiving.domain;
2 2
3 -import lombok.Data;  
4 -  
5 import java.io.Serializable; 3 import java.io.Serializable;
6 import java.math.BigDecimal; 4 import java.math.BigDecimal;
7 5
8 import org.jeecg.common.aspect.annotation.Dict; 6 import org.jeecg.common.aspect.annotation.Dict;
9 7
  8 +import lombok.Data;
  9 +
10 @Data 10 @Data
11 public class Receive implements Serializable { 11 public class Receive implements Serializable {
12 private static final long serialVersionUID = 1L; 12 private static final long serialVersionUID = 1L;
@@ -15,7 +15,7 @@ public class Receive implements Serializable { @@ -15,7 +15,7 @@ public class Receive implements Serializable {
15 15
16 private String containerCode; // 托盘号 16 private String containerCode; // 托盘号
17 17
18 - private String uniqueCode;// 唯一 18 + private String sn;// 序列
19 19
20 private String materialCode; 20 private String materialCode;
21 21
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiving/service/impl/ReceiveServiceImpl.java
@@ -2,6 +2,7 @@ package org.jeecg.modules.wms.receipt.receiving.service.impl; @@ -2,6 +2,7 @@ package org.jeecg.modules.wms.receipt.receiving.service.impl;
2 2
3 import java.math.BigDecimal; 3 import java.math.BigDecimal;
4 import java.util.ArrayList; 4 import java.util.ArrayList;
  5 +import java.util.Date;
5 import java.util.List; 6 import java.util.List;
6 import java.util.stream.Collectors; 7 import java.util.stream.Collectors;
7 8
@@ -234,7 +235,7 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl @@ -234,7 +235,7 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
234 receiptContainerDetail = new ReceiptContainerDetail(); 235 receiptContainerDetail = new ReceiptContainerDetail();
235 receiptContainerDetail.setCompanyCode(receiptDetail.getCompanyCode()); 236 receiptContainerDetail.setCompanyCode(receiptDetail.getCompanyCode());
236 receiptContainerDetail.setReferCode(receiptDetail.getReferCode()); 237 receiptContainerDetail.setReferCode(receiptDetail.getReferCode());
237 - receiptContainerDetail.setUniqueCode(receive.getUniqueCode()); 238 + receiptContainerDetail.setSn(receive.getSn());
238 receiptContainerDetail.setContainerCode(receive.getContainerCode()); 239 receiptContainerDetail.setContainerCode(receive.getContainerCode());
239 receiptContainerDetail.setReceiptDetailId(receiptDetail.getId()); 240 receiptContainerDetail.setReceiptDetailId(receiptDetail.getId());
240 receiptContainerDetail.setReceiptId(receiptDetail.getReceiptId()); 241 receiptContainerDetail.setReceiptId(receiptDetail.getReceiptId());
@@ -250,6 +251,7 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl @@ -250,6 +251,7 @@ public class ReceiveServiceImpl extends ServiceImpl&lt;ReceiveMapper, Receive&gt; impl
250 receiptContainerDetail.setLot(receiptDetail.getLot()); 251 receiptContainerDetail.setLot(receiptDetail.getLot());
251 receiptContainerDetail.setProject(receiptDetail.getProject()); 252 receiptContainerDetail.setProject(receiptDetail.getProject());
252 receiptContainerDetail.setInventoryStatus(receiptDetail.getInventoryStatus()); 253 receiptContainerDetail.setInventoryStatus(receiptDetail.getInventoryStatus());
  254 + receiptContainerDetail.setReceiveTime(new Date());
253 receiptContainerDetailList.add(receiptContainerDetail); 255 receiptContainerDetailList.add(receiptContainerDetail);
254 } 256 }
255 } 257 }
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskDetail.java
@@ -145,9 +145,13 @@ public class TaskDetail implements Serializable { @@ -145,9 +145,13 @@ public class TaskDetail implements Serializable {
145 @ApiModelProperty(value = "入库的库存详情id") 145 @ApiModelProperty(value = "入库的库存详情id")
146 private Integer toInventoryDetailId; 146 private Integer toInventoryDetailId;
147 147
148 - @Excel(name = "唯一号", width = 15)  
149 - @ApiModelProperty(value = "唯一号")  
150 - private String uniqueCode; 148 + @Excel(name = "序列号", width = 15)
  149 + @ApiModelProperty(value = "序列号")
  150 + private String sn;
  151 +
  152 + @Excel(name = "收货日期", width = 15)
  153 + @ApiModelProperty(value = "收货日期")
  154 + private Date receiveTime;
151 155
152 /** 备用字段1 */ 156 /** 备用字段1 */
153 @Excel(name = "备用字段1", width = 15) 157 @Excel(name = "备用字段1", width = 15)
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/service/impl/TaskHeaderServiceImpl.java
@@ -1108,6 +1108,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea @@ -1108,6 +1108,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
1108 inventoryDetail.setBatch(taskDetail.getBatch()); 1108 inventoryDetail.setBatch(taskDetail.getBatch());
1109 inventoryDetail.setLot(taskDetail.getLot()); 1109 inventoryDetail.setLot(taskDetail.getLot());
1110 inventoryDetail.setProject(taskDetail.getProject()); 1110 inventoryDetail.setProject(taskDetail.getProject());
  1111 + inventoryDetail.setReceiveTime(taskDetail.getReceiveTime());
1111 inventoryDetail.setReceiptDate(new Date()); 1112 inventoryDetail.setReceiptDate(new Date());
1112 inventoryDetailList.add(inventoryDetail); 1113 inventoryDetailList.add(inventoryDetail);
1113 1114