|
|
|
@@ -14,6 +14,7 @@ import com.iformall.exception.MallinkException; |
|
|
|
import com.iformall.mapper.*; |
|
|
|
import com.iformall.pay.WxPayConstant; |
|
|
|
import com.iformall.service.*; |
|
|
|
import io.swagger.models.auth.In; |
|
|
|
import lombok.AllArgsConstructor; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.slf4j.Logger; |
|
|
|
@@ -51,6 +52,7 @@ public class PosServiceImpl implements PosService { |
|
|
|
|
|
|
|
private final WxOrderMapper orderMapper; |
|
|
|
private final WxPayOrderMapper payOrderMapper; |
|
|
|
private final WxRefundOrderMapper refundOrderMapper; |
|
|
|
private final WxCouponOrderMapper couponOrderMapper; |
|
|
|
private final WxCouponMerchantMapper couponMerchantMapper; |
|
|
|
private final WxCouponMapper couponMapper; |
|
|
|
@@ -1807,7 +1809,7 @@ public class PosServiceImpl implements PosService { |
|
|
|
} |
|
|
|
|
|
|
|
Long merchantId, buUserId, posOrderId, memId; |
|
|
|
Long posAmount = 0L; |
|
|
|
Integer posAmount; |
|
|
|
Integer iSceneType; |
|
|
|
Date orderTime = null; |
|
|
|
try { |
|
|
|
@@ -1816,7 +1818,7 @@ public class PosServiceImpl implements PosService { |
|
|
|
memId = Long.valueOf(cuUserIdStr); |
|
|
|
iSceneType = Integer.valueOf(sceneTypeStr); |
|
|
|
posOrderId = Long.valueOf(posOrderIdStr); |
|
|
|
posAmount = Long.valueOf(posAmountStr); |
|
|
|
posAmount = Integer.valueOf(posAmountStr); |
|
|
|
} catch (NumberFormatException e) { |
|
|
|
logger.error(e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), e.getMessage()); |
|
|
|
@@ -1834,79 +1836,142 @@ public class PosServiceImpl implements PosService { |
|
|
|
// 4. 同步 |
|
|
|
if (posStatusStr.equalsIgnoreCase(WxPayConstant.NEU_ORDER_PAY)) { |
|
|
|
// 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)) { |
|
|
|
// 退款同步 |
|
|
|
// 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, |
|
|
|
WxMerchant merchant, WxMerchantBUser buUser, |
|
|
|
WxOrder order, Long memId, |
|
|
|
Long posPayOrderId, Integer neuPaymentAmount, Date neuPosPayOrderTime, String posPayOrderNo) |
|
|
|
{ |
|
|
|
Long posPayOrderId, Integer neuPaymentAmount, Date neuPosPayOrderTime, String posPayOrderNo) { |
|
|
|
// 1. insert into PayOrder |
|
|
|
WxPayOrder payOrder = new WxPayOrder() {{ |
|
|
|
Date curDate = new Date(); |
|
|
|
@@ -2072,6 +2136,7 @@ public class PosServiceImpl implements PosService { |
|
|
|
setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); |
|
|
|
setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); |
|
|
|
setShare(EnumPayShare.NO.getCode()); |
|
|
|
setPayFrom(EnumPayFrom.POS.getCode()); |
|
|
|
setPosPayOrderId(posPayOrderId); |
|
|
|
setPosPayOrderTime(neuPosPayOrderTime.getTime()); |
|
|
|
setPosPaymentType(EnumNeuPosPamentType.MEM_CARD.getCode()); |
|
|
|
@@ -2114,8 +2179,7 @@ public class PosServiceImpl implements PosService { |
|
|
|
public WxPayOrder payOrderFromPos( |
|
|
|
PromotionCalc scoreCreditCalc, |
|
|
|
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 |
|
|
|
WxPayOrder payOrder = new WxPayOrder() {{ |
|
|
|
Date curDate = new Date(); |
|
|
|
@@ -2134,6 +2198,7 @@ public class PosServiceImpl implements PosService { |
|
|
|
setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); |
|
|
|
setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); |
|
|
|
setShare(EnumPayShare.NO.getCode()); |
|
|
|
setPayFrom(EnumPayFrom.POS.getCode()); |
|
|
|
setPosPayOrderId(neuPayOrderId); |
|
|
|
setPosPayOrderTime(neuPosPayOrderTime.getTime()); |
|
|
|
setPosPaymentType(neuPayOrderType); |
|
|
|
@@ -2169,6 +2234,75 @@ public class PosServiceImpl implements PosService { |
|
|
|
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订单信息创建订单 |
|
|
|
* @param merchantBUser |
|
|
|
@@ -2181,12 +2315,11 @@ public class PosServiceImpl implements PosService { |
|
|
|
public WxOrder createOrderByPos( |
|
|
|
final WxMerchantBUser merchantBUser, |
|
|
|
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; |
|
|
|
WxOrder orderQ = new WxOrder() {{ |
|
|
|
setType(EnumOrderType.POSPAY.getCode()); |
|
|
|
setProductId(merchantBUser.getId()); |
|
|
|
setCUserId(memId); |
|
|
|
setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); |
|
|
|
setPosOrderId(posOrderId); |
|
|
|
@@ -2220,7 +2353,87 @@ public class PosServiceImpl implements PosService { |
|
|
|
setUpdateDate(curr); |
|
|
|
setPosOrderId(posOrderId); |
|
|
|
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 { |
|
|
|
orderMapper.insertSelective(order); |
|
|
|
|