package com.malk.siku.utils; import com.alibaba.fastjson.JSONObject; import com.malk.utils.UtilHttp; import com.malk.utils.UtilMap; import com.malk.utils.UtilToken; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import java.util.*; /** * 每刻报销 */ @Slf4j public class MkBxUtil { @Value("${mk.bx.appCode}") private final static String appCode = "AP52Y01LHHTAP9"; @Value("${mk.bx.appSecret}") private final static String appSecret = "N4WuERLteAUPaWebnsHy"; // private final static String host = "ng-uat.maycur.com";//测试环境 private final static String host = "ng.maycur.com";//生产环境 private final Object $lock = new Object[0]; private static final Long EXPIRES_IN = 1800000L; public static Map initTokenHeader(){ Map header = new HashMap(); String tokenId = UtilToken.get("invalid-tokenId-mkbx"); String entCode = UtilToken.get("invalid-entCode-mkbx"); if (StringUtils.isNotBlank(tokenId) && StringUtils.isNotBlank(entCode)) { header.put("tokenId",tokenId); header.put("entCode",entCode); return header; } else { //每刻登录认证 Map body = new HashMap(); long timeMillis = System.currentTimeMillis(); body.put("appCode",appCode); body.put("secret",getSecret(appCode,appSecret,timeMillis)); body.put("timestamp",timeMillis); Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/auth/login", null, null, body)); Map data = UtilMap.getMap(result, "data"); tokenId = UtilMap.getString(data, "tokenId"); entCode = UtilMap.getString(data, "entCode"); log.info("每刻报销tokenId, {}", tokenId); log.info("每刻报销entCode, {}", entCode); UtilToken.put("invalid-tokenId-mkbx", tokenId, EXPIRES_IN); UtilToken.put("invalid-entCode-mkbx", entCode, EXPIRES_IN); header.put("tokenId",tokenId); header.put("entCode",entCode); return header; } } //保存往来单位 public static Map saveTradingPartner(Object body){ Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/tradingPartner/batch/save", MkBxUtil.initTokenHeader(), null, body,(Map) null)); log.info("Result:{}",result); return result; } //保存往来单位账号 public static Map saveAccount(Object body){ Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/tradingPartner/batch/account/save", MkBxUtil.initTokenHeader(), null, body,(Map) null)); log.info("Result:{}",result); return result; } //报销单导入 public static Map receiveReimburse(Object body){ Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/receive/reimburse", MkBxUtil.initTokenHeader(), null, body,(Map) null)); log.info("Result:{}",result); return result; } //报销单费用导入 public static List receiveExpense(Object body){ log.info("body:{}",JSONObject.toJSONString(body)); Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/receive/expense", MkBxUtil.initTokenHeader(), null, body,(Map) null)); log.info("Result:{}",result); Map data = UtilMap.getMap(result, "data"); List expenseCodes = new ArrayList<>(); List successData = UtilMap.getList(data, "successData"); for (Map successDatum : successData) { expenseCodes.add(UtilMap.getString(successDatum,"expenseCode")); } return expenseCodes; } //费用类型查询 public static String expenseTypeSearch(Object body){ log.info("body:{}",JSONObject.toJSONString(body)); Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/expense/type/search", MkBxUtil.initTokenHeader(), null, body,(Map) null)); log.info("Result:{}",result); List data = UtilMap.getList(result, "data"); if (!data.isEmpty()){ String bizCode = UtilMap.getString(data.get(0), "bizCode"); return bizCode; }else { return null; } } //根据工号查询员工详情 public static Map employeeDetails(Object body){ log.info("body:{}",JSONObject.toJSONString(body)); Map result = (Map) JSONObject.parse(UtilHttp.doPost("https://" + host + "/api/openapi/employee/details", MkBxUtil.initTokenHeader(), null, body,(Map) null)); log.info("Result:{}",result); List data = UtilMap.getList(result, "data"); if (Objects.nonNull(data)){ return data.get(0); }else { return null; } } private static String getSecret(String appCode, String appSecret, long timeMillis){ log.info("time:{}",timeMillis); String s = DigestUtils.sha256Hex(appSecret + ":" + appCode + ":" + timeMillis); log.info("s:{}",s); return s; } }