📄 valuelinkservices.java
字号:
if (currency == null) {
currency = UtilProperties.getPropertyValue("general.properties", "currency.uom.id.default", "USD");
}
Map redeemCtx = new HashMap();
redeemCtx.put("userLogin", userLogin);
redeemCtx.put("paymentConfig", paymentConfig);
redeemCtx.put("cardNumber", giftCard.get("cardNumber"));
redeemCtx.put("pin", giftCard.get("pinNumber"));
redeemCtx.put("currency", currency);
redeemCtx.put("orderId", orderId);
redeemCtx.put("amount", amount);
// invoke the void redeem service
Map redeemResult = null;
try {
redeemResult = dispatcher.runSync("voidRedeemGiftCard", redeemCtx);
} catch (GenericServiceException e) {
Debug.logError(e, "Problem calling the redeem service", module);
return ServiceUtil.returnError("Redeem service failed");
}
Map result = ServiceUtil.returnSuccess();
if (redeemResult != null) {
Boolean processResult = (Boolean) redeemResult.get("processResult");
result.put("releaseAmount", redeemResult.get("amount"));
result.put("releaseFlag", redeemResult.get("responseCode"));
result.put("releaseResult", processResult);
result.put("releaseCode", redeemResult.get("authCode"));
result.put("releaseRefNum", redeemResult.get("referenceNum"));
}
return result;
}
public static Map giftCardRefund(DispatchContext dctx, Map context) {
LocalDispatcher dispatcher = dctx.getDispatcher();
GenericValue userLogin = (GenericValue) context.get("userLogin");
GenericValue paymentPref = (GenericValue) context.get("orderPaymentPreference");
String paymentConfig = (String) context.get("paymentConfig");
String currency = (String) context.get("currency");
Double amount = (Double) context.get("refundAmount");
// get the orderId for tracking
String orderId = paymentPref.getString("orderId");
// get the GiftCard VO
GenericValue giftCard = null;
try {
giftCard = paymentPref.getRelatedOne("GiftCard");
} catch (GenericEntityException e) {
Debug.logError("Unable to get GiftCard from OrderPaymentPreference", module);
return ServiceUtil.returnError("Unable to locate GiftCard Information");
}
if (giftCard == null) {
return ServiceUtil.returnError("Attempt to release GiftCard payment faild; not a valid GiftCard record");
}
// make sure we have a currency
if (currency == null) {
currency = UtilProperties.getPropertyValue("general.properties", "currency.uom.id.default", "USD");
}
Map refundCtx = new HashMap();
refundCtx.put("userLogin", userLogin);
refundCtx.put("paymentConfig", paymentConfig);
refundCtx.put("cardNumber", giftCard.get("cardNumber"));
refundCtx.put("pin", giftCard.get("pinNumber"));
refundCtx.put("currency", currency);
refundCtx.put("orderId", orderId);
refundCtx.put("amount", amount);
// invoke the refund service
Map redeemResult = null;
try {
redeemResult = dispatcher.runSync("refundGiftCard", refundCtx);
} catch (GenericServiceException e) {
Debug.logError(e, "Problem calling the refund service", module);
return ServiceUtil.returnError("Refund service failed");
}
Map result = ServiceUtil.returnSuccess();
if (redeemResult != null) {
Boolean processResult = (Boolean) redeemResult.get("processResult");
result.put("refundAmount", redeemResult.get("amount"));
result.put("refundFlag", redeemResult.get("responseCode"));
result.put("refundResult", processResult);
result.put("refundCode", redeemResult.get("authCode"));
result.put("refundRefNum", redeemResult.get("referenceNum"));
}
return result;
}
// item fulfillment wrappers (purchase/reload)
public static Map giftCardPurchase(DispatchContext dctx, Map context) {
// this service should always be called via FULFILLMENT_EXTASYNC
LocalDispatcher dispatcher = dctx.getDispatcher();
GenericDelegator delegator = dctx.getDelegator();
GenericValue userLogin = (GenericValue) context.get("userLogin");
GenericValue orderItem = (GenericValue) context.get("orderItem");
// order ID for tracking
String orderId = orderItem.getString("orderId");
// the order header for store info
GenericValue orderHeader = null;
try {
orderHeader = orderItem.getRelatedOne("OrderHeader");
} catch (GenericEntityException e) {
Debug.logError(e, "Unable to get OrderHeader from OrderItem",module);
return ServiceUtil.returnError("Unable to get OrderHeader from OrderItem");
}
// get the order read helper
OrderReadHelper orh = new OrderReadHelper(orderHeader);
// get the currency
String currency = orh.getCurrency();
// make sure we have a currency
if (currency == null) {
currency = UtilProperties.getPropertyValue("general.properties", "currency.uom.id.default", "USD");
}
// get the product store
String productStoreId = null;
if (orderHeader != null) {
productStoreId = orh.getProductStoreId();
}
if (productStoreId == null) {
return ServiceUtil.returnError("Unable to process gift card purchase; no productStoreId on OrderHeader : " + orderId);
}
// payment config
GenericValue paymentSetting = ProductStoreWorker.getProductStorePaymentSetting(delegator, productStoreId, "GIFT_CARD", null, true);
String paymentConfig = null;
if (paymentSetting != null) {
paymentConfig = paymentSetting.getString("paymentPropertiesPath");
}
if (paymentConfig == null) {
return ServiceUtil.returnError("Unable to get payment configuration file");
}
// party ID for tracking
GenericValue placingParty = orh.getPlacingParty();
String partyId = null;
if (placingParty != null) {
partyId = placingParty.getString("partyId");
}
// amount/quantity of the gift card(s)
Double amount = orderItem.getDouble("unitPrice");
Double quantity = orderItem.getDouble("quantity");
// the product entity needed for information
GenericValue product = null;
try {
product = orderItem.getRelatedOne("Product");
} catch (GenericEntityException e) {
Debug.logError("Unable to get Product from OrderItem", module);
}
if (product == null) {
return ServiceUtil.returnError("No product associated with OrderItem, cannot fulfill gift card");
}
// get the productFeature type TYPE (VL promo code)
GenericValue typeFeature = null;
try {
Map fields = UtilMisc.toMap("productId", product.get("productId"), "productFeatureTypeId", "TYPE");
List order = UtilMisc.toList("-fromDate");
List featureAppls = delegator.findByAndCache("ProductFeatureAndAppl", fields, order);
featureAppls = EntityUtil.filterByDate(featureAppls);
typeFeature = EntityUtil.getFirst(featureAppls);
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError("Unable to get the required feature type TYPE from Product");
}
if (typeFeature == null) {
return ServiceUtil.returnError("Required feature type TYPE not found for product : " + product.get("productId"));
}
// get the VL promo code
String promoCode = typeFeature.getString("idCode");
if (promoCode == null || promoCode.length() == 0) {
return ServiceUtil.returnError("Invalid promo code set on idCode field of feature type TYPE");
}
// survey information
String surveyId = UtilProperties.getPropertyValue(paymentConfig, "payment.valuelink.purchase.surveyId");
// get the survey response
GenericValue surveyResponse = null;
try {
Map fields = UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItem.get("orderItemSeqId"), "surveyId", surveyId);
List order = UtilMisc.toList("-responseDate");
List responses = delegator.findByAnd("SurveyResponse", fields, order);
// there should be only one
surveyResponse = EntityUtil.getFirst(responses);
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError("Unable to get survey response information; cannot fulfill gift card");
}
// get the response answers
List responseAnswers = null;
try {
responseAnswers = surveyResponse.getRelated("SurveyResponseAnswer");
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError("Unable to get survey response answers from survey response; cannot fulfill gift card");
}
// make a map of answer info
Map answerMap = new HashMap();
if (responseAnswers != null) {
Iterator rai = responseAnswers.iterator();
while (rai.hasNext()) {
GenericValue answer = (GenericValue) rai.next();
GenericValue question = null;
try {
question = answer.getRelatedOne("SurveyQuestion");
} catch (GenericEntityException e) {
Debug.logError(e, module);
return ServiceUtil.returnError("Unable to get survey question from answer");
}
if (question != null) {
String desc = question.getString("description");
String ans = answer.getString("textResponse"); // only support text response types for now
answerMap.put(desc, ans);
}
}
}
// get the send to email address - key defined in properties file
String sendToKey = UtilProperties.getPropertyValue(paymentConfig, "payment.valuelink.purchase.survey.sendToEmail");
String sendToEmail = (String) answerMap.get(sendToKey);
// get the copyMe flag and set the order email address
String orderEmails = orh.getOrderEmailString();
String copyMeField = UtilProperties.getPropertyValue(paymentConfig, "payment.valuelink.purchase.survey.copyMe");
String copyMeResp = copyMeField != null ? (String) answerMap.get(copyMeField) : null;
boolean copyMe = (UtilValidate.isNotEmpty(copyMeField)
&& UtilValidate.isNotEmpty(copyMeResp) && "true".equalsIgnoreCase(copyMeResp)) ? true : false;
int qtyLoop = quantity.intValue();
for (int i = 0; i < qtyLoop; i++) {
// activate a gift card
Map activateCtx = new HashMap();
activateCtx.put("paymentConfig", paymentConfig);
activateCtx.put("vlPromoCode", promoCode);
activateCtx.put("currency", currency);
activateCtx.put("partyId", partyId);
activateCtx.put("orderId", orderId);
activateCtx.put("amount", amount);
activateCtx.put("userLogin", userLogin);
boolean failure = false;
Map activateResult = null;
try {
activateResult = dispatcher.runSync("activateGiftCard", activateCtx);
} catch (GenericServiceException e) {
Debug.logError(e, "Unable to activate gift card(s)", module);
return ServiceUtil.returnError("Problem running activation service");
}
Boolean processResult = (Boolean) activateResult.get("processResult");
if (activateResult == null || activateResult.containsKey(ModelService.ERROR_MESSAGE) || !processResult.booleanValue()) {
failure = true;
}
if (!failure) {
// set the void on rollback wrapper
ServiceXaWrapper xaw = new ServiceXaWrapper(dctx);
activateCtx.put("cardNumber", activateResult.get("cardNumber"));
activateCtx.put("pin", activateResult.get("pin"));
xaw.setRollbackService("voidActivateGiftCard", activateCtx);
try {
xaw.enlist();
} catch (XAException e) {
Debug.logError(e, "Unable to setup Activate/Void on error", module);
}
}
// create the fulfillment record
Map vlFulFill = new HashMap();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -