Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
S
shop
Project
Project
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
曲欣亮
shop
Commits
8a564182
Commit
8a564182
authored
Sep 23, 2024
by
张永
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
V1.1.7.8.5
parent
90bae4ae
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
185 additions
and
30 deletions
+185
-30
pom.xml
pom.xml
+1
-1
OrderController.java
src/main/java/com/egolm/shop/api/OrderController.java
+2
-1
OrderServiceImpl.java
...ava/com/egolm/shop/api/service/impl/OrderServiceImpl.java
+106
-28
PayClient.java
src/main/java/com/egolm/shop/common/config/PayClient.java
+70
-0
OpenInterceptor.java
...va/com/egolm/shop/common/interceptor/OpenInterceptor.java
+1
-0
application.properties
src/main/resources/application.properties
+3
-0
redmine.html
src/main/resources/templates/redmine.html
+2
-0
No files found.
pom.xml
View file @
8a564182
...
@@ -209,7 +209,7 @@
...
@@ -209,7 +209,7 @@
</executions>
</executions>
<configuration>
<configuration>
<repository>
dockerhub.linkfern.com/b2c/shopapi
</repository>
<repository>
dockerhub.linkfern.com/b2c/shopapi
</repository>
<tag>
V1.1.7.8.
4
</tag>
<tag>
V1.1.7.8.
5
</tag>
<buildArgs>
<buildArgs>
<JAR_FILE>
${project.build.finalName}.jar
</JAR_FILE>
<JAR_FILE>
${project.build.finalName}.jar
</JAR_FILE>
</buildArgs>
</buildArgs>
...
...
src/main/java/com/egolm/shop/api/OrderController.java
View file @
8a564182
...
@@ -152,7 +152,7 @@ public class OrderController {
...
@@ -152,7 +152,7 @@ public class OrderController {
String
salesOrderID
=
request
.
getParameter
(
"salesOrderID"
);
String
salesOrderID
=
request
.
getParameter
(
"salesOrderID"
);
String
goodsList
=
request
.
getParameter
(
"goodsList"
);
String
goodsList
=
request
.
getParameter
(
"goodsList"
);
String
trace_id
=
request
.
getAttribute
(
"trace_id"
)+
""
;
if
(!
StringUtil
.
isNotEmpty
(
shopNO
,
salesOrderID
))
{
if
(!
StringUtil
.
isNotEmpty
(
shopNO
,
salesOrderID
))
{
return
Rjx
.
json
().
setCode
(-
1
).
setMessage
(
I18NUtils
.
getMessage
(
langID
,
"Msg_Parameter_empty"
)).
toJson
();
return
Rjx
.
json
().
setCode
(-
1
).
setMessage
(
I18NUtils
.
getMessage
(
langID
,
"Msg_Parameter_empty"
)).
toJson
();
...
@@ -163,6 +163,7 @@ public class OrderController {
...
@@ -163,6 +163,7 @@ public class OrderController {
map
.
put
(
"salesOrderID"
,
salesOrderID
);
map
.
put
(
"salesOrderID"
,
salesOrderID
);
map
.
put
(
"goodsList"
,
goodsList
);
map
.
put
(
"goodsList"
,
goodsList
);
map
.
put
(
"ipaddress"
,
ServletUtil
.
remoteIp
(
request
));
map
.
put
(
"ipaddress"
,
ServletUtil
.
remoteIp
(
request
));
map
.
put
(
"trace_id"
,
trace_id
);
return
orderService
.
paySubmitV2
(
map
);
return
orderService
.
paySubmitV2
(
map
);
}
}
...
...
src/main/java/com/egolm/shop/api/service/impl/OrderServiceImpl.java
View file @
8a564182
...
@@ -3,20 +3,16 @@ package com.egolm.shop.api.service.impl;
...
@@ -3,20 +3,16 @@ package com.egolm.shop.api.service.impl;
import
java.io.File
;
import
java.io.File
;
import
java.math.BigDecimal
;
import
java.math.BigDecimal
;
import
java.sql.Types
;
import
java.sql.Types
;
import
java.text.SimpleDateFormat
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map
;
import
java.util.TimeZone
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
javax.sql.DataSource
;
import
javax.sql.DataSource
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -37,17 +33,13 @@ import com.egolm.common.DateUtil;
...
@@ -37,17 +33,13 @@ import com.egolm.common.DateUtil;
import
com.egolm.common.FileUtil
;
import
com.egolm.common.FileUtil
;
import
com.egolm.common.GsonUtil
;
import
com.egolm.common.GsonUtil
;
import
com.egolm.common.HttpUtil
;
import
com.egolm.common.HttpUtil
;
import
com.egolm.common.HttpsUtil
;
import
com.egolm.common.StringUtil
;
import
com.egolm.common.StringUtil
;
import
com.egolm.common.Util
;
import
com.egolm.common.Util
;
import
com.egolm.common.bean.Rjx
;
import
com.egolm.common.bean.Rjx
;
import
com.egolm.common.jdbc.JdbcTemplate
;
import
com.egolm.common.jdbc.JdbcTemplate
;
import
com.egolm.common.jdbc.Page
;
import
com.egolm.common.jdbc.Page
;
import
com.egolm.common.jdbc.JdbcTemplate.OutParameter
;
import
com.egolm.common.jdbc.JdbcTemplate.OutParameter
;
import
com.egolm.common.jdbc.dialect.Dialect
;
import
com.egolm.common.jdbc.dialect.SqlServerDialect
;
import
com.egolm.common.jdbc.dialect.SqlServerDialect
;
import
com.egolm.common.jdbc.dialect.bean.Sql
;
import
com.egolm.common.web.ServletUtil
;
import
com.egolm.shop.api.service.CrmService
;
import
com.egolm.shop.api.service.CrmService
;
import
com.egolm.shop.api.service.OrderService
;
import
com.egolm.shop.api.service.OrderService
;
import
com.egolm.shop.bean.RespObject
;
import
com.egolm.shop.bean.RespObject
;
...
@@ -55,8 +47,8 @@ import com.egolm.shop.bean.TSalesOrder;
...
@@ -55,8 +47,8 @@ import com.egolm.shop.bean.TSalesOrder;
import
com.egolm.shop.bean.TSalesOrderDtl
;
import
com.egolm.shop.bean.TSalesOrderDtl
;
import
com.egolm.shop.bean.WxPayResponse
;
import
com.egolm.shop.bean.WxPayResponse
;
import
com.egolm.shop.common.XException
;
import
com.egolm.shop.common.XException
;
import
com.egolm.shop.common.config.PayClient
;
import
com.egolm.shop.common.utils.I18NUtils
;
import
com.egolm.shop.common.utils.I18NUtils
;
import
com.qcloud.cos.utils.DateUtils
;
@Service
@Service
public
class
OrderServiceImpl
implements
OrderService
{
public
class
OrderServiceImpl
implements
OrderService
{
...
@@ -66,6 +58,9 @@ public class OrderServiceImpl implements OrderService {
...
@@ -66,6 +58,9 @@ public class OrderServiceImpl implements OrderService {
@Autowired
@Autowired
private
CrmService
crmService
;
private
CrmService
crmService
;
@Autowired
private
PayClient
payClient
;
@Autowired
@Autowired
@Qualifier
(
"readonly"
)
@Qualifier
(
"readonly"
)
private
JdbcTemplate
readJdbcTemplate
;
private
JdbcTemplate
readJdbcTemplate
;
...
@@ -481,6 +476,23 @@ public class OrderServiceImpl implements OrderService {
...
@@ -481,6 +476,23 @@ public class OrderServiceImpl implements OrderService {
jdbcTemplate
.
update
(
sql
,
ErrorMsg
,
salesOrderID
);
jdbcTemplate
.
update
(
sql
,
ErrorMsg
,
salesOrderID
);
logger
.
info
(
"支付对应的订单号:{},支付单号:{} ,已回写错误 信息:{} "
,
salesOrderID
,
sOutTradeNO
,
ErrorMsg
);
logger
.
info
(
"支付对应的订单号:{},支付单号:{} ,已回写错误 信息:{} "
,
salesOrderID
,
sOutTradeNO
,
ErrorMsg
);
}
else
{
}
else
{
/*if(IsPush.equals("1") && Status.equals("0")) {
}*/
this
.
doPushOrderToSdongPo
(
salesOrderID
,
IsPush
,
Status
);
this
.
delPayFile
(
sOutTradeNO
,
PayTypeID
,
callBackFilePath
);
}
}
else
{
logger
.
info
(
"支付单号{},返回的过程处理结果为空 {}-------"
,
sOutTradeNO
,
GsonUtil
.
toJson
(
returnMap
));
}
}
catch
(
Exception
e
)
{
logger
.
info
(
"支付单号{}, 推送到蔬东坡的订单 异常 "
,
sOutTradeNO
,
e
);
}
}
// 最终推送蔬东坡
public
void
doPushOrderToSdongPo
(
String
salesOrderID
,
String
IsPush
,
String
Status
)
{
if
(
IsPush
.
equals
(
"1"
)
&&
Status
.
equals
(
"0"
))
{
if
(
IsPush
.
equals
(
"1"
)
&&
Status
.
equals
(
"0"
))
{
String
ssql
=
"select * FROM tSystemCtrl WHERE sCode = 'OrderToSudongPoUrl' "
;
String
ssql
=
"select * FROM tSystemCtrl WHERE sCode = 'OrderToSudongPoUrl' "
;
Map
<
String
,
Object
>
setMap
=
jdbcTemplate
.
queryForMap
(
ssql
);
Map
<
String
,
Object
>
setMap
=
jdbcTemplate
.
queryForMap
(
ssql
);
...
@@ -493,14 +505,6 @@ public class OrderServiceImpl implements OrderService {
...
@@ -493,14 +505,6 @@ public class OrderServiceImpl implements OrderService {
}
}
}
}
this
.
delPayFile
(
sOutTradeNO
,
PayTypeID
,
callBackFilePath
);
}
}
else
{
logger
.
info
(
"支付单号{},返回的过程处理结果为空 {}-------"
,
sOutTradeNO
,
GsonUtil
.
toJson
(
returnMap
));
}
}
catch
(
Exception
e
)
{
logger
.
info
(
"支付单号{}, 推送到蔬东坡的订单 异常 "
,
sOutTradeNO
,
e
);
}
}
}
...
@@ -1682,6 +1686,8 @@ public class OrderServiceImpl implements OrderService {
...
@@ -1682,6 +1686,8 @@ public class OrderServiceImpl implements OrderService {
//查询订单状态
//查询订单状态
boolean
isHave170
=
false
;
//是否有扫呗分账支付
String
sqlOrderQuery
=
"select\r\n"
+
String
sqlOrderQuery
=
"select\r\n"
+
" OrderStatus = nOrderStatus, OrderStatusName = sOrderStatusName,\r\n"
+
" OrderStatus = nOrderStatus, OrderStatusName = sOrderStatusName,\r\n"
+
" TotalRealSaleAmount = nTotalRealSaleAmount,\r\n"
+
" TotalRealSaleAmount = nTotalRealSaleAmount,\r\n"
+
...
@@ -1819,13 +1825,85 @@ public class OrderServiceImpl implements OrderService {
...
@@ -1819,13 +1825,85 @@ public class OrderServiceImpl implements OrderService {
return
Rjx
.
jsonOk
().
setData
(
payObj
).
toJson
();
return
Rjx
.
jsonOk
().
setData
(
payObj
).
toJson
();
}
}
}
else
if
(
PayTypeID
!=
null
&&
Tag
!=
null
&&
Tag
.
intValue
()
==
0
&&
(
PayTypeID
.
equals
(
"120"
)
||
PayTypeID
.
equals
(
"121"
)
||
PayTypeID
.
equals
(
"170"
)
||
PayTypeID
.
equals
(
"122"
)
||
PayTypeID
.
equals
(
"130"
)
||
PayTypeID
.
equals
(
"900"
)
||
PayTypeID
.
equals
(
"901"
)
||
PayTypeID
.
equals
(
"902"
)
||
PayTypeID
.
equals
(
"903"
)))
{
}
else
if
(
PayTypeID
!=
null
&&
Tag
!=
null
&&
Tag
.
intValue
()
==
0
&&
(
PayTypeID
.
equals
(
"120"
)
||
PayTypeID
.
equals
(
"121"
)
||
PayTypeID
.
equals
(
"170"
)
||
PayTypeID
.
equals
(
"122"
)
||
PayTypeID
.
equals
(
"130"
)
||
PayTypeID
.
equals
(
"900"
)
||
PayTypeID
.
equals
(
"901"
)
||
PayTypeID
.
equals
(
"902"
)
||
PayTypeID
.
equals
(
"903"
)))
{
if
(
PayTypeID
.
equals
(
"170"
))
{
//扫呗分账 获取分账列表
String
account_out
=
payObj
.
get
(
"CBKAccountOut"
)+
""
;
//出账方
String
account_in
=
payObj
.
get
(
"CBKAccountIn"
)+
""
;
//入账方
String
come_from
=
"shop"
;
String
appId
=
payObj
.
get
(
"AppID"
)+
""
;
String
agentID
=
payObj
.
get
(
"AgentID"
)+
""
;
isHave170
=
true
;
BigDecimal
pay_bd
=
new
BigDecimal
(
"100"
);
//表里为正数
int
total_fee
=
PayAmount
.
multiply
(
pay_bd
).
intValue
();
//支付金额分
Map
<
String
,
Object
>
params
=
new
HashMap
<
String
,
Object
>();
params
.
put
(
"trade_no"
,
OutTradeNO
);
params
.
put
(
"total_fee"
,
total_fee
);
params
.
put
(
"appId"
,
appId
);
params
.
put
(
"order_body"
,
"支付分账"
);
params
.
put
(
"account_in"
,
account_in
);
params
.
put
(
"account_out"
,
account_out
);
params
.
put
(
"come_from"
,
come_from
);
params
.
put
(
"agentID"
,
agentID
);
params
.
put
(
"onlinePayTypeId"
,
PayTypeID
);
for
(
int
ii
=
1
;
ii
<=
100
;
ii
++)
{
logger
.
info
(
"第:{} 次进行扫呗分账支付 ,请求:{} "
,
ii
,
payObj
.
toString
());
String
cbkResult
=
payClient
.
post
(
"/lcsw/fz_cbk_dotrans_f"
,
params
,
map
.
get
(
"trace_id"
)+
""
);
JSONObject
cbkJsonResult
=
JSONObject
.
parseObject
(
cbkResult
);
if
(
cbkJsonResult
.
getBooleanValue
(
"isValid"
))
{
String
cbk_out_trade_no
=
cbkJsonResult
.
getString
(
"out_trade_no"
);
//CBK的支付结果单号
String
finish_time
=
cbkJsonResult
.
getString
(
"finish_time"
);
//完成时间
String
sql
=
"exec up_B2BSalesOrderPayCallBack '"
+
OutTradeNO
+
"' ,'"
+
cbk_out_trade_no
+
"' , '"
+
PayAmount
+
"' , '"
+
finish_time
+
"' , '"
+
PayTypeID
+
"' ,0,'' "
;
List
<
Map
<
String
,
Object
>>
returnMap
=
jdbcTemplate
.
executeMutil
(
sql
).
getDatas
().
get
(
0
);
String
returnStr
=
GsonUtil
.
toJson
(
returnMap
);
logger
.
info
(
"第:{} 次进行扫呗分账支付成功 ,回写结果:{} "
,
ii
,
returnStr
);
break
;
}
else
{
String
statusName
=
cbkJsonResult
.
containsKey
(
"err_code_des"
)?
cbkJsonResult
.
getString
(
"err_code_des"
):
cbkJsonResult
.
getString
(
"message"
);
if
(
StringUtil
.
isBlank
(
statusName
))
{
statusName
=
"分账支付失败."
;
}
//支付失败
String
sql
=
"exec up_B2BSalesOrderPayCallBack '"
+
OutTradeNO
+
"' ,'' , '' , '' , '"
+
PayTypeID
+
"' ,1,'"
+
statusName
+
"' "
;
List
<
Map
<
String
,
Object
>>
returnMap
=
jdbcTemplate
.
executeMutil
(
sql
).
getDatas
().
get
(
0
);
String
returnStr
=
GsonUtil
.
toJson
(
returnMap
);
logger
.
info
(
"第:{} 次进行扫呗分账支付失败 ,回写结果:{} "
,
ii
,
returnStr
);
}
}
}
else
{
payObj
.
putAll
(
jdbcTemplate
.
queryForMap
(
sqlOrderQuery
,
salesOrderID
));
payObj
.
putAll
(
jdbcTemplate
.
queryForMap
(
sqlOrderQuery
,
salesOrderID
));
return
Rjx
.
jsonOk
().
setData
(
payObj
).
toJson
();
return
Rjx
.
jsonOk
().
setData
(
payObj
).
toJson
();
}
}
}
}
}
if
(
isHave170
)
{
//存在分账支付
//检查是否要推疏东波
String
sql111
=
"exec up_B2BSalesOrderPayCallBack '"
+
salesOrderID
+
"'"
;
List
<
Map
<
String
,
Object
>>
returnMap
=
jdbcTemplate
.
executeMutil
(
sql111
).
getDatas
().
get
(
0
);
Map
<
String
,
Object
>
orderMap
=
returnMap
.
get
(
0
);
logger
.
info
(
"订单单号 :"
+
salesOrderID
+
" 检查是否要推送蔬东坡-------"
+
GsonUtil
.
toJson
(
returnMap
));
String
IsPush
=
orderMap
.
get
(
"IsPush"
)+
""
;
if
(
IsPush
.
equals
(
"1"
))
{
this
.
doPushOrderToSdongPo
(
salesOrderID
,
IsPush
,
"0"
);
}
return
Rjx
.
jsonOk
().
setData
(
jdbcTemplate
.
queryForMap
(
sqlOrderQuery
,
salesOrderID
)).
toJson
();
}
else
{
return
Rjx
.
jsonOk
().
setData
(
orderStatusMap
).
toJson
();
return
Rjx
.
jsonOk
().
setData
(
orderStatusMap
).
toJson
();
}
}
}
}
}
return
Rjx
.
jsonErr
().
setMessage
(
"订单错误"
).
set
(
"errorMsg"
,
"订单错误"
).
toJson
();
return
Rjx
.
jsonErr
().
setMessage
(
"订单错误"
).
set
(
"errorMsg"
,
"订单错误"
).
toJson
();
...
...
src/main/java/com/egolm/shop/common/config/PayClient.java
0 → 100644
View file @
8a564182
package
com
.
egolm
.
shop
.
common
.
config
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.SortedMap
;
import
java.util.TreeMap
;
import
org.apache.commons.logging.Log
;
import
org.apache.commons.logging.LogFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
com.alibaba.fastjson.JSON
;
import
com.egolm.common.HttpUtil
;
import
com.egolm.common.MD5Util
;
import
com.egolm.common.StringUtil
;
@Component
public
class
PayClient
{
@Value
(
"${pay.baseUrl}"
)
private
String
baseUrl
;
@Value
(
"${pay.secret}"
)
private
String
secret
;
private
static
final
Log
log
=
LogFactory
.
getLog
(
PayClient
.
class
);
public
String
post
(
String
url
,
Map
<
String
,
Object
>
parameters
,
String
trace_id
)
{
for
(
String
key
:
parameters
.
keySet
())
{
Object
val
=
parameters
.
get
(
key
);
if
(
val
==
null
)
{
parameters
.
put
(
key
,
""
);
}
}
String
requestUrl
=
this
.
baseUrl
+
"/"
+
url
;
log
.
debug
(
"RequestUrl: "
+
requestUrl
);
String
timestamp
=
String
.
valueOf
(
System
.
currentTimeMillis
()/
1000L
);
parameters
.
put
(
"timestamp"
,
timestamp
);
String
sign
=
createSign
(
parameters
,
secret
);
parameters
.
put
(
"sign"
,
sign
);
Map
<
String
,
String
>
header
=
new
HashMap
<
String
,
String
>();
header
.
put
(
"trace_id"
,
trace_id
);
String
result
=
HttpUtil
.
post
(
requestUrl
,
parameters
,
header
);
return
result
;
}
public
static
String
createSign
(
Map
<
String
,
Object
>
params
,
String
md5Key
)
{
SortedMap
<
Object
,
Object
>
parameters
=
new
TreeMap
<
Object
,
Object
>();
for
(
String
key
:
params
.
keySet
())
{
parameters
.
put
(
key
,
params
.
get
(
key
));
}
parameters
.
put
(
"md5Key"
,
md5Key
);
return
MD5Util
.
createSign
(
"UTF-8"
,
parameters
);
}
public
static
void
main
(
String
[]
args
)
{
}
}
src/main/java/com/egolm/shop/common/interceptor/OpenInterceptor.java
View file @
8a564182
...
@@ -51,6 +51,7 @@ public class OpenInterceptor extends HandlerInterceptorAdapter {
...
@@ -51,6 +51,7 @@ public class OpenInterceptor extends HandlerInterceptorAdapter {
traceId
=
StringUtil
.
getId
(
32
,
"S"
);
traceId
=
StringUtil
.
getId
(
32
,
"S"
);
}
}
LogBackUtil
.
setTraceId
(
traceId
);
LogBackUtil
.
setTraceId
(
traceId
);
req
.
setAttribute
(
"trace_id"
,
traceId
);
resp
.
setHeader
(
LogBackUtil
.
TRACE_ID
,
traceId
);
resp
.
setHeader
(
LogBackUtil
.
TRACE_ID
,
traceId
);
...
...
src/main/resources/application.properties
View file @
8a564182
...
@@ -106,6 +106,9 @@ crm.appid=d30cde80e5ac42479c5551a5c00f3717
...
@@ -106,6 +106,9 @@ crm.appid=d30cde80e5ac42479c5551a5c00f3717
crm.secret
=
d0ca67eebe6c4c53996b9b310999fccd
crm.secret
=
d0ca67eebe6c4c53996b9b310999fccd
pay.baseUrl
=
https://dev.linkfern.com/egoPay_b2b
pay.secret
=
90f49d4bb0216c10816c7dec6bf28c89
opt.express.url
=
https://service-5ptj62bx-1257101137.ap-shanghai.apigateway.myqcloud.com/release/express/query
opt.express.url
=
https://service-5ptj62bx-1257101137.ap-shanghai.apigateway.myqcloud.com/release/express/query
opt.express.secretId
=
AKID3dJ0MqWwN23oZ8xt4GFB0s8My1rEfUW2diLU
opt.express.secretId
=
AKID3dJ0MqWwN23oZ8xt4GFB0s8My1rEfUW2diLU
opt.express.secretKey
=
4mp4j4Vu4ZE8lCI9R9jqlo0okFz3bRh24II19d9y
opt.express.secretKey
=
4mp4j4Vu4ZE8lCI9R9jqlo0okFz3bRh24II19d9y
...
...
src/main/resources/templates/redmine.html
View file @
8a564182
...
@@ -24,6 +24,8 @@
...
@@ -24,6 +24,8 @@
</head>
</head>
<body>
<body>
<div
id=
"app"
>
<div
id=
"app"
>
<el-divider
content-position=
"left"
>
V1.1.7.8.5 2024-9-23
</el-divider>
<p
class=
"title"
>
1.扫员分账支付通过shop/paySubmitV2调用
</p>
<el-divider
content-position=
"left"
>
V1.1.7.8.4 2024-9-19
</el-divider>
<el-divider
content-position=
"left"
>
V1.1.7.8.4 2024-9-19
</el-divider>
<p
class=
"title"
>
1.需求 #17402 ,增加crm参数
</p>
<p
class=
"title"
>
1.需求 #17402 ,增加crm参数
</p>
<p
class=
"title"
>
2.需求 #17311
</p>
<p
class=
"title"
>
2.需求 #17311
</p>
...
...
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