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串,字符串由
*
clientCode=xxx¶ms=xxx×tamp=xxx
* 组成,所有参数均使用此格式,避免扩展麻烦,至于具体的业务,则由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);
}
}
}