Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
foodNexus-admin
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
副食品筹措管理平台
foodNexus-admin
Commits
46cd642f
Commit
46cd642f
authored
Sep 29, 2025
by
杨浩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
客户订单签收
parent
8dc06376
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
505 additions
and
135 deletions
+505
-135
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/ErpPurchaseInController.java
+8
-5
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java
+13
-8
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/in/ErpPurchaseInRespVO.java
+0
-6
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/in/ErpPurchaseInSaveReqVO.java
+0
-6
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/ErpSaleOrderController.java
+7
-5
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/ErpSaleOutController.java
+7
-5
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java
+4
-4
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/vo/order/ErpSaleOrderSaveReqVO.java
+2
-2
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/vo/out/ErpSaleOutRespVO.java
+26
-3
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/vo/out/ErpSaleOutSaveReqVO.java
+25
-2
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/purchase/ErpPurchaseInDO.java
+2
-13
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/purchase/ErpPurchaseInItemDO.java
+1
-1
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/sale/ErpSaleOrderDO.java
+3
-3
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/sale/ErpSaleOrderItemDO.java
+3
-3
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/sale/ErpSaleOutDO.java
+43
-4
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/sale/ErpSaleOutItemDO.java
+16
-8
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/enums/SaleOrderPickUpStatus.java
+2
-0
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
+1
-1
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java
+1
-1
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/purchase/ErpPurchaseInServiceImpl.java
+14
-15
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
+0
-1
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/sale/ErpSaleOrderService.java
+9
-1
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/sale/ErpSaleOrderServiceImpl.java
+0
-0
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/sale/ErpSaleOutService.java
+2
-0
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/sale/ErpSaleOutServiceImpl.java
+14
-12
foodnexus-module-mall/foodnexus-module-operations/src/main/java/cn/iocoder/foodnexus/module/operations/service/deliverystaff/DeliveryStaffServiceImpl.java
+7
-0
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/api/DeliveryStaffApi.java
+4
-0
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/dto/DeliveryOrderUpdateReqVO.java
+58
-0
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/dto/DeliveryStaffSimpleInfo.java
+27
-0
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/enums/CustomerOrderStatus.java
+1
-1
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/customerorderitem/vo/CustomerOrderItemRespVO.java
+5
-0
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/app/customerOrder/AppCustomerOrderController.java
+12
-9
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/app/customerOrder/vo/AppCustomerOrderReceiptRespVO.java
+31
-0
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/app/delivery/DeliveryOrderController.java
+12
-5
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/dal/dataobject/customerorderitem/CustomerOrderItemDO.java
+7
-0
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/enums/ErrorCodeConstants.java
+2
-0
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/customerorder/CustomerOrderService.java
+4
-0
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/customerorder/CustomerOrderServiceImpl.java
+99
-10
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/customerorderrecord/CustomerOrderRecordServiceImpl.java
+7
-1
foodnexus-module-mall/foodnexus-module-product/src/main/java/cn/iocoder/foodnexus/module/product/service/spu/ProductSpuService.java
+7
-0
foodnexus-module-mall/foodnexus-module-product/src/main/java/cn/iocoder/foodnexus/module/product/service/spu/ProductSpuServiceImpl.java
+19
-0
No files found.
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/ErpPurchaseInController.java
View file @
46cd642f
...
...
@@ -20,6 +20,9 @@ import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import
cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseInService
;
import
cn.iocoder.foodnexus.module.erp.service.purchase.ErpSupplierService
;
import
cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService
;
import
cn.iocoder.foodnexus.module.product.api.ProductSpuApi
;
import
cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO
;
import
cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService
;
import
cn.iocoder.foodnexus.module.system.api.user.AdminUserApi
;
import
cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO
;
import
io.swagger.v3.oas.annotations.Operation
;
...
...
@@ -53,7 +56,7 @@ public class ErpPurchaseInController {
@Resource
private
ErpStockService
stockService
;
@Resource
private
ErpProduct
Service
productService
;
private
ProductSpu
Service
productService
;
@Resource
private
ErpSupplierService
supplierService
;
...
...
@@ -103,14 +106,14 @@ public class ErpPurchaseInController {
return
success
(
null
);
}
List
<
ErpPurchaseInItemDO
>
purchaseInItemList
=
purchaseInService
.
getPurchaseInItemListByInId
(
id
);
Map
<
Long
,
ErpProductRespVO
>
productMap
=
productService
.
getProductVO
Map
(
Map
<
Long
,
ProductSpuDO
>
productMap
=
productService
.
getSpu
Map
(
convertSet
(
purchaseInItemList
,
ErpPurchaseInItemDO:
:
getProductId
));
return
success
(
BeanUtils
.
toBean
(
purchaseIn
,
ErpPurchaseInRespVO
.
class
,
purchaseInVO
->
purchaseInVO
.
setItems
(
BeanUtils
.
toBean
(
purchaseInItemList
,
ErpPurchaseInRespVO
.
Item
.
class
,
item
->
{
ErpStockDO
stock
=
stockService
.
getStock
(
item
.
getProductId
(),
item
.
getWarehouseId
());
item
.
setStockCount
(
stock
!=
null
?
stock
.
getCount
()
:
BigDecimal
.
ZERO
);
MapUtils
.
findAndThen
(
productMap
,
item
.
getProductId
(),
product
->
item
.
setProductName
(
product
.
getName
())
.
setProduct
BarCode
(
product
.
getBarCode
()).
setProduct
UnitName
(
product
.
getUnitName
()));
.
setProductUnitName
(
product
.
getUnitName
()));
}))));
}
...
...
@@ -143,7 +146,7 @@ public class ErpPurchaseInController {
convertSet
(
pageResult
.
getList
(),
ErpPurchaseInDO:
:
getId
));
Map
<
Long
,
List
<
ErpPurchaseInItemDO
>>
purchaseInItemMap
=
convertMultiMap
(
purchaseInItemList
,
ErpPurchaseInItemDO:
:
getInId
);
// 1.2 产品信息
Map
<
Long
,
ErpProductRespVO
>
productMap
=
productService
.
getProductVO
Map
(
Map
<
Long
,
ProductSpuDO
>
productMap
=
productService
.
getSpu
Map
(
convertSet
(
purchaseInItemList
,
ErpPurchaseInItemDO:
:
getProductId
));
// 1.3 供应商信息
Map
<
Long
,
ErpSupplierDO
>
supplierMap
=
supplierService
.
getSupplierMap
(
...
...
@@ -155,7 +158,7 @@ public class ErpPurchaseInController {
return
BeanUtils
.
toBean
(
pageResult
,
ErpPurchaseInRespVO
.
class
,
purchaseIn
->
{
purchaseIn
.
setItems
(
BeanUtils
.
toBean
(
purchaseInItemMap
.
get
(
purchaseIn
.
getId
()),
ErpPurchaseInRespVO
.
Item
.
class
,
item
->
MapUtils
.
findAndThen
(
productMap
,
item
.
getProductId
(),
product
->
item
.
setProductName
(
product
.
getName
())
.
setProduct
BarCode
(
product
.
getBarCode
()).
setProduct
UnitName
(
product
.
getUnitName
()))));
.
setProductUnitName
(
product
.
getUnitName
()))));
purchaseIn
.
setProductNames
(
CollUtil
.
join
(
purchaseIn
.
getItems
(),
","
,
ErpPurchaseInRespVO
.
Item
::
getProductName
));
MapUtils
.
findAndThen
(
supplierMap
,
purchaseIn
.
getSupplierId
(),
supplier
->
purchaseIn
.
setSupplierName
(
supplier
.
getName
()));
MapUtils
.
findAndThen
(
userMap
,
Long
.
parseLong
(
purchaseIn
.
getCreator
()),
user
->
purchaseIn
.
setCreatorName
(
user
.
getNickname
()));
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java
View file @
46cd642f
...
...
@@ -19,6 +19,8 @@ import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import
cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseOrderService
;
import
cn.iocoder.foodnexus.module.erp.service.purchase.ErpSupplierService
;
import
cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService
;
import
cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO
;
import
cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService
;
import
cn.iocoder.foodnexus.module.system.api.user.AdminUserApi
;
import
cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO
;
import
io.swagger.v3.oas.annotations.Operation
;
...
...
@@ -27,6 +29,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import
jakarta.annotation.Resource
;
import
jakarta.servlet.http.HttpServletResponse
;
import
jakarta.validation.Valid
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -53,6 +56,8 @@ public class ErpPurchaseOrderController {
private
ErpStockService
stockService
;
@Resource
private
ErpSupplierService
supplierService
;
@Autowired
private
ProductSpuService
productService
;
@Resource
private
AdminUserApi
adminUserApi
;
...
...
@@ -100,14 +105,14 @@ public class ErpPurchaseOrderController {
return
success
(
null
);
}
List
<
ErpPurchaseOrderItemDO
>
purchaseOrderItemList
=
purchaseOrderService
.
getPurchaseOrderItemListByOrderId
(
id
);
/*Map<Long, ErpProductRespV
O> productMap = productService.getProductVOMap(
convertSet(purchaseOrderItemList, ErpPurchaseOrderItemDO::getProductId));
*/
Map
<
Long
,
ProductSpuD
O
>
productMap
=
productService
.
getProductVOMap
(
convertSet
(
purchaseOrderItemList
,
ErpPurchaseOrderItemDO:
:
getProductId
));
return
success
(
BeanUtils
.
toBean
(
purchaseOrder
,
ErpPurchaseOrderRespVO
.
class
,
purchaseOrderVO
->
purchaseOrderVO
.
setItems
(
BeanUtils
.
toBean
(
purchaseOrderItemList
,
ErpPurchaseOrderRespVO
.
Item
.
class
,
item
->
{
BigDecimal
purchaseCount
=
stockService
.
getStockCount
(
item
.
getProductId
());
item
.
setStockCount
(
purchaseCount
!=
null
?
purchaseCount
:
BigDecimal
.
ZERO
);
/*
MapUtils.findAndThen(productMap, item.getProductId(), product -> item.setProductName(product.getName())
.setProduct
BarCode(product.getBarCode()).setProductUnitName(product.getUnitName()));*/
MapUtils
.
findAndThen
(
productMap
,
item
.
getProductId
(),
product
->
item
.
setProductName
(
product
.
getName
())
.
setProduct
UnitName
(
product
.
getUnitName
()));
}))));
}
...
...
@@ -140,8 +145,8 @@ public class ErpPurchaseOrderController {
convertSet
(
pageResult
.
getList
(),
ErpPurchaseOrderDO:
:
getId
));
Map
<
Long
,
List
<
ErpPurchaseOrderItemDO
>>
purchaseOrderItemMap
=
convertMultiMap
(
purchaseOrderItemList
,
ErpPurchaseOrderItemDO:
:
getOrderId
);
// 1.2 产品信息
/*Map<Long, ErpProductRespV
O> productMap = productService.getProductVOMap(
convertSet(purchaseOrderItemList, ErpPurchaseOrderItemDO::getProductId));
*/
Map
<
Long
,
ProductSpuD
O
>
productMap
=
productService
.
getProductVOMap
(
convertSet
(
purchaseOrderItemList
,
ErpPurchaseOrderItemDO:
:
getProductId
));
// 1.3 供应商信息
Map
<
Long
,
ErpSupplierDO
>
supplierMap
=
supplierService
.
getSupplierMap
(
convertSet
(
pageResult
.
getList
(),
ErpPurchaseOrderDO:
:
getSupplierId
));
...
...
@@ -151,9 +156,9 @@ public class ErpPurchaseOrderController {
// 2. 开始拼接
return
BeanUtils
.
toBean
(
pageResult
,
ErpPurchaseOrderRespVO
.
class
,
purchaseOrder
->
{
purchaseOrder
.
setItems
(
BeanUtils
.
toBean
(
purchaseOrderItemMap
.
get
(
purchaseOrder
.
getId
()),
ErpPurchaseOrderRespVO
.
Item
.
class
/*
,
,
item
->
MapUtils
.
findAndThen
(
productMap
,
item
.
getProductId
(),
product
->
item
.
setProductName
(
product
.
getName
())
.setProduct
BarCode(product.getBarCode()).setProductUnitName(product.getUnitName()))*/
));
.
setProduct
UnitName
(
product
.
getUnitName
()))
));
purchaseOrder
.
setProductNames
(
CollUtil
.
join
(
purchaseOrder
.
getItems
(),
","
,
ErpPurchaseOrderRespVO
.
Item
::
getProductName
));
MapUtils
.
findAndThen
(
supplierMap
,
purchaseOrder
.
getSupplierId
(),
supplier
->
purchaseOrder
.
setSupplierName
(
supplier
.
getName
()));
MapUtils
.
findAndThen
(
userMap
,
Long
.
parseLong
(
purchaseOrder
.
getCreator
()),
user
->
purchaseOrder
.
setCreatorName
(
user
.
getNickname
()));
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/in/ErpPurchaseInRespVO.java
View file @
46cd642f
...
...
@@ -94,12 +94,6 @@ public class ErpPurchaseInRespVO {
@ExcelProperty
(
"产品信息"
)
private
String
productNames
;
@Schema
(
description
=
"销售订单"
)
private
Long
saleOrderId
;
@Schema
(
description
=
"销售子订单"
)
private
Long
saleOrderItemId
;
@Data
public
static
class
Item
{
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/in/ErpPurchaseInSaveReqVO.java
View file @
46cd642f
...
...
@@ -37,12 +37,6 @@ public class ErpPurchaseInSaveReqVO {
@Schema
(
description
=
"备注"
,
example
=
"你猜"
)
private
String
remark
;
@Schema
(
description
=
"销售订单"
)
private
Long
saleOrderId
;
@Schema
(
description
=
"销售子订单"
)
private
Long
saleOrderItemId
;
@Schema
(
description
=
"入库清单列表"
)
private
List
<
Item
>
items
;
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/ErpSaleOrderController.java
View file @
46cd642f
...
...
@@ -19,6 +19,8 @@ import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import
cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService
;
import
cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOrderService
;
import
cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService
;
import
cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO
;
import
cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService
;
import
cn.iocoder.foodnexus.module.system.api.user.AdminUserApi
;
import
cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO
;
import
io.swagger.v3.oas.annotations.Operation
;
...
...
@@ -52,7 +54,7 @@ public class ErpSaleOrderController {
@Resource
private
ErpStockService
stockService
;
@Resource
private
ErpProduct
Service
productService
;
private
ProductSpu
Service
productService
;
@Resource
private
ErpCustomerService
customerService
;
...
...
@@ -120,14 +122,14 @@ public class ErpSaleOrderController {
return
success
(
null
);
}
List
<
ErpSaleOrderItemDO
>
saleOrderItemList
=
saleOrderService
.
getSaleOrderItemListByOrderId
(
id
);
Map
<
Long
,
ErpProductRespV
O
>
productMap
=
productService
.
getProductVOMap
(
Map
<
Long
,
ProductSpuD
O
>
productMap
=
productService
.
getProductVOMap
(
convertSet
(
saleOrderItemList
,
ErpSaleOrderItemDO:
:
getProductId
));
return
success
(
BeanUtils
.
toBean
(
saleOrder
,
ErpSaleOrderRespVO
.
class
,
saleOrderVO
->
saleOrderVO
.
setItems
(
BeanUtils
.
toBean
(
saleOrderItemList
,
ErpSaleOrderRespVO
.
Item
.
class
,
item
->
{
BigDecimal
stockCount
=
stockService
.
getStockCount
(
item
.
getProductId
());
item
.
setStockCount
(
stockCount
!=
null
?
stockCount
:
BigDecimal
.
ZERO
);
MapUtils
.
findAndThen
(
productMap
,
item
.
getProductId
(),
product
->
item
.
setProductName
(
product
.
getName
())
.
setProduct
BarCode
(
product
.
getBarCode
()).
setProduct
UnitName
(
product
.
getUnitName
()));
.
setProductUnitName
(
product
.
getUnitName
()));
}))));
}
...
...
@@ -160,7 +162,7 @@ public class ErpSaleOrderController {
convertSet
(
pageResult
.
getList
(),
ErpSaleOrderDO:
:
getId
));
Map
<
Long
,
List
<
ErpSaleOrderItemDO
>>
saleOrderItemMap
=
convertMultiMap
(
saleOrderItemList
,
ErpSaleOrderItemDO:
:
getOrderId
);
// 1.2 产品信息
Map
<
Long
,
ErpProductRespV
O
>
productMap
=
productService
.
getProductVOMap
(
Map
<
Long
,
ProductSpuD
O
>
productMap
=
productService
.
getProductVOMap
(
convertSet
(
saleOrderItemList
,
ErpSaleOrderItemDO:
:
getProductId
));
// 1.3 客户信息
Map
<
Long
,
ErpCustomerDO
>
customerMap
=
customerService
.
getCustomerMap
(
...
...
@@ -172,7 +174,7 @@ public class ErpSaleOrderController {
return
BeanUtils
.
toBean
(
pageResult
,
ErpSaleOrderRespVO
.
class
,
saleOrder
->
{
saleOrder
.
setItems
(
BeanUtils
.
toBean
(
saleOrderItemMap
.
get
(
saleOrder
.
getId
()),
ErpSaleOrderRespVO
.
Item
.
class
,
item
->
MapUtils
.
findAndThen
(
productMap
,
item
.
getProductId
(),
product
->
item
.
setProductName
(
product
.
getName
())
.
setProduct
BarCode
(
product
.
getBarCode
()).
setProduct
UnitName
(
product
.
getUnitName
()))));
.
setProductUnitName
(
product
.
getUnitName
()))));
saleOrder
.
setProductNames
(
CollUtil
.
join
(
saleOrder
.
getItems
(),
","
,
ErpSaleOrderRespVO
.
Item
::
getProductName
));
MapUtils
.
findAndThen
(
customerMap
,
saleOrder
.
getCustomerId
(),
supplier
->
saleOrder
.
setCustomerName
(
supplier
.
getName
()));
MapUtils
.
findAndThen
(
userMap
,
Long
.
parseLong
(
saleOrder
.
getCreator
()),
user
->
saleOrder
.
setCreatorName
(
user
.
getNickname
()));
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/ErpSaleOutController.java
View file @
46cd642f
...
...
@@ -20,6 +20,8 @@ import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import
cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService
;
import
cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOutService
;
import
cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService
;
import
cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO
;
import
cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService
;
import
cn.iocoder.foodnexus.module.system.api.user.AdminUserApi
;
import
cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO
;
import
io.swagger.v3.oas.annotations.Operation
;
...
...
@@ -53,7 +55,7 @@ public class ErpSaleOutController {
@Resource
private
ErpStockService
stockService
;
@Resource
private
ErpProduct
Service
productService
;
private
ProductSpu
Service
productService
;
@Resource
private
ErpCustomerService
customerService
;
...
...
@@ -103,14 +105,14 @@ public class ErpSaleOutController {
return
success
(
null
);
}
List
<
ErpSaleOutItemDO
>
saleOutItemList
=
saleOutService
.
getSaleOutItemListByOutId
(
id
);
Map
<
Long
,
ErpProductRespV
O
>
productMap
=
productService
.
getProductVOMap
(
Map
<
Long
,
ProductSpuD
O
>
productMap
=
productService
.
getProductVOMap
(
convertSet
(
saleOutItemList
,
ErpSaleOutItemDO:
:
getProductId
));
return
success
(
BeanUtils
.
toBean
(
saleOut
,
ErpSaleOutRespVO
.
class
,
saleOutVO
->
saleOutVO
.
setItems
(
BeanUtils
.
toBean
(
saleOutItemList
,
ErpSaleOutRespVO
.
Item
.
class
,
item
->
{
ErpStockDO
stock
=
stockService
.
getStock
(
item
.
getProductId
(),
item
.
getWarehouseId
());
item
.
setStockCount
(
stock
!=
null
?
stock
.
getCount
()
:
BigDecimal
.
ZERO
);
MapUtils
.
findAndThen
(
productMap
,
item
.
getProductId
(),
product
->
item
.
setProductName
(
product
.
getName
())
.
setProduct
BarCode
(
product
.
getBarCode
()).
setProduct
UnitName
(
product
.
getUnitName
()));
.
setProductUnitName
(
product
.
getUnitName
()));
}))));
}
...
...
@@ -143,7 +145,7 @@ public class ErpSaleOutController {
convertSet
(
pageResult
.
getList
(),
ErpSaleOutDO:
:
getId
));
Map
<
Long
,
List
<
ErpSaleOutItemDO
>>
saleOutItemMap
=
convertMultiMap
(
saleOutItemList
,
ErpSaleOutItemDO:
:
getOutId
);
// 1.2 产品信息
Map
<
Long
,
ErpProductRespV
O
>
productMap
=
productService
.
getProductVOMap
(
Map
<
Long
,
ProductSpuD
O
>
productMap
=
productService
.
getProductVOMap
(
convertSet
(
saleOutItemList
,
ErpSaleOutItemDO:
:
getProductId
));
// 1.3 客户信息
Map
<
Long
,
ErpCustomerDO
>
customerMap
=
customerService
.
getCustomerMap
(
...
...
@@ -155,7 +157,7 @@ public class ErpSaleOutController {
return
BeanUtils
.
toBean
(
pageResult
,
ErpSaleOutRespVO
.
class
,
saleOut
->
{
saleOut
.
setItems
(
BeanUtils
.
toBean
(
saleOutItemMap
.
get
(
saleOut
.
getId
()),
ErpSaleOutRespVO
.
Item
.
class
,
item
->
MapUtils
.
findAndThen
(
productMap
,
item
.
getProductId
(),
product
->
item
.
setProductName
(
product
.
getName
())
.
setProduct
BarCode
(
product
.
getBarCode
()).
setProduct
UnitName
(
product
.
getUnitName
()))));
.
setProductUnitName
(
product
.
getUnitName
()))));
saleOut
.
setProductNames
(
CollUtil
.
join
(
saleOut
.
getItems
(),
","
,
ErpSaleOutRespVO
.
Item
::
getProductName
));
MapUtils
.
findAndThen
(
customerMap
,
saleOut
.
getCustomerId
(),
supplier
->
saleOut
.
setCustomerName
(
supplier
.
getName
()));
MapUtils
.
findAndThen
(
userMap
,
Long
.
parseLong
(
saleOut
.
getCreator
()),
user
->
saleOut
.
setCreatorName
(
user
.
getNickname
()));
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/vo/order/ErpSaleOrderRespVO.java
View file @
46cd642f
...
...
@@ -51,10 +51,10 @@ public class ErpSaleOrderRespVO {
@Schema
(
description
=
"合计数量"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"15663"
)
@ExcelProperty
(
"合计数量"
)
private
BigDecimal
totalCount
;
private
Integer
totalCount
;
@Schema
(
description
=
"最终合计价格"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"24906"
)
@ExcelProperty
(
"最终合计价格"
)
private
BigDecimal
totalPrice
;
private
Integer
totalPrice
;
@Schema
(
description
=
"合计产品价格,单位:元"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"7127"
)
private
BigDecimal
totalProductPrice
;
...
...
@@ -140,11 +140,11 @@ public class ErpSaleOrderRespVO {
private
String
productUnit
;
@Schema
(
description
=
"产品单价"
,
example
=
"100.00"
)
private
BigDecimal
productPrice
;
private
Integer
productPrice
;
@Schema
(
description
=
"产品数量"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"100.00"
)
@NotNull
(
message
=
"产品数量不能为空"
)
private
BigDecimal
count
;
private
Integer
count
;
@Schema
(
description
=
"税率,百分比"
,
example
=
"99.88"
)
private
BigDecimal
taxPercent
;
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/vo/order/ErpSaleOrderSaveReqVO.java
View file @
46cd642f
...
...
@@ -84,11 +84,11 @@ public class ErpSaleOrderSaveReqVO {
private
String
productUnit
;
@Schema
(
description
=
"产品单价"
,
example
=
"100.00"
)
private
BigDecimal
productPrice
;
private
Integer
productPrice
;
@Schema
(
description
=
"产品数量"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"100.00"
)
@NotNull
(
message
=
"产品数量不能为空"
)
private
BigDecimal
count
;
private
Integer
count
;
@Schema
(
description
=
"税率,百分比"
,
example
=
"99.88"
)
private
BigDecimal
taxPercent
;
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/vo/out/ErpSaleOutRespVO.java
View file @
46cd642f
...
...
@@ -2,6 +2,10 @@ package cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.out;
import
cn.idev.excel.annotation.ExcelIgnoreUnannotated
;
import
cn.idev.excel.annotation.ExcelProperty
;
import
cn.iocoder.foodnexus.module.order.dto.CustomerAddressInfo
;
import
cn.iocoder.foodnexus.module.order.enums.DeliveryMode
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
jakarta.validation.constraints.NotNull
;
import
lombok.Data
;
...
...
@@ -51,10 +55,10 @@ public class ErpSaleOutRespVO {
@Schema
(
description
=
"合计数量"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"15663"
)
@ExcelProperty
(
"合计数量"
)
private
BigDecimal
totalC
ount
;
private
Integer
c
ount
;
@Schema
(
description
=
"最终合计价格"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"24906"
)
@ExcelProperty
(
"最终合计价格"
)
private
BigDecimal
totalPrice
;
private
Integer
totalPrice
;
@Schema
(
description
=
"已收款金额,单位:元"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"7127"
)
private
BigDecimal
receiptPrice
;
...
...
@@ -97,6 +101,25 @@ public class ErpSaleOutRespVO {
@ExcelProperty
(
"产品信息"
)
private
String
productNames
;
@Schema
(
description
=
"客户订单id"
)
private
Long
customerOrderId
;
@Schema
(
description
=
"配送模式"
)
private
DeliveryMode
deliveryMode
;
@Schema
(
description
=
"配送时间"
)
private
LocalDateTime
deliveryTime
;
@Schema
(
description
=
"配送人员"
)
private
Long
deliveryStaffId
;
@Schema
(
description
=
"客户收货地址id"
)
private
Long
addressId
;
@Schema
(
description
=
"客户收货地址info"
)
@TableField
(
typeHandler
=
JacksonTypeHandler
.
class
)
private
CustomerAddressInfo
addressInfo
;
@Data
public
static
class
Item
{
...
...
@@ -116,7 +139,7 @@ public class ErpSaleOutRespVO {
private
String
productUnit
;
@Schema
(
description
=
"产品单价"
,
example
=
"100.00"
)
private
BigDecimal
productPrice
;
private
Integer
productPrice
;
@Schema
(
description
=
"产品数量"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"100.00"
)
@NotNull
(
message
=
"产品数量不能为空"
)
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/sale/vo/out/ErpSaleOutSaveReqVO.java
View file @
46cd642f
package
cn
.
iocoder
.
foodnexus
.
module
.
erp
.
controller
.
admin
.
sale
.
vo
.
out
;
import
cn.iocoder.foodnexus.module.order.dto.CustomerAddressInfo
;
import
cn.iocoder.foodnexus.module.order.enums.DeliveryMode
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
jakarta.validation.constraints.NotNull
;
import
lombok.Data
;
...
...
@@ -44,6 +48,25 @@ public class ErpSaleOutSaveReqVO {
@Schema
(
description
=
"出库清单列表"
)
private
List
<
Item
>
items
;
@Schema
(
description
=
"客户订单id"
)
private
Long
customerOrderId
;
@Schema
(
description
=
"配送模式"
)
private
DeliveryMode
deliveryMode
;
@Schema
(
description
=
"配送时间"
)
private
LocalDateTime
deliveryTime
;
@Schema
(
description
=
"配送人员"
)
private
Long
deliveryStaffId
;
@Schema
(
description
=
"客户收货地址id"
)
private
Long
addressId
;
@Schema
(
description
=
"客户收货地址info"
)
@TableField
(
typeHandler
=
JacksonTypeHandler
.
class
)
private
CustomerAddressInfo
addressInfo
;
@Data
public
static
class
Item
{
...
...
@@ -67,11 +90,11 @@ public class ErpSaleOutSaveReqVO {
private
String
productUnit
;
@Schema
(
description
=
"产品单价"
,
example
=
"100.00"
)
private
BigDecimal
productPrice
;
private
Integer
productPrice
;
@Schema
(
description
=
"产品数量"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"100.00"
)
@NotNull
(
message
=
"产品数量不能为空"
)
private
BigDecimal
count
;
private
Integer
count
;
@Schema
(
description
=
"税率,百分比"
,
example
=
"99.88"
)
private
BigDecimal
taxPercent
;
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/purchase/ErpPurchaseInDO.java
View file @
46cd642f
...
...
@@ -80,7 +80,7 @@ public class ErpPurchaseInDO extends BaseDO {
*
* totalPrice = totalProductPrice + totalTaxPrice - discountPrice + otherPrice
*/
private
BigDecimal
totalPrice
;
private
Integer
totalPrice
;
/**
* 已支付金额,单位:元
*
...
...
@@ -91,7 +91,7 @@ public class ErpPurchaseInDO extends BaseDO {
/**
* 合计产品价格,单位:元
*/
private
BigDecimal
totalProductPrice
;
private
Integer
totalProductPrice
;
/**
* 合计税额,单位:元
*/
...
...
@@ -120,14 +120,4 @@ public class ErpPurchaseInDO extends BaseDO {
*/
private
String
remark
;
/**
* 销售订单
*/
private
Long
saleOrderId
;
/**
* 销售子订单
*/
private
Long
saleOrderItemId
;
}
\ No newline at end of file
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/purchase/ErpPurchaseInItemDO.java
View file @
46cd642f
...
...
@@ -75,7 +75,7 @@ public class ErpPurchaseInItemDO extends BaseDO {
*
* totalPrice = productPrice * count
*/
private
BigDecimal
totalPrice
;
private
Integer
totalPrice
;
/**
* 税率,百分比
*/
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/sale/ErpSaleOrderDO.java
View file @
46cd642f
...
...
@@ -72,18 +72,18 @@ public class ErpSaleOrderDO extends BaseDO {
/**
* 合计数量
*/
private
BigDecimal
totalCount
;
private
Integer
totalCount
;
/**
* 最终合计价格,单位:元
*
* totalPrice = totalProductPrice + totalTaxPrice - discountPrice
*/
private
BigDecimal
totalPrice
;
private
Integer
totalPrice
;
/**
* 合计产品价格,单位:元
*/
private
BigDecimal
totalProductPrice
;
private
Integer
totalProductPrice
;
/**
* 合计税额,单位:元
*/
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/sale/ErpSaleOrderItemDO.java
View file @
46cd642f
...
...
@@ -52,17 +52,17 @@ public class ErpSaleOrderItemDO extends BaseDO {
/**
* 产品单位单价,单位:元
*/
private
BigDecimal
productPrice
;
private
Integer
productPrice
;
/**
* 数量
*/
private
BigDecimal
count
;
private
Integer
count
;
/**
* 总价,单位:元
*
* totalPrice = productPrice * count
*/
private
BigDecimal
totalPrice
;
private
Integer
totalPrice
;
/**
* 税率,百分比
*/
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/sale/ErpSaleOutDO.java
View file @
46cd642f
...
...
@@ -3,9 +3,13 @@ package cn.iocoder.foodnexus.module.erp.dal.dataobject.sale;
import
cn.iocoder.foodnexus.framework.mybatis.core.dataobject.BaseDO
;
import
cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.finance.ErpAccountDO
;
import
cn.iocoder.foodnexus.module.order.dto.CustomerAddressInfo
;
import
cn.iocoder.foodnexus.module.order.enums.DeliveryMode
;
import
com.baomidou.mybatisplus.annotation.KeySequence
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler
;
import
lombok.*
;
import
java.math.BigDecimal
;
...
...
@@ -16,7 +20,7 @@ import java.time.LocalDateTime;
*
* @author 芋道源码
*/
@TableName
(
value
=
"erp_sale_out"
)
@TableName
(
value
=
"erp_sale_out"
,
autoResultMap
=
true
)
@KeySequence
(
"erp_sale_out_seq"
)
// 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
...
...
@@ -80,13 +84,13 @@ public class ErpSaleOutDO extends BaseDO {
/**
* 合计数量
*/
private
BigDecimal
totalCount
;
private
Integer
totalCount
;
/**
* 最终合计价格,单位:元
*
* totalPrice = totalProductPrice + totalTaxPrice - discountPrice + otherPrice
*/
private
BigDecimal
totalPrice
;
private
Integer
totalPrice
;
/**
* 已收款金额,单位:元
*
...
...
@@ -97,7 +101,7 @@ public class ErpSaleOutDO extends BaseDO {
/**
* 合计产品价格,单位:元
*/
private
BigDecimal
totalProductPrice
;
private
Integer
totalProductPrice
;
/**
* 合计税额,单位:元
*/
...
...
@@ -126,4 +130,38 @@ public class ErpSaleOutDO extends BaseDO {
*/
private
String
remark
;
/**
* 客户订单id
*/
private
Long
customerOrderId
;
/**
* 配送模式
*
* 枚举 {@link DeliveryMode}
*/
private
DeliveryMode
deliveryMode
;
/**
* 配送时间
*/
private
LocalDateTime
deliveryTime
;
/**
* 配送人员
*
* DeliveryStaffDO
*/
private
Long
deliveryStaffId
;
/**
* 客户收货地址id
*/
private
Long
addressId
;
/**
* 客户收货地址info
*/
@TableField
(
typeHandler
=
JacksonTypeHandler
.
class
)
private
CustomerAddressInfo
addressInfo
;
}
\ No newline at end of file
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/dataobject/sale/ErpSaleOutItemDO.java
View file @
46cd642f
...
...
@@ -5,18 +5,21 @@ import cn.iocoder.foodnexus.module.erp.dal.dataobject.product.ErpProductDO;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpStockOutDO
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpWarehouseDO
;
import
com.baomidou.mybatisplus.annotation.KeySequence
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler
;
import
lombok.*
;
import
java.math.BigDecimal
;
import
java.util.List
;
/**
* ERP 销售出库项 DO
*
* @author 芋道源码
*/
@TableName
(
"erp_sale_out_items"
)
@TableName
(
value
=
"erp_sale_out_items"
,
autoResultMap
=
true
)
@KeySequence
(
"erp_sale_out_items_seq"
)
// 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
...
...
@@ -58,25 +61,23 @@ public class ErpSaleOutItemDO extends BaseDO {
private
Long
productId
;
/**
* 产品单位单位
*
* 冗余 {@link ErpProductDO#getUnitId()}
*/
private
String
productUnit
;
/**
* 产品单位单价,单位:
元
* 产品单位单价,单位:
分
*/
private
BigDecimal
productPrice
;
private
Integer
productPrice
;
/**
* 数量
*/
private
BigDecimal
count
;
private
Integer
count
;
/**
* 总价,单位:
元
* 总价,单位:
分
*
* totalPrice = productPrice * count
*/
private
BigDecimal
totalPrice
;
private
Integer
totalPrice
;
/**
* 税率,百分比
*/
...
...
@@ -93,4 +94,10 @@ public class ErpSaleOutItemDO extends BaseDO {
*/
private
String
remark
;
/**
* 相关文件
*/
@TableField
(
typeHandler
=
JacksonTypeHandler
.
class
)
private
List
<
String
>
remarkFiles
;
}
\ No newline at end of file
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/enums/SaleOrderPickUpStatus.java
View file @
46cd642f
...
...
@@ -22,6 +22,8 @@ public enum SaleOrderPickUpStatus implements ArrayValuable<String> {
ALREADY
(
"ALREADY"
,
"已发货"
),
ARRIVAL
(
"ARRIVAL"
,
"已到货"
),
;
public
static
final
String
[]
ARRAYS
=
Arrays
.
stream
(
values
()).
map
(
SaleOrderPickUpStatus:
:
getType
).
toArray
(
String
[]::
new
);
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
View file @
46cd642f
...
...
@@ -163,7 +163,7 @@ public class ErpFinancePaymentServiceImpl implements ErpFinancePaymentService {
if
(
ObjectUtil
.
equal
(
item
.
getBizType
(),
ErpBizTypeEnum
.
PURCHASE_IN
.
getType
()))
{
ErpPurchaseInDO
purchaseIn
=
purchaseInService
.
validatePurchaseIn
(
item
.
getBizId
());
Assert
.
equals
(
purchaseIn
.
getSupplierId
(),
supplierId
,
"供应商必须相同"
);
item
.
setTotalPrice
(
purchaseIn
.
getTotalPrice
(
)).
setBizNo
(
purchaseIn
.
getNo
());
item
.
setTotalPrice
(
BigDecimal
.
valueOf
(
purchaseIn
.
getTotalPrice
()
)).
setBizNo
(
purchaseIn
.
getNo
());
}
else
if
(
ObjectUtil
.
equal
(
item
.
getBizType
(),
ErpBizTypeEnum
.
PURCHASE_RETURN
.
getType
()))
{
ErpPurchaseReturnDO
purchaseReturn
=
purchaseReturnService
.
validatePurchaseReturn
(
item
.
getBizId
());
Assert
.
equals
(
purchaseReturn
.
getSupplierId
(),
supplierId
,
"供应商必须相同"
);
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java
View file @
46cd642f
...
...
@@ -163,7 +163,7 @@ public class ErpFinanceReceiptServiceImpl implements ErpFinanceReceiptService {
if
(
ObjectUtil
.
equal
(
item
.
getBizType
(),
ErpBizTypeEnum
.
SALE_OUT
.
getType
()))
{
ErpSaleOutDO
saleOut
=
saleOutService
.
validateSaleOut
(
item
.
getBizId
());
Assert
.
equals
(
saleOut
.
getCustomerId
(),
customerId
,
"客户必须相同"
);
item
.
setTotalPrice
(
saleOut
.
getTotalPrice
(
)).
setBizNo
(
saleOut
.
getNo
());
item
.
setTotalPrice
(
BigDecimal
.
valueOf
(
saleOut
.
getTotalPrice
()
)).
setBizNo
(
saleOut
.
getNo
());
}
else
if
(
ObjectUtil
.
equal
(
item
.
getBizType
(),
ErpBizTypeEnum
.
SALE_RETURN
.
getType
()))
{
ErpSaleReturnDO
saleReturn
=
saleReturnService
.
validateSaleReturn
(
item
.
getBizId
());
Assert
.
equals
(
saleReturn
.
getCustomerId
(),
customerId
,
"客户必须相同"
);
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/purchase/ErpPurchaseInServiceImpl.java
View file @
46cd642f
...
...
@@ -3,6 +3,7 @@ package cn.iocoder.foodnexus.module.erp.service.purchase;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.iocoder.foodnexus.framework.common.pojo.PageResult
;
import
cn.iocoder.foodnexus.framework.common.util.CommonUtil
;
import
cn.iocoder.foodnexus.framework.common.util.number.MoneyUtils
;
import
cn.iocoder.foodnexus.framework.common.util.object.BeanUtils
;
import
cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.in.ErpPurchaseInPageReqVO
;
...
...
@@ -57,8 +58,6 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
private
ErpNoRedisDAO
noRedisDAO
;
@Resource
private
ErpProductService
productService
;
@Resource
@Lazy
// 延迟加载,避免循环依赖
private
ErpPurchaseOrderService
purchaseOrderService
;
@Resource
...
...
@@ -66,8 +65,6 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
@Resource
private
ErpStockRecordService
stockRecordService
;
@Resource
private
AdminUserApi
adminUserApi
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
...
...
@@ -77,7 +74,9 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
// 1.2 校验入库项的有效性
List
<
ErpPurchaseInItemDO
>
purchaseInItems
=
validatePurchaseInItems
(
createReqVO
.
getItems
());
// 1.3 校验结算账户
accountService
.
validateAccount
(
createReqVO
.
getAccountId
());
if
(
CommonUtil
.
isNotEmpty
(
createReqVO
.
getAccountId
()))
{
accountService
.
validateAccount
(
createReqVO
.
getAccountId
());
}
// 1.4 生成入库单号,并校验唯一性
String
no
=
noRedisDAO
.
generate
(
ErpNoRedisDAO
.
PURCHASE_IN_NO_PREFIX
);
if
(
purchaseInMapper
.
selectByNo
(
no
)
!=
null
)
{
...
...
@@ -132,15 +131,15 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
private
void
calculateTotalPrice
(
ErpPurchaseInDO
purchaseIn
,
List
<
ErpPurchaseInItemDO
>
purchaseInItems
)
{
purchaseIn
.
setTotalCount
(
purchaseInItems
.
stream
().
mapToInt
(
ErpPurchaseInItemDO:
:
getCount
).
sum
());
purchaseIn
.
setTotalProductPrice
(
getSumValue
(
purchaseInItems
,
ErpPurchaseInItemDO:
:
getTotalPrice
,
BigDecimal:
:
add
,
BigDecimal
.
ZERO
));
purchaseIn
.
setTotalProductPrice
(
getSumValue
(
purchaseInItems
,
ErpPurchaseInItemDO:
:
getTotalPrice
,
Integer:
:
sum
,
0
));
purchaseIn
.
setTotalTaxPrice
(
getSumValue
(
purchaseInItems
,
ErpPurchaseInItemDO:
:
getTaxPrice
,
BigDecimal:
:
add
,
BigDecimal
.
ZERO
));
purchaseIn
.
setTotalPrice
(
purchaseIn
.
getTotalProductPrice
()
.
add
(
purchaseIn
.
getTotalTaxPrice
())
);
purchaseIn
.
setTotalPrice
(
purchaseIn
.
getTotalProductPrice
());
// 计算优惠价格
if
(
purchaseIn
.
getDiscountPercent
()
==
null
)
{
purchaseIn
.
setDiscountPercent
(
BigDecimal
.
ZERO
);
}
purchaseIn
.
setDiscountPrice
(
MoneyUtils
.
priceMultiplyPercent
(
purchaseIn
.
getTotalPrice
(),
purchaseIn
.
getDiscountPercent
()));
purchaseIn
.
setTotalPrice
(
purchaseIn
.
getTotalPrice
()
.
subtract
(
purchaseIn
.
getDiscountPrice
()).
add
(
purchaseIn
.
getOtherPrice
())
);
//
purchaseIn.setDiscountPrice(MoneyUtils.priceMultiplyPercent(purchaseIn.getTotalPrice(), purchaseIn.getDiscountPercent()));
purchaseIn
.
setTotalPrice
(
purchaseIn
.
getTotalPrice
()
/*.subtract(purchaseIn.getDiscountPrice()).add(purchaseIn.getOtherPrice())*/
);
}
private
void
updatePurchaseOrderInCount
(
Long
orderId
)
{
...
...
@@ -193,7 +192,7 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
if
(
purchaseIn
.
getPaymentPrice
().
equals
(
paymentPrice
))
{
return
;
}
if
(
paymentPrice
.
compareTo
(
purchaseIn
.
getTotalPrice
(
))
>
0
)
{
if
(
paymentPrice
.
compareTo
(
BigDecimal
.
valueOf
(
purchaseIn
.
getTotalPrice
()
))
>
0
)
{
throw
exception
(
PURCHASE_IN_FAIL_PAYMENT_PRICE_EXCEED
,
paymentPrice
,
purchaseIn
.
getTotalPrice
());
}
purchaseInMapper
.
updateById
(
new
ErpPurchaseInDO
().
setId
(
id
).
setPaymentPrice
(
paymentPrice
));
...
...
@@ -201,19 +200,19 @@ public class ErpPurchaseInServiceImpl implements ErpPurchaseInService {
private
List
<
ErpPurchaseInItemDO
>
validatePurchaseInItems
(
List
<
ErpPurchaseInSaveReqVO
.
Item
>
list
)
{
// 1. 校验产品存在
List
<
ErpProductDO
>
productList
=
productService
.
validProductList
(
/*
List<ErpProductDO> productList = productService.validProductList(
convertSet(list, ErpPurchaseInSaveReqVO.Item::getProductId));
Map
<
Long
,
ErpProductDO
>
productMap
=
convertMap
(
productList
,
ErpProductDO:
:
getId
);
Map<Long, ErpProductDO> productMap = convertMap(productList, ErpProductDO::getId);
*/
// 2. 转化为 ErpPurchaseInItemDO 列表
return
convertList
(
list
,
o
->
BeanUtils
.
toBean
(
o
,
ErpPurchaseInItemDO
.
class
,
item
->
{
// item.setProductUnitId(productMap.get(item.getProductId()).getUnitId());
item
.
setTotalPrice
(
BigDecimal
.
valueOf
(
item
.
getProductPrice
()
*
item
.
getCount
()
));
item
.
setTotalPrice
(
item
.
getProductPrice
()
*
item
.
getCount
(
));
if
(
item
.
getTotalPrice
()
==
null
)
{
return
;
}
if
(
item
.
getTaxPercent
()
!=
null
)
{
/*
if (item.getTaxPercent() != null) {
item.setTaxPrice(MoneyUtils.priceMultiplyPercent(item.getTotalPrice(), item.getTaxPercent()));
}
}
*/
}));
}
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
View file @
46cd642f
...
...
@@ -346,7 +346,6 @@ public class ErpPurchaseOrderServiceImpl implements ErpPurchaseOrderService {
}
if
(!
customerOrderSet
.
contains
(
item
.
getCustomerOrderId
()))
{
customerOrderApi
.
updateOrderStatus
(
item
.
getCustomerOrderId
(),
updateOrderStatus
);
// 添加订单进度记录
CustomerOrderRecordEvent
event
=
new
CustomerOrderRecordEvent
();
event
.
setOrderStatus
(
updateOrderStatus
);
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/sale/ErpSaleOrderService.java
View file @
46cd642f
...
...
@@ -5,6 +5,7 @@ import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrd
import
cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderSaveReqVO
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO
;
import
cn.iocoder.foodnexus.module.order.dto.DeliveryOrderUpdateReqVO
;
import
jakarta.validation.Valid
;
import
java.math.BigDecimal
;
...
...
@@ -123,7 +124,13 @@ public interface ErpSaleOrderService {
/**
* 配送
* @param id
*/
void
delivery
(
Long
id
,
Long
deliveryStaffId
);
/**
* 到货
* @param id
* @param deliveryStaffId
*/
void
arrival
(
DeliveryOrderUpdateReqVO
reqVO
,
Long
deliveryStaffId
);
}
\ No newline at end of file
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/sale/ErpSaleOrderServiceImpl.java
View file @
46cd642f
This diff is collapsed.
Click to expand it.
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/sale/ErpSaleOutService.java
View file @
46cd642f
...
...
@@ -99,4 +99,5 @@ public interface ErpSaleOutService {
List
<
ErpSaleOutItemDO
>
getSaleOutItemListByOutIds
(
Collection
<
Long
>
outIds
);
ErpSaleOutDO
getSaleOutByCustomerOrderId
(
Long
customerOrderId
);
}
\ No newline at end of file
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/service/sale/ErpSaleOutServiceImpl.java
View file @
46cd642f
...
...
@@ -141,16 +141,16 @@ public class ErpSaleOutServiceImpl implements ErpSaleOutService {
}
private
void
calculateTotalPrice
(
ErpSaleOutDO
saleOut
,
List
<
ErpSaleOutItemDO
>
saleOutItems
)
{
saleOut
.
setTotalCount
(
getSumValue
(
saleOutItems
,
ErpSaleOutItemDO:
:
getCount
,
BigDecimal:
:
add
));
saleOut
.
setTotalProductPrice
(
getSumValue
(
saleOutItems
,
ErpSaleOutItemDO:
:
getTotalPrice
,
BigDecimal:
:
add
,
BigDecimal
.
ZERO
));
saleOut
.
setTotalCount
(
getSumValue
(
saleOutItems
,
ErpSaleOutItemDO:
:
getCount
,
Integer:
:
sum
));
saleOut
.
setTotalProductPrice
(
getSumValue
(
saleOutItems
,
ErpSaleOutItemDO:
:
getTotalPrice
,
Integer:
:
sum
,
0
));
saleOut
.
setTotalTaxPrice
(
getSumValue
(
saleOutItems
,
ErpSaleOutItemDO:
:
getTaxPrice
,
BigDecimal:
:
add
,
BigDecimal
.
ZERO
));
saleOut
.
setTotalPrice
(
saleOut
.
getTotalProductPrice
()
.
add
(
saleOut
.
getTotalTaxPrice
())
);
saleOut
.
setTotalPrice
(
saleOut
.
getTotalProductPrice
());
// 计算优惠价格
if
(
saleOut
.
getDiscountPercent
()
==
null
)
{
saleOut
.
setDiscountPercent
(
BigDecimal
.
ZERO
);
}
saleOut
.
setDiscountPrice
(
MoneyUtils
.
priceMultiplyPercent
(
saleOut
.
getTotalPrice
(),
saleOut
.
getDiscountPercent
()));
saleOut
.
setTotalPrice
(
saleOut
.
getTotalPrice
()
.
subtract
(
saleOut
.
getDiscountPrice
().
add
(
saleOut
.
getOtherPrice
()))
);
//
saleOut.setDiscountPrice(MoneyUtils.priceMultiplyPercent(saleOut.getTotalPrice(), saleOut.getDiscountPercent()));
saleOut
.
setTotalPrice
(
saleOut
.
getTotalPrice
()
/* - (saleOut.getDiscountPrice().add(saleOut.getOtherPrice()))*/
);
}
private
void
updateSaleOrderOutCount
(
Long
orderId
)
{
...
...
@@ -190,9 +190,9 @@ public class ErpSaleOutServiceImpl implements ErpSaleOutService {
Integer
bizType
=
approve
?
ErpStockRecordBizTypeEnum
.
SALE_OUT
.
getType
()
:
ErpStockRecordBizTypeEnum
.
SALE_OUT_CANCEL
.
getType
();
saleOutItems
.
forEach
(
saleOutItem
->
{
BigDecimal
count
=
approve
?
saleOutItem
.
getCount
().
negate
()
:
saleOutItem
.
getCount
();
Integer
count
=
approve
?
-
saleOutItem
.
getCount
()
:
saleOutItem
.
getCount
();
stockRecordService
.
createStockRecord
(
new
ErpStockRecordCreateReqBO
(
saleOutItem
.
getProductId
(),
saleOutItem
.
getWarehouseId
(),
count
,
saleOutItem
.
getProductId
(),
saleOutItem
.
getWarehouseId
(),
BigDecimal
.
valueOf
(
count
)
,
bizType
,
saleOutItem
.
getOutId
(),
saleOutItem
.
getId
(),
saleOut
.
getNo
()));
});
}
...
...
@@ -203,7 +203,7 @@ public class ErpSaleOutServiceImpl implements ErpSaleOutService {
if
(
saleOut
.
getReceiptPrice
().
equals
(
receiptPrice
))
{
return
;
}
if
(
receiptPrice
.
compareTo
(
saleOut
.
getTotalPrice
(
))
>
0
)
{
if
(
receiptPrice
.
compareTo
(
BigDecimal
.
valueOf
(
saleOut
.
getTotalPrice
()
))
>
0
)
{
throw
exception
(
SALE_OUT_FAIL_RECEIPT_PRICE_EXCEED
,
receiptPrice
,
saleOut
.
getTotalPrice
());
}
saleOutMapper
.
updateById
(
new
ErpSaleOutDO
().
setId
(
id
).
setReceiptPrice
(
receiptPrice
));
...
...
@@ -215,13 +215,10 @@ public class ErpSaleOutServiceImpl implements ErpSaleOutService {
// 2. 转化为 ErpSaleOutItemDO 列表
return
convertList
(
list
,
o
->
BeanUtils
.
toBean
(
o
,
ErpSaleOutItemDO
.
class
,
item
->
{
item
.
setProductUnit
(
productMap
.
get
(
item
.
getProductId
()).
getUnitName
());
item
.
setTotalPrice
(
MoneyUtils
.
priceMultiply
(
item
.
getProductPrice
(),
item
.
getCount
()
));
item
.
setTotalPrice
(
item
.
getProductPrice
()
*
item
.
getCount
(
));
if
(
item
.
getTotalPrice
()
==
null
)
{
return
;
}
if
(
item
.
getTaxPercent
()
!=
null
)
{
item
.
setTaxPrice
(
MoneyUtils
.
priceMultiplyPercent
(
item
.
getTotalPrice
(),
item
.
getTaxPercent
()));
}
}));
}
...
...
@@ -313,4 +310,9 @@ public class ErpSaleOutServiceImpl implements ErpSaleOutService {
return
saleOutItemMapper
.
selectListByOutIds
(
outIds
);
}
@Override
public
ErpSaleOutDO
getSaleOutByCustomerOrderId
(
Long
customerOrderId
)
{
return
saleOutMapper
.
selectOne
(
ErpSaleOutDO:
:
getCustomerOrderId
,
customerOrderId
);
}
}
foodnexus-module-mall/foodnexus-module-operations/src/main/java/cn/iocoder/foodnexus/module/operations/service/deliverystaff/DeliveryStaffServiceImpl.java
View file @
46cd642f
...
...
@@ -7,6 +7,7 @@ import cn.iocoder.foodnexus.framework.common.util.CommonUtil;
import
cn.iocoder.foodnexus.module.operations.dal.dataobject.deliverystaffcustomer.DeliveryStaffCustomerDO
;
import
cn.iocoder.foodnexus.module.operations.dal.mysql.deliverystaffcustomer.DeliveryStaffCustomerMapper
;
import
cn.iocoder.foodnexus.module.order.api.DeliveryStaffApi
;
import
cn.iocoder.foodnexus.module.order.dto.DeliveryStaffSimpleInfo
;
import
cn.iocoder.foodnexus.module.system.controller.admin.user.vo.user.UserSaveReqVO
;
import
cn.iocoder.foodnexus.module.system.service.dept.DeptService
;
import
cn.iocoder.foodnexus.module.system.service.user.AdminUserService
;
...
...
@@ -158,4 +159,9 @@ public class DeliveryStaffServiceImpl implements DeliveryStaffService, DeliveryS
return
Optional
.
ofNullable
(
deliveryStaffMapper
.
selectOne
(
DeliveryStaffDO:
:
getUserId
,
loginUserId
))
.
map
(
DeliveryStaffDO:
:
getId
).
orElse
(
null
);
}
@Override
public
DeliveryStaffSimpleInfo
querybyStaffId
(
Long
staffId
)
{
return
BeanUtils
.
toBean
(
deliveryStaffMapper
.
selectById
(
staffId
),
DeliveryStaffSimpleInfo
.
class
);
}
}
\ No newline at end of file
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/api/DeliveryStaffApi.java
View file @
46cd642f
package
cn
.
iocoder
.
foodnexus
.
module
.
order
.
api
;
import
cn.iocoder.foodnexus.module.order.dto.DeliveryStaffSimpleInfo
;
/**
* @author : yanghao
* create at: 2025/9/25 15:54
...
...
@@ -10,4 +12,6 @@ public interface DeliveryStaffApi {
String
queryNameByStaffId
(
Long
staffId
);
Long
queryStaffIdByUserId
(
Long
loginUserId
);
DeliveryStaffSimpleInfo
querybyStaffId
(
Long
staffId
);
}
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/dto/DeliveryOrderUpdateReqVO.java
0 → 100644
View file @
46cd642f
package
cn
.
iocoder
.
foodnexus
.
module
.
order
.
dto
;
import
jakarta.validation.Valid
;
import
jakarta.validation.constraints.Min
;
import
jakarta.validation.constraints.NotNull
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author : yanghao
* create at: 2025/9/28 17:35
* @description: 配送订单 - 实际配送信息
*/
@Data
public
class
DeliveryOrderUpdateReqVO
{
/**
* 销售出库单id
*/
@NotNull
(
message
=
"销售出库单id不能为空"
)
private
Long
saleOutId
;
/**
* 销售出库子项
*/
@NotNull
(
message
=
"销售出库子项不能为空"
)
@Valid
private
List
<
Item
>
items
;
@Data
public
static
class
Item
{
/**
* 销售出库子id
*/
@NotNull
(
message
=
"销售出库子id不能为空"
)
private
Long
saleOutItemid
;
/**
* 实际签收数量
*/
@NotNull
(
message
=
"实际签收数量不能为空"
)
@Min
(
value
=
0
,
message
=
"实际签收数量最小为0"
)
private
Integer
signedQuantity
;
/**
* 说明
*/
private
String
remark
;
/**
* 相关文件
*/
private
List
<
String
>
remarkFiles
;
}
}
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/dto/DeliveryStaffSimpleInfo.java
0 → 100644
View file @
46cd642f
package
cn
.
iocoder
.
foodnexus
.
module
.
order
.
dto
;
import
lombok.Data
;
/**
* @author : yanghao
* create at: 2025/9/28 16:40
* @description:
*/
@Data
public
class
DeliveryStaffSimpleInfo
{
private
Long
id
;
/**
* 姓名
*/
private
String
name
;
/**
* 联系方式
*/
private
String
contact
;
/**
* 关联系统用户id
*/
private
Long
userId
;
}
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/enums/CustomerOrderStatus.java
View file @
46cd642f
...
...
@@ -91,7 +91,7 @@ public enum CustomerOrderStatus implements ArrayValuable<String> {
CANCEL
(
"取消订单"
,
"CANCEL"
,
9999
)
{
@Override
public
String
getText
()
{
return
""
;
return
"
客户取消订单
"
;
}
},
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/customerorderitem/vo/CustomerOrderItemRespVO.java
View file @
46cd642f
package
cn
.
iocoder
.
foodnexus
.
module
.
order
.
controller
.
admin
.
customerorderitem
.
vo
;
import
cn.iocoder.foodnexus.module.order.dal.dataobject.customerorder.CustomerOrderRemark
;
import
cn.iocoder.foodnexus.module.product.api.dto.ProductInfo
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.*
;
...
...
@@ -69,4 +70,7 @@ public class CustomerOrderItemRespVO {
@ExcelProperty
(
"签收总价,单位:分"
)
private
Integer
signedTotal
;
@Schema
(
description
=
"订单备注"
)
private
CustomerOrderRemark
orderRemark
;
}
\ No newline at end of file
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/app/customerOrder/AppCustomerOrderController.java
View file @
46cd642f
package
cn
.
iocoder
.
foodnexus
.
module
.
order
.
controller
.
app
.
customerOrder
;
import
cn.iocoder.foodnexus.framework.apilog.core.annotation.ApiAccessLog
;
import
cn.iocoder.foodnexus.framework.common.enums.UserSystemEnum
;
import
cn.iocoder.foodnexus.framework.common.pojo.CommonResult
;
import
cn.iocoder.foodnexus.framework.common.pojo.PageParam
;
import
cn.iocoder.foodnexus.framework.common.pojo.PageResult
;
import
cn.iocoder.foodnexus.framework.common.util.CommonUtil
;
import
cn.iocoder.foodnexus.framework.common.util.object.BeanUtils
;
import
cn.iocoder.foodnexus.framework.excel.core.util.ExcelUtils
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutDO
;
import
cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOutService
;
import
cn.iocoder.foodnexus.module.order.controller.admin.customerorder.vo.CustomerOrderPageReqVO
;
import
cn.iocoder.foodnexus.module.order.controller.admin.customerorder.vo.CustomerOrderRecordMapVO
;
import
cn.iocoder.foodnexus.module.order.controller.admin.customerorder.vo.CustomerOrderRespVO
;
import
cn.iocoder.foodnexus.module.order.controller.a
dmin.customerorder.vo.CustomerOrderSaveReq
VO
;
import
cn.iocoder.foodnexus.module.order.controller.a
pp.customerOrder.vo.AppCustomerOrderReceiptResp
VO
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderRemarkReqVO
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderSaveReqVO
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderSaveReqVO
;
import
cn.iocoder.foodnexus.module.order.dal.dataobject.customerorder.CustomerOrderDO
;
import
cn.iocoder.foodnexus.module.order.service.customerorder.CustomerOrderService
;
import
cn.iocoder.foodnexus.module.order.service.customerorderrecord.CustomerOrderRecordService
;
...
...
@@ -23,18 +21,14 @@ import io.swagger.v3.oas.annotations.Operation;
import
io.swagger.v3.oas.annotations.Parameter
;
import
io.swagger.v3.oas.annotations.tags.Tag
;
import
jakarta.annotation.Resource
;
import
jakarta.servlet.http.HttpServletResponse
;
import
jakarta.validation.Valid
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.sql.rowset.serial.SerialException
;
import
java.io.IOException
;
import
java.util.List
;
import
static
cn
.
iocoder
.
foodnexus
.
framework
.
apilog
.
core
.
enums
.
OperateTypeEnum
.
EXPORT
;
import
static
cn
.
iocoder
.
foodnexus
.
framework
.
common
.
pojo
.
CommonResult
.
success
;
@Tag
(
name
=
"APP - 客户总订单"
)
...
...
@@ -48,6 +42,8 @@ public class AppCustomerOrderController {
private
CustomerOrderService
customerOrderService
;
@Autowired
private
CustomerOrderRecordService
customerOrderRecordService
;
@Autowired
private
ErpSaleOutService
saleOutService
;
@PostMapping
(
"/create"
)
@Operation
(
summary
=
"创建客户总订单"
)
...
...
@@ -72,6 +68,13 @@ public class AppCustomerOrderController {
return
success
(
Boolean
.
TRUE
);
}
@GetMapping
(
"receipt"
)
@Operation
(
summary
=
"获取签收客户订单信息"
)
@Parameter
(
name
=
"id"
,
description
=
"客户订单id"
,
required
=
true
)
public
CommonResult
<
List
<
AppCustomerOrderReceiptRespVO
>>
receipt
(
@RequestParam
(
"id"
)
Long
id
)
{
return
success
(
customerOrderService
.
queryReceipt
(
id
));
}
@PostMapping
(
"receipt"
)
@Operation
(
summary
=
"签收客户订单"
)
public
CommonResult
<
Boolean
>
receipt
(
@Valid
@RequestBody
AppCustomerOrderRemarkReqVO
reqVO
)
{
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/app/customerOrder/vo/AppCustomerOrderReceiptRespVO.java
0 → 100644
View file @
46cd642f
package
cn
.
iocoder
.
foodnexus
.
module
.
order
.
controller
.
app
.
customerOrder
.
vo
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
jakarta.validation.Valid
;
import
jakarta.validation.constraints.Min
;
import
jakarta.validation.constraints.NotNull
;
import
lombok.Data
;
import
java.util.List
;
/**
* @author : yanghao
* create at: 2025/9/24 15:51
* @description: 订单备注
*/
@Data
public
class
AppCustomerOrderReceiptRespVO
{
@Schema
(
description
=
"商品id"
)
private
Long
productId
;
@Schema
(
description
=
"实际签收数量"
)
private
Integer
signedQuantity
;
@Schema
(
description
=
"说明"
)
private
String
remark
;
@Schema
(
description
=
"相关文件"
)
private
List
<
String
>
remarkFiles
;
}
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/app/delivery/DeliveryOrderController.java
View file @
46cd642f
...
...
@@ -13,11 +13,11 @@ import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrd
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpCustomerDO
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO
;
import
cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus
;
import
cn.iocoder.foodnexus.module.erp.service.product.ErpProductService
;
import
cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService
;
import
cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOrderService
;
import
cn.iocoder.foodnexus.module.order.api.DeliveryStaffApi
;
import
cn.iocoder.foodnexus.module.order.dto.DeliveryOrderUpdateReqVO
;
import
cn.iocoder.foodnexus.module.system.annotations.AppSystemAuth
;
import
cn.iocoder.foodnexus.module.system.api.user.AdminUserApi
;
import
cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO
;
...
...
@@ -27,7 +27,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import
jakarta.annotation.Resource
;
import
jakarta.validation.Valid
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -69,11 +68,13 @@ public class DeliveryOrderController {
@Operation
(
summary
=
"获得销售订单分页"
)
public
CommonResult
<
PageResult
<
ErpSaleOrderRespVO
>>
getSaleOrderPage
(
@Valid
ErpSaleOrderPageReqVO
pageReqVO
)
{
pageReqVO
.
setDeliveryStaffId
(
deliveryStaffApi
.
queryStaffIdByUserId
(
SecurityFrameworkUtils
.
getLoginUserId
()));
pageReqVO
.
setPickUpStatus
(
SaleOrderPickUpStatus
.
PICK_UP
);
//
pageReqVO.setPickUpStatus(SaleOrderPickUpStatus.PICK_UP);
PageResult
<
ErpSaleOrderDO
>
pageResult
=
saleOrderService
.
getSaleOrderPage
(
pageReqVO
);
return
success
(
buildSaleOrderVOPageResult
(
pageResult
));
}
// TODO 配送单修改实际配送数量在哪一步?
// 配送订单,生成销售出库单
@PostMapping
(
"/delivery"
)
@Operation
(
summary
=
"配送订单"
)
...
...
@@ -83,8 +84,14 @@ public class DeliveryOrderController {
return
success
(
Boolean
.
TRUE
);
}
// 订单修改
// 订单到货
@PostMapping
(
"/arrival"
)
@Operation
(
summary
=
"订单到货"
)
@Parameter
(
name
=
"id"
,
description
=
"销售订单id"
,
required
=
true
)
public
CommonResult
<
Boolean
>
arrival
(
@RequestBody
@Valid
DeliveryOrderUpdateReqVO
reqVO
)
{
saleOrderService
.
arrival
(
reqVO
,
deliveryStaffApi
.
queryStaffIdByUserId
(
SecurityFrameworkUtils
.
getLoginUserId
()));
return
success
(
Boolean
.
TRUE
);
}
private
PageResult
<
ErpSaleOrderRespVO
>
buildSaleOrderVOPageResult
(
PageResult
<
ErpSaleOrderDO
>
pageResult
)
{
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/dal/dataobject/customerorderitem/CustomerOrderItemDO.java
View file @
46cd642f
package
cn
.
iocoder
.
foodnexus
.
module
.
order
.
dal
.
dataobject
.
customerorderitem
;
import
cn.iocoder.foodnexus.module.order.dal.dataobject.customerorder.CustomerOrderRemark
;
import
cn.iocoder.foodnexus.module.product.api.dto.ProductInfo
;
import
com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler
;
import
lombok.*
;
...
...
@@ -79,5 +80,10 @@ public class CustomerOrderItemDO extends BaseDO {
*/
private
Integer
signedTotal
;
/**
* 订单备注
*/
@TableField
(
typeHandler
=
JacksonTypeHandler
.
class
)
private
CustomerOrderRemark
orderRemark
;
}
\ No newline at end of file
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/enums/ErrorCodeConstants.java
View file @
46cd642f
...
...
@@ -16,6 +16,8 @@ public interface ErrorCodeConstants {
ErrorCode
CUSTOMER_ORDER_WAREHOUSE_NOEXISTS
=
new
ErrorCode
(
1_019_100_002
,
"仓库不存在"
);
ErrorCode
CUSTOMER_WAREHOUSE_NOT_BIND
=
new
ErrorCode
(
1_019_100_003
,
"所选仓库未绑定"
);
ErrorCode
CUSTOMER_ORDER_ADDRESS_NOEXISTS
=
new
ErrorCode
(
1_019_100_004
,
"仓库不存在"
);
ErrorCode
CUSTOMER_ORDER_STATUS_ERROR
=
new
ErrorCode
(
1_019_100_005
,
"客户订单状态异常"
);
ErrorCode
CUSTOMER_ORDER_OUT_ERROR
=
new
ErrorCode
(
1_019_100_006
,
"客户订单出库环节异常"
);
// ========== 客户订单-子订单 1_020_100_0001 ==========
ErrorCode
CUSTOMER_ORDER_ITEM_NOT_EXISTS
=
new
ErrorCode
(
1_020_100_001
,
"客户订单-子订单不存在"
);
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/customerorder/CustomerOrderService.java
View file @
46cd642f
...
...
@@ -2,6 +2,7 @@ package cn.iocoder.foodnexus.module.order.service.customerorder;
import
java.util.*
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderReceiptRespVO
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderRemarkReqVO
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderSaveReqVO
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderSaveReqVO
;
...
...
@@ -87,4 +88,6 @@ public interface CustomerOrderService {
* @param reqVO
*/
void
receipt
(
AppCustomerOrderRemarkReqVO
reqVO
);
List
<
AppCustomerOrderReceiptRespVO
>
queryReceipt
(
Long
id
);
}
\ No newline at end of file
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/customerorder/CustomerOrderServiceImpl.java
View file @
46cd642f
...
...
@@ -9,13 +9,17 @@ import cn.iocoder.foodnexus.module.erp.api.PurchaseOrderSplitEvent;
import
cn.iocoder.foodnexus.module.erp.api.service.ErpCustomerApi
;
import
cn.iocoder.foodnexus.module.erp.api.service.ErpSupplierApi
;
import
cn.iocoder.foodnexus.module.erp.api.service.ErpWarehouseApi
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutDO
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutItemDO
;
import
cn.iocoder.foodnexus.module.erp.service.customerwarehouse.CustomerWarehouseService
;
import
cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseOrderServiceImpl
;
import
cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOutService
;
import
cn.iocoder.foodnexus.module.operations.dal.dataobject.inquiresupplierpush.InquireSupplierPushDO
;
import
cn.iocoder.foodnexus.module.operations.service.inquiresupplierpush.InquireSupplierPushService
;
import
cn.iocoder.foodnexus.module.order.api.CustomerOrderApi
;
import
cn.iocoder.foodnexus.module.order.api.CustomerOrderRecordApi
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderItemSaveReqVO
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderReceiptRespVO
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderRemarkReqVO
;
import
cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerOrderSaveReqVO
;
import
cn.iocoder.foodnexus.module.order.dto.CustomerAddressInfo
;
...
...
@@ -54,7 +58,6 @@ import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils;
import
cn.iocoder.foodnexus.module.order.dal.mysql.customerorder.CustomerOrderMapper
;
import
static
cn
.
iocoder
.
foodnexus
.
framework
.
common
.
exception
.
util
.
ServiceExceptionUtil
.
exception
;
import
static
cn
.
iocoder
.
foodnexus
.
framework
.
common
.
util
.
collection
.
CollectionUtils
.
convertList
;
import
static
cn
.
iocoder
.
foodnexus
.
module
.
order
.
enums
.
ErrorCodeConstants
.*;
/**
...
...
@@ -104,6 +107,10 @@ public class CustomerOrderServiceImpl implements CustomerOrderService, CustomerO
private
ProductSpuService
productSpuService
;
@Autowired
@Lazy
private
ErpSaleOutService
saleOutService
;
@Autowired
private
GenCodeUtils
genCodeUtils
;
@Override
...
...
@@ -263,13 +270,24 @@ public class CustomerOrderServiceImpl implements CustomerOrderService, CustomerO
throw
exception
(
CUSTOMER_ORDER_NOT_EXISTS
);
}
// TODO ... 取消订单校验待定(订单状态)
CustomerOrderRemark
orderRemark
=
BeanUtils
.
toBean
(
reqVO
,
CustomerOrderRemark
.
class
,
item
->
{
item
.
setOperTime
(
LocalDateTime
.
now
());
});
customerOrderMapper
.
update
(
Wrappers
.<
CustomerOrderDO
>
lambdaUpdate
()
.
set
(
CustomerOrderDO:
:
getOrderRemark
,
orderRemark
)
.
eq
(
CustomerOrderDO:
:
getId
,
reqVO
.
getId
()));
CustomerOrderStatus
orderStatus
=
customerOrder
.
getOrderStatus
();
if
(
orderStatus
.
equals
(
CustomerOrderStatus
.
ORDER_SUCCESS
)
||
orderStatus
.
equals
(
CustomerOrderStatus
.
ORDER_MATCH
))
{
CustomerOrderRemark
orderRemark
=
BeanUtils
.
toBean
(
reqVO
,
CustomerOrderRemark
.
class
,
item
->
{
item
.
setOperTime
(
LocalDateTime
.
now
());
});
customerOrderMapper
.
update
(
Wrappers
.<
CustomerOrderDO
>
lambdaUpdate
()
.
set
(
CustomerOrderDO:
:
getOrderRemark
,
orderRemark
)
.
eq
(
CustomerOrderDO:
:
getId
,
reqVO
.
getId
()));
// 订单记录
CustomerOrderRecordEvent
event
=
new
CustomerOrderRecordEvent
();
event
.
setOrderStatus
(
CustomerOrderStatus
.
CANCEL
);
event
.
setCustomerOrderId
(
reqVO
.
getId
());
orderRecordApi
.
recordEvent
(
event
);
}
else
{
throw
exception
(
CUSTOMER_ORDER_STATUS_ERROR
);
}
}
/**
...
...
@@ -280,10 +298,81 @@ public class CustomerOrderServiceImpl implements CustomerOrderService, CustomerO
@Override
public
void
receipt
(
AppCustomerOrderRemarkReqVO
reqVO
)
{
// TODO .. 校验订单
CustomerOrderDO
customerOrder
=
getCustomerOrder
(
reqVO
.
getId
());
if
(
CommonUtil
.
isEmpty
(
customerOrder
))
{
throw
exception
(
CUSTOMER_ORDER_NOT_EXISTS
);
}
if
(!
customerOrder
.
getOrderStatus
().
equals
(
CustomerOrderStatus
.
ARRIVAL
))
{
throw
exception
(
CUSTOMER_ORDER_STATUS_ERROR
);
}
List
<
CustomerOrderItemDO
>
customerOrderItems
=
customerOrderItemMapper
.
selectList
(
CustomerOrderItemDO:
:
getOrderId
,
reqVO
.
getId
());
ErpSaleOutDO
saleOut
=
saleOutService
.
getSaleOutByCustomerOrderId
(
reqVO
.
getId
());
if
(
CommonUtil
.
isEmpty
(
saleOut
))
{
throw
exception
(
CUSTOMER_ORDER_OUT_ERROR
);
}
List
<
ErpSaleOutItemDO
>
saleOutItems
=
saleOutService
.
getSaleOutItemListByOutId
(
saleOut
.
getId
());
Map
<
Long
,
ErpSaleOutItemDO
>
productMap
=
CommonUtil
.
listConvertMap
(
saleOutItems
,
ErpSaleOutItemDO:
:
getProductId
);
List
<
CustomerOrderItemDO
>
updateBatch
=
new
ArrayList
<>();
customerOrderItems
.
forEach
(
customerOrderItem
->
{
CustomerOrderItemDO
updateItem
=
new
CustomerOrderItemDO
();
updateItem
.
setId
(
customerOrderItem
.
getId
());
if
(
productMap
.
containsKey
(
customerOrderItem
.
getProductId
()))
{
ErpSaleOutItemDO
saleOutItem
=
productMap
.
get
(
customerOrderItem
.
getProductId
());
updateItem
.
setSignedQuantity
(
saleOutItem
.
getCount
());
CustomerOrderRemark
remark
=
new
CustomerOrderRemark
();
remark
.
setOperTime
(
saleOutItem
.
getCreateTime
());
remark
.
setRemarkFiles
(
saleOutItem
.
getRemarkFiles
());
remark
.
setRemark
(
saleOutItem
.
getRemark
());
updateItem
.
setOrderRemark
(
remark
);
}
else
{
updateItem
.
setSignedQuantity
(
customerOrderItem
.
getOrderItemQuantity
());
}
updateItem
.
setSignedTotal
(
updateItem
.
getSignedQuantity
()
*
customerOrderItem
.
getOrderItemPrice
());
updateBatch
.
add
(
updateItem
);
});
// TODO .. 根据签收单调整订单价格等
customerOrderItemMapper
.
updateBatch
(
updateBatch
);
// TODO .. 修改订单状态
// 订单记录
CustomerOrderRecordEvent
event
=
new
CustomerOrderRecordEvent
();
event
.
setOrderStatus
(
CustomerOrderStatus
.
SIGN_RECEIPT
);
event
.
setCustomerOrderId
(
reqVO
.
getId
());
// TODO 签收单链接
event
.
setCopyWriter
(
CommonUtil
.
asList
(
"TODO 签收单链接"
));
orderRecordApi
.
recordEvent
(
event
);
}
@Override
public
List
<
AppCustomerOrderReceiptRespVO
>
queryReceipt
(
Long
id
)
{
CustomerOrderDO
customerOrder
=
getCustomerOrder
(
id
);
if
(
CommonUtil
.
isEmpty
(
customerOrder
))
{
throw
exception
(
CUSTOMER_ORDER_NOT_EXISTS
);
}
if
(!
customerOrder
.
getOrderStatus
().
equals
(
CustomerOrderStatus
.
ARRIVAL
))
{
throw
exception
(
CUSTOMER_ORDER_STATUS_ERROR
);
}
List
<
CustomerOrderItemDO
>
customerOrderItems
=
customerOrderItemMapper
.
selectList
(
CustomerOrderItemDO:
:
getOrderId
,
id
);
ErpSaleOutDO
saleOut
=
saleOutService
.
getSaleOutByCustomerOrderId
(
id
);
if
(
CommonUtil
.
isEmpty
(
saleOut
))
{
throw
exception
(
CUSTOMER_ORDER_OUT_ERROR
);
}
List
<
ErpSaleOutItemDO
>
saleOutItems
=
saleOutService
.
getSaleOutItemListByOutId
(
saleOut
.
getId
());
Map
<
Long
,
ErpSaleOutItemDO
>
productMap
=
CommonUtil
.
listConvertMap
(
saleOutItems
,
ErpSaleOutItemDO:
:
getProductId
);
return
CommonUtil
.
listConvert
(
customerOrderItems
,
customerOrderItem
->
{
AppCustomerOrderReceiptRespVO
result
=
new
AppCustomerOrderReceiptRespVO
();
result
.
setProductId
(
customerOrderItem
.
getProductId
());
if
(
productMap
.
containsKey
(
customerOrderItem
.
getProductId
()))
{
ErpSaleOutItemDO
saleOutItem
=
productMap
.
get
(
customerOrderItem
.
getProductId
());
result
.
setSignedQuantity
(
saleOutItem
.
getCount
());
result
.
setRemark
(
saleOutItem
.
getRemark
());
result
.
setRemarkFiles
(
saleOutItem
.
getRemarkFiles
());
}
else
{
result
.
setSignedQuantity
(
customerOrderItem
.
getOrderItemQuantity
());
}
return
result
;
});
}
/**
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/customerorderrecord/CustomerOrderRecordServiceImpl.java
View file @
46cd642f
...
...
@@ -141,7 +141,10 @@ public class CustomerOrderRecordServiceImpl implements CustomerOrderRecordServic
CustomerOrderStatus
orderStatus
=
event
.
getOrderStatus
();
CustomerOrderDTO
orderInfo
=
customerOrderApi
.
queryById
(
orderId
);
String
message
=
String
.
format
(
orderStatus
.
getText
(),
event
.
getCopyWriter
().
toArray
(
new
String
[
0
]));
String
message
=
orderStatus
.
getText
();
if
(
CommonUtil
.
isNotEmpty
(
event
.
getCopyWriter
()))
{
message
=
String
.
format
(
orderStatus
.
getText
(),
event
.
getCopyWriter
().
toArray
(
new
String
[
0
]));
}
CustomerOrderRecordSaveReqVO
saveReqVO
=
new
CustomerOrderRecordSaveReqVO
();
saveReqVO
.
setCustomerId
(
orderInfo
.
getCustomerId
());
...
...
@@ -150,5 +153,7 @@ public class CustomerOrderRecordServiceImpl implements CustomerOrderRecordServic
saveReqVO
.
setSupplierId
(
event
.
getSupplierId
());
saveReqVO
.
setMessageInfo
(
message
);
this
.
createCustomerOrderRecord
(
saveReqVO
);
customerOrderApi
.
updateOrderStatus
(
orderId
,
orderStatus
);
}
}
\ No newline at end of file
foodnexus-module-mall/foodnexus-module-product/src/main/java/cn/iocoder/foodnexus/module/product/service/spu/ProductSpuService.java
View file @
46cd642f
...
...
@@ -16,6 +16,7 @@ import org.springframework.scheduling.annotation.Async;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
/**
* 商品 SPU Service 接口
...
...
@@ -151,4 +152,10 @@ public interface ProductSpuService {
void
updateBrowseCount
(
Long
id
,
int
incrCount
);
void
audit
(
AuditCommonReqVO
auditReqVO
);
default
Map
<
Long
,
ProductSpuDO
>
getProductVOMap
(
Set
<
Long
>
longs
)
{
return
this
.
getSpuMap
(
longs
);
}
List
<
ProductSpuDO
>
validProductList
(
Set
<
Long
>
ids
);
}
foodnexus-module-mall/foodnexus-module-product/src/main/java/cn/iocoder/foodnexus/module/product/service/spu/ProductSpuServiceImpl.java
View file @
46cd642f
...
...
@@ -141,6 +141,25 @@ public class ProductSpuServiceImpl implements ProductSpuService {
}
@Override
public
List
<
ProductSpuDO
>
validProductList
(
Set
<
Long
>
ids
)
{
if
(
CollUtil
.
isEmpty
(
ids
))
{
return
Collections
.
emptyList
();
}
List
<
ProductSpuDO
>
list
=
productSpuMapper
.
selectByIds
(
ids
);
Map
<
Long
,
ProductSpuDO
>
productMap
=
convertMap
(
list
,
ProductSpuDO:
:
getId
);
for
(
Long
id
:
ids
)
{
ProductSpuDO
product
=
productMap
.
get
(
id
);
if
(
productMap
.
get
(
id
)
==
null
)
{
throw
exception
(
SPU_NOT_EXISTS
);
}
if
(
CommonStatusEnum
.
isDisable
(
product
.
getStatus
()))
{
throw
exception
(
SPU_NOT_ENABLE
,
product
.
getName
());
}
}
return
list
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
deleteSpu
(
Long
id
)
{
// 校验存在
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment