You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
380 lines
20 KiB
380 lines
20 KiB
package com.cweb.controller;
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.cweb.config.SysConst;
|
|
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.*;
|
|
import com.hai.config.*;
|
|
import com.hai.dao.HighGasOrderPushMapper;
|
|
import com.hai.entity.*;
|
|
import com.hai.model.*;
|
|
import com.hai.service.*;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.ApiOperation;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
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.beans.BeanUtils;
|
|
import org.springframework.stereotype.Controller;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.net.ssl.SSLContext;
|
|
import java.io.FileInputStream;
|
|
import java.math.BigDecimal;
|
|
import java.security.KeyStore;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* @Auther: 胡锐
|
|
* @Description:
|
|
* @Date: 2021/3/26 23:08
|
|
*/
|
|
@Controller
|
|
@RequestMapping(value = "/test")
|
|
@Api(value = "订单接口")
|
|
public class HighTestController {
|
|
|
|
private static Logger log = LoggerFactory.getLogger(HighTestController.class);
|
|
|
|
@Resource
|
|
private HighMerchantService highMerchantService;
|
|
|
|
@Resource
|
|
private HighMerchantStoreService highMerchantStoreService;
|
|
|
|
@Resource
|
|
private HighGasOilPriceService highGasOilPriceService;
|
|
|
|
@Resource
|
|
private HighOrderService highOrderService;
|
|
|
|
@Resource
|
|
private HighProfitSharingRecordService highProfitSharingRecordService;
|
|
|
|
@Resource
|
|
private HighGasOrderPushMapper highGasOrderPushMapper;
|
|
|
|
@Resource
|
|
private HuiLianTongConfig huiLianTongConfig;
|
|
|
|
@RequestMapping(value = "/initTYMerchantStore", method = RequestMethod.GET)
|
|
@ResponseBody
|
|
@ApiOperation(value = "初始化加油站")
|
|
public ResponseData initTYMerchantStore(@RequestParam(name = "merchantId", required = true) Long merchantId) throws Exception {
|
|
|
|
HighMerchantModel merchant = highMerchantService.getMerchantById(merchantId);
|
|
if (merchant == null) {
|
|
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到商户");
|
|
}
|
|
JSONObject jsonObjectP = TuanYouConfig.queryGasInfoListByPage(1, 1000);
|
|
JSONObject resultObjectP = jsonObjectP.getObject("result", JSONObject.class);
|
|
|
|
for (int i = 1; i <= resultObjectP.getInteger("totalPageNum").intValue();i++) {
|
|
JSONObject jsonObject = TuanYouConfig.queryGasInfoListByPage(i, 1000);
|
|
JSONObject resultObject = jsonObject.getObject("result", JSONObject.class);
|
|
JSONArray jsonArray = resultObject.getJSONArray("gasInfoList");
|
|
HighMerchantStore highMerchantStore;
|
|
HighGasOilPrice highGasOilPrice;
|
|
for (Object gasObject : jsonArray) {
|
|
JSONObject object = JSONObject.parseObject(JSONObject.toJSONString(gasObject));
|
|
HighMerchantStoreModel store = highMerchantStoreService.getMerchantStoreByKey(object.getString("gasId"));
|
|
if (store != null) {
|
|
store.setType(1);
|
|
store.setMerchantId(merchant.getId());
|
|
store.setCompanyId(merchant.getCompanyId());
|
|
store.setStoreKey(object.getString("gasId"));
|
|
store.setStoreName(object.getString("gasName"));
|
|
store.setStoreLogo(object.getString("gasLogoSmall"));
|
|
store.setRegionId(object.getLong("provinceCode"));
|
|
store.setRegionName(object.getString("provinceName"));
|
|
store.setAddress(object.getString("gasAddress"));
|
|
store.setLongitude(object.getString("gasAddressLongitude"));
|
|
store.setLatitude(object.getString("gasAddressLatitude"));
|
|
store.setStatus(object.getInteger("gasStatus"));
|
|
store.setOperatorId(0L);
|
|
store.setOperatorName("系统创建");
|
|
store.setUpdateTime(new Date());
|
|
store.setExt1(object.getString("gasSourceId"));
|
|
highMerchantStoreService.updateMerchantStoreDetail(store);
|
|
|
|
JSONArray oilPriceList = object.getJSONArray("oilPriceList");
|
|
for (Object oilPrice : oilPriceList) {
|
|
JSONObject oilPriceObject = JSONObject.parseObject(JSONObject.toJSONString(oilPrice));
|
|
// 查询门店油号
|
|
highGasOilPrice = highGasOilPriceService.getGasOilPriceByStoreAndOilNo(store.getId(), oilPriceObject.getInteger("oilNo"));
|
|
if (highGasOilPrice == null) {
|
|
highGasOilPrice = new HighGasOilPrice();
|
|
highGasOilPrice.setMerchantStoreId(store.getId());
|
|
highGasOilPrice.setOilNo(oilPriceObject.getInteger("oilNo"));
|
|
highGasOilPrice.setOilNoName(oilPriceObject.getString("oilNoName"));
|
|
highGasOilPrice.setPriceVip(oilPriceObject.getBigDecimal("priceVip"));
|
|
highGasOilPrice.setPriceGun(oilPriceObject.getBigDecimal("priceGun"));
|
|
highGasOilPrice.setPriceOfficial(oilPriceObject.getBigDecimal("priceOfficial"));
|
|
highGasOilPrice.setOilType(oilPriceObject.getInteger("oilType"));
|
|
highGasOilPrice.setOilTypeName(oilPriceObject.getString("oilTypeName"));
|
|
} else {
|
|
highGasOilPrice.setMerchantStoreId(store.getId());
|
|
highGasOilPrice.setOilNo(oilPriceObject.getInteger("oilNo"));
|
|
highGasOilPrice.setOilNoName(oilPriceObject.getString("oilNoName"));
|
|
highGasOilPrice.setPriceVip(oilPriceObject.getBigDecimal("priceVip"));
|
|
highGasOilPrice.setPriceGun(oilPriceObject.getBigDecimal("priceGun"));
|
|
highGasOilPrice.setPriceOfficial(oilPriceObject.getBigDecimal("priceOfficial"));
|
|
highGasOilPrice.setOilType(oilPriceObject.getInteger("oilType"));
|
|
highGasOilPrice.setOilTypeName(oilPriceObject.getString("oilTypeName"));
|
|
}
|
|
highGasOilPriceService.editGasOilPrice(highGasOilPrice);
|
|
}
|
|
} else {
|
|
highMerchantStore = new HighMerchantStore();
|
|
highMerchantStore.setType(1);
|
|
highMerchantStore.setMerchantId(merchant.getId());
|
|
highMerchantStore.setCompanyId(merchant.getCompanyId());
|
|
highMerchantStore.setStoreKey(object.getString("gasId"));
|
|
highMerchantStore.setStoreName(object.getString("gasName"));
|
|
highMerchantStore.setStoreLogo(object.getString("gasLogoSmall"));
|
|
highMerchantStore.setRegionId(object.getLong("provinceCode"));
|
|
highMerchantStore.setRegionName(object.getString("provinceName"));
|
|
highMerchantStore.setAddress(object.getString("gasAddress"));
|
|
highMerchantStore.setLongitude(object.getString("gasAddressLongitude"));
|
|
highMerchantStore.setLatitude(object.getString("gasAddressLatitude"));
|
|
highMerchantStore.setStatus(1);
|
|
highMerchantStore.setOperatorId(0L);
|
|
highMerchantStore.setOperatorName("系统创建");
|
|
highMerchantStore.setCreateTime(new Date());
|
|
highMerchantStore.setUpdateTime(new Date());
|
|
highMerchantStore.setExt1(object.getString("gasSourceId"));
|
|
HighMerchantStoreModel merchantStoreModel = new HighMerchantStoreModel();
|
|
BeanUtils.copyProperties(highMerchantStore, merchantStoreModel);
|
|
highMerchantStoreService.insertMerchantStore(merchantStoreModel);
|
|
|
|
JSONArray oilPriceList = object.getJSONArray("oilPriceList");
|
|
for (Object oilPrice : oilPriceList) {
|
|
JSONObject oilPriceObject = JSONObject.parseObject(JSONObject.toJSONString(oilPrice));
|
|
highGasOilPrice = new HighGasOilPrice();
|
|
highGasOilPrice.setMerchantStoreId(merchantStoreModel.getId());
|
|
highGasOilPrice.setOilNo(oilPriceObject.getInteger("oilNo"));
|
|
highGasOilPrice.setOilNoName(oilPriceObject.getString("oilNoName"));
|
|
highGasOilPrice.setPriceVip(oilPriceObject.getBigDecimal("priceVip"));
|
|
highGasOilPrice.setPriceGun(oilPriceObject.getBigDecimal("priceGun"));
|
|
highGasOilPrice.setPriceOfficial(oilPriceObject.getBigDecimal("priceOfficial"));
|
|
highGasOilPrice.setOilType(oilPriceObject.getInteger("oilType"));
|
|
highGasOilPrice.setOilTypeName(oilPriceObject.getString("oilTypeName"));
|
|
highGasOilPriceService.editGasOilPrice(highGasOilPrice);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return ResponseMsgUtil.success("初始化完成");
|
|
}
|
|
|
|
@RequestMapping(value = "/pushTuanYouOrder", method = RequestMethod.GET)
|
|
@ResponseBody
|
|
@ApiOperation(value = "推送团油订单")
|
|
public ResponseData pushTuanYouOrder() {
|
|
try {
|
|
HighOrder order = highOrderService.getOrderByOrderNo("HF2021102112141171406");
|
|
for (HighChildOrder highChildOrder : order.getHighChildOrderList()) {
|
|
HighMerchantStoreModel store = highMerchantStoreService.getMerchantStoreById(highChildOrder.getGoodsId());
|
|
// 推送团油订单
|
|
Map<String, Object> paramMap = new HashMap<>();
|
|
paramMap.put("gasId", store.getStoreKey());
|
|
paramMap.put("oilNo", highChildOrder.getGasOilNo());
|
|
paramMap.put("gunNo", highChildOrder.getGasGunNo());
|
|
BigDecimal priceGun = highChildOrder.getGasPriceGun();
|
|
BigDecimal priceVip = highChildOrder.getGasPriceVip();
|
|
paramMap.put("priceGun", priceGun); // 枪单价
|
|
paramMap.put("priceVip", priceVip); // 优惠价
|
|
paramMap.put("driverPhone", order.getMemPhone());
|
|
// paramMap.put("driverPhone", "17726395120");
|
|
paramMap.put("thirdSerialNo", order.getOrderNo());
|
|
paramMap.put("refuelingAmount", highChildOrder.getTotalPrice());
|
|
|
|
// 油品类型 1:汽油:2:柴油;3:天然气
|
|
if (highChildOrder.getGasOilType() == 1) {
|
|
paramMap.put("accountNo", CommonSysConst.getSysConfig().getTuanYouGasolineAccount());
|
|
} else if (highChildOrder.getGasOilType() == 2) {
|
|
paramMap.put("accountNo", CommonSysConst.getSysConfig().getTuanYouDieselAccount());
|
|
}
|
|
JSONObject orderPushObject = TuanYouConfig.refuelingOrderPush(paramMap);
|
|
// 推送团油订单记录
|
|
HighGasOrderPush highGasOrderPush = new HighGasOrderPush();
|
|
highGasOrderPush.setCreateTime(new Date());
|
|
highGasOrderPush.setCode(orderPushObject.getString("code"));
|
|
highGasOrderPush.setRequestContent(JSONObject.toJSONString(paramMap));
|
|
highGasOrderPush.setReturnContent(orderPushObject.toJSONString());
|
|
highGasOrderPushMapper.insert(highGasOrderPush);
|
|
|
|
if (orderPushObject != null && orderPushObject.getString("code").equals("200")) {
|
|
highChildOrder.setGasOrderNo(orderPushObject.getJSONObject("result").getString("orderNo"));
|
|
}
|
|
highOrderService.updateOrder(order);
|
|
}
|
|
return ResponseMsgUtil.success(order);
|
|
} catch (Exception e) {
|
|
log.error("HighOrderController --> getOrderById() error!", e);
|
|
return ResponseMsgUtil.exception(e);
|
|
}
|
|
}
|
|
|
|
@RequestMapping(value = "/queryCompanyAccountInfo2JD", method = RequestMethod.GET)
|
|
@ResponseBody
|
|
@ApiOperation(value = "查询团油余额")
|
|
public ResponseData queryCompanyAccountInfo2JD() {
|
|
try {
|
|
|
|
return ResponseMsgUtil.success(TuanYouConfig.queryCompanyAccountInfo2JD());
|
|
} catch (Exception e) {
|
|
log.error("HighOrderController --> queryCompanyAccountInfo2JD() error!", e);
|
|
return ResponseMsgUtil.exception(e);
|
|
}
|
|
}
|
|
|
|
@RequestMapping(value = "/couJointDist", method = RequestMethod.GET)
|
|
@ResponseBody
|
|
@ApiOperation(value = "派发贵州卡券")
|
|
public ResponseData couJointDist(@RequestParam(name = "token", required = true) String token) {
|
|
try {
|
|
return ResponseMsgUtil.success(HuiLianTongConfig.couJointDist(token,"HF"+System.currentTimeMillis(),"20JY000251",2,"17726395120", "oArhO6XxKSvjI9wLP3cTK-iSG8yY"));
|
|
} catch (Exception e) {
|
|
log.error("HighOrderController --> getOrderById() error!", e);
|
|
return ResponseMsgUtil.exception(e);
|
|
}
|
|
}
|
|
|
|
@RequestMapping(value = "/unionPay", method = RequestMethod.GET)
|
|
@ResponseBody
|
|
@ApiOperation(value = "银联支付")
|
|
public ResponseData unionPay() {
|
|
try {
|
|
return ResponseMsgUtil.success(UnionPayConfig.apppayacc());
|
|
} catch (Exception e) {
|
|
log.error("HighOrderController --> getOrderById() error!", e);
|
|
return ResponseMsgUtil.exception(e);
|
|
}
|
|
}
|
|
|
|
@RequestMapping(value = "/wxSplitAccount", method = RequestMethod.GET)
|
|
@ResponseBody
|
|
@ApiOperation(value = "微信分账")
|
|
public ResponseData wxSplitAccount() {
|
|
try {
|
|
HighOrder orderNo = highOrderService.getOrderByOrderNo("HF2021101812025050304");
|
|
wxProfitsharing(orderNo.getOrderNo(),orderNo.getPaySerialNo(),orderNo.getPayRealPrice());
|
|
return ResponseMsgUtil.success("分账成功");
|
|
} catch (Exception e) {
|
|
log.error("HighOrderController --> getOrderById() error!", e);
|
|
return ResponseMsgUtil.exception(e);
|
|
}
|
|
}
|
|
|
|
|
|
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", "分给商户【惠昕石化】");
|
|
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);
|
|
|
|
if (!resultProfitSharing.getResult_code().equals("FAIL")) {
|
|
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);
|
|
}
|
|
}
|
|
|
|
public 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");
|
|
// FileInputStream instream = new FileInputStream("G:\\hurui-project/hai-parent/hai-service/src/main/java/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/refund"); // 设置响应头信息
|
|
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();
|
|
}
|
|
}
|
|
|
|
}
|
|
|