Commit d9609ff7 by 王世昌

拼团订单先通知促销,再退款和取消订单

parent 1866e737
...@@ -1102,9 +1102,12 @@ public class OrderSdkAdapter { ...@@ -1102,9 +1102,12 @@ public class OrderSdkAdapter {
//【订单开放平台】订单详情查询接口增加配送类型字段 //【订单开放平台】订单详情查询接口增加配送类型字段
data.setExpressType(orderInfoReqs.getExpressType()); data.setExpressType(orderInfoReqs.getExpressType());
//围餐门店英文名称
if (orderInfoReqs.getOrderExtended() != null) { if (orderInfoReqs.getOrderExtended() != null) {
// 围餐门店英文名称
data.setShopNameEn(orderInfoReqs.getOrderExtended().getStoreNameEn()); data.setShopNameEn(orderInfoReqs.getOrderExtended().getStoreNameEn());
// 围餐
data.setSpellGroupCode(orderInfoReqs.getOrderExtended().getSpellGroupCode());
} }
if (orderInfoReqs.getAfterSalesOrderList() != null && orderInfoReqs.getAfterSalesOrderList().size() >= 1) { if (orderInfoReqs.getAfterSalesOrderList() != null && orderInfoReqs.getAfterSalesOrderList().size() >= 1) {
...@@ -1238,6 +1241,10 @@ public class OrderSdkAdapter { ...@@ -1238,6 +1241,10 @@ public class OrderSdkAdapter {
data.setOrderOperationHistoryList(getOrderOperationHistory(orderInfoReqs.getOrderOperationHistoryList())); data.setOrderOperationHistoryList(getOrderOperationHistory(orderInfoReqs.getOrderOperationHistoryList()));
data.setApportionDetails(getApportionDetails(orderInfoReqs)); data.setApportionDetails(getApportionDetails(orderInfoReqs));
data.setOrderSettlementDetailList(orderInfoReqs.getOrderSettlementDetailList()); data.setOrderSettlementDetailList(orderInfoReqs.getOrderSettlementDetailList());
if (Objects.nonNull(orderInfoReqs.getOrderSettlementDetailList())){
orderInfoReqs.getOrderSettlementDetailList().stream()
.filter(e -> Objects.equals(OrderSettlementType.SPELL_GROUP.getIndex(),e.getSettlementType())).findFirst().ifPresent(e->data.setSpellGroupActivityCode(e.getExternalObjectId()));
}
//费用信息 //费用信息
data.setOrderCostDetailList(orderInfoReqs.getOrderCostDetailList()); data.setOrderCostDetailList(orderInfoReqs.getOrderCostDetailList());
data.setExpressChannelName(orderInfoReqs.getExpressChannelName()); data.setExpressChannelName(orderInfoReqs.getExpressChannelName());
......
...@@ -414,6 +414,16 @@ public class QueryOrdersResponse { ...@@ -414,6 +414,16 @@ public class QueryOrdersResponse {
private String appId; private String appId;
/**
* 拼团团号
*/
private String spellGroupCode;
/**
* 拼团活动编号
*/
private String spellGroupActivityCode;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class AddDeliveryInfo { public static class AddDeliveryInfo {
......
...@@ -8,6 +8,7 @@ import cn.freemud.entities.dto.product.ProductInfo; ...@@ -8,6 +8,7 @@ import cn.freemud.entities.dto.product.ProductInfo;
import cn.freemud.entities.dto.promotion.CalculationDiscountGoodsDto; import cn.freemud.entities.dto.promotion.CalculationDiscountGoodsDto;
import cn.freemud.entities.dto.promotion.CalculationDiscountRequestDto; import cn.freemud.entities.dto.promotion.CalculationDiscountRequestDto;
import cn.freemud.entities.dto.promotion.GroupWorkQueryRequest; import cn.freemud.entities.dto.promotion.GroupWorkQueryRequest;
import cn.freemud.entities.dto.promotion.GroupWorkRefundRequest;
import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo; import com.freemud.api.assortment.datamanager.entity.vo.AssortmentCustomerInfoVo;
import com.freemud.application.sdk.api.membercenter.response.QueryReceiveAddressResponse; import com.freemud.application.sdk.api.membercenter.response.QueryReceiveAddressResponse;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
...@@ -258,6 +259,10 @@ public class SpellGroupOrderAdapter { ...@@ -258,6 +259,10 @@ public class SpellGroupOrderAdapter {
createSpellGroupOrderDto.getProducts().size()); createSpellGroupOrderDto.getProducts().size());
} }
public GroupWorkRefundRequest convertToGroupWorkRefundRequest(String activityCode, String groupId, String orderId, String userId) {
return new GroupWorkRefundRequest(activityCode, groupId, orderId, userId);
}
/*------------------下方转换返回信息------------------------*/ /*------------------下方转换返回信息------------------------*/
/** /**
......
...@@ -286,6 +286,17 @@ public class QueryOrdersResponseDto { ...@@ -286,6 +286,17 @@ public class QueryOrdersResponseDto {
*/ */
private BigDecimal weight; private BigDecimal weight;
/**
* 拼团团号
*/
private String spellGroupCode;
/**
* 拼团活动编号
*/
private String spellGroupActivityCode;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class AddDeliveryInfo { public static class AddDeliveryInfo {
......
package cn.freemud.entities.dto.promotion;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 通知促销团员取消订单
*
* @author shichang.wang 2021/4/21
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
public class GroupWorkRefundRequest {
/**
* 活动号
*/
private String activityCode;
/**
* 团号
*/
private String groupId;
/**
* 订单
*/
private String orderId;
/**
* 用户id
*/
private String userId;
}
package cn.freemud.entities.dto.promotion;
import lombok.Data;
/**
* 通知促销团员取消订单
*
* @author shichang.wang 2021/4/21
*/
@Data
public class GroupWorkRefundResponse {
/**
* 提示
*/
private String msg;
/**
* 内容
*/
private Object result;
/**
* 成功-100
*/
private Integer statusCode;
/**
* 版本号
*/
private String ver;
}
...@@ -173,6 +173,9 @@ public enum ResponseResult { ...@@ -173,6 +173,9 @@ public enum ResponseResult {
STORE_SELF_ERROR("45069", "请选择截止营业时间大于45分钟下单"), STORE_SELF_ERROR("45069", "请选择截止营业时间大于45分钟下单"),
COUPON_INVALID("45070", "券已锁定,请先支付或取消待支付订单"), COUPON_INVALID("45070", "券已锁定,请先支付或取消待支付订单"),
/**
* 售后单
*/
ORDER_REFUND_EXPRESS_ERROR("45200", "售后单修改物流信息失败"), ORDER_REFUND_EXPRESS_ERROR("45200", "售后单修改物流信息失败"),
...@@ -250,6 +253,7 @@ public enum ResponseResult { ...@@ -250,6 +253,7 @@ public enum ResponseResult {
SPELL_GROUP_QUERY_GROUP_WORK_ERROR("80007", "查询拼团信息异常"), SPELL_GROUP_QUERY_GROUP_WORK_ERROR("80007", "查询拼团信息异常"),
SPELL_GROUP_QUERY_GROUP_STATUS_IS_NOT_NORMAL("80008", "团状态非正常"), SPELL_GROUP_QUERY_GROUP_STATUS_IS_NOT_NORMAL("80008", "团状态非正常"),
SPELL_GROUP_QUERY_DELIVERYTEMPLATE_ERROR("80009", "查询配送费异常"), SPELL_GROUP_QUERY_DELIVERYTEMPLATE_ERROR("80009", "查询配送费异常"),
SPELL_GROUP_REFUND_ERROR("80015", "取消拼团失败"),
; ;
......
...@@ -7,9 +7,7 @@ import cn.freemud.entities.dto.ProductInfosDto; ...@@ -7,9 +7,7 @@ import cn.freemud.entities.dto.ProductInfosDto;
import cn.freemud.entities.dto.delivery.QueryDeliveryTemplateRequest; import cn.freemud.entities.dto.delivery.QueryDeliveryTemplateRequest;
import cn.freemud.entities.dto.delivery.QueryDeliveryTemplateResponse; import cn.freemud.entities.dto.delivery.QueryDeliveryTemplateResponse;
import cn.freemud.entities.dto.product.ProductInfo; import cn.freemud.entities.dto.product.ProductInfo;
import cn.freemud.entities.dto.promotion.CalculationDiscountRequestDto; import cn.freemud.entities.dto.promotion.*;
import cn.freemud.entities.dto.promotion.GroupWorkQueryRequest;
import cn.freemud.entities.dto.promotion.GroupWorkQueryResponse;
import cn.freemud.enums.ResponseResult; import cn.freemud.enums.ResponseResult;
import cn.freemud.service.thirdparty.DeliveryFeiginClient; import cn.freemud.service.thirdparty.DeliveryFeiginClient;
import cn.freemud.service.thirdparty.PromotionDiscountClient; import cn.freemud.service.thirdparty.PromotionDiscountClient;
...@@ -154,4 +152,20 @@ public class SpellGroupOrderDataManager { ...@@ -154,4 +152,20 @@ public class SpellGroupOrderDataManager {
return queryDeliveryTemplateResponse; return queryDeliveryTemplateResponse;
} }
/**
* 订单主动退款调促销接口
*
* @param groupWorkRefundRequest
* @return
*/
public GroupWorkRefundResponse groupWorkRefund(GroupWorkRefundRequest groupWorkRefundRequest) {
GroupWorkRefundResponse groupWorkRefundResponse = promotionDiscountClient.groupWorkRefund(groupWorkRefundRequest);
if (!ResponseResult.SUCCESS.getCode().equals(groupWorkRefundResponse.getStatusCode()) || groupWorkRefundResponse.getResult() == null) {
return null;
}
return groupWorkRefundResponse;
}
} }
...@@ -43,6 +43,8 @@ import cn.freemud.entities.dto.pay.CombPayResponse; ...@@ -43,6 +43,8 @@ import cn.freemud.entities.dto.pay.CombPayResponse;
import cn.freemud.entities.dto.product.*; import cn.freemud.entities.dto.product.*;
import cn.freemud.entities.dto.promotion.GroupWorkQueryRequest; import cn.freemud.entities.dto.promotion.GroupWorkQueryRequest;
import cn.freemud.entities.dto.promotion.GroupWorkQueryResponse; import cn.freemud.entities.dto.promotion.GroupWorkQueryResponse;
import cn.freemud.entities.dto.promotion.GroupWorkRefundRequest;
import cn.freemud.entities.dto.promotion.GroupWorkRefundResponse;
import cn.freemud.entities.dto.shoppingCart.NewShoppingCartClearDto; import cn.freemud.entities.dto.shoppingCart.NewShoppingCartClearDto;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.dto.shoppingCart.CollageOrderDto; import cn.freemud.entities.dto.shoppingCart.CollageOrderDto;
...@@ -315,6 +317,9 @@ public class OrderServiceImpl implements Orderservice { ...@@ -315,6 +317,9 @@ public class OrderServiceImpl implements Orderservice {
@Autowired @Autowired
private SpellGroupOrderDataManager spellGroupOrderDataManager; private SpellGroupOrderDataManager spellGroupOrderDataManager;
@Autowired
private SpellGroupOrderAdapter spellGroupOrderAdapter;
@Override @Override
public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) { public BaseResponse checkBeforeCreateOrder(CheckBeforeCreateOrderRequestVo requestVo) {
String trackingNo = LogTreadLocal.getTrackingNo(); String trackingNo = LogTreadLocal.getTrackingNo();
...@@ -2108,39 +2113,27 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2108,39 +2113,27 @@ public class OrderServiceImpl implements Orderservice {
if(Objects.isNull(orderRefundVo.getRefundMode()) || RefundModeEnum.getByIndex(orderRefundVo.getRefundMode()) == null){ if(Objects.isNull(orderRefundVo.getRefundMode()) || RefundModeEnum.getByIndex(orderRefundVo.getRefundMode()) == null){
return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "请选择退款方式"); return ResponseUtil.error(ResponseResult.PARAMETER_MISSING.getCode(), "请选择退款方式");
} }
// 完成/配送中 可以选择退货退款
List<Integer> refundGoodsCodes = Arrays.asList(
OrderStatus.DISTRIBUTION.getCode(), OrderStatus.COMPLETE.getCode());
if(!refundGoodsCodes.contains(orderBean.getStatus())&& !Objects.equals(RefundModeEnum.UN_REFUND_GOODS.getIndex(), orderRefundVo.getRefundMode())){
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "还未发货,请选择只退款不退货");
}
// 拼团类型 // 拼团类型
if (Objects.equals(OrderMarketType.GROUPB.getIndex(),orderBean.getMarketingType())) { if (Objects.equals(OrderMarketType.GROUPB.getIndex(),orderBean.getMarketingType())) {
OrderExtInfoDto orderExtInfoDto = JSON.parseObject(orderBean.getExtInfo(),OrderExtInfoDto.class); if(StringUtils.isBlank(orderBean.getSpellGroupCode()) || StringUtils.isBlank(orderBean.getSpellGroupActivityCode())){
String spellGroupCode;
if(Objects.isNull(orderExtInfoDto) || StringUtils.isBlank(spellGroupCode = orderExtInfoDto.getSpellGroupCode())){
return ResponseUtil.error(ResponseResult.SPELL_GROUP_QUERY_GROUP_WORK_ERROR);
}
// 获取拼团活动
OrderSettlementResp settlement;
if(CollectionUtils.isEmpty(orderBean.getOrderSettlementDetailList())
|| Objects.isNull(settlement = orderBean.getOrderSettlementDetailList().stream().filter(e -> Objects.equals(OrderSettlementType.SPELL_GROUP.getIndex(),e.getSettlementType())).findFirst().orElse(null))
|| StringUtils.isBlank(settlement.getExternalObjectId())){
return ResponseUtil.error(ResponseResult.SPELL_GROUP_QUERY_GROUP_WORK_ERROR); return ResponseUtil.error(ResponseResult.SPELL_GROUP_QUERY_GROUP_WORK_ERROR);
} }
// 查询团信息 // 查询团信息
GroupWorkQueryRequest groupWorkQueryRequest = new GroupWorkQueryRequest(); GroupWorkQueryRequest groupWorkQueryRequest = new GroupWorkQueryRequest();
groupWorkQueryRequest.setActivityCode(settlement.getExternalObjectId()); groupWorkQueryRequest.setActivityCode(orderBean.getSpellGroupActivityCode());
groupWorkQueryRequest.setGoodId(spellGroupCode); groupWorkQueryRequest.setGoodId(orderBean.getSpellGroupActivityCode());
groupWorkQueryRequest.setPartnerId(orderBean.getCompanyId()); groupWorkQueryRequest.setPartnerId(orderBean.getCompanyId());
GroupWorkQueryResponse groupWorkQueryResponse = spellGroupOrderDataManager.groupWorkQuery(groupWorkQueryRequest); GroupWorkQueryResponse groupWorkQueryResponse = spellGroupOrderDataManager.groupWorkQuery(groupWorkQueryRequest);
if(groupWorkQueryResponse == null || groupWorkQueryResponse.getResult() == null){ if(groupWorkQueryResponse == null || groupWorkQueryResponse.getResult() == null){
return ResponseUtil.error(ResponseResult.SPELL_GROUP_QUERY_GROUP_WORK_ERROR); return ResponseUtil.error(ResponseResult.SPELL_GROUP_QUERY_GROUP_WORK_ERROR);
} }
} }
// 完成/配送中 可以选择退货退款
List<Integer> refundGoodsCodes = Arrays.asList(
OrderStatus.DISTRIBUTION.getCode(), OrderStatus.COMPLETE.getCode());
if(!refundGoodsCodes.contains(orderBean.getStatus())&& !Objects.equals(RefundModeEnum.UN_REFUND_GOODS.getIndex(), orderRefundVo.getRefundMode())){
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "还未发货,请选择只退款不退货");
}
} }
// todo 这里直接拒绝? // todo 这里直接拒绝?
else if (OrderStatus.DISTRIBUTION.getCode().equals(orderBean.getStatus())) { else if (OrderStatus.DISTRIBUTION.getCode().equals(orderBean.getStatus())) {
...@@ -2225,6 +2218,15 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2225,6 +2218,15 @@ public class OrderServiceImpl implements Orderservice {
} }
// 未接单 // 未接单
if (OrderStatus.TAKE_ORDER.getCode().equals(orderBean.getStatus())) { if (OrderStatus.TAKE_ORDER.getCode().equals(orderBean.getStatus())) {
// 拼团订单主动退款触发通知促销
if (Objects.equals(com.freemud.sdk.api.assortment.order.enums.OrderSourceType.SAASMALL.getCode(), orderBean.getSource())
&& Objects.equals(OrderMarketType.GROUPB.getIndex(), orderBean.getMarketingType()) && StringUtils.isBlank(orderBean.getSpellGroupCode())) {
GroupWorkRefundRequest groupWorkRefundRequest = spellGroupOrderAdapter.convertToGroupWorkRefundRequest(orderBean.getSpellGroupActivityCode(),orderBean.getSpellGroupCode(),orderBean.getOid(),orderBean.getUserId());
GroupWorkRefundResponse refundResponse = spellGroupOrderDataManager.groupWorkRefund(groupWorkRefundRequest);
if (Objects.isNull(refundResponse) || !Objects.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, refundResponse.getStatusCode())) {
return ResponseUtil.error(ResponseResult.SPELL_GROUP_REFUND_ERROR);
}
}
//商家未接单逻辑处理 1.调用支付退款 2.根据支付退款返回状态组装订单取消参数,调用订单取消接口 //商家未接单逻辑处理 1.调用支付退款 2.根据支付退款返回状态组装订单取消参数,调用订单取消接口
BaseResponse baseResponse = partnerNoTakeOrder(orderRefundVo, orderBean, orderId, AfterSalesType.USER_CANCEL, isRefundDeliveryFee); BaseResponse baseResponse = partnerNoTakeOrder(orderRefundVo, orderBean, orderId, AfterSalesType.USER_CANCEL, isRefundDeliveryFee);
if (baseResponse != null) { if (baseResponse != null) {
...@@ -2309,14 +2311,15 @@ public class OrderServiceImpl implements Orderservice { ...@@ -2309,14 +2311,15 @@ public class OrderServiceImpl implements Orderservice {
state = response.getData().getRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : response.getData().getRefundStatus(); state = response.getData().getRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : response.getData().getRefundStatus();
} }
} }
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(), CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(),
partnerId, afterSalesType, orderRefundVo.getReason(), LogTreadLocal.getTrackingNo(), refundId.toString()); partnerId, afterSalesType, orderRefundVo.getReason(), LogTreadLocal.getTrackingNo(), refundId.toString());
cancelOrderRequest.setOperator(orderBean.getUserName()); cancelOrderRequest.setOperator(orderBean.getUserName());
cancelOrderRequest.setPartnerId(orderBean.getCompanyId()); cancelOrderRequest.setPartnerId(orderBean.getCompanyId());
if (PayRefundStatus.RUNNING.getCode().intValue() == state) { if (Objects.equals(PayRefundStatus.RUNNING.getCode(), state)) {
// 退款中 // 退款中
cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.RETURN_COMPLETE.getCreateEvent()); cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.RETURN_COMPLETE.getCreateEvent());
} else if (PayRefundStatus.SUCCESS.getCode().intValue() == state) { } else if (Objects.equals(PayRefundStatus.SUCCESS.getCode(), state)) {
//退款成功 //退款成功
cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.REFUND_COMPLETE.getCreateEvent()); cancelOrderRequest.setCreateEvent(AfterSalesOrderCreateEventEnum.REFUND_COMPLETE.getCreateEvent());
} }
...@@ -4337,6 +4340,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -4337,6 +4340,7 @@ public class OrderServiceImpl implements Orderservice {
cancelOrderRequest.setRefundDeliveryAmount(isRefundDeliveryFee); cancelOrderRequest.setRefundDeliveryAmount(isRefundDeliveryFee);
BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderCancel(cancelOrderRequest); BaseOrderResponse baseOrderResponse = orderCenterSdkService.orderCancel(cancelOrderRequest);
// todo 需要进行部分的处理
if (baseOrderResponse == null || baseOrderResponse.getData() == null || !ObjectUtils.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, baseOrderResponse.getErrcode())) { if (baseOrderResponse == null || baseOrderResponse.getData() == null || !ObjectUtils.equals(ResponseConstant.SUCCESS_RESPONSE_CODE, baseOrderResponse.getErrcode())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed"); return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed");
} }
......
...@@ -18,10 +18,7 @@ import cn.freemud.entities.dto.ActivityCalculationDiscountRequestDto; ...@@ -18,10 +18,7 @@ import cn.freemud.entities.dto.ActivityCalculationDiscountRequestDto;
import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto; import cn.freemud.entities.dto.ActivityCalculationDiscountResponseDto;
import cn.freemud.entities.dto.ActivityQueryRequestDto; import cn.freemud.entities.dto.ActivityQueryRequestDto;
import cn.freemud.entities.dto.activity.ActivityQueryResponseDto; import cn.freemud.entities.dto.activity.ActivityQueryResponseDto;
import cn.freemud.entities.dto.promotion.CalculationDiscountRequestDto; import cn.freemud.entities.dto.promotion.*;
import cn.freemud.entities.dto.promotion.CalculationDiscountResponseDto;
import cn.freemud.entities.dto.promotion.GroupWorkQueryRequest;
import cn.freemud.entities.dto.promotion.GroupWorkQueryResponse;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -62,5 +59,13 @@ public interface PromotionDiscountClient { ...@@ -62,5 +59,13 @@ public interface PromotionDiscountClient {
@PostMapping("/groupWork/query") @PostMapping("/groupWork/query")
GroupWorkQueryResponse groupWorkQuery(GroupWorkQueryRequest groupWorkQueryRequest); GroupWorkQueryResponse groupWorkQuery(GroupWorkQueryRequest groupWorkQueryRequest);
/**
* 订单主动退款调促销接口
* @param groupWorkRefundRequest
* @return
*/
@PostMapping("/groupWork/refund")
GroupWorkRefundResponse groupWorkRefund(GroupWorkRefundRequest groupWorkRefundRequest);
} }
...@@ -195,10 +195,5 @@ public class OrderExtInfoDto { ...@@ -195,10 +195,5 @@ public class OrderExtInfoDto {
private String svcCardCode; private String svcCardCode;
/**
* 团号
*/
private String spellGroupCode;
} }
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