Commit 1b4b29f9 authored by Vladimir Kolmakov's avatar Vladimir Kolmakov
Browse files

fix code-style: added comments, toString, logging, try/catch

parent d231ffb9
Showing with 214 additions and 120 deletions
+214 -120
......@@ -12,13 +12,19 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Вспомогательный класс для создания многократно используемых частей запросов к другим API.
* Переиспользуемые объекты конструируются по заданным в config.properties значениям.
*/
@Component
public class OrderSettings {
//configurable order requisites
private String mainOrderType;
private String ingosContragentCode;
private String ingosContragentName;
private String ingosCityCode;
//простые настраиваемые реквизиты запросов создания/удаления накладных и вычисления стоимости
private String mainOrderType; //тип заказа
private String ingosContragentCode; //код контрагента Ингосстраха
private String ingosContragentName; //название контрагента Ингосстраха
private String ingosCityCode; //код (по справочнику) города отправляющего офиса Ингосстраха
//адрес и контакты отправляющего офиса Ингосстраха
private String ingosPhoneType;
private String ingosPhoneNumber;
private String ingosContactPersonName;
......@@ -26,24 +32,29 @@ public class OrderSettings {
private String ingosContactPersonAddressHouse;
private String ingosContactPersonAddressFlat;
private String ingosContactPersonAddressAddressType;
private String clientPhoneType;
private String clientPhoneType; //тип телефона клиента
private String clientContactPersonAddressAddressType;
private String payerPayType;
//параметры груза
private String cargoPlaceDescription;
private String cargoPlacePackNumber;
private String cargoPlaceWidth;
private String cargoPlaceHeight;
private String cargoPlaceLength;
private String cargoPlaceWeight;
private String servicesTariffCode;
private String calcApiVersion;
//--common complex order requisites
private SenderDto ingosSender;
private ReceiverDto ingosReceiver;
private CargoDto cargo;
private ServicesDto services;
private List<PlaceDto> calcApiGoods;
private String servicesTariffCode; //код используемого тарифа
private String calcApiVersion; //версия api внешнего калькулятора
//"сложные" реквизиты, собираемые из простых, используемые непосредственно в конструировании запросов к другим API
private SenderDto ingosSender; //Ингосстрах как отправитель
private ReceiverDto ingosReceiver; //Ингосстрах как получатель
private CargoDto cargo; //параметры груза для создания накладной
private ServicesDto services; //параметры сервиса доставки для создания накладной
private List<PlaceDto> calcApiGoods; //параметры груза для калькулятора
/**
* Создание "сложных" объектов на основе простых config.properties:
* SenderDto, ReceiverDto, CargoDto, ServicesDto, List<PlaceDto>
*/
public void initSettings() {
initIngos();
initCommonCargo();
......@@ -112,6 +123,11 @@ public class OrderSettings {
services.setTariffs(tariffs);
}
/**
* Создание общего OrderDto объекта для создания накладной и заполнение его общими параметрами из конфигурации.
* В дальнейшем должен быть дозаполнен параметрами из запроса.
* @return
*/
public OrderDto prepareCommonOrderDto() {
OrderDto orderDto = new OrderDto();
orderDto.setCargo(cargo);
......@@ -126,6 +142,12 @@ public class OrderSettings {
return orderDto;
}
/**
* Добавление клиентской информации из request в orderDto как Получателя.
* Используется для создания прямой накладной.
* @param orderDto
* @param request
*/
public void setClientAsReceiver(OrderDto orderDto, JSOrderCreateRequest request) {
orderDto.getPayer().setType("receiver");
ReceiverDto clientReceiver = new ReceiverDto();
......@@ -136,6 +158,12 @@ public class OrderSettings {
orderDto.setReceiver(clientReceiver);
}
/**
* Добавление клиентской информации из request в orderDto как Отправителя.
* Используется для создания обратной накладной.
* @param orderDto
* @param request
*/
public void setClientAsSender(OrderDto orderDto, JSOrderCreateRequest request) {
orderDto.getPayer().setType("sender");
SenderDto clientSender = new SenderDto();
......
......@@ -16,19 +16,28 @@ import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.TreeMap;
/**
* Вспомогательный класс для создания параметров запроса к Платрон-API.
* Параметры заполняются по заданным в config.properties значениям.
*/
@Component
public class PaymentSettings {
private static final Logger LOG = LoggerFactory.getLogger(PaymentSettings.class);
private static final String SEPARATOR = ";";
private String encoding;
private String merchantId;
//настройки платежей Платрон из config.properties
private String encoding; //кодировка
private String merchantId; //код СДЭКа в системе Платрон
private String secretKey;
private String initScript;
private String checkScript;
private String testingMode;
private String orderPrefix;
private String initScript; //название скрипта инициализации платежа
private String checkScript; //название скрипта проверки статуса платежа
private String testingMode; //флаг использования тестовых транзацкий в Платроне
private String orderPrefix; //префикс к номеру заказа в платежах Платрона
private String paymentType;
/**
* Ссылка, куда Платрон должен перенаправить пользователя в случае успеха оплаты.
* На тестовых транзакциях перенаправление пользователя проверить не удалось.
*/
private String paymentSuccessUrl;
private MessageDigest messageDigest;
......@@ -37,7 +46,12 @@ public class PaymentSettings {
messageDigest = MessageDigest.getInstance("MD5");
}
public Map<String,String> getPaymentInitParams(IngosOrder order) throws UnsupportedEncodingException {
/**
* Создание и заполнение параметров для запроса инициализации платежа
* @param order
* @return
*/
public Map<String,String> getPaymentInitParams(IngosOrder order) {
Map<String,String> initParams = new TreeMap<>();
String salt = createSalt();
String orderDesc = orderPrefix + " " + order.getOrderNumber();
......@@ -60,7 +74,12 @@ public class PaymentSettings {
return initParams;
}
public Map<String,String> getPaymentCheckParams(String orderNumber) throws UnsupportedEncodingException {
/**
* Создание и заполнение параметров для запроса проверки статуса платежа
* @param orderNumber
* @return
*/
public Map<String,String> getPaymentCheckParams(String orderNumber) {
Map<String,String> checkParams = new TreeMap<>();
String salt = createSalt();
String orderDesc = orderPrefix + " " + orderNumber;
......@@ -71,13 +90,30 @@ public class PaymentSettings {
return checkParams;
}
private String createSign(String scriptName, Map<String,String> params) throws UnsupportedEncodingException {
/**
* Создание md5 в виде шестнадцатеричной строки в нижнем регистре (32 символа)
* @param scriptName
* @param params
* @return
*/
private String createSign(String scriptName, Map<String,String> params) {
String message = scriptName + SEPARATOR + StringUtils.join(params.values(), SEPARATOR) + SEPARATOR + secretKey;
byte[] bytesOfMessage = message.getBytes("UTF-8");
byte[] md5 = messageDigest.digest(bytesOfMessage);
return String.format("%0" + (md5.length << 1) + "x", new BigInteger(1, md5));
byte[] bytesOfMessage = new byte[0];
String sign = "";
try {
bytesOfMessage = message.getBytes("UTF-8");
byte[] md5 = messageDigest.digest(bytesOfMessage);
sign = String.format("%0" + (md5.length << 1) + "x", new BigInteger(1, md5));
} catch (UnsupportedEncodingException e) {
LOG.error("Cannot getBytes of message [" + message + "]. Reason[" + e.getClass() + "]: " + e.getMessage());
}
return sign;
}
/**
* Генерация параметра pg_salt к Платрон (случайная строка из произвольного количества цифр и латинских букв)
* @return String
*/
private String createSalt() {
return RandomStringUtils.randomAlphanumeric(6,19);
}
......
......@@ -14,6 +14,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Контроллер для обработки запросов к справочнику городов
*/
@Controller
@RequestMapping(value = "/city")
public class CityController extends ControllerAdvice {
......
......@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Контроллер для фронта
* Контроллер маппинга страниц фронта
*/
@Controller
public class FrontController extends ControllerAdvice {
......
......@@ -14,12 +14,10 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.xml.bind.JAXBException;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
* Контроллер для создания/получения/проверки/оплаты/удаления заказов.
* Контроллер для обработки запросов создания/получения/проверки/оплаты/удаления заказов.
*/
@Controller
@RequestMapping(value = "/order")
......@@ -65,7 +63,7 @@ public class OrderController extends ControllerAdvice {
}
@RequestMapping("/get")
public @ResponseBody JSOrderGetResponse addOrder(@RequestBody JSSelfCareAuth request) throws UnsupportedEncodingException, JAXBException {
public @ResponseBody JSOrderGetResponse addOrder(@RequestBody JSSelfCareAuth request) {
LOG.info("Request /order/get: " + JSONUtil.toJSON(request));
JSOrderGetResponse response = orderService.getOrders(request);
LOG.info("Response /order/get: " + JSONUtil.toJSON(response));
......@@ -73,8 +71,7 @@ public class OrderController extends ControllerAdvice {
}
@RequestMapping("/initPayment")
public @ResponseBody JSWithItemResponse<String> initPayment(@RequestBody JSPaymentInitRequest request)
throws UnsupportedEncodingException, JAXBException {
public @ResponseBody JSWithItemResponse<String> initPayment(@RequestBody JSPaymentInitRequest request) {
LOG.info("Request /order/initPayment: " + JSONUtil.toJSON(request));
JSWithItemResponse<String> response = new JSWithItemResponse<>();
response.setItem(orderService.initPayment(request));
......@@ -83,8 +80,7 @@ public class OrderController extends ControllerAdvice {
}
@RequestMapping("/checkPayments")
public @ResponseBody JSWithItemResponse<List<JSHistoryItemDto>> checkPayments(@RequestBody JSPaymentCheckRequest request)
throws UnsupportedEncodingException, JAXBException {
public @ResponseBody JSWithItemResponse<List<JSHistoryItemDto>> checkPayments(@RequestBody JSPaymentCheckRequest request) {
LOG.info("Request /order/checkPayments: " + JSONUtil.toJSON(request));
List<JSHistoryItemDto> result = orderService.checkPayments(request);
JSWithItemResponse<List<JSHistoryItemDto>> response = new JSWithItemResponse<>();
......
......@@ -12,14 +12,12 @@ public interface CityDAO {
/**
* Поиск всех городов
*
* @return
*/
List<JSCodeName> findAll();
/**
* Поиск городов по фильтру
*
* @param filter
* @return
*/
......@@ -31,5 +29,4 @@ public interface CityDAO {
* @return
*/
JSCodeName findByCode(String code);
}
......@@ -7,14 +7,55 @@ import java.util.List;
import java.util.UUID;
/**
* ДАО для заказов
* ДАО для локальных заказов заказов
*/
public interface OrderDAO {
/**
* Вставка нового заказа
* @param order
*/
void insert (IngosOrder order);
/**
* Обновление статуса заказа
* @param orderNumber
* @param status
*/
void updateStatus (String orderNumber, Integer status);
/**
* Удаление заказа
* @param id
*/
void delete (UUID id);
/**
* Поиск заказа по id
* @param id
* @return
*/
IngosOrder getById(UUID id);
/**
* Получение активных заказов контрагента для формы заказа
* Активный заказ - заказ, оплата которого ещё не подтверждена (status!=2)
* @param contragentCode
* @return
*/
List<IngosOrder> getActiveOrdersByContragent(String contragentCode);
/**
* Получение завершённых заказов контрагента для таблицы истории заказов
* Завершённый заказ - заказ, оплата которого подтверждена (status=2)
* @param contragentCode
* @return
*/
List<JSHistoryItemDto> getFinishedOrdersByContragent(String contragentCode);
/**
* Получение статусов оплат накладных по списку номеров (для работников Ингосстраха)
* @param orderNumbers
* @return
*/
List<JSHistoryItemDto> getOrdersStatusByNumberList(List<String> orderNumbers);
}
......@@ -14,11 +14,10 @@ public class CityDAOImpl implements CityDAO {
private CityMapper cityMapper;
public CityDAOImpl() {
}
public CityDAOImpl() {
}
public CityDAOImpl(CityMapper mapper) {
public CityDAOImpl(CityMapper mapper) {
this.cityMapper = mapper;
}
......
......@@ -8,15 +8,17 @@ import com.cdek.ingos.web.model.IngosOrder;
import java.util.List;
import java.util.UUID;
/**
* Имплементация {@link OrderDAO}
*/
public class OrderDAOImpl implements OrderDAO {
private OrderMapper orderMapper;
public OrderDAOImpl() {
}
public OrderDAOImpl() {
}
public OrderDAOImpl(OrderMapper mapper) {
public OrderDAOImpl(OrderMapper mapper) {
this.orderMapper = mapper;
}
......
......@@ -6,7 +6,7 @@ import com.cdek.commons.js.JSCodeName;
import java.util.List;
/**
* SQL операции для города
* Маппер MyBatis. SQL операции для городов
*/
public interface CityMapper {
......
......@@ -8,7 +8,7 @@ import java.util.List;
import java.util.UUID;
/**
* SQL операции для локально сохраняемых заказов (IngosOrder)
* Маппер MyBatis. SQL операции для локально сохраняемых заказов (IngosOrder)
*/
public interface OrderMapper {
void insert (IngosOrder order);
......
......@@ -21,12 +21,6 @@ public class JSCalcRequest extends JSOrderRequest {
private List<PlaceDto> goods;
private String contractNumber;
@Override
public String toString() {
return StringHlp.concat("JSCalcRequest", " {", ", version=", version, ", senderCityId=", senderCityId, ", receiverCityId=", receiverCityId,
", tariffId=", tariffId, ", goods=", goods, ", contractNumber=", contractNumber,"} ", super.toString());
}
public String getVersion() {
return version;
}
......@@ -74,4 +68,10 @@ public class JSCalcRequest extends JSOrderRequest {
public void setContractNumber(String contractNumber) {
this.contractNumber = contractNumber;
}
@Override
public String toString() {
return StringHlp.concat("JSCalcRequest", " {", ", version=", version, ", senderCityId=", senderCityId, ", receiverCityId=", receiverCityId,
", tariffId=", tariffId, ", goods=", goods, ", contractNumber=", contractNumber,"} ", super.toString());
}
}
......@@ -18,11 +18,6 @@ public class JSCalcResponse {
private JSCalcResult result;
private List<JSApiError> error;
@Override
public String toString() {
return StringHlp.concat("JSCalcResponse", " {", "result=", result, ", error=", error, "}");
}
public JSCalcResult getResult() {
return result;
}
......@@ -38,4 +33,9 @@ public class JSCalcResponse {
public void setError(List<JSApiError> error) {
this.error = error;
}
@Override
public String toString() {
return StringHlp.concat("JSCalcResponse", " {", "result=", result, ", error=", error, "}");
}
}
......@@ -16,12 +16,6 @@ public class JSCalcResult {
private String tariffId;
private String currency;
@Override
public String toString() {
return StringHlp.concat("JSCalcResult", " {",
"price=", price, ", tariffId=", tariffId, ", currency=", currency, "}");
}
public String getPrice() {
return price;
}
......@@ -45,4 +39,10 @@ public class JSCalcResult {
public void setCurrency(String currency) {
this.currency = currency;
}
@Override
public String toString() {
return StringHlp.concat("JSCalcResult", " {",
"price=", price, ", tariffId=", tariffId, ", currency=", currency, "}");
}
}
......@@ -16,15 +16,6 @@ public class JSHistoryItemDto {
private String orderDate;
private Integer status;
public JSHistoryItemDto() {
}
@Override
public String toString() {
return StringHlp.concat("JSOrderCreateResponse", " {",
"orderNumber=", orderNumber, ", orderDate=", orderDate, ", status=", status, "}");
}
public String getOrderNumber() {
return orderNumber;
}
......@@ -48,4 +39,10 @@ public class JSHistoryItemDto {
public void setStatus(Integer status) {
this.status = status;
}
@Override
public String toString() {
return StringHlp.concat("JSOrderCreateResponse", " {",
"orderNumber=", orderNumber, ", orderDate=", orderDate, ", status=", status, "}");
}
}
......@@ -22,16 +22,6 @@ public class JSOrderCreateRequest extends JSOrderRequest {
private Boolean withBack;
private String backTotalAmount;
public JSOrderCreateRequest() {
}
@Override
public String toString() {
return StringHlp.concat("JSOrderCreateRequest", " {", ", contragentCode=", contragentCode, ", contragentName=", contragentName,
", phoneNumber=", phoneNumber, ", cityCode=", cityCode, ", street=", street, ", house=", house, ", flat=", flat,
", mainTotalAmount=", mainTotalAmount, ", withBack=", withBack, ", backTotalAmount=", backTotalAmount, "} ", super.toString());
}
public String getContragentCode() {
return contragentCode;
}
......@@ -111,4 +101,11 @@ public class JSOrderCreateRequest extends JSOrderRequest {
public void setBackTotalAmount(String backTotalAmount) {
this.backTotalAmount = backTotalAmount;
}
@Override
public String toString() {
return StringHlp.concat("JSOrderCreateRequest", " {", ", contragentCode=", contragentCode, ", contragentName=", contragentName,
", phoneNumber=", phoneNumber, ", cityCode=", cityCode, ", street=", street, ", house=", house, ", flat=", flat,
", mainTotalAmount=", mainTotalAmount, ", withBack=", withBack, ", backTotalAmount=", backTotalAmount, "} ", super.toString());
}
}
......@@ -27,16 +27,6 @@ public class JSOrderCreateResponse {
@JsonDeserialize(using = JsonDateDeserializer.class)
private Date backOrderDate;
public JSOrderCreateResponse() {
}
@Override
public String toString() {
return StringHlp.concat("JSOrderCreateResponse", " {",
"mainOrderId=", mainOrderId, ", mainOrderNumber=", mainOrderNumber.toString(), ", mainOrderDate=", mainOrderDate,
", backOrderId=", backOrderId, ", backOrderNumber=", backOrderNumber.toString(), ", backOrderDate=", backOrderDate, "}");
}
public UUID getMainOrderId() {
return mainOrderId;
}
......@@ -84,4 +74,11 @@ public class JSOrderCreateResponse {
public void setBackOrderDate(Date backOrderDate) {
this.backOrderDate = backOrderDate;
}
@Override
public String toString() {
return StringHlp.concat("JSOrderCreateResponse", " {",
"mainOrderId=", mainOrderId, ", mainOrderNumber=", mainOrderNumber.toString(), ", mainOrderDate=", mainOrderDate,
", backOrderId=", backOrderId, ", backOrderNumber=", backOrderNumber.toString(), ", backOrderDate=", backOrderDate, "}");
}
}
......@@ -18,16 +18,6 @@ public class JSOrderDeleteRequest extends JSOrderRequest {
private UUID backOrderId;
private String backOrderNumber;
public JSOrderDeleteRequest() {
}
@Override
public String toString() {
return StringHlp.concat("JSOrderDeleteRequest", " {",
"mainOrderId=", mainOrderId.toString(), ", mainOrderNumber=", mainOrderNumber,
", backOrderId=", backOrderId.toString(), ", backOrderNumber=", backOrderNumber, "} ", super.toString());
}
public UUID getMainOrderId() {
return mainOrderId;
}
......@@ -59,4 +49,11 @@ public class JSOrderDeleteRequest extends JSOrderRequest {
public void setBackOrderNumber(String backOrderNumber) {
this.backOrderNumber = backOrderNumber;
}
@Override
public String toString() {
return StringHlp.concat("JSOrderDeleteRequest", " {",
"mainOrderId=", mainOrderId.toString(), ", mainOrderNumber=", mainOrderNumber,
", backOrderId=", backOrderId.toString(), ", backOrderNumber=", backOrderNumber, "} ", super.toString());
}
}
......@@ -46,20 +46,6 @@ public class JSOrderGetResponse {
private String senderCityName;
private List<JSHistoryItemDto> history;
public JSOrderGetResponse() {
}
@Override
public String toString() {
return StringHlp.concat("JSOrderGetRequest", " {", "contragentCode=", contragentCode, ", contragentName=", contragentName, ", contractNumber=", contractNumber,
", phoneNumber=", phoneNumber, ", city=", city, ", street=", street, ", house=", house, ", flat=", flat,
", mainOrderId=", mainOrderId, ", mainOrderNumber=", mainOrderNumber, ", mainOrderDate=", mainOrderDate,
", mainOrderStatus=", mainOrderStatus, ", mainTotalAmount=", mainTotalAmount, ", withBack=", withBack,
", backOrderId=", backOrderId, ", backOrderNumber=", backOrderNumber, ", backOrderDate=", backOrderDate,
", backOrderStatus=", backOrderStatus,", backTotalAmount=", backTotalAmount, ", history=", history,
", senderName=", senderName, ", senderCityName=", senderCityName, ", senderCityCode=", senderCityCode,"}");
}
public String getContragentCode() {
return contragentCode;
}
......@@ -243,4 +229,15 @@ public class JSOrderGetResponse {
public void setSenderCityCode(String senderCityCode) {
this.senderCityCode = senderCityCode;
}
@Override
public String toString() {
return StringHlp.concat("JSOrderGetRequest", " {", "contragentCode=", contragentCode, ", contragentName=", contragentName, ", contractNumber=", contractNumber,
", phoneNumber=", phoneNumber, ", city=", city, ", street=", street, ", house=", house, ", flat=", flat,
", mainOrderId=", mainOrderId, ", mainOrderNumber=", mainOrderNumber, ", mainOrderDate=", mainOrderDate,
", mainOrderStatus=", mainOrderStatus, ", mainTotalAmount=", mainTotalAmount, ", withBack=", withBack,
", backOrderId=", backOrderId, ", backOrderNumber=", backOrderNumber, ", backOrderDate=", backOrderDate,
", backOrderStatus=", backOrderStatus,", backTotalAmount=", backTotalAmount, ", history=", history,
", senderName=", senderName, ", senderCityName=", senderCityName, ", senderCityCode=", senderCityCode,"}");
}
}
package com.cdek.ingos.web.dto;
import com.cdek.ingos.web.util.StringHlp;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@JsonSerialize
......@@ -17,4 +18,9 @@ public class JSOrderNumberResponse {
public void setPool(String[] pool) {
this.pool = pool;
}
@Override
public String toString() {
return StringHlp.concat("JSOrderNumberResponse", " {", "pool=", pool, "}");
}
}
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