'完成分账'

dev-discount
= 4 years ago
parent 4dad71fdbd
commit bc9beddc90
  1. 180
      hai-cweb/src/main/java/com/cweb/controller/pay/WechatPayController.java
  2. 110
      hai-service/src/main/java/com/hai/dao/HighProfitSharingRecordMapper.java
  3. 7
      hai-service/src/main/java/com/hai/dao/HighProfitSharingRecordMapperExt.java
  4. 276
      hai-service/src/main/java/com/hai/dao/HighProfitSharingRecordSqlProvider.java
  5. 178
      hai-service/src/main/java/com/hai/entity/HighProfitSharingRecord.java
  6. 754
      hai-service/src/main/java/com/hai/entity/HighProfitSharingRecordExample.java
  7. 98
      hai-service/src/main/java/com/hai/model/ResultProfitSharing.java
  8. 12
      hai-service/src/main/java/com/hai/service/HighProfitSharingRecordService.java
  9. 20
      hai-service/src/main/java/com/hai/service/impl/HighProfitSharingRecordServiceImpl.java
  10. 133
      hai-service/src/main/java/com/hai/service/pay/impl/GoodsOrderServiceImpl.java

@ -3,6 +3,7 @@ package com.cweb.controller.pay;
import com.alibaba.fastjson.JSONObject;
import com.cweb.config.SysConst;
import com.hai.common.pay.WechatPayUtil;
import com.hai.common.pay.entity.WechatCallBackInfo;
import com.hai.common.pay.util.IOUtil;
import com.hai.common.pay.util.XmlUtil;
import com.hai.common.pay.util.sdk.WXPayConstants;
@ -10,10 +11,12 @@ import com.hai.common.utils.HttpsUtils;
import com.hai.common.utils.ResponseMsgUtil;
import com.hai.common.utils.WxUtils;
import com.hai.entity.BsCompany;
import com.hai.entity.HighProfitSharingRecord;
import com.hai.entity.SecRegion;
import com.hai.model.ResponseData;
import com.hai.model.WxSharingOrderRequestModel;
import com.hai.model.WxSharingReceiversVO;
import com.hai.service.HighProfitSharingRecordService;
import com.hai.service.pay.NotifyService;
import com.hai.service.pay.PayRecordService;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
@ -45,6 +48,7 @@ import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.security.*;
import java.util.*;
@ -64,6 +68,9 @@ public class WechatPayController {
@Resource
private WechatPayUtil wechatPayUtil;
@Resource
private HighProfitSharingRecordService highProfitSharingRecordService;
@RequestMapping(value = "/notify", method = RequestMethod.POST)
@ApiOperation(value = "微信支付 -> 异步回调")
public void wechatNotify(HttpServletRequest request, HttpServletResponse response) {
@ -102,179 +109,6 @@ public class WechatPayController {
}
}
/*@RequestMapping(value = "/testCreateOrder", method = RequestMethod.GET)
@ApiOperation(value = "微信测试 创建支付信息(发版时注释此接口)")
@ResponseBody
public SortedMap<Object, Object> testCreateOrder(@RequestParam(value = "subject", required = true) String subject,
@RequestParam(value = "orderNo", required = true) String orderNo,
@RequestParam(value = "totalPrice", required = true) Integer totalPrice,
HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
try {
String nonce_str = MD5Util.MD5Encode(String.valueOf(ThreadLocalRandom.current().nextInt(10000)), "UTF-8");
WeChatPayReqInfo weChatPayReqInfo = new WeChatPayReqInfo();
weChatPayReqInfo.setAppid(wechatConfig.getApp_id()); //公众号id
weChatPayReqInfo.setMch_id(wechatConfig.getMch_id()); //商户号
weChatPayReqInfo.setNonce_str(nonce_str); //随机字符串
weChatPayReqInfo.setBody(subject); //商品描述
weChatPayReqInfo.setOut_trade_no(orderNo); //商户订单号
weChatPayReqInfo.setTotal_fee(totalPrice); //总
weChatPayReqInfo.setSpbill_create_ip("182.43.154.4"); //终端ip
weChatPayReqInfo.setNotify_url(wechatConfig.getNotify_url()); //通知url
//weChatPayReqInfo.setTrade_type("APP"); //交易类型
weChatPayReqInfo.setTrade_type("JSAPI");
//weChatPayReqInfo.setOpenid("");
weChatPayReqInfo.setAttach("Test");
*//** 获取沙箱key start *//*
String sandboxKey = GetSignKey();
*//** 获取沙箱key end *//*
String sign = SignatureUtil.createSign(weChatPayReqInfo, sandboxKey, "UTF-8"); // 测试 todo del
weChatPayReqInfo.setSign(sign);
String unifiedXmL = XmlUtil.toSplitXml(weChatPayReqInfo);
String unifiedOrderResultXmL = HttpReqUtil.HttpsDefaultExecute("POST", wechatConfig.getUnified_order_url(), null, unifiedXmL, null);
log.error("支付信息:" + unifiedOrderResultXmL);
// 签名校验
SortedMap<Object,Object> sortedMap = null;
// 组装支付参数
WechatCallBackInfo wechatCallBackInfo = XmlUtil.getObjectFromXML(unifiedOrderResultXmL, WechatCallBackInfo.class);
Long timeStamp = System.currentTimeMillis()/1000;
sortedMap = new TreeMap<>();
sortedMap.put("appid",wechatConfig.getApp_id());
sortedMap.put("partnerid",wechatConfig.getMch_id());
sortedMap.put("prepayid",wechatCallBackInfo.getPrepay_id());
sortedMap.put("noncestr",wechatCallBackInfo.getNonce_str());
sortedMap.put("timestamp",timeStamp);
sortedMap.put("package","Sign=WXPay");
String secondSign = SignatureUtil.createSign(sortedMap, wechatConfig.getApi_key(), "UTF-8");
sortedMap.put("sign",secondSign);
return sortedMap;
} catch (Exception e) {
log.error("AlipayTest -> createOrder:生成订单错误", e);
}
return null;
}*/
/**
* @desc 获取沙箱key
*/
/*public String GetSignKey() throws Exception {
String nonce_str = WXPayUtil.generateNonceStr(); //生成随机字符
Map<String, String> param = new HashMap<>();
param.put("mch_id", wechatConfig.getMch_id()); //需要真实商户号
param.put("nonce_str", nonce_str); //随机字符
String sign = WXPayUtil.generateSignature(param, wechatConfig.getApi_key(), WXPayConstants.SignType.MD5); //通过SDK生成签名其中API_KEY为商户对应的真实密钥
param.put("sign", sign);
String xml = WXPayUtil.mapToXml(param); //将map转换为xml格式
String url = "https://api.mch.weixin.qq.com/sandboxnew/pay/getsignkey"; //沙箱密钥获取api
String signKey = HttpUtil.post(url, xml);
System.out.println("signkey+"+signKey);
Map<String, String> param1 = new HashMap<String, String>();
param1 = WXPayUtil.xmlToMap(signKey.toString());
String key = param1.get("sandbox_signkey");
return key;
}*/
@RequestMapping(value = "/wxProfitsharing", method = RequestMethod.GET)
@ApiOperation(value = "微信分账")
@ResponseBody
public ResponseData wxProfitsharing() {
try {
Map<String,String> param = new LinkedHashMap<>();
param.put("appid", "wx637bd6f7314daa46");
param.put("mch_id", "1289663601");
param.put("sub_mch_id" , "1609882817");
param.put("transaction_id" , "4200001152202106091959467542");
param.put("out_order_no" , "HF2021060901121681200");
param.put("nonce_str" , WxUtils.makeNonStr());
List<Map<String,Object>> receiversList = new ArrayList<>();
Map<String,Object> receiversMap = new LinkedHashMap<>();
receiversMap.put("type", "MERCHANT_ID");
receiversMap.put("account", "1603942866");
receiversMap.put("amount", 1);
receiversMap.put("description", "分给1603942866商户");
//receiversMap.put("name", "个体户黎杨珍");
receiversList.add(receiversMap);
param.put("receivers" , JSONObject.toJSONString(receiversList));
String signStr = WxUtils.generateSignature(param, "Skufk5oi85wDFGl888i6wsRSTkdd5df5" , WXPayConstants.SignType.HMACSHA256);
param.put("sign" , signStr);
/*String certPath = "/path/to/apiclient_cert.p12";
String post = getToken("POST", "/v3/pay/transactions/h5", JSONObject.toJSONString(param));
Map<String,Object> header = new HashMap<>();
header.put("Accept","application/json");
header.put("Authorization", "WECHATPAY2-SHA256-RSA2048 " + post);*/
//JSONObject object = HttpsUtils.doWxPost("https://api.mch.weixin.qq.com/secapi/pay/profitsharing", param, header);
//String url = "https://api.mch.weixin.qq.com/secapi/pay/profitsharing";
String xm = WxUtils.mapToXml(param);
// String rest = String.valueOf(HttpsUtils.postData(url, xm));
return ResponseMsgUtil.success(this.doRefundRequest(param.get("mch_id"),null, xm));
// return ResponseMsgUtil.success(null);
} catch (Exception e) {
log.error("CmsContentController --> getCorporateAdvertising() error!", e);
return ResponseMsgUtil.exception(e);
}
}
//微信小程序读取双向证书
private static CloseableHttpClient readCertificate(String mchId) throws Exception{
/**
* 注意PKCS12证书 是从微信商户平台-账户设置- API安全 中下载的
*/
KeyStore keyStore = KeyStore.getInstance("PKCS12");
//P12文件目录 证书路径,这里需要你自己修改,linux下还是windows下的根路径
FileInputStream instream = new FileInputStream("G:\\hurui-project/hai-parent/hai-cweb/src/main/resources/privatekey/1289663601_apiclient_cert.p12");
try {
keyStore.load(instream, "1289663601".toCharArray());//这里写密码..默认是你的MCHID
} finally {
instream.close();
}
SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, "1289663601".toCharArray()).build();//这里也是写密码的
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.getDefaultHostnameVerifier());
// Allow TLSv1 protocol only
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}
public String doRefundRequest(String mchId, String url, String data) throws Exception {
//小程序退款需要调用双向证书的认证
CloseableHttpClient httpClient = readCertificate(mchId);
try {
HttpPost httpost = new HttpPost("https://api.mch.weixin.qq.com/secapi/pay/profitsharing"); // 设置响应头信息
httpost.addHeader("Connection", "keep-alive");
httpost.addHeader("Accept", "*/*");
httpost.addHeader("Content-Type", "text/xml");
httpost.addHeader("Host", "api.mch.weixin.qq.com");
httpost.addHeader("X-Requested-With", "XMLHttpRequest");
httpost.addHeader("Cache-Control", "max-age=0");
httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
httpost.setEntity(new StringEntity(data, "UTF-8"));
CloseableHttpResponse response = httpClient.execute(httpost);
try {
HttpEntity entity = response.getEntity();
String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
EntityUtils.consume(entity);
return jsonStr;
} finally {
response.close();
}
} catch (Exception e){
throw new RuntimeException(e);
} finally {
httpClient.close();
}
}
@RequestMapping(value = "/addLedgerReceiver", method = RequestMethod.POST)
@ApiOperation(value = "微信支付 -> 添加分账接收方")
public void addLedgerReceiver(HttpServletRequest request, HttpServletResponse response) {

@ -0,0 +1,110 @@
package com.hai.dao;
import com.hai.entity.HighProfitSharingRecord;
import com.hai.entity.HighProfitSharingRecordExample;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.UpdateProvider;
import org.apache.ibatis.type.JdbcType;
import org.springframework.stereotype.Repository;
/**
*
* 代码由工具生成,请勿修改!!!
* 如果需要扩展请在其父类进行扩展
*
**/
@Repository
public interface HighProfitSharingRecordMapper extends HighProfitSharingRecordMapperExt {
@SelectProvider(type=HighProfitSharingRecordSqlProvider.class, method="countByExample")
long countByExample(HighProfitSharingRecordExample example);
@DeleteProvider(type=HighProfitSharingRecordSqlProvider.class, method="deleteByExample")
int deleteByExample(HighProfitSharingRecordExample example);
@Delete({
"delete from high_profit_sharing_record",
"where id = #{id,jdbcType=BIGINT}"
})
int deleteByPrimaryKey(Long id);
@Insert({
"insert into high_profit_sharing_record (transaction_id, out_order_no, ",
"order_id, price, ",
"content, create_time, ",
"`status`)",
"values (#{transactionId,jdbcType=VARCHAR}, #{outOrderNo,jdbcType=VARCHAR}, ",
"#{orderId,jdbcType=VARCHAR}, #{price,jdbcType=DECIMAL}, ",
"#{content,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, ",
"#{status,jdbcType=VARCHAR})"
})
@Options(useGeneratedKeys=true,keyProperty="id")
int insert(HighProfitSharingRecord record);
@InsertProvider(type=HighProfitSharingRecordSqlProvider.class, method="insertSelective")
@Options(useGeneratedKeys=true,keyProperty="id")
int insertSelective(HighProfitSharingRecord record);
@SelectProvider(type=HighProfitSharingRecordSqlProvider.class, method="selectByExample")
@Results({
@Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
@Result(column="transaction_id", property="transactionId", jdbcType=JdbcType.VARCHAR),
@Result(column="out_order_no", property="outOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="order_id", property="orderId", jdbcType=JdbcType.VARCHAR),
@Result(column="price", property="price", jdbcType=JdbcType.DECIMAL),
@Result(column="content", property="content", jdbcType=JdbcType.VARCHAR),
@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="status", property="status", jdbcType=JdbcType.VARCHAR)
})
List<HighProfitSharingRecord> selectByExample(HighProfitSharingRecordExample example);
@Select({
"select",
"id, transaction_id, out_order_no, order_id, price, content, create_time, `status`",
"from high_profit_sharing_record",
"where id = #{id,jdbcType=BIGINT}"
})
@Results({
@Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
@Result(column="transaction_id", property="transactionId", jdbcType=JdbcType.VARCHAR),
@Result(column="out_order_no", property="outOrderNo", jdbcType=JdbcType.VARCHAR),
@Result(column="order_id", property="orderId", jdbcType=JdbcType.VARCHAR),
@Result(column="price", property="price", jdbcType=JdbcType.DECIMAL),
@Result(column="content", property="content", jdbcType=JdbcType.VARCHAR),
@Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP),
@Result(column="status", property="status", jdbcType=JdbcType.VARCHAR)
})
HighProfitSharingRecord selectByPrimaryKey(Long id);
@UpdateProvider(type=HighProfitSharingRecordSqlProvider.class, method="updateByExampleSelective")
int updateByExampleSelective(@Param("record") HighProfitSharingRecord record, @Param("example") HighProfitSharingRecordExample example);
@UpdateProvider(type=HighProfitSharingRecordSqlProvider.class, method="updateByExample")
int updateByExample(@Param("record") HighProfitSharingRecord record, @Param("example") HighProfitSharingRecordExample example);
@UpdateProvider(type=HighProfitSharingRecordSqlProvider.class, method="updateByPrimaryKeySelective")
int updateByPrimaryKeySelective(HighProfitSharingRecord record);
@Update({
"update high_profit_sharing_record",
"set transaction_id = #{transactionId,jdbcType=VARCHAR},",
"out_order_no = #{outOrderNo,jdbcType=VARCHAR},",
"order_id = #{orderId,jdbcType=VARCHAR},",
"price = #{price,jdbcType=DECIMAL},",
"content = #{content,jdbcType=VARCHAR},",
"create_time = #{createTime,jdbcType=TIMESTAMP},",
"`status` = #{status,jdbcType=VARCHAR}",
"where id = #{id,jdbcType=BIGINT}"
})
int updateByPrimaryKey(HighProfitSharingRecord record);
}

@ -0,0 +1,7 @@
package com.hai.dao;
/**
* mapper扩展类
*/
public interface HighProfitSharingRecordMapperExt {
}

@ -0,0 +1,276 @@
package com.hai.dao;
import com.hai.entity.HighProfitSharingRecord;
import com.hai.entity.HighProfitSharingRecordExample.Criteria;
import com.hai.entity.HighProfitSharingRecordExample.Criterion;
import com.hai.entity.HighProfitSharingRecordExample;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.jdbc.SQL;
public class HighProfitSharingRecordSqlProvider {
public String countByExample(HighProfitSharingRecordExample example) {
SQL sql = new SQL();
sql.SELECT("count(*)").FROM("high_profit_sharing_record");
applyWhere(sql, example, false);
return sql.toString();
}
public String deleteByExample(HighProfitSharingRecordExample example) {
SQL sql = new SQL();
sql.DELETE_FROM("high_profit_sharing_record");
applyWhere(sql, example, false);
return sql.toString();
}
public String insertSelective(HighProfitSharingRecord record) {
SQL sql = new SQL();
sql.INSERT_INTO("high_profit_sharing_record");
if (record.getTransactionId() != null) {
sql.VALUES("transaction_id", "#{transactionId,jdbcType=VARCHAR}");
}
if (record.getOutOrderNo() != null) {
sql.VALUES("out_order_no", "#{outOrderNo,jdbcType=VARCHAR}");
}
if (record.getOrderId() != null) {
sql.VALUES("order_id", "#{orderId,jdbcType=VARCHAR}");
}
if (record.getPrice() != null) {
sql.VALUES("price", "#{price,jdbcType=DECIMAL}");
}
if (record.getContent() != null) {
sql.VALUES("content", "#{content,jdbcType=VARCHAR}");
}
if (record.getCreateTime() != null) {
sql.VALUES("create_time", "#{createTime,jdbcType=TIMESTAMP}");
}
if (record.getStatus() != null) {
sql.VALUES("`status`", "#{status,jdbcType=VARCHAR}");
}
return sql.toString();
}
public String selectByExample(HighProfitSharingRecordExample example) {
SQL sql = new SQL();
if (example != null && example.isDistinct()) {
sql.SELECT_DISTINCT("id");
} else {
sql.SELECT("id");
}
sql.SELECT("transaction_id");
sql.SELECT("out_order_no");
sql.SELECT("order_id");
sql.SELECT("price");
sql.SELECT("content");
sql.SELECT("create_time");
sql.SELECT("`status`");
sql.FROM("high_profit_sharing_record");
applyWhere(sql, example, false);
if (example != null && example.getOrderByClause() != null) {
sql.ORDER_BY(example.getOrderByClause());
}
return sql.toString();
}
public String updateByExampleSelective(Map<String, Object> parameter) {
HighProfitSharingRecord record = (HighProfitSharingRecord) parameter.get("record");
HighProfitSharingRecordExample example = (HighProfitSharingRecordExample) parameter.get("example");
SQL sql = new SQL();
sql.UPDATE("high_profit_sharing_record");
if (record.getId() != null) {
sql.SET("id = #{record.id,jdbcType=BIGINT}");
}
if (record.getTransactionId() != null) {
sql.SET("transaction_id = #{record.transactionId,jdbcType=VARCHAR}");
}
if (record.getOutOrderNo() != null) {
sql.SET("out_order_no = #{record.outOrderNo,jdbcType=VARCHAR}");
}
if (record.getOrderId() != null) {
sql.SET("order_id = #{record.orderId,jdbcType=VARCHAR}");
}
if (record.getPrice() != null) {
sql.SET("price = #{record.price,jdbcType=DECIMAL}");
}
if (record.getContent() != null) {
sql.SET("content = #{record.content,jdbcType=VARCHAR}");
}
if (record.getCreateTime() != null) {
sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
}
if (record.getStatus() != null) {
sql.SET("`status` = #{record.status,jdbcType=VARCHAR}");
}
applyWhere(sql, example, true);
return sql.toString();
}
public String updateByExample(Map<String, Object> parameter) {
SQL sql = new SQL();
sql.UPDATE("high_profit_sharing_record");
sql.SET("id = #{record.id,jdbcType=BIGINT}");
sql.SET("transaction_id = #{record.transactionId,jdbcType=VARCHAR}");
sql.SET("out_order_no = #{record.outOrderNo,jdbcType=VARCHAR}");
sql.SET("order_id = #{record.orderId,jdbcType=VARCHAR}");
sql.SET("price = #{record.price,jdbcType=DECIMAL}");
sql.SET("content = #{record.content,jdbcType=VARCHAR}");
sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}");
sql.SET("`status` = #{record.status,jdbcType=VARCHAR}");
HighProfitSharingRecordExample example = (HighProfitSharingRecordExample) parameter.get("example");
applyWhere(sql, example, true);
return sql.toString();
}
public String updateByPrimaryKeySelective(HighProfitSharingRecord record) {
SQL sql = new SQL();
sql.UPDATE("high_profit_sharing_record");
if (record.getTransactionId() != null) {
sql.SET("transaction_id = #{transactionId,jdbcType=VARCHAR}");
}
if (record.getOutOrderNo() != null) {
sql.SET("out_order_no = #{outOrderNo,jdbcType=VARCHAR}");
}
if (record.getOrderId() != null) {
sql.SET("order_id = #{orderId,jdbcType=VARCHAR}");
}
if (record.getPrice() != null) {
sql.SET("price = #{price,jdbcType=DECIMAL}");
}
if (record.getContent() != null) {
sql.SET("content = #{content,jdbcType=VARCHAR}");
}
if (record.getCreateTime() != null) {
sql.SET("create_time = #{createTime,jdbcType=TIMESTAMP}");
}
if (record.getStatus() != null) {
sql.SET("`status` = #{status,jdbcType=VARCHAR}");
}
sql.WHERE("id = #{id,jdbcType=BIGINT}");
return sql.toString();
}
protected void applyWhere(SQL sql, HighProfitSharingRecordExample example, boolean includeExamplePhrase) {
if (example == null) {
return;
}
String parmPhrase1;
String parmPhrase1_th;
String parmPhrase2;
String parmPhrase2_th;
String parmPhrase3;
String parmPhrase3_th;
if (includeExamplePhrase) {
parmPhrase1 = "%s #{example.oredCriteria[%d].allCriteria[%d].value}";
parmPhrase1_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
parmPhrase2 = "%s #{example.oredCriteria[%d].allCriteria[%d].value} and #{example.oredCriteria[%d].criteria[%d].secondValue}";
parmPhrase2_th = "%s #{example.oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{example.oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
parmPhrase3 = "#{example.oredCriteria[%d].allCriteria[%d].value[%d]}";
parmPhrase3_th = "#{example.oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
} else {
parmPhrase1 = "%s #{oredCriteria[%d].allCriteria[%d].value}";
parmPhrase1_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s}";
parmPhrase2 = "%s #{oredCriteria[%d].allCriteria[%d].value} and #{oredCriteria[%d].criteria[%d].secondValue}";
parmPhrase2_th = "%s #{oredCriteria[%d].allCriteria[%d].value,typeHandler=%s} and #{oredCriteria[%d].criteria[%d].secondValue,typeHandler=%s}";
parmPhrase3 = "#{oredCriteria[%d].allCriteria[%d].value[%d]}";
parmPhrase3_th = "#{oredCriteria[%d].allCriteria[%d].value[%d],typeHandler=%s}";
}
StringBuilder sb = new StringBuilder();
List<Criteria> oredCriteria = example.getOredCriteria();
boolean firstCriteria = true;
for (int i = 0; i < oredCriteria.size(); i++) {
Criteria criteria = oredCriteria.get(i);
if (criteria.isValid()) {
if (firstCriteria) {
firstCriteria = false;
} else {
sb.append(" or ");
}
sb.append('(');
List<Criterion> criterions = criteria.getAllCriteria();
boolean firstCriterion = true;
for (int j = 0; j < criterions.size(); j++) {
Criterion criterion = criterions.get(j);
if (firstCriterion) {
firstCriterion = false;
} else {
sb.append(" and ");
}
if (criterion.isNoValue()) {
sb.append(criterion.getCondition());
} else if (criterion.isSingleValue()) {
if (criterion.getTypeHandler() == null) {
sb.append(String.format(parmPhrase1, criterion.getCondition(), i, j));
} else {
sb.append(String.format(parmPhrase1_th, criterion.getCondition(), i, j,criterion.getTypeHandler()));
}
} else if (criterion.isBetweenValue()) {
if (criterion.getTypeHandler() == null) {
sb.append(String.format(parmPhrase2, criterion.getCondition(), i, j, i, j));
} else {
sb.append(String.format(parmPhrase2_th, criterion.getCondition(), i, j, criterion.getTypeHandler(), i, j, criterion.getTypeHandler()));
}
} else if (criterion.isListValue()) {
sb.append(criterion.getCondition());
sb.append(" (");
List<?> listItems = (List<?>) criterion.getValue();
boolean comma = false;
for (int k = 0; k < listItems.size(); k++) {
if (comma) {
sb.append(", ");
} else {
comma = true;
}
if (criterion.getTypeHandler() == null) {
sb.append(String.format(parmPhrase3, i, j, k));
} else {
sb.append(String.format(parmPhrase3_th, i, j, k, criterion.getTypeHandler()));
}
}
sb.append(')');
}
}
sb.append(')');
}
}
if (sb.length() > 0) {
sql.WHERE(sb.toString());
}
}
}

@ -0,0 +1,178 @@
package com.hai.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* high_profit_sharing_record
* @author
*/
/**
*
* 代码由工具生成
*
**/
public class HighProfitSharingRecord implements Serializable {
/**
* 主键ID
*/
private Long id;
/**
* 微信订单号
*/
private String transactionId;
/**
* 商户分账单号
*/
private String outOrderNo;
/**
* 微信分账单号
*/
private String orderId;
/**
* 分账金额
*/
private BigDecimal price;
/**
* 报文内容
*/
private String content;
/**
* 创建时间
*/
private Date createTime;
/**
* 状态以微信返回为准
*/
private String status;
private static final long serialVersionUID = 1L;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTransactionId() {
return transactionId;
}
public void setTransactionId(String transactionId) {
this.transactionId = transactionId;
}
public String getOutOrderNo() {
return outOrderNo;
}
public void setOutOrderNo(String outOrderNo) {
this.outOrderNo = outOrderNo;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
HighProfitSharingRecord other = (HighProfitSharingRecord) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getTransactionId() == null ? other.getTransactionId() == null : this.getTransactionId().equals(other.getTransactionId()))
&& (this.getOutOrderNo() == null ? other.getOutOrderNo() == null : this.getOutOrderNo().equals(other.getOutOrderNo()))
&& (this.getOrderId() == null ? other.getOrderId() == null : this.getOrderId().equals(other.getOrderId()))
&& (this.getPrice() == null ? other.getPrice() == null : this.getPrice().equals(other.getPrice()))
&& (this.getContent() == null ? other.getContent() == null : this.getContent().equals(other.getContent()))
&& (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
&& (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getTransactionId() == null) ? 0 : getTransactionId().hashCode());
result = prime * result + ((getOutOrderNo() == null) ? 0 : getOutOrderNo().hashCode());
result = prime * result + ((getOrderId() == null) ? 0 : getOrderId().hashCode());
result = prime * result + ((getPrice() == null) ? 0 : getPrice().hashCode());
result = prime * result + ((getContent() == null) ? 0 : getContent().hashCode());
result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", transactionId=").append(transactionId);
sb.append(", outOrderNo=").append(outOrderNo);
sb.append(", orderId=").append(orderId);
sb.append(", price=").append(price);
sb.append(", content=").append(content);
sb.append(", createTime=").append(createTime);
sb.append(", status=").append(status);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}

