Przeglądaj źródła

[POS][修改]:POS退款

release_toaliyun_real
Stormeye Wu 6 lat temu
rodzic
commit
411309a760
7 zmienionych plików z 324 dodań i 77 usunięć
  1. +12
    -0
      mallinkAdmin/src/main/resources/db/migration/V201909061320__POS_CHANGED.sql
  2. +288
    -75
      mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java
  3. +1
    -0
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  4. +2
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java
  5. +1
    -1
      mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java
  6. +17
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java
  7. +3
    -1
      mallinkService/src/main/java/com/iformall/enums/EnumPayType.java

+ 12
- 0
mallinkAdmin/src/main/resources/db/migration/V201909061320__POS_CHANGED.sql Wyświetl plik

@@ -0,0 +1,12 @@
ALTER TABLE `wx_order`
ADD COLUMN `pos_order_create_sn` varchar(30) null COMMENT 'pos sn' AFTER `pos_order_create_time`;

ALTER TABLE `wx_refund_order`
add `refund_from` tinyint(6) NOT NULL DEFAULT '0' COMMENT '支付类型(0:inside, 1:POS)',
add `pos_pay_order_id` bigint(20) NULL COMMENT 'POS支付订单ID,来源于POS',
add `pos_refund_order_id` bigint(20) NULL COMMENT 'POS退款订单ID,来源于POS',
add `pos_refund_order_time` bigint(20) NULL COMMENT 'POS退款订单创建时间,来源于POS',
add `pos_refund_order_status` tinyint(6) NULL COMMENT '支付订单退款状态(0:非手动,1:手动退款,2:手动释放同步),来源于POS',
add `pos_refund_type` tinyint(6) NULL COMMENT '支付方式: 0微信;1支付宝;2现金;3优惠券;4预付卡;5银行卡6记账,来源于POS',
add `pos_refund_order_no` varchar(20) NULL COMMENT '退款订单流水号, 来源于POS, 第三方(微信、支付宝、富茂预付卡)支付订单流水号,富茂优惠券ID,现金和富茂会员折扣时为空',
add `pos_refund_desc` varchar(100) NULL COMMENT 'POS退款描述';

+ 288
- 75
mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java Wyświetl plik

@@ -14,6 +14,7 @@ import com.iformall.exception.MallinkException;
import com.iformall.mapper.*; import com.iformall.mapper.*;
import com.iformall.pay.WxPayConstant; import com.iformall.pay.WxPayConstant;
import com.iformall.service.*; import com.iformall.service.*;
import io.swagger.models.auth.In;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -51,6 +52,7 @@ public class PosServiceImpl implements PosService {


private final WxOrderMapper orderMapper; private final WxOrderMapper orderMapper;
private final WxPayOrderMapper payOrderMapper; private final WxPayOrderMapper payOrderMapper;
private final WxRefundOrderMapper refundOrderMapper;
private final WxCouponOrderMapper couponOrderMapper; private final WxCouponOrderMapper couponOrderMapper;
private final WxCouponMerchantMapper couponMerchantMapper; private final WxCouponMerchantMapper couponMerchantMapper;
private final WxCouponMapper couponMapper; private final WxCouponMapper couponMapper;
@@ -1807,7 +1809,7 @@ public class PosServiceImpl implements PosService {
} }


