package com.dderp.common.entity.base; import com.dderp.common.entity.site.ERPTokenUser; import com.dySweetFishPlugin.tool.crypto.EncryptUtil; import com.sweetfish.convert.json.JsonConvert; import com.sweetfish.source.PageFlipper; import com.sweetfish.util.AnyValue; import com.sweetfish.util.Comment; import org.apache.commons.lang3.StringUtils; import java.util.HashMap; import java.util.Map; public class InvokeCallParams extends BaseEntity { @Comment("业务名称") private String businessMethod; @Comment("时间戳") private String timeStamp; /** * json字符串 * 这里针对业务类的数据直接用json字符串,是当前各平台的通用做法,之前验签如果双发使用了不同的序列化工具,导致有的null的字段没有带上,序列化之后的结果会不同,验签就出现问题 * 现在直接统一Params即可 */ @Comment("参数") private String params; /** * 附加字符串,params不够用的情况下,增加附件参数 */ @Comment("附加参数") private AnyValue attach; /** * 分页对象,这里还是把分页信息从params里面拆分出来,减少脚本中转换的次数 */ @Comment("分页对象") private PageFlipper page; /** * 客户编号,由我们提供 */ @Comment("客户编号") private String clientCode; /** * md5串,字符串由 * * 组成,所有参数均使用此格式,避免扩展麻烦,至于具体的业务,则由params的json字符串定义即可 */ @Comment("md5串") private String digest; @Comment("token") private String token; //下面的字段由服务端赋值 @Comment("操作人") private ERPTokenUser currentUser; @Comment("分库") private String dataSourceId; @Comment("分表") private long supplierCode; @Comment("json转换器") private final Map jsonConvertMap = new HashMap<>(); public InvokeCallParams() { } private InvokeCallParams(Builder builder) { setBusinessMethod(builder.businessMethod); setTimeStamp(builder.timeStamp); setParams(builder.params); setAttach(builder.attach); setPage(builder.page); setClientCode(builder.clientCode); setDigest(builder.digest); setToken(builder.token); setCurrentUser(builder.currentUser); setDataSourceId(builder.dataSourceId); setSupplierCode(builder.supplierCode); } public static Builder newBuilder() { return new Builder(); } public boolean verifySign(String key) { String params = "businessMethod=" + this.businessMethod + "&clientCode=" + this.clientCode + "¶ms=" + this.params + "×tamp=" + this.timeStamp + "&key=" + key; String newDigest = EncryptUtil.md5Digest(params); return StringUtils.equals(newDigest.toUpperCase(), digest); } public InvokeCallParams generateSign(String key) { String params = "businessMethod=" + this.businessMethod + "&clientCode=" + this.clientCode + "¶ms=" + this.params + "×tamp=" + this.timeStamp + "&key=" + key; this.digest = EncryptUtil.md5Digest(params); return this; } public InvokeCallParams addConvert(String name, JsonConvert jsonConvert) { this.jsonConvertMap.put(name, jsonConvert); return this; } public String getBusinessMethod() { return businessMethod; } public void setBusinessMethod(String businessMethod) { this.businessMethod = businessMethod; } public String getTimeStamp() { return timeStamp; } public void setTimeStamp(String timeStamp) { this.timeStamp = timeStamp; } public String getParams() { return params; } public void setParams(String params) { this.params = params; } public ERPTokenUser getCurrentUser() { return currentUser; } public void setCurrentUser(ERPTokenUser currentUser) { this.currentUser = currentUser; } public String getDataSourceId() { return dataSourceId; } public void setDataSourceId(String dataSourceId) { this.dataSourceId = dataSourceId; } public long getSupplierCode() { return supplierCode; } public void setSupplierCode(long supplierCode) { this.supplierCode = supplierCode; } public Map getJsonConvertMap() { return jsonConvertMap; } public String getClientCode() { return clientCode; } public void setClientCode(String clientCode) { this.clientCode = clientCode; } public String getDigest() { return digest; } public void setDigest(String digest) { this.digest = digest; } public PageFlipper getPage() { return page; } public void setPage(PageFlipper page) { this.page = page; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } public AnyValue getAttach() { return attach; } public void setAttach(AnyValue attach) { this.attach = attach; } public static final class Builder { private String businessMethod; private String timeStamp; private String params; private AnyValue attach; private PageFlipper page; private String clientCode; private String digest; private String token; private ERPTokenUser currentUser; private String dataSourceId; private long supplierCode; private Builder() { } public Builder businessMethod(String val) { businessMethod = val; return this; } public Builder timeStamp(String val) { timeStamp = val; return this; } public Builder params(String val) { params = val; return this; } public Builder attach(AnyValue val) { attach = val; return this; } public Builder page(PageFlipper val) { page = val; return this; } public Builder clientCode(String val) { clientCode = val; return this; } public Builder digest(String val) { digest = val; return this; } public Builder token(String val) { token = val; return this; } public Builder currentUser(ERPTokenUser val) { currentUser = val; return this; } public Builder dataSourceId(String val) { dataSourceId = val; return this; } public Builder supplierCode(long val) { supplierCode = val; return this; } public InvokeCallParams build() { return new InvokeCallParams(this); } } }