Commit 9da0047a by Java-聂换换

费率修改

parent cdd88e7c
......@@ -55,6 +55,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<downloadSources>true</downloadSources>
<httpclient.version>4.5</httpclient.version>
</properties>
<!-- 设定主仓库,按设定顺序进行查找。 -->
......@@ -641,6 +642,13 @@
<artifactId>json-lib</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
</dependencies>
<build>
......
package com.thinkgem.jeesite.common.constant;
import com.thinkgem.jeesite.common.config.Global;
import java.text.SimpleDateFormat;
/**
......@@ -57,4 +59,21 @@ public class ComCode {
public static final String STATUS_CODE_4009_DESC = "验证码已过期";
public static final String STATUS_CODE_4010 = "4010";
public static final String STATUS_CODE_4010_DESC = "验证码场景错误";
/**
* payChannel 通道
*/
public static final String PAYCHANNEL_HL1 = "quick_no_integral";
public static final String PAYCHANNEL_HL2 = "quick_jfen";
public static final String PAYCHANNEL_HL3 = "quick_integral";
public static final String PAYCHANNEL_HUANQIUHUIJU = "quick_huanqiuhuiju";
public static final String HOST = "http://pay.hezhongpay.com"; // 请求地址
public static final String JFEN_MERCHANT_ID = Global.getConfig("pay.jfen.merchant_id"); // 商户号
public static final String JFEN_MERCHANT_KEY = Global.getConfig("pay.jfen.merchant.key");//"670993bf-dd22-4464-9d81-69595d36b794"; // 商户key
public static final String JFEN_MERCHANT_SECRET = Global.getConfig("pay.jfen.merchant.secret");//"289ada73-27db-49e0-b2ad-3ae1613a665a"; // 商户sescet
//商户入网
public static final String JFEN_MICRO_HANDLE_URL="/merchant/handle";
}
......@@ -3,6 +3,7 @@ package com.thinkgem.jeesite.modules.youka.dao;
import com.thinkgem.jeesite.common.persistence.CrudDao;
import com.thinkgem.jeesite.common.persistence.annotation.MyBatisDao;
import com.thinkgem.jeesite.modules.cms.entity.Article;
import com.thinkgem.jeesite.modules.youka.entity.UserSubMchId;
import com.thinkgem.jeesite.modules.youka.entity.YoukaUser;
import java.util.List;
......@@ -21,4 +22,7 @@ public interface YoukaUserDao extends CrudDao<YoukaUser> {
public YoukaUser checkMobile(YoukaUser youkaUser);
// 根据通道获取Submchid
public List<UserSubMchId> getUserSubmchid(UserSubMchId userSubMchId);
}
package com.thinkgem.jeesite.modules.youka.dto;
/**
* 快捷支付
*/
public class ApiQuickPayDto extends MerchantDto {
private String name;//商户展示名称
private String body;//商品名称
private String url;//快捷返回地址
private String notifyUrl;//通知地址
private String frontUrl;//前台地址
private Long amount;//金额 统一用分
private Integer type;//交易类型
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getNotifyUrl() {
return notifyUrl;
}
public void setNotifyUrl(String notifyUrl) {
this.notifyUrl = notifyUrl;
}
public String getFrontUrl() {
return frontUrl;
}
public void setFrontUrl(String frontUrl) {
this.frontUrl = frontUrl;
}
public Long getAmount() {
return amount;
}
public void setAmount(Long amount) {
this.amount = amount;
}
}
package com.thinkgem.jeesite.modules.youka.dto;
/**
* 平台交易公共属性
*/
public class CommonDto implements java.io.Serializable {
private String orderId;//平台订单号
private String merchantId;//商户id
private String merchantKey;//商户密钥
private Long timestamp;//时间戳
private Long amount;//金额 统一用分
private String sign;//签名
private String notifyUrl ;//通知地址
private String frontUrl ;//前台地址
private String productName;//商品名称
private Integer type;//交易类型
private Integer settleType;//结算类型
private String url;//多功能
private String msg;//响应消息
private String code;//响应码
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getFrontUrl() {
return frontUrl;
}
public void setFrontUrl(String frontUrl) {
this.frontUrl = frontUrl;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getSettleType() {
return settleType;
}
public void setSettleType(Integer settleType) {
this.settleType = settleType;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getNotifyUrl() {
return notifyUrl;
}
public void setNotifyUrl(String notifyUrl) {
this.notifyUrl = notifyUrl;
}
public Long getAmount() {
return amount;
}
public void setAmount(Long amount) {
this.amount = amount;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getMerchantId() {
return merchantId;
}
public void setMerchantId(String merchantId) {
this.merchantId = merchantId;
}
public String getMerchantKey() {
return merchantKey;
}
public void setMerchantKey(String merchantKey) {
this.merchantKey = merchantKey;
}
public Long getTimestamp() {
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
}
package com.thinkgem.jeesite.modules.youka.dto;
import java.math.BigDecimal;
/**
* 小微商户开通
*/
public class MerchantDto extends TranstionDto {
private String subMchId;//子商户号
private String idType;//证件类型
private String accName;//持卡人姓名
private String accNo;//卡号
private String accProvince;//开通省份
private String accCity;//开通城市
private String mobile;//预留手机号
private String idNo;//证件号码
private BigDecimal settleRate;//结算费率
private BigDecimal extraRate;//T0费率
private Integer accType;//账户类型
private String bankCode;
public String getBankCode() {
return bankCode;
}
public void setBankCode(String bankCode) {
this.bankCode = bankCode;
}
public String getAccProvince() {
return accProvince;
}
public void setAccProvince(String accProvince) {
this.accProvince = accProvince;
}
public String getAccCity() {
return accCity;
}
public void setAccCity(String accCity) {
this.accCity = accCity;
}
public String getSubMchId() {
return subMchId;
}
public void setSubMchId(String subMchId) {
this.subMchId = subMchId;
}
public String getIdType() {
return idType;
}
public void setIdType(String idType) {
this.idType = idType;
}
public String getAccName() {
return accName;
}
public void setAccName(String accName) {
this.accName = accName;
}
public String getAccNo() {
return accNo;
}
public void setAccNo(String accNo) {
this.accNo = accNo;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
public BigDecimal getSettleRate() {
return settleRate;
}
public void setSettleRate(BigDecimal settleRate) {
this.settleRate = settleRate;
}
public BigDecimal getExtraRate() {
return extraRate;
}
public void setExtraRate(BigDecimal extraRate) {
this.extraRate = extraRate;
}
public Integer getAccType() {
return accType;
}
public void setAccType(Integer accType) {
this.accType = accType;
}
}
package com.thinkgem.jeesite.modules.youka.dto;
import java.math.BigDecimal;
public class MerchantsEntering extends CommonDto{
private String subMchId;//子商户号
private String subMerchantName; // 商户名称
private String serviceType; // 操作类型 1(参考附录)
private String idType;//证件类型
private String accName;//持卡人姓名
private String accNo;//卡号
private String accProvince;//开通省份
private String accCity;//开通城市
private String mobile;//预留手机号
private String idNo;//证件号码
private BigDecimal settleRate;//结算费率
private BigDecimal extraRate;//T0费率
private Integer accType;//账户类型
private String bankCode;
}
package com.thinkgem.jeesite.modules.youka.dto;
/**
* @author niehh
* @Description: 支付返回信息
* @date 2018年03月18日 9:19
*/
public class PayBackDto {
private String url; // 支付url
private String message;
private String payChannel;//
private String body;
private String isUrl = "1";// 是否是返回的url 1是 0否
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getPayChannel() {
return payChannel;
}
public void setPayChannel(String payChannel) {
this.payChannel = payChannel;
}
public String getIsUrl() {
return isUrl;
}
public void setIsUrl(String isUrl) {
this.isUrl = isUrl;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
package com.thinkgem.jeesite.modules.youka.dto;
/**
* Created by lishi on 2017/11/21.
*/
public class QrCodeDto extends CommonDto {
private String terminalId;//付款码
private String subMchId="";//子商户号
private String bankSettNo="";//联行号
private String acctName="";//收款人姓名
private String acctNo="";//收款人账号
private String idNo="";//证件号码
public String getSubMchId() {
return subMchId;
}
public void setSubMchId(String subMchId) {
this.subMchId = subMchId;
}
public String getBankSettNo() {
return bankSettNo;
}
public void setBankSettNo(String bankSettNo) {
this.bankSettNo = bankSettNo;
}
public String getAcctName() {
return acctName;
}
public void setAcctName(String acctName) {
this.acctName = acctName;
}
public String getAcctNo() {
return acctNo;
}
public void setAcctNo(String acctNo) {
this.acctNo = acctNo;
}
public String getIdNo() {
return idNo;
}
public void setIdNo(String idNo) {
this.idNo = idNo;
}
public String getTerminalId() {
return terminalId;
}
public void setTerminalId(String terminalId) {
this.terminalId = terminalId;
}
}
package com.thinkgem.jeesite.modules.youka.dto;
import java.math.BigDecimal;
/**
* Created by lishi on 2017/11/12.
*/
public class QuickDto extends CommonDto {
private Integer trxType;//交易类型 默认传2 T1(2,"T1"), D0(3,"D0");
private String bankNo;//支付银行卡号
private String frontUrl;//前台返回地址
private String certificateCode;//身份证号
private String settleBankName;//结算银行
private String settleBankNo;//结算银行卡号
private String name;//真实姓名
private String phone;//交易卡预留手机号
private String settleBankPhone;//结算卡手机号
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getSettleBankPhone() {
return settleBankPhone;
}
public void setSettleBankPhone(String settleBankPhone) {
this.settleBankPhone = settleBankPhone;
}
private BigDecimal userFee;
public BigDecimal getUserFee() {
return userFee;
}
public void setUserFee(BigDecimal userFee) {
this.userFee = userFee;
}
public Integer getTrxType() {
return trxType;
}
public void setTrxType(Integer trxType) {
this.trxType = trxType;
}
public String getBankNo() {
return bankNo;
}
public void setBankNo(String bankNo) {
this.bankNo = bankNo;
}
@Override
public String getFrontUrl() {
return frontUrl;
}
@Override
public void setFrontUrl(String frontUrl) {
this.frontUrl = frontUrl;
}
public String getCertificateCode() {
return certificateCode;
}
public void setCertificateCode(String certificateCode) {
this.certificateCode = certificateCode;
}
public String getSettleBankName() {
return settleBankName;
}
public void setSettleBankName(String settleBankName) {
this.settleBankName = settleBankName;
}
public String getSettleBankNo() {
return settleBankNo;
}
public void setSettleBankNo(String settleBankNo) {
this.settleBankNo = settleBankNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.thinkgem.jeesite.modules.youka.dto;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class TranstionDto implements java.io.Serializable {
private String msg;//响应消息
private String code;//响应码
private String sign;//签名
private String orderId;//平台订单号
private String merchantKey;//商户密钥
private Long timestamp;//时间戳
private String merchantId;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getMerchantKey() {
return merchantKey;
}
public void setMerchantKey(String merchantKey) {
this.merchantKey = merchantKey;
}
public Long getTimestamp() {
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
public String getMerchantId() {
return merchantId;
}
public void setMerchantId(String merchantId) {
this.merchantId = merchantId;
}
}
package com.thinkgem.jeesite.modules.youka.entity;
public class UserSubMchId {
private String userCode;
private String submchid;
private String payChannel;
private String level;
public String getUserCode() {
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
public String getSubmchid() {
return submchid;
}
public void setSubmchid(String submchid) {
this.submchid = submchid;
}
public String getPayChannel() {
return payChannel;
}
public void setPayChannel(String payChannel) {
this.payChannel = payChannel;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
}
package com.thinkgem.jeesite.modules.youka.service;
import com.alibaba.fastjson.JSONObject;
import com.thinkgem.jeesite.common.constant.ComCode;
import com.thinkgem.jeesite.modules.youka.dto.CommonDto;
import com.thinkgem.jeesite.modules.youka.dto.QrCodeDto;
import com.thinkgem.jeesite.modules.youka.entity.YoukaRate;
import com.thinkgem.jeesite.modules.youka.utils.Bean2Map;
import com.thinkgem.jeesite.modules.youka.utils.JFenHttpUtil;
import com.thinkgem.jeesite.modules.youka.utils.MakeOrderNum;
import com.thinkgem.jeesite.modules.youka.utils.SignUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
/**
* 首页通知
*/
@Service
@Transactional(readOnly = true)
public class JuHeZhongPayJFenService {
private Logger logger = LoggerFactory.getLogger(Logger.class);
/**
* 商户入驻
* @param dto
* @return
* @throws Exception
*/
public JSONObject merchantIn(JSONObject dto) throws Exception {
dto.put("merchantId", ComCode.JFEN_MERCHANT_ID);
dto.put("merchantKey", ComCode.JFEN_MERCHANT_KEY);
String signBefore = SignUtils.signBefore(dto);
logger.info("signBefore:{}", signBefore);
String sign = SignUtils.sign(signBefore, ComCode.JFEN_MERCHANT_SECRET);
dto.put("sign", sign);
String respStr = JFenHttpUtil.postRaw(ComCode.HOST + ComCode.JFEN_MICRO_HANDLE_URL, dto.toString());
return JSONObject.parseObject(respStr);
}
/**
* 修改费率
* @param dto
* @return
* @throws Exception
*/
public JSONObject merchantModifyFeel(JSONObject dto)throws Exception {
dto.put("timestamp",System.currentTimeMillis());
dto.put("serviceType","7");
dto.put("orderId",MakeOrderNum.makeOrderNum());
return merchantIn(dto);
}
/**
* JuHeZhong支付用户费率
* @param rateEntity
* @return
* @throws
* @throws Exception
*/
public void merchantFeelJFen(String subMchId, YoukaRate rateEntity) throws Exception {
// 修改费率
JSONObject dto = new JSONObject();
dto.put("subMchId",subMchId);
dto.put("paymentType","QUICKPAY");
dto.put("d0Fee",rateEntity.getRate());
dto.put("d1Fee",rateEntity.getRate());
JSONObject jsonObject = null;
jsonObject = this.merchantModifyFeel(dto);
if (!"0000".equals(jsonObject.getString("code"))) {
}
}
}
package com.thinkgem.jeesite.modules.youka.service;
import com.thinkgem.jeesite.common.constant.ComCode;
import com.thinkgem.jeesite.common.service.CrudService;
import com.thinkgem.jeesite.common.utils.IdGen;
import com.thinkgem.jeesite.modules.sys.entity.Dict;
import com.thinkgem.jeesite.modules.sys.utils.DictUtils;
import com.thinkgem.jeesite.modules.youka.dao.YoukaCardDao;
import com.thinkgem.jeesite.modules.youka.dao.YoukaRateDao;
import com.thinkgem.jeesite.modules.youka.entity.UserSubMchId;
import com.thinkgem.jeesite.modules.youka.entity.YoukaCardEntity;
import com.thinkgem.jeesite.modules.youka.entity.YoukaRate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -24,6 +27,12 @@ import java.util.Map;
@Transactional(readOnly = true)
public class YoukaRateService extends CrudService<YoukaRateDao, YoukaRate> {
@Autowired
private YoukaUserService youkaUserService;
@Autowired
private JuHeZhongPayJFenService juHeZhongPayJFenService;
public Map<String,YoukaRate> getRateByUserLevel(YoukaRate entity) {
Map<String,YoukaRate> map = dao.getRateByUserLevel(entity);
return map;
......@@ -41,6 +50,16 @@ public class YoukaRateService extends CrudService<YoukaRateDao, YoukaRate> {
}else{
youkaRate.preUpdate();
dao.update(youkaRate);
List<UserSubMchId> list = youkaUserService.getUserSubmchid(ComCode.PAYCHANNEL_HL2,youkaRate.getUserLevel());
for(UserSubMchId userSubMchId:list){
try {
juHeZhongPayJFenService.merchantFeelJFen(userSubMchId.getSubmchid(),youkaRate);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// }
}
......
......@@ -19,6 +19,7 @@ import com.thinkgem.jeesite.modules.sys.utils.UserUtils;
import com.thinkgem.jeesite.modules.youka.dao.YoukaCardDao;
import com.thinkgem.jeesite.modules.youka.dao.YoukaUserDao;
import com.thinkgem.jeesite.modules.youka.dao.YoukaUserDetailDao;
import com.thinkgem.jeesite.modules.youka.entity.UserSubMchId;
import com.thinkgem.jeesite.modules.youka.entity.YoukaCardEntity;
import com.thinkgem.jeesite.modules.youka.entity.YoukaUser;
import com.thinkgem.jeesite.modules.youka.entity.YoukaUserDetail;
......@@ -50,6 +51,8 @@ public class YoukaUserService extends CrudService<YoukaUserDao, YoukaUser> {
private SystemService systemService;
@Override
public YoukaUser get(String id){
YoukaUser user = dao.get(id);
......@@ -188,6 +191,12 @@ public class YoukaUserService extends CrudService<YoukaUserDao, YoukaUser> {
return dao.checkMobile(youkaUser);
}
// 根据通道获取Submchid
public List<UserSubMchId> getUserSubmchid(String paychannel,String level){
UserSubMchId userSubMchId = new UserSubMchId();
userSubMchId.setPayChannel(paychannel);
userSubMchId.setLevel(level);
return dao.getUserSubmchid(userSubMchId);
}
}
package com.thinkgem.jeesite.modules.youka.utils;
import com.alibaba.fastjson.JSONObject;
import java.lang.reflect.Method;
import java.util.*;
/**
* 将Map转换为Obj的工具类
*/
public class Bean2Map {
public static void Map2Entity(Map map, Object thisObj) {
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
Object val = map.get(obj);
setObjMethod(obj, val, thisObj);
}
}
public static Map Entity2Map(Object thisObj) {
Map map = new HashMap();
Class c;
try {
c = Class.forName(thisObj.getClass().getName());
Method[] m = c.getMethods();
for (int i = 0; i < m.length; i++) {
String method = m[i].getName();
if (method.startsWith("get")) {
try {
Object value = m[i].invoke(thisObj);
if (value != null) {
String key = method.substring(3);
if (key.toLowerCase().equals("class".toLowerCase())) {
continue;
}
key = key.substring(0, 1).toLowerCase()
+ key.substring(1);
map.put(key, value);
}
} catch (Exception e) {
System.out.println("error:" + method);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
private static void setObjMethod(Object method, Object value, Object thisObj) {
Class c;
try {
c = Class.forName(thisObj.getClass().getName());
String met = (String) method;
met = met.trim();
if (!met.substring(0, 1).equals(met.substring(0, 1).toUpperCase())) {
met = met.substring(0, 1).toUpperCase() + met.substring(1);
}
if (!String.valueOf(method).startsWith("set")) {
met = "set" + met;
}
Class types[] = new Class[1];
types[0] = Class.forName("java.lang.String");
Method m = c.getMethod(met, types);
m.invoke(thisObj, value);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SortedMap Entity2SortedMap(Object thisObj) {
SortedMap map = new TreeMap();
Class c;
try {
c = Class.forName(thisObj.getClass().getName());
Method[] m = c.getMethods();
for (int i = 0; i < m.length; i++) {
String method = m[i].getName();
if (method.startsWith("get")) {
try {
Object value = m[i].invoke(thisObj);
if (value != null) {
String key = method.substring(3);
if (key.toLowerCase().equals("class".toLowerCase())) {
continue;
}
key = key.substring(0, 1).toLowerCase()
+ key.substring(1);
map.put(key, value);
}
} catch (Exception e) {
System.out.println("error:" + method);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
public static SortedMap JSONObject2SortedMap(JSONObject thisObj) {
Set<String> set = thisObj.keySet();//得到所有title
Iterator it = set.iterator();
SortedMap map = new TreeMap();
while (it.hasNext()) {
String key = it.next().toString();
Object vlaue = thisObj.get(key);
map.put(key, vlaue);
}
return map;
}
}
package com.thinkgem.jeesite.modules.youka.utils;
import java.nio.charset.Charset;
/**
* <p>Created with IntelliJ IDEA. </p>
* <p>User: Stony </p>
* <p>Date: 2016/5/17 </p>
* <p>Time: 10:21 </p>
* <p>Version: 1.0 </p>
*/
public abstract class CharsetUtil {
/**
* UTF-8: eight-bit UCS Transformation Format.
*/
public static final Charset UTF_8 = Charset.forName("UTF-8");
/**
* US-ASCII: seven-bit ASCII, the Basic Latin block of the Unicode character set (ISO646-US).
*/
public static final Charset US_ASCII = Charset.forName("US-ASCII");
}
package com.thinkgem.jeesite.modules.youka.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author lsw
* @date 2016年1月3日
* @version 1.0
* @desc 日期工具类
*/
public class DateUtil {
/**
* 将时间格式化成指定的字符串
*
* @param date
* @param ftm
* @return
*/
public static String format2str(Date date, String ftm) {
return new SimpleDateFormat(ftm).format(date);
}
/**
* 装字符串格式化成指定日期时间
* @param value
* @param fmt
* @return
*/
public static Date string2Date(String value,String fmt){
try {
return new SimpleDateFormat(fmt).parse(value);
} catch (ParseException e) {
}
return new Date();
}
}
\ No newline at end of file
package com.thinkgem.jeesite.modules.youka.utils;
import java.security.MessageDigest;
public abstract class MD5Utils {
private static byte[] getBytes(String text) {
return text.getBytes(CharsetUtil.UTF_8);
}
/**
* 返回MD5 加密字符串
*
* @param text
* @return
* @throws Exception
*/
public static String md5(String text) throws Exception {
return md5(getBytes(text));
}
public static byte[] md5ToByte(String text) throws Exception {
return md5ToByte(getBytes(text));
}
public static byte[] md5ToByte(byte[] bytes) throws Exception {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(bytes);
return messageDigest.digest();
}
/**
* 返回MD5 加密字符串
*
* @param bytes
* @return
* @throws Exception
*/
public static String md5(byte[] bytes) throws Exception {
byte[] use = md5ToByte(bytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < use.length; i++) {
if ((use[i] & 0xff) < 0x10) {
sb.append("0");
}
sb.append(Long.toString(use[i] & 0xff, 16));
}
return sb.toString();
}
/**
* MD5方法
*
* @param text
* @return 大写
* @throws Exception
*/
public static String md5UpperCase(String text) throws Exception {
byte[] bytes = getBytes(text);
return md5(bytes).toUpperCase();
}
/**
* MD5方法
*
* @param text 明文
* @param salt 盐
* @return 密文
* @throws Exception
*/
public static String md5UpperCase(String text, String salt) throws Exception {
byte[] bytes = getBytes((text + salt));
return md5(bytes).toUpperCase();
}
/**
* MD5方法
*
* @param text
* @return 小写
* @throws Exception
*/
public static String md5LowerCase(String text) throws Exception {
byte[] bytes = getBytes(text);
return md5(bytes).toLowerCase();
}
/**
* MD5方法
*
* @param text 明文
* @param salt 盐
* @return 密文
* @throws Exception
*/
public static String md5LowerCase(String text, String salt) throws Exception {
byte[] bytes = getBytes((text + salt));
return md5(bytes).toLowerCase();
}
/**
* MD5验证方法
*
* @param text 明文
* @param salt 盐
* @param md5 密文
* @return true/false
* @throws Exception
*/
public static boolean verify(String text, String salt, String md5) throws Exception {
String md5Text = md5UpperCase(text, salt);
if (md5Text.equalsIgnoreCase(md5)) {
return true;
} else {
return false;
}
}
/**
* MD5验证
*
* @param text
* @param md5
* @return
* @throws Exception
*/
public static boolean verify(String text, String md5) throws Exception {
String md5Text = md5UpperCase(text);
if (md5Text.equalsIgnoreCase(md5)) {
return true;
} else {
return false;
}
}
}
package com.thinkgem.jeesite.modules.youka.utils;
import java.util.Date;
/**
* Created by lishi on 2017/11/1.
*/
public class MakeOrderNum {
/**
* 锁对象,可以为任意对象
*/
private static Object lockObj = "lockerOrder";
/**
* 订单号生成计数器
*/
private static long orderNumCount = 0L;
/**
* 每毫秒生成订单号数量最大值
*/
private static int maxPerMSECSize=1000;
/**
* 订单号生成
*/
public static String makeOrderNum() {
String finOrderNum = "";
try {
// 最终生成的订单号
synchronized (lockObj) {
// 取系统当前时间作为订单号变量前半部分,精确到毫秒
long nowLong = Long.parseLong(DateUtil.format2str(new Date(),"yyyyMMddHHmmssSSS"));
// 计数器到最大值归零,可扩展更大,目前1毫秒处理峰值1000个,1秒100万
if (orderNumCount >= maxPerMSECSize) {
orderNumCount = 0L;
}
//组装订单号
String countStr=maxPerMSECSize +orderNumCount+"";
finOrderNum=nowLong+countStr.substring(1);
orderNumCount++;
}
} catch (Exception e) {
e.printStackTrace();
}
return finOrderNum;
}
public static void main(String[] args) {
System.out.println(makeOrderNum());
System.out.println(makeOrderNum());
}
}
package com.thinkgem.jeesite.modules.youka.utils;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
/**
* 签名工具类
*/
public abstract class SignUtils {
public static String sign(String signBefore, String merchantSescrt) throws Exception {
return MD5Utils.md5LowerCase(signBefore, merchantSescrt);
}
public static String signBefore(Map<String, Object> body) {
StringBuffer sign = new StringBuffer();
Set<String> keySet = new TreeSet<String>();
for (String key : body.keySet()) {
keySet.add(key);
}
for (String key : keySet) {
if (!"sign".equals(key) && body.get(key) != null) {
sign.append("&" + key + "=" + body.get(key));
}
}
if (sign != null && !("".equals(sign))) {
sign.delete(0, 1);
}
return sign.toString();
}
}
......@@ -241,4 +241,16 @@
<!--order by cp.sort, cp.id, c.sort, c.id-->
<!--</where> -->
<!--</select>-->
<select id="getUserSubmchid" resultType="com.thinkgem.jeesite.modules.youka.entity.UserSubMchId">
SELECT
yus.user_code,
yus.pay_channel,
yus.submchid
FROM youka_user_submchid yus
LEFT JOIN youka_users yu ON yu.code = yus.user_code
WHERE pay_channel = #{payChannel}
AND yu.level = #{level}
</select>
</mapper>
\ No newline at end of file
......@@ -134,3 +134,9 @@ image.save.url=D:/youka/images/
#image.save.url=/tomcat/webapps/ROOT/youka/image/
#图片返回路径
image.return.url=youka/image/
## jfen 对应通道C-HL2
pay.jfen.merchant_id = 100532502198424
pay.jfen.merchant.key = 260a7539-6a2b-410d-aeec-9897ccee92a1
pay.jfen.merchant.secret = 9ad18861-24b3-4904-a2c3-c4401f6f60f3
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment