MerchantServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. package com.poteviohealth.ym.ipos.service.impl;
  2. import cn.hutool.core.codec.Base64Encoder;
  3. import com.poteviohealth.cgp.common.integrated.OperatorIdParams;
  4. import com.poteviohealth.cgp.common.integrated.customer.CustomerFeignClient;
  5. import com.poteviohealth.cgp.common.integrated.partner.PartnerFeignClient;
  6. import com.poteviohealth.cgp.common.model.VaultsResponse;
  7. import com.poteviohealth.ym.ipos.model.back.BaseBack;
  8. import com.poteviohealth.ym.ipos.model.merchant.*;
  9. import com.poteviohealth.ym.ipos.model.merchant.detail.*;
  10. import com.poteviohealth.ym.ipos.model.merchant.dto.ImageDto;
  11. import com.poteviohealth.ym.ipos.model.merchant.dto.UserDto;
  12. import com.poteviohealth.ym.ipos.model.merchant.back.PictureBack;
  13. import com.poteviohealth.ym.ipos.model.merchant.back.UserBack;
  14. import com.poteviohealth.ym.ipos.model.merchant.back.UserSearchBack;
  15. import com.poteviohealth.ym.ipos.service.IMerchantService;
  16. import com.poteviohealth.ym.ipos.utils.YmUtil;
  17. import lombok.extern.log4j.Log4j2;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.apache.commons.lang3.time.DateFormatUtils;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.web.multipart.MultipartFile;
  22. import javax.annotation.Resource;
  23. import java.io.IOException;
  24. /**
  25. * 商户入驻接口实现
  26. * @author Qin
  27. */
  28. @Service
  29. @Log4j2
  30. public class MerchantServiceImpl implements IMerchantService {
  31. final String SUCCESS = "0000";
  32. @Resource
  33. private PartnerFeignClient partnerFeignClient;
  34. @Resource
  35. private CustomerFeignClient customerFeignClient;
  36. /**
  37. * 上传图片
  38. * @param dto
  39. * @return
  40. */
  41. @Override
  42. public VaultsResponse merchantPicture(ImageDto dto){
  43. Picture p = new Picture();
  44. PictureDetail detail = new PictureDetail();
  45. detail.setType(dto.getType());
  46. detail.setImage_name(dto.getName());
  47. detail.setImage_content(dto.getBase64Str());
  48. p.setMerchant_picture_request(detail);
  49. PictureBack back = (PictureBack) YmUtil.resultBack(p,new PictureBack());
  50. if(SUCCESS.equals(back.getResult().getId())){
  51. return VaultsResponse.success(back.getId());
  52. }
  53. return VaultsResponse.failed(back.getResult().getComment());
  54. }
  55. /**
  56. * 商户新增/修改开户入驻
  57. * @param dto
  58. * @return
  59. */
  60. @Override
  61. public VaultsResponse merchantCreateOpen(UserDto dto) {
  62. if(StringUtils.isEmpty(dto.getMerchant_id())){
  63. //添加商户
  64. VaultsResponse<String> createVault = this.merchantCreate(dto);
  65. if(!createVault.validate()){
  66. return createVault;
  67. }
  68. dto.setMerchant_id(createVault.getData());
  69. }
  70. if(dto.getIncoming_status().equals("2")){
  71. //修改开户/入驻信息
  72. VaultsResponse<String> indvmodifyVault = this.modifyVault(dto);
  73. if(!indvmodifyVault.validate()){
  74. return indvmodifyVault;
  75. }
  76. VaultsResponse<String> openModifyVault = this.merchantOpenModify(dto);
  77. return openModifyVault;
  78. }else{
  79. if(dto.getIncoming_status().equals("0") || dto.getIncoming_status().equals("-1")){
  80. //未开户或开户失败时
  81. if(dto.getType().equals("3")){
  82. //个人
  83. VaultsResponse<String> indvregisterVault = this.merchantIndvregister(dto);
  84. if(!indvregisterVault.validate()){
  85. return indvregisterVault;
  86. }
  87. }else{
  88. //商户
  89. VaultsResponse<String> entregisterVault = this.merchantEntregister(dto);
  90. if(!entregisterVault.validate()){
  91. return entregisterVault;
  92. }
  93. }
  94. }else{
  95. VaultsResponse<String> indvmodifyVault = this.modifyVault(dto);
  96. if(!indvmodifyVault.validate()){
  97. return indvmodifyVault;
  98. }
  99. }
  100. //入驻
  101. VaultsResponse<String> openVault = this.merchantOpen(dto);
  102. if(!openVault.validate()){
  103. return openVault;
  104. }
  105. }
  106. return VaultsResponse.success();
  107. }
  108. private VaultsResponse<String> modifyVault(UserDto dto) {
  109. //修改开户信息
  110. if(dto.getType().equals("3")){
  111. //个人
  112. VaultsResponse<String> indvmodifyVault = this.merchantIndvmodify(dto);
  113. if(!indvmodifyVault.validate()){
  114. return indvmodifyVault;
  115. }
  116. }else{
  117. //商户
  118. VaultsResponse<String> entmodifyVault = this.merchantEntmodify(dto);
  119. if(!entmodifyVault.validate()){
  120. return entmodifyVault;
  121. }
  122. }
  123. return VaultsResponse.success();
  124. }
  125. /**
  126. * 添加分账商户
  127. * @param dto
  128. * @return
  129. */
  130. private VaultsResponse merchantCreate(UserDto dto) {
  131. VaultsResponse<UserSearchBack> vaultsResponse = this.merchantQuery(dto.getPhone(),null);
  132. if(vaultsResponse.validate()){
  133. String merchantId = vaultsResponse.getData().getMerchant_id();
  134. return updateMerchantId(dto.getId(), dto.getSourceId(), merchantId);
  135. }
  136. User user = new User();
  137. UserDetail detail = new UserDetail();
  138. detail.setType(dto.getType());
  139. detail.setMerchant_short_name(dto.getMerchant_short_name());
  140. detail.setMerchant_name(dto.getMerchant_name());
  141. detail.setPhone(dto.getPhone());
  142. user.setMerchant_create_request(detail);
  143. UserBack back = (UserBack) YmUtil.resultBack(user,new UserBack());
  144. if(SUCCESS.equals(back.getResult().getId())){
  145. return updateMerchantId(dto.getId(), dto.getSourceId(), back.getMerchant_id());
  146. }
  147. return VaultsResponse.failed(back.getResult().getComment());
  148. }
  149. private VaultsResponse updateMerchantId(Integer id, Integer source, String merchantId) {
  150. VaultsResponse vaultsResponse = VaultsResponse.success(merchantId);
  151. OperatorIdParams operatorIdParams = new OperatorIdParams();
  152. operatorIdParams.setOperatorId(id);
  153. operatorIdParams.setId(merchantId);
  154. operatorIdParams.setSource(source);
  155. if(source.equals(3)){
  156. VaultsResponse cus = customerFeignClient.updateMerchantId(operatorIdParams);
  157. if(!cus.validate()){
  158. return cus;
  159. }
  160. }else{
  161. VaultsResponse par = partnerFeignClient.updateMerchantId(operatorIdParams);
  162. if(!par.validate()){
  163. return par;
  164. }
  165. }
  166. return vaultsResponse;
  167. }
  168. /**
  169. * 个人分账商户开户
  170. * @param dto
  171. * @return
  172. */
  173. private VaultsResponse merchantIndvregister(UserDto dto){
  174. IndvregisterAdd iAdd = new IndvregisterAdd();
  175. IndvregisterAddDetail detail = new IndvregisterAddDetail();
  176. detail.setMerchant_id(dto.getMerchant_id());
  177. detail.setIdentity_begin_date(dto.getIdentity_begin_date());
  178. if(StringUtils.isNotEmpty(dto.getIdentity_end_date())){
  179. detail.setIdentity_end_date(dto.getIdentity_end_date());
  180. }
  181. detail.setIdentity_validity_type(dto.getIdentity_validity_type());
  182. detail.setContact_phone(dto.getContact_phone());
  183. detail.setCert_photo_a(dto.getCert_photo_a());
  184. detail.setCert_photo_b(dto.getCert_photo_b());
  185. detail.setLegal_name(dto.getLegal_name());
  186. detail.setIdentity_no(dto.getIdentity_no());
  187. detail.setMerchant_name(dto.getMerchant_name());
  188. detail.setIdentity_type(dto.getIdentity_type());
  189. iAdd.setMerchant_indvregister_request(detail);
  190. BaseBack back = (BaseBack) YmUtil.resultBack(iAdd,new BaseBack());
  191. if(SUCCESS.equals(back.getResult().getId())){
  192. return VaultsResponse.success();
  193. }
  194. return VaultsResponse.failed(back.getResult().getComment());
  195. }
  196. /**
  197. * 个人分账商户修改
  198. * @param dto
  199. * @return
  200. */
  201. private VaultsResponse merchantIndvmodify(UserDto dto){
  202. IndvregisterUpdate iUpdate = new IndvregisterUpdate();
  203. IndvregisterUpdateDetail iUpdateDetail = new IndvregisterUpdateDetail();
  204. iUpdateDetail.setMerchant_id(dto.getMerchant_id());
  205. iUpdateDetail.setIdentity_begin_date(dto.getIdentity_begin_date());
  206. if(StringUtils.isNotEmpty(dto.getIdentity_end_date())){
  207. iUpdateDetail.setIdentity_end_date(dto.getIdentity_end_date());
  208. }
  209. iUpdateDetail.setIdentity_validity_type(dto.getIdentity_validity_type());
  210. iUpdateDetail.setContact_phone(dto.getContact_phone());
  211. iUpdateDetail.setCert_photo_a(dto.getCert_photo_a());
  212. iUpdateDetail.setCert_photo_b(dto.getCert_photo_b());
  213. iUpdate.setMerchant_indvmodify_request(iUpdateDetail);
  214. BaseBack back = (BaseBack) YmUtil.resultBack(iUpdate,new BaseBack());
  215. if(SUCCESS.equals(back.getResult().getId())){
  216. return VaultsResponse.success();
  217. }
  218. return VaultsResponse.failed(back.getResult().getComment());
  219. }
  220. /**
  221. * 企业分账商户开户
  222. * @param dto
  223. * @return
  224. */
  225. private VaultsResponse merchantEntregister(UserDto dto){
  226. EntregisterAdd iAdd = new EntregisterAdd();
  227. EntregisterAddDetail detail = new EntregisterAddDetail();
  228. detail.setMerchant_id(dto.getMerchant_id());
  229. detail.setLicense_begin_date(dto.getLicense_begin_date());
  230. if(StringUtils.isNotEmpty(dto.getLicense_end_date())){
  231. detail.setLicense_end_date(dto.getLicense_end_date());
  232. }
  233. detail.setLicense_validity_type(dto.getLicense_validity_type());
  234. detail.setLicense_province_code(dto.getLicense_province_code());
  235. detail.setLicense_city_code(dto.getLicense_city_code());
  236. detail.setLicense_area_code(dto.getLicense_area_code());
  237. detail.setLicense_address(dto.getLicense_address());
  238. detail.setLegal_name(dto.getLegal_name());
  239. detail.setIdentity_no(dto.getIdentity_no());
  240. detail.setIdentity_begin_date(dto.getIdentity_begin_date());
  241. if(StringUtils.isNotEmpty(dto.getIdentity_end_date())){
  242. detail.setIdentity_end_date(dto.getIdentity_end_date());
  243. }
  244. detail.setIdentity_validity_type(dto.getIdentity_validity_type());
  245. detail.setContact_name(dto.getContact_name());
  246. detail.setContact_phone(dto.getContact_phone());
  247. detail.setLicense_photo(dto.getLicense_photo());
  248. detail.setCert_photo_a(dto.getCert_photo_a());
  249. detail.setCert_photo_b(dto.getCert_photo_b());
  250. detail.setMerchant_name(dto.getMerchant_name());
  251. detail.setLicense_code(dto.getLicense_code());
  252. detail.setIdentity_type(dto.getIdentity_type());
  253. iAdd.setMerchant_entregister_request(detail);
  254. BaseBack back = (BaseBack) YmUtil.resultBack(iAdd,new BaseBack());
  255. if(SUCCESS.equals(back.getResult().getId())){
  256. return VaultsResponse.success();
  257. }
  258. return VaultsResponse.failed(back.getResult().getComment());
  259. }
  260. /**
  261. * 企业分账商户修改
  262. * @param dto
  263. * @return
  264. */
  265. private VaultsResponse merchantEntmodify(UserDto dto){
  266. EntregisterUpdate iUpdate = new EntregisterUpdate();
  267. EntregisterUpdateDetail iUpdateDetail = new EntregisterUpdateDetail();
  268. iUpdateDetail.setMerchant_id(dto.getMerchant_id());
  269. iUpdateDetail.setLicense_begin_date(dto.getLicense_begin_date());
  270. if(StringUtils.isNotEmpty(dto.getLicense_end_date())){
  271. iUpdateDetail.setLicense_end_date(dto.getLicense_end_date());
  272. }
  273. iUpdateDetail.setLicense_validity_type(dto.getLicense_validity_type());
  274. iUpdateDetail.setLicense_province_code(dto.getLicense_province_code());
  275. iUpdateDetail.setLicense_city_code(dto.getLicense_city_code());
  276. iUpdateDetail.setLicense_area_code(dto.getLicense_area_code());
  277. iUpdateDetail.setLicense_address(dto.getLicense_address());
  278. iUpdateDetail.setLegal_name(dto.getLegal_name());
  279. iUpdateDetail.setIdentity_no(dto.getIdentity_no());
  280. iUpdateDetail.setIdentity_begin_date(dto.getIdentity_begin_date());
  281. if(StringUtils.isNotEmpty(dto.getIdentity_end_date())){
  282. iUpdateDetail.setIdentity_end_date(dto.getIdentity_end_date());
  283. }
  284. iUpdateDetail.setIdentity_validity_type(dto.getIdentity_validity_type());
  285. iUpdateDetail.setContact_name(dto.getContact_name());
  286. iUpdateDetail.setContact_phone(dto.getContact_phone());
  287. iUpdateDetail.setLicense_photo(dto.getLicense_photo());
  288. iUpdateDetail.setCert_photo_a(dto.getCert_photo_a());
  289. iUpdateDetail.setCert_photo_b(dto.getCert_photo_b());
  290. iUpdate.setMerchant_entmodify_request(iUpdateDetail);
  291. BaseBack back = (BaseBack) YmUtil.resultBack(iUpdate,new BaseBack());
  292. if(SUCCESS.equals(back.getResult().getId())){
  293. return VaultsResponse.success();
  294. }
  295. return VaultsResponse.failed(back.getResult().getComment());
  296. }
  297. /**
  298. * 分账商户业务入驻
  299. * @param dto
  300. * @return
  301. */
  302. private VaultsResponse merchantOpen(UserDto dto){
  303. OpenAdd openAdd = new OpenAdd();
  304. openAdd.setMerchant_open_request(this.fill(dto));
  305. BaseBack back = (BaseBack) YmUtil.resultBack(openAdd,new BaseBack());
  306. if(SUCCESS.equals(back.getResult().getId())){
  307. return VaultsResponse.success(back);
  308. }
  309. return VaultsResponse.failed();
  310. }
  311. /**
  312. * 入驻数据填充
  313. * @param dto
  314. * @return
  315. */
  316. private OpenDetail fill(UserDto dto){
  317. OpenDetail detail = new OpenDetail();
  318. detail.setMerchant_id(dto.getMerchant_id());
  319. detail.setSettle_type(dto.getSettle_type());
  320. detail.setSettlement_way(dto.getSettlement_way());
  321. detail.setWithdraw_way(dto.getWithdraw_way());
  322. detail.setWithdraw_type(dto.getWithdraw_type());
  323. detail.setNature_day_num(dto.getNature_day_num());
  324. detail.setCard_no(dto.getCard_no());
  325. detail.setParent_bank_name(dto.getParent_bank_name());
  326. detail.setParent_bank_code(dto.getParent_bank_code());
  327. detail.setProvince(dto.getProvince());
  328. detail.setCity(dto.getCity());
  329. detail.setBranch_bank_code(dto.getBranch_bank_code());
  330. detail.setBranch_bank_name(dto.getBranch_bank_name());
  331. detail.setSettle_photo_a(dto.getSettle_photo_a());
  332. detail.setSettle_photo_b(dto.getSettle_photo_b());
  333. detail.setRemained_amt(dto.getRemained_amt());
  334. detail.setSettle_abstract(dto.getSettle_abstract());
  335. return detail;
  336. }
  337. /**
  338. * 分账商户业务入驻修改
  339. * @param dto
  340. * @return
  341. */
  342. private VaultsResponse merchantOpenModify(UserDto dto){
  343. OpenUpdate openUpdate = new OpenUpdate();
  344. openUpdate.setMerchant_openmodify_request(this.fill(dto));
  345. BaseBack back = (BaseBack) YmUtil.resultBack(openUpdate,new BaseBack());
  346. if(SUCCESS.equals(back.getResult().getId())){
  347. return VaultsResponse.success(back);
  348. }
  349. return VaultsResponse.failed();
  350. }
  351. /**
  352. * 分账商户查询
  353. * @param phone
  354. * @param merchantId
  355. * @return
  356. */
  357. @Override
  358. public VaultsResponse<UserSearchBack> merchantQuery(String phone, String merchantId){
  359. UserSearch userSearch = new UserSearch();
  360. UserSearchDetail detail = new UserSearchDetail();
  361. detail.setPhone(phone);
  362. detail.setMerchant_id(merchantId);
  363. userSearch.setMerchant_query_request(detail);
  364. UserSearchBack back = (UserSearchBack) YmUtil.resultBack(userSearch,new UserSearchBack());
  365. if(SUCCESS.equals(back.getResult().getId())){
  366. return VaultsResponse.success(back);
  367. }
  368. return VaultsResponse.failed();
  369. }
  370. }