|
@@ -1,29 +1,32 @@
|
|
|
package com.hys.app.service.kuaidiniao;
|
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.codec.Base64;
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.crypto.digest.DigestUtil;
|
|
|
import cn.hutool.http.HttpUtil;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.alipay.api.domain.UserDTO;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.hys.app.converter.erp.OrderConverter;
|
|
|
import com.hys.app.framework.context.user.AdminUserContext;
|
|
|
import com.hys.app.framework.database.BaseQueryParam;
|
|
|
import com.hys.app.framework.exception.ServiceException;
|
|
|
+import com.hys.app.framework.util.BeanUtils;
|
|
|
import com.hys.app.framework.util.ScriptUtil;
|
|
|
import com.hys.app.mapper.erp.KdnMapper;
|
|
|
+import com.hys.app.mapper.erp.WarehouseEntryMapper;
|
|
|
import com.hys.app.mapper.goods.ProductMapper;
|
|
|
import com.hys.app.model.erp.dos.*;
|
|
|
-import com.hys.app.model.erp.enums.OrderTypeEnum;
|
|
|
-import com.hys.app.model.erp.enums.SaleOrderSendStatusEnum;
|
|
|
-import com.hys.app.model.erp.enums.SaleOrderStatusEnum;
|
|
|
-import com.hys.app.service.erp.ItemSnCodeManager;
|
|
|
-import com.hys.app.service.erp.OrderManager;
|
|
|
-import com.hys.app.service.erp.OrderSendManager;
|
|
|
+import com.hys.app.model.erp.dto.StockDTO;
|
|
|
+import com.hys.app.model.erp.enums.*;
|
|
|
+import com.hys.app.service.erp.*;
|
|
|
import com.hys.app.service.kuaidiniao.entity.*;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -31,9 +34,12 @@ import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.net.URLEncoder;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
@@ -73,33 +79,31 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
|
*/
|
|
|
@Value("${kuaidianiao.kuaidi.apiUrl}")
|
|
|
private String kuaiDiUrl;
|
|
|
-
|
|
|
@Autowired
|
|
|
private OrderSendManager orderSendManager;
|
|
|
-
|
|
|
@Autowired
|
|
|
private OrderManager orderManager;
|
|
|
-
|
|
|
@Autowired
|
|
|
private OrderConverter converter;
|
|
|
-
|
|
|
@Autowired
|
|
|
- private ItemSnCodeManager itemSnCodeManager;
|
|
|
-
|
|
|
+ private KdnMapper kdnMapper;
|
|
|
@Autowired
|
|
|
- private ProductMapper productMapper;
|
|
|
-
|
|
|
+ private WarehouseEntryMapper warehouseEntryMapper;
|
|
|
@Autowired
|
|
|
- private KdnMapper kdnMapper;
|
|
|
-
|
|
|
-
|
|
|
+ private OrderSendItemManager orderSendItemManager;
|
|
|
+ @Autowired
|
|
|
+ private ProductStockManager productStockManager;
|
|
|
+ @Autowired
|
|
|
+ private LockedStockDetailManager lockedStockDetailManager;
|
|
|
private static final Logger log = LoggerFactory.getLogger(ScriptUtil.class);
|
|
|
|
|
|
|
|
|
@Override
|
|
|
public String kdShip(PreOrderModelDTO preOrderModel, Long orderId, AddressDTO addressDTO) {
|
|
|
+ preOrderModel.setOrderCode(IdUtil.fastUUID());
|
|
|
fillParam(preOrderModel);
|
|
|
- String kdnCode = sendUrl(JSONUtil.toJsonStr(preOrderModel));
|
|
|
+ PreOrderModel model = BeanUtil.copyProperties(preOrderModel, PreOrderModel.class);
|
|
|
+ String kdnCode = sendUrl(JSONUtil.toJsonStr(model));
|
|
|
if (StrUtil.isNotEmpty(kdnCode)) {
|
|
|
//如果快递鸟下单成功保存 快递信息
|
|
|
OrderSendDO aDo = orderSendManager.getById(orderId);
|
|
@@ -116,14 +120,21 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
|
|
|
|
@Override
|
|
|
public void createStore(CreateStoreModel createStoreModel, String constants) {
|
|
|
+ if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", createStoreModel.getStoreCode())){
|
|
|
+ throw new ServiceException("门店编码和统一社会信用代码不能包含中文和特殊符号");
|
|
|
+ }
|
|
|
+ if (Pattern.matches(".*[\\u4e00-\\u9fa5\\p{P}].*", createStoreModel.getCreditCode())){
|
|
|
+ throw new ServiceException("门店编码和统一社会信用代码不能包含中文和特殊符号");
|
|
|
+ }
|
|
|
Long modelId = createStoreModel.getId();
|
|
|
createStoreModel.setId(null);
|
|
|
fillParam(createStoreModel);
|
|
|
+ CreateStoreModel2 createStoreModel2 = BeanUtil.copyProperties(createStoreModel, CreateStoreModel2.class);
|
|
|
try {
|
|
|
- String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(createStoreModel) + apiKey)), "UTF-8");
|
|
|
+ String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(createStoreModel2) + apiKey)), "UTF-8");
|
|
|
System.out.println("创建店铺签名--------------------------------------" + design);
|
|
|
//拼接参数
|
|
|
- String param = "interfaceType=" + constants + "&customerCode=" + id + "&requestData=" + JSONUtil.toJsonStr(createStoreModel) + "&dataSign=" + design;
|
|
|
+ String param = "interfaceType=" + constants + "&customerCode=" + id + "&requestData=" + JSONUtil.toJsonStr(createStoreModel2) + "&dataSign=" + design;
|
|
|
//发请求
|
|
|
String res = HttpUtil.post(url, param);
|
|
|
Map map = JSON.parseObject(res, Map.class);
|
|
@@ -146,9 +157,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
|
|
|
|
@Override
|
|
|
public Page<CreateStoreModel> getStoreList(BaseQueryParam baseQueryParam) {
|
|
|
- return kdnMapper.selectPage(new Page<>(baseQueryParam.getPageNo(), baseQueryParam.getPageSize()),
|
|
|
- new LambdaQueryWrapper<CreateStoreModel>()
|
|
|
- .eq(ObjectUtil.isNotNull(AdminUserContext.getCompanyId()),CreateStoreModel::getCompanyId,AdminUserContext.getCompanyId()));
|
|
|
+ return kdnMapper.selectPage(new Page<>(baseQueryParam.getPageNo(), baseQueryParam.getPageSize()), new LambdaQueryWrapper<>());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -172,16 +181,24 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
|
switch (statusMap.get("intraCode").toString()) {
|
|
|
case "SS":
|
|
|
createStoreModel.setSsStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
|
|
|
- createStoreModel.setSsReason(statusMap.get("operationFailReason").toString());
|
|
|
+ if (ObjectUtil.isNotNull(statusMap.get("operationFailReason"))){
|
|
|
+ createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
|
|
|
+ }
|
|
|
case "DD":
|
|
|
createStoreModel.setDdStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
|
|
|
- createStoreModel.setDdReason(statusMap.get("operationFailReason").toString());
|
|
|
+ if (ObjectUtil.isNotNull(statusMap.get("operationFailReason"))){
|
|
|
+ createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
|
|
|
+ }
|
|
|
case "FN":
|
|
|
createStoreModel.setFnStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
|
|
|
- createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
|
|
|
+ if (ObjectUtil.isNotNull(statusMap.get("operationFailReason"))){
|
|
|
+ createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
|
|
|
+ }
|
|
|
case "MTPS":
|
|
|
createStoreModel.setMtStatus(Integer.parseInt(statusMap.get("storeStatus").toString()));
|
|
|
- createStoreModel.setMtReason(statusMap.get("operationFailReason").toString());
|
|
|
+ if (ObjectUtil.isNotNull(statusMap.get("operationFailReason"))){
|
|
|
+ createStoreModel.setFnReason(statusMap.get("operationFailReason").toString());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
kdnMapper.updateById(createStoreModel);
|
|
@@ -228,50 +245,56 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* @param dataJson 业务参数
|
|
|
* @return 返回JSON
|
|
|
*/
|
|
|
private String sendUrl(String dataJson) {
|
|
|
+ String design ="";
|
|
|
try {
|
|
|
- String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(dataJson + apiKey)), "UTF-8");
|
|
|
- System.out.println("--------------------------------------" + design);
|
|
|
+ design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(dataJson + apiKey)), "UTF-8");
|
|
|
+ }catch (Exception e){
|
|
|
+ throw new ServiceException("签名异常");
|
|
|
+ }
|
|
|
+ System.out.println("--------------------------------------" + design);
|
|
|
+ //拼接参数
|
|
|
+ String param = "interfaceType=" + KdConstants.preOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
|
|
|
+ //发请求
|
|
|
+ String res = HttpUtil.post(url, param);
|
|
|
+ Map map = JSON.parseObject(res, Map.class);
|
|
|
+ //resultCode == 100表示预下单成功,预下单郑工后立马调用下单接口
|
|
|
+ if (ObjectUtil.isNotNull(map.get("resultCode")) && 100 == Integer.valueOf(map.get("resultCode").toString())) {
|
|
|
//拼接参数
|
|
|
- String param = "interfaceType=" + KdConstants.preOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
|
|
|
+ String createParam = "interfaceType=" + KdConstants.createOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
|
|
|
//发请求
|
|
|
- String res = HttpUtil.post(url, param);
|
|
|
- Map map = JSON.parseObject(res, Map.class);
|
|
|
- //resultCode == 100表示预下单成功,预下单郑工后立马调用下单接口
|
|
|
- if (ObjectUtil.isNotNull(map.get("resultCode")) && 100 == Integer.valueOf(map.get("resultCode").toString())) {
|
|
|
- //拼接参数
|
|
|
- String createParam = "interfaceType=" + KdConstants.createOrder + "&customerCode=" + id + "&requestData=" + dataJson + "&dataSign=" + design;
|
|
|
- //发请求
|
|
|
- String resCreate = HttpUtil.post(url, createParam);
|
|
|
- Map mapCreate = JSON.parseObject(resCreate, Map.class);
|
|
|
- //resultCode == 100表示下单成功,预下单成功后立马调用下单接口
|
|
|
- if (ObjectUtil.isNotNull(mapCreate.get("resultCode")) && 100 == Integer.valueOf(mapCreate.get("resultCode").toString())) {
|
|
|
- Map mapData = JSON.parseObject(mapCreate.get("data").toString(), Map.class);
|
|
|
- log.info("快递鸟下单成功 单号:--------------------------------" + mapData.get("kdnOrderCode").toString());
|
|
|
- return mapData.get("kdnOrderCode").toString();
|
|
|
- }
|
|
|
- } else {
|
|
|
- throw new ServiceException(map.get("reason").toString());
|
|
|
+ String resCreate = HttpUtil.post(url, createParam);
|
|
|
+ Map mapCreate = JSON.parseObject(resCreate, Map.class);
|
|
|
+ //resultCode == 100表示下单成功,预下单成功后立马调用下单接口
|
|
|
+ if (ObjectUtil.isNotNull(mapCreate.get("resultCode")) && 100 == Integer.valueOf(mapCreate.get("resultCode").toString())) {
|
|
|
+ Map mapData = JSON.parseObject(mapCreate.get("data").toString(), Map.class);
|
|
|
+ log.info("快递鸟下单成功 单号:--------------------------------" + mapData.get("kdnOrderCode").toString());
|
|
|
+ return mapData.get("kdnOrderCode").toString();
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
-// return "1234567899";
|
|
|
- throw new ServiceException("请求快递鸟发货异常,请联系客服");
|
|
|
+ } else {
|
|
|
+ throw new ServiceException(map.get("reason").toString());
|
|
|
}
|
|
|
return null;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
- private void fillParam(PreOrderModel preOrderModel) {
|
|
|
+ private void fillParam(PreOrderModelDTO preOrderModel) {
|
|
|
+ if (preOrderModel.getAppointmentType() == 1 ){
|
|
|
+ if (LocalDateTime.now().plusHours(2).isAfter(preOrderModel.getAppointmentTime())){
|
|
|
+ throw new ServiceException("预约单必须在当前时间完后2小时");
|
|
|
+ }
|
|
|
+ }
|
|
|
//填充送货人的经纬度
|
|
|
- LongitudeLatitude longitudeLatitudeSender = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getProvinceCityAreaAddress());
|
|
|
+ LongitudeLatitude longitudeLatitudeSender = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getProvinceName()+preOrderModel.getSender().getCityName()+preOrderModel.getSender().getAreaName()+preOrderModel.getSender().getAddress());
|
|
|
preOrderModel.getSender().setLongitude(longitudeLatitudeSender.getLongitude());
|
|
|
preOrderModel.getSender().setLatitude(longitudeLatitudeSender.getLatitude());
|
|
|
//填充收货人的经纬度
|
|
|
- LongitudeLatitude longitudeLatitudeReceiver = GaoDeUtil.getLongitudeLatitude(preOrderModel.getSender().getProvinceCityAreaAddress());
|
|
|
+ LongitudeLatitude longitudeLatitudeReceiver = GaoDeUtil.getLongitudeLatitude(preOrderModel.getReceiver().getProvinceName()+preOrderModel.getReceiver().getCityName()+preOrderModel.getReceiver().getAreaName()+preOrderModel.getReceiver().getAddress());
|
|
|
preOrderModel.getReceiver().setLongitude(longitudeLatitudeReceiver.getLongitude());
|
|
|
preOrderModel.getReceiver().setLatitude(longitudeLatitudeReceiver.getLatitude());
|
|
|
//获取下单人信息
|
|
@@ -306,14 +329,20 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
|
resReturnBackBase base = new resReturnBackBase();
|
|
|
base.setKdnOrderCode(map.get("kdnOrderCode").toString());
|
|
|
//验签
|
|
|
- OrderSendDO aDo = orderSendManager.getById(Long.valueOf(map.get("orderCode").toString()));
|
|
|
+ OrderSendDO aDo = orderSendManager.getOne(new LambdaQueryWrapper<OrderSendDO>().eq(OrderSendDO::getKdnOrderCode,map.get("kdnOrderCode").toString()));
|
|
|
+ if (ObjectUtil.isNull(aDo)){
|
|
|
+// base.setRequestData("验签失败");
|
|
|
+ base.setResultCode(1002);
|
|
|
+ base.setReason("未找到对应的商家订单");
|
|
|
+ return base;
|
|
|
+ }
|
|
|
OrderDO orderDO = orderManager.getById(aDo.getOrderId());
|
|
|
// if (!checkDesign(aDo, returnBackBase.getDataSign())) {
|
|
|
// base.setRequestData("验签失败");
|
|
|
// base.setResultCode(1002);
|
|
|
// return base;
|
|
|
// }
|
|
|
- if (ObjectUtil.isNull(aDo)) {
|
|
|
+ if (ObjectUtil.isNull(aDo) || ObjectUtil.isNull(orderDO)) {
|
|
|
base.setReason("未找到对应的订单");
|
|
|
log.error("未找到对应的订单-------------------------------" + map.get("orderCode").toString());
|
|
|
base.setResultCode(1002);
|
|
@@ -345,7 +374,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
|
break;
|
|
|
case KdConstants.callBackSignRefuse:
|
|
|
aDo.setSignIn(map);
|
|
|
- aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE);
|
|
|
+ aDo.setStatus(SaleOrderSendStatusEnum.TO_BE_SINGE_NOT);
|
|
|
if (OrderTypeEnum.TO_B.equals(orderDO.getType())) {
|
|
|
orderDO.setStatus(SaleOrderStatusEnum.ORDER_END);
|
|
|
}
|
|
@@ -354,10 +383,12 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
|
}
|
|
|
break;
|
|
|
case KdConstants.callBackCancelStatus:
|
|
|
- aDo.setCancelOrderKdn(map);
|
|
|
+ //如果推送取消状态,需要重新下单
|
|
|
+ cancelKdnOrder(orderDO,aDo);
|
|
|
break;
|
|
|
case KdConstants.callBackCreateOrderFail:
|
|
|
- aDo.setCreateOrderFail(map);
|
|
|
+ //如果下单失败更爱订单状态,清空快递鸟单号,让用户可以重新下单
|
|
|
+ cancelKdnOrder(orderDO,aDo);
|
|
|
break;
|
|
|
case KdConstants.callBackFeeStatus:
|
|
|
aDo.setOrderFee(map);
|
|
@@ -367,23 +398,56 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
|
|
|
base.setReason("内部业务异常,麻烦尽快通知商家,tel:13127911751");
|
|
|
}
|
|
|
orderSendManager.updateById(aDo);
|
|
|
+ orderManager.updateById(orderDO);
|
|
|
return base;
|
|
|
}
|
|
|
|
|
|
- private Boolean checkDesign(OrderSendDO aDo, String dataSign) {
|
|
|
- try {
|
|
|
- PreOrderModel model = new PreOrderModel();
|
|
|
- converter.copyProperties(model, aDo);
|
|
|
- model.setGoodsList(aDo.getGoodsList());
|
|
|
- String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(model) + apiKey)), "UTF-8");
|
|
|
- if (dataSign.equals(design)) {
|
|
|
- return true;
|
|
|
+ private void cancelKdnOrder(OrderDO orderDO,OrderSendDO orderSendDO){
|
|
|
+ //更爱订单状态
|
|
|
+ orderDO.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
|
|
|
+ //删除有订单生成的入库单不管是不是租赁的
|
|
|
+ warehouseEntryMapper.delete(new LambdaQueryWrapper<WarehouseEntryDO>().eq(WarehouseEntryDO::getOrderId,orderDO.getId()));
|
|
|
+ //还原发货单状态
|
|
|
+ orderSendDO.setStatus(SaleOrderSendStatusEnum.TO_BE_SEND);
|
|
|
+ orderSendDO.setKdnOrderCode("");
|
|
|
+ //更改库存,增加实际库存,增加冻结库存,如果是租赁订单减少在途库存
|
|
|
+ List<OrderSendItemDO> sendItemDOS = orderSendItemManager.list(new LambdaQueryWrapper<OrderSendItemDO>().eq(OrderSendItemDO::getSendOrderId, orderSendDO.getId()));
|
|
|
+ List<ProductStockDO> productStockDOS = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, sendItemDOS.stream().map(OrderSendItemDO::getProductStockId).collect(Collectors.toList())));
|
|
|
+ for (ProductStockDO stockDO : productStockDOS) {
|
|
|
+ OrderSendItemDO orderSendItemDO = sendItemDOS.stream().filter(item -> item.getProductStockId().equals(stockDO.getId())).findFirst().get();
|
|
|
+ stockDO.setActualStock(stockDO.getActualStock() + orderSendItemDO.getNum());
|
|
|
+ stockDO.setLockedStock(stockDO.getLockedStock() + orderSendItemDO.getNum());
|
|
|
+ stockDO.setUsableStock(stockDO.getActualStock() - stockDO.getLockedStock());
|
|
|
+ if (OrderTypeEnum.TO_C.equals(orderDO.getType())) {
|
|
|
+ stockDO.setTransitStock(stockDO.getTransitStock() - orderSendItemDO.getNum());
|
|
|
}
|
|
|
- return false;
|
|
|
- } catch (Exception e) {
|
|
|
- return false;
|
|
|
}
|
|
|
+ productStockManager.updateBatchById(productStockDOS);
|
|
|
+ //更改冻结库存明细
|
|
|
+ List<LockedStockDetailDO> list = lockedStockDetailManager.list(new LambdaQueryWrapper<LockedStockDetailDO>()
|
|
|
+ .in(LockedStockDetailDO::getOrderItemId, sendItemDOS.stream().map(OrderSendItemDO::getOrderItemId).collect(Collectors.toList())));
|
|
|
+ for (LockedStockDetailDO detailDO : list) {
|
|
|
+ detailDO.setUnLockedNum(0);
|
|
|
+ detailDO.setUnLockedTime(null);
|
|
|
+ }
|
|
|
+ lockedStockDetailManager.updateBatchById(list);
|
|
|
}
|
|
|
|
|
|
|
|
|
+// private Boolean checkDesign(OrderSendDO aDo, String dataSign) {
|
|
|
+// try {
|
|
|
+// PreOrderModel model = new PreOrderModel();
|
|
|
+// converter.copyProperties(model, aDo);
|
|
|
+// model.setGoodsList(aDo.getGoodsList());
|
|
|
+// String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(model) + apiKey)), "UTF-8");
|
|
|
+// if (dataSign.equals(design)) {
|
|
|
+// return true;
|
|
|
+// }
|
|
|
+// return false;
|
|
|
+// } catch (Exception e) {
|
|
|
+// return false;
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
}
|