提交 7e20a1aa authored 作者: huyufan's avatar huyufan

首页货源APP接口

上级 e0285fa2
......@@ -8,6 +8,7 @@ import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Getter
@Setter
......@@ -25,4 +26,5 @@ public class OrderGoodsListPageParam extends PageParam {
@ApiModelProperty(value = "司机用户编号", example = "1")
// @NotNull(message = "司机用户编号空")
private Long driverUserNo;
}
......@@ -45,11 +45,11 @@ public class AppGoodsOrderController {
return Result.ok(orderGoodsService.getOrderGoodsInfoByOrderGoodsNoForAPP(orderGoodsNo));
}
@ApiOperation(value = "货单列表", notes = "<br>By:胡宇帆")
@PostMapping("/orderGoodsList")
@ApiOperation(value = "APP首页货单列表", notes = "<br>By:胡宇帆")
@PostMapping("/indexOrderGoodsList")
@UnitCovert(param = false)
public Result<PageData<OrderGoodsAPPVO>> orderGoodsList(@RequestBody OrderGoodsListPageParam orderGoodsListPageParam) {
IPage<OrderGoodsAPPVO> page = orderGoodsService.orderGoodsList(orderGoodsListPageParam);
public Result<PageData<OrderGoodsAPPVO>> indexOrderGoodsList(@RequestBody OrderGoodsListPageParam orderGoodsListPageParam) {
IPage<OrderGoodsAPPVO> page = orderGoodsService.indexOrderGoodsList(orderGoodsListPageParam);
return Result.page(page.getRecords(), page.getTotal(), page.getPages());
......
......@@ -12,6 +12,7 @@ import com.msl.common.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
/**
* @author kavin
......@@ -35,4 +36,7 @@ public interface OrderGoodsDao extends BaseDao<OrderGoodsMapper, OrderGoods, Int
void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight);
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam);
IPage<OrderGoodsAPPVO> exclusiveOrderPageGoodsList(OrderGoodsListPageParam orderGoodsListPageParam, List<String> orderGoodsNoList);
}
package com.clx.performance.dao;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import com.clx.performance.mapper.OrderGoodsDriverTruckMapper;
import com.clx.performance.model.OrderGoodsDriverTruck;
......@@ -14,4 +15,6 @@ import java.util.List;
public interface OrderGoodsDriverTruckDao extends BaseDao<OrderGoodsDriverTruckMapper, OrderGoodsDriverTruck, Integer> {
void deleteByTruckNoAndDriverUserNo(String truckNo, String driverUserNo);
Optional<List<OrderGoodsDriverTruck>> selectListByDriverUserNo(Long driverUserNo);
}
......@@ -20,4 +20,6 @@ public interface OrderGoodsTruckBindDao extends BaseDao<OrderGoodsTruckBindMappe
List<Integer> getTrucksByOrderGoodsNo(String orderGoodsNo);
Optional<OrderGoodsTruckBind> getByOrderGoodsNoAndTruckNo(String orderGoodsNo, String truckNo);
Optional<List<OrderGoodsTruckBind>> selectListByTruckNo(List<String> truckList);
}
......@@ -16,6 +16,7 @@ import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.util.List;
/**
* @author kavin
......@@ -79,5 +80,12 @@ public class OrderGoodsDaoImpl extends BaseDaoImpl<OrderGoodsMapper, OrderGoods,
return baseMapper.openOrderPageGoodsList(page);
}
@Override
public IPage<OrderGoodsAPPVO> exclusiveOrderPageGoodsList(OrderGoodsListPageParam param, List<String> orderGoodsNoList) {
Page<OrderGoodsAPPVO> page = Page.of(param.getPage(), param.getPageSize());
return baseMapper.exclusiveOrderPageGoodsList(page, orderGoodsNoList);
}
}
......@@ -3,6 +3,7 @@ package com.clx.performance.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.clx.performance.dao.OrderGoodsDriverTruckDao;
import com.msl.common.base.Optional;
import com.msl.common.dao.BaseDao;
import com.msl.common.dao.impl.BaseDaoImpl;
import com.clx.performance.mapper.OrderGoodsDriverTruckMapper;
......@@ -26,4 +27,12 @@ public class OrderGoodsDriverTruckDaoImpl extends BaseDaoImpl<OrderGoodsDriverTr
.eq(OrderGoodsDriverTruck::getDriverUserNo, Long.valueOf(driverUserNo))
);
}
@Override
public Optional<List<OrderGoodsDriverTruck>> selectListByDriverUserNo(Long driverUserNo) {
List<OrderGoodsDriverTruck> orderGoodsDriverTrucks = baseMapper.selectList(new QueryWrapper<OrderGoodsDriverTruck>().lambda()
.eq(OrderGoodsDriverTruck::getDriverUserNo, driverUserNo).select(OrderGoodsDriverTruck::getTruckNo));
return Optional.of(orderGoodsDriverTrucks);
}
}
package com.clx.performance.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.mapper.OrderGoodsTruckBindMapper;
import com.clx.performance.model.OrderGoodsTruckBind;
......@@ -39,4 +40,10 @@ public class OrderGoodsTruckBindDaoImpl extends BaseDaoImpl<OrderGoodsTruckBindM
));
}
@Override
public Optional<List<OrderGoodsTruckBind>> selectListByTruckNo(List<String> truckList) {
return Optional.ofNullable(baseMapper.selectList(new QueryWrapper<OrderGoodsTruckBind>().lambda()
.in(OrderGoodsTruckBind::getTruckNo,truckList).select(OrderGoodsTruckBind::getOrderGoodsNo)));
}
}
......@@ -13,6 +13,7 @@ import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import java.math.BigDecimal;
import java.util.List;
/**
* @author kavin
......@@ -41,4 +42,7 @@ public interface OrderGoodsMapper extends BaseMapper<OrderGoods> {
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "openOrderPageGoodsList")
IPage<OrderGoodsAPPVO> openOrderPageGoodsList(Page<OrderGoodsAPPVO> page);
@SelectProvider(type = OrderGoodsSqlProvider.class, method = "exclusiveOrderPageGoodsList")
IPage<OrderGoodsAPPVO> exclusiveOrderPageGoodsList(Page<OrderGoodsAPPVO> page, List<String> param);
}
package com.clx.performance.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.clx.performance.model.OrderGoodsDriverTruck;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.sqlProvider.OrderGoodsSqlProvider;
import com.clx.performance.sqlProvider.OrderGoodsTruckBindSqlProvider;
......@@ -27,4 +28,6 @@ public interface OrderGoodsTruckBindMapper extends BaseMapper<OrderGoodsTruckBin
@Select("select truck_no from order_goods_truck_bind where order_goods_no=#{orderGoodsNo}")
List<Integer> getTrucksByOrderGoodsNo(@Param("orderGoodsNo") String orderGoodsNo);
List<OrderGoodsDriverTruck> selectListByTruckNo(List<OrderGoodsDriverTruck> truckList);
}
\ No newline at end of file
......@@ -23,5 +23,5 @@ public interface OrderGoodsService {
void updateOrderGoodsReduceWeightAndStatus(Integer id, BigDecimal orderChildWeight);
IPage<OrderGoodsAPPVO> orderGoodsList(OrderGoodsListPageParam orderGoodsListParam);
IPage<OrderGoodsAPPVO> indexOrderGoodsList(OrderGoodsListPageParam orderGoodsListParam);
}
......@@ -5,17 +5,26 @@ import com.clx.order.feign.OrderFeign;
import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.dao.OrderGoodsDao;
import com.clx.performance.dao.OrderGoodsDriverTruckDao;
import com.clx.performance.dao.OrderGoodsTruckBindDao;
import com.clx.performance.enums.PerformanceResultEnum;
import com.clx.performance.model.OrderGoodsDriverTruck;
import com.clx.performance.model.OrderGoodsTruckBind;
import com.clx.performance.param.app.OrderGoodsListPageParam;
import com.clx.performance.service.OrderGoodsService;
import com.clx.performance.struct.OrderGoodsStruct;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
import com.msl.common.base.Optional;
import com.msl.common.exception.ServiceSystemException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author kavin
......@@ -37,6 +46,9 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
@Autowired
private OrderGoodsTruckBindDao orderGoodsTruckBindDao;
@Autowired
private OrderGoodsDriverTruckDao orderGoodsDriverTruckDao;
@Override
public OrderGoodsVO getOrderGoodsInfoByOrderGoodsNoForPC(String orderGoodsNo) {
OrderGoodsVO orderGoodsVO = orderGoodsDao.getOrderGoodsInfoByOrderGoodsNoForPC(orderGoodsNo).map(orderGoodsStruct::convert).get();
......@@ -68,11 +80,25 @@ public class OrderGoodsServiceImpl implements OrderGoodsService {
}
@Override
public IPage<OrderGoodsAPPVO> orderGoodsList(OrderGoodsListPageParam orderGoodsListParam) {
public IPage<OrderGoodsAPPVO> indexOrderGoodsList(OrderGoodsListPageParam orderGoodsListParam) {
if (StringUtils.equals(orderGoodsListParam.getOrderGoodsType(),"1")){
return orderGoodsDao.openOrderPageGoodsList(orderGoodsListParam);
}else {
return null;
List<OrderGoodsDriverTruck> truckList = orderGoodsDriverTruckDao.
selectListByDriverUserNo(orderGoodsListParam.getDriverUserNo())
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND, "当前用户未绑定车辆");
if (truckList.isEmpty()) {
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND, "当前用户未绑定车辆");
}
List<String> truckNoList = truckList.stream().map(OrderGoodsDriverTruck::getTruckNo).collect(Collectors.toList());
List<OrderGoodsTruckBind> orderGoodsDriverTrucks = orderGoodsTruckBindDao.selectListByTruckNo(truckNoList)
.orElseThrow(PerformanceResultEnum.DATA_NOT_FIND, "当前用户没有专属单");
if (orderGoodsDriverTrucks.isEmpty()) {
throw new ServiceSystemException(PerformanceResultEnum.DATA_NOT_FIND, "当前用户没有专属单");
}
List<String> orderGoodsNoList = orderGoodsDriverTrucks.stream().map(OrderGoodsTruckBind::getOrderGoodsNo).collect(Collectors.toList());
return orderGoodsDao.exclusiveOrderPageGoodsList(orderGoodsListParam,orderGoodsNoList);
}
}
......
......@@ -3,6 +3,7 @@ package com.clx.performance.sqlProvider;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.clx.order.params.PageOrderGoodsListParam;
import com.clx.order.vo.feign.FeignPageOrderVO;
import com.clx.performance.enums.OrderChildEnum;
import com.clx.performance.enums.OrderGoodsStatusEnum;
import com.clx.performance.vo.app.OrderGoodsAPPVO;
import com.clx.performance.vo.pc.OrderGoodsVO;
......@@ -10,6 +11,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.List;
import java.util.Objects;
public class OrderGoodsSqlProvider {
......@@ -95,43 +97,43 @@ public class OrderGoodsSqlProvider {
WHERE("a.last_arrive_send_time >= now()");
WHERE("(a.order_goods_status = 20 or a.order_goods_status = 30)");
WHERE("a.residue_transport_weight >0");
// if (StringUtils.isNotBlank(param.getBeginTime()) && StringUtils.isNotBlank(param.getEndTime())) {
// WHERE("a.create_time >= #{param.beginTime}");
// WHERE("a.create_time <= #{param.endTime}");
// }
// if (Objects.nonNull(param.getTruckDemand())) {
// if (1 == param.getTruckDemand()) {
// WHERE("a.truck_demand = #{param.truckDemand}");
// } else if (2 == param.getTruckDemand()) {
// WHERE("a.truck_demand = #{param.truckDemand}");
// } else if (3 == param.getTruckDemand()) {
// WHERE("a.truck_demand = #{param.truckDemand}");
// }
// }
// if (Objects.nonNull(param.getOrderGoodsStatus())) {
// if (OrderGoodsStatusEnum.Status.CREATED.getCode().equals(param.getOrderGoodsStatus())) {
// WHERE("a.order_goods_status = #{param.orderGoodsStatus}");
// } else if (OrderGoodsStatusEnum.Status.PAYING.getCode().equals(param.getOrderGoodsStatus())) {
// WHERE("a.order_goods_status = #{param.orderGoodsStatus}");
// } else if (OrderGoodsStatusEnum.Status.GO_TO_SEND.getCode().equals(param.getOrderGoodsStatus())) {
// WHERE("a.order_goods_status = #{param.orderGoodsStatus}");
// } else if (OrderGoodsStatusEnum.Status.ARRIVE_SEND.getCode().equals(param.getOrderGoodsStatus())) {
// WHERE("a.order_goods_status = #{param.orderGoodsStatus}");
// } else if (OrderGoodsStatusEnum.Status.CANCEL.getCode().equals(param.getOrderGoodsStatus())) {
// WHERE("a.order_goods_status = #{param.orderGoodsStatus}");
// }
// }
//
// if (StringUtils.isNotBlank(param.getOrderNo())) {
// WHERE("a.order_no = #{param.orderNo}");
// }
// if (StringUtils.isNotBlank(param.getOrderGoodsNo())) {
// WHERE("a.order_goods_no = #{param.orderGoodsNo}");
// }
ORDER_BY("a.create_time desc");
}}.toString();
return sql;
}
public String exclusiveOrderPageGoodsList(@Param("page") Page<OrderGoodsAPPVO> page, @Param("param") List<String> param) {
StringBuffer sqlList = new StringBuffer();
sqlList.append("select a.id, a.order_no," +
" a.order_goods_no, a.order_goods_status," +
" a.extract_weight,a.residue_transport_weight," +
"a.already_transport_weight, a.send_address_id, " +
"a.send_address_shorter,a.send_longitude,a.send_latitude," +
"a.receive_address_id, a.receive_address_shorter,a.receive_longitude," +
"a.receive_latitude,a.goods_id, a.goods_name, a.pending_order_way," +
"date_format(a.directional_expire_time, '%Y-%m-%d %H:%i:%s') as directional_expire_time," +
"date_format(a.last_arrive_send_time, '%Y-%m-%d %H:%i:%s') as last_arrive_send_time," +
"date_format(a.pending_order_time, '%Y-%m-%d %H:%i:%s') as pending_order_time," +
"date_format(a.create_time, '%Y-%m-%d %H:%i:%s') as create_time," +
" date_format(a.modified_time, '%Y-%m-%d %H:%i:%s') as modified_time," +
"a.extract_way,a.need_truck_num,a.senior_logistics_manager_id,a.senior_logistics_manager_name," +
"a.pending_order_freight,a.user_no,a.user_name from order_goods a where a.last_arrive_send_time >= now() and (a.order_goods_status = 20 or a.order_goods_status = 30)" +
"and a.residue_transport_weight > 0" +
" and a.pending_order_way = 1 and a.order_goods_no in (");
if (!param.isEmpty()) {
for (int i = 0; i < param.size(); i++) {
sqlList.append("'" + param.get(i) + "'");
if (i < param.size() -1) {
sqlList.append(",");
}
}
}
sqlList.append(") order by a.create_time desc");
return sqlList.toString();
}
}
#server:
# port: 8081
#
#spring:
# rabbitmq:
# host: 39.101.187.243
# port: 5672
# username: clxmq
# password: clxmq711
#
# redis:
# host: 47.92.223.27
# port: 6379
# password: clx!2022clx
# jedis:
# pool:
# max-idle: 100
# min-idle: 1
# max-active: 1000
# max-wait: -1
#
# datasource:
# driver-class-name: com.mysql.jdbc.Driver
# url: jdbc:mysql://rm-8vb9qx47d6dh4b9s25o.mysql.zhangbei.rds.aliyuncs.com:3306/clx_performance?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
# username: clxdevelop
# password: CLXdevelop#20231
#
# druid:
# initial-size: 4
# min-idle: 4
# max-active: 8
# max-wait: 10000
# # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
# time-between-eviction-runs-millis: 60000
# # 配置一个连接在池中最小生存的时间,单位是毫秒
# min-evictable-idle-time-millis: 1800000
# validation-query: SELECT 1
# test-while-idle: true
# test-on-borrow: false
# test-on-return: false
# # 是否缓存preparedStatement,也就是PSCache。
# pool-prepared-statements: true
# # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
# max-pool-prepared-statement-per-connection-size: 20
# filters: stat,wall
# # filter相关配置
# filter:
# stat:
# enabled: true
# db-type: mysql
# log-slow-sql: true
# slow-sql-millis: 500
# merge-sql: true
# slf4j:
# enabled: true
# statement-log-error-enabled: true
# statement-create-after-log-enabled: false
# statement-close-after-log-enabled: false
# result-set-open-after-log-enabled: false
# result-set-close-after-log-enabled: false
#
# web-stat-filter:
# enabled: true
# url-pattern: /*
# exclusions: "/druid/*"
# session-stat-enable: true
# session-stat-max-count: 1000
# # 监控页面相关配置
# stat-view-servlet:
# enabled: true
# allow: ""
# url-pattern: /druid/*
# reset-enable: false
# login-username: clx
# login-password: Apm!Q@Wm888
# aop-patterns: "com.msl.report.dao.*"
#
#xxl:
# job:
# admin:
# address: http://job.devclx.cn/xxl-job
# executor:
# access-token: default_token
# app-name: clx-performance
# log-path: ./logs/clx-performance/job/
# log-retention-days: 15
#
## Sa-Token配置
#sa-token:
# # token名称 (同时也是cookie名称)
# token-name: token
# # token有效期,单位s 默认30天, -1代表永不过期
# timeout: 2592000
# # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒,默认-1 代表不限制 (例如可以设置为1800代表30分钟内无操作就过期)
# activity-timeout: -1
# # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
# is-concurrent: true
# # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
# is-share: false
# # token风格
# token-style: simple-uuid
# # 是否打印操作日志
# is-log: false
# # 是否在初始化配置时打印版本字符画
# is-print: false
#
# alone-redis:
# # Redis数据库索引(默认为0)
# database: 0
# # Redis服务器地址
# host: 192.168.9.30
# # Redis服务器连接端口
# port: 6379
# # Redis服务器连接密码(默认为空)
# password: clx!2022clx
# # 连接超时时间
# timeout: 10s
#
#
## 日志级别
#logging:
# level:
# root: INFO
#
#
##中交兴路
#gps:
# zhongjiao:
# user: bd63d655-f5d1-4724-8086-0db2858fcd43
# pwd: iBJ5Y079u234jl985ICV81Y3j4zg37
# srt: 1db92c4e-8380-4436-a010-5d0fef214947
# cid: 9dae7170-476a-4a2a-8a9e-3bca075ac9da
server:
port: 8081
spring:
rabbitmq:
host: 39.101.187.243
port: 5672
username: clxmq
password: clxmq711
redis:
host: 47.92.223.27
port: 6379
password: clx!2022clx
jedis:
pool:
max-idle: 100
min-idle: 1
max-active: 1000
max-wait: -1
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://rm-8vb9qx47d6dh4b9s25o.mysql.zhangbei.rds.aliyuncs.com:3306/clx_performance?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
username: clxdevelop
password: CLXdevelop#20231
druid:
initial-size: 4
min-idle: 4
max-active: 8
max-wait: 10000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 1800000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 是否缓存preparedStatement,也就是PSCache。
pool-prepared-statements: true
# 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall
# filter相关配置
filter:
stat:
enabled: true
db-type: mysql
log-slow-sql: true
slow-sql-millis: 500
merge-sql: true
slf4j:
enabled: true
statement-log-error-enabled: true
statement-create-after-log-enabled: false
statement-close-after-log-enabled: false
result-set-open-after-log-enabled: false
result-set-close-after-log-enabled: false
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "/druid/*"
session-stat-enable: true
session-stat-max-count: 1000
# 监控页面相关配置
stat-view-servlet:
enabled: true
allow: ""
url-pattern: /druid/*
reset-enable: false
login-username: clx
login-password: Apm!Q@Wm888
aop-patterns: "com.msl.report.dao.*"
xxl:
job:
admin:
address: http://job.devclx.cn/xxl-job
executor:
access-token: default_token
app-name: clx-performance
log-path: ./logs/clx-performance/job/
log-retention-days: 15
# Sa-Token配置
sa-token:
# token名称 (同时也是cookie名称)
token-name: token
# token有效期,单位s 默认30天, -1代表永不过期
timeout: 2592000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒,默认-1 代表不限制 (例如可以设置为1800代表30分钟内无操作就过期)
activity-timeout: -1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: false
# token风格
token-style: simple-uuid
# 是否打印操作日志
is-log: false
# 是否在初始化配置时打印版本字符画
is-print: false
alone-redis:
# Redis数据库索引(默认为0)
database: 0
# Redis服务器地址
host: 192.168.9.30
# Redis服务器连接端口
port: 6379
# Redis服务器连接密码(默认为空)
password: clx!2022clx
# 连接超时时间
timeout: 10s
# 日志级别
logging:
level:
root: INFO
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#中交兴路
gps:
zhongjiao:
user: bd63d655-f5d1-4724-8086-0db2858fcd43
pwd: iBJ5Y079u234jl985ICV81Y3j4zg37
srt: 1db92c4e-8380-4436-a010-5d0fef214947
cid: 9dae7170-476a-4a2a-8a9e-3bca075ac9da
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论