ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderCrossCityController.java
@@ -18,6 +18,8 @@ import com.stylefeng.guns.modular.system.util.PayMoneyUtil; import com.stylefeng.guns.modular.system.util.PushURL; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.model.*; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; @@ -67,6 +69,10 @@ private MongoTemplate mongoTemplate; @Autowired private ShiroExtUtil shiroExtUtil; @Autowired private IUserService sysUserService; @Autowired private ITCompanyService iTCompanyService; /** @@ -492,6 +498,26 @@ } } //中台修改订单状态 ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest(); request1.setOrderId(orderCrossCity.getTravelId()); request1.setStatus(orderCrossCity.getState()); if (null != orderCrossCity.getDriverId()) { TDriver driver2 = tDriverService.selectById(orderCrossCity.getDriverId()); TCompany company = iTCompanyService.selectById(driver2.getCompanyId()); request1.setDriverId(driver2.getEmpId().toString()); request1.setSupplierShopId(company.getEnterCode()); } if (2 == orderCrossCity.getPromotion() && null != orderCrossCity.getPromotionDriverId()) { TDriver driver2 = tDriverService.selectById(orderCrossCity.getPromotionDriverId()); request1.setPromoterId(driver2.getEmpId().toString()); } OrderUtil.modifyTravelItinerary(request1); //未支付,调取消订单 if(null == orderCrossCity.getPayType() && ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){ OrderUtil.tradeOrderCancel(orderCrossCity.getTravelId()); } //已支付的情况下进行退款操作 if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){ @@ -525,9 +551,36 @@ } if(query.getPayType() == 1){//微信 Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), tOrderCrossCityId + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay"); if(!"SUCCESS".equals(map.get("return_code"))){ return ResultUtil.error(map.get("return_msg")); //中台订单退款操作 if(ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){ User user1 = sysUserService.selectById(user.getId()); TradeOrderRefundRequest request = new TradeOrderRefundRequest(); request.setPartnerPayId(orderCrossCity.getTravelId()); request.setPayId(query.getCode()); request.setRefundTotalFee(orderCrossCity.getPayMoney().multiply(new BigDecimal(100)).intValue() + ""); request.setRemark("服务商取消订单退款"); request.setRefundType("RF"); RefundInfoRequest refundInfo = new RefundInfoRequest(); refundInfo.setPayItemId(orderCrossCity.getTravelId()); refundInfo.setPayId(query.getCode()); refundInfo.setTradeFee(orderCrossCity.getPayMoney().multiply(new BigDecimal(100)).intValue() + ""); request.setRefundInfos(new ArrayList<RefundInfoRequest>(){{ add(refundInfo); }}); TradeOrderRefund tradeOrderRefund = OrderUtil.tradeOrderRefund(request); //退款通知 OrderRefundNoticeRequest request2 = new OrderRefundNoticeRequest(); request2.setOrderId(orderCrossCity.getTravelId()); request2.setRefundPayNum(tradeOrderRefund.getRefundId()); request2.setRefundType("5"); request2.setApplyRefundCharge(orderCrossCity.getPayMoney()); request2.setActualRefundCharge(orderCrossCity.getPayMoney()); request2.setRefundAccount(user1.getEnterId().toString()); request2.setRemark("服务商取消订单退款"); OrderUtil.orderRefundNotice(request2); //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId); } }else if(query.getPayType()==4){ // TODO 退款 @@ -548,24 +601,6 @@ //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, tOrderCrossCityId); } } //添加负的收入明细 List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", tOrderCrossCityId).eq("orderType", 3)); for(Income income : incomes){ if(income.getUserType() == 2){//处理司机的收入 TDriver driver = tDriverService.selectById(income.getObjectId()); driver.setBalance(driver.getBalance().subtract(new BigDecimal(income.getMoney()))); driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney()); driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney()); tDriverService.updateById(driver); } Income income1 = new Income(); BeanUtils.copyProperties(income, income1); income1.setMoney(income.getMoney() * -1); income1.setId(null); income1.setInsertTime(new Date()); incomeService.insert(income1); } } //添加取消记录 ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TReassignController.java
@@ -9,6 +9,7 @@ import com.stylefeng.guns.core.shiro.ShiroUser; import com.stylefeng.guns.core.util.ExcelUtil; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.dao.LineShiftDriverMapper; import com.stylefeng.guns.modular.system.dao.OrderCancelMapper; import com.stylefeng.guns.modular.system.model.*; @@ -16,6 +17,9 @@ import com.stylefeng.guns.modular.system.util.HttpRequestUtil; import com.stylefeng.guns.modular.system.util.PushURL; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.model.*; import lombok.extern.slf4j.Slf4j; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -32,10 +36,7 @@ import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; /** * 快车改派管理控制器 @@ -43,6 +44,7 @@ * @author fengshuonan * @Date 2020-09-03 14:20:27 */ @Slf4j @Controller @RequestMapping("/tReassign") public class TReassignController extends BaseController { @@ -89,6 +91,10 @@ private ITOrderTaxiService orderTaxiService; @Autowired private ShiroExtUtil shiroExtUtil; @Autowired private ITCompanyService iTCompanyService; @Autowired private IUserService sysUserService; /** @@ -807,6 +813,7 @@ @ResponseBody public Object optCross(@RequestParam Integer tReassignId,@RequestParam Integer optType) { try { TReassign tReassign = tReassignService.selectById(tReassignId); ShiroUser user = shiroExtUtil.getUser(); if (1 == optType) { @@ -828,6 +835,23 @@ TOrderCrossCity tOrderCrossCity = itOrderCrossCityService.selectById(tReassign.getOrderId()); tOrderCrossCity.setState(tOrderCrossCity.getOldState()); itOrderCrossCityService.updateById(tOrderCrossCity); //中台修改订单状态 if(ToolUtil.isNotEmpty(tOrderCrossCity.getTravelId())){ TCompany company = iTCompanyService.selectById(driver.getCompanyId()); //中台修改订单状态 ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest(); request.setOrderId(tOrderCrossCity.getTravelId()); request.setStatus(tOrderCrossCity.getState()); request.setDriverId(driver.getEmpId().toString()); if (2 == tOrderCrossCity.getPromotion()) { TDriver driver1 = itDriverService.selectById(tOrderCrossCity.getPromotionDriverId()); request.setPromoterId(driver1.getEmpId().toString()); } request.setSupplierShopId(company.getEnterCode()); OrderUtil.modifyTravelItinerary(request); } }else if (2 == optType){ tReassign.setState(4); tReassign.setReviewer(user.getId()); @@ -885,45 +909,40 @@ //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城订单取消退款", orderCrossCity.getPayMoney().doubleValue(), 1, 1, 1, 3, tReassign.getOrderId()); }else{ // PaymentRecord query = paymentRecordService.query(1, null, null, tReassign.getOrderId(), 3, null, 2).get(0); // if(null == query){ // return ResultUtil.error("订单还未进行支付"); // } // Map<String, Object> merrefund = icbcPayUtil.merrefund(query.getCode(), "", query.getAmount(), tReassign.getOrderId() + "_3", orderCrossCity.getOrderNum()); // if(Integer.valueOf(merrefund.get("code").toString()) == 0){ // boolean b = true; // while (b){ // Map<String, Object> refundqry = icbcPayUtil.refundqry("", query.getCode(), orderCrossCity.getOrderNum()); // if(Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 0){//成功 // //添加交易明细 // transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城订单取消退款", query.getAmount(), 1, 1, 1, 3, tReassign.getOrderId()); // } // if(Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 1){//失败 // return ResultUtil.error("订单取消失败(退款不成功)"); // } // if(Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 2){//未知 // return ResultUtil.error("退款返回未知异常"); // } // } // } } //中台订单退款操作 if(ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){ User user1 = sysUserService.selectById(user.getId()); List<PaymentRecord> list = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, orderCrossCity.getId(), 3, 1, 2); PaymentRecord query = list.get(0); TradeOrderRefundRequest request = new TradeOrderRefundRequest(); request.setPartnerPayId(orderCrossCity.getTravelId()); request.setPayId(query.getCode()); request.setRefundTotalFee(orderCrossCity.getPayMoney().multiply(new BigDecimal(100)).intValue() + ""); request.setRemark("服务商取消订单退款"); request.setRefundType("RF"); //添加负的收入明细 List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", tReassign.getOrderId()).eq("orderType", 3)); for(Income income : incomes){ if(income.getUserType() == 2){//处理司机的收入 TDriver driver = itDriverService.selectById(income.getObjectId()); driver.setBalance(driver.getBalance().subtract(new BigDecimal(income.getMoney()))); driver.setLaveBusinessMoney(new BigDecimal(driver.getLaveBusinessMoney()).subtract(new BigDecimal(income.getMoney())).doubleValue()); driver.setBusinessMoney(new BigDecimal(driver.getBusinessMoney()).subtract(new BigDecimal(income.getMoney())).doubleValue()); itDriverService.updateById(driver); RefundInfoRequest refundInfo = new RefundInfoRequest(); refundInfo.setPayItemId(orderCrossCity.getTravelId()); refundInfo.setPayId(query.getCode()); refundInfo.setTradeFee(orderCrossCity.getPayMoney().multiply(new BigDecimal(100)).intValue() + ""); request.setRefundInfos(new ArrayList<RefundInfoRequest>(){{ add(refundInfo); }}); TradeOrderRefund tradeOrderRefund = OrderUtil.tradeOrderRefund(request); //退款通知 OrderRefundNoticeRequest request1 = new OrderRefundNoticeRequest(); request1.setOrderId(orderCrossCity.getTravelId()); request1.setRefundPayNum(tradeOrderRefund.getRefundId()); request1.setRefundType("5"); request1.setApplyRefundCharge(orderCrossCity.getPayMoney()); request1.setActualRefundCharge(orderCrossCity.getPayMoney()); request1.setRefundAccount(user1.getEmpId().toString()); request1.setRemark("服务商取消订单退款"); OrderUtil.orderRefundNotice(request1); //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城订单取消退款", query.getAmount(), 1, 1, 1, 3, tReassign.getOrderId()); } Income income1 = new Income(); BeanUtils.copyProperties(income, income1); income1.setMoney(income.getMoney() * -1); income1.setId(null); income1.setInsertTime(new Date()); incomeService.insert(income1); } } @@ -939,22 +958,6 @@ orderCancel.setUserId(user.getId()); orderCancelMapper.insert(orderCancel); } //返回驾驶员处罚金 TDriver originalDriver = itDriverService.selectById(tReassign.getOriginalDriverId()); //增加交易明细 TPubTransactionDetails details = new TPubTransactionDetails(); details.setUserId(originalDriver.getId()); details.setInsertTime(new Date()); details.setRemark("【跨城改派】:改派失败或订单取消"); details.setMoney(new BigDecimal(tReassign.getMoney())); details.setState(1); details.setType(1); details.setUserType(2); details.setOrderType(3); details.setOrderId(tReassign.getOrderId()); itPubTransactionDetailsService.insert(details); }catch (Exception e){ e.printStackTrace(); } @@ -1276,6 +1279,7 @@ } if(driver.getState() == 2){ driver.setState(3); itDriverService.updateById(driver); } //修改订单数据 @@ -1300,24 +1304,23 @@ tReassign.setCompleteTime(new Date()); tReassignService.updateById(tReassign); //修改收入明细,转给新司机(因为是先支付金额) List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("userType", 2).eq("objectId", oldDriver.getId()).eq("type", 2).eq("incomeId", tReassign.getOrderId()).eq("orderType", 3)); if(incomes.size() > 0){ Income income = incomes.get(0); income.setObjectId(driverId); incomeService.updateById(income); TCompany company = iTCompanyService.selectById(driver.getCompanyId()); oldDriver.setBusinessMoney(oldDriver.getBusinessMoney() - income.getMoney()); oldDriver.setLaveBusinessMoney(oldDriver.getLaveBusinessMoney() - income.getMoney()); oldDriver.setBalance(oldDriver.getBalance().subtract(new BigDecimal(income.getMoney()))); driver.setBusinessMoney(driver.getBusinessMoney() + income.getMoney()); driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() + income.getMoney()); driver.setBalance(driver.getBalance().add(new BigDecimal(income.getMoney()))); //中台修改订单状态 if(ToolUtil.isNotEmpty(tOrderCrossCity.getTravelId())){ ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest(); request1.setOrderId(tOrderCrossCity.getTravelId()); request1.setStatus(tOrderCrossCity.getState()); if (null != tOrderCrossCity.getDriverId()) { request1.setDriverId(driver.getEmpId().toString()); request1.setSupplierShopId(company.getEnterCode()); } itDriverService.updateById(oldDriver); itDriverService.updateById(driver); if (2 == tOrderCrossCity.getPromotion()) { TDriver driver2 = itDriverService.selectById(tOrderCrossCity.getPromotionDriverId()); request1.setPromoterId(driver2.getEmpId().toString()); } OrderUtil.modifyTravelItinerary(request1); } //增加推送 Map<String,String> map = new HashMap<>(); map.put("orderId", tOrderCrossCity.getId().toString()); ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TOrderCrossCity.java
@@ -314,6 +314,63 @@ private Date voiceTime; /** * 是否异常订单 1否 2是 */ @TableField("abnormal") private Integer abnormal; /** * 推广订单 1否 2是 */ @TableField("promotion") private Integer promotion; /** * 乘客反馈情况 */ @TableField("abnormalIntro") private String abnormalIntro; /** * 乘客反馈图片 */ @TableField("abnormalImg") private String abnormalImg; private String splitAllocation; private Long promotionActivityId; private String promotionUser; private String promotionPhone; /** * 中台行程id */ private String travelId; /** * 中台是否已创建订单(0=否,1=是) */ private Integer isCreated; /** * 是否是追缴单(0=否,1=是) */ private Integer recoveryOrder; /** * 是否生成追缴单(0=否,1=是) */ private Integer isGenerateRecoveryOrder; /** * 原始订单id */ private Integer oldOrderId; private Date recoveryOrderCreateDate; private Date payTime; public String getVoice() { return voice; } @@ -929,6 +986,126 @@ this.payOrderId = payOrderId; } public Integer getAbnormal() { return abnormal; } public void setAbnormal(Integer abnormal) { this.abnormal = abnormal; } public Integer getPromotion() { return promotion; } public void setPromotion(Integer promotion) { this.promotion = promotion; } public String getAbnormalIntro() { return abnormalIntro; } public void setAbnormalIntro(String abnormalIntro) { this.abnormalIntro = abnormalIntro; } public String getAbnormalImg() { return abnormalImg; } public void setAbnormalImg(String abnormalImg) { this.abnormalImg = abnormalImg; } public String getSplitAllocation() { return splitAllocation; } public void setSplitAllocation(String splitAllocation) { this.splitAllocation = splitAllocation; } public Long getPromotionActivityId() { return promotionActivityId; } public void setPromotionActivityId(Long promotionActivityId) { this.promotionActivityId = promotionActivityId; } public String getPromotionUser() { return promotionUser; } public void setPromotionUser(String promotionUser) { this.promotionUser = promotionUser; } public String getPromotionPhone() { return promotionPhone; } public void setPromotionPhone(String promotionPhone) { this.promotionPhone = promotionPhone; } public String getTravelId() { return travelId; } public void setTravelId(String travelId) { this.travelId = travelId; } public Integer getIsCreated() { return isCreated; } public void setIsCreated(Integer isCreated) { this.isCreated = isCreated; } public Integer getRecoveryOrder() { return recoveryOrder; } public void setRecoveryOrder(Integer recoveryOrder) { this.recoveryOrder = recoveryOrder; } public Integer getIsGenerateRecoveryOrder() { return isGenerateRecoveryOrder; } public void setIsGenerateRecoveryOrder(Integer isGenerateRecoveryOrder) { this.isGenerateRecoveryOrder = isGenerateRecoveryOrder; } public Integer getOldOrderId() { return oldOrderId; } public void setOldOrderId(Integer oldOrderId) { this.oldOrderId = oldOrderId; } public Date getRecoveryOrderCreateDate() { return recoveryOrderCreateDate; } public void setRecoveryOrderCreateDate(Date recoveryOrderCreateDate) { this.recoveryOrderCreateDate = recoveryOrderCreateDate; } public Date getPayTime() { return payTime; } public void setPayTime(Date payTime) { this.payTime = payTime; } @Override protected Serializable pkVal() { return this.id; ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/OrderUtil.java
@@ -678,4 +678,132 @@ } /** * 订单退款 * @param request * @return */ public static TradeOrderRefund tradeOrderRefund(TradeOrderRefundRequest request) { request.setPayPartnerId("prod".equals(qianYunTongConfig.getActiveProfile()) ? "5400004" : "5401007"); //请求路径 String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderRefund"; //私钥文件 String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath(); //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = qianYunTongConfig.getAppkey();//appkey Map<String, String> headers = new HashMap<>(); headers.put("Content-Type", "application/json"); Map<String, Object> contentMap = new HashMap<String, Object>(); Date nowdate = new Date(); SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss"); String timeStamp = date.format(nowdate); String messageId = UUIDUtil.getRandomCode(); contentMap.put(SystemParameterNames.getAppKey(), appKey); contentMap.put(SystemParameterNames.getMessage_id(), messageId); contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName()); contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus()); contentMap.put("content", new Gson().toJson(request)); log.info("【订单退款】请求地址:" + url); log.info("【订单退款】请求参数:" + JSON.toJSONString(contentMap)); String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap); log.info("【订单退款】请求结果:" + result); JSONObject jsonObject = JSON.parseObject(result); String resCode = jsonObject.getString("resCode"); if (!"000000".equals(resCode)) { log.error("【订单退款】失败:" + jsonObject.getString("resMsg")); throw new RuntimeException("【订单退款】失败:" + jsonObject.getString("resMsg")); } JSONObject refundInfo = jsonObject.getJSONObject("busiResp").getJSONObject("refundInfo"); String retCode = refundInfo.getString("retCode"); if(!"".equals(retCode)){ log.error("【订单退款】失败:" + refundInfo.getString("retMsg")); throw new RuntimeException("【订单退款】失败:" + refundInfo.getString("retMsg")); } TradeOrderRefund tradeOrderRefund = refundInfo.getObject("data", TradeOrderRefund.class); return tradeOrderRefund; } /** * 订单退款通知 * @param request */ public static void orderRefundNotice(OrderRefundNoticeRequest request) { request.setScene("TRAFFIC"); request.setMhltiCenterAppId("52270015"); //请求路径 String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/orderRefundNotice"; //私钥文件 String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath(); //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = qianYunTongConfig.getAppkey();//appkey Map<String, String> headers = new HashMap<>(); headers.put("Content-Type", "application/json"); Map<String, Object> contentMap = new HashMap<String, Object>(); Date nowdate = new Date(); SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss"); String timeStamp = date.format(nowdate); String messageId = UUIDUtil.getRandomCode(); contentMap.put(SystemParameterNames.getAppKey(), appKey); contentMap.put(SystemParameterNames.getMessage_id(), messageId); contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName()); contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus()); contentMap.put("content", new Gson().toJson(request)); log.info("【订单退款通知】请求地址:" + url); log.info("【订单退款通知】请求参数:" + JSON.toJSONString(contentMap)); String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap); log.info("【订单退款通知】请求结果:" + result); JSONObject jsonObject = JSON.parseObject(result); String resCode = jsonObject.getString("resCode"); if (!"000000".equals(resCode)) { log.error("【订单退款通知】失败:" + jsonObject.getString("resMsg")); throw new RuntimeException("【订单退款通知】失败:" + jsonObject.getString("resMsg")); } } /** * 订单取消 * @param orderId */ public static void tradeOrderCancel(String orderId) { TradeOrderCancelRequest request = new TradeOrderCancelRequest(); request.setScene("TRAFFIC"); request.setMhltiCenterAppId("52270015"); request.setOrderId(orderId); //请求路径 String url = qianYunTongConfig.getApiUrl() + "/openapi/rest/1.0/tradeOrderCancel"; //私钥文件 String skprivateKeyFile = qianYunTongConfig.getPrivateKeyPath(); //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = qianYunTongConfig.getAppkey();//appkey Map<String, String> headers = new HashMap<>(); headers.put("Content-Type", "application/json"); Map<String, Object> contentMap = new HashMap<String, Object>(); Date nowdate = new Date(); SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss"); String timeStamp = date.format(nowdate); String messageId = UUIDUtil.getRandomCode(); contentMap.put(SystemParameterNames.getAppKey(), appKey); contentMap.put(SystemParameterNames.getMessage_id(), messageId); contentMap.put(SystemParameterNames.getUserName(), qianYunTongConfig.getUserName()); contentMap.put(SystemParameterNames.getStatus(), qianYunTongConfig.getStatus()); contentMap.put("content", new Gson().toJson(request)); log.info("【订单取消】请求地址:" + url); log.info("【订单取消】请求参数:" + JSON.toJSONString(contentMap)); String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap); log.info("【订单取消】请求结果:" + result); JSONObject jsonObject = JSON.parseObject(result); String resCode = jsonObject.getString("resCode"); if (!"000000".equals(resCode)) { log.error("【订单取消】失败:" + jsonObject.getString("resMsg")); throw new RuntimeException("【订单取消】失败:" + jsonObject.getString("resMsg")); } } } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/OrderRefundNoticeRequest.java
New file @@ -0,0 +1,49 @@ package com.stylefeng.guns.modular.system.util.qianyuntong.model; import lombok.Data; import java.math.BigDecimal; @Data public class OrderRefundNoticeRequest { /** * 场景标识 */ private String scene; /** * 订单中心订单号 */ private String orderId; /** * 场景应用标识。默认52270015 */ private String mhltiCenterAppId; /** * 退款工单标识 */ private String refundPayNum; /** * 退款类型 1:未发货退款 2:未破损拒收 3:破损拒收 4:部分退款 5:全部退款 */ private String refundType; /** * 申请退款金额 */ private BigDecimal applyRefundCharge; /** * 实际退款金额 */ private BigDecimal actualRefundCharge; /** * 退款人 */ private String refundPerson; /** * 退款账号 */ private String refundAccount; /** * 退款理由 */ private String remark; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/RefundInfoRequest.java
New file @@ -0,0 +1,19 @@ package com.stylefeng.guns.modular.system.util.qianyuntong.model; import lombok.Data; @Data public class RefundInfoRequest { /** * 支付交易明细标识 */ private String payItemId; /** * 支付工单标识 */ private String payId; /** * 交易金额,单位分 */ private String tradeFee; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderCancelRequest.java
New file @@ -0,0 +1,19 @@ package com.stylefeng.guns.modular.system.util.qianyuntong.model; import lombok.Data; @Data public class TradeOrderCancelRequest { /** * 场景标识 */ private String scene; /** * 订单中心订单号 */ private String orderId; /** * 场景应用标识。默认52270015 */ private String mhltiCenterAppId; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefund.java
New file @@ -0,0 +1,15 @@ package com.stylefeng.guns.modular.system.util.qianyuntong.model; import lombok.Data; @Data public class TradeOrderRefund { /** * 退款总金额 */ private String refundTotalFee; /** * 退款标识 */ private String refundId; } ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/TradeOrderRefundRequest.java
New file @@ -0,0 +1,42 @@ package com.stylefeng.guns.modular.system.util.qianyuntong.model; import lombok.Data; import java.util.List; @Data public class TradeOrderRefundRequest { /** * 商户号,由支付中心分配。测试环境5400004,生产环境:5401007 */ private String payPartnerId; /** * 订单中心订单号 */ private String partnerPayId; /** * 支付工单标识 */ private String payId; /** * 退款总金额,单位为分 * 同一退款单多次发起退款请求时,退款金额必须一致 */ private String refundTotalFee; /** * 退款原因 */ private String remark; /** * 退款类型: * RF 退款 * BR 部分退款(目前仅集团统一支付支持部分退款) * CZ 冲正 */ private String refundType; /** * 支付退款单明细集合 */ private List<RefundInfoRequest> refundInfos; }