From b6bb133f198efb11c12bb27cbbeb52da1df5817c Mon Sep 17 00:00:00 2001 From: dulingling Date: Tue, 24 Nov 2020 10:46:28 +0800 Subject: [PATCH] =?UTF-8?q?Upd:=E5=BE=AE=E4=BF=A1=E6=B8=A0=E9=81=93-?= =?UTF-8?q?=E5=95=86=E6=88=B7=E8=BF=9B=E4=BB=B6=E5=8A=9F=E8=83=BD=E6=96=B0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/db/modify.sql | 39 ++- .../manage/mappers/system/ClientMapper.java | 7 + .../beans/NewSubMerchantIdApply.java | 284 ++++++++++++++++++ .../manage/merchants/core/ClientManager.java | 2 + .../core/impls/ClientManagerImpl.java | 28 ++ .../web/PartnerManageController.java | 5 + .../manage/mappers/system/ClientMapper.xml | 11 + .../static/payment/partner/partner-manage.js | 220 ++++++++++++++ .../new_apply_wx_sub_merchant_id.html | 273 +++++++++++++++++ .../AlipayOnlineRegistryTest.java | 122 ++++++++ 10 files changed, 990 insertions(+), 1 deletion(-) create mode 100644 src/main/java/au/com/royalpay/payment/manage/merchants/beans/NewSubMerchantIdApply.java create mode 100644 src/main/ui/static/payment/partner/templates/new_apply_wx_sub_merchant_id.html create mode 100644 src/test/java/au/com/royalpay/payment/manage/alipayregisty/AlipayOnlineRegistryTest.java diff --git a/src/db/modify.sql b/src/db/modify.sql index 982d51c8e..343e2d3e7 100644 --- a/src/db/modify.sql +++ b/src/db/modify.sql @@ -723,4 +723,41 @@ update pmt_custom_reports set report_serial=uuid(); alter pmt_custom_reports add PRIMARY key (report_serial); alter table sys_org add COLUMN `state` varchar(20) DEFAULT NULL COMMENT '州 (使用标准码 NSW,QLD,WA,VIC,ACT,NT,TAS,SA)'; -INSERT INTO `royalpay`.`sys_configs`(`config_key`, `config_value`, `config_desc`) VALUES ('rick_interior_send_email', 'dll19920503@qq.com', '内部调用测试发送邮箱'); \ No newline at end of file +INSERT INTO `royalpay`.`sys_configs`(`config_key`, `config_value`, `config_desc`) VALUES ('rick_interior_send_email', 'dll19920503@qq.com', '内部调用测试发送邮箱'); + +--2020-11-24微信渠道-商户进件字段添加 +alter table sys_wx_merchant_apply modify contact_phone varchar(20) not null; + +alter table sys_wx_merchant_apply + add merchant_country_code varchar(3) not null comment '商户国家编码'; + +alter table sys_wx_merchant_apply + add extra_merchant_type varchar(1) not null comment '商户类型:1.Enterprise 2.Individual'; + +alter table sys_wx_merchant_apply + add mcc_code varchar(4) not null comment 'Mcc编码'; + +alter table sys_wx_merchant_apply + add extra_reg_cer_number varchar(50) not null comment '公司注册文件编号'; + +alter table sys_wx_merchant_apply + add extra_reg_cer_exp_date varchar(10) not null comment '公司注册文件日期,格式:yyyy-MM-dd'; + +alter table sys_wx_merchant_apply + add stores_address varchar(128) not null comment '店铺地址'; + +alter table sys_wx_merchant_apply + add business_type varchar(1) not null comment '固定值为3'; + +alter table sys_wx_merchant_apply + add director_name varchar(128) null comment '董事'; + +alter table sys_wx_merchant_apply + add director_id_number varchar(128) null comment '董事身份证号'; + +alter table sys_wx_merchant_apply + add principal_name varchar(128) null comment '负责人'; + +alter table sys_wx_merchant_apply + add principal_id_number varchar(128) null comment '负责人身份证号'; + diff --git a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java index 5a6b78aeb..4756f64bf 100644 --- a/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java +++ b/src/main/java/au/com/royalpay/payment/manage/mappers/system/ClientMapper.java @@ -155,4 +155,11 @@ public interface ClientMapper { PageList listCompletedContractKycClients(JSONObject params, PageBounds pageBounds); int countKycClients(JSONObject params); + + + /** + * 半年内有交易的有效商户 + * @return + */ + List halfYearHaveTransactionClients(@Param("from") Date fromDate, @Param("to") Date toDate); } diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/beans/NewSubMerchantIdApply.java b/src/main/java/au/com/royalpay/payment/manage/merchants/beans/NewSubMerchantIdApply.java new file mode 100644 index 000000000..ed6932fb9 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/beans/NewSubMerchantIdApply.java @@ -0,0 +1,284 @@ +package au.com.royalpay.payment.manage.merchants.beans; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.annotation.JSONField; +import org.apache.commons.lang3.StringUtils; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; + +/** + * Created by yuan on 2018/1/19. + */ +public class NewSubMerchantIdApply { + + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 50) + @JSONField(name = "company_name") + private String merchant_name; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 10) + @JSONField(name = "merchant_id") + private String merchant_id; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 20) + @JSONField(name = "store_name") + private String merchant_storename; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 20) + @JSONField(name = "company_phone") + private String office_phone; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 32) + @JSONField(name = "contact_person") + private String contact_name; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 16) + private String contact_phone; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 128) + private String contact_email; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 10) + @JSONField(name = "industry") + private String business_category; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 128) + @JSONField(name = "company_website") + private String website; + + //2020-11-16 + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 10) + @JSONField(name = "merchant_type") + private String merchant_type; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(max = 4) + @JSONField(name = "mcc_code") + private String mcc_code; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(min = 4, max = 128) + @JSONField(name = "address") + private String address; + @Length(min=1 ,max = 128) + @JSONField(name = "director_name") + private String legal_director_name; + @Length(min=1 ,max = 128) + @JSONField(name = "director_id_number") + private String director_id_number; + @Length(min=1 ,max = 128) + @JSONField(name = "principal_name") + @Length(min=1 ,max = 128) + private String principal_name; + @JSONField(name = "principal_id_number") + private String principal_id_number; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(min=1 ,max = 50) + @JSONField(name = "company_register_no") + private String company_register_no; + @NotBlank(message = "error.payment.valid.param_missing") + @Length(min=1 ,max = 10) + @JSONField(name = "company_register_date") + private String company_register_date; + + public JSONObject insertObject(JSONObject client) { + JSONObject params = new JSONObject(); + if(StringUtils.isNotEmpty(merchant_name)){ + params.put("merchant_name",merchant_name); + } + if(StringUtils.isNotEmpty(merchant_storename)){ + params.put("merchant_shortname",merchant_storename); + } + if(StringUtils.isNotEmpty(office_phone)){ + params.put("office_phone",office_phone); + } + if(StringUtils.isNotEmpty(contact_name)){ + params.put("contact_name",contact_name); + } + if(StringUtils.isNotEmpty(contact_phone)){ + params.put("contact_phone",contact_phone); + } + if(StringUtils.isNotEmpty(contact_email)){ + params.put("contact_email",contact_email); + } + if(StringUtils.isNotEmpty(business_category)){ + params.put("business_category",business_category); + } + if(StringUtils.isNotEmpty(website)){ + params.put("website",website); + } + if(StringUtils.isNotEmpty(address)){ + params.put("stores_address", address); + } + if(StringUtils.isNotEmpty(company_register_no)){ + params.put("extra_reg_cer_number", company_register_no); + } + if(StringUtils.isNotEmpty(company_register_date)){ + params.put("extra_reg_cer_exp_date", company_register_date); + } + if(StringUtils.isNotEmpty(merchant_type)){ + params.put("extra_merchant_type",merchant_type); + if(StringUtils.equals("1",merchant_type)){ + params.put("director_name",legal_director_name);//董事、项目主持人 + params.put("director_id_number", director_id_number); + }else{ + params.put("principal_name",principal_name);//[企业]主要负责人 + params.put("principal_id_number",principal_id_number); + } + } + if(StringUtils.isNotEmpty(mcc_code)){ + params.put("mcc_code", mcc_code); + } + params.put("business_type","3"); + params.put("merchant_country_code","036");//固定值,036-澳大利亚国家编码 + params.put("merchant_remark",client.getString("client_moniker")); + return params; + } + + public NewSubMerchantIdApply() { + } + + public String getMerchant_name() { + return this.merchant_name; + } + + public String getMerchant_id() { + return merchant_id; + } + + public void setMerchant_id(String merchant_id) { + this.merchant_id = merchant_id; + } + + public void setMerchant_name(String merchant_name) { + this.merchant_name = merchant_name; + } + + public String getMerchant_storename() { + return this.merchant_storename; + } + + public void setMerchant_storename(String merchant_storename) { + this.merchant_storename = merchant_storename; + } + + public String getOffice_phone() { + return this.office_phone; + } + + public void setOffice_phone(String office_phone) { + this.office_phone = office_phone; + } + + public String getContact_name() { + return this.contact_name; + } + + public void setContact_name(String contact_name) { + this.contact_name = contact_name; + } + + public String getContact_phone() { + return this.contact_phone; + } + + public void setContact_phone(String contact_phone) { + this.contact_phone = contact_phone; + } + + public String getContact_email() { + return this.contact_email; + } + + public void setContact_email(String contact_email) { + this.contact_email = contact_email; + } + + public String getBusiness_category() { + return this.business_category; + } + + public void setBusiness_category(String business_category) { + this.business_category = business_category; + } + + public String getWebsite() { + return this.website; + } + + public void setWebsite(String website) { + this.website = website; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getAddress() { + return this.address; + } + + public String getMerchant_type() { + return merchant_type; + } + + public void setMerchant_type(String merchant_type) { + this.merchant_type = merchant_type; + } + + public String getLegal_director_name() { + return legal_director_name; + } + + public void setLegal_director_name(String legal_director_name) { + this.legal_director_name = legal_director_name; + } + + public String getDirector_id_number() { + return director_id_number; + } + + public void setDirector_id_number(String director_id_number) { + this.director_id_number = director_id_number; + } + + public String getPrincipal_name() { + return principal_name; + } + + public void setPrincipal_name(String principal_name) { + this.principal_name = principal_name; + } + + public String getPrincipal_id_number() { + return principal_id_number; + } + + public void setPrincipal_id_number(String principal_id_number) { + this.principal_id_number = principal_id_number; + } + + public String getMcc_code() { + return mcc_code; + } + + public void setMcc_code(String mcc_code) { + this.mcc_code = mcc_code; + } + + public String getCompany_register_no() { + return company_register_no; + } + + public void setCompany_register_no(String company_register_no) { + this.company_register_no = company_register_no; + } + + public String getCompany_register_date() { + return company_register_date; + } + + public void setCompany_register_date(String company_register_date) { + this.company_register_date = company_register_date; + } +} diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java index d8b43d483..86a7341bf 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/ClientManager.java @@ -432,6 +432,8 @@ public interface ClientManager { String subMerchantApplication(String clientMoniker, SubMerchantIdApply subMerchantApply, JSONObject manager); + String newSubMerchantApplication(String clientMoniker, NewSubMerchantIdApply subMerchantIdApply, JSONObject manager); + void registerAlipayGms(String clientMoniker, JSONObject manager); void registerAlipayOnlineGms(String clientMoniker, JSONObject manager); diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java index 9c7d68214..a222f3ef8 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/core/impls/ClientManagerImpl.java @@ -13,6 +13,7 @@ import au.com.royalpay.payment.channels.wechat.config.WechatPayEnvironment; import au.com.royalpay.payment.channels.wechat.runtime.MpPaymentApi; import au.com.royalpay.payment.channels.wechat.runtime.WxPayClient; import au.com.royalpay.payment.channels.wechat.runtime.beans.SubMerchantInfo; +import au.com.royalpay.payment.channels.wechat.runtime.beans.SubMerchantInfoInheritance; import au.com.royalpay.payment.core.PaymentChannelApi; import au.com.royalpay.payment.core.beans.EmptyMerchantApplication; import au.com.royalpay.payment.core.beans.MerchantApplicationResult; @@ -5637,6 +5638,33 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid return sub_merchant_id; } + @Override + @CacheEvict(value = ":all_sub_merchant_id_applices:", key = "#clientMoniker") + public String newSubMerchantApplication(String clientMoniker, NewSubMerchantIdApply subMerchantApply, JSONObject manager){ + JSONObject client = getClientInfoByMoniker(clientMoniker); + if (client == null) { + throw new InvalidShortIdException(); + } + checkOrgPermission(manager, client); + + JSONObject params = subMerchantApply.insertObject(client); + SubMerchantInfoInheritance subMerchantInfo = JSONObject.toJavaObject(params, SubMerchantInfoInheritance.class); + params.put("merchant_id", subMerchantApply.getMerchant_id()); + params.put("client_id", client.getString("client_id")); + params.put("create_time", new Date()); + params.put("operator", manager.getString("display_name")); + Element elem = wxPayClient.newSubMerchantApplication(subMerchantApply.getMerchant_id(), subMerchantInfo); + String sub_merchant_id = elem.elementText("sub_mch_id"); + if (StringUtils.isNotEmpty(sub_merchant_id)) { + params.put("sub_merchant_id", sub_merchant_id); + sysWxMerchantApplyMapper.insertWxMerchantApply(params); + clearCacheSubMerchantIdApplices(clientMoniker); + } else { + throw new BadRequestException(elem.elementText("return_msg")); + } + return sub_merchant_id; + } + @Override public void registerAlipayGms(String clientMoniker, JSONObject manager) { JSONObject client = getClientInfoByMoniker(clientMoniker); diff --git a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java index d1cbdc529..6f8b25dda 100644 --- a/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java +++ b/src/main/java/au/com/royalpay/payment/manage/merchants/web/PartnerManageController.java @@ -837,6 +837,11 @@ public class PartnerManageController { return clientManager.subMerchantApplication(clientMoniker, subMerchantIdApply, manager); } + @ManagerMapping(value = "/{clientMoniker}/new_sub_apply", method = RequestMethod.POST, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) + public String newSubMerchantApplication(@PathVariable String clientMoniker, @RequestBody NewSubMerchantIdApply subMerchantIdApply, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { + return clientManager.newSubMerchantApplication(clientMoniker, subMerchantIdApply, manager); + } + @ManagerMapping(value = "/{clientMoniker}/register/alipay_gms", method = RequestMethod.POST, role = {ManagerRole.OPERATOR, ManagerRole.ADMIN}) public void registerAlipayGms(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) { clientManager.registerAlipayGms(clientMoniker, manager); diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml index f312069b6..e99c35ccf 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/system/ClientMapper.xml @@ -941,4 +941,15 @@ + + diff --git a/src/main/ui/static/payment/partner/partner-manage.js b/src/main/ui/static/payment/partner/partner-manage.js index 79464cfd7..657d6ef18 100644 --- a/src/main/ui/static/payment/partner/partner-manage.js +++ b/src/main/ui/static/payment/partner/partner-manage.js @@ -80,6 +80,132 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter "value": "494" } ]; + + var newWxMerchantIndustries = [ + { + "label": "Online shopping", + "value": "648" + }, + { + "label": "Supermarket", + "value": "649" + }, + { + "label": "Convenience Store", + "value": "651" + }, + { + "label": "Duty-free Shop", + "value": "652" + }, + { + "label": "Pharmacy", + "value": "653" + }, + { + "label": "Vending Machine", + "value": "654" + }, + { + "label": "Department Store /Shopping Centre", + "value": "655" + }, + { + "label": "Food/Beverages", + "value": "656" + }, + { + "label": "Catering Services", + "value": "657" + }, + { + "label": "Furniture/Household Products", + "value": "658" + }, + { + "label": "Home Appliances/Camera Equipment/Office Equipment", + "value": "659" + }, + { + "label": "Beauty/Personal Care Products", + "value": "660" + },{ + "label": "Flowers/Plants/Interior Decorations/Decorations", + "value": "661" + }, + { + "label": "Nursery Products/Toys", + "value": "662" + }, + { + "label": "Clothing/Shoes/Other Accessories", + "value": "663" + }, + { + "label": "Sports/Fitness Equipment/Security", + "value": "664" + }, + { + "label": "Watches/Eyewear/Jewellery", + "value": "665" + }, + { + "label": "Outdoor Products /Travel Products", + "value": "666" + }, + { + "label": "Books / Records / Stationery / Musical Instruments", + "value": "667" + }, + { + "label": "Flight ticket/ticketing agent", + "value": "668" + }, + { + "label": "Sightseeing Passes", + "value": "669" + }, + { + "label": "Hotel/Resor", + "value": "670" + }, + { + "label": "Online Books/Video/Music", + "value": "671" + }, + { + "label": "Online games (Download)", + "value": "672" + }, + { + "label": "University Education", + "value": "677" + }, + { + "label": "Private hospitals/Clinics/Medical institutions", + "value": "678" + }, + { + "label": "Public hospitals/Medical Institutions", + "value": "679" + }, + { + "label": "Public transit", + "value": "680" + }, + { + "label": "Car Rental", + "value": "681" + }, + { + "label": "Logistics/ Courier Service", + "value": "684" + }, + { + "label": "Telecommunication Services", + "value": "690" + } + ]; var removeClientPayDesc = function (items, key) { for (var i = 0; i < items.length; i++) { var item = items[i]; @@ -5259,6 +5385,24 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter $scope.loadSubMerchantInfos(); }) }; + + /*$scope.applyWxSubMerchantId = function () { + $uibModal.open({ + templateUrl: '/static/payment/partner/templates/new_apply_wx_sub_merchant_id.html', + controller: 'newApplyWxSubMerchantIdCtrl', + resolve: { + subMerchantInfo: function () { + return $scope.partner; + }, + merchantIds: ['$http', '$stateParams', function ($http) { + return $http.get('/sys/partners/' + $scope.partner.client_moniker + '/get_merchant_ids'); + }] + } + }).result.then(function () { + $scope.loadSubMerchantInfos(); + }) + };*/ + $scope.applyMWSubMerchantId = function () { $http.get('/sys/partners/' + $scope.partner.client_moniker + '/query/mw_info').then(function (resp) { commonDialog.confirm({ @@ -5384,6 +5528,82 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter }) } }]); + app.controller('newApplyWxSubMerchantIdCtrl', ['$scope', '$http', '$uibModal', '$state', 'subMerchantInfo', '$filter', 'merchantIds', 'commonDialog','wechatGoodMcc', function ($scope, $http, $uibModal, $state, subMerchantInfo, $filter, merchantIds, commonDialog,wechatGoodMcc) { + $scope.wxIndustries = angular.copy(wxMerchantIndustries); + $scope.subMerchantInfo = angular.copy(subMerchantInfo); + $scope.wechatMccIndustries = wechatGoodMcc.configs(); + $scope.merchantIds = merchantIds.data; + $scope.subMerchantInfo.industry = $filter('wxindustries')($scope.subMerchantInfo.industry); + $scope.saveAppliy = function (form) { + $scope.errmsg = null; + if (form.$invalid) { + angular.forEach(form, function (item, key) { + if (key.indexOf('$') < 0) { + item.$dirty = true; + } + }); + return; + } + var merchant_type = $scope.subMerchantInfo.business_structure == 'Company'? 1:2; + var params = { + company_name : $scope.subMerchantInfo.company_name, + merchant_id : $scope.subMerchantInfo.merchant_id, + store_name : $scope.subMerchantInfo.store_name, + office_phone : $scope.subMerchantInfo.office_phone, + contact_person : $scope.subMerchantInfo.contact_person, + contact_phone : $scope.subMerchantInfo.contact_phone, + company_phone : $scope.subMerchantInfo.company_phone, + contact_email : $scope.subMerchantInfo.contact_email, + industry : $scope.subMerchantInfo.industry, + company_website : $scope.subMerchantInfo.company_website, + merchant_type: merchant_type, + mcc_code : $scope.subMerchantInfo.mcc_code, + address: $scope.subMerchantInfo.address, + company_register_no: $scope.subMerchantInfo.company_register_no, + company_register_date: $scope.subMerchantInfo.company_register_date + }; + if(merchant_type == 1){ + params.director_name = $scope.subMerchantInfo.representative_person; + params.director_id_number = $scope.subMerchantInfo.representative_person_id_number; + }else{ + params.principal_name = $scope.subMerchantInfo.marketing_person; + params.principal_id_number = $scope.subMerchantInfo.marketing_person_id_number; + } + + $http.post('/sys/partners/' + $scope.subMerchantInfo.client_moniker + '/new_sub_apply', params).then(function (resp) { + $scope.apply_sub_merchant_id = resp.data; + $scope.$close(); + if (subMerchantInfo.sub_merchant_id != null) { + commonDialog.confirm({title: 'Confirm', content: '已申请成功,是否确认使用'}).then(function () { + $http.put('/sys/partners/' + $scope.subMerchantInfo.client_moniker + '/payment_config', {sub_merchant_id: $scope.apply_sub_merchant_id}).then(function (resp) { + commonDialog.alert({ + title: 'Success', + content: 'Modify Wechat Sub Merchant ID successfully', + type: 'success' + }); + $state.reload(); + }, function (resp) { + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}) + }); + }) + } else { + $http.put('/sys/partners/' + $scope.subMerchantInfo.client_moniker + '/payment_config', {sub_merchant_id: $scope.apply_sub_merchant_id}).then(function (resp) { + commonDialog.alert({ + title: 'Success', + content: 'Apply Success And Modify Wechat Sub Merchant ID successfully', + type: 'success' + }); + $state.reload(); + }, function (resp) { + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}) + }); + } + }, function (resp) { + commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'}) + }) + } + }]); + app.controller('applyRpaySubMerchantIdCtrl', ['$scope', '$http', '$uibModal', '$state', 'subMerchantInfo', 'businessStructuresMap', '$filter', 'commonDialog', 'timezone', function ($scope, $http, $uibModal, $state, subMerchantInfo, businessStructuresMap, $filter, commonDialog, timezone) { $scope.subMerchantInfo = angular.copy(subMerchantInfo); $scope.business_structures = businessStructuresMap.configs(); diff --git a/src/main/ui/static/payment/partner/templates/new_apply_wx_sub_merchant_id.html b/src/main/ui/static/payment/partner/templates/new_apply_wx_sub_merchant_id.html new file mode 100644 index 000000000..c4d2e317b --- /dev/null +++ b/src/main/ui/static/payment/partner/templates/new_apply_wx_sub_merchant_id.html @@ -0,0 +1,273 @@ +
+
+
+
+
+
Apply Wechat Sub Merchant Id
+
+
+
+ +
+ +
+