Long merchantId, buUserId, posOrderId, memId; Long merchantId, buUserId, posOrderId, memId;
Long posAmount = 0L;
Integer posAmount;
Integer iSceneType; Integer iSceneType;
Date orderTime = null; Date orderTime = null;
try { try {
@@ -1816,7 +1818,7 @@ public class PosServiceImpl implements PosService {
memId = Long.valueOf(cuUserIdStr); memId = Long.valueOf(cuUserIdStr);
iSceneType = Integer.valueOf(sceneTypeStr); iSceneType = Integer.valueOf(sceneTypeStr);
posOrderId = Long.valueOf(posOrderIdStr); posOrderId = Long.valueOf(posOrderIdStr);
posAmount = Long.valueOf(posAmountStr);
posAmount = Integer.valueOf(posAmountStr);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
logger.error(e.getMessage()); logger.error(e.getMessage());
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage()); throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage());
@@ -1834,79 +1836,142 @@ public class PosServiceImpl implements PosService {
// 4. 同步 // 4. 同步
if (posStatusStr.equalsIgnoreCase(WxPayConstant.NEU_ORDER_PAY)) { if (posStatusStr.equalsIgnoreCase(WxPayConstant.NEU_ORDER_PAY)) {
// 4.1 支付同步 // 4.1 支付同步
WxOrder order = createOrderByPos(merchantBUser, memId, posOrderId, posAmount.intValue(), orderTime);
String payDetail = params.get(WxPayConstant.PAY_DETAIL);
JSONObject payDetailObj = JSON.parseObject(payDetail);
PromotionCalc scoreCreditCalc = new PromotionCalc();
scoreCreditCalc.setScore(0);
scoreCreditCalc.setCredit(0);
JSONArray payDetailList = payDetailObj.getJSONArray(WxPayConstant.PAY_DETAIL_LIST);
for (int i=0;i<payDetailList.size();i++) {
JSONObject payOrderObj = payDetailList.getJSONObject(i);
// ADD to wx_pay_order
String neuPayOrderTypeStr = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_TYPE);
String neuPayOrderIdStr = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_ID);
String neuPaymentAmountStr = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_AMOUNT);
String neuPayOrderTimeStr = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_TIME);
String neuPayThirdNo = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_OUT_NO);
Date neuPosPayOrderTime = null;
Integer neuPayOrderType, neuPaymentAmount;
try {
neuPosPayOrderTime = neuDateFormat.parse(neuPayOrderTimeStr);
neuPayOrderType = Integer.valueOf(neuPayOrderTypeStr);
neuPaymentAmount = Integer.valueOf(neuPaymentAmountStr);
} catch (ParseException e) {
logger.error(e.getMessage());
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage());
}
Long neuPayOrderId;
try {
neuPayOrderId = Long.valueOf(neuPayOrderIdStr);
} catch (NumberFormatException e) {
logger.error(e.getMessage());
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage());
}
if (neuPayOrderType.equals(EnumNeuPosPamentType.MEM_COUPON.getCode())) {
// 优惠券
WxPayOrder payOrder = payOrderFromCouponVerify(
scoreCreditCalc,
merchantBUser, order, memId, iSceneType,
neuPayOrderId, neuPaymentAmount, neuPosPayOrderTime, neuPayThirdNo);
} else if (neuPayOrderType.equals(EnumNeuPosPamentType.MEM_CARD.getCode())) {
// 预付卡
WxPayOrder payOrder = payOrderFromCard(
scoreCreditCalc,
merchant, merchantBUser, order, memId,
neuPayOrderId, neuPaymentAmount, neuPosPayOrderTime, neuPayThirdNo);
} else {
// 其它
payOrderFromPos(scoreCreditCalc,
merchant, merchantBUser, order, memId,
neuPayOrderType, neuPayOrderId, neuPaymentAmount, neuPosPayOrderTime, neuPayThirdNo);
}
}
syncOrder(params, merchant, merchantBUser, iSceneType, posOrderId, memId, posAmount, orderTime, orderCreateSN);
} else if (posStatusStr.equalsIgnoreCase(WxPayConstant.NEU_ORDER_REFUND)) { } else if (posStatusStr.equalsIgnoreCase(WxPayConstant.NEU_ORDER_REFUND)) {
// 退款同步 // 退款同步
// add to wx_order
String refundDetail = params.get(WxPayConstant.NEU_REFUND_DETAIL);
JSONObject refundDetailObj = JSON.parseObject(refundDetail);
JSONArray refundDetailList = refundDetailObj.getJSONArray(WxPayConstant.NEU_REFUND_DETAIL_LIST);
for (int i=0;i<refundDetailList.size();i++) {
JSONObject refundOrderObj = refundDetailList.getJSONObject(i);
// TODO
// ADD to wx_pay_order
String neuRefundOrderType = refundOrderObj.getString(WxPayConstant.NEU_REFUND_ORDER_TYPE);
if (neuRefundOrderType.equalsIgnoreCase(String.valueOf(EnumNeuPosRefundType.MEM_COUPON.getCode()))) {
// 优惠券, 退优惠券
} else if (neuRefundOrderType.equalsIgnoreCase(String.valueOf(EnumNeuPosRefundType.MEM_CARD.getCode()))) {
// 预付卡, 不能退
} else {
syncRefundOrder(params, merchantBUser, iSceneType, posOrderId, memId, posAmount, orderTime, orderCreateSN);
}


}
return retMap;
}

/**
* 支付同步
* @param params
* @param merchant
* @param buUser
* @param iSceneType
* @param posOrderId
* @param memId
* @param orderAmount
* @param orderTime
*/
public void syncOrder(
Map<String, String> params,
WxMerchant merchant, WxMerchantBUser buUser,
Integer iSceneType,
Long posOrderId, Long memId, Integer orderAmount, Date orderTime, String orderCreateSn) {
WxOrder order = createOrderByPos(buUser, memId, posOrderId, orderAmount, orderTime, orderCreateSn);
String payDetail = params.get(WxPayConstant.PAY_DETAIL);
JSONObject payDetailObj = JSON.parseObject(payDetail);
PromotionCalc scoreCreditCalc = new PromotionCalc();
scoreCreditCalc.setScore(0);
scoreCreditCalc.setCredit(0);
JSONArray payDetailList = payDetailObj.getJSONArray(WxPayConstant.PAY_DETAIL_LIST);
for (int i=0;i<payDetailList.size();i++) {
JSONObject payOrderObj = payDetailList.getJSONObject(i);
// ADD to wx_pay_order
String neuPayOrderTypeStr = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_TYPE);
String neuPayOrderIdStr = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_ID);
String neuPaymentAmountStr = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_AMOUNT);
String neuPayOrderTimeStr = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_TIME);
String neuPayThirdNo = payOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_OUT_NO);
Date neuPosPayOrderTime = null;
try {
neuPosPayOrderTime = neuDateFormat.parse(neuPayOrderTimeStr);
} catch (ParseException e) {
logger.error(e.getMessage());
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage());
}
Long neuPayOrderId;
Integer neuPayOrderType, neuPaymentAmount;
try {
neuPayOrderId = Long.valueOf(neuPayOrderIdStr);
neuPayOrderType = Integer.valueOf(neuPayOrderTypeStr);
neuPaymentAmount = Integer.valueOf(neuPaymentAmountStr);
} catch (NumberFormatException e) {
logger.error(e.getMessage());
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage());
}
if (neuPayOrderType.equals(EnumNeuPosPamentType.MEM_COUPON.getCode())) {
// 优惠券
WxPayOrder payOrder = payOrderFromCouponVerify(
scoreCreditCalc,
buUser, order, memId, iSceneType,
neuPayOrderId, neuPaymentAmount, neuPosPayOrderTime, neuPayThirdNo);
} else if (neuPayOrderType.equals(EnumNeuPosPamentType.MEM_CARD.getCode())) {
// 预付卡
WxPayOrder payOrder = payOrderFromCard(
scoreCreditCalc,
merchant, buUser, order, memId,
neuPayOrderId, neuPaymentAmount, neuPosPayOrderTime, neuPayThirdNo);
} else {
// 其它
payOrderFromPos(scoreCreditCalc,
merchant, buUser, order, memId,
neuPayOrderType, neuPayOrderId, neuPaymentAmount, neuPosPayOrderTime, neuPayThirdNo);
} }
} }
}


return retMap;
/**
* 退款同步
* @param params
* @param buUser
* @param posOrderId
* @param memId
* @param orderAmount
* @param orderTime
*/
public void syncRefundOrder(
Map<String, String> params,
WxMerchantBUser buUser,
Integer iSceneType,
Long posOrderId, Long memId, Integer orderAmount, Date orderTime, String orderCreateSn) {
// add to wx_order
WxOrder refundOrder = createRefundByPos(buUser, memId, posOrderId, orderAmount, orderTime, orderCreateSn);
String refundDetail = params.get(WxPayConstant.NEU_REFUND_DETAIL);
JSONObject refundDetailObj = JSON.parseObject(refundDetail);
JSONArray refundDetailList = refundDetailObj.getJSONArray(WxPayConstant.NEU_REFUND_DETAIL_LIST);
for (int i=0;i<refundDetailList.size();i++) {
JSONObject refundPayOrderObj = refundDetailList.getJSONObject(i);
// ADD to wx_pay_order
String neuRefundOrderTypeStr = refundPayOrderObj.getString(WxPayConstant.NEU_REFUND_ORDER_TYPE);
String neuPayOrderIdStr = refundPayOrderObj.getString(WxPayConstant.NEU_PAY_ORDER_ID);
String neuRefundOrderIdStr = refundPayOrderObj.getString(WxPayConstant.NEU_REFUND_ORDER_ID);
String neuRefundOrderAmountStr = refundPayOrderObj.getString(WxPayConstant.NEU_REFUND_ORDER_AMOUNT);
String neuRefundOrderTimeStr = refundPayOrderObj.getString(WxPayConstant.NEU_REFUND_ORDER_TIME);
String neuRefundOrderStatusStr = refundPayOrderObj.getString(WxPayConstant.NEU_REFUND_ORDER_STATUS);
String neuRefundTypeStr = refundPayOrderObj.getString(WxPayConstant.NEU_REFUND_ORDER_TYPE);
String neuRefundThirdNo = refundPayOrderObj.getString(WxPayConstant.NEU_REFUND_ORDER_OUT_NO);
String neuRefundThirdTimeStr = refundPayOrderObj.getString(WxPayConstant.NEU_REFUND_ORDER_OUT_TIME);
Long posPayOrderId, posRefundOrderId;
Integer neuRefundPayOrderType, neuRefundAmount, neuRefundPayOrderStatus, neuRefundType;
try {
neuRefundPayOrderType = Integer.valueOf(neuRefundOrderTypeStr);
posPayOrderId = Long.valueOf(neuPayOrderIdStr);
posRefundOrderId = Long.valueOf(neuRefundOrderIdStr);
neuRefundAmount = Integer.valueOf(neuRefundOrderAmountStr);
neuRefundPayOrderStatus = Integer.valueOf(neuRefundOrderStatusStr);
neuRefundType = Integer.valueOf(neuRefundTypeStr);
} catch (NumberFormatException e) {
logger.error(e.getMessage());
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage());
}
Date posRefundOrderTime;
try {
posRefundOrderTime = neuDateFormat.parse(neuRefundOrderTimeStr);
} catch (ParseException e) {
logger.error(e.getMessage());
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage());
}
refundOrderFromPos(buUser, refundOrder, memId,
posPayOrderId, posRefundOrderId, posRefundOrderTime,
neuRefundPayOrderStatus, neuRefundAmount,neuRefundType,
neuRefundThirdNo);


}
} }


/** /**
@@ -2051,8 +2116,7 @@ public class PosServiceImpl implements PosService {
PromotionCalc scoreCreditCalc, PromotionCalc scoreCreditCalc,
WxMerchant merchant, WxMerchantBUser buUser, WxMerchant merchant, WxMerchantBUser buUser,
WxOrder order, Long memId, WxOrder order, Long memId,
Long posPayOrderId, Integer neuPaymentAmount, Date neuPosPayOrderTime, String posPayOrderNo)
{
Long posPayOrderId, Integer neuPaymentAmount, Date neuPosPayOrderTime, String posPayOrderNo) {
// 1. insert into PayOrder // 1. insert into PayOrder
WxPayOrder payOrder = new WxPayOrder() {{ WxPayOrder payOrder = new WxPayOrder() {{
Date curDate = new Date(); Date curDate = new Date();
@@ -2072,6 +2136,7 @@ public class PosServiceImpl implements PosService {
setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode());
setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());
setShare(EnumPayShare.NO.getCode()); setShare(EnumPayShare.NO.getCode());
setPayFrom(EnumPayFrom.POS.getCode());
setPosPayOrderId(posPayOrderId); setPosPayOrderId(posPayOrderId);
setPosPayOrderTime(neuPosPayOrderTime.getTime()); setPosPayOrderTime(neuPosPayOrderTime.getTime());
setPosPaymentType(EnumNeuPosPamentType.MEM_CARD.getCode()); setPosPaymentType(EnumNeuPosPamentType.MEM_CARD.getCode());
@@ -2114,8 +2179,7 @@ public class PosServiceImpl implements PosService {
public WxPayOrder payOrderFromPos( public WxPayOrder payOrderFromPos(
PromotionCalc scoreCreditCalc, PromotionCalc scoreCreditCalc,
WxMerchant merchant, WxMerchantBUser buUser, WxOrder order, Long memId, WxMerchant merchant, WxMerchantBUser buUser, WxOrder order, Long memId,
Integer neuPayOrderType, Long neuPayOrderId, Integer neuPaymentAmount, Date neuPosPayOrderTime, String neuPayThirdNo)
{
Integer neuPayOrderType, Long neuPayOrderId, Integer neuPaymentAmount, Date neuPosPayOrderTime, String neuPayThirdNo) {
// 1. insert into PayOrder // 1. insert into PayOrder
WxPayOrder payOrder = new WxPayOrder() {{ WxPayOrder payOrder = new WxPayOrder() {{
Date curDate = new Date(); Date curDate = new Date();
@@ -2134,6 +2198,7 @@ public class PosServiceImpl implements PosService {
setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode());
setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());
setShare(EnumPayShare.NO.getCode()); setShare(EnumPayShare.NO.getCode());
setPayFrom(EnumPayFrom.POS.getCode());
setPosPayOrderId(neuPayOrderId); setPosPayOrderId(neuPayOrderId);
setPosPayOrderTime(neuPosPayOrderTime.getTime()); setPosPayOrderTime(neuPosPayOrderTime.getTime());
setPosPaymentType(neuPayOrderType); setPosPaymentType(neuPayOrderType);
@@ -2169,6 +2234,75 @@ public class PosServiceImpl implements PosService {
return payOrder; return payOrder;
} }


/**
* 退款订单POS
* @param buUser
* @param refundOrder
* @param memId
* @return
*/
public WxRefundOrder refundOrderFromPos(
WxMerchantBUser buUser, WxOrder refundOrder, Long memId,
Long posPayOrderId, Long posRefundOrderId, Date posRefundOrderTime,
Integer posRefundOrderStatus, Integer posRefundAmount, Integer posRefundType,
String neuRefundThirdNo) {
// 1. pay order
// 查找支付订单
WxPayOrder payOrderQ = new WxPayOrder() {{
setTenantId(refundOrder.getTenantId());
setCUserId(refundOrder.getCUserId());
setOrderId(refundOrder.getId());
setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode());
setPosPayOrderId(posPayOrderId);
}};

try {
payOrderQ = payOrderMapper.selectOne(payOrderQ);
} catch (Exception e) {
throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND);
}
if (payOrderQ == null) {
logger.error("支付订单不存在(payOrder不存在)");
throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND);
}
// 2. insert into refund order
WxRefundOrder refundPayOrder = new WxRefundOrder() {{
Date curDate = new Date();
final IdWorker idWorker = IdWorker.get();
Long id = idWorker.nextId();
setId(id);
setRefundId(String.valueOf(id));
setTenantId(buUser.getTenantId());
setCUserId(memId);
setOrderId(refundOrder.getId());
setCreateTime(curDate);
setUpdateTime(curDate);
setRefundTimeStart(curDate);
setRefundTimeEnd(curDate);
setTotalFee(posRefundAmount);
setRefundFee(posRefundAmount);
setRefundFrom(EnumPayFrom.POS.getCode());
setRefundOrderStatus(EnumRefundStatus.REFUND_SUCCESS.getCode());
setPosPayOrderId(posPayOrderId);
setPosRefundOrderId(posRefundOrderId);
setPosRefundOrderTime(posRefundOrderTime.getTime());
setPosRefundOrderStatus(posRefundOrderStatus);
setPosRefundType(posRefundType);
setPosRefundDes("POS退款");
setPosRefundOrderNo(neuRefundThirdNo);

}};
refundPayOrder.setPayOrderNo(String.valueOf(payOrderQ.getId()));

int sqlRow = refundOrderMapper.insertSelective(refundPayOrder);
if (sqlRow != 1) {
logger.error("refund order insert error: " + refundPayOrder.toString());
throw new MallinkException(ErrorCode.DB_FAIL);
}

return refundPayOrder;
}

/** /**
* 基于NEUPOS订单信息创建订单 * 基于NEUPOS订单信息创建订单
* @param merchantBUser * @param merchantBUser
@@ -2181,12 +2315,11 @@ public class PosServiceImpl implements PosService {
public WxOrder createOrderByPos( public WxOrder createOrderByPos(
final WxMerchantBUser merchantBUser, final WxMerchantBUser merchantBUser,
final Long memId, final Long memId,
final Long posOrderId, final Integer posAmount, final Date posOrderTime
final Long posOrderId, final Integer posAmount, final Date posOrderTime, final String orderCreateSn
) { ) {
boolean isExist = true; boolean isExist = true;
WxOrder orderQ = new WxOrder() {{ WxOrder orderQ = new WxOrder() {{
setType(EnumOrderType.POSPAY.getCode()); setType(EnumOrderType.POSPAY.getCode());
setProductId(merchantBUser.getId());
setCUserId(memId); setCUserId(memId);
setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); setPaymentType(EnumPayType.PAY_PAYMENT.getCode());
setPosOrderId(posOrderId); setPosOrderId(posOrderId);
@@ -2220,7 +2353,87 @@ public class PosServiceImpl implements PosService {
setUpdateDate(curr); setUpdateDate(curr);
setPosOrderId(posOrderId); setPosOrderId(posOrderId);
setPosOrderCreateTime(posOrderTime.getTime()); setPosOrderCreateTime(posOrderTime.getTime());
setPosOrderCreateSn(orderCreateSn);
}};

try {
orderMapper.insertSelective(order);
} catch (Exception e) {
logger.error(e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL);
}
return order;
}

/**
* 基于NEUPOS退款订单信息创建退款订单
* @param buUser
* @param memId
* @param posOrderId
* @param orderAmount
* @param posOrderTime
* @return
*/
public WxOrder createRefundByPos(
final WxMerchantBUser buUser,
final Long memId,
final Long posOrderId, final Integer orderAmount, final Date posOrderTime, final String orderCreateSn
) {
// 1. 查找正向订单
WxOrder orderQ = new WxOrder() {{
setType(EnumOrderType.POSPAY.getCode());
setCUserId(memId);
setPaymentType(EnumPayType.PAY_PAYMENT.getCode());
setPosOrderId(posOrderId);
}};
try {
orderQ = orderMapper.selectOne(orderQ);
} catch (Exception e) {
throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND);
}
if (orderQ == null) {
logger.error(ErrorCode.POS_ORDER_NOT_FOUND.getMessage());
throw new MallinkException(ErrorCode.POS_ORDER_NOT_FOUND);
}

// 2. 查找是否有退款订单
WxOrder refundQ = new WxOrder() {{
setType(EnumOrderType.POSPAY.getCode());
setCUserId(memId);
setPosOrderId(posOrderId);
}};
refundQ.setOrderNumber(orderQ.getOrderNumber());
try {
refundQ = orderMapper.selectOne(refundQ);
} catch (Exception e) {
}
if (refundQ != null) {
logger.error(ErrorCode.POS_ORDER_HAD_SYNCED.getMessage());
throw new MallinkException(ErrorCode.POS_ORDER_HAD_SYNCED);
}

// 3. 创建退款订单
WxOrder order = new WxOrder() {{
Date curr = new Date();
String bodyStr = "POS退款, 金额: " + orderAmount;
final IdWorker idWorker = IdWorker.get();
Long orderId = idWorker.nextId();
setId(orderId);
setTenantId(buUser.getTenantId());
setType(EnumOrderType.POSPAY.getCode());
setProductId(buUser.getId());
setCUserId(memId);
setPaymentType(EnumPayType.PAY_POS_REFUND.getCode());
setPayment(orderAmount);
setOrderStatus(EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS.getCode());
setDetail(bodyStr);
setCreateDate(curr);
setUpdateDate(curr);
setPosOrderId(posOrderId);
setPosOrderCreateTime(posOrderTime.getTime());
setPosOrderCreateSn(orderCreateSn);
}}; }};
order.setOrderNumber(orderQ.getOrderNumber());


try { try {
orderMapper.insertSelective(order); orderMapper.insertSelective(order);


+ 1
- 0
mallinkService/src/main/java/com/iformall/common/ErrorCode.java Wyświetl plik

@@ -251,6 +251,7 @@ public enum ErrorCode{
POS_CARD_ONLY_SUPPORT_PAY(11109, "卡支付只支持支付"), POS_CARD_ONLY_SUPPORT_PAY(11109, "卡支付只支持支付"),
POS_CARD_OWNER_NOT_EQUAL(11110, "卡拥有者不对应"), POS_CARD_OWNER_NOT_EQUAL(11110, "卡拥有者不对应"),
POS_ORDER_HAD_SYNCED(11111, "订单已同步"), POS_ORDER_HAD_SYNCED(11111, "订单已同步"),
POS_ORDER_NOT_FOUND(11112, "订单未找到"),
POS_CMD_FAIL(11200, "POS命令错误"), POS_CMD_FAIL(11200, "POS命令错误"),






+ 2
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java Wyświetl plik

@@ -74,6 +74,8 @@ public class WxOrder extends BaseEntity {
private Long posOrderId; private Long posOrderId;
@io.swagger.annotations.ApiModelProperty(value="POS系统订单创建时间",name="posOrderCreateTime") @io.swagger.annotations.ApiModelProperty(value="POS系统订单创建时间",name="posOrderCreateTime")
private Long posOrderCreateTime; private Long posOrderCreateTime;
@io.swagger.annotations.ApiModelProperty(value="POS SN",name="posOrderCreateSn")
private String posOrderCreateSn;


@Transient @Transient
protected List<Integer> statusS; protected List<Integer> statusS;


+ 1
- 1
mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java Wyświetl plik

@@ -64,7 +64,7 @@ public class WxPayOrder extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom") @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="payEndFrom")
private Integer payEndFrom; private Integer payEndFrom;


@io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:C端微信支付, 1:POS支付)",name="payFrom")
@io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:inside, 1:POS支付)",name="payFrom")
private Integer payFrom; private Integer payFrom;
@io.swagger.annotations.ApiModelProperty(value="支付订单号,来源于POS",name="posPayOrderId") @io.swagger.annotations.ApiModelProperty(value="支付订单号,来源于POS",name="posPayOrderId")
private Long posPayOrderId; private Long posPayOrderId;


+ 17
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java Wyświetl plik

@@ -53,4 +53,21 @@ public class WxRefundOrder extends BaseEntity {
@io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason") @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="failReason")
private String failReason; private String failReason;


@io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:inside, 1:POS)",name="refundFrom")
private Integer refundFrom;
@io.swagger.annotations.ApiModelProperty(value="支付订单号,来源于POS",name="posPayOrderId")
private Long posPayOrderId;
@io.swagger.annotations.ApiModelProperty(value="退款订单号,来源于POS",name="posRefundOrderId")
private Long posRefundOrderId;
@io.swagger.annotations.ApiModelProperty(value="支付订单创建时间,来源于POS",name="posRefundOrderTime")
private Long posRefundOrderTime;
@io.swagger.annotations.ApiModelProperty(value="支付订单退款状态(0:非手动,1:手动退款,2:手动释放同步),来源于POS",name="posRefundOrderStatus")
private Integer posRefundOrderStatus;
@io.swagger.annotations.ApiModelProperty(value="退款方式: 0微信;1支付宝;2现金;3优惠券;4预付卡;5银行卡6记账,来源于POS",name="posRefundType")
private Integer posRefundType;
@io.swagger.annotations.ApiModelProperty(value="退款订单流水号, 来源于POS, 第三方(微信、支付宝、富茂预付卡)支付订单流水号,富茂优惠券ID,现金和富茂会员折扣时为空",name="posRefundOrderNo")
private String posRefundOrderNo;
@io.swagger.annotations.ApiModelProperty(value="POS支付描述",name="posRefundDes")
private String posRefundDes;

} }

+ 3
- 1
mallinkService/src/main/java/com/iformall/enums/EnumPayType.java Wyświetl plik

@@ -8,7 +8,9 @@ public enum EnumPayType {
PAY_PAYMENT(0, "付款"), PAY_PAYMENT(0, "付款"),
PAY_B_REFUND(1, "B端退款"), PAY_B_REFUND(1, "B端退款"),
PAY_AUTO_REFUND(2, "自动退款"), PAY_AUTO_REFUND(2, "自动退款"),
PAY_ADMIN_REFUND(3, "A端退款");
PAY_ADMIN_REFUND(3, "A端退款"),
PAY_POS_REFUND(4, "POS发起退款");

public static EnumPayType getEnum(Integer code) { public static EnumPayType getEnum(Integer code) {
for (EnumPayType value : values()) { for (EnumPayType value : values()) {
if (value.getCode().equals(code)) { if (value.getCode().equals(code)) {


Ładowanie…
Anuluj
Zapisz