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
e0e76314
Commit
e0e76314
authored
Oct 14, 2025
by
杨浩
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
供应商信用评分
parent
a6abc1df
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
179 additions
and
10 deletions
+179
-10
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/supplier/ErpSupplierPageReqVO.java
+3
-0
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/supplier/ErpSupplierSimpleRespVO.java
+55
-0
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/supplier/SupplierScoringWeightRespVO.java
+0
-1
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/mysql/purchase/ErpSupplierMapper.java
+1
-0
foodnexus-module-mall/foodnexus-module-operations/src/main/java/cn/iocoder/foodnexus/module/operations/service/scoringweight/ScoringWeightService.java
+3
-0
foodnexus-module-mall/foodnexus-module-operations/src/main/java/cn/iocoder/foodnexus/module/operations/service/scoringweight/ScoringWeightServiceImpl.java
+7
-0
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/dto/AppCustomerReturnOrderReqVO.java
+2
-2
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/checktask/vo/CheckTaskCheckReqVO.java
+2
-2
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/orderScore/OrderScoreController.java
+1
-1
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/orderScore/vo/OrderScoreSupplierPageReqVO.java
+3
-0
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/orderScore/vo/OrderScoreSupplierRespVO.java
+2
-1
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/customerorder/CustomerOrderServiceImpl.java
+1
-1
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/orderScore/OrderScoreServiceImpl.java
+99
-2
No files found.
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/supplier/ErpSupplierPageReqVO.java
View file @
e0e76314
...
...
@@ -17,6 +17,9 @@ public class ErpSupplierPageReqVO extends PageParam {
@Schema
(
description
=
"id集合"
)
private
List
<
Long
>
idList
;
@Schema
(
description
=
"id"
)
private
Long
id
;
@Schema
(
description
=
"供应商名称"
,
example
=
"芋道源码"
)
private
String
name
;
...
...
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/supplier/ErpSupplierSimpleRespVO.java
0 → 100644
View file @
e0e76314
package
cn
.
iocoder
.
foodnexus
.
module
.
erp
.
controller
.
admin
.
purchase
.
vo
.
supplier
;
import
cn.idev.excel.annotation.ExcelIgnoreUnannotated
;
import
cn.idev.excel.annotation.ExcelProperty
;
import
cn.iocoder.foodnexus.framework.excel.core.annotations.DictFormat
;
import
cn.iocoder.foodnexus.framework.excel.core.convert.DictConvert
;
import
cn.iocoder.foodnexus.module.system.enums.DictTypeConstants
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
java.math.BigDecimal
;
import
java.time.LocalDateTime
;
@Schema
(
description
=
"管理后台 - ERP 供应商 Response VO"
)
@Data
@ExcelIgnoreUnannotated
public
class
ErpSupplierSimpleRespVO
{
@Schema
(
description
=
"供应商编号"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"17791"
)
@ExcelProperty
(
"供应商编号"
)
private
Long
id
;
@Schema
(
description
=
"供应商名称"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"芋道源码"
)
@ExcelProperty
(
"供应商名称"
)
private
String
name
;
@Schema
(
description
=
"联系人"
,
example
=
"芋艿"
)
@ExcelProperty
(
"联系人"
)
private
String
contact
;
@Schema
(
description
=
"手机号码"
,
example
=
"15601691300"
)
@ExcelProperty
(
"手机号码"
)
private
String
mobile
;
@Schema
(
description
=
"联系电话"
,
example
=
"18818288888"
)
@ExcelProperty
(
"联系电话"
)
private
String
telephone
;
@Schema
(
description
=
"开启状态"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"1"
)
@ExcelProperty
(
value
=
"开启状态"
,
converter
=
DictConvert
.
class
)
@DictFormat
(
DictTypeConstants
.
COMMON_STATUS
)
private
Integer
status
;
@Schema
(
description
=
"排序"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"10"
)
@ExcelProperty
(
"排序"
)
private
Integer
sort
;
@Schema
(
description
=
"统一社会信用代码"
)
private
String
unifiedSocialCreditCode
;
/**
* 关联部门id
*/
private
Long
systemDeptId
;
}
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/controller/admin/purchase/vo/supplier/SupplierScoringWeightRespVO.java
View file @
e0e76314
...
...
@@ -11,5 +11,4 @@ import lombok.Data;
public
class
SupplierScoringWeightRespVO
{
}
foodnexus-module-erp/src/main/java/cn/iocoder/foodnexus/module/erp/dal/mysql/purchase/ErpSupplierMapper.java
View file @
e0e76314
...
...
@@ -20,6 +20,7 @@ public interface ErpSupplierMapper extends BaseMapperX<ErpSupplierDO> {
default
PageResult
<
ErpSupplierDO
>
selectPage
(
ErpSupplierPageReqVO
reqVO
)
{
return
selectPage
(
reqVO
,
new
LambdaQueryWrapperX
<
ErpSupplierDO
>()
.
eqIfPresent
(
ErpSupplierDO:
:
getId
,
reqVO
.
getId
())
.
likeIfPresent
(
ErpSupplierDO:
:
getName
,
reqVO
.
getName
())
.
inIfPresent
(
ErpSupplierDO:
:
getId
,
reqVO
.
getIdList
())
.
likeIfPresent
(
ErpSupplierDO:
:
getMobile
,
reqVO
.
getMobile
())
...
...
foodnexus-module-mall/foodnexus-module-operations/src/main/java/cn/iocoder/foodnexus/module/operations/service/scoringweight/ScoringWeightService.java
View file @
e0e76314
...
...
@@ -67,4 +67,6 @@ public interface ScoringWeightService {
* @param reqVO
*/
void
edit
(
ScoringWeightEditReqVO
reqVO
);
List
<
ScoringWeightDO
>
listAll
();
}
\ No newline at end of file
foodnexus-module-mall/foodnexus-module-operations/src/main/java/cn/iocoder/foodnexus/module/operations/service/scoringweight/ScoringWeightServiceImpl.java
View file @
e0e76314
...
...
@@ -118,4 +118,10 @@ public class ScoringWeightServiceImpl implements ScoringWeightService {
scoringWeightMapper
.
updateBatch
(
scoringWeightDOS
);
}
@Override
public
List
<
ScoringWeightDO
>
listAll
()
{
return
scoringWeightMapper
.
selectList
(
Wrappers
.<
ScoringWeightDO
>
lambdaQuery
()
.
orderByAsc
(
ScoringWeightDO:
:
getSort
));
}
}
\ No newline at end of file
foodnexus-module-mall/foodnexus-module-order-api/src/main/java/cn/iocoder/foodnexus/module/order/dto/AppCustomerReturnOrderReqVO.java
View file @
e0e76314
...
...
@@ -36,11 +36,11 @@ public class AppCustomerReturnOrderReqVO {
*/
@NotNull
(
message
=
"退货子项不能为空"
)
@Size
(
min
=
1
,
message
=
"退货子项不能为空"
)
private
List
<
Item
>
orderItems
;
private
List
<
ReturnItems
>
orderItems
;
@Data
public
static
class
Item
{
public
static
class
ReturnItems
{
/**
* 客户订单子项id
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/checktask/vo/CheckTaskCheckReqVO.java
View file @
e0e76314
...
...
@@ -38,14 +38,14 @@ public class CheckTaskCheckReqVO {
@Valid
@NotNull
(
message
=
"质检清单不能为空"
)
@Size
(
min
=
1
,
message
=
"质检清单不能为空"
)
private
List
<
Item
>
items
;
private
List
<
CheckItems
>
items
;
@Schema
(
description
=
"供应商评价"
)
@Valid
private
CheckTaskSupplierScoreReqVO
score
;
@Data
public
static
class
Item
{
public
static
class
CheckItems
{
@Schema
(
description
=
"id"
,
requiredMode
=
Schema
.
RequiredMode
.
REQUIRED
,
example
=
"5717"
)
@NotNull
(
message
=
"items.id不能为空"
)
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/orderScore/OrderScoreController.java
View file @
e0e76314
...
...
@@ -29,7 +29,7 @@ import cn.iocoder.foodnexus.module.order.controller.admin.orderScore.vo.*;
import
cn.iocoder.foodnexus.module.order.dal.dataobject.orderScore.OrderScoreDO
;
import
cn.iocoder.foodnexus.module.order.service.orderScore.OrderScoreService
;
@Tag
(
name
=
"管理后台 - 供应商
评价
"
)
@Tag
(
name
=
"管理后台 - 供应商
信用评分
"
)
@RestController
@RequestMapping
(
"/order/score"
)
@Validated
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/orderScore/vo/OrderScoreSupplierPageReqVO.java
View file @
e0e76314
...
...
@@ -18,6 +18,9 @@ public class OrderScoreSupplierPageReqVO extends PageParam {
@NotNull
(
message
=
"评分年度不能为空"
)
private
String
year
;
@Schema
(
description
=
"供应商id"
)
private
Long
id
;
@Schema
(
description
=
"供应商名称"
,
example
=
"芋道源码"
)
private
String
name
;
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/controller/admin/orderScore/vo/OrderScoreSupplierRespVO.java
View file @
e0e76314
package
cn
.
iocoder
.
foodnexus
.
module
.
order
.
controller
.
admin
.
orderScore
.
vo
;
import
cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierRespVO
;
import
cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierSimpleRespVO
;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
...
...
@@ -22,7 +23,7 @@ public class OrderScoreSupplierRespVO {
private
Long
supplierId
;
@Schema
(
description
=
"供应商信息"
)
private
ErpSupplierRespVO
supplierInfo
;
private
ErpSupplier
Simple
RespVO
supplierInfo
;
@Schema
(
description
=
"评分维度得分"
)
private
List
<
ScoreItems
>
scoreItems
;
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/customerorder/CustomerOrderServiceImpl.java
View file @
e0e76314
...
...
@@ -451,7 +451,7 @@ public class CustomerOrderServiceImpl implements CustomerOrderService, CustomerO
returnSaveReqVO
.
setRemark
(
reqVO
.
getRemark
());
returnSaveReqVO
.
setFilesUrl
(
reqVO
.
getRemarkFiles
());
List
<
ErpSaleReturnSaveReqVO
.
Item
>
items
=
new
ArrayList
<>(
reqVO
.
getOrderItems
().
size
());
for
(
AppCustomerReturnOrderReqVO
.
Item
item
:
reqVO
.
getOrderItems
())
{
for
(
AppCustomerReturnOrderReqVO
.
ReturnItems
item
:
reqVO
.
getOrderItems
())
{
CustomerOrderItemDO
customerOrderItemDO
=
orderItemMap
.
get
(
item
.
getCustomerOrderItemId
());
if
(!
Objects
.
equals
(
customerOrderItemDO
.
getProductId
(),
item
.
getProductId
()))
{
throw
exception
(
CUSTOMER_ORDER_RETURN_PRODUCT_ERROR
);
...
...
foodnexus-module-mall/foodnexus-module-order/src/main/java/cn/iocoder/foodnexus/module/order/service/orderScore/OrderScoreServiceImpl.java
View file @
e0e76314
package
cn
.
iocoder
.
foodnexus
.
module
.
order
.
service
.
orderScore
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.iocoder.foodnexus.framework.common.enums.UserSystemEnum
;
import
cn.iocoder.foodnexus.framework.common.pojo.CommonResult
;
import
cn.iocoder.foodnexus.framework.common.util.CommonUtil
;
import
cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierPageReqVO
;
import
cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierSimpleRespVO
;
import
cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpSupplierDO
;
import
cn.iocoder.foodnexus.module.erp.service.purchase.ErpSupplierService
;
import
cn.iocoder.foodnexus.module.operations.dal.dataobject.scoringweight.ScoringWeightDO
;
import
cn.iocoder.foodnexus.module.operations.service.scoringweight.ScoringWeightService
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
...
...
@@ -13,7 +18,13 @@ import jakarta.annotation.Resource;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.LocalDateTime
;
import
java.time.temporal.TemporalAdjusters
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
cn.iocoder.foodnexus.module.order.controller.admin.orderScore.vo.*
;
import
cn.iocoder.foodnexus.module.order.dal.dataobject.orderScore.OrderScoreDO
;
import
cn.iocoder.foodnexus.framework.common.pojo.PageResult
;
...
...
@@ -42,6 +53,9 @@ public class OrderScoreServiceImpl implements OrderScoreService {
@Autowired
private
ErpSupplierService
supplierService
;
@Autowired
private
ScoringWeightService
scoringWeightService
;
@Override
public
Long
createScore
(
OrderScoreSaveReqVO
createReqVO
)
{
// 插入
...
...
@@ -111,10 +125,92 @@ public class OrderScoreServiceImpl implements OrderScoreService {
public
PageResult
<
OrderScoreSupplierRespVO
>
supplierPage
(
OrderScoreSupplierPageReqVO
pageReqVO
)
{
PageResult
<
ErpSupplierDO
>
supplierPage
=
supplierService
.
getSupplierPage
(
BeanUtils
.
toBean
(
pageReqVO
,
ErpSupplierPageReqVO
.
class
));
if
(
CommonUtil
.
isNotEmpty
(
supplierPage
.
getList
()))
{
Set
<
Long
>
supplierIds
=
CommonUtil
.
listConvertSet
(
supplierPage
.
getList
(),
ErpSupplierDO:
:
getId
);
// scoreMapper.
Map
<
Long
,
ErpSupplierDO
>
supplierMap
=
CommonUtil
.
listConvertMap
(
supplierPage
.
getList
(),
ErpSupplierDO:
:
getId
);
List
<
ScoringWeightDO
>
scoringWeightDOS
=
scoringWeightService
.
listAll
();
Map
<
Long
,
ScoringWeightDO
>
scoringWeightMap
=
CommonUtil
.
listConvertMap
(
scoringWeightDOS
,
ScoringWeightDO:
:
getId
);
List
<
OrderScoreSupplierRespVO
>
resultList
=
new
ArrayList
<>();
// 解析年份
int
year
=
Integer
.
parseInt
(
pageReqVO
.
getYear
());
// 当年的第一天 00:00:00
LocalDateTime
startOfYear
=
LocalDateTime
.
of
(
year
,
1
,
1
,
0
,
0
,
0
);
// 当年的最后一天 23:59:59.999999999
LocalDateTime
endOfYear
=
LocalDateTime
.
of
(
year
,
12
,
1
,
23
,
59
,
59
)
.
with
(
TemporalAdjusters
.
lastDayOfMonth
())
.
withNano
(
999_999_999
);
for
(
Map
.
Entry
<
Long
,
ErpSupplierDO
>
e
:
supplierMap
.
entrySet
())
{
BigDecimal
finalScore
=
BigDecimal
.
ZERO
;
Long
supplierId
=
e
.
getKey
();
ErpSupplierDO
supplierInfo
=
e
.
getValue
();
List
<
OrderScoreSupplierRespVO
.
ScoreItems
>
items
=
new
ArrayList
<>();
OrderScoreSupplierRespVO
orderScoreSupplier
=
new
OrderScoreSupplierRespVO
();
orderScoreSupplier
.
setYear
(
pageReqVO
.
getYear
());
orderScoreSupplier
.
setSupplierId
(
supplierId
);
orderScoreSupplier
.
setSupplierInfo
(
BeanUtil
.
toBean
(
supplierInfo
,
ErpSupplierSimpleRespVO
.
class
));
List
<
OrderScoreDO
>
orderScores
=
scoreMapper
.
selectList
(
Wrappers
.<
OrderScoreDO
>
lambdaQuery
()
.
eq
(
OrderScoreDO:
:
getSupplierId
,
supplierId
)
.
between
(
OrderScoreDO:
:
getCreateTime
,
startOfYear
,
endOfYear
));
Map
<
Long
,
List
<
OrderScoreDO
>>
scoreSupplierMap
=
CommonUtil
.
listConvertListMap
(
orderScores
,
OrderScoreDO:
:
getScoreId
);
for
(
Map
.
Entry
<
Long
,
ScoringWeightDO
>
entry
:
scoringWeightMap
.
entrySet
())
{
Long
scoreId
=
entry
.
getKey
();
ScoringWeightDO
scoreInfo
=
entry
.
getValue
();
OrderScoreSupplierRespVO
.
ScoreItems
scoreItem
=
new
OrderScoreSupplierRespVO
.
ScoreItems
();
List
<
OrderScoreDO
>
supplierScores
=
scoreSupplierMap
.
get
(
scoreId
);
if
(
CommonUtil
.
isNotEmpty
(
supplierScores
))
{
scoreItem
.
setAllScore
(
supplierScores
.
stream
().
mapToInt
(
OrderScoreDO:
:
getScore
).
sum
());
scoreItem
.
setScoreCount
(
supplierScores
.
size
());
scoreItem
.
setScore
(
this
.
divideInts
(
scoreItem
.
getAllScore
(),
scoreItem
.
getScoreCount
()));
}
scoreItem
.
setScoreId
(
scoreId
);
scoreItem
.
setScoreName
(
scoreInfo
.
getScoreName
()
+
"("
+
UserSystemEnum
.
getByKey
(
scoreInfo
.
getUserSystem
()).
getLabel
()
+
")"
);
items
.
add
(
scoreItem
);
if
(
CommonUtil
.
isNotEmpty
(
scoreItem
.
getScore
())
&&
scoreInfo
.
getWeightRatio
().
compareTo
(
BigDecimal
.
ZERO
)
>
0
)
{
finalScore
=
finalScore
.
add
(
this
.
calculate
(
scoreItem
.
getScore
(),
scoreInfo
.
getWeightRatio
()));
}
}
orderScoreSupplier
.
setScoreItems
(
items
);
orderScoreSupplier
.
setFinalScore
(
finalScore
);
resultList
.
add
(
orderScoreSupplier
);
}
return
new
PageResult
<>(
resultList
,
supplierPage
.
getTotal
());
}
return
null
;
}
public
BigDecimal
divideInts
(
int
num1
,
int
num2
)
{
// 处理除数为0的情况
if
(
num2
==
0
)
{
return
BigDecimal
.
ZERO
;
}
// 将int转换为BigDecimal
BigDecimal
dividend
=
BigDecimal
.
valueOf
(
num1
);
BigDecimal
divisor
=
BigDecimal
.
valueOf
(
num2
);
// 相除并保留两位小数,使用四舍五入模式
return
dividend
.
divide
(
divisor
,
2
,
RoundingMode
.
HALF_UP
);
}
public
BigDecimal
calculate
(
BigDecimal
num1
,
BigDecimal
num2
)
{
// 处理空值情况
if
(
num1
==
null
||
num2
==
null
)
{
return
BigDecimal
.
ZERO
;
}
// 1. 乘法运算
BigDecimal
product
=
num1
.
multiply
(
num2
);
// 2. 除以100,保留两位小数,使用四舍五入模式
BigDecimal
result
=
product
.
divide
(
new
BigDecimal
(
"100"
),
// 除数100
2
,
// 保留两位小数
RoundingMode
.
HALF_UP
// 四舍五入模式
);
return
result
;
}
}
\ No newline at end of file
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