@ -0,0 +1,754 @@
package com.hai.entity;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class HighProfitSharingRecordExample {
protected String orderByClause;
protected boolean distinct;
protected List<Criteria> oredCriteria;
private Integer limit;
private Long offset;
public HighProfitSharingRecordExample() {
oredCriteria = new ArrayList<Criteria>();
}
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
public String getOrderByClause() {
return orderByClause;
}
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
public boolean isDistinct() {
return distinct;
}
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
public void setLimit(Integer limit) {
this.limit = limit;
}
public Integer getLimit() {
return limit;
}
public void setOffset(Long offset) {
this.offset = offset;
}
public Long getOffset() {
return offset;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
public Criteria andIdIsNull() {
addCriterion("id is null");
return (Criteria) this;
}
public Criteria andIdIsNotNull() {
addCriterion("id is not null");
return (Criteria) this;
}
public Criteria andIdEqualTo(Long value) {
addCriterion("id =", value, "id");
return (Criteria) this;
}
public Criteria andIdNotEqualTo(Long value) {
addCriterion("id <>", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThan(Long value) {
addCriterion("id >", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThanOrEqualTo(Long value) {
addCriterion("id >=", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThan(Long value) {
addCriterion("id <", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThanOrEqualTo(Long value) {
addCriterion("id <=", value, "id");
return (Criteria) this;
}
public Criteria andIdIn(List<Long> values) {
addCriterion("id in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List<Long> values) {
addCriterion("id not in", values, "id");
return (Criteria) this;
}
public Criteria andIdBetween(Long value1, Long value2) {
addCriterion("id between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andIdNotBetween(Long value1, Long value2) {
addCriterion("id not between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andTransactionIdIsNull() {
addCriterion("transaction_id is null");
return (Criteria) this;
}
public Criteria andTransactionIdIsNotNull() {
addCriterion("transaction_id is not null");
return (Criteria) this;
}
public Criteria andTransactionIdEqualTo(String value) {
addCriterion("transaction_id =", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdNotEqualTo(String value) {
addCriterion("transaction_id <>", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdGreaterThan(String value) {
addCriterion("transaction_id >", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdGreaterThanOrEqualTo(String value) {
addCriterion("transaction_id >=", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdLessThan(String value) {
addCriterion("transaction_id <", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdLessThanOrEqualTo(String value) {
addCriterion("transaction_id <=", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdLike(String value) {
addCriterion("transaction_id like", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdNotLike(String value) {
addCriterion("transaction_id not like", value, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdIn(List<String> values) {
addCriterion("transaction_id in", values, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdNotIn(List<String> values) {
addCriterion("transaction_id not in", values, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdBetween(String value1, String value2) {
addCriterion("transaction_id between", value1, value2, "transactionId");
return (Criteria) this;
}
public Criteria andTransactionIdNotBetween(String value1, String value2) {
addCriterion("transaction_id not between", value1, value2, "transactionId");
return (Criteria) this;
}
public Criteria andOutOrderNoIsNull() {
addCriterion("out_order_no is null");
return (Criteria) this;
}
public Criteria andOutOrderNoIsNotNull() {
addCriterion("out_order_no is not null");
return (Criteria) this;
}
public Criteria andOutOrderNoEqualTo(String value) {
addCriterion("out_order_no =", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoNotEqualTo(String value) {
addCriterion("out_order_no <>", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoGreaterThan(String value) {
addCriterion("out_order_no >", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoGreaterThanOrEqualTo(String value) {
addCriterion("out_order_no >=", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoLessThan(String value) {
addCriterion("out_order_no <", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoLessThanOrEqualTo(String value) {
addCriterion("out_order_no <=", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoLike(String value) {
addCriterion("out_order_no like", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoNotLike(String value) {
addCriterion("out_order_no not like", value, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoIn(List<String> values) {
addCriterion("out_order_no in", values, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoNotIn(List<String> values) {
addCriterion("out_order_no not in", values, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoBetween(String value1, String value2) {
addCriterion("out_order_no between", value1, value2, "outOrderNo");
return (Criteria) this;
}
public Criteria andOutOrderNoNotBetween(String value1, String value2) {
addCriterion("out_order_no not between", value1, value2, "outOrderNo");
return (Criteria) this;
}
public Criteria andOrderIdIsNull() {
addCriterion("order_id is null");
return (Criteria) this;
}
public Criteria andOrderIdIsNotNull() {
addCriterion("order_id is not null");
return (Criteria) this;
}
public Criteria andOrderIdEqualTo(String value) {
addCriterion("order_id =", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdNotEqualTo(String value) {
addCriterion("order_id <>", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdGreaterThan(String value) {
addCriterion("order_id >", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdGreaterThanOrEqualTo(String value) {
addCriterion("order_id >=", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdLessThan(String value) {
addCriterion("order_id <", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdLessThanOrEqualTo(String value) {
addCriterion("order_id <=", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdLike(String value) {
addCriterion("order_id like", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdNotLike(String value) {
addCriterion("order_id not like", value, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdIn(List<String> values) {
addCriterion("order_id in", values, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdNotIn(List<String> values) {
addCriterion("order_id not in", values, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdBetween(String value1, String value2) {
addCriterion("order_id between", value1, value2, "orderId");
return (Criteria) this;
}
public Criteria andOrderIdNotBetween(String value1, String value2) {
addCriterion("order_id not between", value1, value2, "orderId");
return (Criteria) this;
}
public Criteria andPriceIsNull() {
addCriterion("price is null");
return (Criteria) this;
}
public Criteria andPriceIsNotNull() {
addCriterion("price is not null");
return (Criteria) this;
}
public Criteria andPriceEqualTo(BigDecimal value) {
addCriterion("price =", value, "price");
return (Criteria) this;
}
public Criteria andPriceNotEqualTo(BigDecimal value) {
addCriterion("price <>", value, "price");
return (Criteria) this;
}
public Criteria andPriceGreaterThan(BigDecimal value) {
addCriterion("price >", value, "price");
return (Criteria) this;
}
public Criteria andPriceGreaterThanOrEqualTo(BigDecimal value) {
addCriterion("price >=", value, "price");
return (Criteria) this;
}
public Criteria andPriceLessThan(BigDecimal value) {
addCriterion("price <", value, "price");
return (Criteria) this;
}
public Criteria andPriceLessThanOrEqualTo(BigDecimal value) {
addCriterion("price <=", value, "price");
return (Criteria) this;
}
public Criteria andPriceIn(List<BigDecimal> values) {
addCriterion("price in", values, "price");
return (Criteria) this;
}
public Criteria andPriceNotIn(List<BigDecimal> values) {
addCriterion("price not in", values, "price");
return (Criteria) this;
}
public Criteria andPriceBetween(BigDecimal value1, BigDecimal value2) {
addCriterion("price between", value1, value2, "price");
return (Criteria) this;
}
public Criteria andPriceNotBetween(BigDecimal value1, BigDecimal value2) {
addCriterion("price not between", value1, value2, "price");
return (Criteria) this;
}
public Criteria andContentIsNull() {
addCriterion("content is null");
return (Criteria) this;
}
public Criteria andContentIsNotNull() {
addCriterion("content is not null");
return (Criteria) this;
}
public Criteria andContentEqualTo(String value) {
addCriterion("content =", value, "content");
return (Criteria) this;
}
public Criteria andContentNotEqualTo(String value) {
addCriterion("content <>", value, "content");
return (Criteria) this;
}
public Criteria andContentGreaterThan(String value) {
addCriterion("content >", value, "content");
return (Criteria) this;
}
public Criteria andContentGreaterThanOrEqualTo(String value) {
addCriterion("content >=", value, "content");
return (Criteria) this;
}
public Criteria andContentLessThan(String value) {
addCriterion("content <", value, "content");
return (Criteria) this;
}
public Criteria andContentLessThanOrEqualTo(String value) {
addCriterion("content <=", value, "content");
return (Criteria) this;
}
public Criteria andContentLike(String value) {
addCriterion("content like", value, "content");
return (Criteria) this;
}
public Criteria andContentNotLike(String value) {
addCriterion("content not like", value, "content");
return (Criteria) this;
}
public Criteria andContentIn(List<String> values) {
addCriterion("content in", values, "content");
return (Criteria) this;
}
public Criteria andContentNotIn(List<String> values) {
addCriterion("content not in", values, "content");
return (Criteria) this;
}
public Criteria andContentBetween(String value1, String value2) {
addCriterion("content between", value1, value2, "content");
return (Criteria) this;
}
public Criteria andContentNotBetween(String value1, String value2) {
addCriterion("content not between", value1, value2, "content");
return (Criteria) this;
}
public Criteria andCreateTimeIsNull() {
addCriterion("create_time is null");
return (Criteria) this;
}
public Criteria andCreateTimeIsNotNull() {
addCriterion("create_time is not null");
return (Criteria) this;
}
public Criteria andCreateTimeEqualTo(Date value) {
addCriterion("create_time =", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotEqualTo(Date value) {
addCriterion("create_time <>", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThan(Date value) {
addCriterion("create_time >", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) {
addCriterion("create_time >=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThan(Date value) {
addCriterion("create_time <", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeLessThanOrEqualTo(Date value) {
addCriterion("create_time <=", value, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeIn(List<Date> values) {
addCriterion("create_time in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotIn(List<Date> values) {
addCriterion("create_time not in", values, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeBetween(Date value1, Date value2) {
addCriterion("create_time between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andCreateTimeNotBetween(Date value1, Date value2) {
addCriterion("create_time not between", value1, value2, "createTime");
return (Criteria) this;
}
public Criteria andStatusIsNull() {
addCriterion("`status` is null");
return (Criteria) this;
}
public Criteria andStatusIsNotNull() {
addCriterion("`status` is not null");
return (Criteria) this;
}
public Criteria andStatusEqualTo(String value) {
addCriterion("`status` =", value, "status");
return (Criteria) this;
}
public Criteria andStatusNotEqualTo(String value) {
addCriterion("`status` <>", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThan(String value) {
addCriterion("`status` >", value, "status");
return (Criteria) this;
}
public Criteria andStatusGreaterThanOrEqualTo(String value) {
addCriterion("`status` >=", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThan(String value) {
addCriterion("`status` <", value, "status");
return (Criteria) this;
}
public Criteria andStatusLessThanOrEqualTo(String value) {
addCriterion("`status` <=", value, "status");
return (Criteria) this;
}
public Criteria andStatusLike(String value) {
addCriterion("`status` like", value, "status");
return (Criteria) this;
}
public Criteria andStatusNotLike(String value) {
addCriterion("`status` not like", value, "status");
return (Criteria) this;
}
public Criteria andStatusIn(List<String> values) {
addCriterion("`status` in", values, "status");
return (Criteria) this;
}
public Criteria andStatusNotIn(List<String> values) {
addCriterion("`status` not in", values, "status");
return (Criteria) this;
}
public Criteria andStatusBetween(String value1, String value2) {
addCriterion("`status` between", value1, value2, "status");
return (Criteria) this;
}
public Criteria andStatusNotBetween(String value1, String value2) {
addCriterion("`status` not between", value1, value2, "status");
return (Criteria) this;
}
}
/**
*/
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
public static class Criterion {
private String condition;
private Object value;
private Object secondValue;
private boolean noValue;
private boolean singleValue;
private boolean betweenValue;
private boolean listValue;
private String typeHandler;
public String getCondition() {
return condition;
}
public Object getValue() {
return value;
}
public Object getSecondValue() {
return secondValue;
}
public boolean isNoValue() {
return noValue;
}
public boolean isSingleValue() {
return singleValue;
}
public boolean isBetweenValue() {
return betweenValue;
}
public boolean isListValue() {
return listValue;
}
public String getTypeHandler() {
return typeHandler;
}
protected Criterion(String condition) {
super();
this.condition = condition;
this.typeHandler = null;
this.noValue = true;
}
protected Criterion(String condition, Object value, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.typeHandler = typeHandler;
if (value instanceof List<?>) {
this.listValue = true;
} else {
this.singleValue = true;
}
}
protected Criterion(String condition, Object value) {
this(condition, value, null);
}
protected Criterion(String condition, Object value, Object secondValue, String typeHandler) {
super();
this.condition = condition;
this.value = value;
this.secondValue = secondValue;
this.typeHandler = typeHandler;
this.betweenValue = true;
}
protected Criterion(String condition, Object value, Object secondValue) {
this(condition, value, secondValue, null);
}
}
}

@ -0,0 +1,98 @@
package com.hai.model;
/**
* 分账结果
*/
public class ResultProfitSharing {
private String return_code;
private String result_code;
private String mch_id;
private String sub_mch_id;
private String appid;
private String nonce_str;
private String sign;
private String transaction_id;
private String out_order_no;
private String order_id;
public String getReturn_code() {
return return_code;
}
public void setReturn_code(String return_code) {
this.return_code = return_code;
}
public String getResult_code() {
return result_code;
}
public void setResult_code(String result_code) {
this.result_code = result_code;
}
public String getMch_id() {
return mch_id;
}
public void setMch_id(String mch_id) {
this.mch_id = mch_id;
}
public String getSub_mch_id() {
return sub_mch_id;
}
public void setSub_mch_id(String sub_mch_id) {
this.sub_mch_id = sub_mch_id;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getNonce_str() {
return nonce_str;
}
public void setNonce_str(String nonce_str) {
this.nonce_str = nonce_str;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getTransaction_id() {
return transaction_id;
}
public void setTransaction_id(String transaction_id) {
this.transaction_id = transaction_id;
}
public String getOut_order_no() {
return out_order_no;
}
public void setOut_order_no(String out_order_no) {
this.out_order_no = out_order_no;
}
public String getOrder_id() {
return order_id;
}
public void setOrder_id(String order_id) {
this.order_id = order_id;
}
}

@ -0,0 +1,12 @@
package com.hai.service;
import com.hai.entity.HighProfitSharingRecord;
/**
* 分账记录
*/
public interface HighProfitSharingRecordService {
void insert(HighProfitSharingRecord highProfitSharingRecord);
}

@ -0,0 +1,20 @@
package com.hai.service.impl;
import com.hai.dao.HighProfitSharingRecordMapper;
import com.hai.entity.HighProfitSharingRecord;
import com.hai.service.HighProfitSharingRecordService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service("highProfitSharingRecord")
public class HighProfitSharingRecordServiceImpl implements HighProfitSharingRecordService {
@Resource
private HighProfitSharingRecordMapper highProfitSharingRecordMapper;
@Override
public void insert(HighProfitSharingRecord highProfitSharingRecord) {
highProfitSharingRecordMapper.insert(highProfitSharingRecord);
}
}

@ -1,21 +1,38 @@
package com.hai.service.pay.impl;
import com.alibaba.fastjson.JSONObject;
import com.hai.common.exception.ErrorCode;
import com.hai.common.exception.ErrorHelp;
import com.hai.common.exception.SysCode;
import com.hai.common.pay.util.XmlUtil;
import com.hai.common.pay.util.sdk.WXPayConstants;
import com.hai.common.utils.WxUtils;
import com.hai.dao.HighUserCouponMapper;
import com.hai.entity.*;
import com.hai.model.ResultProfitSharing;
import com.hai.service.*;
import com.hai.service.pay.PayService;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.net.ssl.SSLContext;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import java.security.KeyStore;
import java.util.*;
/**
* @Auther: 胡锐
@ -25,6 +42,8 @@ import java.util.Map;
@Service("goodsOrderService")
public class GoodsOrderServiceImpl implements PayService {
private static Logger log = LoggerFactory.getLogger(GoodsOrderServiceImpl.class);
@Resource
private HighOrderService highOrderService;
@ -40,6 +59,9 @@ public class GoodsOrderServiceImpl implements PayService {
@Resource
private HighUserCouponMapper highUserCouponMapper;
@Resource
private HighProfitSharingRecordService highProfitSharingRecordService;
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW)
public void paySuccess(Map<String, String> map, String payType) throws Exception {
@ -53,6 +75,7 @@ public class GoodsOrderServiceImpl implements PayService {
if (order == null) {
throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_ORDER, "");
}
if (order.getOrderStatus() == 1) {
order.setPaySerialNo(map.get("transaction_id")); // 支付流水号
order.setPayRealPrice(new BigDecimal(map.get("total_fee")).divide(new BigDecimal("100"))); // 实付金额
order.setPayTime(new Date()); // 支付时间
@ -106,6 +129,110 @@ public class GoodsOrderServiceImpl implements PayService {
highOrderService.updateOrder(order);
new Thread(() -> {
try {
Thread.sleep(60*1000);
BigDecimal rake = new BigDecimal("0.01");
BigDecimal profitSharingAmount = order.getPayRealPrice().multiply(rake);
this.wxProfitsharing(order.getPaySerialNo(),order.getOrderNo(),profitSharingAmount);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
}
public void wxProfitsharing(String transaction_id,String out_order_no, BigDecimal amount) {
try {
Map<String,String> param = new LinkedHashMap<>();
param.put("appid", "wx637bd6f7314daa46");
param.put("mch_id", "1289663601");
param.put("sub_mch_id" , "1609882817");
param.put("transaction_id" , transaction_id);
param.put("out_order_no" , out_order_no);
param.put("nonce_str" , WxUtils.makeNonStr());
// 分账金额
BigDecimal porofitSharingAmount = amount;
List<Map<String,Object>> receiversList = new ArrayList<>();
Map<String,Object> receiversMap = new LinkedHashMap<>();
receiversMap.put("type", "MERCHANT_ID");
receiversMap.put("account", "1603942866");
receiversMap.put("amount", porofitSharingAmount.multiply(new BigDecimal("100")).intValue());
receiversMap.put("description", "分给商户1603942866");
receiversList.add(receiversMap);
param.put("receivers" , JSONObject.toJSONString(receiversList));
String signStr = WxUtils.generateSignature(param, "Skufk5oi85wDFGl888i6wsRSTkdd5df5" , WXPayConstants.SignType.HMACSHA256);
param.put("sign" , signStr);
String resultXmL = this.doRefundRequest(param.get("mch_id"),null, WxUtils.mapToXml(param));
// 请求分账返回的结果
ResultProfitSharing resultProfitSharing = XmlUtil.getObjectFromXML(resultXmL, ResultProfitSharing.class);
HighProfitSharingRecord sharingRecord = new HighProfitSharingRecord();
sharingRecord.setOutOrderNo(resultProfitSharing.getOut_order_no());
sharingRecord.setTransactionId(resultProfitSharing.getTransaction_id());
sharingRecord.setOrderId(resultProfitSharing.getOrder_id());
sharingRecord.setStatus(resultProfitSharing.getResult_code());
sharingRecord.setPrice(amount);
sharingRecord.setCreateTime(new Date());
sharingRecord.setContent(resultXmL);
highProfitSharingRecordService.insert(sharingRecord);
} catch (Exception e) {
log.error("CmsContentController --> getCorporateAdvertising() error!", e);
}
}
//微信小程序读取双向证书
private static CloseableHttpClient readCertificate(String mchId) throws Exception{
/**
* 注意PKCS12证书 是从微信商户平台-账户设置- API安全 中下载的
*/
KeyStore keyStore = KeyStore.getInstance("PKCS12");
//P12文件目录 证书路径,这里需要你自己修改,linux下还是windows下的根路径
FileInputStream instream = new FileInputStream("/home/project/wx_cert/1289663601_apiclient_cert.p12");
try {
keyStore.load(instream, "1289663601".toCharArray());//这里写密码..默认是你的MCHID
} finally {
instream.close();
}
SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, "1289663601".toCharArray()).build();//这里也是写密码的
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, SSLConnectionSocketFactory.getDefaultHostnameVerifier());
// Allow TLSv1 protocol only
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}
public String doRefundRequest(String mchId, String url, String data) throws Exception {
//小程序退款需要调用双向证书的认证
CloseableHttpClient httpClient = readCertificate(mchId);
try {
HttpPost httpost = new HttpPost("https://api.mch.weixin.qq.com/secapi/pay/profitsharing"); // 设置响应头信息
httpost.addHeader("Connection", "keep-alive");
httpost.addHeader("Accept", "*/*");
httpost.addHeader("Content-Type", "text/xml");
httpost.addHeader("Host", "api.mch.weixin.qq.com");
httpost.addHeader("X-Requested-With", "XMLHttpRequest");
httpost.addHeader("Cache-Control", "max-age=0");
httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
httpost.setEntity(new StringEntity(data, "UTF-8"));
CloseableHttpResponse response = httpClient.execute(httpost);
try {
HttpEntity entity = response.getEntity();
String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
EntityUtils.consume(entity);
return jsonStr;
} finally {
response.close();
}
} catch (Exception e){
throw new RuntimeException(e);
} finally {
httpClient.close();
}
}
}

Loading…
Cancel
Save