From 411309a76060040443b275a7663019f68a8849ec Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Fri, 6 Sep 2019 14:48:31 +0800 Subject: [PATCH] =?UTF-8?q?[POS][=E4=BF=AE=E6=94=B9]:POS=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration/V201909061320__POS_CHANGED.sql | 12 + .../iformall/service/impl/PosServiceImpl.java | 363 ++++++++++++++---- .../java/com/iformall/common/ErrorCode.java | 1 + .../java/com/iformall/domain/po/WxOrder.java | 2 + .../com/iformall/domain/po/WxPayOrder.java | 2 +- .../com/iformall/domain/po/WxRefundOrder.java | 17 + .../java/com/iformall/enums/EnumPayType.java | 4 +- 7 files changed, 324 insertions(+), 77 deletions(-) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V201909061320__POS_CHANGED.sql diff --git a/mallinkAdmin/src/main/resources/db/migration/V201909061320__POS_CHANGED.sql b/mallinkAdmin/src/main/resources/db/migration/V201909061320__POS_CHANGED.sql new file mode 100644 index 000000000..03c39a8e9 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V201909061320__POS_CHANGED.sql @@ -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退款描述'; diff --git a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java index 1e5f0f88a..55278c83b 100644 --- a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java +++ b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java @@ -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 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 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 statusS; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java index 0d01c2aee..eb5d8801f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxPayOrder.java @@ -64,7 +64,7 @@ public class WxPayOrder extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="支付后结果来源(0:callback, 1:query)",name="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; @io.swagger.annotations.ApiModelProperty(value="支付订单号,来源于POS",name="posPayOrderId") private Long posPayOrderId; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java index 8ac5f8c29..b0107a604 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxRefundOrder.java @@ -53,4 +53,21 @@ public class WxRefundOrder extends BaseEntity { @io.swagger.annotations.ApiModelProperty(value="支付失败原因",name="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; + } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java index a2e6bf50a..1f268aecf 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java @@ -8,7 +8,9 @@ public enum EnumPayType { PAY_PAYMENT(0, "付款"), PAY_B_REFUND(1, "B端退款"), 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) { for (EnumPayType value : values()) { if (value.getCode().equals(code)) {