Required Field

+

Length is more than 50

+
+
+
+ +
+ +
+ +
+

Required Field

+
+
+
+

More than 50

+
+
+ +
+ +
+ +
+

Required Field

+

Length is more than 50

+
+
+
+ +
+ +
+ +
+

Required Field

+
+
+
+

More than 50

+
+
+ +
+ +
+ +
+

Required Field

+
+
+
+
+
+ +
+ +
+

Required Field

+
+
+ +
+ +
+ +
+ +
+

Required Field

+

Length is more than 32

+
+
+
+ +
+ +
+ +
+

Required Field

+

Length is more than 16

+
+
+
+ +
+ +
+ +
+

Required Field

+

Length is more than 128

+
+
+
+ +
+ +
+ +
+

Required Field

+
+
+
+

More than 50

+
+
+ + +
+ +
+ +
+

Required Field

+

Length is more than 128

+
+
+
+ + +
+ +
+ +
+

Required Field

+

Length is more than 50

+
+
+
+ + +
+ +
+ +
+

Required Field

+

Length is more than 50

+
+
+
+ + +
+ +
+ +
+

Required Field

+

Length is more than 128

+
+
+
+ + +
+ +
+ +
+

Required Field

+

Length is more than 128

+
+
+ +
+ + +
+ +
+ +
+

Required Field

+

Length is more than 128

+
+
+
+ + +
+ +
+ +
+

Required Field

+

Length is more than 128

+
+
+
+
+
+
+ + + + + + + + +
+ +
+
+
+
+
diff --git a/src/test/java/au/com/royalpay/payment/manage/alipayregisty/AlipayOnlineRegistryTest.java b/src/test/java/au/com/royalpay/payment/manage/alipayregisty/AlipayOnlineRegistryTest.java new file mode 100644 index 000000000..9354c7bca --- /dev/null +++ b/src/test/java/au/com/royalpay/payment/manage/alipayregisty/AlipayOnlineRegistryTest.java @@ -0,0 +1,122 @@ +package au.com.royalpay.payment.manage.alipayregisty; + +import au.com.royalpay.payment.channels.alipay.config.AlipayConfig; +import au.com.royalpay.payment.channels.alipay.config.AlipayEnvironment; +import au.com.royalpay.payment.channels.alipay.runtime.AlipayClient; +import au.com.royalpay.payment.manage.mappers.system.ClientMapper; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.dom4j.Element; +import org.joda.time.DateTime; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +@SpringBootTest +@RunWith(SpringRunner.class) +public class AlipayOnlineRegistryTest { + + private Logger logger = LoggerFactory.getLogger(getClass()); + + @Resource + private ClientMapper clientMapper; + @Resource + private AlipayClient alipayClient; + int applyNum = 0; + /** + * 查询缺失字段 + * + */ + @Test + public void findMissingFields() { + ///获取近半年有效交易的商户 + Date to = new Date(); + Calendar calendar1 = Calendar.getInstance(); + calendar1.add(Calendar.MONTH, -6); + calendar1.set(Calendar.DAY_OF_MONTH,1); + Date from = calendar1.getTime(); +// List clients = clientMapper.halfYearHaveTransactionClients(from,to); + + List clients = new ArrayList<>(); + clients.add("PLPR"); + clients.add("MZZI"); + clients.add("AGSH"); + clients.add("AGBC"); + clients.add("ISKI"); + clients.add("BTGL"); + clients.add("BTVL"); + clients.add("HJCO"); + clients.add("BAOC"); + clients.add("WANR"); + clients.add("XSPL"); + clients.add("H20C"); + clients.add("SDCN"); + List result = new ArrayList<>(); + List errorClients = new ArrayList<>(); + + clients.forEach(client->{ + JSONObject clientInfo = clientMapper.findClientByMonikerAll(client); + try { + Element resultElement = alipayClient.queryOnlineGmsPortalStatus("2088821643021586", clientInfo); + if (StringUtils.equalsIgnoreCase("T", resultElement.elementText("is_success"))) { + Element responseElement = resultElement.element("response"); + Element element1 = responseElement.element("alipay"); +// if (!StringUtils.equalsIgnoreCase("SUCCESS", element1.elementText("status"))) { +// return; +// } + Element registerAddress = element1.element("register_address"); + Element registrationNo = element1.element("registration_no"); + + if (registerAddress != null && registrationNo != null) { + return; + } + + if ((clientInfo.containsKey("acn") || clientInfo.containsKey("abn")) + && clientInfo.containsKey("country") + && clientInfo.containsKey("state") + && clientInfo.containsKey("suburb") + && clientInfo.containsKey("address")) { + //重新进件 + Element applyResponse = alipayClient.registerOnlineGmsPortal("2088821643021586", clientInfo); + if(!StringUtils.equalsIgnoreCase("SUCCESS", applyResponse.element("is_success").getText())){ + logger.info("商户:"+clientInfo.getString("client_moniker")+",进件失败,失败原因:" + applyResponse.element("error").getText()); + clientInfo.put("error_message",applyResponse.elementText("result_code") + + ":" + responseElement.elementText("reject_reason")); + errorClients.add(clientInfo); + }else{ + logger.info("商户:"+clientInfo.getString("client_moniker")+",重新进件"); + + } + } else { + //打印缺失信息商户编码、所属BD + result.add(clientInfo); + } + } else { + System.out.println("非Alipay Online商户"); + } + }catch (Exception e){ + + } + }); + logger.info("重新进件商户为 "+applyNum+" 个"); + logger.info("进见调用异常商户:"+errorClients.size()); + logger.info("以下为数据缺失商户需BD补充 :"); + result.forEach(client->{ + String registrationNo = client.containsKey("acn") ? client.getString("acn"): (client.containsKey("abn") ? client.getString("abn") : "缺失"); + logger.info("商户编码===>"+client.getString("client_moniker") + + " , registration_no===>" + registrationNo + + " , register_address===>" + (client.containsKey("country") ? (client.getString("country") + " " + client.getString("state") + " " + client.getString("suburb") + " " + client.getString("address")) : "缺失" )+ + " , bd===>"+(client.containsKey("bd_user_name") ? client.getString("bd_user_name") : "-")); + }); + } +}