diff --git a/.gitignore b/.gitignore index aa55a6ec..dd7919d3 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,6 @@ v1/log/* v1/hai-schedule.iml + + hai-service/hai-service.iml \ No newline at end of file diff --git a/hai-bweb/src/main/java/com/bweb/controller/HighGasController.java b/hai-bweb/src/main/java/com/bweb/controller/HighGasController.java index 4aea9994..056bd7be 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/HighGasController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/HighGasController.java @@ -158,6 +158,7 @@ public class HighGasController { @ResponseBody @ApiOperation(value = "查询油站订单列表") public ResponseData getGasOrderList(@RequestParam(name = "orderNo", required = false) String orderNo, + @RequestParam(name = "storeId", required = false) Long storeId, @RequestParam(name = "status", required = false) Integer status, @RequestParam(name = "createTimeS", required = false) Long createTimeS, @RequestParam(name = "createTimeE", required = false) Long createTimeE, @@ -165,12 +166,44 @@ public class HighGasController { @RequestParam(name = "pageSize", required = true) Integer pageSize) { try { UserInfoModel userInfoModel = userCenter.getSessionModel(UserInfoModel.class); - if (userInfoModel == null || userInfoModel.getMerchantStore() == null) { + if (userInfoModel == null) { log.error("HighGasController -> disabledOil() error!",""); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMPETENCE_INSUFFICIENT, ""); } Map param = new HashMap<>();; - param.put("storeId", userInfoModel.getMerchantStore().getId()); + // 用户来源 0:超级管理员 1:公司 2:商户 3:门店 4. 代理商 5.充值后台工商 6.团油代理商 7.团油业务员 8. 加油站员工 + if (userInfoModel.getSecUser().getObjectType().equals(2)) { + if (storeId != null) { + param.put("storeId", storeId); + } else { + String storeIdStr = ""; + List storeList = merchantStoreService.getStoreListByMer(userInfoModel.getMerchant().getId()); + for (HighMerchantStore store : storeList) { + if (StringUtils.isBlank(storeIdStr)) { + storeIdStr += store.getId().toString(); + } else { + storeIdStr += "," + store.getId().toString(); + } + } + + if (StringUtils.isNotBlank(storeIdStr)) { + param.put("storeId", storeIdStr); + } else { + param.put("storeId", 0); + } + + } + + } else if (userInfoModel.getSecUser().getObjectType().equals(3)) { + param.put("storeId", userInfoModel.getMerchantStore().getId()); + + } else if (userInfoModel.getSecUser().getObjectType().equals(8)) { + param.put("storeId", userInfoModel.getMerchantStore().getId()); + + } else { + log.error("HighGasController -> disabledOil() error!",""); + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMPETENCE_INSUFFICIENT, ""); + } param.put("orderNo", orderNo); param.put("createTimeS", createTimeS); param.put("createTimeE", createTimeE); @@ -226,17 +259,51 @@ public class HighGasController { @ResponseBody @ApiOperation(value = "导出油站订单") public ResponseData exportGasOrder(@RequestParam(name = "orderNo", required = false) String orderNo, + @RequestParam(name = "storeId", required = false) Long storeId, @RequestParam(name = "status", required = false) Integer status, @RequestParam(name = "createTimeS", required = false) Long createTimeS, @RequestParam(name = "createTimeE", required = false) Long createTimeE) { try { UserInfoModel userInfoModel = userCenter.getSessionModel(UserInfoModel.class); - if (userInfoModel == null || userInfoModel.getMerchantStore() == null) { + if (userInfoModel == null) { log.error("HighGasController -> disabledOil() error!",""); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMPETENCE_INSUFFICIENT, ""); } - Map param = new HashMap<>();; - param.put("storeId", userInfoModel.getMerchantStore().getId()); + Map param = new HashMap<>(); + // 用户来源 0:超级管理员 1:公司 2:商户 3:门店 4. 代理商 5.充值后台工商 6.团油代理商 7.团油业务员 8. 加油站员工 + if (userInfoModel.getSecUser().getObjectType().equals(2)) { + if (storeId != null) { + param.put("storeId", storeId); + } else { + String storeIdStr = ""; + List storeList = merchantStoreService.getStoreListByMer(userInfoModel.getMerchant().getId()); + for (HighMerchantStore store : storeList) { + if (StringUtils.isBlank(storeIdStr)) { + storeIdStr += store.getId().toString(); + } else { + storeIdStr += "," + store.getId().toString(); + } + } + + if (StringUtils.isNotBlank(storeIdStr)) { + param.put("storeId", storeIdStr); + } else { + param.put("storeId", 0); + } + + } + + } else if (userInfoModel.getSecUser().getObjectType().equals(3)) { + param.put("storeId", userInfoModel.getMerchantStore().getId()); + + } else if (userInfoModel.getSecUser().getObjectType().equals(8)) { + param.put("storeId", userInfoModel.getMerchantStore().getId()); + + } else { + log.error("HighGasController -> disabledOil() error!",""); + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMPETENCE_INSUFFICIENT, ""); + } + param.put("orderNo", orderNo); param.put("createTimeS", createTimeS); param.put("createTimeE", createTimeE); diff --git a/hai-bweb/src/main/java/com/bweb/controller/HighMerchantTripartitePlatformController.java b/hai-bweb/src/main/java/com/bweb/controller/HighMerchantTripartitePlatformController.java index d5c92ce0..5cf2012f 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/HighMerchantTripartitePlatformController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/HighMerchantTripartitePlatformController.java @@ -4,9 +4,14 @@ 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.HttpsUtils; import com.hai.common.utils.ResponseMsgUtil; +import com.hai.common.utils.WxUtils; import com.hai.entity.HighMerchantTripartitePlatform; import com.hai.model.ResponseData; +import com.hai.model.WxSharingReceiversVO; import com.hai.service.HighMerchantTripartitePlatformService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -18,6 +23,9 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.SortedMap; @Controller @RequestMapping(value = "/merchantTripartitePlatform") @@ -45,14 +53,17 @@ public class HighMerchantTripartitePlatformController { throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); } - if (body.getBoolean("profitSharingStatus") == true && body.getBigDecimal("profitSharingRatio") == null) { + if (body.getBoolean("profitSharingStatus") == true && + (body.getBigDecimal("profitSharingRatio") == null || + StringUtils.isBlank(body.getString("profitSharingReceiversNumber")) || + StringUtils.isBlank(body.getString("profitSharingReceiversName")))) { log.error("HighMerchantController -> insertMerchantStore() error!",""); throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); } + HighMerchantTripartitePlatform platform = tripartitePlatformService.getDetail(body.getLong("merId"), body.getInteger("platformType")); if (platform == null) { platform = new HighMerchantTripartitePlatform(); - } platform.setMerId(body.getLong("merId")); platform.setPlatformType(body.getInteger("platformType")); @@ -60,6 +71,33 @@ public class HighMerchantTripartitePlatformController { platform.setPlatformMerNumber(body.getString("platformMerNumber")); platform.setProfitSharingStatus(body.getBoolean("profitSharingStatus")); platform.setProfitSharingRatio(body.getBigDecimal("profitSharingRatio")); + platform.setProfitSharingReceiversNumber(body.getString("profitSharingReceiversNumber")); + platform.setProfitSharingReceiversName(body.getString("profitSharingReceiversName")); + + // 微信平台 增加分账关系 + if (platform.getPlatformType().equals(1) && platform.getProfitSharingStatus().equals(true)) { + WxSharingReceiversVO receiversVO = new WxSharingReceiversVO(); + receiversVO.setAccount(platform.getProfitSharingReceiversNumber()); + receiversVO.setType("MERCHANT_ID"); + receiversVO.setName(platform.getProfitSharingReceiversName()); + receiversVO.setRelation_type("SERVICE_PROVIDER"); + + Map map = new HashMap<>(); + map.put("mch_id" , "1289663601"); // 服务商 + map.put("sub_mch_id" , platform.getPlatformMerNumber()); + map.put("appid" , "wxa075e8509802f826"); + map.put("nonce_str" , WxUtils.makeNonStr()); + map.put("sign_type" , "HMAC-SHA256"); + map.put("receiver" , JSONObject.toJSONString(receiversVO)); + String sign = WxUtils.generateSignature(map, "Skufk5oi85wDFGl888i6wsRSTkdd5df5" , WXPayConstants.SignType.HMACSHA256); + map.put("sign" , sign); + String notifyXml = HttpsUtils.postData("https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver", WxUtils.mapToXml(map)); + SortedMap postData = XmlUtil.parseXmlToTreeMap(notifyXml, "UTF-8"); + if (!postData.get("result_code").equals("SUCCESS")) { + log.error("HighMerchantController -> editTripartitePlatform() error!", postData.get("err_code_des")); + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, postData.get("err_code_des")); + } + } tripartitePlatformService.editDate(platform); return ResponseMsgUtil.success("操作成功"); diff --git a/hai-bweb/src/main/java/com/bweb/controller/HighOrderController.java b/hai-bweb/src/main/java/com/bweb/controller/HighOrderController.java index d0f92c61..ec7436fd 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/HighOrderController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/HighOrderController.java @@ -72,6 +72,31 @@ public class HighOrderController { private HighTySalesmanService highTySalesmanService; + @RequestMapping(value = "/print", method = RequestMethod.GET) + @ResponseBody + @ApiOperation(value = "打印") + public ResponseData print(@RequestParam(name = "orderId", required = true) Long orderId) { + try { + + HighOrder order = highOrderService.getOrderById(orderId); + if (order == null) { + log.error("HighCouponController -> getCouponList() error!","权限不足"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMPETENCE_INSUFFICIENT, ""); + } + + order.setPrintStatus(true); + order.setPrintNum(order.getPrintNum() + 1); + highOrderService.updateOrderDetail(order); + + return ResponseMsgUtil.success("操作成功"); + + } catch (Exception e) { + log.error("HighOrderController --> print() error!", e); + return ResponseMsgUtil.exception(e); + } + } + + @RequestMapping(value = "/getOrderById", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "根据id查询订单详情") @@ -321,6 +346,9 @@ public class HighOrderController { } else if (userInfoModel.getSecUser().getObjectType() == 2) { map.put("merchantId", userInfoModel.getMerchant().getId()); + + } else { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMPETENCE_INSUFFICIENT, ""); } map.put("orderNo", orderNo); diff --git a/hai-bweb/src/main/java/com/bweb/controller/HighTestController.java b/hai-bweb/src/main/java/com/bweb/controller/HighTestController.java index 20cebf57..00cabd48 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/HighTestController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/HighTestController.java @@ -1 +1 @@ -package com.bweb.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.bweb.config.SysConst; import com.google.gson.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.DateUtil; import com.hai.common.utils.HttpsUtils; import com.hai.common.utils.ResponseMsgUtil; import com.hai.common.utils.WxUtils; import com.hai.config.*; import com.hai.dao.HighGasOrderPushMapper; import com.hai.entity.*; import com.hai.model.*; import com.hai.service.*; import com.hai.service.pay.impl.GoodsOrderServiceImpl; 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.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.net.ssl.SSLContext; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.math.BigDecimal; import java.security.KeyStore; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; 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 HltUnionCardVipService hltUnionCardVipService; @Resource private OutRechargeOrderService outRechargeOrderService; @Resource private HighOrderService highOrderService; @Resource private HighUserService highUserService; @Resource private SecSinopecConfigService secSinopecConfigService; @Resource private HighCouponCodeService highCouponCodeService; @Resource private HighOilCardService oilCardService; @Resource private GoodsOrderServiceImpl goodsOrderService; @Resource private BaiduVoiceService baiduVoiceService; @Resource private HighGasOilPriceOfficialService gasOilPriceOfficialService; @Resource private HighProfitSharingRecordService highProfitSharingRecordService; @RequestMapping(value = "/oilCardRefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "油卡退款") public ResponseData oilCardRefund(@RequestParam(name = "orderNo", required = true) String orderNo,HttpServletRequest request) { try { oilCardService.refund(orderNo); return ResponseMsgUtil.success(""); } catch (Exception e) { log.error("HighUserCardController --> oilCardRefund() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/refreshGasPriceOfficial", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "刷新国标价") public ResponseData refreshGasPriceOfficial() { try { gasOilPriceOfficialService.refreshPriceOfficial(); gasOilPriceOfficialService.refreshGasPriceOfficial(null, null); return ResponseMsgUtil.success("操作成功"); } catch (Exception e) { log.error("HighUserCardController --> oilCardRefund() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/wxProfitsharing", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分账") public ResponseData wxProfitsharing(@RequestParam(name = "orderNo", required = true) String orderNo) { try { HighOrder order = highOrderService.getOrderByOrderNo(orderNo); BigDecimal rake = new BigDecimal("0.01"); // 计算微信收取的手续费 支付金额 * 0.002 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 BigDecimal wxHandlingFee = order.getPayPrice().multiply(new BigDecimal("0.002")).setScale(2,BigDecimal.ROUND_HALF_DOWN); BigDecimal price = order.getPayPrice().subtract(wxHandlingFee); Map param = new LinkedHashMap<>(); param.put("appid", "wx637bd6f7314daa46"); param.put("mch_id", "1289663601"); param.put("sub_mch_id" , "1624126902"); // 渝北区浩联物资经营部 param.put("transaction_id" , order.getPaySerialNo()); param.put("out_order_no" , order.getOrderNo()); param.put("nonce_str" , WxUtils.makeNonStr()); // 计算分账金额 手续费后的价格 * 0.01 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 BigDecimal porofitSharingAmount = price.multiply(rake).setScale(2,BigDecimal.ROUND_DOWN); List> receiversList = new ArrayList<>(); Map 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.profitsharing(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(porofitSharingAmount); sharingRecord.setCreateTime(new Date()); sharingRecord.setContent(resultXmL); highProfitSharingRecordService.insert(sharingRecord); return ResponseMsgUtil.success("操作成功"); } catch (Exception e) { log.error("CmsContentController --> getCorporateAdvertising() error!", e); return ResponseMsgUtil.success(e); } } public String profitsharing(String mchId, String url, String data) throws Exception { //小程序退款需要调用双向证书的认证 CloseableHttpClient httpClient = goodsOrderService.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 = "/getBackendToken", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "获取访问令牌backendToken") public ResponseData getBackendToken() { try { return ResponseMsgUtil.success(null); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/sys", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "同步") public ResponseData sys(@RequestParam(name = "appId", required = true) String appId, @RequestParam(name = "appSecret", required = true) String appSecret, @RequestParam(name = "code", required = true) String code, @RequestParam(name = "signKey", required = true) String signKey ) { try { Map tokenMap = new HashMap<>(); tokenMap.put("appId", appId); tokenMap.put("appSecret", appSecret); JSONObject jsonObject = HttpsUtils.doPost("https://app.zshcqsy.com/api-provider/api/open/merchant/token", JSON.toJSONString(tokenMap)); log.error(jsonObject.toJSONString()); if (jsonObject != null && jsonObject.getBoolean("success") == true) { JSONObject data = jsonObject.getJSONObject("data"); String token = data.getString("token"); Calendar instance = Calendar.getInstance(); instance.set(2021,3,1); Map bodyMap = new HashMap<>(); bodyMap.put("appId", appId); bodyMap.put("pageNo", 1); bodyMap.put("pageSize", 999999); bodyMap.put("startTime", instance.getTime()); bodyMap.put("endTime", new Date().getTime()); bodyMap.put("customerCode", code); Long date = new Date().getTime(); String sha256 = encodeBySHA256(signKey + JSON.toJSONString(bodyMap) + date); JSONObject object = HttpsUtils.doPost("https://app.zshcqsy.com/api-provider/sapapi/open/coupon/customerRedeemcodeList", JSON.toJSONString(bodyMap), token, sha256, date); File file = new File("/home/data/" + System.currentTimeMillis() + ".txt"); if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(object.toJSONString()); bw.close(); //JSONObject object = JSONObject.parseObject("{\"code\":1000,\"data\":{\"pageNo\":1,\"pageSize\":100,\"rowCount\":\"2\",\"list\":[{\"nodeName\":\"中国石油化工股份有限公司重庆江南石油分公司大学城南二路加油加\",\"totalAmount\":150.00,\"codeId\":\"01DIhbtPzIghPP0mPWaWzO13\",\"nodeNo\":\"50000105\",\"name\":\"重庆惠昕石化有限责任公司11.02日150元券\",\"useTime\":\"2021-04-03 06:11:14\"},{\"nodeName\":\"中国石化销售有限公司重庆三峡分公司忠县经营部三台加油站\",\"totalAmount\":100.00,\"codeId\":\"201126141728001027\",\"nodeNo\":\"50000238\",\"name\":\"重庆惠昕石化有限责任公司11.26日100元券\",\"useTime\":\"2021-04-03 15:16:03\"}]},\"success\":true}"); if(Objects.equals(object.get("success"), true)) { log.error(JSONObject.toJSONString(object.get("data"))); Object dataJson = JSONObject.parse(JSONObject.toJSONString(object.get("data"))); JSONObject dataObject = JSON.parseObject(JSONObject.toJSONString(dataJson)); JSONArray list = dataObject.getJSONArray("list"); for (Object dataJsonObject : list) { try { JSONObject parseObject = JSON.parseObject(JSON.toJSONString(dataJsonObject)); String codeId = parseObject.getString("codeId"); String nodeName = parseObject.getString("nodeName"); Date useTime = DateUtil.format(parseObject.getString("useTime"), "yyyy-MM-dd HH:mm:ss"); highCouponCodeService.cnpcCallbackCouponCode(codeId, useTime, nodeName); } catch (Exception e) { log.error("HighCouponSchedule --> expiredCoupon() error!", e); } } } return ResponseMsgUtil.success("下载成功"); } return ResponseMsgUtil.success(jsonObject); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() error!", e); return ResponseMsgUtil.exception(e); } } public String encodeBySHA256(String str) { try{ MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.reset(); messageDigest.update(str.getBytes("UTF-8")); return getFormattedText(messageDigest.digest()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (Exception e) { throw new RuntimeException(e); } return ""; } private static final String[] HEX_DIGITS = {"0" ,"1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}; private String getFormattedText(byte[] bytes) { int len = bytes.length; StringBuilder buf = new StringBuilder(len * 2); // 把密文转换成十六进制的字符串形式 for (int j=0;j> 4) & 0x0f]); buf.append(HEX_DIGITS[bytes[j] & 0x0f]); } return buf.toString(); } @ResponseBody @ApiOperation(value = "请求会员体系") public ResponseData GetMembershipLevel(@RequestParam(name = "phone", required = true) String phone , @RequestParam(name = "regionId", required = true) String regionId ) { try { return ResponseMsgUtil.success(hltUnionCardVipService.GetMembershipLevel(phone , regionId)); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/submitSms", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "请求短信") public ResponseData submitSms(@RequestParam(name = "phone", required = true) String phone , @RequestParam(name = "sms", required = true) String sms ) { try { return ResponseMsgUtil.success(HuiLianTongUnionCardConfig.submitSms(phone , sms)); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value="/resolveResponse",method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "解析") public ResponseData resolveResponse( @RequestParam(name = "data", required = false) String data ) { try { JSONObject cardInfoObject = HuiLianTongUnionCardConfig.resolveResponse(data); return ResponseMsgUtil.success(cardInfoObject); } catch (Exception e) { log.error("getUserByTelephone",e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value="/queryAmount",method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询余额") public ResponseData queryAmount() { try { // outRechargeOrderService.queryAmount(); return ResponseMsgUtil.success(null); } catch (Exception e) { log.error("getUserByTelephone",e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/getHuiLianTongCardConsume", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询汇联通工会卡消费记录") public ResponseData getHuiLianTongCardConsume(@RequestParam(name = "businessType", required = true) String businessType, @RequestParam(name = "cardNo", required = true) String cardNo, @RequestParam(name = "sdate", required = true) Long sdate, @RequestParam(name = "edate", required = true) Long edate, @RequestParam(name = "pageNum", required = true) Integer pageNum, @RequestParam(name = "pageSize", required = true) Integer pageSize, HttpServletRequest request) { try { JSONObject consumptionRecord = HuiLianTongUnionCardConfig.queryConsumptionRecordByBusiness(businessType, cardNo, sdate, edate, pageNum, pageSize); if (StringUtils.isBlank(consumptionRecord.getString("data"))) { throw ErrorHelp.genException(SysCode.System, ErrorCode.REQUEST_ERROR, ""); } return ResponseMsgUtil.success(HuiLianTongUnionCardConfig.resolveResponse(consumptionRecord.getString("data"))); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardConsume() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/orderToRefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "积分充值退款") public ResponseData orderToRefund(@RequestParam(name = "orderId", required = true) Long orderId ,HttpServletRequest request) { try { HighOrder highOrder = highOrderService.getOrderById(orderId); // 微信退款 OrderRefundModel orderRefundModel = WxOrderConfig.orderToRefund(highOrder.getPaySerialNo(), highOrder.getPayRealPrice(), highOrder.getPayRealPrice()); if(orderRefundModel.getResult_code().equals("SUCCESS")) { for (HighChildOrder childOrder : highOrder.getHighChildOrderList()) { childOrder.setChildOrdeStatus(4); } highOrder.setOrderStatus(4); highOrder.setRefundTime(new Date()); highOrder.setRefundPrice(highOrder.getPayRealPrice()); highOrderService.updateOrder(highOrder); } if (highUserService.findGoldRepeat(3 , highOrder.getId())) { highUserService.goldHandle(highOrder.getMemId(), highOrder.getPayRealPrice().multiply(BigDecimal.valueOf(100)).intValue(), 2, 3, highOrder.getId()); }else { log.error("orderToPay error!", "已有退款记录"); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "已有退款记录"); } return ResponseMsgUtil.success(orderRefundModel); } catch (Exception e) { log.error("HighOrderController --> orderToRefund() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/orderToRefundByHlt", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "汇联通充值退款") public ResponseData orderToRefundByHlt(@RequestParam(name = "orderId", required = true) Long orderId ,HttpServletRequest request) { try { HighOrder highOrder = highOrderService.getOrderById(orderId); // 微信退款 OrderRefundModel orderRefundModel = WxOrderConfig.orderToRefund(highOrder.getPaySerialNo(), highOrder.getPayRealPrice(), WxOrderConfig.MCH_ID_1619676214 , highOrder.getPayRealPrice()); if(orderRefundModel.getResult_code().equals("SUCCESS")) { for (HighChildOrder childOrder : highOrder.getHighChildOrderList()) { childOrder.setChildOrdeStatus(4); } highOrder.setOrderStatus(4); highOrder.setRefundTime(new Date()); highOrder.setRefundPrice(highOrder.getPayRealPrice()); highOrderService.updateOrder(highOrder); } return ResponseMsgUtil.success(orderRefundModel); } catch (Exception e) { log.error("HighOrderController --> orderToRefund() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/rechargeOrderToRefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "话费退款") public ResponseData rechargeOrderToRefund( @RequestParam(name = "orderId", required = true) Long orderId) { try { outRechargeOrderService.rechargeOrderToRefund(orderId); return ResponseMsgUtil.success("退款成功"); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/websocket", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "websocket") public ResponseData websocket( @RequestParam(name = "userId", required = true) String orderNo ) { try { HighOrder order = highOrderService.getOrderByOrderNo(orderNo); if (order.getHighChildOrderList().get(0).getGoodsType().equals(3)) { Map pushMsg = new HashMap<>(); pushMsg.put("userId", order.getHighChildOrderList().get(0).getGoodsId()); Map msgContent = new HashMap<>(); msgContent.put("order", highOrderService.getGasOrderDetail(order.getOrderNo())); msgContent.put("voice", baiduVoiceService.text2audio(order.getHighChildOrderList().get(0).getGoodsName() + "加油站,收款:" + order.getTotalPrice())); pushMsg.put("message", JSONObject.toJSONString(msgContent)); HttpsUtils.doPost("http://139.159.177.244:9901/msg/websocket/websocket", pushMsg, new HashMap<>()); } return ResponseMsgUtil.success("请求成功"); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } } \ No newline at end of file +package com.bweb.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.bweb.config.SysConst; import com.google.gson.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.DateUtil; import com.hai.common.utils.HttpsUtils; import com.hai.common.utils.ResponseMsgUtil; import com.hai.common.utils.WxUtils; import com.hai.config.*; import com.hai.dao.HighCouponCodeOtherMapper; import com.hai.dao.HighGasOrderPushMapper; import com.hai.dao.HighUserCouponMapper; import com.hai.entity.*; import com.hai.enum_type.OrderPushType; import com.hai.model.*; import com.hai.service.*; import com.hai.service.pay.impl.GoodsOrderServiceImpl; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.collections4.MapUtils; 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.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.net.ssl.SSLContext; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.math.BigDecimal; import java.security.KeyStore; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; 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 HltUnionCardVipService hltUnionCardVipService; @Resource private OutRechargeOrderService outRechargeOrderService; @Resource private HighOrderService highOrderService; @Resource private HighUserService highUserService; @Resource private SecSinopecConfigService secSinopecConfigService; @Resource private HighCouponCodeService highCouponCodeService; @Resource private HighCouponService highCouponService; @Resource private HighOilCardService oilCardService; @Resource private GoodsOrderServiceImpl goodsOrderService; @Resource private BaiduVoiceService baiduVoiceService; @Resource private HighCouponCodeOtherMapper highCouponCodeOtherMapper; @Resource private HighUserCouponMapper highUserCouponMapper; @Resource private HighGasOrderPushMapper highGasOrderPushMapper; @Resource private HighGasOilPriceOfficialService gasOilPriceOfficialService; @Resource private HighCouponAgentService couponAgentService; @Resource private HighCouponAgentService highCouponAgentService; @Resource private HuiLianTongConfig huiLianTongConfig; @Resource private HighProfitSharingRecordService highProfitSharingRecordService; @RequestMapping(value = "/couJointDist", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "派发贵州卡券") public ResponseData couJointDist(@RequestParam(name = "orderNo", required = true) String orderNo, @RequestParam(name = "userPhone", required = true) String userPhone) { try { HighOrder order = highOrderService.getOrderByOrderNo(orderNo); if (order != null) { for (HighChildOrder childOrder : order.getHighChildOrderList()) { HighCoupon coupon = highCouponService.getCouponById(childOrder.getGoodsId()); if (coupon == null) { throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_ORDER, ""); } // 获取token String token = huiLianTongConfig.getToken(); // 查询用户 HighUser highUser = highUserService.findByUserId(order.getMemId()); Map push = new HashMap<>(); push.put("token", token); push.put("couTypeCode", coupon.getCouponKey()); push.put("distCouCount", childOrder.getSaleCount()); push.put("userPhone", highUser.getPhone()); push.put("thirdUserId", highUser.getUnionId()); JSONObject returnParam = HuiLianTongConfig.couJointDist(token, orderNo, MapUtils.getString(push, "couTypeCode") , 1, userPhone, MapUtils.getString(push, "thirdUserId")); if (returnParam != null && returnParam.getString("result").equals("success")) { JSONArray dataArray = returnParam.getJSONArray("data"); for (Object data : dataArray) { JSONObject dataObject = (JSONObject) data; HighCouponCodeOther couponCodeOther = new HighCouponCodeOther(); couponCodeOther.setType(1); couponCodeOther.setOrderId(order.getId()); couponCodeOther.setChildOrderId(childOrder.getId()); couponCodeOther.setCouTypeCode(dataObject.getString("couTypeCode")); couponCodeOther.setCouNo(dataObject.getString("couNo")); couponCodeOther.setStatus(20); couponCodeOther.setCreateTime(new Date()); couponCodeOther.setActiveTime(dataObject.getDate("activeTime")); couponCodeOther.setValidStartDate(dataObject.getDate("validStartDate")); couponCodeOther.setValidEndDate(dataObject.getDate("validEndDate")); highCouponCodeOtherMapper.insert(couponCodeOther); // 卡卷关联用户 HighUserCoupon highUserCoupon = new HighUserCoupon(); highUserCoupon.setMerchantId(coupon.getMerchantId()); highUserCoupon.setCouponId(coupon.getId()); highUserCoupon.setUserId(order.getMemId()); highUserCoupon.setCreateTime(new Date()); highUserCoupon.setQrCodeImg(dataObject.getString("couNo")); highUserCoupon.setUseEndTime(dataObject.getDate("validEndDate")); highUserCoupon.setStatus(1); // 状态 0:已过期 1:未使用 2:已使用 highUserCouponMapper.insert(highUserCoupon); } } // 推送记录 HighGasOrderPush highGasOrderPush = new HighGasOrderPush(); highGasOrderPush.setType(OrderPushType.type6.getType()); highGasOrderPush.setOrderNo(order.getOrderNo()); highGasOrderPush.setCreateTime(new Date()); highGasOrderPush.setCode(returnParam.getString("result")); highGasOrderPush.setRequestContent(JSONObject.toJSONString(push)); highGasOrderPush.setReturnContent(returnParam.toJSONString()); highGasOrderPushMapper.insert(highGasOrderPush); } } else { // 查询兑换码 HighCouponAgentCode convertCode = highCouponAgentService.getConvertCode(orderNo); if (convertCode == null) { throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "无效的兑换码"); } // 查询卡券 HighCoupon coupon = highCouponService.getCouponById(convertCode.getCouponId()); if (coupon == null) { throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未知的卡券"); } // 获取token String token = huiLianTongConfig.getToken(); Map push = new HashMap<>(); push.put("token", token); push.put("orderNo", convertCode.getConvertCode()); push.put("couTypeCode", coupon.getCouponKey()); push.put("distCouCount", 1); push.put("userPhone", userPhone); push.put("thirdUserId", userPhone); // 推送给高速 JSONObject returnParam = HuiLianTongConfig.couJointDist(token, MapUtils.getString(push, "orderNo"), MapUtils.getString(push, "couTypeCode"), MapUtils.getInteger(push, "distCouCount"), MapUtils.getString(push, "userPhone"), MapUtils.getString(push, "userPhone") ); if (returnParam != null && returnParam.getString("result").equals("success")) { JSONArray dataArray = returnParam.getJSONArray("data"); for (Object data : dataArray) { JSONObject dataObject = (JSONObject) data; HighCouponCodeOther couponCodeOther = new HighCouponCodeOther(); couponCodeOther.setType(1); couponCodeOther.setCouponAgentCodeId(convertCode.getId()); couponCodeOther.setCouTypeCode(dataObject.getString("couTypeCode")); couponCodeOther.setCouNo(dataObject.getString("couNo")); couponCodeOther.setActiveTime(dataObject.getDate("activeTime")); couponCodeOther.setValidStartDate(dataObject.getDate("validStartDate")); couponCodeOther.setValidEndDate(dataObject.getDate("validEndDate")); couponCodeOther.setStatus(20); couponCodeOther.setCreateTime(new Date()); highCouponCodeOtherMapper.insert(couponCodeOther); } } // 推送记录 HighGasOrderPush highGasOrderPush = new HighGasOrderPush(); highGasOrderPush.setType(OrderPushType.type6.getType()); highGasOrderPush.setOrderNo(convertCode.getCouponCode()); highGasOrderPush.setCreateTime(new Date()); highGasOrderPush.setCode(returnParam.getString("result")); highGasOrderPush.setRequestContent(JSONObject.toJSONString(push)); highGasOrderPush.setReturnContent(returnParam.toJSONString()); highGasOrderPushMapper.insert(highGasOrderPush); } return ResponseMsgUtil.success("操作成功"); } catch (Exception e) { log.error("HighOrderController --> couJointDist() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/kfcRefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "KFC退款") public ResponseData kfcRefund(@RequestParam(name = "orderNo", required = true) String orderNo,HttpServletRequest request) { try { OrderRefundModel orderRefundModel = null; if (StringUtils.isNotBlank(orderNo)) { // 查询订单 HighOrder order = highOrderService.getOrderByOrderNo(orderNo); // 订单状态:1 待支付 2 已支付 3.已完成 4. 已退款 5.已取消 6.退款中 7.拒绝退款 if (order != null && order.getOrderStatus() == 2) { orderRefundModel = WxOrderConfig.orderToRefund(order.getPaySerialNo(), order.getPayRealPrice(), "1609882817", order.getPayRealPrice()); if(orderRefundModel.getResult_code().equals("SUCCESS")) { for (HighChildOrder childOrder : order.getHighChildOrderList()) { childOrder.setChildOrdeStatus(4); } order.setOrderStatus(4); order.setRefundTime(new Date()); order.setRefundPrice(order.getPayRealPrice()); highOrderService.updateOrder(order); return ResponseMsgUtil.success(orderRefundModel); } } } return ResponseMsgUtil.success(orderRefundModel); } catch (Exception e) { log.error("HighUserCardController --> oilCardRefund() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/oilCardRefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "油卡退款") public ResponseData oilCardRefund(@RequestParam(name = "orderNo", required = true) String orderNo,HttpServletRequest request) { try { oilCardService.refund(orderNo); return ResponseMsgUtil.success(""); } catch (Exception e) { log.error("HighUserCardController --> oilCardRefund() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/refreshGasPriceOfficial", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "刷新国标价") public ResponseData refreshGasPriceOfficial() { try { gasOilPriceOfficialService.refreshPriceOfficial(); gasOilPriceOfficialService.refreshGasPriceOfficial(null, null); return ResponseMsgUtil.success("操作成功"); } catch (Exception e) { log.error("HighUserCardController --> oilCardRefund() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/wxProfitsharing", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分账") public ResponseData wxProfitsharing(@RequestParam(name = "orderNo", required = true) String orderNo) { try { HighOrder order = highOrderService.getOrderByOrderNo(orderNo); BigDecimal rake = new BigDecimal("0.01"); // 计算微信收取的手续费 支付金额 * 0.002 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 BigDecimal wxHandlingFee = order.getPayPrice().multiply(new BigDecimal("0.002")).setScale(2,BigDecimal.ROUND_HALF_DOWN); BigDecimal price = order.getPayPrice().subtract(wxHandlingFee); Map param = new LinkedHashMap<>(); param.put("appid", "wx637bd6f7314daa46"); param.put("mch_id", "1289663601"); param.put("sub_mch_id" , "1624126902"); // 渝北区浩联物资经营部 param.put("transaction_id" , order.getPaySerialNo()); param.put("out_order_no" , order.getOrderNo()); param.put("nonce_str" , WxUtils.makeNonStr()); // 计算分账金额 手续费后的价格 * 0.01 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 BigDecimal porofitSharingAmount = price.multiply(rake).setScale(2,BigDecimal.ROUND_DOWN); List> receiversList = new ArrayList<>(); Map 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.profitsharing(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(porofitSharingAmount); sharingRecord.setCreateTime(new Date()); sharingRecord.setContent(resultXmL); highProfitSharingRecordService.insert(sharingRecord); return ResponseMsgUtil.success("操作成功"); } catch (Exception e) { log.error("CmsContentController --> getCorporateAdvertising() error!", e); return ResponseMsgUtil.success(e); } } public String profitsharing(String mchId, String url, String data) throws Exception { //小程序退款需要调用双向证书的认证 CloseableHttpClient httpClient = goodsOrderService.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 = "/getBackendToken", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "获取访问令牌backendToken") public ResponseData getBackendToken() { try { return ResponseMsgUtil.success(null); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/sys", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "同步") public ResponseData sys(@RequestParam(name = "appId", required = true) String appId, @RequestParam(name = "appSecret", required = true) String appSecret, @RequestParam(name = "code", required = true) String code, @RequestParam(name = "signKey", required = true) String signKey ) { try { Map tokenMap = new HashMap<>(); tokenMap.put("appId", appId); tokenMap.put("appSecret", appSecret); JSONObject jsonObject = HttpsUtils.doPost("https://app.zshcqsy.com/api-provider/api/open/merchant/token", JSON.toJSONString(tokenMap)); log.error(jsonObject.toJSONString()); if (jsonObject != null && jsonObject.getBoolean("success") == true) { JSONObject data = jsonObject.getJSONObject("data"); String token = data.getString("token"); Calendar instance = Calendar.getInstance(); instance.set(2021,3,1); Map bodyMap = new HashMap<>(); bodyMap.put("appId", appId); bodyMap.put("pageNo", 1); bodyMap.put("pageSize", 999999); bodyMap.put("startTime", instance.getTime()); bodyMap.put("endTime", new Date().getTime()); bodyMap.put("customerCode", code); Long date = new Date().getTime(); String sha256 = encodeBySHA256(signKey + JSON.toJSONString(bodyMap) + date); JSONObject object = HttpsUtils.doPost("https://app.zshcqsy.com/api-provider/sapapi/open/coupon/customerRedeemcodeList", JSON.toJSONString(bodyMap), token, sha256, date); File file = new File("/home/data/" + System.currentTimeMillis() + ".txt"); if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file.getAbsoluteFile()); BufferedWriter bw = new BufferedWriter(fw); bw.write(object.toJSONString()); bw.close(); //JSONObject object = JSONObject.parseObject("{\"code\":1000,\"data\":{\"pageNo\":1,\"pageSize\":100,\"rowCount\":\"2\",\"list\":[{\"nodeName\":\"中国石油化工股份有限公司重庆江南石油分公司大学城南二路加油加\",\"totalAmount\":150.00,\"codeId\":\"01DIhbtPzIghPP0mPWaWzO13\",\"nodeNo\":\"50000105\",\"name\":\"重庆惠昕石化有限责任公司11.02日150元券\",\"useTime\":\"2021-04-03 06:11:14\"},{\"nodeName\":\"中国石化销售有限公司重庆三峡分公司忠县经营部三台加油站\",\"totalAmount\":100.00,\"codeId\":\"201126141728001027\",\"nodeNo\":\"50000238\",\"name\":\"重庆惠昕石化有限责任公司11.26日100元券\",\"useTime\":\"2021-04-03 15:16:03\"}]},\"success\":true}"); if(Objects.equals(object.get("success"), true)) { log.error(JSONObject.toJSONString(object.get("data"))); Object dataJson = JSONObject.parse(JSONObject.toJSONString(object.get("data"))); JSONObject dataObject = JSON.parseObject(JSONObject.toJSONString(dataJson)); JSONArray list = dataObject.getJSONArray("list"); for (Object dataJsonObject : list) { try { JSONObject parseObject = JSON.parseObject(JSON.toJSONString(dataJsonObject)); String codeId = parseObject.getString("codeId"); String nodeName = parseObject.getString("nodeName"); Date useTime = DateUtil.format(parseObject.getString("useTime"), "yyyy-MM-dd HH:mm:ss"); highCouponCodeService.cnpcCallbackCouponCode(codeId, useTime, nodeName); } catch (Exception e) { log.error("HighCouponSchedule --> expiredCoupon() error!", e); } } } return ResponseMsgUtil.success("下载成功"); } return ResponseMsgUtil.success(jsonObject); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() error!", e); return ResponseMsgUtil.exception(e); } } public String encodeBySHA256(String str) { try{ MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); messageDigest.reset(); messageDigest.update(str.getBytes("UTF-8")); return getFormattedText(messageDigest.digest()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (Exception e) { throw new RuntimeException(e); } return ""; } private static final String[] HEX_DIGITS = {"0" ,"1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}; private String getFormattedText(byte[] bytes) { int len = bytes.length; StringBuilder buf = new StringBuilder(len * 2); // 把密文转换成十六进制的字符串形式 for (int j=0;j> 4) & 0x0f]); buf.append(HEX_DIGITS[bytes[j] & 0x0f]); } return buf.toString(); } @RequestMapping(value = "/GetMembershipLevel", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "请求会员体系") public ResponseData GetMembershipLevel(@RequestParam(name = "phone", required = true) String phone , @RequestParam(name = "regionId", required = true) String regionId ) { try { return ResponseMsgUtil.success(hltUnionCardVipService.GetMembershipLevel(phone , regionId)); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/submitSms", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "请求短信") public ResponseData submitSms(@RequestParam(name = "phone", required = true) String phone , @RequestParam(name = "sms", required = true) String sms ) { try { return ResponseMsgUtil.success(HuiLianTongUnionCardConfig.submitSms(phone , sms)); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value="/resolveResponse",method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "解析") public ResponseData resolveResponse( @RequestParam(name = "data", required = false) String data ) { try { JSONObject cardInfoObject = HuiLianTongUnionCardConfig.resolveResponse(data); return ResponseMsgUtil.success(cardInfoObject); } catch (Exception e) { log.error("getUserByTelephone",e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value="/queryAmount",method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询余额") public ResponseData queryAmount() { try { // outRechargeOrderService.queryAmount(); return ResponseMsgUtil.success(null); } catch (Exception e) { log.error("getUserByTelephone",e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/getHuiLianTongCardConsume", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询汇联通工会卡消费记录") public ResponseData getHuiLianTongCardConsume(@RequestParam(name = "businessType", required = true) String businessType, @RequestParam(name = "cardNo", required = true) String cardNo, @RequestParam(name = "sdate", required = true) Long sdate, @RequestParam(name = "edate", required = true) Long edate, @RequestParam(name = "pageNum", required = true) Integer pageNum, @RequestParam(name = "pageSize", required = true) Integer pageSize, HttpServletRequest request) { try { JSONObject consumptionRecord = HuiLianTongUnionCardConfig.queryConsumptionRecordByBusiness(businessType, cardNo, sdate, edate, pageNum, pageSize); if (StringUtils.isBlank(consumptionRecord.getString("data"))) { throw ErrorHelp.genException(SysCode.System, ErrorCode.REQUEST_ERROR, ""); } return ResponseMsgUtil.success(HuiLianTongUnionCardConfig.resolveResponse(consumptionRecord.getString("data"))); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardConsume() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/orderToRefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "积分充值退款") public ResponseData orderToRefund(@RequestParam(name = "orderId", required = true) Long orderId ,HttpServletRequest request) { try { HighOrder highOrder = highOrderService.getOrderById(orderId); // 微信退款 OrderRefundModel orderRefundModel = WxOrderConfig.orderToRefund(highOrder.getPaySerialNo(), highOrder.getPayRealPrice(), highOrder.getPayRealPrice()); if(orderRefundModel.getResult_code().equals("SUCCESS")) { for (HighChildOrder childOrder : highOrder.getHighChildOrderList()) { childOrder.setChildOrdeStatus(4); } highOrder.setOrderStatus(4); highOrder.setRefundTime(new Date()); highOrder.setRefundPrice(highOrder.getPayRealPrice()); highOrderService.updateOrder(highOrder); } if (highUserService.findGoldRepeat(3 , highOrder.getId())) { highUserService.goldHandle(highOrder.getMemId(), highOrder.getPayRealPrice().multiply(BigDecimal.valueOf(100)).intValue(), 2, 3, highOrder.getId()); }else { log.error("orderToPay error!", "已有退款记录"); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "已有退款记录"); } return ResponseMsgUtil.success(orderRefundModel); } catch (Exception e) { log.error("HighOrderController --> orderToRefund() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/orderToRefundByHlt", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "汇联通充值退款") public ResponseData orderToRefundByHlt(@RequestParam(name = "orderId", required = true) Long orderId ,HttpServletRequest request) { try { HighOrder highOrder = highOrderService.getOrderById(orderId); // 微信退款 OrderRefundModel orderRefundModel = WxOrderConfig.orderToRefund(highOrder.getPaySerialNo(), highOrder.getPayRealPrice(), WxOrderConfig.MCH_ID_1619676214 , highOrder.getPayRealPrice()); if(orderRefundModel.getResult_code().equals("SUCCESS")) { for (HighChildOrder childOrder : highOrder.getHighChildOrderList()) { childOrder.setChildOrdeStatus(4); } highOrder.setOrderStatus(4); highOrder.setRefundTime(new Date()); highOrder.setRefundPrice(highOrder.getPayRealPrice()); highOrderService.updateOrder(highOrder); } return ResponseMsgUtil.success(orderRefundModel); } catch (Exception e) { log.error("HighOrderController --> orderToRefund() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/rechargeOrderToRefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "话费退款") public ResponseData rechargeOrderToRefund( @RequestParam(name = "orderId", required = true) Long orderId) { try { outRechargeOrderService.rechargeOrderToRefund(orderId); return ResponseMsgUtil.success("退款成功"); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/websocket", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "websocket") public ResponseData websocket( @RequestParam(name = "userId", required = true) String orderNo ) { try { HighOrder order = highOrderService.getOrderByOrderNo(orderNo); if (order.getHighChildOrderList().get(0).getGoodsType().equals(3)) { Map pushMsg = new HashMap<>(); pushMsg.put("userId", order.getHighChildOrderList().get(0).getGoodsId()); Map msgContent = new HashMap<>(); msgContent.put("order", highOrderService.getGasOrderDetail(order.getOrderNo())); msgContent.put("voice", baiduVoiceService.text2audio(order.getHighChildOrderList().get(0).getGoodsName() + "加油站,收款:" + order.getTotalPrice())); pushMsg.put("message", JSONObject.toJSONString(msgContent)); HttpsUtils.doPost("http://139.159.177.244:9901/msg/websocket/websocket", pushMsg, new HashMap<>()); } return ResponseMsgUtil.success("请求成功"); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } } \ No newline at end of file diff --git a/hai-cweb/src/main/java/com/cweb/controller/HighOrderController.java b/hai-cweb/src/main/java/com/cweb/controller/HighOrderController.java index 2210cdb1..6809c109 100644 --- a/hai-cweb/src/main/java/com/cweb/controller/HighOrderController.java +++ b/hai-cweb/src/main/java/com/cweb/controller/HighOrderController.java @@ -431,6 +431,8 @@ public class HighOrderController { highOrder.setMemPhone(userInfoModel.getHighUser().getPhone()); highOrder.setCreateTime(new Date()); highOrder.setOrderStatus(1); + highOrder.setPrintStatus(false); + highOrder.setPrintNum(0); highOrderService.insertOrder(highOrder); diff --git a/hai-cweb/src/main/java/com/cweb/controller/HighTestController.java b/hai-cweb/src/main/java/com/cweb/controller/HighTestController.java index aefc677c..47f524c9 100644 --- a/hai-cweb/src/main/java/com/cweb/controller/HighTestController.java +++ b/hai-cweb/src/main/java/com/cweb/controller/HighTestController.java @@ -1 +1 @@ -package com.cweb.controller; import cn.binarywang.wx.miniapp.api.WxMaMsgService; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.cweb.config.SysConst; import com.hai.common.Base64Util; import com.cweb.config.WxMaConfiguration; 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.security.SessionObject; 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.bouncycastle.util.encoders.UrlBase64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.util.IdGenerator; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.net.ssl.SSLContext; import javax.servlet.http.HttpServletRequest; 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; @Resource private UnionPayConfig unionPayConfig; @Resource private UnionStagingPayConfig unionStagingPayConfig; @Resource private UnionUserConfig unionUserConfig; @Resource private OutRechargeOrderService outRechargeOrderService; @Resource private HighOilCardService oilCardService; @Resource private BaiduVoiceService baiduVoiceService; @Autowired private WebSocket webSocket; @RequestMapping(value = "/wxGasProfitsharing", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "wxGasProfitsharing") public ResponseData wxGasProfitsharing(@RequestParam(name = "orderNo", required = true) String orderNo, HttpServletRequest request) { try { // 查询订单 HighOrder order = highOrderService.getOrderByOrderNo(orderNo); BigDecimal rake = new BigDecimal("0.05"); // 计算微信收取的手续费 支付金额 * 0.002 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 BigDecimal wxHandlingFee = order.getPayRealPrice().multiply(new BigDecimal("0.002")).setScale(2,BigDecimal.ROUND_HALF_DOWN); BigDecimal price = order.getPayRealPrice().subtract(wxHandlingFee); // 计算分账金额 手续费后的价格 * 0.05 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 BigDecimal profitSharingAmount = price.multiply(rake).setScale(2,BigDecimal.ROUND_DOWN); this.wxGasProfitsharing(order.getExt1(), order.getPaySerialNo(),order.getOrderNo(),profitSharingAmount); return ResponseMsgUtil.success(null); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } public void wxGasProfitsharing(String appid,String transaction_id,String out_order_no, BigDecimal amount) { try { Map param = new LinkedHashMap<>(); param.put("appid", appid); param.put("mch_id", "1289663601"); param.put("sub_mch_id" , "1624126902"); // 个体户黎杨珍 param.put("transaction_id" , transaction_id); param.put("out_order_no" , out_order_no); param.put("nonce_str" , WxUtils.makeNonStr()); // 分账金额 BigDecimal porofitSharingAmount = amount; List> receiversList = new ArrayList<>(); Map 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); HighProfitSharingRecord sharingRecord = new HighProfitSharingRecord(); sharingRecord.setOutOrderNo(out_order_no); sharingRecord.setTransactionId(transaction_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); } } @RequestMapping(value = "/addPrinter", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询汇联通工会卡详情") public ResponseData addPrinter(HttpServletRequest request) { try { SpPrinterConfig spPrinterConfig = new SpPrinterConfig(); return ResponseMsgUtil.success( spPrinterConfig.addPrinter( "1540500213", "bxpjpnh4", "丹凤加油站打印机" ) ); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/spPrint", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "发送打印机消息") public ResponseData spPrint(@RequestParam(name = "content", required = true) String content, HttpServletRequest request) { try { SpPrinterConfig spPrinterConfig = new SpPrinterConfig(); return ResponseMsgUtil.success( spPrinterConfig.print( "1540500213", content, 1 ) ); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/text2audio", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "文本转语音") public ResponseData text2audio(HttpServletRequest request) { try { // 用户 // return ResponseMsgUtil.success(baiduVoiceService.text2audio("加油站收款400元")); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/getGasDetail", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询汇联通工会卡详情") public ResponseData getGasDetail(@RequestParam(name = "cardNo", required = true) String cardNo, HttpServletRequest request) { try { return ResponseMsgUtil.success(TuanYouConfig.queryGasInfoByGasId(cardNo)); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/queryGasInfoByGasId", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "根据油站 id 拉取最新的油站数据") public ResponseData queryGasInfoByGasId(@RequestParam(name = "gasId", required = true) String gasId, HttpServletRequest request) { try { return ResponseMsgUtil.success(TuanYouConfig.queryGasInfoByGasId(gasId)); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } // // @RequestMapping(value = "/getMobile", method = RequestMethod.GET) // @ResponseBody // @ApiOperation(value = "话费充值") // public ResponseData getMobile( // @RequestParam(name = "orderNo", required = true) String orderNo, // @RequestParam(name = "amount", required = true) Integer amount, // @RequestParam(name = "phone", required = true) String phone, // HttpServletRequest request) { // try { // return ResponseMsgUtil.success(outRechargeOrderService.getMobile(phone,amount,orderNo)); // // } catch (Exception e) { // log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); // return ResponseMsgUtil.exception(e); // } // } @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 = "/detectTYMerchantStore", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "检测加油站") public ResponseData detectTYMerchantStore(@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, "未找到商户"); } Map param = new HashMap<>(); param.put("merchantId", merchant.getId()); List stores = highMerchantStoreService.getMerchantStoreList(param); for (HighMerchantStore store : stores) { JSONObject jsonObject = TuanYouConfig.queryGasInfoByGasId(store.getStoreKey()); if (jsonObject != null && jsonObject.getString("code").equals("200")) { JSONObject result = jsonObject.getJSONObject("result"); store.setStatus(result.getInteger("gasStatus")); } else { store.setStatus(0); } highMerchantStoreService.updateMerchantStoreDetail(store); } return ResponseMsgUtil.success("初始化完成"); } @RequestMapping(value = "/pushTuanYouOrder", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "推送团油订单") public ResponseData pushTuanYouOrder(@RequestParam(name = "orderNo", required = true) String orderNo) { try { HighOrder order = highOrderService.getOrderByOrderNo(orderNo); for (HighChildOrder highChildOrder : order.getHighChildOrderList()) { HighMerchantStoreModel store = highMerchantStoreService.getMerchantStoreById(highChildOrder.getGoodsId()); // 推送团油订单 Map 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 = "/queryCompanyPriceDetail", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询团油余额") public ResponseData queryCompanyPriceDetail() { try { return ResponseMsgUtil.success(TuanYouConfig.queryCompanyPriceDetail("LW000115995", "92")); } 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,"HF2022031509263475105","20JY000575",1,"18385214742", "oArhO6QZSIJAcawo1Wwx5cKKZ0ns")); } catch (Exception e) { log.error("HighOrderController --> getOrderById() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/tradeQuery", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "派发贵州卡券") public ResponseData tradeQuery(@RequestParam(name = "token", required = true) String token) { try { return ResponseMsgUtil.success(UnionPayConfig.tradeQuery(UnionPayConfig.MER_ID3,UnionPayConfig.TERM_ID3,"HF2022031215130820400")); } catch (Exception e) { log.error("HighOrderController --> getOrderById() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/zwrefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "派发贵州卡券") public ResponseData zwrefund() { try { return ResponseMsgUtil.success(UnionPayConfig.zwrefund(UnionPayConfig.MER_ID3,UnionPayConfig.TERM_ID3,"HF2022031215130820400", "31720220312151311876232", new BigDecimal("270").multiply(new BigDecimal("100")).longValue())); } 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(HttpServletRequest request) { try { // return ResponseMsgUtil.success(RequestUtils.getIpAddress(request)); return ResponseMsgUtil.success(unionPayConfig.upPreOrder(UnionPayConfig.MER_ID3, UnionPayConfig.TERM_ID3, "HF"+System.currentTimeMillis(), new BigDecimal("1"), "test",CommonSysConst.getSysConfig().getUnionPayNotifyUrl(), request)); } catch (Exception e) { log.error("HighOrderController --> unionPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/getToken", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "获取贵州中石化token") public ResponseData getToken() { try { return ResponseMsgUtil.success(huiLianTongConfig.getToken()); } catch (Exception e) { log.error("HighOrderController --> getToken() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/unionTradeQuery", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "银联交易查询") public ResponseData unionTradeQuery(@RequestParam(name = "paySerialNo", required = true) String paySerialNo) { try { return ResponseMsgUtil.success(UnionPayConfig.tradeQuery(UnionPayConfig.MER_ID1, UnionPayConfig.TERM_ID1, paySerialNo)); } catch (Exception e) { log.error("HighOrderController --> unionTradeQuery() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/getBackendToken", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "获取访问令牌backendToken") public ResponseData getBackendToken() { try { return ResponseMsgUtil.success(unionUserConfig.getBackendToken()); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() 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); } } @RequestMapping(value = "/unionStagingPay", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "银联分期支付") public ResponseData unionStagingPay(HttpServletRequest request) { try { /* String orderNo = DateUtil.format(new Date(), DateUtil.YMDHMS); orderNo += IDGenerator.nextId(28 - orderNo.length());*/ String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(unionStagingPayConfig.advancePay( orgTrace, orgTrace, new BigDecimal("1"), CommonSysConst.getSysConfig().getUnionStagingPayNotifyUrl(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/queryStaging", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分期查询") public ResponseData queryStaging(@RequestParam(name = "oriOrgTrace", required = true) String oriOrgTrace,HttpServletRequest request) { try { String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(UnionStagingPayConfig.queryStaging(orgTrace,oriOrgTrace ,"", new Date(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } /* @RequestMapping(value = "/orderToRefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "退款") public ResponseData orderToRefund(HttpServletRequest request) { try { OrderRefundModel orderRefundModel = WxOrderConfig.orderToRefund("4200001301202202035413938093", new BigDecimal("30.80"), new BigDecimal("16.90")); return ResponseMsgUtil.success(orderRefundModel); } catch (Exception e) { log.error("HighOrderController --> orderToRefund() error!", e); return ResponseMsgUtil.exception(e); } }*/ @RequestMapping(value = "/query", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "订单查询") public ResponseData query(@RequestParam(name = "oriOrgTrace", required = true) String oriOrgTrace,HttpServletRequest request) { try { String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(UnionStagingPayConfig.query(orgTrace,oriOrgTrace ,"", new Date(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/mposrefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分期退款") public ResponseData mposrefund(@RequestParam(name = "oriOrgTrace", required = true) String oriOrgTrace,HttpServletRequest request) { try { String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(UnionStagingPayConfig.standardRefund(orgTrace,oriOrgTrace ,new BigDecimal("1"), "", new Date(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/mposfindrefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分期退款查询") public ResponseData mposfindrefund(@RequestParam(name = "oriOrgTrace", required = true) String oriOrgTrace,HttpServletRequest request) { try { String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(UnionStagingPayConfig.mposfindrefund(orgTrace,oriOrgTrace ,"", new Date(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } public void wxProfitsharing(String transaction_id,String out_order_no, BigDecimal amount) { try { Map 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> receiversList = new ArrayList<>(); Map 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/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 = "/mssage", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分期退款查询") public ResponseData mssage() { try { List list = new ArrayList<>(); Map m = new HashMap<>(); m.put("thing2", "orderName"); // 充值项目 m.put("time3", DateUtil.date2String(new Date() , "yyyy年MM月dd日 HH:mm:ss")); // 充值项目 m.put("phrase4", "充值"); // 充值项目 m.put("amount5", "20"); // 充值项目 for (String key: m.keySet()) { WxMaSubscribeMessage.Data msgElement = new WxMaSubscribeMessage.Data(); msgElement.setName(key); msgElement.setValue(m.get(key)); list.add(msgElement); } WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage(); subscribeMessage.setToUser("oUGn_4kW4K1R73G_kK7ibuWID_VA"); // 小程序openId subscribeMessage.setTemplateId("d4ciZ6lqjExqH6AOZtQeUbT-sHLC4BHB0UgQ-DoIqfw"); subscribeMessage.setData(list); final WxMaService wxService = WxMaConfiguration.getMaService(); WxMaMsgService maMsgService = wxService.getMsgService(); maMsgService.sendSubscribeMsg(subscribeMessage); return ResponseMsgUtil.success("null"); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/websocket", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "websocket") public ResponseData websocket(@RequestParam(name = "orderNo", required = true) String orderNo ) { try { HighOrder order = highOrderService.getOrderByOrderNo(orderNo); if (order.getHighChildOrderList().get(0).getGoodsType().equals(3)) { Map pushMsg = new HashMap<>(); pushMsg.put("userId", order.getHighChildOrderList().get(0).getGoodsId()); Map msgContent = new HashMap<>(); msgContent.put("order", highOrderService.getGasOrderDetail(order.getOrderNo())); msgContent.put("voice", baiduVoiceService.text2audio(order.getHighChildOrderList().get(0).getGoodsName() + "加油站,收款:" + order.getTotalPrice())); pushMsg.put("message", JSONObject.toJSONString(msgContent)); HttpsUtils.doPost("http://127.0.0.1:9901/msg/test/websocket", pushMsg, new HashMap<>()); } return ResponseMsgUtil.success("null"); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } } \ No newline at end of file +package com.cweb.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.cweb.config.SysConst; import com.hai.common.Base64Util; 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.security.SessionObject; 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.bouncycastle.util.encoders.UrlBase64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.util.IdGenerator; import org.springframework.web.bind.annotation.*; import sun.nio.cs.StreamEncoder; import javax.annotation.Resource; import javax.net.ssl.SSLContext; import javax.servlet.http.HttpServletRequest; import java.io.*; 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; @Resource private UnionPayConfig unionPayConfig; @Resource private UnionStagingPayConfig unionStagingPayConfig; @Resource private UnionUserConfig unionUserConfig; @Resource private OutRechargeOrderService outRechargeOrderService; @Resource private HighOilCardService oilCardService; @Resource private BaiduVoiceService baiduVoiceService; @Resource private MqttProviderConfig mqttProviderConfig; @Autowired private WebSocket webSocket; @RequestMapping(value = "/wxGasProfitsharing", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "wxGasProfitsharing") public ResponseData wxGasProfitsharing(@RequestParam(name = "orderNo", required = true) String orderNo, HttpServletRequest request) { try { // 查询订单 HighOrder order = highOrderService.getOrderByOrderNo(orderNo); BigDecimal rake = new BigDecimal("0.05"); // 计算微信收取的手续费 支付金额 * 0.002 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 BigDecimal wxHandlingFee = order.getPayRealPrice().multiply(new BigDecimal("0.002")).setScale(2,BigDecimal.ROUND_HALF_DOWN); BigDecimal price = order.getPayRealPrice().subtract(wxHandlingFee); // 计算分账金额 手续费后的价格 * 0.05 注:如果与两个相邻数字的距离相等,则为上舍入的舍入模式。 BigDecimal profitSharingAmount = price.multiply(rake).setScale(2,BigDecimal.ROUND_DOWN); this.wxGasProfitsharing(order.getExt1(), order.getPaySerialNo(),order.getOrderNo(),profitSharingAmount); return ResponseMsgUtil.success(null); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } public void wxGasProfitsharing(String appid,String transaction_id,String out_order_no, BigDecimal amount) { try { Map param = new LinkedHashMap<>(); param.put("appid", appid); param.put("mch_id", "1289663601"); param.put("sub_mch_id" , "1624126902"); // 个体户黎杨珍 param.put("transaction_id" , transaction_id); param.put("out_order_no" , out_order_no); param.put("nonce_str" , WxUtils.makeNonStr()); // 分账金额 BigDecimal porofitSharingAmount = amount; List> receiversList = new ArrayList<>(); Map 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); HighProfitSharingRecord sharingRecord = new HighProfitSharingRecord(); sharingRecord.setOutOrderNo(out_order_no); sharingRecord.setTransactionId(transaction_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); } } @RequestMapping(value = "/addPrinter", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询汇联通工会卡详情") public ResponseData addPrinter(HttpServletRequest request) { try { SpPrinterConfig spPrinterConfig = new SpPrinterConfig(); return ResponseMsgUtil.success( spPrinterConfig.addPrinter( "1540500213", "bxpjpnh4", "丹凤加油站打印机" ) ); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/queryThirdOrderDetail", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "订单结果查询") public ResponseData queryThirdOrderDretail(HttpServletRequest request) { try { return ResponseMsgUtil.success(TuanYouConfig.queryThirdOrderDetail("HF2022051214411536507")); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/spPrint", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "发送打印机消息") public ResponseData spPrint(@RequestParam(name = "orderNo", required = true) String orderNo, HttpServletRequest request) { try { HighOrder highOrder = highOrderService.getOrderByOrderNo(orderNo); for (HighChildOrder highChildOrder : highOrder.getHighChildOrderList()) { HighMerchantStoreModel store = highMerchantStoreService.getMerchantStoreById(highChildOrder.getGoodsId()); new Thread(() -> { try { SpPrinterConfig sp = new SpPrinterConfig(); sp.print(store.getDeviceSn(), SpPrinterTemplate.oilCashierStubTemp( highChildOrder.getGoodsName(), highOrder.getOrderNo(), DateUtil.date2String(highOrder.getPayTime(), "yyyy-MM-dd HH:mm:ss"), "嗨森逛", highChildOrder.getGasGunNo(), highChildOrder.getGasOilNo(), highChildOrder.getGasOilLiters().toString(), highOrder.getTotalPrice().toString() ), 1); Thread.sleep(6000); sp.print(store.getDeviceSn(), SpPrinterTemplate.oilClientStubTemp( highChildOrder.getGoodsName(), highOrder.getOrderNo(), DateUtil.date2String(highOrder.getPayTime(), "yyyy-MM-dd HH:mm:ss"), "嗨森逛", highChildOrder.getGasGunNo(), highChildOrder.getGasOilNo(), highChildOrder.getGasOilLiters().toString(), highOrder.getTotalPrice().toString() ), 1); } catch (Exception e) { e.printStackTrace(); } }).start(); } return ResponseMsgUtil.success("发送成功"); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/text2audio", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "文本转语音") public ResponseData text2audio(HttpServletRequest request) { try { return ResponseMsgUtil.success(baiduVoiceService.text2audio("加油站收款400元")); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/getGasDetail", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询汇联通工会卡详情") public ResponseData getGasDetail(@RequestParam(name = "cardNo", required = true) String cardNo, HttpServletRequest request) { try { return ResponseMsgUtil.success(TuanYouConfig.queryGasInfoByGasId(cardNo)); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/queryGasInfoByGasId", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "根据油站 id 拉取最新的油站数据") public ResponseData queryGasInfoByGasId(@RequestParam(name = "gasId", required = true) String gasId, HttpServletRequest request) { try { return ResponseMsgUtil.success(TuanYouConfig.queryGasInfoByGasId(gasId)); } catch (Exception e) { log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); return ResponseMsgUtil.exception(e); } } // // @RequestMapping(value = "/getMobile", method = RequestMethod.GET) // @ResponseBody // @ApiOperation(value = "话费充值") // public ResponseData getMobile( // @RequestParam(name = "orderNo", required = true) String orderNo, // @RequestParam(name = "amount", required = true) Integer amount, // @RequestParam(name = "phone", required = true) String phone, // HttpServletRequest request) { // try { // return ResponseMsgUtil.success(outRechargeOrderService.getMobile(phone,amount,orderNo)); // // } catch (Exception e) { // log.error("HighUserCardController --> getHuiLianTongCardInfo() error!", e); // return ResponseMsgUtil.exception(e); // } // } @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 = "/detectTYMerchantStore", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "检测加油站") public ResponseData detectTYMerchantStore(@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, "未找到商户"); } Map param = new HashMap<>(); param.put("merchantId", merchant.getId()); List stores = highMerchantStoreService.getMerchantStoreList(param); for (HighMerchantStore store : stores) { JSONObject jsonObject = TuanYouConfig.queryGasInfoByGasId(store.getStoreKey()); if (jsonObject != null && jsonObject.getString("code").equals("200")) { JSONObject result = jsonObject.getJSONObject("result"); store.setStatus(result.getInteger("gasStatus")); } else { store.setStatus(0); } highMerchantStoreService.updateMerchantStoreDetail(store); } return ResponseMsgUtil.success("初始化完成"); } /* @RequestMapping(value = "/pushTuanYouOrder", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "推送团油订单") public ResponseData pushTuanYouOrder(@RequestParam(name = "orderNo", required = true) String orderNo) { try { HighOrder order = highOrderService.getOrderByOrderNo(orderNo); for (HighChildOrder highChildOrder : order.getHighChildOrderList()) { HighMerchantStoreModel store = highMerchantStoreService.getMerchantStoreById(highChildOrder.getGoodsId()); // 推送团油订单 Map 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 = "/queryCompanyPriceDetail", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询团油余额") public ResponseData queryCompanyPriceDetail() { try { return ResponseMsgUtil.success(TuanYouConfig.queryCompanyPriceDetail("LW000115995", "92")); } 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,"HF2022031509263475105","20JY000575",1,"18385214742", "oArhO6QZSIJAcawo1Wwx5cKKZ0ns")); } catch (Exception e) { log.error("HighOrderController --> getOrderById() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/tradeQuery", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "派发贵州卡券") public ResponseData tradeQuery(@RequestParam(name = "token", required = true) String token) { try { return ResponseMsgUtil.success(UnionPayConfig.tradeQuery(UnionPayConfig.MER_ID3,UnionPayConfig.TERM_ID3,"HF2022031215130820400")); } catch (Exception e) { log.error("HighOrderController --> getOrderById() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/zwrefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "派发贵州卡券") public ResponseData zwrefund() { try { return ResponseMsgUtil.success(UnionPayConfig.zwrefund(UnionPayConfig.MER_ID3,UnionPayConfig.TERM_ID3,"HF2022031215130820400", "31720220312151311876232", new BigDecimal("270").multiply(new BigDecimal("100")).longValue())); } 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(HttpServletRequest request) { try { // return ResponseMsgUtil.success(RequestUtils.getIpAddress(request)); return ResponseMsgUtil.success(unionPayConfig.upPreOrder(UnionPayConfig.MER_ID3, UnionPayConfig.TERM_ID3, "HF"+System.currentTimeMillis(), new BigDecimal("1"), "test",CommonSysConst.getSysConfig().getUnionPayNotifyUrl(), request)); } catch (Exception e) { log.error("HighOrderController --> unionPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/getToken", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "获取贵州中石化token") public ResponseData getToken() { try { return ResponseMsgUtil.success(huiLianTongConfig.getToken()); } catch (Exception e) { log.error("HighOrderController --> getToken() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/unionTradeQuery", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "银联交易查询") public ResponseData unionTradeQuery(@RequestParam(name = "paySerialNo", required = true) String paySerialNo) { try { return ResponseMsgUtil.success(UnionPayConfig.tradeQuery(UnionPayConfig.MER_ID1, UnionPayConfig.TERM_ID1, paySerialNo)); } catch (Exception e) { log.error("HighOrderController --> unionTradeQuery() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/getBackendToken", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "获取访问令牌backendToken") public ResponseData getBackendToken() { try { return ResponseMsgUtil.success(unionUserConfig.getBackendToken()); } catch (Exception e) { log.error("HighOrderController --> getBackendToken() 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); } } @RequestMapping(value = "/unionStagingPay", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "银联分期支付") public ResponseData unionStagingPay(HttpServletRequest request) { try { /* String orderNo = DateUtil.format(new Date(), DateUtil.YMDHMS); orderNo += IDGenerator.nextId(28 - orderNo.length());*/ String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(unionStagingPayConfig.advancePay( orgTrace, orgTrace, new BigDecimal("1"), CommonSysConst.getSysConfig().getUnionStagingPayNotifyUrl(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/queryStaging", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分期查询") public ResponseData queryStaging(@RequestParam(name = "oriOrgTrace", required = true) String oriOrgTrace,HttpServletRequest request) { try { String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(UnionStagingPayConfig.queryStaging(orgTrace,oriOrgTrace ,"", new Date(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } /* @RequestMapping(value = "/orderToRefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "退款") public ResponseData orderToRefund(HttpServletRequest request) { try { OrderRefundModel orderRefundModel = WxOrderConfig.orderToRefund("4200001301202202035413938093", new BigDecimal("30.80"), new BigDecimal("16.90")); return ResponseMsgUtil.success(orderRefundModel); } catch (Exception e) { log.error("HighOrderController --> orderToRefund() error!", e); return ResponseMsgUtil.exception(e); } }*/ @RequestMapping(value = "/query", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "订单查询") public ResponseData query(@RequestParam(name = "oriOrgTrace", required = true) String oriOrgTrace,HttpServletRequest request) { try { String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(UnionStagingPayConfig.query(orgTrace,oriOrgTrace ,"", new Date(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/mposrefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分期退款") public ResponseData mposrefund(@RequestParam(name = "oriOrgTrace", required = true) String oriOrgTrace,HttpServletRequest request) { try { String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(UnionStagingPayConfig.standardRefund(orgTrace,oriOrgTrace ,new BigDecimal("1"), "", new Date(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/mposfindrefund", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "分期退款查询") public ResponseData mposfindrefund(@RequestParam(name = "oriOrgTrace", required = true) String oriOrgTrace,HttpServletRequest request) { try { String orgTrace = CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(0,4) +CommonSysConst.getSysConfig().getUnionStagingPayOrgId().substring(CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length() - 4,CommonSysConst.getSysConfig().getUnionStagingPayOrgId().length()) +DateUtil.format(new Date(), DateUtil.YMDHMS) +IDGenerator.nextId(6); return ResponseMsgUtil.success(UnionStagingPayConfig.mposfindrefund(orgTrace,oriOrgTrace ,"", new Date(), request)); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } public void wxProfitsharing(String transaction_id,String out_order_no, BigDecimal amount) { try { Map 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> receiversList = new ArrayList<>(); Map 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/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 = "/websocket", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "websocket") public ResponseData websocket(@RequestParam(name = "orderNo", required = true) String orderNo ) { try { HighOrder order = highOrderService.getOrderByOrderNo(orderNo); if (order.getHighChildOrderList().get(0).getGoodsType().equals(3)) { Map pushMsg = new HashMap<>(); pushMsg.put("userId", order.getHighChildOrderList().get(0).getGoodsId()); Map msgContent = new HashMap<>(); msgContent.put("order", highOrderService.getGasOrderDetail(order.getOrderNo())); msgContent.put("voice", baiduVoiceService.text2audio(order.getHighChildOrderList().get(0).getGoodsName() + "加油站,收款:" + order.getTotalPrice())); pushMsg.put("message", JSONObject.toJSONString(msgContent)); HttpsUtils.doPost("http://127.0.0.1:9901/msg/test/websocket", pushMsg, new HashMap<>()); } return ResponseMsgUtil.success("null"); } catch (Exception e) { log.error("HighOrderController --> unionStagingPay() error!", e); return ResponseMsgUtil.exception(e); } } @RequestMapping(value = "/mqttPush", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "mqttPush") public ResponseData mqttPush(@RequestParam(name = "topic", required = true) String topic) { try { ByteArrayOutputStream stream = new ByteArrayOutputStream(); // 居中 stream.write(0x1B); stream.write(0x61); stream.write(0x01); stream.write("胡锐的加油站".getBytes("UTF-8")); stream.write(0x0A); stream.write("(客户存根)".getBytes("UTF-8")); stream.write(0x0A); // 左对齐 stream.write(0x1B); stream.write(0x61); stream.write(0x00); stream.write("--------------------------------".getBytes("UTF-8")); stream.write(0x0A); stream.write("流水号:HF2021041215004070209".getBytes("UTF-8")); stream.write(0x0A); stream.write("--------------------------------".getBytes("UTF-8")); stream.write(0x0A); stream.write(("时间:" + DateUtil.date2String(new Date(), "yyyy-MM-mm HH:mm:ss")).getBytes("UTF-8")); stream.write(0x0A); stream.write("来源:嗨森逛".getBytes("UTF-8")); stream.write(0x0A); stream.write("油枪:10".getBytes("UTF-8")); stream.write(0x0A); stream.write("油品:92".getBytes("UTF-8")); stream.write(0x0A); stream.write("升数:60升".getBytes("UTF-8")); stream.write(0x0A); stream.write("实际加油升数以加油机为准!".getBytes("UTF-8")); stream.write(0x0A); stream.write(0x1B); stream.write(0x0E); stream.write("加油金额".getBytes("UTF-8")); stream.write(0x0A); stream.write("¥100".getBytes("UTF-8")); stream.write(0x0A); stream.write(0x1B); stream.write(0x21); stream.write(0x00); stream.write("--------------------------------".getBytes("UTF-8")); stream.write(0x0A); stream.write(0x1B); stream.write(0x61); stream.write(0x01); stream.write("开心又省钱;来“ 嗨森逛 ”".getBytes("UTF-8")); stream.write(0x0A); stream.write(0x0A); stream.write(0x0A); stream.write(0x0A); String printText = bytes2Hex(getPrinterBytes(stream.toByteArray(), 1, "UTF-8")); System.out.println(printText); // 发送消息 mqttProviderConfig.publish(2, false, topic, hexStringToString(printText)); Thread.sleep(6000); stream = new ByteArrayOutputStream(); // 居中 stream.write(0x1B); stream.write(0x61); stream.write(0x01); stream.write("胡锐的加油站".getBytes("UTF-8")); stream.write(0x0A); stream.write("(收银员存根)".getBytes("UTF-8")); stream.write(0x0A); // 左对齐 stream.write(0x1B); stream.write(0x61); stream.write(0x00); stream.write("--------------------------------".getBytes("UTF-8")); stream.write(0x0A); stream.write("流水号:HF2021041215004070209".getBytes("UTF-8")); stream.write(0x0A); stream.write("--------------------------------".getBytes("UTF-8")); stream.write(0x0A); stream.write(("时间:" + DateUtil.date2String(new Date(), "yyyy-MM-mm HH:mm:ss")).getBytes("UTF-8")); stream.write(0x0A); stream.write("来源:嗨森逛".getBytes("UTF-8")); stream.write(0x0A); stream.write("油枪:10".getBytes("UTF-8")); stream.write(0x0A); stream.write("油品:92".getBytes("UTF-8")); stream.write(0x0A); stream.write("升数:60升".getBytes("UTF-8")); stream.write(0x0A); stream.write("实际加油升数以加油机为准!".getBytes("UTF-8")); stream.write(0x0A); stream.write(0x1B); stream.write(0x0E); stream.write("加油金额".getBytes("UTF-8")); stream.write(0x0A); stream.write("¥100".getBytes("UTF-8")); stream.write(0x0A); stream.write(0x1B); stream.write(0x21); stream.write(0x00); stream.write("--------------------------------".getBytes("UTF-8")); stream.write(0x0A); stream.write(0x1B); stream.write(0x61); stream.write(0x01); stream.write("开心又省钱;来“ 嗨森逛 ”".getBytes("UTF-8")); stream.write(0x0A); stream.write(0x0A); stream.write(0x0A); stream.write(0x0A); String printText2 = bytes2Hex(getPrinterBytes(stream.toByteArray(), 1, "UTF-8")); System.out.println(printText2); // 发送消息 mqttProviderConfig.publish(2, false, topic, hexStringToString(printText2)); return ResponseMsgUtil.success(null); } catch (Exception e) { log.error("HighOrderController --> mqttPush() error!", e); return ResponseMsgUtil.exception(e); } } public static String hexStringToString(String s) { if (s == null || s.equals("")) { return null; } s = s.replace(" ", ""); byte[] baKeyword = new byte[s.length() / 2]; for (int i = 0; i < baKeyword.length; i++) { try { baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16)); } catch (Exception e) { e.printStackTrace(); } } try { s = new String(baKeyword, "UTF-8"); new String(); } catch (Exception e1) { e1.printStackTrace(); } return s; } /** * 获取打印内容,适用于云打印机 * @param printText 打印文本 * @param pageCount 打印联数 * @param encodingStr 编码方式,默认UTF-8 * @return */ public byte[] getPrinterBytes(final byte[] printText, final int pageCount, String encodingStr) { try { if(encodingStr.equals("")){ encodingStr="UTF-8"; } byte[] msgByte = printText; // 消息数组 final byte[] dataByte = new byte[msgByte.length + 9]; dataByte[0] = 0x1E; dataByte[1] = 0x10; dataByte[2] = (byte) pageCount;// 打印多联 // 有效数据长度 final int len = dataByte.length - 5; dataByte[3] = (byte) (len >> 8); dataByte[4] = (byte) (len & 0xff); // 数据内容 System.arraycopy(msgByte, 0, dataByte, 5, msgByte.length); // 标识字节 dataByte[dataByte.length - 4] = 0x1b; dataByte[dataByte.length - 3] = 0x63; // 打印内容CRC校验 final byte[] dtCRC = getCRC(msgByte); dataByte[dataByte.length - 2] = (byte) (dtCRC[0]); dataByte[dataByte.length - 1] = (byte) (dtCRC[1]); msgByte = dataByte; return msgByte; } catch (Exception ex) { System.out.println(ex.getStackTrace()); } return null; } /** * 获取打印内容,适用于云打印机 * @param printText 打印文本 * @param pageCount 打印联数 * @param encodingStr 编码方式,默认UTF-8 * @return */ public byte[] getPrinterBytes(final String printText, final int pageCount, String encodingStr) { try { if(encodingStr.equals("")){ encodingStr="UTF-8"; } byte[] msgByte = printText.getBytes(encodingStr); // 消息数组 final byte[] dataByte = new byte[msgByte.length + 9]; dataByte[0] = 0x1E; dataByte[1] = 0x10; dataByte[2] = (byte) pageCount;// 打印多联 // 有效数据长度 final int len = dataByte.length - 5; dataByte[3] = (byte) (len >> 8); dataByte[4] = (byte) (len & 0xff); // 数据内容 System.arraycopy(msgByte, 0, dataByte, 5, msgByte.length); // 标识字节 dataByte[dataByte.length - 4] = 0x1b; dataByte[dataByte.length - 3] = 0x63; // 打印内容CRC校验 final byte[] dtCRC = getCRC(msgByte); dataByte[dataByte.length - 2] = (byte) (dtCRC[0]); dataByte[dataByte.length - 1] = (byte) (dtCRC[1]); msgByte = dataByte; return msgByte; } catch (Exception ex) { System.out.println(ex.getStackTrace()); } return null; } private static int[] CRC16Table = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 }; private static byte[] getCRC(byte[] bytes) { int crc = 0xFFFF; // 初始值 for (byte b : bytes) { crc = (crc >> 8) ^ CRC16Table[(crc ^ b) & 0xff]; } byte[] b = new byte[2]; b[0] = (byte) ((crc >> 8)^0xff); b[1] = (byte) ((crc & 0xff)^0xff); return b; } private static final char[] HEXES = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; /** * byte数组 转换成 16进制小写字符串 */ private String bytes2Hex(byte[] bytes) { if (bytes == null || bytes.length == 0) { return null; } StringBuilder hex = new StringBuilder(); for (byte b : bytes) { hex.append(HEXES[(b >> 4) & 0x0F]); hex.append(HEXES[b & 0x0F]); } return hex.toString(); } } \ No newline at end of file diff --git a/hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java b/hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java index 6eb41fb2..09d907d9 100644 --- a/hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java +++ b/hai-cweb/src/main/java/com/cweb/controller/pay/OrderController.java @@ -214,7 +214,7 @@ public class OrderController { weChatPayReqInfo.setSub_mch_id(SysConst.getSysConfig().getWxGzSubMchId());//商户号 } else if (order.getHighChildOrderList().get(0).getGoodsType() == 3) { - weChatPayReqInfo.setSub_mch_id("1624126902"); // 浩联商户号 + weChatPayReqInfo.setSub_mch_id("1609882817"); // 浩联商户号 profitSharing = "Y"; // 查询油站 @@ -225,12 +225,11 @@ public class OrderController { profitSharing = "N"; // 第三方平台 - HighMerchantTripartitePlatform merTripartitePlatform = tripartitePlatformService.getDetail(store.getId(), 1); + HighMerchantTripartitePlatform merTripartitePlatform = tripartitePlatformService.getDetail(store.getMerchantId(), 1); if (merTripartitePlatform != null) { weChatPayReqInfo.setSub_mch_id(merTripartitePlatform.getPlatformMerNumber()); - if (merTripartitePlatform.getProfitSharingRatio().compareTo(new BigDecimal("0")) == 1) { - profitSharing = merTripartitePlatform.getProfitSharingStatus().equals(true)?"Y":"N"; - } + // 是否分账 + profitSharing = merTripartitePlatform.getProfitSharingStatus().equals(true)?"Y":"N"; } } if (store.getPrestoreType().equals(1)) { diff --git a/hai-cweb/src/main/java/com/cweb/controller/pay/UnionPayController.java b/hai-cweb/src/main/java/com/cweb/controller/pay/UnionPayController.java index f5b8ea93..3782c9b0 100644 --- a/hai-cweb/src/main/java/com/cweb/controller/pay/UnionPayController.java +++ b/hai-cweb/src/main/java/com/cweb/controller/pay/UnionPayController.java @@ -9,18 +9,18 @@ import com.hai.common.exception.SysCode; import com.hai.common.utils.DateUtil; import com.hai.common.utils.IDGenerator; import com.hai.common.utils.ResponseMsgUtil; -import com.hai.config.CommonSysConst; -import com.hai.config.HuiLianTongConfig; -import com.hai.config.TuanYouConfig; -import com.hai.config.UnionStagingPayConfig; +import com.hai.config.*; import com.hai.dao.HighCouponCodeOtherMapper; import com.hai.dao.HighGasOrderPushMapper; import com.hai.dao.HighPayRecordMapper; import com.hai.dao.HighUserCouponMapper; import com.hai.entity.*; +import com.hai.enum_type.MerStoreAmountSourceTypeEnum; +import com.hai.enum_type.MerStoreAmountTypeEnum; import com.hai.enum_type.OrderPushType; import com.hai.model.HighMerchantStoreModel; import com.hai.model.ResponseData; +import com.hai.msg.entity.MsgTopic; import com.hai.service.*; import com.hai.service.pay.NotifyService; import io.swagger.annotations.Api; @@ -29,6 +29,7 @@ import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @@ -47,6 +48,9 @@ public class UnionPayController { private static Logger log = LoggerFactory.getLogger(UnionPayController.class); + @Resource + private RedisTemplate redisTemplate; + @Resource private HighOrderService highOrderService; @@ -280,39 +284,95 @@ public class UnionPayController { if (highChildOrder.getGoodsType() == 3) { highChildOrder.setChildOrdeStatus(3); + order.setOrderStatus(3); HighMerchantStoreModel store = highMerchantStoreService.getMerchantStoreById(highChildOrder.getGoodsId()); - // 推送团油订单 - Map 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("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.setType(OrderPushType.type1.getType()); - highGasOrderPush.setOrderNo(order.getOrderNo()); - 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")); + + // 来源类型 1:平台自建 2:团油 + if (store.getSourceType().equals(1)) { + + // 预存类型 0:非预存 1:预存门店 + if (store.getPrestoreType() != null && store.getPrestoreType().equals(1)) { + Map pushParam = new HashMap<>(); + pushParam.put("businessType", MerStoreAmountTypeEnum.type2.getType()); + pushParam.put("storeId", highChildOrder.getGoodsId()); + pushParam.put("price", order.getTotalPrice()); + pushParam.put("sourceType", MerStoreAmountSourceTypeEnum.type2.getType()); + pushParam.put("sourceId", order.getId()); + pushParam.put("sourceContent", "订单号:" + order.getOrderNo() + ",加油金额:¥" + order.getTotalPrice()); + pushParam.put("opUserId", order.getMemId()); + pushParam.put("opUserName", order.getMemName()); + // 扣预存款 + this.redisTemplate.boundListOps(MsgTopic.MerStoreAccount.getName()).leftPush(pushParam); + } + if (StringUtils.isNotBlank(store.getDeviceSn())) { + new Thread(() -> { + try { + SpPrinterConfig sp = new SpPrinterConfig(); + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilCashierStubTemp( + highChildOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + + Thread.sleep(6000); + + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilClientStubTemp( + highChildOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } + + } else if (store.getSourceType().equals(2)) { + // 推送团油订单 + Map 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("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.setType(OrderPushType.type1.getType()); + highGasOrderPush.setOrderNo(order.getOrderNo()); + 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")); + } } } diff --git a/hai-cweb/src/main/resources/dev/application.yml b/hai-cweb/src/main/resources/dev/application.yml index e2b5f630..9d3beabf 100644 --- a/hai-cweb/src/main/resources/dev/application.yml +++ b/hai-cweb/src/main/resources/dev/application.yml @@ -39,6 +39,21 @@ spring: max-wait: -1 max-idle: 10 min-idle: 0 + #MQTT配置信息 + mqtt: + #MQTT服务地址 + url: ws://139.159.177.244:8083/mqtt + #用户名 + username: printer_provider + #密码 + password: 123654 + #客户端id(不能重复) + # client: + # id: provider-id + #MQTT默认的消息推送主题,实际可在调用接口是指定 + # default: + # topic: topic + #配置日期返回至前台为时间戳 jackson: serialization: diff --git a/hai-service/pom.xml b/hai-service/pom.xml index 52ee2f95..1f0d244b 100644 --- a/hai-service/pom.xml +++ b/hai-service/pom.xml @@ -264,6 +264,10 @@ org.springframework.boot spring-boot-starter-websocket + + org.springframework.integration + spring-integration-mqtt + io.netty netty-all diff --git a/hai-service/src/main/java/com/hai/common/utils/HttpsUtils.java b/hai-service/src/main/java/com/hai/common/utils/HttpsUtils.java index ae068cea..5c3c5ce5 100644 --- a/hai-service/src/main/java/com/hai/common/utils/HttpsUtils.java +++ b/hai-service/src/main/java/com/hai/common/utils/HttpsUtils.java @@ -709,7 +709,7 @@ public class HttpsUtils { * @Param [url, str] * @return com.alibaba.fastjson.JSONObject **/ - public static JSONObject postData(String url, String str) { + public static String postData(String url, String str) { CloseableHttpClient httpClient = null; if (url.startsWith("https")) { httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()) @@ -731,7 +731,7 @@ public class HttpsUtils { response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); httpStr = EntityUtils.toString(entity, "UTF-8"); - return JSON.parseObject(httpStr); + return httpStr; } catch (Exception e) { log.error(e.getMessage(),e); } finally { diff --git a/hai-service/src/main/java/com/hai/config/MqttProviderCallBack.java b/hai-service/src/main/java/com/hai/config/MqttProviderCallBack.java new file mode 100644 index 00000000..4b89ac42 --- /dev/null +++ b/hai-service/src/main/java/com/hai/config/MqttProviderCallBack.java @@ -0,0 +1,39 @@ +package com.hai.config; + +import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; +import org.eclipse.paho.client.mqttv3.MqttCallback; +import org.eclipse.paho.client.mqttv3.MqttMessage; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MqttProviderCallBack implements MqttCallback { + + /** + * 与服务器断开 + * @param throwable + */ + @Override + public void connectionLost(Throwable throwable) { + + } + + /** + * 消息到达回调 + * @param s + * @param mqttMessage + * @throws Exception + */ + @Override + public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { + System.out.println("消息到达"); + } + + /** + * 消息发布成功回调 + * @param iMqttDeliveryToken + */ + @Override + public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { + System.out.println("消息发布"); + } +} diff --git a/hai-service/src/main/java/com/hai/config/MqttProviderConfig.java b/hai-service/src/main/java/com/hai/config/MqttProviderConfig.java new file mode 100644 index 00000000..73728d6d --- /dev/null +++ b/hai-service/src/main/java/com/hai/config/MqttProviderConfig.java @@ -0,0 +1,208 @@ +package com.hai.config; + +import io.netty.handler.codec.mqtt.MqttConnAckVariableHeader; +import io.netty.handler.codec.mqtt.MqttConnectVariableHeader; +import io.netty.handler.codec.mqtt.MqttMessageIdVariableHeader; +import io.netty.handler.codec.mqtt.MqttPublishVariableHeader; +import lombok.extern.slf4j.Slf4j; +import javax.annotation.PostConstruct; +import org.eclipse.paho.client.mqttv3.*; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +@Configuration +@Slf4j +public class MqttProviderConfig { + // @Value("${spring.mqtt.username}") + private String username; + + // @Value("${spring.mqtt.password}") + private String password; + + // @Value("${spring.mqtt.url}") + private String hostUrl; + +/* @Value("${spring.mqtt.client.id}") + private String clientId; + + @Value("${spring.mqtt.default.topic}") + private String defaultTopic;*/ + + /** + * 客户端对象 + */ + private MqttClient client; + + /** + * 在bean初始化后连接到服务器 + */ + // @PostConstruct + public void init() { + connect("provider-" + System.currentTimeMillis()); + } +/* + @PostConstruct + public void init(String clientId) { + connect(clientId); + }*/ + + /** + * 客户端连接服务端 + */ + public void connect(String clientId){ + try{ + //创建MQTT客户端对象 + client = new MqttClient(hostUrl,clientId,new MemoryPersistence()); + //连接设置 + MqttConnectOptions options = new MqttConnectOptions(); + //是否清空session,设置false表示服务器会保留客户端的连接记录(订阅主题,qos),客户端重连之后能获取到服务器在客户端断开连接期间推送的消息 + //设置为true表示每次连接服务器都是以新的身份 + options.setCleanSession(true); + //设置连接用户名 + options.setUserName(username); + //设置连接密码 + options.setPassword(password.toCharArray()); + //设置超时时间,单位为秒 + options.setConnectionTimeout(100); + //设置心跳时间 单位为秒,表示服务器每隔 1.5*20秒的时间向客户端发送心跳判断客户端是否在线 + options.setKeepAliveInterval(20); + // 设置遗嘱消息的话题,若客户端和服务器之间的连接意外断开,服务器将发布客户端的遗嘱信息 + // options.setWill("willTopic",(clientId + "与服务器断开连接").getBytes(),0,false); + //设置回调 + client.setCallback(new MqttProviderCallBack()); + client.connect(options); + } catch(MqttException e){ + e.printStackTrace(); + } + } + + public void publish(int qos,boolean retained,String topic,String message) { + if (client == null) { + init(); + } + try { + MqttMessage mqttMessage = new MqttMessage(); + mqttMessage.setQos(qos); + mqttMessage.setRetained(retained); + mqttMessage.setPayload(message.getBytes("UTF-8")); + // 主题的目的地,用于发布/订阅信息 + MqttTopic mqttTopic = client.getTopic(topic); + //提供一种机制来跟踪消息的传递进度 + //用于在以非阻塞方式(在后台运行)执行发布是跟踪消息的传递进度 + MqttDeliveryToken token; + //将指定消息发布到主题,但不等待消息传递完成,返回的token可用于跟踪消息的传递状态 + //一旦此方法干净地返回,消息就已被客户端接受发布,当连接可用,将在后台完成消息传递。 + token = mqttTopic.publish(mqttMessage); + token.waitForCompletion(); + + } catch (MqttException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + System.out.println(sendPrinterRrCodeBytest("1213131", 1)); + } + + public static byte[] sendPrinterRrCodeBytest(String printText, int pageCount) { + try { + byte[] by = printText.getBytes(); + byte[] msgByte = new byte[by.length + 16]; + // 写入缓存 + msgByte[0] = 29; + msgByte[1] = 40; + msgByte[2] = 107; + msgByte[3] = (byte)(by.length+3); + msgByte[4] = 0; + msgByte[5] = 49; + msgByte[6] = 80; + msgByte[7] = 48; // (byte)0x30); + int index = 7; + for (int i = 0; i < by.length; i++) + { + index = index+1; + msgByte[index] = by[i]; + } + // 打印缓存中的数据 + msgByte[index + 1] = 29; + msgByte[index + 2] = 40; + msgByte[index + 3] = 107; + msgByte[index + 4] = (byte)(by.length+3); + msgByte[index + 5] = 0; + msgByte[index + 6] = 49; + msgByte[index + 7] = 81; + msgByte[index + 8] = 48; // (byte)0x30); + byte[] array = new byte[msgByte.length + 9]; + array[0] = 30; + array[1] = 16; + array[2] =(byte) pageCount;//打印份数 + int num = array.length - 5; + array[3] = (byte)(num >> 8); + //array[4] = (byte)((uint)num & 0xFFu); + array[4] = (byte)(num & 0xFF); + for (int i = 0; i < msgByte.length; i++) + { + array[i+ 5] = msgByte[i]; + } + array[array.length - 4] = 27; + array[array.length - 3] = 99; + byte[] crc16CodeArray = getCRC(msgByte); + array[array.length - 2] = crc16CodeArray[0]; + array[array.length - 1] = crc16CodeArray[1]; + return array; + } catch (Exception ex) { + System.out.println(ex.getStackTrace()); + } + return null; + } + + + private static byte[] getCRC(byte[] bytes) { + int crc = 0xFFFF; // 初始值 + for (byte b : bytes) { + crc = (crc >> 8) ^ CRC16Table[(crc ^ b) & 0xff]; + } + byte[] b = new byte[2]; + b[0] = (byte) ((crc >> 8)^0xff); + b[1] = (byte) ((crc & 0xff)^0xff); + return b; + } + + private static int[] CRC16Table = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, + 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, + 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, + 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, + 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, + 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, + 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, + 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, + 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, + 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, + 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, + 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, + 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, + 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, + 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, + 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, + 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, + 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, + 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, + 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, + 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, + 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, + 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, + 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, + 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, + 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, + 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, + 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, + 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, + 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, + 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, + 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, + 0x2c6a, 0x1ef1, 0x0f78 }; +} + diff --git a/hai-service/src/main/java/com/hai/config/PrintDemo.java b/hai-service/src/main/java/com/hai/config/PrintDemo.java new file mode 100644 index 00000000..149f16a4 --- /dev/null +++ b/hai-service/src/main/java/com/hai/config/PrintDemo.java @@ -0,0 +1,219 @@ +package com.hai.config; + + +import org.junit.Test; + +import java.io.UnsupportedEncodingException; + + +public class PrintDemo { + + + private String accessKeyId = "LTAI5tHHL3z6gpJbMmCg3zt2"; + private String accessKeySecret = "CC9kAuqgdjKiE6jxSQHddFxGDCTpBQ"; + private String instanceId = "post-cn-i7m2558ze01"; + private String topic = "Box"; + private String groupId= "GID_BOX"; + private String endpoint= "onsmqtt.mq-internet-access.aliyuncs.com"; + + + public static final int PAYTYPE_VOICE_NULL=2000; + public static final int PAYTYPE_VOICE_ALI=2001; + public static final int PAYTYPE_VOICE_QQ=2002; + public static final int PAYTYPE_VOICE_WECHAT=2003; + public static final int PAYTYPE_VOICE_JD=2004; + public static final int PAYTYPE_VOICE_UNION=2005; + public static final int PAYTYPE_VOICE_DIY7570=7570; + public static final int PAYTYPE_VOICE_DIY7571=7571; + public static final int PAYTYPE_VOICE_DIY7572=7572; + public static final int PAYTYPE_VOICE_DIY7573=7573; + public static final int PAYTYPE_VOICE_DIY7574=7574; + public static final int PAYTYPE_VOICE_DIY7575=7575; + public static final int PAYTYPE_VOICE_DIY7576=7576; + public static final int PAYTYPE_VOICE_DIY7577=7577; + public static final int PAYTYPE_VOICE_DIY7578=7578; + public static final int PAYTYPE_VOICE_DIY7579=7579; + + + + @Test + public void Test(){ + String imeiStr="352736082440754";//设备IMEI + String printText="1234\r\n";//打印文本 + String voiceMsgId="2019022611153312312345";//消息ID + String voiceMsgMoney="1234";//播报金额 + //获取打印内容 + byte[] printData = getPrinterBytes(printText, 1, ""); + System.out.println(bytes2Hex(printData)); + //获取播报字符串 + System.out.println(getStaticVoiceStr(imeiStr,voiceMsgId,voiceMsgMoney,PAYTYPE_VOICE_ALI)); + //获取播报打印机指令 + printData=getPrinterVoiceBytes(printText,1,"",imeiStr,voiceMsgId,voiceMsgMoney,PAYTYPE_VOICE_ALI); + System.out.println(bytes2Hex(printData)); +/* + try { + com.aliyun.onsmqtt20200420.Client client = createClient(accessKeyId, accessKeySecret); + SendMessageRequest sendMessageRequest = new SendMessageRequest() + .setInstanceId("post-cn-i7m2558ze01") + .setMqttTopic("Box/p2p/GID_BOX@@@359ac67b25c11b8") + .setPayload(bytes2Hex(printData)); + SendMessageResponse sendMessageResponse = client.sendMessage(sendMessageRequest); + System.out.println(sendMessageResponse.getBody().msgId); + } catch (Exception e) { + e.printStackTrace(); + }*/ + + } + + /** + * 使用AK&SK初始化账号Client + * @param accessKeyId + * @param accessKeySecret + * @return Client + * @throws Exception + */ +/* public com.aliyun.onsmqtt20200420.Client createClient(String accessKeyId, String accessKeySecret) throws Exception { + Config config = new Config() + // 您的AccessKey ID + .setAccessKeyId(accessKeyId) + // 您的AccessKey Secret + .setAccessKeySecret(accessKeySecret); + // 访问的域名 + config.endpoint = endpoint; + return new com.aliyun.onsmqtt20200420.Client(config); + }*/ + + + + /** + * 支付播报固定语音字节数组 + * @param imeiStr IMEI设备唯一标识 + * @param msgId 交易序列号,不大于32字节,保证唯一 + * @param moneyStr 播报金额,最多两位小数 + * @param payType 支付类型 + * @return + */ + public static byte[] getStaticVoiceBytes(String imeiStr,String msgId,String moneyStr,int payType){ + return getStaticVoiceStr(imeiStr,msgId,moneyStr,payType).getBytes(); + } + /** + * 支付播报固定语音字符串 + * @param imeiStr IMEI设备唯一标识 + * @param msgId 交易序列号,不大于32字节,保证唯一 + * @param moneyStr 播报金额,最多两位小数 + * @param payType 支付类型 + * @return + */ + public static String getStaticVoiceStr(String imeiStr,String msgId,String moneyStr,int payType){ + String str=imeiStr+"|1007|"+msgId+"|"+moneyStr+"|"+payType; + return str; + } + /** + * 获取打印内容,适用于云打印机 + * @param printText 打印文本 + * @param pageCount 打印联数 + * @param encodingStr 编码方式,默认UTF-8 + * @return + */ + public static byte[] getPrinterBytes(final String printText, + final int pageCount, String encodingStr) { + try { + if(encodingStr.equals("")){ + encodingStr="UTF-8"; + } + byte[] msgByte = printText.getBytes(encodingStr); + // 消息数组 + final byte[] dataByte = new byte[msgByte.length + 9]; + dataByte[0] = 0x1E; + dataByte[1] = 0x10; + dataByte[2] = (byte) pageCount;// 打印多联 + // 有效数据长度 + final int len = dataByte.length - 5; + dataByte[3] = (byte) (len >> 8); + dataByte[4] = (byte) (len & 0xff); + // 数据内容 + System.arraycopy(msgByte, 0, dataByte, 5, msgByte.length); + // 标识字节 + dataByte[dataByte.length - 4] = 0x1b; + dataByte[dataByte.length - 3] = 0x63; + // 打印内容CRC校验 + final byte[] dtCRC = getCRC(msgByte); + dataByte[dataByte.length - 2] = (byte) (dtCRC[0]); + dataByte[dataByte.length - 1] = (byte) (dtCRC[1]); + msgByte = dataByte; + return msgByte; + } catch (Exception ex) { + System.out.println(ex.getStackTrace()); + } + return null; + } + + public static byte[] getPrinterVoiceBytes(String printTxt,int pageCount,String encodingStr,String imeiStr,String msgId,String moneyStr,int payType){ + byte[] voiceArray=getStaticVoiceBytes(imeiStr, msgId, moneyStr, payType); + byte[] printerArray=getPrinterBytes(printTxt,pageCount,encodingStr); + byte[] data=new byte[voiceArray.length+printerArray.length]; + System.arraycopy(printerArray, 0, data, 0, printerArray.length); + System.arraycopy(voiceArray, 0, data, printerArray.length, voiceArray.length); + return data; + } + + private static int[] CRC16Table = { 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, + 0x57ad, 0x6536, 0x74bf, 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, + 0xdbe5, 0xe97e, 0xf8f7, 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, + 0x472c, 0x75b7, 0x643e, 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, + 0xcb64, 0xf9ff, 0xe876, 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, + 0x76af, 0x4434, 0x55bd, 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, + 0xfae7, 0xc87c, 0xd9f5, 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, + 0x662e, 0x54b5, 0x453c, 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, + 0xea66, 0xd8fd, 0xc974, 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, + 0x15a9, 0x2732, 0x36bb, 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, + 0x99e1, 0xab7a, 0xbaf3, 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, + 0x0528, 0x37b3, 0x263a, 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, + 0x8960, 0xbbfb, 0xaa72, 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, + 0x34ab, 0x0630, 0x17b9, 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, + 0xb8e3, 0x8a78, 0x9bf1, 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, + 0x242a, 0x16b1, 0x0738, 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, + 0xa862, 0x9af9, 0x8b70, 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, + 0xd3a5, 0xe13e, 0xf0b7, 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, + 0x5fed, 0x6d76, 0x7cff, 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, + 0xc324, 0xf1bf, 0xe036, 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, + 0x4f6c, 0x7df7, 0x6c7e, 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, + 0xf2a7, 0xc03c, 0xd1b5, 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, + 0x7eef, 0x4c74, 0x5dfd, 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, + 0xe226, 0xd0bd, 0xc134, 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, + 0x6e6e, 0x5cf5, 0x4d7c, 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, + 0x91a1, 0xa33a, 0xb2b3, 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, + 0x1de9, 0x2f72, 0x3efb, 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, + 0x8120, 0xb3bb, 0xa232, 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, + 0x0d68, 0x3ff3, 0x2e7a, 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, + 0xb0a3, 0x8238, 0x93b1, 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, + 0x3ceb, 0x0e70, 0x1ff9, 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, + 0xa022, 0x92b9, 0x8330, 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, + 0x2c6a, 0x1ef1, 0x0f78 }; + private static byte[] getCRC(byte[] bytes) { + int crc = 0xFFFF; // 初始值 + for (byte b : bytes) { + crc = (crc >> 8) ^ CRC16Table[(crc ^ b) & 0xff]; + } + byte[] b = new byte[2]; + b[0] = (byte) ((crc >> 8)^0xff); + b[1] = (byte) ((crc & 0xff)^0xff); + return b; + } + private static final char[] HEXES = { '0', '1', '2', '3', '4', '5', '6', + '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + /** + * byte数组 转换成 16进制小写字符串 + */ + private static String bytes2Hex(byte[] bytes) { + if (bytes == null || bytes.length == 0) { + return null; + } + StringBuilder hex = new StringBuilder(); + for (byte b : bytes) { + hex.append(HEXES[(b >> 4) & 0x0F]); + hex.append(HEXES[b & 0x0F]); + } + return hex.toString(); + } +} diff --git a/hai-service/src/main/java/com/hai/config/TuanYouConfig.java b/hai-service/src/main/java/com/hai/config/TuanYouConfig.java index aafda12a..5f3a1b62 100644 --- a/hai-service/src/main/java/com/hai/config/TuanYouConfig.java +++ b/hai-service/src/main/java/com/hai/config/TuanYouConfig.java @@ -123,14 +123,14 @@ public class TuanYouConfig { * @return 请求结果 * @throws Exception */ - public static JSONObject queryThirdOrderDretail(String thirdSerialNo) throws Exception { + public static JSONObject queryThirdOrderDetail(String thirdSerialNo) throws Exception { Map paramMap = new HashMap<>(); paramMap.put("app_key", CommonSysConst.getSysConfig().getTuanYouAppKey()); paramMap.put("timestamp", new Date().getTime()); - paramMap.put("companyCode", "new Date().getTime()"); + paramMap.put("companyCode", CommonSysConst.getSysConfig().getTuanYouAppKey()); paramMap.put("thirdSerialNo", thirdSerialNo); paramMap.put("sign", MD5Util.encode(generateTuanYouSignature(paramMap,CommonSysConst.getSysConfig().getTuanYouAppSecret()).getBytes()).toLowerCase()); - return HttpsUtils.doPost(CommonSysConst.getSysConfig().getTuanYouUrl()+"/services/vp/openapi/queryCompanyAccountInfo2JD", JSON.toJSONString(paramMap)); + return HttpsUtils.doPost(CommonSysConst.getSysConfig().getTuanYouUrl()+"/services/vp/openapi/queryThirdOrderDetail", JSON.toJSONString(paramMap)); } /** diff --git a/hai-service/src/main/java/com/hai/dao/HighMerchantTripartitePlatformMapper.java b/hai-service/src/main/java/com/hai/dao/HighMerchantTripartitePlatformMapper.java index 1e322e73..36d332e0 100644 --- a/hai-service/src/main/java/com/hai/dao/HighMerchantTripartitePlatformMapper.java +++ b/hai-service/src/main/java/com/hai/dao/HighMerchantTripartitePlatformMapper.java @@ -42,12 +42,14 @@ public interface HighMerchantTripartitePlatformMapper extends HighMerchantTripar "insert into high_merchant_tripartite_platform (mer_id, platform_type, ", "platform_mer_name, platform_mer_number, ", "profit_sharing_status, profit_sharing_ratio, ", + "profit_sharing_receivers_number, profit_sharing_receivers_name, ", "`status`, create_time, ", "update_time, ext_1, ", "ext_2, ext_3)", "values (#{merId,jdbcType=BIGINT}, #{platformType,jdbcType=INTEGER}, ", "#{platformMerName,jdbcType=VARCHAR}, #{platformMerNumber,jdbcType=VARCHAR}, ", "#{profitSharingStatus,jdbcType=BIT}, #{profitSharingRatio,jdbcType=DECIMAL}, ", + "#{profitSharingReceiversNumber,jdbcType=VARCHAR}, #{profitSharingReceiversName,jdbcType=VARCHAR}, ", "#{status,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, ", "#{updateTime,jdbcType=TIMESTAMP}, #{ext1,jdbcType=VARCHAR}, ", "#{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})" @@ -68,6 +70,8 @@ public interface HighMerchantTripartitePlatformMapper extends HighMerchantTripar @Result(column="platform_mer_number", property="platformMerNumber", jdbcType=JdbcType.VARCHAR), @Result(column="profit_sharing_status", property="profitSharingStatus", jdbcType=JdbcType.BIT), @Result(column="profit_sharing_ratio", property="profitSharingRatio", jdbcType=JdbcType.DECIMAL), + @Result(column="profit_sharing_receivers_number", property="profitSharingReceiversNumber", jdbcType=JdbcType.VARCHAR), + @Result(column="profit_sharing_receivers_name", property="profitSharingReceiversName", jdbcType=JdbcType.VARCHAR), @Result(column="status", property="status", jdbcType=JdbcType.INTEGER), @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), @@ -80,7 +84,8 @@ public interface HighMerchantTripartitePlatformMapper extends HighMerchantTripar @Select({ "select", "id, mer_id, platform_type, platform_mer_name, platform_mer_number, profit_sharing_status, ", - "profit_sharing_ratio, `status`, create_time, update_time, ext_1, ext_2, ext_3", + "profit_sharing_ratio, profit_sharing_receivers_number, profit_sharing_receivers_name, ", + "`status`, create_time, update_time, ext_1, ext_2, ext_3", "from high_merchant_tripartite_platform", "where id = #{id,jdbcType=BIGINT}" }) @@ -92,6 +97,8 @@ public interface HighMerchantTripartitePlatformMapper extends HighMerchantTripar @Result(column="platform_mer_number", property="platformMerNumber", jdbcType=JdbcType.VARCHAR), @Result(column="profit_sharing_status", property="profitSharingStatus", jdbcType=JdbcType.BIT), @Result(column="profit_sharing_ratio", property="profitSharingRatio", jdbcType=JdbcType.DECIMAL), + @Result(column="profit_sharing_receivers_number", property="profitSharingReceiversNumber", jdbcType=JdbcType.VARCHAR), + @Result(column="profit_sharing_receivers_name", property="profitSharingReceiversName", jdbcType=JdbcType.VARCHAR), @Result(column="status", property="status", jdbcType=JdbcType.INTEGER), @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="update_time", property="updateTime", jdbcType=JdbcType.TIMESTAMP), @@ -118,6 +125,8 @@ public interface HighMerchantTripartitePlatformMapper extends HighMerchantTripar "platform_mer_number = #{platformMerNumber,jdbcType=VARCHAR},", "profit_sharing_status = #{profitSharingStatus,jdbcType=BIT},", "profit_sharing_ratio = #{profitSharingRatio,jdbcType=DECIMAL},", + "profit_sharing_receivers_number = #{profitSharingReceiversNumber,jdbcType=VARCHAR},", + "profit_sharing_receivers_name = #{profitSharingReceiversName,jdbcType=VARCHAR},", "`status` = #{status,jdbcType=INTEGER},", "create_time = #{createTime,jdbcType=TIMESTAMP},", "update_time = #{updateTime,jdbcType=TIMESTAMP},", diff --git a/hai-service/src/main/java/com/hai/dao/HighMerchantTripartitePlatformSqlProvider.java b/hai-service/src/main/java/com/hai/dao/HighMerchantTripartitePlatformSqlProvider.java index a626ae6b..d828fa34 100644 --- a/hai-service/src/main/java/com/hai/dao/HighMerchantTripartitePlatformSqlProvider.java +++ b/hai-service/src/main/java/com/hai/dao/HighMerchantTripartitePlatformSqlProvider.java @@ -52,6 +52,14 @@ public class HighMerchantTripartitePlatformSqlProvider { sql.VALUES("profit_sharing_ratio", "#{profitSharingRatio,jdbcType=DECIMAL}"); } + if (record.getProfitSharingReceiversNumber() != null) { + sql.VALUES("profit_sharing_receivers_number", "#{profitSharingReceiversNumber,jdbcType=VARCHAR}"); + } + + if (record.getProfitSharingReceiversName() != null) { + sql.VALUES("profit_sharing_receivers_name", "#{profitSharingReceiversName,jdbcType=VARCHAR}"); + } + if (record.getStatus() != null) { sql.VALUES("`status`", "#{status,jdbcType=INTEGER}"); } @@ -92,6 +100,8 @@ public class HighMerchantTripartitePlatformSqlProvider { sql.SELECT("platform_mer_number"); sql.SELECT("profit_sharing_status"); sql.SELECT("profit_sharing_ratio"); + sql.SELECT("profit_sharing_receivers_number"); + sql.SELECT("profit_sharing_receivers_name"); sql.SELECT("`status`"); sql.SELECT("create_time"); sql.SELECT("update_time"); @@ -143,6 +153,14 @@ public class HighMerchantTripartitePlatformSqlProvider { sql.SET("profit_sharing_ratio = #{record.profitSharingRatio,jdbcType=DECIMAL}"); } + if (record.getProfitSharingReceiversNumber() != null) { + sql.SET("profit_sharing_receivers_number = #{record.profitSharingReceiversNumber,jdbcType=VARCHAR}"); + } + + if (record.getProfitSharingReceiversName() != null) { + sql.SET("profit_sharing_receivers_name = #{record.profitSharingReceiversName,jdbcType=VARCHAR}"); + } + if (record.getStatus() != null) { sql.SET("`status` = #{record.status,jdbcType=INTEGER}"); } @@ -182,6 +200,8 @@ public class HighMerchantTripartitePlatformSqlProvider { sql.SET("platform_mer_number = #{record.platformMerNumber,jdbcType=VARCHAR}"); sql.SET("profit_sharing_status = #{record.profitSharingStatus,jdbcType=BIT}"); sql.SET("profit_sharing_ratio = #{record.profitSharingRatio,jdbcType=DECIMAL}"); + sql.SET("profit_sharing_receivers_number = #{record.profitSharingReceiversNumber,jdbcType=VARCHAR}"); + sql.SET("profit_sharing_receivers_name = #{record.profitSharingReceiversName,jdbcType=VARCHAR}"); sql.SET("`status` = #{record.status,jdbcType=INTEGER}"); sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}"); sql.SET("update_time = #{record.updateTime,jdbcType=TIMESTAMP}"); @@ -222,6 +242,14 @@ public class HighMerchantTripartitePlatformSqlProvider { sql.SET("profit_sharing_ratio = #{profitSharingRatio,jdbcType=DECIMAL}"); } + if (record.getProfitSharingReceiversNumber() != null) { + sql.SET("profit_sharing_receivers_number = #{profitSharingReceiversNumber,jdbcType=VARCHAR}"); + } + + if (record.getProfitSharingReceiversName() != null) { + sql.SET("profit_sharing_receivers_name = #{profitSharingReceiversName,jdbcType=VARCHAR}"); + } + if (record.getStatus() != null) { sql.SET("`status` = #{status,jdbcType=INTEGER}"); } diff --git a/hai-service/src/main/java/com/hai/dao/HighOrderMapper.java b/hai-service/src/main/java/com/hai/dao/HighOrderMapper.java index 3cdc4d3e..4632e811 100644 --- a/hai-service/src/main/java/com/hai/dao/HighOrderMapper.java +++ b/hai-service/src/main/java/com/hai/dao/HighOrderMapper.java @@ -55,6 +55,7 @@ public interface HighOrderMapper extends HighOrderMapperExt { "refund_content, refusal_refund_content, ", "Identification_code, profit_sharing_status, ", "profit_sharing_ratio, account_merchant_num, ", + "print_status, print_num, ", "ext_1, ext_2, ext_3)", "values (#{orderNo,jdbcType=VARCHAR}, #{memDiscountId,jdbcType=BIGINT}, ", "#{memDiscountName,jdbcType=VARCHAR}, #{memId,jdbcType=BIGINT}, ", @@ -72,6 +73,7 @@ public interface HighOrderMapper extends HighOrderMapperExt { "#{refundContent,jdbcType=VARCHAR}, #{refusalRefundContent,jdbcType=VARCHAR}, ", "#{identificationCode,jdbcType=BIGINT}, #{profitSharingStatus,jdbcType=BIT}, ", "#{profitSharingRatio,jdbcType=DECIMAL}, #{accountMerchantNum,jdbcType=VARCHAR}, ", + "#{printStatus,jdbcType=BIT}, #{printNum,jdbcType=INTEGER}, ", "#{ext1,jdbcType=VARCHAR}, #{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})" }) @Options(useGeneratedKeys=true,keyProperty="id") @@ -116,6 +118,8 @@ public interface HighOrderMapper extends HighOrderMapperExt { @Result(column="profit_sharing_status", property="profitSharingStatus", jdbcType=JdbcType.BIT), @Result(column="profit_sharing_ratio", property="profitSharingRatio", jdbcType=JdbcType.DECIMAL), @Result(column="account_merchant_num", property="accountMerchantNum", jdbcType=JdbcType.VARCHAR), + @Result(column="print_status", property="printStatus", jdbcType=JdbcType.BIT), + @Result(column="print_num", property="printNum", jdbcType=JdbcType.INTEGER), @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR), @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR), @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR) @@ -129,7 +133,8 @@ public interface HighOrderMapper extends HighOrderMapperExt { "pay_real_price, pay_serial_no, deduction_price, order_status, total_price, create_time, ", "pay_time, cancel_time, cancel_remarks, finish_time, remarks, refund_time, refund_price, ", "refund_content, refusal_refund_content, Identification_code, profit_sharing_status, ", - "profit_sharing_ratio, account_merchant_num, ext_1, ext_2, ext_3", + "profit_sharing_ratio, account_merchant_num, print_status, print_num, ext_1, ", + "ext_2, ext_3", "from high_order", "where id = #{id,jdbcType=BIGINT}" }) @@ -167,6 +172,8 @@ public interface HighOrderMapper extends HighOrderMapperExt { @Result(column="profit_sharing_status", property="profitSharingStatus", jdbcType=JdbcType.BIT), @Result(column="profit_sharing_ratio", property="profitSharingRatio", jdbcType=JdbcType.DECIMAL), @Result(column="account_merchant_num", property="accountMerchantNum", jdbcType=JdbcType.VARCHAR), + @Result(column="print_status", property="printStatus", jdbcType=JdbcType.BIT), + @Result(column="print_num", property="printNum", jdbcType=JdbcType.INTEGER), @Result(column="ext_1", property="ext1", jdbcType=JdbcType.VARCHAR), @Result(column="ext_2", property="ext2", jdbcType=JdbcType.VARCHAR), @Result(column="ext_3", property="ext3", jdbcType=JdbcType.VARCHAR) @@ -216,6 +223,8 @@ public interface HighOrderMapper extends HighOrderMapperExt { "profit_sharing_status = #{profitSharingStatus,jdbcType=BIT},", "profit_sharing_ratio = #{profitSharingRatio,jdbcType=DECIMAL},", "account_merchant_num = #{accountMerchantNum,jdbcType=VARCHAR},", + "print_status = #{printStatus,jdbcType=BIT},", + "print_num = #{printNum,jdbcType=INTEGER},", "ext_1 = #{ext1,jdbcType=VARCHAR},", "ext_2 = #{ext2,jdbcType=VARCHAR},", "ext_3 = #{ext3,jdbcType=VARCHAR}", diff --git a/hai-service/src/main/java/com/hai/dao/HighOrderMapperExt.java b/hai-service/src/main/java/com/hai/dao/HighOrderMapperExt.java index ea22b6a3..1b3c8122 100644 --- a/hai-service/src/main/java/com/hai/dao/HighOrderMapperExt.java +++ b/hai-service/src/main/java/com/hai/dao/HighOrderMapperExt.java @@ -1115,11 +1115,13 @@ public interface HighOrderMapperExt { " b.pay_time payTime," + " b.refund_time refundTime," + " b.refund_price refundPrice," + - " b.refund_content refundContent" + + " b.refund_content refundContent," + + " b.print_status printStatus," + + " b.print_num printNum" + " from high_child_order a,high_order b " + " where a.order_id = b.id " + " and goods_type = 3 " + - " and goods_id = #{param.storeId} " + + " and goods_id in (${param.storeId}) " + " and b.order_status in (${param.status})" + " = #{param.createTimeS} ]]> ", " ", diff --git a/hai-service/src/main/java/com/hai/dao/HighOrderSqlProvider.java b/hai-service/src/main/java/com/hai/dao/HighOrderSqlProvider.java index 9e5a74ab..55ed3ed1 100644 --- a/hai-service/src/main/java/com/hai/dao/HighOrderSqlProvider.java +++ b/hai-service/src/main/java/com/hai/dao/HighOrderSqlProvider.java @@ -156,6 +156,14 @@ public class HighOrderSqlProvider { sql.VALUES("account_merchant_num", "#{accountMerchantNum,jdbcType=VARCHAR}"); } + if (record.getPrintStatus() != null) { + sql.VALUES("print_status", "#{printStatus,jdbcType=BIT}"); + } + + if (record.getPrintNum() != null) { + sql.VALUES("print_num", "#{printNum,jdbcType=INTEGER}"); + } + if (record.getExt1() != null) { sql.VALUES("ext_1", "#{ext1,jdbcType=VARCHAR}"); } @@ -210,6 +218,8 @@ public class HighOrderSqlProvider { sql.SELECT("profit_sharing_status"); sql.SELECT("profit_sharing_ratio"); sql.SELECT("account_merchant_num"); + sql.SELECT("print_status"); + sql.SELECT("print_num"); sql.SELECT("ext_1"); sql.SELECT("ext_2"); sql.SELECT("ext_3"); @@ -362,6 +372,14 @@ public class HighOrderSqlProvider { sql.SET("account_merchant_num = #{record.accountMerchantNum,jdbcType=VARCHAR}"); } + if (record.getPrintStatus() != null) { + sql.SET("print_status = #{record.printStatus,jdbcType=BIT}"); + } + + if (record.getPrintNum() != null) { + sql.SET("print_num = #{record.printNum,jdbcType=INTEGER}"); + } + if (record.getExt1() != null) { sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}"); } @@ -415,6 +433,8 @@ public class HighOrderSqlProvider { sql.SET("profit_sharing_status = #{record.profitSharingStatus,jdbcType=BIT}"); sql.SET("profit_sharing_ratio = #{record.profitSharingRatio,jdbcType=DECIMAL}"); sql.SET("account_merchant_num = #{record.accountMerchantNum,jdbcType=VARCHAR}"); + sql.SET("print_status = #{record.printStatus,jdbcType=BIT}"); + sql.SET("print_num = #{record.printNum,jdbcType=INTEGER}"); sql.SET("ext_1 = #{record.ext1,jdbcType=VARCHAR}"); sql.SET("ext_2 = #{record.ext2,jdbcType=VARCHAR}"); sql.SET("ext_3 = #{record.ext3,jdbcType=VARCHAR}"); @@ -556,6 +576,14 @@ public class HighOrderSqlProvider { sql.SET("account_merchant_num = #{accountMerchantNum,jdbcType=VARCHAR}"); } + if (record.getPrintStatus() != null) { + sql.SET("print_status = #{printStatus,jdbcType=BIT}"); + } + + if (record.getPrintNum() != null) { + sql.SET("print_num = #{printNum,jdbcType=INTEGER}"); + } + if (record.getExt1() != null) { sql.SET("ext_1 = #{ext1,jdbcType=VARCHAR}"); } diff --git a/hai-service/src/main/java/com/hai/entity/HighMerchantTripartitePlatform.java b/hai-service/src/main/java/com/hai/entity/HighMerchantTripartitePlatform.java index 73468479..8db5a8f0 100644 --- a/hai-service/src/main/java/com/hai/entity/HighMerchantTripartitePlatform.java +++ b/hai-service/src/main/java/com/hai/entity/HighMerchantTripartitePlatform.java @@ -46,6 +46,16 @@ public class HighMerchantTripartitePlatform implements Serializable { */ private BigDecimal profitSharingRatio; + /** + * 分账接收方账户 + */ + private String profitSharingReceiversNumber; + + /** + * 分账接收方名称 + */ + private String profitSharingReceiversName; + /** * 状态 0:删除 1:正常 */ @@ -125,6 +135,22 @@ public class HighMerchantTripartitePlatform implements Serializable { this.profitSharingRatio = profitSharingRatio; } + public String getProfitSharingReceiversNumber() { + return profitSharingReceiversNumber; + } + + public void setProfitSharingReceiversNumber(String profitSharingReceiversNumber) { + this.profitSharingReceiversNumber = profitSharingReceiversNumber; + } + + public String getProfitSharingReceiversName() { + return profitSharingReceiversName; + } + + public void setProfitSharingReceiversName(String profitSharingReceiversName) { + this.profitSharingReceiversName = profitSharingReceiversName; + } + public Integer getStatus() { return status; } @@ -192,6 +218,8 @@ public class HighMerchantTripartitePlatform implements Serializable { && (this.getPlatformMerNumber() == null ? other.getPlatformMerNumber() == null : this.getPlatformMerNumber().equals(other.getPlatformMerNumber())) && (this.getProfitSharingStatus() == null ? other.getProfitSharingStatus() == null : this.getProfitSharingStatus().equals(other.getProfitSharingStatus())) && (this.getProfitSharingRatio() == null ? other.getProfitSharingRatio() == null : this.getProfitSharingRatio().equals(other.getProfitSharingRatio())) + && (this.getProfitSharingReceiversNumber() == null ? other.getProfitSharingReceiversNumber() == null : this.getProfitSharingReceiversNumber().equals(other.getProfitSharingReceiversNumber())) + && (this.getProfitSharingReceiversName() == null ? other.getProfitSharingReceiversName() == null : this.getProfitSharingReceiversName().equals(other.getProfitSharingReceiversName())) && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus())) && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime())) @@ -211,6 +239,8 @@ public class HighMerchantTripartitePlatform implements Serializable { result = prime * result + ((getPlatformMerNumber() == null) ? 0 : getPlatformMerNumber().hashCode()); result = prime * result + ((getProfitSharingStatus() == null) ? 0 : getProfitSharingStatus().hashCode()); result = prime * result + ((getProfitSharingRatio() == null) ? 0 : getProfitSharingRatio().hashCode()); + result = prime * result + ((getProfitSharingReceiversNumber() == null) ? 0 : getProfitSharingReceiversNumber().hashCode()); + result = prime * result + ((getProfitSharingReceiversName() == null) ? 0 : getProfitSharingReceiversName().hashCode()); result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode()); result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode()); @@ -233,6 +263,8 @@ public class HighMerchantTripartitePlatform implements Serializable { sb.append(", platformMerNumber=").append(platformMerNumber); sb.append(", profitSharingStatus=").append(profitSharingStatus); sb.append(", profitSharingRatio=").append(profitSharingRatio); + sb.append(", profitSharingReceiversNumber=").append(profitSharingReceiversNumber); + sb.append(", profitSharingReceiversName=").append(profitSharingReceiversName); sb.append(", status=").append(status); sb.append(", createTime=").append(createTime); sb.append(", updateTime=").append(updateTime); diff --git a/hai-service/src/main/java/com/hai/entity/HighMerchantTripartitePlatformExample.java b/hai-service/src/main/java/com/hai/entity/HighMerchantTripartitePlatformExample.java index 1880d144..b880f9f6 100644 --- a/hai-service/src/main/java/com/hai/entity/HighMerchantTripartitePlatformExample.java +++ b/hai-service/src/main/java/com/hai/entity/HighMerchantTripartitePlatformExample.java @@ -566,6 +566,146 @@ public class HighMerchantTripartitePlatformExample { return (Criteria) this; } + public Criteria andProfitSharingReceiversNumberIsNull() { + addCriterion("profit_sharing_receivers_number is null"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberIsNotNull() { + addCriterion("profit_sharing_receivers_number is not null"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberEqualTo(String value) { + addCriterion("profit_sharing_receivers_number =", value, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberNotEqualTo(String value) { + addCriterion("profit_sharing_receivers_number <>", value, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberGreaterThan(String value) { + addCriterion("profit_sharing_receivers_number >", value, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberGreaterThanOrEqualTo(String value) { + addCriterion("profit_sharing_receivers_number >=", value, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberLessThan(String value) { + addCriterion("profit_sharing_receivers_number <", value, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberLessThanOrEqualTo(String value) { + addCriterion("profit_sharing_receivers_number <=", value, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberLike(String value) { + addCriterion("profit_sharing_receivers_number like", value, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberNotLike(String value) { + addCriterion("profit_sharing_receivers_number not like", value, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberIn(List values) { + addCriterion("profit_sharing_receivers_number in", values, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberNotIn(List values) { + addCriterion("profit_sharing_receivers_number not in", values, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberBetween(String value1, String value2) { + addCriterion("profit_sharing_receivers_number between", value1, value2, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNumberNotBetween(String value1, String value2) { + addCriterion("profit_sharing_receivers_number not between", value1, value2, "profitSharingReceiversNumber"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameIsNull() { + addCriterion("profit_sharing_receivers_name is null"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameIsNotNull() { + addCriterion("profit_sharing_receivers_name is not null"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameEqualTo(String value) { + addCriterion("profit_sharing_receivers_name =", value, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameNotEqualTo(String value) { + addCriterion("profit_sharing_receivers_name <>", value, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameGreaterThan(String value) { + addCriterion("profit_sharing_receivers_name >", value, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameGreaterThanOrEqualTo(String value) { + addCriterion("profit_sharing_receivers_name >=", value, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameLessThan(String value) { + addCriterion("profit_sharing_receivers_name <", value, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameLessThanOrEqualTo(String value) { + addCriterion("profit_sharing_receivers_name <=", value, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameLike(String value) { + addCriterion("profit_sharing_receivers_name like", value, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameNotLike(String value) { + addCriterion("profit_sharing_receivers_name not like", value, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameIn(List values) { + addCriterion("profit_sharing_receivers_name in", values, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameNotIn(List values) { + addCriterion("profit_sharing_receivers_name not in", values, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameBetween(String value1, String value2) { + addCriterion("profit_sharing_receivers_name between", value1, value2, "profitSharingReceiversName"); + return (Criteria) this; + } + + public Criteria andProfitSharingReceiversNameNotBetween(String value1, String value2) { + addCriterion("profit_sharing_receivers_name not between", value1, value2, "profitSharingReceiversName"); + return (Criteria) this; + } + public Criteria andStatusIsNull() { addCriterion("`status` is null"); return (Criteria) this; diff --git a/hai-service/src/main/java/com/hai/entity/HighOrder.java b/hai-service/src/main/java/com/hai/entity/HighOrder.java index 3dd4b8d0..736a7b4f 100644 --- a/hai-service/src/main/java/com/hai/entity/HighOrder.java +++ b/hai-service/src/main/java/com/hai/entity/HighOrder.java @@ -180,6 +180,16 @@ public class HighOrder implements Serializable { */ private String accountMerchantNum; + /** + * 打印状态 + */ + private Boolean printStatus; + + /** + * 打印次数 + */ + private Integer printNum; + private String ext1; private String ext2; @@ -482,6 +492,22 @@ public class HighOrder implements Serializable { this.accountMerchantNum = accountMerchantNum; } + public Boolean getPrintStatus() { + return printStatus; + } + + public void setPrintStatus(Boolean printStatus) { + this.printStatus = printStatus; + } + + public Integer getPrintNum() { + return printNum; + } + + public void setPrintNum(Integer printNum) { + this.printNum = printNum; + } + public String getExt1() { return ext1; } @@ -551,6 +577,8 @@ public class HighOrder implements Serializable { && (this.getProfitSharingStatus() == null ? other.getProfitSharingStatus() == null : this.getProfitSharingStatus().equals(other.getProfitSharingStatus())) && (this.getProfitSharingRatio() == null ? other.getProfitSharingRatio() == null : this.getProfitSharingRatio().equals(other.getProfitSharingRatio())) && (this.getAccountMerchantNum() == null ? other.getAccountMerchantNum() == null : this.getAccountMerchantNum().equals(other.getAccountMerchantNum())) + && (this.getPrintStatus() == null ? other.getPrintStatus() == null : this.getPrintStatus().equals(other.getPrintStatus())) + && (this.getPrintNum() == null ? other.getPrintNum() == null : this.getPrintNum().equals(other.getPrintNum())) && (this.getExt1() == null ? other.getExt1() == null : this.getExt1().equals(other.getExt1())) && (this.getExt2() == null ? other.getExt2() == null : this.getExt2().equals(other.getExt2())) && (this.getExt3() == null ? other.getExt3() == null : this.getExt3().equals(other.getExt3())); @@ -593,6 +621,8 @@ public class HighOrder implements Serializable { result = prime * result + ((getProfitSharingStatus() == null) ? 0 : getProfitSharingStatus().hashCode()); result = prime * result + ((getProfitSharingRatio() == null) ? 0 : getProfitSharingRatio().hashCode()); result = prime * result + ((getAccountMerchantNum() == null) ? 0 : getAccountMerchantNum().hashCode()); + result = prime * result + ((getPrintStatus() == null) ? 0 : getPrintStatus().hashCode()); + result = prime * result + ((getPrintNum() == null) ? 0 : getPrintNum().hashCode()); result = prime * result + ((getExt1() == null) ? 0 : getExt1().hashCode()); result = prime * result + ((getExt2() == null) ? 0 : getExt2().hashCode()); result = prime * result + ((getExt3() == null) ? 0 : getExt3().hashCode()); @@ -638,6 +668,8 @@ public class HighOrder implements Serializable { sb.append(", profitSharingStatus=").append(profitSharingStatus); sb.append(", profitSharingRatio=").append(profitSharingRatio); sb.append(", accountMerchantNum=").append(accountMerchantNum); + sb.append(", printStatus=").append(printStatus); + sb.append(", printNum=").append(printNum); sb.append(", ext1=").append(ext1); sb.append(", ext2=").append(ext2); sb.append(", ext3=").append(ext3); diff --git a/hai-service/src/main/java/com/hai/entity/HighOrderExample.java b/hai-service/src/main/java/com/hai/entity/HighOrderExample.java index a7de7e76..57377ec1 100644 --- a/hai-service/src/main/java/com/hai/entity/HighOrderExample.java +++ b/hai-service/src/main/java/com/hai/entity/HighOrderExample.java @@ -2216,6 +2216,126 @@ public class HighOrderExample { return (Criteria) this; } + public Criteria andPrintStatusIsNull() { + addCriterion("print_status is null"); + return (Criteria) this; + } + + public Criteria andPrintStatusIsNotNull() { + addCriterion("print_status is not null"); + return (Criteria) this; + } + + public Criteria andPrintStatusEqualTo(Boolean value) { + addCriterion("print_status =", value, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintStatusNotEqualTo(Boolean value) { + addCriterion("print_status <>", value, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintStatusGreaterThan(Boolean value) { + addCriterion("print_status >", value, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintStatusGreaterThanOrEqualTo(Boolean value) { + addCriterion("print_status >=", value, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintStatusLessThan(Boolean value) { + addCriterion("print_status <", value, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintStatusLessThanOrEqualTo(Boolean value) { + addCriterion("print_status <=", value, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintStatusIn(List values) { + addCriterion("print_status in", values, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintStatusNotIn(List values) { + addCriterion("print_status not in", values, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintStatusBetween(Boolean value1, Boolean value2) { + addCriterion("print_status between", value1, value2, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintStatusNotBetween(Boolean value1, Boolean value2) { + addCriterion("print_status not between", value1, value2, "printStatus"); + return (Criteria) this; + } + + public Criteria andPrintNumIsNull() { + addCriterion("print_num is null"); + return (Criteria) this; + } + + public Criteria andPrintNumIsNotNull() { + addCriterion("print_num is not null"); + return (Criteria) this; + } + + public Criteria andPrintNumEqualTo(Integer value) { + addCriterion("print_num =", value, "printNum"); + return (Criteria) this; + } + + public Criteria andPrintNumNotEqualTo(Integer value) { + addCriterion("print_num <>", value, "printNum"); + return (Criteria) this; + } + + public Criteria andPrintNumGreaterThan(Integer value) { + addCriterion("print_num >", value, "printNum"); + return (Criteria) this; + } + + public Criteria andPrintNumGreaterThanOrEqualTo(Integer value) { + addCriterion("print_num >=", value, "printNum"); + return (Criteria) this; + } + + public Criteria andPrintNumLessThan(Integer value) { + addCriterion("print_num <", value, "printNum"); + return (Criteria) this; + } + + public Criteria andPrintNumLessThanOrEqualTo(Integer value) { + addCriterion("print_num <=", value, "printNum"); + return (Criteria) this; + } + + public Criteria andPrintNumIn(List values) { + addCriterion("print_num in", values, "printNum"); + return (Criteria) this; + } + + public Criteria andPrintNumNotIn(List values) { + addCriterion("print_num not in", values, "printNum"); + return (Criteria) this; + } + + public Criteria andPrintNumBetween(Integer value1, Integer value2) { + addCriterion("print_num between", value1, value2, "printNum"); + return (Criteria) this; + } + + public Criteria andPrintNumNotBetween(Integer value1, Integer value2) { + addCriterion("print_num not between", value1, value2, "printNum"); + return (Criteria) this; + } + public Criteria andExt1IsNull() { addCriterion("ext_1 is null"); return (Criteria) this; diff --git a/hai-service/src/main/java/com/hai/model/GasOrderModel.java b/hai-service/src/main/java/com/hai/model/GasOrderModel.java index 7f6a5247..eff9bc3d 100644 --- a/hai-service/src/main/java/com/hai/model/GasOrderModel.java +++ b/hai-service/src/main/java/com/hai/model/GasOrderModel.java @@ -34,6 +34,24 @@ public class GasOrderModel { private Date refundTime; private BigDecimal refundPrice; private String refundContent; + private Boolean printStatus; + private Integer printNum; + + public Boolean getPrintStatus() { + return printStatus; + } + + public void setPrintStatus(Boolean printStatus) { + this.printStatus = printStatus; + } + + public Integer getPrintNum() { + return printNum; + } + + public void setPrintNum(Integer printNum) { + this.printNum = printNum; + } public BigDecimal getRefundPrice() { return refundPrice; diff --git a/hai-service/src/main/java/com/hai/service/HighMerchantStoreService.java b/hai-service/src/main/java/com/hai/service/HighMerchantStoreService.java index 64504c1e..4f1b781f 100644 --- a/hai-service/src/main/java/com/hai/service/HighMerchantStoreService.java +++ b/hai-service/src/main/java/com/hai/service/HighMerchantStoreService.java @@ -70,6 +70,13 @@ public interface HighMerchantStoreService { */ HighMerchantStore getDetailById(Long id); + /** + * 查询门店列表 + * @param merId + * @return + */ + List getStoreListByMer(Long merId); + /** * @Author 胡锐 * @Description 查询门店列表 diff --git a/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceOfficialServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceOfficialServiceImpl.java index ab8306a0..6472416e 100644 --- a/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceOfficialServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceOfficialServiceImpl.java @@ -142,6 +142,8 @@ public class HighGasOilPriceOfficialServiceImpl implements HighGasOilPriceOffici List list = highGasOilPriceService.getPriceListByRegionAndOilNo(priceOfficial.getRegionId(), priceOfficial.getOilNo()); for (HighGasOilPrice gasOilPrice : list) { gasOilPrice.setPriceOfficial(priceOfficial.getPriceOfficial()); + gasOilPrice.setPriceGun(priceOfficial.getPriceOfficial()); + gasOilPrice.setPriceVip(priceOfficial.getPriceOfficial().subtract(gasOilPrice.getPreferentialMargin())); highGasOilPriceService.editGasOilPrice(gasOilPrice); } } diff --git a/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceTaskServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceTaskServiceImpl.java index 69e845bf..c249563b 100644 --- a/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceTaskServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/HighGasOilPriceTaskServiceImpl.java @@ -98,9 +98,7 @@ public class HighGasOilPriceTaskServiceImpl implements HighGasOilPriceTaskServic } gasOilPriceOfficialService.editPrice(gasOilPriceTask.getRegionId(), gasOilPriceTask.getOilNo(), gasOilPriceTask.getPrice()); - new Thread(() -> { - gasOilPriceOfficialService.refreshGasPriceOfficial(gasOilPriceTask.getRegionId(), gasOilPriceTask.getOilNo()); - }).start(); + gasOilPriceOfficialService.refreshGasPriceOfficial(gasOilPriceTask.getRegionId(), gasOilPriceTask.getOilNo()); } // 油站价 diff --git a/hai-service/src/main/java/com/hai/service/impl/HighMerchantStoreServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/HighMerchantStoreServiceImpl.java index a3f15204..6f2f9498 100644 --- a/hai-service/src/main/java/com/hai/service/impl/HighMerchantStoreServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/HighMerchantStoreServiceImpl.java @@ -170,6 +170,13 @@ public class HighMerchantStoreServiceImpl implements HighMerchantStoreService { return highMerchantStoreMapper.selectByPrimaryKey(id); } + @Override + public List getStoreListByMer(Long merId) { + HighMerchantStoreExample example = new HighMerchantStoreExample(); + example.createCriteria().andMerchantIdEqualTo(merId); + return highMerchantStoreMapper.selectByExample(example); + } + @Override public List getMerchantStoreList(Map map) { HighMerchantStoreExample example = new HighMerchantStoreExample(); diff --git a/hai-service/src/main/java/com/hai/service/impl/HighOrderServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/HighOrderServiceImpl.java index a484799e..6e975f78 100644 --- a/hai-service/src/main/java/com/hai/service/impl/HighOrderServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/HighOrderServiceImpl.java @@ -378,36 +378,40 @@ public class HighOrderServiceImpl implements HighOrderService { // 扣预存款 this.redisTemplate.boundListOps(MsgTopic.MerStoreAccount.getName()).leftPush(pushParam); } - new Thread(() -> { - try { - SpPrinterConfig sp = new SpPrinterConfig(); - sp.print(store.getDeviceSn(), - SpPrinterTemplate.oilCashierStubTemp( - highChildOrder.getGoodsName(), - highOrder.getOrderNo(), - DateUtil.date2String(highOrder.getPayTime(), "yyyy-MM-dd HH:mm:ss"), - "嗨森逛", - highChildOrder.getGasGunNo(), - highChildOrder.getGasOilNo(), - highChildOrder.getGasOilLiters().toString(), - highOrder.getTotalPrice().toString() - ), 1); - - sp.print(store.getDeviceSn(), - SpPrinterTemplate.oilClientStubTemp( - highChildOrder.getGoodsName(), - highOrder.getOrderNo(), - DateUtil.date2String(highOrder.getPayTime(), "yyyy-MM-dd HH:mm:ss"), - "嗨森逛", - highChildOrder.getGasGunNo(), - highChildOrder.getGasOilNo(), - highChildOrder.getGasOilLiters().toString(), - highOrder.getTotalPrice().toString() - ), 1); - } catch (Exception e) { - e.printStackTrace(); - } - }).start(); + if (StringUtils.isNotBlank(store.getDeviceSn())) { + new Thread(() -> { + try { + SpPrinterConfig sp = new SpPrinterConfig(); + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilCashierStubTemp( + highChildOrder.getGoodsName(), + highOrder.getOrderNo(), + DateUtil.date2String(highOrder.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + highOrder.getTotalPrice().toString() + ), 1); + + Thread.sleep(6000); + + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilClientStubTemp( + highChildOrder.getGoodsName(), + highOrder.getOrderNo(), + DateUtil.date2String(highOrder.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + highOrder.getTotalPrice().toString() + ), 1); + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } } else if (store.getSourceType().equals(2)) { // 推送团油订单 Map paramMap = new HashMap<>(); @@ -673,36 +677,39 @@ public class HighOrderServiceImpl implements HighOrderService { // 扣预存款 this.redisTemplate.boundListOps(MsgTopic.MerStoreAccount.getName()).leftPush(pushParam); } - new Thread(() -> { - try { - SpPrinterConfig sp = new SpPrinterConfig(); - sp.print(store.getDeviceSn(), - SpPrinterTemplate.oilCashierStubTemp( - highChildOrder.getGoodsName(), - order.getOrderNo(), - DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), - "嗨森逛", - highChildOrder.getGasGunNo(), - highChildOrder.getGasOilNo(), - highChildOrder.getGasOilLiters().toString(), - order.getTotalPrice().toString() - ), 1); - - sp.print(store.getDeviceSn(), - SpPrinterTemplate.oilClientStubTemp( - highChildOrder.getGoodsName(), - order.getOrderNo(), - DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), - "嗨森逛", - highChildOrder.getGasGunNo(), - highChildOrder.getGasOilNo(), - highChildOrder.getGasOilLiters().toString(), - order.getTotalPrice().toString() - ), 1); - } catch (Exception e) { - e.printStackTrace(); - } - }).start(); + if (StringUtils.isNotBlank(store.getDeviceSn())) { + new Thread(() -> { + try { + SpPrinterConfig sp = new SpPrinterConfig(); + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilCashierStubTemp( + highChildOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + Thread.sleep(6000); + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilClientStubTemp( + highChildOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } + } else if (store.getSourceType().equals(2)) { // 推送团油订单 Map paramMap = new HashMap<>(); @@ -1005,36 +1012,39 @@ public class HighOrderServiceImpl implements HighOrderService { // 扣预存款 this.redisTemplate.boundListOps(MsgTopic.MerStoreAccount.getName()).leftPush(pushParam); } - new Thread(() -> { - try { - SpPrinterConfig sp = new SpPrinterConfig(); - sp.print(store.getDeviceSn(), - SpPrinterTemplate.oilCashierStubTemp( - highChildOrder.getGoodsName(), - order.getOrderNo(), - DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), - "嗨森逛", - highChildOrder.getGasGunNo(), - highChildOrder.getGasOilNo(), - highChildOrder.getGasOilLiters().toString(), - order.getTotalPrice().toString() - ), 1); - - sp.print(store.getDeviceSn(), - SpPrinterTemplate.oilClientStubTemp( - highChildOrder.getGoodsName(), - order.getOrderNo(), - DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), - "嗨森逛", - highChildOrder.getGasGunNo(), - highChildOrder.getGasOilNo(), - highChildOrder.getGasOilLiters().toString(), - order.getTotalPrice().toString() - ), 1); - } catch (Exception e) { - e.printStackTrace(); - } - }).start(); + if (StringUtils.isNotBlank(store.getDeviceSn())) { + new Thread(() -> { + try { + SpPrinterConfig sp = new SpPrinterConfig(); + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilCashierStubTemp( + highChildOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + Thread.sleep(6000); + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilClientStubTemp( + highChildOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } + } else if (store.getSourceType().equals(2)) { // 推送团油订单 Map paramMap = new HashMap<>(); diff --git a/hai-service/src/main/java/com/hai/service/pay/impl/GoodsOrderServiceImpl.java b/hai-service/src/main/java/com/hai/service/pay/impl/GoodsOrderServiceImpl.java index 446e9862..632dc539 100644 --- a/hai-service/src/main/java/com/hai/service/pay/impl/GoodsOrderServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/pay/impl/GoodsOrderServiceImpl.java @@ -25,6 +25,7 @@ import com.hai.service.*; import com.hai.service.pay.NotifyService; import com.hai.service.pay.PayService; import org.apache.commons.collections4.MapUtils; +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; @@ -298,36 +299,41 @@ public class GoodsOrderServiceImpl implements PayService { // 扣预存款 this.redisTemplate.boundListOps(MsgTopic.MerStoreAccount.getName()).leftPush(pushParam); } - new Thread(() -> { - try { - SpPrinterConfig sp = new SpPrinterConfig(); - sp.print(store.getDeviceSn(), - SpPrinterTemplate.oilCashierStubTemp( - highChildOrder.getGoodsName(), - order.getOrderNo(), - DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), - "嗨森逛", - highChildOrder.getGasGunNo(), - highChildOrder.getGasOilNo(), - highChildOrder.getGasOilLiters().toString(), - order.getTotalPrice().toString() - ), 1); - - sp.print(store.getDeviceSn(), - SpPrinterTemplate.oilClientStubTemp( - highChildOrder.getGoodsName(), - order.getOrderNo(), - DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), - "嗨森逛", - highChildOrder.getGasGunNo(), - highChildOrder.getGasOilNo(), - highChildOrder.getGasOilLiters().toString(), - order.getTotalPrice().toString() - ), 1); - } catch (Exception e) { - e.printStackTrace(); - } - }).start(); + if (StringUtils.isNotBlank(store.getDeviceSn())) { + new Thread(() -> { + try { + SpPrinterConfig sp = new SpPrinterConfig(); + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilCashierStubTemp( + highChildOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + + Thread.sleep(6000); + + sp.print(store.getDeviceSn(), + SpPrinterTemplate.oilClientStubTemp( + highChildOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + highChildOrder.getGasGunNo(), + highChildOrder.getGasOilNo(), + highChildOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } + } else if (store.getSourceType().equals(2)) { // 推送团油订单 Map paramMap = new HashMap<>(); diff --git a/v1/target/classes/com/V1Application.class b/v1/target/classes/com/V1Application.class deleted file mode 100644 index ceb0ff8c..00000000 Binary files a/v1/target/classes/com/V1Application.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/AuthConfig$1.class b/v1/target/classes/com/v1/config/AuthConfig$1.class deleted file mode 100644 index e3751ab7..00000000 Binary files a/v1/target/classes/com/v1/config/AuthConfig$1.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/AuthConfig.class b/v1/target/classes/com/v1/config/AuthConfig.class deleted file mode 100644 index 9ca4e4ac..00000000 Binary files a/v1/target/classes/com/v1/config/AuthConfig.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/ConfigListener.class b/v1/target/classes/com/v1/config/ConfigListener.class deleted file mode 100644 index 39d84eff..00000000 Binary files a/v1/target/classes/com/v1/config/ConfigListener.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/CorsConfig.class b/v1/target/classes/com/v1/config/CorsConfig.class deleted file mode 100644 index b5ba99c5..00000000 Binary files a/v1/target/classes/com/v1/config/CorsConfig.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/MultipartConfig.class b/v1/target/classes/com/v1/config/MultipartConfig.class deleted file mode 100644 index 28f5220c..00000000 Binary files a/v1/target/classes/com/v1/config/MultipartConfig.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/RedisConfig.class b/v1/target/classes/com/v1/config/RedisConfig.class deleted file mode 100644 index 50c73185..00000000 Binary files a/v1/target/classes/com/v1/config/RedisConfig.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/SignatureConfig.class b/v1/target/classes/com/v1/config/SignatureConfig.class deleted file mode 100644 index ef6024ee..00000000 Binary files a/v1/target/classes/com/v1/config/SignatureConfig.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/SwaggerConfig.class b/v1/target/classes/com/v1/config/SwaggerConfig.class deleted file mode 100644 index 47a2b53b..00000000 Binary files a/v1/target/classes/com/v1/config/SwaggerConfig.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/SysConfig.class b/v1/target/classes/com/v1/config/SysConfig.class deleted file mode 100644 index 649049a9..00000000 Binary files a/v1/target/classes/com/v1/config/SysConfig.class and /dev/null differ diff --git a/v1/target/classes/com/v1/config/SysConst.class b/v1/target/classes/com/v1/config/SysConst.class deleted file mode 100644 index 68148cb1..00000000 Binary files a/v1/target/classes/com/v1/config/SysConst.class and /dev/null differ diff --git a/v1/target/classes/config.properties b/v1/target/classes/config.properties deleted file mode 100644 index e69de29b..00000000 diff --git a/v1/target/hai-v1-1.0-SNAPSHOT.jar b/v1/target/hai-v1-1.0-SNAPSHOT.jar index 1a1b63d3..18f1d02d 100644 Binary files a/v1/target/hai-v1-1.0-SNAPSHOT.jar and b/v1/target/hai-v1-1.0-SNAPSHOT.jar differ diff --git a/v1/target/hai-v1-1.0-SNAPSHOT.jar.original b/v1/target/hai-v1-1.0-SNAPSHOT.jar.original index fd1d47d2..cde7bfd0 100644 Binary files a/v1/target/hai-v1-1.0-SNAPSHOT.jar.original and b/v1/target/hai-v1-1.0-SNAPSHOT.jar.original differ diff --git a/v1/target/maven-archiver/pom.properties b/v1/target/maven-archiver/pom.properties deleted file mode 100644 index 5dc4b086..00000000 --- a/v1/target/maven-archiver/pom.properties +++ /dev/null @@ -1,4 +0,0 @@ -#Created by Apache Maven 3.8.2 -version=1.0-SNAPSHOT -groupId=com.hgj -artifactId=hai-v1 diff --git a/v1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/v1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted file mode 100644 index 896eace6..00000000 --- a/v1/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ /dev/null @@ -1,11 +0,0 @@ -com/V1Application.class -com/v1/config/SignatureConfig.class -com/v1/config/AuthConfig$1.class -com/v1/config/SysConfig.class -com/v1/config/ConfigListener.class -com/v1/config/SwaggerConfig.class -com/v1/config/CorsConfig.class -com/v1/config/AuthConfig.class -com/v1/config/RedisConfig.class -com/v1/config/SysConst.class -com/v1/config/MultipartConfig.class diff --git a/v1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/v1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index 7b1264f5..00000000 --- a/v1/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1,10 +0,0 @@ -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/SysConst.java -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/RedisConfig.java -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/AuthConfig.java -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/SwaggerConfig.java -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/ConfigListener.java -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/V1Application.java -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/MultipartConfig.java -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/SignatureConfig.java -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/CorsConfig.java -/Volumes/work/code/high-work/hai-server/v1/src/main/java/com/v1/config/SysConfig.java