Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
M
mini-wms
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Members
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
周海峰
mini-wms
Commits
23d77852
Commit
23d77852
authored
Dec 23, 2025
by
yubin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
1976459d
ccd1dfaa
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
172 行增加
和
92 行删除
+172
-92
ruoyi-admin-vue/src/components/ImportExcel/index.vue
+2
-24
ruoyi-admin-vue/src/views/inventory/inbound/index.vue
+145
-45
ruoyi-admin/src/main/java/com/ruoyi/web/controller/inventory/InboundOrdersController.java
+2
-1
ruoyi-inventory/src/main/java/com/ruoyi/inventory/domain/vo/inboundVO/InboundTemplateVO.java
+2
-2
ruoyi-inventory/src/main/java/com/ruoyi/inventory/service/impl/InboundOrdersServiceImpl.java
+21
-20
没有找到文件。
ruoyi-admin-vue/src/components/ImportExcel/index.vue
View file @
23d77852
...
@@ -18,29 +18,6 @@
...
@@ -18,29 +18,6 @@
<i
class=
"el-icon-upload"
></i>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<div
class=
"el-upload__tip text-center"
slot=
"tip"
>
<div
class=
"el-upload__tip text-center"
slot=
"tip"
>
<div
class=
"order-type-radio"
v-if=
"showTrdcCheckbox && dict.type.inbound_outbound_type.length"
style=
"margin-bottom: 8px; text-align: left; padding-left: 20px;"
>
<el-radio-group
v-model=
"upload.orderType"
>
<el-radio
v-for=
"item in dict.type.inbound_outbound_type"
:key=
"item.value"
:label=
"item.value"
style=
"margin-right: 20px;"
>
{{
item
.
label
}}
</el-radio>
</el-radio-group>
</div>
<!-- 加载中提示 -->
<div
v-else-if=
"showTrdcCheckbox && !dict.type.inbound_outbound_type.length"
style=
"margin-bottom: 8px; text-align: left; padding-left: 20px;"
>
<i
class=
"el-icon-loading"
style=
"font-size: 14px;"
></i>
加载入库类型...
</div>
<!--
<div
class=
"el-upload__tip"
slot=
"tip"
>
<!--
<div
class=
"el-upload__tip"
slot=
"tip"
>
<el-checkbox
v-model=
"upload.updateSupport"
/>
是否更新已经存在的数据
<el-checkbox
v-model=
"upload.updateSupport"
/>
是否更新已经存在的数据
</div>
-->
</div>
-->
...
@@ -189,7 +166,6 @@ export default {
...
@@ -189,7 +166,6 @@ export default {
},
},
// 提交上传文件
// 提交上传文件
submitFileForm
()
{
submitFileForm
()
{
this
.
upload
.
isUploading
=
true
const
file
=
this
.
$refs
.
upload
.
uploadFiles
const
file
=
this
.
$refs
.
upload
.
uploadFiles
if
(
if
(
!
file
||
!
file
||
...
@@ -200,11 +176,13 @@ export default {
...
@@ -200,11 +176,13 @@ export default {
this
.
$modal
.
msgError
(
"请选择后缀为 “xls”或“xlsx”的文件。"
)
this
.
$modal
.
msgError
(
"请选择后缀为 “xls”或“xlsx”的文件。"
)
return
return
}
}
// 校验orderType(如果是必传项)
// 校验orderType(如果是必传项)
if
(
this
.
showTrdcCheckbox
&&
this
.
orderTypeRequired
&&
!
this
.
upload
.
orderType
)
{
if
(
this
.
showTrdcCheckbox
&&
this
.
orderTypeRequired
&&
!
this
.
upload
.
orderType
)
{
this
.
$modal
.
msgError
(
"请选择入库/出库类型!"
)
this
.
$modal
.
msgError
(
"请选择入库/出库类型!"
)
return
return
}
}
this
.
upload
.
isUploading
=
true
// 提交前通知父组件
// 提交前通知父组件
this
.
$emit
(
"orderTypeChange"
,
this
.
upload
.
orderType
)
this
.
$emit
(
"orderTypeChange"
,
this
.
upload
.
orderType
)
// 提交上传
// 提交上传
...
...
ruoyi-admin-vue/src/views/inventory/inbound/index.vue
View file @
23d77852
差异被折叠。
点击展开。
ruoyi-admin/src/main/java/com/ruoyi/web/controller/inventory/InboundOrdersController.java
View file @
23d77852
...
@@ -293,7 +293,7 @@ public class InboundOrdersController extends BaseController
...
@@ -293,7 +293,7 @@ public class InboundOrdersController extends BaseController
}
}
// 3. 通用导入逻辑(抽取重复代码,避免冗余)
// 3. 通用导入逻辑(抽取重复代码,避免冗余)
String
message
=
handleImport
(
getVOClassByOrderType
(
orderType
)
,
file
,
headerList
,
updateSupport
,
getUsername
(),
orderType
);
String
message
=
handleImport
(
InboundTemplateVO
.
class
,
file
,
headerList
,
updateSupport
,
getUsername
(),
orderType
);
return
success
(
message
);
return
success
(
message
);
}
}
...
@@ -309,6 +309,7 @@ public class InboundOrdersController extends BaseController
...
@@ -309,6 +309,7 @@ public class InboundOrdersController extends BaseController
}
}
}
}
private
static
final
Map
<
Class
<?>,
List
<
String
>>
REQUIRED_HEADS_CACHE
=
new
ConcurrentHashMap
<>();
private
static
final
Map
<
Class
<?>,
List
<
String
>>
REQUIRED_HEADS_CACHE
=
new
ConcurrentHashMap
<>();
/**
/**
* 通用导入逻辑(泛型适配不同VO)
* 通用导入逻辑(泛型适配不同VO)
*/
*/
...
...
ruoyi-inventory/src/main/java/com/ruoyi/inventory/domain/vo/inboundVO/InboundTemplateVO.java
View file @
23d77852
...
@@ -68,11 +68,11 @@ public class InboundTemplateVO extends BaseEntity {
...
@@ -68,11 +68,11 @@ public class InboundTemplateVO extends BaseEntity {
private
String
warehouseId
;
private
String
warehouseId
;
/** 备注 */
/** 备注 */
//
@Excel(name = "备注")
@Excel
(
name
=
"备注"
)
private
String
remark
;
private
String
remark
;
/** 库位ID 检索条件 */
/** 库位ID 检索条件 */
@Excel
(
name
=
"收货库位"
)
//
@Excel(name = "收货库位")
private
String
remark2
;
private
String
remark2
;
/** 标签颜色 字典,检索条件 */
/** 标签颜色 字典,检索条件 */
...
...
ruoyi-inventory/src/main/java/com/ruoyi/inventory/service/impl/InboundOrdersServiceImpl.java
View file @
23d77852
...
@@ -297,7 +297,7 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
...
@@ -297,7 +297,7 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
InboundOrders
mainDO
=
null
;
InboundOrders
mainDO
=
null
;
List
<
InboundOrderItems
>
itemDOList
=
new
ArrayList
<>();
List
<
InboundOrderItems
>
itemDOList
=
new
ArrayList
<>();
List
<
Inventory
>
inventoryList
=
new
ArrayList
<>();
//
List<Inventory> inventoryList = new ArrayList<>();
try
{
try
{
// 4.1 处理主表(每个入库单号只处理一次主表)
// 4.1 处理主表(每个入库单号只处理一次主表)
T
firstVO
=
voList
.
get
(
0
);
// 取第一条VO的主表信息
T
firstVO
=
voList
.
get
(
0
);
// 取第一条VO的主表信息
...
@@ -336,6 +336,7 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
...
@@ -336,6 +336,7 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
"plannedPackages"
,
"materialUnit"
,
"materialRemark"
);
// 排除子表字段
"plannedPackages"
,
"materialUnit"
,
"materialRemark"
);
// 排除子表字段
// 填充主表必填字段
// 填充主表必填字段
mainDO
.
setId
(
UUID
.
randomUUID
().
toString
());
mainDO
.
setId
(
UUID
.
randomUUID
().
toString
());
mainDO
.
setOrderTypeId
(
mainDO
.
getOrderType
());
mainDO
.
setInboundDate
(
now
);
mainDO
.
setInboundDate
(
now
);
mainDO
.
setOrderId
(
orderId
);
mainDO
.
setOrderId
(
orderId
);
mainDO
.
setCreateBy
(
operId
);
mainDO
.
setCreateBy
(
operId
);
...
@@ -343,13 +344,13 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
...
@@ -343,13 +344,13 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
mainDO
.
setCreateUserCode
(
operId
);
mainDO
.
setCreateUserCode
(
operId
);
mainDO
.
setIsImport
(
1
);
mainDO
.
setIsImport
(
1
);
mainDO
.
setIsUsed
(
1L
);
mainDO
.
setIsUsed
(
1L
);
mainDO
.
setOrderTypeId
(
Optional
.
ofNullable
(
orderType
).
map
(
String:
:
valueOf
).
orElse
(
""
));
//
mainDO.setOrderTypeId(Optional.ofNullable(orderType).map(String::valueOf).orElse(""));
// 设置默认值
// 设置默认值
if
(
mainDO
.
getSortNo
()
==
null
)
{
if
(
mainDO
.
getSortNo
()
==
null
)
{
mainDO
.
setSortNo
(
0L
);
mainDO
.
setSortNo
(
0L
);
}
}
if
(
mainDO
.
getOrderStatus
()
==
null
)
{
if
(
mainDO
.
getOrderStatus
()
==
null
)
{
mainDO
.
setOrderStatus
(
2
L
);
// 默认草稿状态
mainDO
.
setOrderStatus
(
1
L
);
// 默认草稿状态
}
}
// ========== 货主查询(反射获取ownerId) ==========
// ========== 货主查询(反射获取ownerId) ==========
...
@@ -488,21 +489,21 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
...
@@ -488,21 +489,21 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
log
.
error
(
"导入明细失败-入库单【{}】-SAP【{}】,实发数量和实际件数为空"
,
orderId
,
sapNo
,
e
);
log
.
error
(
"导入明细失败-入库单【{}】-SAP【{}】,实发数量和实际件数为空"
,
orderId
,
sapNo
,
e
);
throw
new
ServiceException
(
"实发数量和实际件数为空"
);
throw
new
ServiceException
(
"实发数量和实际件数为空"
);
}
}
//
Inventory
inventoryDO
=
new
Inventory
(
//
Inventory inventoryDO = new Inventory(
Long
.
parseLong
(
mainDO
.
getOrderTypeId
()),
//
Long.parseLong(mainDO.getOrderTypeId()),
orderId
,
//
orderId,
itemDO
.
getMaterialId
(),
//
itemDO.getMaterialId(),
batchId
,
//
batchId,
itemDO
.
getWarehouseId
(),
//
itemDO.getWarehouseId(),
itemDO
.
getLocationId
(),
//
itemDO.getLocationId(),
mainDO
.
getOwnerId
(),
//
mainDO.getOwnerId(),
itemDO
.
getActualQuantity
()
==
null
?
0L
:
itemDO
.
getActualQuantity
(),
//
itemDO.getActualQuantity() == null ? 0L : itemDO.getActualQuantity(),
unitWeight
,
//
unitWeight,
1L
,
//
1L,
itemDO
.
getUnitPrice
()
//
itemDO.getUnitPrice()
);
//
);
inventoryList
.
add
(
inventoryDO
);
//
inventoryList.add(inventoryDO);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
// 单个明细失败:仅统计,不影响整单
// 单个明细失败:仅统计,不影响整单
totalItemFailure
++;
totalItemFailure
++;
...
@@ -525,8 +526,8 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
...
@@ -525,8 +526,8 @@ public class InboundOrdersServiceImpl implements IInboundOrdersService
// 4.3 批量插入明细
// 4.3 批量插入明细
if
(!
CollectionUtils
.
isEmpty
(
itemDOList
))
{
if
(!
CollectionUtils
.
isEmpty
(
itemDOList
))
{
int
itemSuccess
=
inboundOrdersMapper
.
batchInboundOrderItems
(
itemDOList
);
int
itemSuccess
=
inboundOrdersMapper
.
batchInboundOrderItems
(
itemDOList
);
int
inventorySuccess
=
iInventoryService
.
insertInventoryList
(
inventoryList
);
//
int inventorySuccess = iInventoryService.insertInventoryList(inventoryList);
if
(
itemSuccess
!=
itemDOList
.
size
()
&&
itemSuccess
!=
inventorySuccess
)
{
if
(
itemSuccess
!=
itemDOList
.
size
())
{
// 批量插入部分失败,主动回滚事务
// 批量插入部分失败,主动回滚事务
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
TransactionAspectSupport
.
currentTransactionStatus
().
setRollbackOnly
();
throw
new
ServiceException
(
"明细批量插入失败,成功"
+
itemSuccess
+
"条,总"
+
itemDOList
.
size
()
+
"条"
);
throw
new
ServiceException
(
"明细批量插入失败,成功"
+
itemSuccess
+
"条,总"
+
itemDOList
.
size
()
+
"条"
);
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论