| @@ -285,10 +285,6 @@ public class WxMerchantController extends BaseController { | |||||
| @ApiOperation("(微信)商户手填收款账号") | @ApiOperation("(微信)商户手填收款账号") | ||||
| @PostMapping("setMerchantAccount") | @PostMapping("setMerchantAccount") | ||||
| public ResultData setMerchantAccount(@RequestBody WxMerchant wxMerchant) { | 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()); | wxMerchant.updateTenantInfo(getTenantInfo()); | ||||
| return wxMerchantService.setWxMerchantAccount(wxMerchant); | return wxMerchantService.setWxMerchantAccount(wxMerchant); | ||||
| } | } | ||||
| @@ -11,6 +11,7 @@ CREATE TABLE `wx_car_pay_order` ( | |||||
| `pay_time` datetime NOT NULL COMMENT '支付时间', | `pay_time` datetime NOT NULL COMMENT '支付时间', | ||||
| `transaction_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信生成的订单号', | `transaction_id` varchar(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '微信生成的订单号', | ||||
| `park_order_no` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' 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 '商户收款账户', | `merchant_account` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户收款账户', | ||||
| `park_notify` int(1) NOT NULL DEFAULT '0' COMMENT '是否已通知车场EnumYesOrNo', | `park_notify` int(1) NOT NULL DEFAULT '0' COMMENT '是否已通知车场EnumYesOrNo', | ||||
| `notify_fail_reason` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '通知失败原因', | `notify_fail_reason` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '通知失败原因', | ||||
| @@ -478,6 +478,7 @@ public class WxCarController extends BaseController { | |||||
| String receiverAccount = null; | String receiverAccount = null; | ||||
| boolean isIsv = false; | boolean isIsv = false; | ||||
| String apiKey = null; | String apiKey = null; | ||||
| EnumCarPayAmountType amountType = null; | |||||
| WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(park.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); | WxAppinfo cAppInfo = wxAppinfoService.getCAppInfoFromRedis(park.getTenantId(), EnumPayWay.PAY_WAY_WECHAT.getPlat()); | ||||
| if(cAppInfo == null){ | if(cAppInfo == null){ | ||||
| throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未查询到C端小程序"); | throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND.getCode(),"未查询到C端小程序"); | ||||
| @@ -492,6 +493,7 @@ public class WxCarController extends BaseController { | |||||
| //查找小程序收款账户 | //查找小程序收款账户 | ||||
| receiverAccount = payAccount.getSubMchId(); | receiverAccount = payAccount.getSubMchId(); | ||||
| isIsv = true; | isIsv = true; | ||||
| amountType = EnumCarPayAmountType.PAY_ACCOUNT; | |||||
| //查询商官商户 | //查询商官商户 | ||||
| // WxMerchant adminMerchant = wxMerchantService.findAdmin(park); | // WxMerchant adminMerchant = wxMerchantService.findAdmin(park); | ||||
| // if (null == adminMerchant) { | // if (null == adminMerchant) { | ||||
| @@ -506,15 +508,19 @@ public class WxCarController extends BaseController { | |||||
| Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv); | Integer isvModel = (Integer)receiver.getReceiverParamValue(Constant.paymentReceiverParamIsv); | ||||
| if (EnumYesOrNo.YES.getCode() == isvModel) { | if (EnumYesOrNo.YES.getCode() == isvModel) { | ||||
| isIsv = true; | isIsv = true; | ||||
| amountType = EnumCarPayAmountType.CAR_ISV_MERCHANT; | |||||
| }else { | |||||
| amountType = EnumCarPayAmountType.CAR_OWN_MERCHANT; | |||||
| } | } | ||||
| apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); | apiKey = (String)receiver.getReceiverParamValue(Constant.paymentReceicerParamApiKey); | ||||
| } | } | ||||
| int rlength = receiverAccount.length(); | int rlength = receiverAccount.length(); | ||||
| //最大128 cuserId,cuserPhone,carNumber,merchantId,merchantAccount,parkOrderNo | |||||
| //最大128 cuserId,cuserPhone,carNumber,amountType,merchantAccount,parkOrderNo | |||||
| StringBuffer attachSb = new StringBuffer() | StringBuffer attachSb = new StringBuffer() | ||||
| .append(user.getUserId()).append(",") | .append(user.getUserId()).append(",") | ||||
| .append(user.getPhone()).append(",") | .append(user.getPhone()).append(",") | ||||
| .append(carNumber).append(","); | |||||
| .append(carNumber).append(",") | |||||
| .append(amountType.getCode()); | |||||
| if (rlength > 4) { | if (rlength > 4) { | ||||
| attachSb.append(receiverAccount.substring(rlength-4,rlength)).append(","); | attachSb.append(receiverAccount.substring(rlength-4,rlength)).append(","); | ||||
| }else { | }else { | ||||
| @@ -60,13 +60,16 @@ public class WxCarPayOrder extends TenantEntity { | |||||
| @Excel(name = "车场订单号", width = 20, orderNum = "9") | @Excel(name = "车场订单号", width = 20, orderNum = "9") | ||||
| @io.swagger.annotations.ApiModelProperty(value="车场订单号",name="parkOrderNo") | @io.swagger.annotations.ApiModelProperty(value="车场订单号",name="parkOrderNo") | ||||
| private String 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") | @io.swagger.annotations.ApiModelProperty(value="商户收款账户",name="merchantAccount") | ||||
| private String 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") | @io.swagger.annotations.ApiModelProperty(value="是否已通知车场EnumYesOrNo",name="parkNotify") | ||||
| private Integer parkNotify; | private Integer parkNotify; | ||||
| @Excel(name = "通知失败原因", width = 20, orderNum = "14") | |||||
| @Excel(name = "通知失败原因", width = 20, orderNum = "13") | |||||
| @io.swagger.annotations.ApiModelProperty(value="通知失败原因",name="notifyFailReason") | @io.swagger.annotations.ApiModelProperty(value="通知失败原因",name="notifyFailReason") | ||||
| private String notifyFailReason; | private String notifyFailReason; | ||||
| @io.swagger.annotations.ApiModelProperty(value="通知重试次数",name="notifyCount") | @io.swagger.annotations.ApiModelProperty(value="通知重试次数",name="notifyCount") | ||||
| @@ -2,8 +2,9 @@ package com.iformall.enums; | |||||
| public enum EnumCarPayAmountType { | 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) { | public static EnumCarPayAmountType getEnum(Integer code) { | ||||
| @@ -53,6 +53,7 @@ public interface WxProfitPaymentReceiverService { | |||||
| */ | */ | ||||
| WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity, Long merchantId, EnumAppPlat plat); | WxProfitPaymentReceiver findReceiver(TenantEntity tenantEntity, Long merchantId, EnumAppPlat plat); | ||||
| ResultData deleteReceiver(TenantEntity tenantEntity,Long id); | |||||
| ResultData updateReceiver(WxProfitPaymentReceiver receiver); | ResultData updateReceiver(WxProfitPaymentReceiver receiver); | ||||
| @@ -938,12 +938,25 @@ public class WxMerchantServiceImpl implements WxMerchantService { | |||||
| try { | try { | ||||
| WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(wxMerchant, wxMerchant.getId(),EnumAppPlat.WX); | WxProfitPaymentReceiver receiver = wxProfitPaymentReceiverService.findReceiver(wxMerchant, wxMerchant.getId(),EnumAppPlat.WX); | ||||
| if (null == receiver ) { | 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(""); | StringBuffer psb = new StringBuffer("{\"").append(Constant.paymentReceiverParamIsv).append("\":").append(wxMerchant.getIsIsv()).append(""); | ||||
| if (EnumYesOrNo.YES.getCode().intValue()== wxMerchant.getIsIsv().intValue()) { | if (EnumYesOrNo.YES.getCode().intValue()== wxMerchant.getIsIsv().intValue()) { | ||||
| @@ -353,4 +353,10 @@ public class WxProfitPaymentReceiverServiceImpl implements WxProfitPaymentReceiv | |||||
| RedisCacheUtils.removeCache(paymentReceicerRedisTemplate, key); | RedisCacheUtils.removeCache(paymentReceicerRedisTemplate, key); | ||||
| } | } | ||||
| } | } | ||||
| @Override | |||||
| public ResultData deleteReceiver(TenantEntity tenantEntity, Long id) { | |||||
| wxProfitPaymentReceiverMapper.deleteById(id); | |||||
| return new ResultData(); | |||||
| } | |||||
| } | } | ||||
| @@ -166,16 +166,18 @@ public class WxParkPayServiceImpl implements WxParkPayService { | |||||
| Long cUserId = null; | Long cUserId = null; | ||||
| String userPhone = null; | String userPhone = null; | ||||
| String carNumber = null; | String carNumber = null; | ||||
| Integer accountType = null; | |||||
| String merchantAccount = null; | String merchantAccount = null; | ||||
| String parkOrderNo = null; | String parkOrderNo = null; | ||||
| if (!StringUtils.isBlank(attach)) { | if (!StringUtils.isBlank(attach)) { | ||||
| String[] attrs = attach.split(","); | String[] attrs = attach.split(","); | ||||
| if (attrs.length == 5) { | |||||
| if (attrs.length == 6) { | |||||
| cUserId = Long.parseLong(attrs[0]); | cUserId = Long.parseLong(attrs[0]); | ||||
| userPhone = attrs[1]; | userPhone = attrs[1]; | ||||
| carNumber = attrs[2]; | 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), | handlePaidSuccess(wxPark,cUserId,carVendor,carNumber,parkOrderNo,Integer.parseInt(cashFeeStr), | ||||