Commit 91953e8a authored by “yiyousong”'s avatar “yiyousong”
parents af3837ce 96c11ed9
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
<a-form-item label="联系电话:">{{ formState.phone || '--' }}</a-form-item> <a-form-item label="联系电话:">{{ formState.phone || '--' }}</a-form-item>
<a-form-item label="身份证号:">{{ formState.idcard_IDCardNo || '--' }}</a-form-item> <a-form-item label="身份证号:">{{ formState.idcard_IDCardNo || '--' }}</a-form-item>
<a-form-item label="注册时间:">{{ formState.update_time || '--' }}</a-form-item> <a-form-item label="注册时间:">{{ formState.update_time || '--' }}</a-form-item>
<a-form-item label="注册来源:">{{ regType[formState.register_type] || '--' }}</a-form-item> <a-form-item label="注册来源:">{{ regType[formState.register_type] || '现场注册' }}</a-form-item>
<a-form-item label="户籍地址:">{{ formState.idcard_Address || '--' }}</a-form-item> <a-form-item label="户籍地址:">{{ formState.idcard_Address || '--' }}</a-form-item>
</a-form> </a-form>
</div> </div>
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
{{ formState.idcard_Name }}<a-tag color="green" class="info_tag">实名认证</a-tag> {{ formState.idcard_Name }}<a-tag color="green" class="info_tag">实名认证</a-tag>
</div> </div>
<a-row> <a-row>
<a-col :span="8">年龄:{{ formState.idcard_Name }}</a-col> <a-col :span="8">年龄:{{ formState.age }}岁</a-col>
<a-col :span="8">性别:{{ formState.idcard_Sex || '--' }}</a-col> <a-col :span="8">性别:{{ formState.idcard_Sex || '--' }}</a-col>
<a-col :span="8">民族:{{ formState.idcard_Nation }}</a-col> <a-col :span="8">民族:{{ formState.idcard_Nation }}</a-col>
</a-row> </a-row>
......
ALTER TABLE mortals_xhx_product_interface ADD COLUMN `authInfo` varchar(255) COMMENT '授权信息' ;
ALTER TABLE mortals_xhx_product_interface ADD COLUMN `flowInfo` varchar(255) COMMENT '流控信息' ;
-- ----------------------------
-- 产品接口表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_product_interface_log`;
CREATE TABLE mortals_xhx_product_interface_log(
`id` bigint(20) AUTO_INCREMENT COMMENT '序号,主键,自增长',
`interfaceId` bigint(20) COMMENT '接口id',
`requestParameters` text COMMENT '请求参数',
`version` varchar(255) COMMENT '版本号',
`content` varchar(255) COMMENT '内容说明',
`remark` varchar(255) COMMENT '备注',
`createUserId` bigint(20) NOT NULL COMMENT '创建用户',
`createTime` datetime NOT NULL COMMENT '创建时间',
`updateUserId` bigint(20) COMMENT '更新用户',
`updateTime` datetime COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品接口';
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
public enum LimitStrategyEnum {
不限流(0, "不限流"),
一万次日(1, "10000次/日"),
一千次日(2, "1000次/日"),
一百次日(3, "100次/日"),
一千次小时(4, "1000次/小时"),
一百次小时(5, "100次/小时"),
一百次分钟(6, "100次/分钟"),
十次分钟(7, "10次/分钟"),
一次分钟(8, "1次/分钟");
private Integer value;
private String desc;
LimitStrategyEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
public Integer getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static LimitStrategyEnum getByValue(Integer value) {
for (LimitStrategyEnum statusEnum : LimitStrategyEnum.values()) {
if (statusEnum.getValue() == value) {
return statusEnum;
}
}
return null;
}
/**
* 获取Map集合
*
* @param eItem 不包含项
* @return
*/
public static Map<String, String> getEnumMap(Integer... eItem) {
Map<String, String> resultMap = new LinkedHashMap<>();
for (LimitStrategyEnum item : LimitStrategyEnum.values()) {
try {
boolean hasE = false;
for (Integer e : eItem) {
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception ex) {
}
}
return resultMap;
}
}
\ No newline at end of file
package com.mortals.xhx.module.product.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.product.model.ProductInterfaceLogEntity;
import java.util.List;
/**
* 产品接口Dao
* 产品接口 DAO接口
*
* @author zxfei
* @date 2023-07-18
*/
public interface ProductInterfaceLogDao extends ICRUDDao<ProductInterfaceLogEntity,Long>{
}
package com.mortals.xhx.module.product.dao.ibatis;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.product.dao.ProductInterfaceLogDao;
import com.mortals.xhx.module.product.model.ProductInterfaceLogEntity;
import java.util.Date;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import java.util.List;
/**
* 产品接口DaoImpl DAO接口
*
* @author zxfei
* @date 2023-07-18
*/
@Repository("productInterfaceLogDao")
public class ProductInterfaceLogDaoImpl extends BaseCRUDDaoMybatis<ProductInterfaceLogEntity,Long> implements ProductInterfaceLogDao {
}
package com.mortals.xhx.module.product.model; package com.mortals.xhx.module.product.model;
import java.util.List;
import java.util.List;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.product.model.vo.ProductInterfaceVo; import com.mortals.xhx.module.product.model.vo.ProductInterfaceVo;
import com.mortals.xhx.module.product.model.ProductInterfaceLogEntity;
import lombok.Data; import lombok.Data;
/** /**
* 产品接口实体对象 * 产品接口实体对象
* *
* @author zxfei * @author zxfei
* @date 2023-05-29 * @date 2023-07-18
*/ */
@Data @Data
public class ProductInterfaceEntity extends ProductInterfaceVo { public class ProductInterfaceEntity extends ProductInterfaceVo {
...@@ -38,7 +45,7 @@ public class ProductInterfaceEntity extends ProductInterfaceVo { ...@@ -38,7 +45,7 @@ public class ProductInterfaceEntity extends ProductInterfaceVo {
/** /**
* 超时时间(秒) * 超时时间(秒)
*/ */
private Long timeoutValue; private Integer timeoutValue;
/** /**
* 限流策略1:分钟,2:小时 * 限流策略1:分钟,2:小时
*/ */
...@@ -91,6 +98,25 @@ public class ProductInterfaceEntity extends ProductInterfaceVo { ...@@ -91,6 +98,25 @@ public class ProductInterfaceEntity extends ProductInterfaceVo {
* 异常返回示例 * 异常返回示例
*/ */
private String abnormalResponse; private String abnormalResponse;
/**
* 授权信息
*/
private String authInfo;
/**
* 流控信息
*/
private String flowInfo;
/**
* 产品接口信息
*/
private List<ProductInterfaceLogEntity> productInterfaceLogList=new ArrayList<>();;
public List<ProductInterfaceLogEntity> getProductInterfaceLogList(){
return productInterfaceLogList;
}
public void setProductInterfaceLogList(List<ProductInterfaceLogEntity> productInterfaceLogList){
this.productInterfaceLogList = productInterfaceLogList;
}
@Override @Override
public int hashCode() { public int hashCode() {
return this.getId().hashCode(); return this.getId().hashCode();
...@@ -121,7 +147,7 @@ public class ProductInterfaceEntity extends ProductInterfaceVo { ...@@ -121,7 +147,7 @@ public class ProductInterfaceEntity extends ProductInterfaceVo {
this.requestUrl = ""; this.requestUrl = "";
this.timeoutValue = -1L; this.timeoutValue = -1;
this.limitStrategy = -1; this.limitStrategy = -1;
...@@ -148,5 +174,9 @@ public class ProductInterfaceEntity extends ProductInterfaceVo { ...@@ -148,5 +174,9 @@ public class ProductInterfaceEntity extends ProductInterfaceVo {
this.normalResponse = ""; this.normalResponse = "";
this.abnormalResponse = ""; this.abnormalResponse = "";
this.authInfo = "";
this.flowInfo = "";
} }
} }
\ No newline at end of file
package com.mortals.xhx.module.product.model;
import java.util.List;
import java.util.ArrayList;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.product.model.vo.ProductInterfaceLogVo;
import lombok.Data;
/**
* 产品接口实体对象
*
* @author zxfei
* @date 2023-07-18
*/
@Data
public class ProductInterfaceLogEntity extends ProductInterfaceLogVo {
private static final long serialVersionUID = 1L;
/**
* 接口id
*/
private Long interfaceId;
/**
* 请求参数
*/
private String requestParameters;
/**
* 版本号
*/
private String version;
/**
* 内容说明
*/
private String content;
/**
* 备注
*/
private String remark;
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj instanceof ProductInterfaceLogEntity) {
ProductInterfaceLogEntity tmp = (ProductInterfaceLogEntity) obj;
if (this.getId() == tmp.getId()) {
return true;
}
}
return false;
}
public void initAttrValue(){
this.interfaceId = -1L;
this.requestParameters = "";
this.version = "";
this.content = "";
this.remark = "";
}
}
\ No newline at end of file
package com.mortals.xhx.module.product.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.product.model.ProductInterfaceLogEntity;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import com.mortals.framework.annotation.Excel;
import java.math.BigDecimal;
import java.util.Date;
/**
* 产品接口视图对象
*
* @author zxfei
* @date 2023-07-18
*/
@Data
public class ProductInterfaceLogVo extends BaseEntityLong {
}
\ No newline at end of file
package com.mortals.xhx.module.product.service;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.product.model.ProductInterfaceLogEntity;
import com.mortals.xhx.module.product.dao.ProductInterfaceLogDao;
/**
* ProductInterfaceLogService
*
* 产品接口 service接口
*
* @author zxfei
* @date 2023-07-18
*/
public interface ProductInterfaceLogService extends ICRUDService<ProductInterfaceLogEntity,Long>{
ProductInterfaceLogDao getDao();
}
\ No newline at end of file
package com.mortals.xhx.module.product.service; package com.mortals.xhx.module.product.service;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.product.dao.ProductInterfaceDao;
import com.mortals.xhx.module.product.model.ProductInterfaceEntity; import com.mortals.xhx.module.product.model.ProductInterfaceEntity;
/**
* ProductInterfaceService
*
* 产品接口 service接口
*
* @author zxfei
* @date 2023-02-22
*/
public interface ProductInterfaceService extends ICRUDService<ProductInterfaceEntity,Long>{
/**
* ProductInterfaceService
* <p>
* 产品接口 service接口
*
* @author zxfei
* @date 2023-02-22
*/
public interface ProductInterfaceService extends ICRUDService<ProductInterfaceEntity, Long> {
ProductInterfaceDao getDao();
} }
\ No newline at end of file
package com.mortals.xhx.module.product.service.impl;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.xhx.module.product.dao.ProductInterfaceLogDao;
import com.mortals.xhx.module.product.model.ProductInterfaceLogEntity;
import com.mortals.xhx.module.product.service.ProductInterfaceLogService;
import lombok.extern.slf4j.Slf4j;
/**
* ProductInterfaceLogService
* 产品接口 service实现
*
* @author zxfei
* @date 2023-07-18
*/
@Service("productInterfaceLogService")
@Slf4j
public class ProductInterfaceLogServiceImpl extends AbstractCRUDServiceImpl<ProductInterfaceLogDao, ProductInterfaceLogEntity, Long> implements ProductInterfaceLogService {
}
\ No newline at end of file
package com.mortals.xhx.module.product.service.impl; package com.mortals.xhx.module.product.service.impl;
import com.mortals.framework.util.StringUtils; import com.mortals.framework.util.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
...@@ -7,25 +8,77 @@ import com.mortals.framework.model.Context; ...@@ -7,25 +8,77 @@ import com.mortals.framework.model.Context;
import com.mortals.xhx.module.product.dao.ProductInterfaceDao; import com.mortals.xhx.module.product.dao.ProductInterfaceDao;
import com.mortals.xhx.module.product.model.ProductInterfaceEntity; import com.mortals.xhx.module.product.model.ProductInterfaceEntity;
import com.mortals.xhx.module.product.service.ProductInterfaceService; import com.mortals.xhx.module.product.service.ProductInterfaceService;
import org.springframework.beans.factory.annotation.Autowired;
import com.mortals.xhx.module.product.model.ProductInterfaceLogEntity;
import com.mortals.xhx.module.product.model.ProductInterfaceLogQuery;
import com.mortals.xhx.module.product.service.ProductInterfaceLogService;
import org.springframework.util.ObjectUtils;
import java.util.Date;
import java.util.Arrays;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
/** /**
* ProductInterfaceService * ProductInterfaceService
* 产品接口 service实现 * 产品接口 service实现
* *
* @author zxfei * @author zxfei
* @date 2023-02-22 * @date 2023-07-18
*/ */
@Service("productInterfaceService") @Service("productInterfaceService")
@Slf4j
public class ProductInterfaceServiceImpl extends AbstractCRUDServiceImpl<ProductInterfaceDao, ProductInterfaceEntity, Long> implements ProductInterfaceService { public class ProductInterfaceServiceImpl extends AbstractCRUDServiceImpl<ProductInterfaceDao, ProductInterfaceEntity, Long> implements ProductInterfaceService {
@Autowired
private ProductInterfaceLogService productInterfaceLogService;
@Override
protected void saveAfter(ProductInterfaceEntity entity, Context context) throws AppException {
if (!ObjectUtils.isEmpty(entity.getProductInterfaceLogList())) {
entity.getProductInterfaceLogList().stream().peek(item -> {
item.setInterfaceId(entity.getId());
item.setCreateUserId(this.getContextUserId(context));
item.setCreateTime(new Date());
}).count();
productInterfaceLogService.save(entity.getProductInterfaceLogList());
}
super.saveAfter(entity, context);
}
@Override
protected void updateAfter(ProductInterfaceEntity entity, Context context) throws AppException {
if (!ObjectUtils.isEmpty(entity.getProductInterfaceLogList())) {
// Long[] productInterfaceLogIds = productInterfaceLogService.find(new ProductInterfaceLogQuery().interfaceId(entity.getId())).stream().map(ProductInterfaceLogEntity::getId).toArray(Long[]::new);
// productInterfaceLogService.remove(productInterfaceLogIds, context);
entity.getProductInterfaceLogList().stream().peek(item -> {
item.setInterfaceId(entity.getId());
item.setCreateUserId(this.getContextUserId(context));
item.setCreateTime(new Date());
item.setUpdateUserId(this.getContextUserId(context));
item.setUpdateTime(new Date());
}).count();
productInterfaceLogService.save(entity.getProductInterfaceLogList());
}
super.updateAfter(entity, context);
}
@Override
protected void removeAfter(Long[] ids, Context context, int result) throws AppException {
List<ProductInterfaceLogEntity> productInterfaceLoglist = productInterfaceLogService.find(new ProductInterfaceLogQuery().interfaceIdList(Arrays.asList(ids)));
productInterfaceLogService.removeList(productInterfaceLoglist, context);
super.removeAfter(ids, context, result);
}
@Override @Override
protected void validData(ProductInterfaceEntity entity, Context context) throws AppException { protected void validData(ProductInterfaceEntity entity, Context context) throws AppException {
if(entity.getProductId()==null){ if (entity.getProductId() == null) {
throw new AppException("产品id不能为空"); throw new AppException("产品id不能为空");
} }
if(StringUtils.isEmpty(entity.getInterfaceName())){ if (StringUtils.isEmpty(entity.getInterfaceName())) {
throw new AppException("接口名称不能为空"); throw new AppException("接口名称不能为空");
} }
if(StringUtils.isEmpty(entity.getVersionNumber())){ if (StringUtils.isEmpty(entity.getVersionNumber())) {
throw new AppException("版本号不能为空"); throw new AppException("版本号不能为空");
} }
} }
......
...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.product.web; ...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.product.web;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.common.code.LimitStrategyEnum;
import com.mortals.xhx.module.param.service.ParamService; import com.mortals.xhx.module.param.service.ParamService;
import com.mortals.xhx.module.product.model.ProductInterfaceEntity; import com.mortals.xhx.module.product.model.ProductInterfaceEntity;
import com.mortals.xhx.module.product.service.ProductInterfaceService; import com.mortals.xhx.module.product.service.ProductInterfaceService;
...@@ -32,7 +33,7 @@ public class ProductInterfaceController extends BaseCRUDJsonBodyMappingControlle ...@@ -32,7 +33,7 @@ public class ProductInterfaceController extends BaseCRUDJsonBodyMappingControlle
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "requestType", paramService.getParamBySecondOrganize("ProductInterface","requestType")); this.addDict(model, "requestType", paramService.getParamBySecondOrganize("ProductInterface","requestType"));
this.addDict(model, "requestProtocol", paramService.getParamBySecondOrganize("ProductInterface","requestProtocol")); this.addDict(model, "requestProtocol", paramService.getParamBySecondOrganize("ProductInterface","requestProtocol"));
this.addDict(model, "limitStrategy", paramService.getParamBySecondOrganize("ProductInterface","limitStrategy")); this.addDict(model, "limitStrategy", LimitStrategyEnum.getEnumMap());
this.addDict(model, "contentType", paramService.getParamBySecondOrganize("ProductInterface","contentType")); this.addDict(model, "contentType", paramService.getParamBySecondOrganize("ProductInterface","contentType"));
this.addDict(model, "network", paramService.getParamBySecondOrganize("ProductInterface","network")); this.addDict(model, "network", paramService.getParamBySecondOrganize("ProductInterface","network"));
this.addDict(model, "interfaceTag", paramService.getParamBySecondOrganize("ProductInterface","interfaceTag")); this.addDict(model, "interfaceTag", paramService.getParamBySecondOrganize("ProductInterface","interfaceTag"));
......
package com.mortals.xhx.module.product.web;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.module.param.service.ParamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.mortals.framework.model.Context;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.module.product.model.ProductInterfaceLogEntity;
import com.mortals.xhx.module.product.service.ProductInterfaceLogService;
import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSONObject;
import java.util.Arrays;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import static com.mortals.framework.ap.SysConstains.*;
/**
*
* 产品接口
*
* @author zxfei
* @date 2023-07-18
*/
@RestController
@RequestMapping("product/interface/log")
public class ProductInterfaceLogController extends BaseCRUDJsonBodyMappingController<ProductInterfaceLogService,ProductInterfaceLogEntity,Long> {
@Autowired
private ParamService paramService;
public ProductInterfaceLogController(){
super.setModuleDesc( "产品接口");
}
@Override
protected void init(Map<String, Object> model, Context context) {
super.init(model, context);
}
}
\ No newline at end of file
###登录
POST {{baseUrl}}/login/login
Content-Type: application/json
{
"loginName":"admin",
"password":"admin",
"securityCode":"8888"
}
> {%
client.global.set("SmsSet_id", JSON.parse(response.body).data.id);
client.global.set("authToken", JSON.parse(response.body).data.token);
%}
###产品接口列表
POST {{baseUrl}}/product/interface/log/list
Content-Type: application/json
{
"page":1,
"size":10
}
###产品接口更新与保存
POST {{baseUrl}}/product/interface/log/save
Authorization: {{authToken}}
Content-Type: application/json
{
"interfaceId":62,
"requestParameters":"pb92dy",
"version":"8lkpuh",
"content":"e7kwqt",
"remark":"riyuuu",
}
> {%
client.global.set("ProductInterfaceLog_id", JSON.parse(response.body).data.id);
%}
###产品接口查看
GET {{baseUrl}}/product/interface/log/info?id={{ProductInterfaceLog_id}}
Accept: application/json
###产品接口编辑
GET {{baseUrl}}/product/interface/log/edit?id={{ProductInterfaceLog_id}}
Accept: application/json
###产品接口删除
GET {{baseUrl}}/product/interface/log/delete?id={{ProductInterfaceLog_id}}
Authorization: {{authToken}}
Accept: application/json
package com.mortals.xhx.common.code;
import java.util.LinkedHashMap;
import java.util.Map;
public enum LimitStrategyEnum {
不限流(0, "不限流"),
一万次日(1, "10000次/日"),
一千次日(2, "1000次/日"),
一百次日(3, "100次/日"),
一千次小时(4, "1000次/小时"),
一百次小时(5, "100次/小时"),
一百次分钟(6, "100次/分钟"),
十次分钟(7, "10次/分钟"),
一次分钟(8, "1次/分钟");
private Integer value;
private String desc;
LimitStrategyEnum(Integer value, String desc) {
this.value = value;
this.desc = desc;
}
public Integer getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static LimitStrategyEnum getByValue(Integer value) {
for (LimitStrategyEnum statusEnum : LimitStrategyEnum.values()) {
if (statusEnum.getValue() == value) {
return statusEnum;
}
}
return null;
}
/**
* 获取Map集合
*
* @param eItem 不包含项
* @return
*/
public static Map<String, String> getEnumMap(Integer... eItem) {
Map<String, String> resultMap = new LinkedHashMap<>();
for (LimitStrategyEnum item : LimitStrategyEnum.values()) {
try {
boolean hasE = false;
for (Integer e : eItem) {
if (item.getValue() == e) {
hasE = true;
break;
}
}
if (!hasE) {
resultMap.put(item.getValue() + "", item.getDesc());
}
} catch (Exception ex) {
}
}
return resultMap;
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment