|
@@ -177,7 +177,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
if (num <= 0) {
|
|
|
return "请填写退货/取消数量";
|
|
|
}
|
|
|
- if(2==cmReturnedPurchase.getRefundType()){
|
|
|
+ if (2 == cmReturnedPurchase.getRefundType()) {
|
|
|
cmReturnedPurchase.setRefundFee(cmReturnedPurchase.getFreeRefundFee());
|
|
|
cmReturnedPurchase.setReturnedPurchaseFee(cmReturnedPurchase.getFreeRefundFee());
|
|
|
}
|
|
@@ -234,30 +234,32 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if (newOrder.getPromotionFullReduction() != null) {
|
|
|
- //减去促销满减金额
|
|
|
- returnedPurchaseFee = returnedPurchaseFee - newOrder.getPromotionFullReduction();
|
|
|
- }
|
|
|
- if (newOrder.getCouponAmount() > 0) {
|
|
|
- //减去优惠券金额
|
|
|
- returnedPurchaseFee = MathUtil.sub(returnedPurchaseFee, newOrder.getCouponAmount()).doubleValue();
|
|
|
- }
|
|
|
- cmReturnedPurchase.setReturnedPurchaseFee(returnedPurchaseFee);
|
|
|
- refundFee += getRefundFee(newOrder, cmReturnedPurchase, freightNum);
|
|
|
- //充值或缴纳订金订单
|
|
|
- if (rechargeGoods) {
|
|
|
- CmUser user = cmUserDao.get(newOrder.getUserID().toString());
|
|
|
- if (user != null && user.getAbleUserMoney() != null && user.getAbleUserMoney() < refundFee) {
|
|
|
- refundFee = user.getAbleUserMoney();
|
|
|
+ if (1 == cmReturnedPurchase.getRefundType()) {
|
|
|
+ if (newOrder.getPromotionFullReduction() != null) {
|
|
|
+ //减去促销满减金额
|
|
|
+ returnedPurchaseFee = returnedPurchaseFee - newOrder.getPromotionFullReduction();
|
|
|
}
|
|
|
- cmReturnedPurchase.setReturnedPurchaseFee(refundFee);
|
|
|
- if (user != null) {
|
|
|
- //冻结余额
|
|
|
- user.setAbleUserMoney(user.getAbleUserMoney() - refundFee);
|
|
|
- cmUserDao.updateMoney(user);
|
|
|
+ if (newOrder.getCouponAmount() > 0) {
|
|
|
+ //减去优惠券金额
|
|
|
+ returnedPurchaseFee = MathUtil.sub(returnedPurchaseFee, newOrder.getCouponAmount()).doubleValue();
|
|
|
+ }
|
|
|
+ cmReturnedPurchase.setReturnedPurchaseFee(returnedPurchaseFee);
|
|
|
+ refundFee += getRefundFee(newOrder, cmReturnedPurchase, freightNum);
|
|
|
+ //充值或缴纳订金订单
|
|
|
+ if (rechargeGoods) {
|
|
|
+ CmUser user = cmUserDao.get(newOrder.getUserID().toString());
|
|
|
+ if (user != null && user.getAbleUserMoney() != null && user.getAbleUserMoney() < refundFee) {
|
|
|
+ refundFee = user.getAbleUserMoney();
|
|
|
+ }
|
|
|
+ cmReturnedPurchase.setReturnedPurchaseFee(refundFee);
|
|
|
+ if (user != null) {
|
|
|
+ //冻结余额
|
|
|
+ user.setAbleUserMoney(user.getAbleUserMoney() - refundFee);
|
|
|
+ cmUserDao.updateMoney(user);
|
|
|
+ }
|
|
|
}
|
|
|
+ cmReturnedPurchase.setRefundFee(refundFee);
|
|
|
}
|
|
|
- cmReturnedPurchase.setRefundFee(refundFee);
|
|
|
cmReturnedPurchaseDao.update(cmReturnedPurchase);
|
|
|
return null;
|
|
|
}
|
|
@@ -758,19 +760,18 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
*
|
|
|
* @param shopOrderIds
|
|
|
*/
|
|
|
- public void theOnlineRefund(List<Integer> shopOrderIds, Double refundOnlineFee) {
|
|
|
+ public void theOnlineRefund(List<Integer> shopOrderIds, Double refundOnlineFee) throws Exception {
|
|
|
List<CmReceiptOrderRelation> relationList = cmReceiptOrderRelationDao.findByShopOrderIds(shopOrderIds);
|
|
|
if (null != relationList && relationList.size() > 0) {
|
|
|
for (CmReceiptOrderRelation orderRelation : relationList) {
|
|
|
//cdr表payway为1纯线上收款
|
|
|
if ("1".equals(orderRelation.getPayWay())) {
|
|
|
String value = "";
|
|
|
- refundOnlineFee = MathUtil.sub(refundOnlineFee, Double.parseDouble(orderRelation.getAssociateAmount())).doubleValue();
|
|
|
- if (refundOnlineFee > 0) {
|
|
|
+ double chargeFee = MathUtil.sub(refundOnlineFee, Double.parseDouble(orderRelation.getAssociateAmount())).doubleValue();
|
|
|
+ if (chargeFee > 0) {
|
|
|
//要退的钱大于本次交易金额
|
|
|
value = orderRelation.getAssociateAmount();
|
|
|
- }
|
|
|
- if (refundOnlineFee < 0) {
|
|
|
+ }else{
|
|
|
value = refundOnlineFee.toString();
|
|
|
}
|
|
|
//不同产品区分
|
|
@@ -795,9 +796,9 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
Double payAmount = cmReturnedPurchaseDao.findPayAmount(orderRelation.getOrderRequestNo());
|
|
|
Double charge = 0d;
|
|
|
//个人0.2%企业10
|
|
|
- if("12".equals(orderRelation.getPayType())){
|
|
|
+ if ("12".equals(orderRelation.getPayType())) {
|
|
|
charge = MathUtil.mul(payAmount, 0.002, 2).doubleValue();
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
charge = 10d;
|
|
|
}
|
|
|
//0.1%手续费,转回金额*99.9%=payAmount
|
|
@@ -910,7 +911,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void onlinePay(String orderRequestNo, String money, Integer shopOrderId) {
|
|
|
+ public void onlinePay(String orderRequestNo, String money, Integer shopOrderId) throws Exception {
|
|
|
AppPayRefundOrderVo orderVo = new AppPayRefundOrderVo();
|
|
|
orderVo.setP1_bizType("AppPayRefund");
|
|
|
String splitCode = cmReturnedPurchaseDao.findSplitCode(shopOrderId);
|
|
@@ -922,47 +923,43 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
orderVo.setP4_refundOrderId("TK" + tk + orderRequestNo);
|
|
|
//退款金额
|
|
|
orderVo.setP5_amount(money);
|
|
|
- try {
|
|
|
- Map<String, String> map = MyBeanUtils.convertBean(orderVo, new LinkedHashMap());
|
|
|
- String oriMessage = MyBeanUtils.getSignedByPresetParameter(map, AppPayRefundOrderVo.NEED_SIGN_PARAMS);
|
|
|
- oriMessage += Constant.SAOMA;
|
|
|
- String sign = Disguiser.disguiseMD5(oriMessage.trim());
|
|
|
- logger.info("签名串:" + sign);
|
|
|
- map.put("sign", sign);
|
|
|
- logger.info("发送参数:" + map);
|
|
|
- Map<String, Object> resultMap = HttpClientService.getHttpResp(map, Constant.REQUEST_URL);
|
|
|
- logger.info("响应结果:" + resultMap);
|
|
|
- if ((Integer) resultMap.get("statusCode") == HttpStatus.SC_OK) {
|
|
|
- String resultMsg = (String) resultMap.get("response");
|
|
|
- AppPayRefundOrderResponseVo orderResponseVo = JSONObject.parseObject(resultMsg, AppPayRefundOrderResponseVo.class);
|
|
|
- String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(orderResponseVo, AppPayRefundOrderResponseVo.NEED_SIGN_PARAMS);
|
|
|
- assemblyRespOriSign += Constant.SAOMA;
|
|
|
- logger.info("组装返回结果签名串:" + assemblyRespOriSign);
|
|
|
- String responseSign = orderResponseVo.getSign();
|
|
|
- logger.info("响应签名:" + responseSign);
|
|
|
- String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
|
|
|
- if (checkSign.equals(responseSign)) {
|
|
|
- if ("0001".equals(orderResponseVo.getRt2_retCode())) {
|
|
|
- CmRefundRecord cmRefundRecord = new CmRefundRecord();
|
|
|
- cmRefundRecord.setRefundAmount(Double.parseDouble(money));
|
|
|
- cmRefundRecord.setOrderRequestNo(orderRequestNo);
|
|
|
- cmRefundRecord.setShopOrderId(shopOrderId);
|
|
|
- cmReturnedPurchaseDao.insertCmRefundRecord(cmRefundRecord);
|
|
|
- logger.info("第三方退款成功>>>>>>>shopOrderId>>>" + shopOrderId);
|
|
|
- } else {
|
|
|
- logger.error("退款失败========================" + orderResponseVo.getRt5_orderId() + "-" + orderResponseVo.getRt3_retMsg());
|
|
|
- throw new Exception("第三方退款失败!");
|
|
|
- }
|
|
|
+ Map<String, String> map = MyBeanUtils.convertBean(orderVo, new LinkedHashMap());
|
|
|
+ String oriMessage = MyBeanUtils.getSignedByPresetParameter(map, AppPayRefundOrderVo.NEED_SIGN_PARAMS);
|
|
|
+ oriMessage += Constant.SAOMA;
|
|
|
+ String sign = Disguiser.disguiseMD5(oriMessage.trim());
|
|
|
+ logger.info("签名串:" + sign);
|
|
|
+ map.put("sign", sign);
|
|
|
+ logger.info("发送参数:" + map);
|
|
|
+ Map<String, Object> resultMap = HttpClientService.getHttpResp(map, Constant.REQUEST_URL);
|
|
|
+ logger.info("响应结果:" + resultMap);
|
|
|
+ if ((Integer) resultMap.get("statusCode") == HttpStatus.SC_OK) {
|
|
|
+ String resultMsg = (String) resultMap.get("response");
|
|
|
+ AppPayRefundOrderResponseVo orderResponseVo = JSONObject.parseObject(resultMsg, AppPayRefundOrderResponseVo.class);
|
|
|
+ String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(orderResponseVo, AppPayRefundOrderResponseVo.NEED_SIGN_PARAMS);
|
|
|
+ assemblyRespOriSign += Constant.SAOMA;
|
|
|
+ logger.info("组装返回结果签名串:" + assemblyRespOriSign);
|
|
|
+ String responseSign = orderResponseVo.getSign();
|
|
|
+ logger.info("响应签名:" + responseSign);
|
|
|
+ String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
|
|
|
+ if (checkSign.equals(responseSign)) {
|
|
|
+ if ("0001".equals(orderResponseVo.getRt2_retCode())) {
|
|
|
+ CmRefundRecord cmRefundRecord = new CmRefundRecord();
|
|
|
+ cmRefundRecord.setRefundAmount(Double.parseDouble(money));
|
|
|
+ cmRefundRecord.setOrderRequestNo(orderRequestNo);
|
|
|
+ cmRefundRecord.setShopOrderId(shopOrderId);
|
|
|
+ cmReturnedPurchaseDao.insertCmRefundRecord(cmRefundRecord);
|
|
|
+ logger.info("第三方退款成功>>>>>>>shopOrderId>>>" + shopOrderId);
|
|
|
} else {
|
|
|
- logger.error("退款验签失败");
|
|
|
- throw new Exception("第三方退款验签失败!");
|
|
|
+ logger.error("退款失败========================" + orderResponseVo.getRt5_orderId() + "-" + orderResponseVo.getRt3_retMsg());
|
|
|
+ throw new Exception("第三方退款失败!");
|
|
|
}
|
|
|
} else {
|
|
|
- logger.error("退款请求失败");
|
|
|
- throw new Exception("第三方退款请求失败!");
|
|
|
+ logger.error("退款验签失败");
|
|
|
+ throw new Exception("第三方退款验签失败!");
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
+ } else {
|
|
|
+ logger.error("退款请求失败");
|
|
|
+ throw new Exception("第三方退款请求失败!");
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -970,7 +967,7 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
//1.本方法内转账手续费等待到账再发起退款请求
|
|
|
//2.异步
|
|
|
//3.回调
|
|
|
- void unionRefund(String orderRequestNo, String money, Integer shopOrderId) {
|
|
|
+ void unionRefund(String orderRequestNo, String money, Integer shopOrderId) throws Exception {
|
|
|
Map<String, String> sPara = new HashMap<String, String>();
|
|
|
sPara.put("P1_bizType", "OnlineRefund");
|
|
|
sPara.put("P2_orderId", orderRequestNo);
|
|
@@ -985,34 +982,31 @@ public class CmReturnedPurchaseService extends CrudService<CmReturnedPurchaseDao
|
|
|
append(money).append("&").append("TK" + orderRequestNo).append("&").append("无").append("&").append("&").append(Constant.WANGYIN);
|
|
|
String sign = Disguiser.disguiseMD5(sb.toString());
|
|
|
sPara.put("sign", sign);
|
|
|
- try {
|
|
|
- OnlineRefundData on = postForm(sPara, Constant.YL, sign, OnlineRefundData.class);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(on), JSONObject.class);
|
|
|
- if (!"0000".equals(on.getRt2_retCode())) {
|
|
|
- logger.info("退款失败:" + on.toString());
|
|
|
- throw new Exception("退款失败");
|
|
|
+ OnlineRefundData on = postForm(sPara, Constant.YL, sign, OnlineRefundData.class);
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(on), JSONObject.class);
|
|
|
+ if (!"0000".equals(on.getRt2_retCode())) {
|
|
|
+ logger.info("退款失败:" + on.toString());
|
|
|
+ throw new Exception("退款失败");
|
|
|
+ } else {
|
|
|
+ String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(on, OnlineRefundData.NEED_SIGN_PARAMS);
|
|
|
+ logger.info("组装返回结果签名串:" + assemblyRespOriSign);
|
|
|
+ assemblyRespOriSign += Constant.SPLIT + Constant.WANGYIN;
|
|
|
+ String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
|
|
|
+ if (!checkSign.equals(on.getSign())) {
|
|
|
+ logger.error("验签失败========================" + on.getRt3_retMsg());
|
|
|
+ throw new Exception("第三方退款失败!");
|
|
|
} else {
|
|
|
- String assemblyRespOriSign = MyBeanUtils.getSignedByPresetParameter(on, OnlineRefundData.NEED_SIGN_PARAMS);
|
|
|
- logger.info("组装返回结果签名串:" + assemblyRespOriSign);
|
|
|
- assemblyRespOriSign += Constant.SPLIT + Constant.WANGYIN;
|
|
|
- String checkSign = Disguiser.disguiseMD5(assemblyRespOriSign.trim());
|
|
|
- if (!checkSign.equals(on.getSign())) {
|
|
|
- logger.error("验签失败========================" + on.getRt3_retMsg());
|
|
|
- throw new Exception("第三方退款失败!");
|
|
|
- } else {
|
|
|
- CmRefundRecord cmRefundRecord = new CmRefundRecord();
|
|
|
- cmRefundRecord.setRefundAmount(Double.parseDouble(money));
|
|
|
- cmRefundRecord.setOrderRequestNo(orderRequestNo);
|
|
|
- cmRefundRecord.setShopOrderId(shopOrderId);
|
|
|
- cmReturnedPurchaseDao.insertCmRefundRecord(cmRefundRecord);
|
|
|
- logger.info("第三方退款成功");
|
|
|
- }
|
|
|
+ CmRefundRecord cmRefundRecord = new CmRefundRecord();
|
|
|
+ cmRefundRecord.setRefundAmount(Double.parseDouble(money));
|
|
|
+ cmRefundRecord.setOrderRequestNo(orderRequestNo);
|
|
|
+ cmRefundRecord.setShopOrderId(shopOrderId);
|
|
|
+ cmReturnedPurchaseDao.insertCmRefundRecord(cmRefundRecord);
|
|
|
+ logger.info("第三方退款成功");
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
public <T> T postForm(Map<String, String> params, String url, String sign, Class<T> clazz) {
|
|
|
FormBody.Builder builder = new FormBody.Builder();
|
|
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|