Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
huang.tao
/
jmai-platform
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
65348f20
authored
Jan 29, 2026
by
zhu.zewen
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
优化列表返回签名
parent
29ed627e
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
311 additions
and
36 deletions
jmai-physic/src/main/java/com/jmai/physic/cloudsign/CloudsignService.java
jmai-physic/src/main/java/com/jmai/physic/cloudsign/SignResult.java
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicAmpouleServiceImpl.java
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicApplyServiceImpl.java
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicBillServiceImpl.java
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicDestroyCheckServiceImpl.java
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicDestroyServiceImpl.java
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicRecordServiceImpl.java
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicStorageAmpouleServiceImpl.java
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicWarehouseServiceImpl.java
jmai-physic/src/main/java/com/jmai/physic/util/SignDataConverter.java
jmai-sys/src/main/java/com/jmai/sys/consts/enums/SysFileTypeEnum.java
jmai-sys/src/main/java/com/jmai/sys/storage/FileStorageService.java
jmai-sys/src/main/java/com/jmai/sys/storage/FileStorageServiceImpl.java
jmai-sys/src/main/java/com/jmai/sys/storage/platform/LocalFileStorage.java
jmai-physic/src/main/java/com/jmai/physic/cloudsign/CloudsignService.java
View file @
65348f20
package
com
.
jmai
.
physic
.
cloudsign
;
import
cn.hutool.core.codec.Base64Decoder
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.crypto.digest.DigestUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.jmai.api.exception.ServiceException
;
...
...
@@ -9,9 +11,16 @@ import com.jmai.physic.config.CloudSignProperties;
import
com.jmai.physic.entity.CloudSignToken
;
import
com.jmai.physic.entity.ISignData
;
import
com.jmai.physic.mapper.CloudSignTokenMapper
;
import
com.jmai.sys.consts.enums.SysFileTypeEnum
;
import
com.jmai.sys.ctx.SpringContextUtils
;
import
com.jmai.sys.dto.UserDto
;
import
com.jmai.sys.dto.UploadResultVo
;
import
com.jmai.sys.entity.SysFile
;
import
com.jmai.sys.manager.SysManager
;
import
com.jmai.sys.mapper.SysFileMapper
;
import
com.jmai.sys.service.SysFileService
;
import
com.jmai.sys.service.UserService
;
import
com.jmai.sys.storage.FileStorageService
;
import
com.jmai.sys.util.HttpUtils
;
import
com.jmai.sys.util.OpenUtil
;
...
...
@@ -34,6 +43,14 @@ public class CloudsignService {
private
CloudSignTokenMapper
cloudSignTokenMapper
;
@Resource
private
UserService
userService
;
@Resource
private
SysManager
sysManager
;
@Resource
private
FileStorageService
fileStorageService
;
@Resource
private
SysFileService
sysFileService
;
@Resource
private
SysFileMapper
sysFileMapper
;
private
String
buildUrl
(
String
endpoint
)
{
return
cloudSignProperties
.
getHost
()
+
endpoint
;
...
...
@@ -372,7 +389,59 @@ public class CloudsignService {
GetstampRequest
request
=
new
GetstampRequest
();
request
.
setRelBizNo
(
relBizNo
);
return
getStamp
(
request
);
String
stampBase64
=
getStamp
(
request
);
// 将印章图片保存到本地
Long
stampId
=
saveStampToLocal
(
stampBase64
);
return
Optional
.
ofNullable
(
stampId
)
.
map
(
String:
:
valueOf
)
.
orElse
(
""
);
}
/**
* 将印章图片保存到本地
* @param stampBase64 印章图片的Base64编码
* @return 文件ID,如果保存失败则返回null
*/
private
Long
saveStampToLocal
(
String
stampBase64
)
{
try
{
// 将Base64编码转换为字节数组
byte
[]
imageBytes
=
Base64Decoder
.
decode
(
stampBase64
);
// 计算图片的MD5值作为唯一标识
String
md5
=
DigestUtil
.
md5Hex
(
imageBytes
);
// 检查是否已存在相同MD5的文件,避免重复存储
SysFile
existingFile
=
sysFileMapper
.
selectOne
(
Wrappers
.<
SysFile
>
lambdaQuery
()
.
eq
(
SysFile:
:
getETag
,
md5
)
.
eq
(
SysFile:
:
getFileType
,
SysFileTypeEnum
.
CS
.
getCode
())
);
if
(
existingFile
!=
null
)
{
log
.
info
(
"印章图片已存在,跳过存储,文件ID: {}"
,
existingFile
.
getId
());
return
existingFile
.
getId
();
}
// 使用MD5作为文件名
String
fileName
=
"stamp_"
+
md5
;
// 使用CS(云签)类型上传文件
UploadResultVo
uploadResult
=
sysManager
.
upload
(
SysFileTypeEnum
.
CS
,
fileName
,
imageBytes
);
// 更新eTag字段为MD5值
SysFile
updateFile
=
new
SysFile
();
updateFile
.
setETag
(
md5
);
sysFileMapper
.
update
(
updateFile
,
Wrappers
.<
SysFile
>
lambdaUpdate
()
.
eq
(
SysFile:
:
getId
,
uploadResult
.
getId
()));
log
.
info
(
"印章图片已保存,文件ID: {}, 文件路径: {}"
,
uploadResult
.
getId
(),
uploadResult
.
getFilePath
());
return
uploadResult
.
getId
();
}
catch
(
Exception
e
)
{
log
.
error
(
"保存印章图片到本地失败: "
,
e
);
return
null
;
}
}
/**
...
...
@@ -520,7 +589,7 @@ public class CloudsignService {
.
set
(
CloudSignToken:
:
getUpdateBy
,
SpringContextUtils
.
getUserId
())
.
set
(
CloudSignToken:
:
getUpdateTime
,
LocalDateTime
.
now
())
.
set
(
CloudSignToken:
:
getDelFlag
,
1
)
.
setSql
(
"work
N
o ='"
+
user
.
getWorkNo
()
+
":"
+
nextId
()
+
"'"
)
.
setSql
(
"work
_n
o ='"
+
user
.
getWorkNo
()
+
":"
+
nextId
()
+
"'"
)
);
// 插入新的令牌记录
...
...
jmai-physic/src/main/java/com/jmai/physic/cloudsign/SignResult.java
View file @
65348f20
...
...
@@ -41,13 +41,17 @@ public class SignResult {
@ApiModelProperty
(
value
=
"工号"
)
private
String
workNo
;
@ApiModelProperty
(
value
=
"签名图片(BASE64)"
,
notes
=
"在线转换工具:https://www.lddgo.net/convert/base64-to-image"
)
public
String
getSignBase64Data
()
{
String
stamp
=
getStamp
();
if
(
ObjectUtil
.
isEmpty
(
stamp
)
&&
stamp
.
startsWith
(
"data:image"
))
{
return
stamp
;
}
else
{
return
"data:image/png;base64,"
+
stamp
;
}
}
// @ApiModelProperty(value = "签名图片(BASE64)", notes = "在线转换工具:https://www.lddgo.net/convert/base64-to-image")
// public String getSignBase64Data() {
// String stamp = getStamp();
// if (ObjectUtil.isEmpty(stamp)
// // 判断stamp是fileId
// || stamp.matches("\\d+")
// || stamp.startsWith("http")
// || stamp.startsWith("data:image")) {
// return stamp;
// } else {
// return "data:image/png;base64," + stamp;
// }
// }
}
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicAmpouleServiceImpl.java
View file @
65348f20
...
...
@@ -16,6 +16,7 @@ import com.jmai.physic.entity.PhysicAmpoule;
import
com.jmai.physic.mapper.PhysicAmpouleMapper
;
import
com.jmai.physic.service.PhysicAmpouleService
;
import
com.jmai.physic.service.PhysicBillService
;
import
com.jmai.physic.util.SignDataConverter
;
import
com.jmai.physic.vo.PhysicAmpouleUseVO
;
import
com.jmai.physic.vo.PhysicAmpouleVO
;
import
com.jmai.physic.vo.PhysicVO
;
...
...
@@ -30,7 +31,6 @@ import org.springframework.transaction.annotation.Transactional;
import
javax.annotation.Resource
;
import
java.math.BigDecimal
;
import
java.math.RoundingMode
;
import
java.time.LocalDateTime
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
...
...
@@ -50,6 +50,9 @@ public class PhysicAmpouleServiceImpl extends AbstractService implements PhysicA
@Resource
private
PhysicBillService
physicBillService
;
@Resource
private
SignDataConverter
signDataConverter
;
@Transactional
@Override
...
...
@@ -136,6 +139,14 @@ public class PhysicAmpouleServiceImpl extends AbstractService implements PhysicA
for
(
PhysicAmpouleVO
record
:
ampoulePage
.
getRecords
())
{
record
.
setBatchBalance
(
batchNoSumMap
.
get
(
buildPhysicBatchKey
(
record
)));
record
.
setPhysicBalance
(
physicSumMap
.
get
(
buildPhysicKey
(
record
)));
// 转换签名数据中的stamp为文件下载URL
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getChUser
()))
{
record
.
setChUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getChUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getFhUser
()))
{
record
.
setFhUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getFhUser
()));
}
}
return
ampoulePage
;
...
...
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicApplyServiceImpl.java
View file @
65348f20
...
...
@@ -15,6 +15,7 @@ import com.jmai.physic.entity.PhysicApply;
import
com.jmai.physic.mapper.PhysicApplyMapper
;
import
com.jmai.physic.service.PhysicApplyService
;
import
com.jmai.physic.service.PhysicBillService
;
import
com.jmai.physic.util.SignDataConverter
;
import
com.jmai.physic.vo.PhysicApplyVO
;
import
com.jmai.physic.vo.PhysicVO
;
import
com.jmai.sys.AbstractService
;
...
...
@@ -29,7 +30,6 @@ import org.springframework.transaction.annotation.Transactional;
import
org.springframework.util.CollectionUtils
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
...
...
@@ -51,6 +51,9 @@ public class PhysicApplyServiceImpl extends AbstractService implements PhysicApp
@Resource
private
PhysicBillService
physicBillService
;
@Resource
private
SignDataConverter
signDataConverter
;
@Transactional
@Override
public
PhysicApplyVO
createPhysicApply
(
PhysicApplyCreateReq
req
)
{
...
...
@@ -225,6 +228,23 @@ public class PhysicApplyServiceImpl extends AbstractService implements PhysicApp
@Override
public
IPage
<
PhysicApplyVO
>
listPage
(
PhysicApplyQueryReq
req
)
{
IPage
<
PhysicApplyVO
>
physicApplyVOIPage
=
physicApplyMapper
.
selectApplyPage
(
new
Page
<>(
req
.
getPageNo
(),
req
.
getPageSize
()),
req
);
// 转换签名数据中的stamp为文件下载URL
for
(
PhysicApplyVO
record
:
physicApplyVOIPage
.
getRecords
())
{
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getLyUser
()))
{
record
.
setLyUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getLyUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getShUser
()))
{
record
.
setShUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getShUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getFyUser
()))
{
record
.
setFyUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getFyUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getFhUser
()))
{
record
.
setFhUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getFhUser
()));
}
}
return
physicApplyVOIPage
;
}
...
...
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicBillServiceImpl.java
View file @
65348f20
...
...
@@ -18,6 +18,7 @@ import com.jmai.physic.entity.PhysicBillHandover;
import
com.jmai.physic.mapper.PhysicBillHandoverMapper
;
import
com.jmai.physic.mapper.PhysicBillMapper
;
import
com.jmai.physic.service.PhysicBillService
;
import
com.jmai.physic.util.SignDataConverter
;
import
com.jmai.physic.vo.BillInfoVO
;
import
com.jmai.physic.vo.BillQueryVO
;
import
com.jmai.sys.AbstractService
;
...
...
@@ -68,6 +69,9 @@ public class PhysicBillServiceImpl extends AbstractService implements PhysicBill
@Resource
private
SysUserMapper
sysUserMapper
;
@Resource
private
SignDataConverter
signDataConverter
;
@Transactional
@Override
...
...
@@ -124,6 +128,17 @@ public class PhysicBillServiceImpl extends AbstractService implements PhysicBill
Page
<
BillQueryVO
>
page
=
buildEmptyPage
(
req
);
Page
<
BillQueryVO
>
billInfoVOPage
=
physicBillMapper
.
selectBillPage
(
page
,
req
);
// 转换签名数据中的stamp为文件下载URL
for
(
BillQueryVO
record
:
billInfoVOPage
.
getRecords
())
{
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getLyUser
()))
{
record
.
setLyUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getLyUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getFhUser
()))
{
record
.
setFhUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getFhUser
()));
}
}
return
billInfoVOPage
;
}
...
...
@@ -157,12 +172,24 @@ public class PhysicBillServiceImpl extends AbstractService implements PhysicBill
@Override
public
IPage
<
PhysicBillHandover
>
listHandoverPage
(
PhysicBillHandoverQueryReq
req
)
{
Page
<
PhysicBillHandover
>
page
=
buildEmptyPage
(
req
);
return
physicBillHandoverMapper
.
selectPage
(
page
,
Wrappers
.<
PhysicBillHandover
>
lambdaQuery
()
IPage
<
PhysicBillHandover
>
handoverPage
=
physicBillHandoverMapper
.
selectPage
(
page
,
Wrappers
.<
PhysicBillHandover
>
lambdaQuery
()
.
eq
(
ObjectUtil
.
isNotEmpty
(
req
.
getDeptId
()),
PhysicBillHandover:
:
getDeptId
,
req
.
getDeptId
())
.
eq
(
ObjectUtil
.
isNotEmpty
(
req
.
getStatus
()),
PhysicBillHandover:
:
getStatus
,
req
.
getStatus
())
.
ge
(
ObjectUtil
.
isNotEmpty
(
req
.
getStartFinishTime
()),
PhysicBillHandover:
:
getFinishTime
,
req
.
getStartFinishTime
())
.
lt
(
ObjectUtil
.
isNotEmpty
(
req
.
getEndFinishTime
()),
PhysicBillHandover:
:
getFinishTime
,
req
.
getEndFinishTime
())
.
orderByDesc
(
PhysicBillHandover:
:
getId
));
// 转换签名数据中的stamp为文件下载URL
for
(
PhysicBillHandover
record
:
handoverPage
.
getRecords
())
{
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getYjUser
()))
{
record
.
setYjUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getYjUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getJsUser
()))
{
record
.
setJsUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getJsUser
()));
}
}
return
handoverPage
;
}
/**
...
...
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicDestroyCheckServiceImpl.java
View file @
65348f20
...
...
@@ -17,6 +17,7 @@ import com.jmai.physic.mapper.PhysicStorageAmpouleMapper;
import
com.jmai.physic.service.PhysicBillService
;
import
com.jmai.physic.service.PhysicDestroyCheckDetailService
;
import
com.jmai.physic.service.PhysicDestroyCheckService
;
import
com.jmai.physic.util.SignDataConverter
;
import
com.jmai.physic.vo.PhysicDestroyCheckVO
;
import
com.jmai.physic.vo.PhysicDestroyNumVO
;
import
com.jmai.sys.consts.BizFileTypes
;
...
...
@@ -68,6 +69,9 @@ public class PhysicDestroyCheckServiceImpl extends BaseServiceImpl<PhysicDestroy
@Resource
private
SysManager
sysManager
;
@Resource
private
SignDataConverter
signDataConverter
;
@Transactional
@Override
...
...
@@ -112,6 +116,26 @@ public class PhysicDestroyCheckServiceImpl extends BaseServiceImpl<PhysicDestroy
bf
->
ObjectUtil
.
equals
(
bf
.
getBizKey
(),
checkVO
.
getId
().
toString
()),
BizFileDto:
:
getFileId
));
}
// 转换签名数据中的stamp为文件下载URL
if
(
ObjectUtil
.
isNotEmpty
(
checkVO
.
getXhUser
()))
{
checkVO
.
setXhUser
(
signDataConverter
.
convertSignDataToUrl
(
checkVO
.
getXhUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
checkVO
.
getJdUser
()))
{
checkVO
.
setJdUser
(
signDataConverter
.
convertSignDataToUrl
(
checkVO
.
getJdUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
checkVO
.
getYxbzrUser
()))
{
checkVO
.
setYxbzrUser
(
signDataConverter
.
convertSignDataToUrl
(
checkVO
.
getYxbzrUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
checkVO
.
getYwkkzUser
()))
{
checkVO
.
setYwkkzUser
(
signDataConverter
.
convertSignDataToUrl
(
checkVO
.
getYwkkzUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
checkVO
.
getBwkkzUser
()))
{
checkVO
.
setBwkkzUser
(
signDataConverter
.
convertSignDataToUrl
(
checkVO
.
getBwkkzUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
checkVO
.
getZgyzUser
()))
{
checkVO
.
setZgyzUser
(
signDataConverter
.
convertSignDataToUrl
(
checkVO
.
getZgyzUser
()));
}
}
return
checkPage
;
...
...
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicDestroyServiceImpl.java
View file @
65348f20
...
...
@@ -11,6 +11,7 @@ import com.jmai.physic.entity.PhysicDestroy;
import
com.jmai.physic.mapper.PhysicDestroyMapper
;
import
com.jmai.physic.service.PhysicBillService
;
import
com.jmai.physic.service.PhysicDestroyService
;
import
com.jmai.physic.util.SignDataConverter
;
import
com.jmai.physic.vo.PhysicDestroyVO
;
import
com.jmai.sys.AbstractService
;
import
com.jmai.sys.consts.enums.RoleTypeEum
;
...
...
@@ -38,6 +39,9 @@ public class PhysicDestroyServiceImpl extends AbstractService implements PhysicD
@Resource
private
PhysicBillService
physicBillService
;
@Resource
private
SignDataConverter
signDataConverter
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
create
(
PhysicDestroyCreateReq
req
)
{
...
...
@@ -56,6 +60,17 @@ public class PhysicDestroyServiceImpl extends AbstractService implements PhysicD
public
Page
<
PhysicDestroyVO
>
listPage
(
PhysicCheckQueryReq
req
)
{
Page
<
PhysicDestroyVO
>
page
=
buildEmptyPage
(
req
);
Page
<
PhysicDestroyVO
>
destroyPage
=
physicDestroyMapper
.
selectDestroyPage
(
page
,
req
);
// 转换签名数据中的stamp为文件下载URL
for
(
PhysicDestroyVO
record
:
destroyPage
.
getRecords
())
{
if
(
cn
.
hutool
.
core
.
util
.
ObjectUtil
.
isNotEmpty
(
record
.
getCzUser
()))
{
record
.
setCzUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getCzUser
()));
}
if
(
cn
.
hutool
.
core
.
util
.
ObjectUtil
.
isNotEmpty
(
record
.
getFhUser
()))
{
record
.
setFhUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getFhUser
()));
}
}
return
destroyPage
;
}
...
...
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicRecordServiceImpl.java
View file @
65348f20
...
...
@@ -16,6 +16,7 @@ import com.jmai.physic.entity.PhysicRecord;
import
com.jmai.physic.mapper.PhysicRecordMapper
;
import
com.jmai.physic.service.PhysicBillService
;
import
com.jmai.physic.service.PhysicRecordService
;
import
com.jmai.physic.util.SignDataConverter
;
import
com.jmai.physic.vo.PhysicRecordVO
;
import
com.jmai.physic.vo.PhysicVO
;
import
com.jmai.sys.AbstractService
;
...
...
@@ -52,6 +53,9 @@ public class PhysicRecordServiceImpl extends AbstractService implements PhysicRe
@Resource
private
PhysicBillService
physicBillService
;
@Resource
private
SignDataConverter
signDataConverter
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
List
<
PhysicRecord
>
physicRecordCreate
(
PhysicRecordCreateReq
req
)
{
...
...
@@ -144,6 +148,20 @@ public class PhysicRecordServiceImpl extends AbstractService implements PhysicRe
bf
->
ObjectUtil
.
equals
(
bf
.
getBizKey
(),
record
.
getId
().
toString
()),
BizFileDto:
:
getFileId
));
}
// 转换签名数据中的stamp为文件下载URL
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getDpUser
()))
{
record
.
setDpUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getDpUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getFyUser
()))
{
record
.
setFyUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getFyUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getYsUser
()))
{
record
.
setYsUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getYsUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getFhUser
()))
{
record
.
setFhUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getFhUser
()));
}
}
return
recordPage
;
...
...
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicStorageAmpouleServiceImpl.java
View file @
65348f20
...
...
@@ -16,6 +16,7 @@ import com.jmai.physic.entity.PhysicStorageAmpoule;
import
com.jmai.physic.mapper.PhysicStorageAmpouleMapper
;
import
com.jmai.physic.service.PhysicBillService
;
import
com.jmai.physic.service.PhysicStorageAmpouleService
;
import
com.jmai.physic.util.SignDataConverter
;
import
com.jmai.physic.vo.PhysicStorageAmpouleVO
;
import
com.jmai.physic.vo.PhysicVO
;
import
com.jmai.sys.AbstractService
;
...
...
@@ -49,6 +50,9 @@ public class PhysicStorageAmpouleServiceImpl extends AbstractService implements
@Resource
protected
SysManager
sysManager
;
@Resource
private
SignDataConverter
signDataConverter
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
create
(
PhysicStorageAmpouleCreateReq
req
)
{
...
...
@@ -202,6 +206,14 @@ public class PhysicStorageAmpouleServiceImpl extends AbstractService implements
record
.
setBatchBalance
(
batchNoSumMap
.
get
(
buildPhysicBatchKey
(
record
)));
record
.
setPhysicBalance
(
physicSumMap
.
get
(
buildPhysicKey
(
record
)));
// 转换签名数据中的stamp为文件下载URL
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getJsUser
()))
{
record
.
setJsUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getJsUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getThUser
()))
{
record
.
setThUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getThUser
()));
}
}
return
ampoulePage
;
...
...
jmai-physic/src/main/java/com/jmai/physic/service/impl/PhysicWarehouseServiceImpl.java
View file @
65348f20
...
...
@@ -15,6 +15,7 @@ import com.jmai.physic.mapper.PhysicAmpouleMapper;
import
com.jmai.physic.mapper.PhysicWarehouseMapper
;
import
com.jmai.physic.service.PhysicBillService
;
import
com.jmai.physic.service.PhysicWarehouseService
;
import
com.jmai.physic.util.SignDataConverter
;
import
com.jmai.physic.vo.PhysicAmpouleUseVO
;
import
com.jmai.physic.vo.PhysicLossVO
;
import
com.jmai.physic.vo.PhysicVO
;
...
...
@@ -55,6 +56,9 @@ public class PhysicWarehouseServiceImpl extends AbstractService implements Phys
@Resource
private
PhysicAmpouleMapper
physicAmpouleMapper
;
@Resource
private
SignDataConverter
signDataConverter
;
@Override
public
PhysicWarehouseVO
createPhysicWarehouse
(
PhysicWarehouseCreateReq
req
)
{
PhysicWarehouse
physicWarehouse
=
new
PhysicWarehouse
();
...
...
@@ -213,6 +217,20 @@ public class PhysicWarehouseServiceImpl extends AbstractService implements Phys
public
IPage
<
PhysicWarehouseVO
>
listPage
(
PhysicWarehouseQueryReq
req
)
{
IPage
<
PhysicWarehouseVO
>
page
=
buildEmptyPage
(
req
);
page
=
physicWarehouseMapper
.
selectWarehousePage
(
page
,
req
);
// 转换签名数据中的stamp为文件下载URL
for
(
PhysicWarehouseVO
record
:
page
.
getRecords
())
{
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getYsUser
()))
{
record
.
setYsUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getYsUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getFhUser
()))
{
record
.
setFhUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getFhUser
()));
}
if
(
ObjectUtil
.
isNotEmpty
(
record
.
getBgUser
()))
{
record
.
setBgUser
(
signDataConverter
.
convertSignDataToUrl
(
record
.
getBgUser
()));
}
}
return
page
;
}
...
...
jmai-physic/src/main/java/com/jmai/physic/util/SignDataConverter.java
0 → 100644
View file @
65348f20
package
com
.
jmai
.
physic
.
util
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.json.JSONUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.jmai.physic.cloudsign.SignResult
;
import
com.jmai.sys.storage.FileStorageService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Base64
;
import
static
com
.
jmai
.
api
.
base
.
BaseService
.
copyTo
;
/**
* 签名数据转换工具类
*/
@Component
public
class
SignDataConverter
{
@Autowired
private
FileStorageService
fileStorageService
;
/**
* 将签名数据中的stamp(文件ID)转换为文件下载URL
*
* @param signDataJson 签名数据的JSON字符串
* @return 包含文件下载URL的签名数据
*/
public
String
convertSignDataToUrl
(
String
signDataJson
)
{
if
(
ObjectUtil
.
isEmpty
(
signDataJson
))
{
return
signDataJson
;
}
try
{
// 解析JSON字符串为SignResult对象
SignResult
signResult
=
JSONUtil
.
toBean
(
signDataJson
,
SignResult
.
class
);
// 获取stamp字段(文件ID)
String
stamp
=
signResult
.
getStamp
();
String
signBase64Data
=
""
;
if
(
ObjectUtil
.
isNotEmpty
(
stamp
))
{
try
{
// 更新SignResult对象中的stamp为文件下载URL
Long
fileId
=
Long
.
valueOf
(
stamp
);
String
fileUrl
=
fileStorageService
.
getUrl
(
fileId
);
signResult
.
setStamp
(
fileUrl
);
// 下载stamp图片,将二进制图片转为Base64字符串(类似data:image/png;base64,XXX)
byte
[]
file
=
fileStorageService
.
download
(
fileId
);
String
base64
=
Base64
.
getEncoder
().
encodeToString
(
file
);
signBase64Data
=
"data:image/png;base64,"
+
base64
;
}
catch
(
NumberFormatException
e
)
{
// 如果stamp不是有效的数字,保持原样
}
}
// 返回更新后的JSON字符串
// 对象转JSONObject
JSONObject
json
=
new
JSONObject
();
copyTo
(
signResult
,
json
);
json
.
put
(
"signBase64Data"
,
signBase64Data
);
return
json
.
toJSONString
();
}
catch
(
Exception
e
)
{
// 如果解析失败,返回原始数据
return
signDataJson
;
}
}
}
\ No newline at end of file
jmai-sys/src/main/java/com/jmai/sys/consts/enums/SysFileTypeEnum.java
View file @
65348f20
...
...
@@ -9,16 +9,8 @@ import lombok.Getter;
*/
@Getter
public
enum
SysFileTypeEnum
{
TEMPLATE
(
1000
,
"模板"
,
"template"
),
// 核验/追溯图片
IE
(
2000
,
"IE"
,
"ie"
),
CS
(
3000
,
"CS"
,
"cs"
),
DB
(
4000
,
"DB"
,
"db"
),
// 业务文件
BIZ
(
9000
,
"BIZ"
,
"biz"
),
CS
(
1000
,
"CS"
,
"云签签名图片"
),
OTHER
(
9999
,
"其他"
,
"other"
),
...
...
@@ -66,6 +58,6 @@ public enum SysFileTypeEnum {
public
static
Boolean
isImage
(
Integer
code
)
{
SysFileTypeEnum
fileType
=
getByCode
(
code
);
return
fileType
==
IE
||
fileType
==
CS
||
fileType
==
DB
;
return
fileType
==
CS
;
}
}
jmai-sys/src/main/java/com/jmai/sys/storage/FileStorageService.java
View file @
65348f20
...
...
@@ -27,5 +27,6 @@ public interface FileStorageService {
void
download
(
Long
srcFileId
,
File
dstFile
);
byte
[]
download
(
Long
fileId
);
byte
[]
download
(
SysFile
sysFile
);
}
jmai-sys/src/main/java/com/jmai/sys/storage/FileStorageServiceImpl.java
View file @
65348f20
...
...
@@ -91,6 +91,11 @@ public class FileStorageServiceImpl implements FileStorageService {
SysFile
srcFile
=
sysFileMapper
.
selectById
(
srcFileId
);
getFileStorage
(
srcFile
.
getPlatform
()).
download
(
srcFile
,
dstFile
);
}
@Override
public
byte
[]
download
(
Long
fileId
)
{
SysFile
sysFile
=
sysFileMapper
.
selectById
(
fileId
);
return
getFileStorage
(
sysFile
.
getPlatform
()).
download
(
sysFile
);
}
@Override
public
byte
[]
download
(
SysFile
sysFile
)
{
...
...
jmai-sys/src/main/java/com/jmai/sys/storage/platform/LocalFileStorage.java
View file @
65348f20
...
...
@@ -77,18 +77,6 @@ public class LocalFileStorage implements FileStorage{
return
null
;
}
// 特殊处理:OCR与业务服务不在同一机器(端侧部署OCR+业务服务部署到服务器),且未图片还未同步到业务服务器时 => 单独的OCR下载地址
SysFileTypeEnum
fileType
=
SysFileTypeEnum
.
getByCode
(
sysFile
.
getFileType
());
String
bucket
=
fileType
.
getBucket
();
String
fileName
=
sysFile
.
getId
()+
sysFile
.
getOriginalMimeType
();
String
filePath
=
fileStorageProperties
.
getLocal
().
getBasePath
()
+
"/"
+
bucket
+
"/"
+
fileName
;
File
file
=
new
File
(
filePath
);
if
(
fileType
==
SysFileTypeEnum
.
IE
&&
ObjectUtil
.
isNotEmpty
(
fileStorageProperties
.
getLocal
().
getOcrDownloadUrl
())
&&
!
file
.
exists
())
{
return
fileStorageProperties
.
getLocal
().
getOcrDownloadUrl
()
+
"?fileId="
+
sysFile
.
getId
();
}
return
fileStorageProperties
.
getLocal
().
getDownloadUrl
()
+
"?fileId="
+
sysFile
.
getId
();
}
...
...
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