MkBxUtil.java 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package com.malk.siku.utils;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.malk.utils.UtilHttp;
  4. import com.malk.utils.UtilMap;
  5. import com.malk.utils.UtilToken;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.commons.codec.digest.DigestUtils;
  8. import org.apache.commons.lang3.StringUtils;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import java.util.*;
  11. /**
  12. * 每刻报销
  13. */
  14. @Slf4j
  15. public class MkBxUtil {
  16. @Value("${mk.bx.appCode}")
  17. private final static String appCode = "AP52Y01LHHTAP9";
  18. @Value("${mk.bx.appSecret}")
  19. private final static String appSecret = "N4WuERLteAUPaWebnsHy";
  20. // private final static String host = "ng-uat.maycur.com";//测试环境
  21. private final static String host = "ng.maycur.com";//生产环境
  22. private final Object $lock = new Object[0];
  23. private static final Long EXPIRES_IN = 1800000L;
  24. public static Map initTokenHeader(){
  25. Map header = new HashMap();
  26. String tokenId = UtilToken.get("invalid-tokenId-mkbx");
  27. String entCode = UtilToken.get("invalid-entCode-mkbx");
  28. if (StringUtils.isNotBlank(tokenId) && StringUtils.isNotBlank(entCode)) {
  29. header.put("tokenId",tokenId);
  30. header.put("entCode",entCode);
  31. return header;
  32. } else {
  33. //每刻登录认证
  34. Map body = new HashMap();
  35. long timeMillis = System.currentTimeMillis();
  36. body.put("appCode",appCode);
  37. body.put("secret",getSecret(appCode,appSecret,timeMillis));
  38. body.put("timestamp",timeMillis);
  39. Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/auth/login", null, null, body));
  40. Map data = UtilMap.getMap(result, "data");
  41. tokenId = UtilMap.getString(data, "tokenId");
  42. entCode = UtilMap.getString(data, "entCode");
  43. log.info("每刻报销tokenId, {}", tokenId);
  44. log.info("每刻报销entCode, {}", entCode);
  45. UtilToken.put("invalid-tokenId-mkbx", tokenId, EXPIRES_IN);
  46. UtilToken.put("invalid-entCode-mkbx", entCode, EXPIRES_IN);
  47. header.put("tokenId",tokenId);
  48. header.put("entCode",entCode);
  49. return header;
  50. }
  51. }
  52. //保存往来单位
  53. public static Map saveTradingPartner(Object body){
  54. Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/tradingPartner/batch/save", MkBxUtil.initTokenHeader(), null, body,(Map) null));
  55. log.info("Result:{}",result);
  56. return result;
  57. }
  58. //保存往来单位账号
  59. public static Map saveAccount(Object body){
  60. Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/tradingPartner/batch/account/save", MkBxUtil.initTokenHeader(), null, body,(Map) null));
  61. log.info("Result:{}",result);
  62. return result;
  63. }
  64. //报销单导入
  65. public static Map receiveReimburse(Object body){
  66. Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/receive/reimburse", MkBxUtil.initTokenHeader(), null, body,(Map) null));
  67. log.info("Result:{}",result);
  68. return result;
  69. }
  70. //报销单费用导入
  71. public static List<String> receiveExpense(Object body){
  72. log.info("body:{}",JSONObject.toJSONString(body));
  73. Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/receive/expense", MkBxUtil.initTokenHeader(), null, body,(Map) null));
  74. log.info("Result:{}",result);
  75. Map data = UtilMap.getMap(result, "data");
  76. List<String> expenseCodes = new ArrayList<>();
  77. List<Map> successData = UtilMap.getList(data, "successData");
  78. for (Map successDatum : successData) {
  79. expenseCodes.add(UtilMap.getString(successDatum,"expenseCode"));
  80. }
  81. return expenseCodes;
  82. }
  83. //费用类型查询
  84. public static String expenseTypeSearch(Object body){
  85. log.info("body:{}",JSONObject.toJSONString(body));
  86. Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/expense/type/search", MkBxUtil.initTokenHeader(), null, body,(Map) null));
  87. log.info("Result:{}",result);
  88. List<Map> data = UtilMap.getList(result, "data");
  89. if (!data.isEmpty()){
  90. String bizCode = UtilMap.getString(data.get(0), "bizCode");
  91. return bizCode;
  92. }else {
  93. return null;
  94. }
  95. }
  96. //根据工号查询员工详情
  97. public static Map employeeDetails(Object body){
  98. log.info("body:{}",JSONObject.toJSONString(body));
  99. Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/employee/details", MkBxUtil.initTokenHeader(), null, body,(Map) null));
  100. log.info("Result:{}",result);
  101. List<Map> data = UtilMap.getList(result, "data");
  102. if (Objects.nonNull(data)){
  103. return data.get(0);
  104. }else {
  105. return null;
  106. }
  107. }
  108. private static String getSecret(String appCode, String appSecret, long timeMillis){
  109. log.info("time:{}",timeMillis);
  110. String s = DigestUtils.sha256Hex(appSecret + ":" + appCode + ":" + timeMillis);
  111. log.info("s:{}",s);
  112. return s;
  113. }
  114. }