Commit e3ed459e by huluobin

update

parent 4b5f9d11
......@@ -9,8 +9,6 @@ import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.consumer.JwtConsumer;
import org.jose4j.jwt.consumer.JwtConsumerBuilder;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
......@@ -31,23 +29,6 @@ public class JwtUtil {
public static final String TOKEN_PREFIX = "Bearer ";
private static final String PUBLIC_KEY = "{\"kty\":\"RSA\",\"use\":\"sig\",\"kid\":\"0a968baa62e99029a973415887029fbd\",\"e\":\"AQAB\",\"n\":\"1hr9F7WGP6jpixp8kxN2E0BUB23EYiR0jSfdZQsN0ljnZfyqORK6fETVMDxDHB-ueekqieKh7UYJO3Cc3ecC2WCP7Z0KDsGcQBFJd0a9_BBktYv1rDnteJF3v43XkM1gi6gBEtXUb_l-mfpp14His6HtGH8W0v0klBOQ8UsBHDZvOHr2ns_qWPn0i6N86EUe1W47dGSy7fbms3nYQEncNFpnug6x39fJyFxpKjHS_63f2r3QRdf8UlHbjoVsHjg9sJ7pznrxDIIK8heRqH4JiutV8LhagPBVSm8UVHNwdi5IfjmVpYDirBrZDJZq7FwhyZE7ua29a3wP2I08qS9yJw\",\"alg\":\"RS256\"}";
/*
* 获取泛型类Class对象,不是泛型类则返回null
*/
public static Class<?> getActualTypeArgument(Class<?> clazz) {
Class<?> entitiClass = null;
Type genericSuperclass = clazz.getGenericSuperclass();
if (genericSuperclass instanceof ParameterizedType) {
Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass)
.getActualTypeArguments();
if (actualTypeArguments != null && actualTypeArguments.length > 0) {
entitiClass = (Class<?>) actualTypeArguments[0];
}
}
return entitiClass;
}
/**
* 功能描述: 解密Bailun Sso Token
*
......
package com.blt.other.module.auth.controller;
import com.blt.other.module.auth.vo.UserAuthMsg;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
@RestController
@RequestMapping(value = "test")
public class UserTestController {
@ApiOperation("获取用户角色信息")
@GetMapping("getAuth")
public List<UserAuthMsg> getAuth() {
String url = "http://www.bailuntec.com/api/Authorize/UserModuleAuthorize";
RestTemplate client = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("UserAccount", "符式酉");
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
ResponseEntity<String> response = client.exchange(url, HttpMethod.POST, requestEntity, String.class);
String strBody = response.getBody();
assert strBody != null;
strBody = strBody.replace("\\", "");
int dataIndex = strBody.indexOf("Data");
int i = strBody.lastIndexOf("]");
strBody = strBody.substring(dataIndex + 7, i + 1);
List<UserAuthMsg> list = null;
strBody = strBody.toLowerCase();
ObjectMapper mapper = new ObjectMapper();
// 使用 ObjectMapper 将 JSON 数据转为 List<BuyUserDomain> 类型
JavaType javaType = mapper.getTypeFactory().constructParametricType(Collection.class, UserAuthMsg.class);
try {
list = mapper.readValue(strBody, javaType);
} catch (IOException e) {
e.printStackTrace();
return null;
}
return list;
}
}
package com.blt.other.module.commons.controller;
import com.blt.other.module.commons.service.IndexService;
import com.blt.other.common.util.AxiosUtil;
import com.bailuntec.cost.api.dto.CostDto;
import com.bailuntec.cost.api.dto.CostPlanDto;
import com.blt.other.common.util.AxiosUtil;
import com.blt.other.module.commons.service.IndexService;
import com.blt.other.module.purchasing.dto.BuyPlanDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
......@@ -20,39 +20,39 @@ import java.util.Map;
@RequestMapping("/index")
public class IndexController {
@Autowired
@Resource
private IndexService indexService;
@GetMapping("/getBuyPlanList")
public Map<String,Object> getBuyPlanList(HttpServletResponse response, HttpServletRequest request){
AxiosUtil.setCors(response,request);
public Map<String, Object> getBuyPlanList(HttpServletResponse response, HttpServletRequest request) {
AxiosUtil.setCors(response, request);
String userid = request.getParameter("userid");
List<BuyPlanDto> buyPlanList = indexService.getBuyPlanList(Integer.parseInt(userid));
Map<String,Object> result = new HashMap<>();
result.put("buyPlanList",buyPlanList);
result.put("success",true);
Map<String, Object> result = new HashMap<>();
result.put("buyPlanList", buyPlanList);
result.put("success", true);
return result;
}
@GetMapping("/getCostPlanList")
public Map<String,Object> getCostPlanList(HttpServletResponse response, HttpServletRequest request){
AxiosUtil.setCors(response,request);
public Map<String, Object> getCostPlanList(HttpServletResponse response, HttpServletRequest request) {
AxiosUtil.setCors(response, request);
String userid = request.getParameter("userid");
List<CostPlanDto> costPlanDtos = indexService.getCostPlanList(Integer.parseInt(userid));
Map<String,Object> result = new HashMap<>();
result.put("costPlanList",costPlanDtos);
result.put("success",true);
Map<String, Object> result = new HashMap<>();
result.put("costPlanList", costPlanDtos);
result.put("success", true);
return result;
}
@GetMapping("/getCostList")
public Map<String,Object> getCostList(HttpServletResponse response, HttpServletRequest request){
AxiosUtil.setCors(response,request);
public Map<String, Object> getCostList(HttpServletResponse response, HttpServletRequest request) {
AxiosUtil.setCors(response, request);
String userid = request.getParameter("userid");
List<CostDto> costDtos = indexService.getCostList(Integer.parseInt(userid));
Map<String,Object> result = new HashMap<>();
result.put("costList",costDtos);
result.put("success",true);
Map<String, Object> result = new HashMap<>();
result.put("costList", costDtos);
result.put("success", true);
return result;
}
}
......@@ -8,6 +8,7 @@ import com.bailuntec.cost.api.dto.WageCostDto;
import com.bailuntec.cost.api.response.CostResult;
import com.blt.other.module.cost.model.CostDomain;
import com.blt.other.module.cost.service.CostApiService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import org.slf4j.Logger;
......@@ -24,6 +25,7 @@ import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Api(tags = "外部调用api")
@RestController
@RequestMapping("/cost/api")
public class CostApiController implements CostApi {
......
......@@ -26,7 +26,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
@Api(tags = "费用审核接口")
@Api(tags = "审核费用单接口")
@RestController
@RequestMapping("/cost/check")
public class CostCheckController {
......
......@@ -21,7 +21,7 @@ import javax.annotation.Resource;
* @author robbendev
* @since 2020-12-16
*/
@Api(tags = "费用单当前审核人接口")
@Api(tags = "当前审核人接口")
@RestController
@RequestMapping("/costCurrentReviewer")
public class CostCurrentReviewerController {
......
......@@ -2,15 +2,15 @@ package com.blt.other.module.cost.controller;
import com.blt.other.common.util.AxiosUtil;
import com.blt.other.common.util.PathUtil;
import com.blt.other.module.auth.service.UserService;
import com.blt.other.database.model.CostTypeKindDomain;
import com.blt.other.database.model.UserDomain;
import com.blt.other.module.cost.model.CostDetailDomain;
import com.blt.other.module.cost.service.CostDetailService;
import com.blt.other.module.cost.service.CostLogService;
import com.blt.other.module.cost.service.CostService;
import com.blt.other.module.cost.service.CostTypeKindService;
import com.blt.other.module.cost.utils.CostFileUtil;
import com.blt.other.database.model.CostTypeKindDomain;
import com.blt.other.database.model.UserDomain;
import com.blt.other.module.sys.service.UserService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
......@@ -30,13 +30,12 @@ import java.util.List;
import java.util.Map;
@RestController
@Api(tags = "费用详情接口")
@Api(tags = "付款单详情接口")
@RequestMapping("/cost/detail")
public class CostDetailController {
@Autowired
private CostDetailService costDetailService;
@Autowired
private CostTypeKindService costTypeKindService;
......
package com.blt.other.module.cost.controller;
import com.bailuntec.cost.api.dto.CostDto;
import com.blt.other.module.auth.service.UserService;
import com.blt.other.module.commons.dto.FinansysDetailDto;
import com.blt.other.module.commons.dto.FinansysDetailDtoData;
import com.blt.other.common.util.AxiosUtil;
import com.blt.other.common.util.CurUtils;
import com.blt.other.database.model.CostApplycallbackDomain;
import com.blt.other.database.model.UserDomain;
import com.blt.other.module.commons.dto.FinansysDetailDto;
import com.blt.other.module.commons.dto.FinansysDetailDtoData;
import com.blt.other.module.cost.model.CostDomain;
import com.blt.other.module.cost.service.CostApplycallbackService;
import com.blt.other.module.cost.service.CostLogService;
import com.blt.other.module.cost.service.CostService;
import com.blt.other.database.model.CostApplycallbackDomain;
import com.blt.other.module.cost.model.CostDomain;
import com.blt.other.database.model.UserDomain;
import com.blt.other.module.sys.service.UserService;
import io.swagger.annotations.Api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
@Api(tags = "财务信息接口")
@RestController
@RequestMapping("cost/finansys/")
public class CostFinansysDetailController {
private Logger logger = LoggerFactory.getLogger(CostFinansysDetailController.class);
@Autowired
@Resource
private CostApplycallbackService costApplycallbackService;
@Autowired
@Resource
private CostService costService;
@Autowired
@Resource
private CostLogService costLogService;
@Autowired
@Resource
private UserService userService;
@PostMapping("detail")
......
......@@ -20,6 +20,7 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
......@@ -32,12 +33,11 @@ import java.util.List;
@RequestMapping("/cost/plan")
public class CostPlanController {
@Autowired
@Resource
private CostPlanService costPlanService;
@Autowired
@Resource
private CostPlanSearchService costPlanSearchService;
@Autowired
@Resource
private CostPlanTempService costPlanTempService;
@ApiOperation("查询所有费用计划")
......
......@@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.math.BigDecimal;
@Api(tags = "费用计划接口")
@Api(tags = "付款计划详情接口")
@RestController
@RequestMapping("/cost/plan/temp")
@Slf4j
......
......@@ -11,6 +11,7 @@ import com.blt.other.module.cost.service.CostService;
import com.blt.other.module.cost.service.impl.cost.CostServiceFactory;
import com.blt.other.module.cost.vo.CostExportVo;
import com.blt.other.database.model.CostExpDomain;
import io.swagger.annotations.Api;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
......@@ -35,6 +36,7 @@ import java.util.List;
* @author robbendev
* @since 2020/12/16 1:59 下午
*/
@Api(tags = "报表接口")
@RestController
public class CostReportController {
......
......@@ -20,7 +20,7 @@ import java.util.List;
* @author robbendev
* @since 2020-10-14
*/
@Api(tags = "费用单模版字段接口")
@Api(tags = "模版字段接口")
@RestController
@RequestMapping("/costTemplateCol")
public class CostTemplateColController {
......
......@@ -20,7 +20,7 @@ import java.util.List;
* @author robbendev
* @since 2020-10-14
*/
@Api(tags = "费用单模版接口")
@Api(tags = "模版接口")
@RestController
@RequestMapping("/costTemplate")
public class CostTemplateController {
......
......@@ -19,7 +19,7 @@ import java.util.HashMap;
import java.util.Map;
@Slf4j
@Api(tags = "费用类型接口")
@Api(tags = "类型接口")
@RestController
@RequestMapping("/cost/type")
public class CostTypeController {
......
......@@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
......@@ -23,7 +24,7 @@ import java.util.Map;
@RequestMapping("user/cost/finansys")
public class UserCostFinansysController {
@Autowired
@Resource
private UserCostFinansysService userCostFinansysService;
@PostMapping("/getFinansysRecord")
......
package com.blt.other.module.cost.dao;
import com.blt.other.module.cost.dto.request.SpecDepartmentCheckExportExcelReq;
import com.blt.other.module.cost.model.SpecDepartmentCheckConfig;
import com.blt.other.module.sys.model.SpecDepartmentCheckConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* Mapper 接口
......
......@@ -19,7 +19,7 @@ import com.blt.other.module.auth.dao.OaDepartmentMapper;
import com.blt.other.module.auth.dao.OaUserMapper;
import com.blt.other.module.auth.model.OaDepartment;
import com.blt.other.module.auth.model.OaUser;
import com.blt.other.module.auth.service.UserService;
import com.blt.other.module.sys.service.UserService;
import com.blt.other.module.cost.dao.*;
import com.blt.other.module.cost.dto.request.CheckCostListReq;
import com.blt.other.module.cost.dto.response.CostPageResult;
......@@ -235,9 +235,6 @@ public abstract class AbstractCostService implements CostService {
costDomain.setAmountRmb(costDomain.getAmount().multiply(toRmbRate).setScale(2, BigDecimal.ROUND_HALF_UP));
costDomain.setKindNo(costDetailDomains.get(0).getKindNo());
costDomain.setKindName(costDetailDomains.get(0).getKindName());
costDomain.setTypeNo(costDetailDomains.get(0).getTypeNo());
costDomain.setTypeName(costDetailDomains.get(0).getTypeName());
......
......@@ -3,7 +3,7 @@ package com.blt.other.module.cost.service.impl.costtemplate;
import com.bailuntec.common.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.blt.other.module.auth.service.UserService;
import com.blt.other.module.sys.service.UserService;
import com.blt.other.module.cost.dao.CostTemplateMapper;
import com.blt.other.module.cost.dto.request.QueryListReq;
import com.blt.other.module.cost.model.CostTemplate;
......
......@@ -8,6 +8,7 @@ import com.blt.other.module.sys.dto.request.DepartmentReviewerListReq;
import com.blt.other.module.sys.dto.request.ModifyDepartmentReviewerReq;
import com.blt.other.module.sys.dto.response.DepartmentReviewerListItem;
import com.blt.other.module.sys.service.IDepartmentReviewerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -24,6 +25,7 @@ import javax.annotation.Resource;
* @author robbendev
* @since 2020-12-21
*/
@Api(tags = "部门审核配置")
@RestController
@RequestMapping("/departmentReviewer")
public class DepartmentReviewerController {
......
package com.blt.other.module.cost.controller;
package com.blt.other.module.sys.controller;
import com.bailuntec.cost.api.response.CostResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.blt.other.module.cost.dto.request.*;
import com.blt.other.module.cost.model.SpecDepartmentCheckConfig;
import com.blt.other.module.cost.service.ISpecDepartmentCheckConfigService;
import com.blt.other.module.sys.model.SpecDepartmentCheckConfig;
import com.blt.other.module.sys.service.ISpecDepartmentCheckConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
......
package com.blt.other.module.auth.controller;
package com.blt.other.module.sys.controller;
import com.bailuntec.cost.api.response.CostResult;
import com.blt.other.common.config.property.CostUrlProperties;
import com.blt.other.common.util.AxiosUtil;
import com.blt.other.module.auth.service.UserService;
import com.blt.other.database.model.BuyUserDomain;
import com.blt.other.database.model.UserDomain;
import com.blt.other.module.sys.service.UserService;
import com.blt.other.module.auth.service.UserSyncService;
import com.blt.other.module.auth.vo.GetByBLUserAcct;
import com.blt.other.module.auth.vo.UserGetByBLUserAcct;
import com.blt.other.database.model.BuyUserDomain;
import com.blt.other.database.model.UserDomain;
import com.blt.other.module.supplier.service.BuyUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -33,23 +33,22 @@ public class UserController {
private static Logger logger = LoggerFactory.getLogger(UserController.class);
@Autowired
@Resource
private UserService userService;
@Autowired
@Resource
private UserSyncService userSyncService;
@Autowired
private BuyUserService buyUserService;
@PostMapping("getOne")
public UserDomain getOneByuserCode(@RequestParam String usercode) {
UserDomain user = userService.findOne(usercode);
return user;
return userService.findOne(usercode);
}
@GetMapping("/getAllUser")
public List<UserDomain> getAllUser(HttpServletResponse response, HttpServletRequest request) {
public List<UserDomain> getAllUser(HttpServletResponse response,
HttpServletRequest request) {
List<UserDomain> allUser = userService.findAllUser();
return allUser;
}
......@@ -207,6 +206,7 @@ public class UserController {
@Resource
CostUrlProperties costUrlProperties;
private void delCookie(HttpServletResponse response) {
Cookie baiLunLoginUserKey = new Cookie("BaiLunLoginUserKey", "baiLunLoginUserKey");
baiLunLoginUserKey.setPath("/");
......
package com.blt.other.module.cost.model;
package com.blt.other.module.sys.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
......
package com.blt.other.module.cost.service;
package com.blt.other.module.sys.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.blt.other.module.cost.dto.request.*;
import com.blt.other.module.cost.model.SpecDepartmentCheckConfig;
import com.blt.other.module.sys.model.SpecDepartmentCheckConfig;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
/**
* <p>
......
package com.blt.other.module.auth.service;
package com.blt.other.module.sys.service;
import com.blt.other.module.auth.vo.UserGetByBLUserAcct;
import com.blt.other.database.model.UserDomain;
......
package com.blt.other.module.cost.service.impl;
package com.blt.other.module.sys.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.annotation.ExcelProperty;
......@@ -14,9 +14,9 @@ import com.blt.other.module.auth.model.OaUser;
import com.blt.other.module.auth.service.IOaCompanyService;
import com.blt.other.module.cost.dao.SpecDepartmentCheckConfigMapper;
import com.blt.other.module.cost.dto.request.*;
import com.blt.other.module.cost.model.SpecDepartmentCheckConfig;
import com.blt.other.module.sys.model.SpecDepartmentCheckConfig;
import com.blt.other.module.cost.service.CostCompanyService;
import com.blt.other.module.cost.service.ISpecDepartmentCheckConfigService;
import com.blt.other.module.sys.service.ISpecDepartmentCheckConfigService;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.slf4j.Logger;
......
package com.blt.other.module.auth.service.impl;
package com.blt.other.module.sys.service.impl;
import com.blt.other.module.auth.dao.UserDao;
import com.blt.other.module.auth.service.UserService;
import com.blt.other.module.sys.service.UserService;
import com.blt.other.module.auth.vo.UserGetByBLUserAcct;
import com.blt.other.database.model.UserDomain;
import org.slf4j.Logger;
......
......@@ -2,5 +2,5 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.blt.other.module.cost.dao.SpecDepartmentCheckConfigMapper">
<select id="exportExcel" resultType="com.blt.other.module.cost.model.SpecDepartmentCheckConfig"></select>
<select id="exportExcel" resultType="com.blt.other.module.sys.model.SpecDepartmentCheckConfig"></select>
</mapper>
......@@ -4,6 +4,7 @@ import com.bailuntec.api.bailuntec.cw.request.ApplyMoneyDetail;
import com.bailuntec.api.bailuntec.cw.request.PostApplyReq;
import com.bailuntec.common.JsonUtilByFsJson;
import com.blt.other.common.config.property.CostUrlProperties;
import com.blt.other.database.model.CostCompanyDomain;
import com.blt.other.module.cost.dao.CostCompanyDao;
import com.blt.other.module.cost.dao.CostDao;
import com.blt.other.module.cost.model.CostDomain;
......@@ -11,7 +12,6 @@ import com.blt.other.module.cost.vo.CashierCallbackUrlDataDataVo;
import com.blt.other.module.cost.vo.CashierCallbackUrlDataVo;
import com.blt.other.module.cost.vo.CashierCallbackUrlVo;
import com.blt.other.module.cost.vo.Paydetail;
import com.blt.other.database.model.CostCompanyDomain;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
......@@ -155,9 +155,5 @@ class AbstractCostServiceTest {
void cashierCallbackPass() {
}
@Test
void resetCost() {
CostService costService = CostServiceFactory.getCostService();
costService.resetCost("F016523");
}
}
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