package com.poteviohealth.ym.ipos.service.impl; import cn.hutool.core.codec.Base64Encoder; import com.poteviohealth.cgp.common.integrated.OperatorIdParams; import com.poteviohealth.cgp.common.integrated.customer.CustomerFeignClient; import com.poteviohealth.cgp.common.integrated.partner.PartnerFeignClient; import com.poteviohealth.cgp.common.model.VaultsResponse; import com.poteviohealth.ym.ipos.model.back.BaseBack; import com.poteviohealth.ym.ipos.model.merchant.*; import com.poteviohealth.ym.ipos.model.merchant.detail.*; import com.poteviohealth.ym.ipos.model.merchant.dto.ImageDto; import com.poteviohealth.ym.ipos.model.merchant.dto.UserDto; import com.poteviohealth.ym.ipos.model.merchant.back.PictureBack; import com.poteviohealth.ym.ipos.model.merchant.back.UserBack; import com.poteviohealth.ym.ipos.model.merchant.back.UserSearchBack; import com.poteviohealth.ym.ipos.service.IMerchantService; import com.poteviohealth.ym.ipos.utils.YmUtil; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; /** * 商户入驻接口实现 * @author Qin */ @Service @Log4j2 public class MerchantServiceImpl implements IMerchantService { final String SUCCESS = "0000"; @Resource private PartnerFeignClient partnerFeignClient; @Resource private CustomerFeignClient customerFeignClient; /** * 上传图片 * @param dto * @return */ @Override public VaultsResponse merchantPicture(ImageDto dto){ Picture p = new Picture(); PictureDetail detail = new PictureDetail(); detail.setType(dto.getType()); detail.setImage_name(dto.getName()); detail.setImage_content(dto.getBase64Str()); p.setMerchant_picture_request(detail); PictureBack back = (PictureBack) YmUtil.resultBack(p,new PictureBack()); if(SUCCESS.equals(back.getResult().getId())){ return VaultsResponse.success(back.getId()); } return VaultsResponse.failed(back.getResult().getComment()); } /** * 商户新增/修改开户入驻 * @param dto * @return */ @Override public VaultsResponse merchantCreateOpen(UserDto dto) { if(StringUtils.isEmpty(dto.getMerchant_id())){ //添加商户 VaultsResponse createVault = this.merchantCreate(dto); if(!createVault.validate()){ return createVault; } dto.setMerchant_id(createVault.getData()); } if(dto.getIncoming_status().equals("2")){ //修改开户/入驻信息 VaultsResponse indvmodifyVault = this.modifyVault(dto); if(!indvmodifyVault.validate()){ return indvmodifyVault; } VaultsResponse openModifyVault = this.merchantOpenModify(dto); return openModifyVault; }else{ if(dto.getIncoming_status().equals("0") || dto.getIncoming_status().equals("-1")){ //未开户或开户失败时 if(dto.getType().equals("3")){ //个人 VaultsResponse indvregisterVault = this.merchantIndvregister(dto); if(!indvregisterVault.validate()){ return indvregisterVault; } }else{ //商户 VaultsResponse entregisterVault = this.merchantEntregister(dto); if(!entregisterVault.validate()){ return entregisterVault; } } }else{ VaultsResponse indvmodifyVault = this.modifyVault(dto); if(!indvmodifyVault.validate()){ return indvmodifyVault; } } //入驻 VaultsResponse openVault = this.merchantOpen(dto); if(!openVault.validate()){ return openVault; } } return VaultsResponse.success(); } private VaultsResponse modifyVault(UserDto dto) { //修改开户信息 if(dto.getType().equals("3")){ //个人 VaultsResponse indvmodifyVault = this.merchantIndvmodify(dto); if(!indvmodifyVault.validate()){ return indvmodifyVault; } }else{ //商户 VaultsResponse entmodifyVault = this.merchantEntmodify(dto); if(!entmodifyVault.validate()){ return entmodifyVault; } } return VaultsResponse.success(); } /** * 添加分账商户 * @param dto * @return */ private VaultsResponse merchantCreate(UserDto dto) { VaultsResponse vaultsResponse = this.merchantQuery(dto.getPhone(),null); if(vaultsResponse.validate()){ String merchantId = vaultsResponse.getData().getMerchant_id(); return updateMerchantId(dto.getId(), dto.getSourceId(), merchantId); } User user = new User(); UserDetail detail = new UserDetail(); detail.setType(dto.getType()); detail.setMerchant_short_name(dto.getMerchant_short_name()); detail.setMerchant_name(dto.getMerchant_name()); detail.setPhone(dto.getPhone()); user.setMerchant_create_request(detail); UserBack back = (UserBack) YmUtil.resultBack(user,new UserBack()); if(SUCCESS.equals(back.getResult().getId())){ return updateMerchantId(dto.getId(), dto.getSourceId(), back.getMerchant_id()); } return VaultsResponse.failed(back.getResult().getComment()); } private VaultsResponse updateMerchantId(Integer id, Integer source, String merchantId) { VaultsResponse vaultsResponse = VaultsResponse.success(merchantId); OperatorIdParams operatorIdParams = new OperatorIdParams(); operatorIdParams.setOperatorId(id); operatorIdParams.setId(merchantId); operatorIdParams.setSource(source); if(source.equals(3)){ VaultsResponse cus = customerFeignClient.updateMerchantId(operatorIdParams); if(!cus.validate()){ return cus; } }else{ VaultsResponse par = partnerFeignClient.updateMerchantId(operatorIdParams); if(!par.validate()){ return par; } } return vaultsResponse; } /** * 个人分账商户开户 * @param dto * @return */ private VaultsResponse merchantIndvregister(UserDto dto){ IndvregisterAdd iAdd = new IndvregisterAdd(); IndvregisterAddDetail detail = new IndvregisterAddDetail(); detail.setMerchant_id(dto.getMerchant_id()); detail.setIdentity_begin_date(dto.getIdentity_begin_date()); if(StringUtils.isNotEmpty(dto.getIdentity_end_date())){ detail.setIdentity_end_date(dto.getIdentity_end_date()); } detail.setIdentity_validity_type(dto.getIdentity_validity_type()); detail.setContact_phone(dto.getContact_phone()); detail.setCert_photo_a(dto.getCert_photo_a()); detail.setCert_photo_b(dto.getCert_photo_b()); detail.setLegal_name(dto.getLegal_name()); detail.setIdentity_no(dto.getIdentity_no()); detail.setMerchant_name(dto.getMerchant_name()); detail.setIdentity_type(dto.getIdentity_type()); iAdd.setMerchant_indvregister_request(detail); BaseBack back = (BaseBack) YmUtil.resultBack(iAdd,new BaseBack()); if(SUCCESS.equals(back.getResult().getId())){ return VaultsResponse.success(); } return VaultsResponse.failed(back.getResult().getComment()); } /** * 个人分账商户修改 * @param dto * @return */ private VaultsResponse merchantIndvmodify(UserDto dto){ IndvregisterUpdate iUpdate = new IndvregisterUpdate(); IndvregisterUpdateDetail iUpdateDetail = new IndvregisterUpdateDetail(); iUpdateDetail.setMerchant_id(dto.getMerchant_id()); iUpdateDetail.setIdentity_begin_date(dto.getIdentity_begin_date()); if(StringUtils.isNotEmpty(dto.getIdentity_end_date())){ iUpdateDetail.setIdentity_end_date(dto.getIdentity_end_date()); } iUpdateDetail.setIdentity_validity_type(dto.getIdentity_validity_type()); iUpdateDetail.setContact_phone(dto.getContact_phone()); iUpdateDetail.setCert_photo_a(dto.getCert_photo_a()); iUpdateDetail.setCert_photo_b(dto.getCert_photo_b()); iUpdate.setMerchant_indvmodify_request(iUpdateDetail); BaseBack back = (BaseBack) YmUtil.resultBack(iUpdate,new BaseBack()); if(SUCCESS.equals(back.getResult().getId())){ return VaultsResponse.success(); } return VaultsResponse.failed(back.getResult().getComment()); } /** * 企业分账商户开户 * @param dto * @return */ private VaultsResponse merchantEntregister(UserDto dto){ EntregisterAdd iAdd = new EntregisterAdd(); EntregisterAddDetail detail = new EntregisterAddDetail(); detail.setMerchant_id(dto.getMerchant_id()); detail.setLicense_begin_date(dto.getLicense_begin_date()); if(StringUtils.isNotEmpty(dto.getLicense_end_date())){ detail.setLicense_end_date(dto.getLicense_end_date()); } detail.setLicense_validity_type(dto.getLicense_validity_type()); detail.setLicense_province_code(dto.getLicense_province_code()); detail.setLicense_city_code(dto.getLicense_city_code()); detail.setLicense_area_code(dto.getLicense_area_code()); detail.setLicense_address(dto.getLicense_address()); detail.setLegal_name(dto.getLegal_name()); detail.setIdentity_no(dto.getIdentity_no()); detail.setIdentity_begin_date(dto.getIdentity_begin_date()); if(StringUtils.isNotEmpty(dto.getIdentity_end_date())){ detail.setIdentity_end_date(dto.getIdentity_end_date()); } detail.setIdentity_validity_type(dto.getIdentity_validity_type()); detail.setContact_name(dto.getContact_name()); detail.setContact_phone(dto.getContact_phone()); detail.setLicense_photo(dto.getLicense_photo()); detail.setCert_photo_a(dto.getCert_photo_a()); detail.setCert_photo_b(dto.getCert_photo_b()); detail.setMerchant_name(dto.getMerchant_name()); detail.setLicense_code(dto.getLicense_code()); detail.setIdentity_type(dto.getIdentity_type()); iAdd.setMerchant_entregister_request(detail); BaseBack back = (BaseBack) YmUtil.resultBack(iAdd,new BaseBack()); if(SUCCESS.equals(back.getResult().getId())){ return VaultsResponse.success(); } return VaultsResponse.failed(back.getResult().getComment()); } /** * 企业分账商户修改 * @param dto * @return */ private VaultsResponse merchantEntmodify(UserDto dto){ EntregisterUpdate iUpdate = new EntregisterUpdate(); EntregisterUpdateDetail iUpdateDetail = new EntregisterUpdateDetail(); iUpdateDetail.setMerchant_id(dto.getMerchant_id()); iUpdateDetail.setLicense_begin_date(dto.getLicense_begin_date()); if(StringUtils.isNotEmpty(dto.getLicense_end_date())){ iUpdateDetail.setLicense_end_date(dto.getLicense_end_date()); } iUpdateDetail.setLicense_validity_type(dto.getLicense_validity_type()); iUpdateDetail.setLicense_province_code(dto.getLicense_province_code()); iUpdateDetail.setLicense_city_code(dto.getLicense_city_code()); iUpdateDetail.setLicense_area_code(dto.getLicense_area_code()); iUpdateDetail.setLicense_address(dto.getLicense_address()); iUpdateDetail.setLegal_name(dto.getLegal_name()); iUpdateDetail.setIdentity_no(dto.getIdentity_no()); iUpdateDetail.setIdentity_begin_date(dto.getIdentity_begin_date()); if(StringUtils.isNotEmpty(dto.getIdentity_end_date())){ iUpdateDetail.setIdentity_end_date(dto.getIdentity_end_date()); } iUpdateDetail.setIdentity_validity_type(dto.getIdentity_validity_type()); iUpdateDetail.setContact_name(dto.getContact_name()); iUpdateDetail.setContact_phone(dto.getContact_phone()); iUpdateDetail.setLicense_photo(dto.getLicense_photo()); iUpdateDetail.setCert_photo_a(dto.getCert_photo_a()); iUpdateDetail.setCert_photo_b(dto.getCert_photo_b()); iUpdate.setMerchant_entmodify_request(iUpdateDetail); BaseBack back = (BaseBack) YmUtil.resultBack(iUpdate,new BaseBack()); if(SUCCESS.equals(back.getResult().getId())){ return VaultsResponse.success(); } return VaultsResponse.failed(back.getResult().getComment()); } /** * 分账商户业务入驻 * @param dto * @return */ private VaultsResponse merchantOpen(UserDto dto){ OpenAdd openAdd = new OpenAdd(); openAdd.setMerchant_open_request(this.fill(dto)); BaseBack back = (BaseBack) YmUtil.resultBack(openAdd,new BaseBack()); if(SUCCESS.equals(back.getResult().getId())){ return VaultsResponse.success(back); } return VaultsResponse.failed(); } /** * 入驻数据填充 * @param dto * @return */ private OpenDetail fill(UserDto dto){ OpenDetail detail = new OpenDetail(); detail.setMerchant_id(dto.getMerchant_id()); detail.setSettle_type(dto.getSettle_type()); detail.setSettlement_way(dto.getSettlement_way()); detail.setWithdraw_way(dto.getWithdraw_way()); detail.setWithdraw_type(dto.getWithdraw_type()); detail.setNature_day_num(dto.getNature_day_num()); detail.setCard_no(dto.getCard_no()); detail.setParent_bank_name(dto.getParent_bank_name()); detail.setParent_bank_code(dto.getParent_bank_code()); detail.setProvince(dto.getProvince()); detail.setCity(dto.getCity()); detail.setBranch_bank_code(dto.getBranch_bank_code()); detail.setBranch_bank_name(dto.getBranch_bank_name()); detail.setSettle_photo_a(dto.getSettle_photo_a()); detail.setSettle_photo_b(dto.getSettle_photo_b()); detail.setRemained_amt(dto.getRemained_amt()); detail.setSettle_abstract(dto.getSettle_abstract()); return detail; } /** * 分账商户业务入驻修改 * @param dto * @return */ private VaultsResponse merchantOpenModify(UserDto dto){ OpenUpdate openUpdate = new OpenUpdate(); openUpdate.setMerchant_openmodify_request(this.fill(dto)); BaseBack back = (BaseBack) YmUtil.resultBack(openUpdate,new BaseBack()); if(SUCCESS.equals(back.getResult().getId())){ return VaultsResponse.success(back); } return VaultsResponse.failed(); } /** * 分账商户查询 * @param phone * @param merchantId * @return */ @Override public VaultsResponse merchantQuery(String phone, String merchantId){ UserSearch userSearch = new UserSearch(); UserSearchDetail detail = new UserSearchDetail(); detail.setPhone(phone); detail.setMerchant_id(merchantId); userSearch.setMerchant_query_request(detail); UserSearchBack back = (UserSearchBack) YmUtil.resultBack(userSearch,new UserSearchBack()); if(SUCCESS.equals(back.getResult().getId())){ return VaultsResponse.success(back); } return VaultsResponse.failed(); } }