diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java index 152bd7714..47ad8bf3c 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMerchantController.java @@ -285,10 +285,6 @@ public class WxMerchantController extends BaseController { @ApiOperation("(微信)商户手填收款账号") @PostMapping("setMerchantAccount") public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) { - if (null == wxMerchant.getId() || StringUtils.isBlank(wxMerchant.getAccount()) - || null == wxMerchant.getIsIsv() || null == wxMerchant.getApiKey()) { - return new ResultData(ResultData.ERROR,"参数缺失"); - } wxMerchant.updateTenantInfo(getTenantInfo()); return wxMerchantService.setWxMerchantAccount(wxMerchant); } diff --git a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql index 99f940011..766f374de 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V20230200001__car.sql @@ -11,6 +11,7 @@ CREATE TABLE `wx_car_pay_order` ( `pay_time` datetime NOT NULL COMMENT '支付时间', `transaction_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信生成的订单号', `park_order_no` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '车场订单号', + `merchant_account_type` int(1) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商户收款账户类型EnumCarPayAmountType', `merchant_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户收款账户', `park_notify` int(1) NOT NULL DEFAULT '0' COMMENT '是否已通知车场EnumYesOrNo', `notify_fail_reason` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '通知失败原因', diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java index a26235f6c..01e0fb672 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxCarController.java @@ -478,6 +478,7 @@ public class WxCarController extends BaseController { String receiverAccount = null; boolean isIsv = false; String apiKey = null; + EnumCarPayAmountType amountType = null; WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(park.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); if(cAppInfo == null){ throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未查询到C端小程序"); @@ -492,6 +493,7 @@ public class WxCarController extends BaseController { //查找小程序收款账户 receiverAccount = payAccount.getSubMchId(); isIsv = true; + amountType = EnumCarPayAmountType.PAY_ACCOUNT; //查询商官商户 // WxMerchant adminMerchant = wxMerchantService.findAdmin(park); // if (null == adminMerchant) { @@ -506,15 +508,19 @@ public class WxCarController extends BaseController { Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv); if (EnumYesOrNo.YES.getCode() == isvModel) { isIsv = true; + amountType = EnumCarPayAmountType.CAR_ISV_MERCHANT; + }else { + amountType = EnumCarPayAmountType.CAR_OWN_MERCHANT; } apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); } int rlength = receiverAccount.length(); - //最大128 cuserId,cuserPhone,carNumber,merchantId,merchantAccount,parkOrderNo + //最大128 cuserId,cuserPhone,carNumber,amountType,merchantAccount,parkOrderNo StringBuffer attachSb = new StringBuffer() .append(user.getUserId()).append(",") .append(user.getPhone()).append(",") - .append(carNumber).append(","); + .append(carNumber).append(",") + .append(amountType.getCode()); if (rlength > 4) { attachSb.append(receiverAccount.substring(rlength-4,rlength)).append(","); }else { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java index 5f5e29cda..205af9eec 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCarPayOrder.java @@ -60,13 +60,16 @@ public class WxCarPayOrder extends TenantEntity { @Excel(name = "车场订单号", width = 20, orderNum = "9") @io.swagger.annotations.ApiModelProperty(value="车场订单号",name="parkOrderNo") private String parkOrderNo; - @Excel(name = "商户收款账户", width = 20, orderNum = "10") + @Excel(name = "商户收款账号类型", width = 20,replace = {"特约停车商户_1,自有停车商户_2,小程序收款账户_3"}, orderNum = "10") + @io.swagger.annotations.ApiModelProperty(value="商户收款账号类型EnumCarPayAmountType",name="merchantAccountType") + private Integer merchantAccountType; + @Excel(name = "商户收款账户(后4位)", width = 20, orderNum = "11") @io.swagger.annotations.ApiModelProperty(value="商户收款账户",name="merchantAccount") private String merchantAccount; - @Excel(name = "是否已通知车场", width = 20, replace = {"已通知成功_1"}, orderNum = "13") + @Excel(name = "是否已通知车场", width = 20, replace = {"已通知成功_1"}, orderNum = "12") @io.swagger.annotations.ApiModelProperty(value="是否已通知车场EnumYesOrNo",name="parkNotify") private Integer parkNotify; - @Excel(name = "通知失败原因", width = 20, orderNum = "14") + @Excel(name = "通知失败原因", width = 20, orderNum = "13") @io.swagger.annotations.ApiModelProperty(value="通知失败原因",name="notifyFailReason") private String notifyFailReason; @io.swagger.annotations.ApiModelProperty(value="通知重试次数",name="notifyCount") diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java b/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java index 4436f53f9..e665e6e24 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumCarPayAmountType.java @@ -2,8 +2,9 @@ package com.iformall.enums; public enum EnumCarPayAmountType { - CAR_MERCHANT(1, "停车商户"), - ADMIN_MERCHNAT(2, "商管商户"), + CAR_ISV_MERCHANT(1, "特约停车商户"), + CAR_OWN_MERCHANT(2, "自有停车商户"), + PAY_ACCOUNT(3,"小程序收款账户") ; public static EnumCarPayAmountType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java b/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java index 613a18505..c80250e3c 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxProfitPaymentReceiverService.java @@ -53,6 +53,7 @@ public interface WxProfitPaymentReceiverService { */ WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity, Long merchantId, EnumAppPlat plat); + ResultData deleteReceiver(TenantEntity tenantEntity,Long id); ResultData updateReceiver(WxProfitPaymentReceiver receiver); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java index 9bb7d2e4e..4f4f40f0e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMerchantServiceImpl.java @@ -938,12 +938,25 @@ public class WxMerchantServiceImpl implements WxMerchantService { try { WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(wxMerchant, wxMerchant.getId(),EnumAppPlat.WX); if (null == receiver ) { - receiver = new WxProfitPaymentReceiver(); - receiver.setMerchantId(wxMerchant.getId()); - receiver.setReceiverType(EnumProfitPaymentReceiverType.wx_special_merchant_number.getCode()); - receiver.setReceiverComments("手动设置收款账号"); - receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); - receiver.setPlat(EnumAppPlat.WX.getCode()); + //置空 + if (!StringUtils.isBlank(wxMerchant.getAccount())){ + if (null == wxMerchant.getIsIsv() || null == wxMerchant.getApiKey()) { + return new ResultData(ResultData.ERROR,"参数缺失"); + } + receiver = new WxProfitPaymentReceiver(); + receiver.setMerchantId(wxMerchant.getId()); + receiver.setReceiverType(EnumProfitPaymentReceiverType.wx_special_merchant_number.getCode()); + receiver.setReceiverComments("手动设置收款账号"); + receiver.setStatus(EnumProfitSharingReceiverStatus.PROFIT_SHARING_RECEIVER_STATUS_VALID.getCode()); + receiver.setPlat(EnumAppPlat.WX.getCode()); + }else { + return new ResultData(); + } + }else { + //置空,删除此收款账号 + if (StringUtils.isBlank(wxMerchant.getAccount())){ + return wxProfitPaymentReceiverService.deleteReceiver(receiver, receiver.getId()); + } } StringBuffer psb = new StringBuffer("{\"").append(Constant.paymentReceiverParamIsv).append("\":").append(wxMerchant.getIsIsv()).append(""); if (EnumYesOrNo.YES.getCode().intValue()== wxMerchant.getIsIsv().intValue()) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java index b9706818a..847bede27 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxProfitPaymentReceiverServiceImpl.java @@ -353,4 +353,10 @@ public class WxProfitPaymentReceiverServiceImpl implements WxProfitPaymentReceiv RedisCacheUtils.removeCache(paymentReceicerRedisTemplate, key); } } + + @Override + public ResultData deleteReceiver(TenantEntity tenantEntity, Long id) { + wxProfitPaymentReceiverMapper.deleteById(id); + return new ResultData(); + } } diff --git a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java index db9156400..cb41664b3 100644 --- a/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/park/pay/WxParkPayServiceImpl.java @@ -166,16 +166,18 @@ public class WxParkPayServiceImpl implements WxParkPayService { Long cUserId = null; String userPhone = null; String carNumber = null; + Integer accountType = null; String merchantAccount = null; String parkOrderNo = null; if (!StringUtils.isBlank(attach)) { String[] attrs = attach.split(","); - if (attrs.length == 5) { + if (attrs.length == 6) { cUserId = Long.parseLong(attrs[0]); userPhone = attrs[1]; carNumber = attrs[2]; - merchantAccount = attrs[3]; - parkOrderNo = attrs[4]; + accountType = Integer.parseInt(attrs[3]); + merchantAccount = attrs[4]; + parkOrderNo = attrs[5]; } } handlePaidSuccess(wxPark,cUserId,carVendor,carNumber,parkOrderNo,Integer.parseInt(cashFeeStr),