From ca812ca7f78993c5e6b4e605c7faaf8d0e98cb55 Mon Sep 17 00:00:00 2001 From: hurui <177768073@qq.com> Date: Thu, 16 Jun 2022 14:16:18 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cweb/controller/HighTestController.java | 2 +- .../controller/pay/UnionPayController.java | 38 +- .../com/hai/config/MqttProviderCallBack.java | 2 + .../com/hai/config/MqttProviderConfig.java | 9 +- .../com/hai/config/ZkcPrinterTemplate.java | 357 ++++++++++++++++++ .../com/hai/service/HighOrderService.java | 5 + .../service/impl/HighOrderServiceImpl.java | 204 +++++----- .../pay/impl/GoodsOrderServiceImpl.java | 37 +- 8 files changed, 484 insertions(+), 170 deletions(-) create mode 100644 hai-service/src/main/java/com/hai/config/ZkcPrinterTemplate.java 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 2c83e178..386869e1 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 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 { String order = "HF" + System.currentTimeMillis(); 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(("流水号:" + order).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(("流水号:" + order).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 +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 { HighOrder order = highOrderService.getOrderByOrderNo("HF2022061411034235002"); for (HighChildOrder childOrder : order.getHighChildOrderList()) { String printText = ZkcPrinterTemplate.oilCashierStubTemp( childOrder.getGoodsName(), order.getOrderNo(), DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss"), "嗨森逛", childOrder.getGasGunNo(), childOrder.getGasOilNo(), childOrder.getGasOilLiters().toString(), order.getTotalPrice().toString() ); System.out.println(printText); mqttProviderConfig.publish(2, false, topic, ZkcPrinterTemplate.hexStringToString(printText)); } // Thread.sleep(6000); 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/UnionPayController.java b/hai-cweb/src/main/java/com/cweb/controller/pay/UnionPayController.java index 3782c9b0..33c462c6 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 @@ -304,40 +304,10 @@ public class UnionPayController { // 扣预存款 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(); - } + + new Thread(() -> { + highOrderService.printGasOrder(store.getId(), order.getOrderNo()); + }).start(); } else if (store.getSourceType().equals(2)) { // 推送团油订单 diff --git a/hai-service/src/main/java/com/hai/config/MqttProviderCallBack.java b/hai-service/src/main/java/com/hai/config/MqttProviderCallBack.java index 4b89ac42..e960ee0f 100644 --- a/hai-service/src/main/java/com/hai/config/MqttProviderCallBack.java +++ b/hai-service/src/main/java/com/hai/config/MqttProviderCallBack.java @@ -2,6 +2,7 @@ package com.hai.config; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; +import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.springframework.context.annotation.Configuration; @@ -26,6 +27,7 @@ public class MqttProviderCallBack implements MqttCallback { @Override public void messageArrived(String s, MqttMessage mqttMessage) throws Exception { 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 index 73728d6d..c3e14a98 100644 --- a/hai-service/src/main/java/com/hai/config/MqttProviderConfig.java +++ b/hai-service/src/main/java/com/hai/config/MqttProviderConfig.java @@ -14,13 +14,13 @@ import org.springframework.context.annotation.Configuration; @Configuration @Slf4j public class MqttProviderConfig { - // @Value("${spring.mqtt.username}") + @Value("${spring.mqtt.username}") private String username; - // @Value("${spring.mqtt.password}") + @Value("${spring.mqtt.password}") private String password; - // @Value("${spring.mqtt.url}") + @Value("${spring.mqtt.url}") private String hostUrl; /* @Value("${spring.mqtt.client.id}") @@ -81,6 +81,9 @@ public class MqttProviderConfig { if (client == null) { init(); } + if (!client.isConnected()) { + init(); + } try { MqttMessage mqttMessage = new MqttMessage(); mqttMessage.setQos(qos); diff --git a/hai-service/src/main/java/com/hai/config/ZkcPrinterTemplate.java b/hai-service/src/main/java/com/hai/config/ZkcPrinterTemplate.java new file mode 100644 index 00000000..8c625c1c --- /dev/null +++ b/hai-service/src/main/java/com/hai/config/ZkcPrinterTemplate.java @@ -0,0 +1,357 @@ +package com.hai.config; + +import java.io.ByteArrayOutputStream; + +/** + * 商鹏打印机模板 + * @author hurui + */ +public class ZkcPrinterTemplate { + + /** + * 加油站收银员存根模板 + * @param gasName 油站名称 + * @param orderNo 订单号 + * @param payTime 支付时间 + * @param source 来源 + * @param gunNo 抢号 + * @param oilNo 油号 + * @param oilLiters 升数 + * @param orderPrice 加油金额 + * @return + */ + public static String oilCashierStubTemp(String gasName, + String orderNo, + String payTime, + String source, + String gunNo, + String oilNo, + String oilLiters, + String orderPrice) throws Exception { + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + // 居中 + stream.write(0x1B); + stream.write(0x61); + stream.write(0x01); + + stream.write(gasName.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(("流水号:" + orderNo).getBytes("UTF-8")); + stream.write(0x0A); + stream.write("--------------------------------".getBytes("UTF-8")); + stream.write(0x0A); + + stream.write(("时间:" + payTime).getBytes("UTF-8")); + stream.write(0x0A); + + stream.write("来源:嗨森逛".getBytes("UTF-8")); + stream.write(0x0A); + + stream.write(("油枪:" + gunNo).getBytes("UTF-8")); + stream.write(0x0A); + + stream.write(("油品:" + oilNo).getBytes("UTF-8")); + stream.write(0x0A); + + stream.write(("升数:" + oilLiters + "升").getBytes("UTF-8")); + stream.write(0x0A); + + stream.write("实际加油升数以加油机为准!".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(("¥" + orderPrice).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); + return bytes2Hex(getPrinterBytes(stream.toByteArray(), 1, "UTF-8")); + } + + /** + * 加油站客户存根模板 + * @param gasName 油站名称 + * @param orderNo 订单号 + * @param payTime 支付时间 + * @param source 来源 + * @param gunNo 抢号 + * @param oilNo 油号 + * @param oilLiters 升数 + * @param orderPrice 加油金额 + * @return + */ + public static String oilClientStubTemp(String gasName, + String orderNo, + String payTime, + String source, + String gunNo, + String oilNo, + String oilLiters, + String orderPrice) throws Exception { + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + // 居中 + stream.write(0x1B); + stream.write(0x61); + stream.write(0x01); + + stream.write(gasName.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(("流水号:" + orderNo).getBytes("UTF-8")); + stream.write(0x0A); + stream.write("--------------------------------".getBytes("UTF-8")); + stream.write(0x0A); + + stream.write(("时间:" + payTime).getBytes("UTF-8")); + stream.write(0x0A); + + stream.write("来源:嗨森逛".getBytes("UTF-8")); + stream.write(0x0A); + + stream.write(("油枪:" + gunNo).getBytes("UTF-8")); + stream.write(0x0A); + + stream.write(("油品:" + oilNo).getBytes("UTF-8")); + stream.write(0x0A); + + stream.write(("升数:" + oilLiters + "升").getBytes("UTF-8")); + stream.write(0x0A); + + stream.write("实际加油升数以加油机为准!".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(("¥" + orderPrice).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); + return bytes2Hex(getPrinterBytes(stream.toByteArray(), 1, "UTF-8")); + } + + 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 static 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 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/service/HighOrderService.java b/hai-service/src/main/java/com/hai/service/HighOrderService.java index b50f2566..224f3f74 100644 --- a/hai-service/src/main/java/com/hai/service/HighOrderService.java +++ b/hai-service/src/main/java/com/hai/service/HighOrderService.java @@ -428,4 +428,9 @@ public interface HighOrderService { */ GasOrderModel getGasOrderDetail(String orderNo); + /** + * 打印加油订单 + * @param gasId + */ + void printGasOrder(Long gasId, String orderNo); } 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 6e975f78..85d32daf 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 @@ -17,6 +17,7 @@ import com.hai.msg.entity.MsgTopic; import com.hai.service.*; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; +import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; @@ -39,6 +40,9 @@ public class HighOrderServiceImpl implements HighOrderService { @Resource private HighOrderMapper highOrderMapper; + @Resource + private HighDeviceService deviceService; + @Resource private HighOrderMapperExt highOrderMapperExt; @@ -114,6 +118,9 @@ public class HighOrderServiceImpl implements HighOrderService { @Resource private RedisTemplate redisTemplate; + @Resource + private MqttProviderConfig mqttProviderConfig; + @Resource private WebSocket webSocket; @@ -378,40 +385,9 @@ public class HighOrderServiceImpl implements HighOrderService { // 扣预存款 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(), - 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(); - } + new Thread(() -> { + printGasOrder(store.getId(), highOrder.getOrderNo()); + }).start(); } else if (store.getSourceType().equals(2)) { // 推送团油订单 Map paramMap = new HashMap<>(); @@ -677,38 +653,9 @@ public class HighOrderServiceImpl implements HighOrderService { // 扣预存款 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(); - } + new Thread(() -> { + printGasOrder(store.getId(), order.getOrderNo()); + }).start(); } else if (store.getSourceType().equals(2)) { // 推送团油订单 @@ -1012,38 +959,10 @@ public class HighOrderServiceImpl implements HighOrderService { // 扣预存款 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(); - } + + new Thread(() -> { + printGasOrder(store.getId(), order.getOrderNo()); + }).start(); } else if (store.getSourceType().equals(2)) { // 推送团油订单 @@ -1742,6 +1661,95 @@ public class HighOrderServiceImpl implements HighOrderService { return null; } + @Override + public void printGasOrder(Long gasId, String orderNo) { + // 查询订单 + HighOrder order = getOrderByOrderNo(orderNo); + if (order == null) { + return; + } + + for (HighChildOrder childOrder : order.getHighChildOrderList()) { + if (childOrder.getGoodsType().equals(3)) { + + // 查询油站云打印设备 + List deviceList = deviceService.getDeviceListByStoreId(gasId); + for (HighDevice device : deviceList) { + + if (device.getType().equals(DeviceTypeEnum.type1.getType())) { + new Thread(() -> { + try { + SpPrinterConfig sp = new SpPrinterConfig(); + sp.print(device.getDeviceSn(), + SpPrinterTemplate.oilCashierStubTemp( + childOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + childOrder.getGasGunNo(), + childOrder.getGasOilNo(), + childOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + + Thread.sleep(6000); + + sp.print(device.getDeviceSn(), + SpPrinterTemplate.oilClientStubTemp( + childOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + childOrder.getGasGunNo(), + childOrder.getGasOilNo(), + childOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ), 1); + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } + + if (device.getType().equals(DeviceTypeEnum.type2.getType())) { + new Thread(() -> { + try { + String oilCashierStubTempText = ZkcPrinterTemplate.oilCashierStubTemp( + childOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + childOrder.getGasGunNo(), + childOrder.getGasOilNo(), + childOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ); + mqttProviderConfig.publish(2, false, device.getDeviceImei(), ZkcPrinterTemplate.hexStringToString(oilCashierStubTempText)); + + + String oilClientStubTempText = ZkcPrinterTemplate.oilClientStubTemp( + childOrder.getGoodsName(), + order.getOrderNo(), + DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss"), + "嗨森逛", + childOrder.getGasGunNo(), + childOrder.getGasOilNo(), + childOrder.getGasOilLiters().toString(), + order.getTotalPrice().toString() + ); + mqttProviderConfig.publish(2, false, device.getDeviceImei(), ZkcPrinterTemplate.hexStringToString(oilClientStubTempText)); + + } catch (Exception e) { + e.getMessage(); + } + }).start(); + } + } + } + } + + } + public String priceName(Integer num) { switch (num) { 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 632dc539..2c795496 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 @@ -299,40 +299,9 @@ public class GoodsOrderServiceImpl implements PayService { // 扣预存款 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(); - } + new Thread(() -> { + highOrderService.printGasOrder(store.getId(), order.getOrderNo()); + }).start(); } else if (store.getSourceType().equals(2)) { // 推送团油订单 From 2203fe2287fc8e0e34701480b4b40457eed3727f Mon Sep 17 00:00:00 2001 From: hurui <177768073@qq.com> Date: Mon, 20 Jun 2022 15:46:41 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bweb/controller/HighAgentController.java | 108 +++++++++- .../controller/HighCouponAgentController.java | 85 +++++++- .../com/bweb/controller/LoginController.java | 5 +- .../java/com/hai/dao/HighAgentMapper.java | 17 +- .../com/hai/dao/HighAgentSqlProvider.java | 28 +++ .../hai/dao/HighCouponAgentCodeMapper.java | 34 +++- .../dao/HighCouponAgentCodeSqlProvider.java | 42 ++++ .../com/hai/dao/HighCouponAgentRelMapper.java | 38 ++-- .../dao/HighCouponAgentRelSqlProvider.java | 14 ++ .../main/java/com/hai/entity/HighAgent.java | 35 ++++ .../java/com/hai/entity/HighAgentExample.java | 130 ++++++++++++ .../com/hai/entity/HighCouponAgentCode.java | 50 ++++- .../entity/HighCouponAgentCodeExample.java | 190 ++++++++++++++++++ .../com/hai/entity/HighCouponAgentRel.java | 16 ++ .../hai/entity/HighCouponAgentRelExample.java | 60 ++++++ .../com/hai/service/HighAgentService.java | 13 +- .../hai/service/HighCouponAgentService.java | 14 ++ .../service/impl/HighAgentServiceImpl.java | 51 ++++- .../impl/HighCouponAgentServiceImpl.java | 136 +++++++++---- 19 files changed, 976 insertions(+), 90 deletions(-) diff --git a/hai-bweb/src/main/java/com/bweb/controller/HighAgentController.java b/hai-bweb/src/main/java/com/bweb/controller/HighAgentController.java index 1d6d1747..6c77153c 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/HighAgentController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/HighAgentController.java @@ -1,5 +1,6 @@ package com.bweb.controller; +import com.alibaba.fastjson.JSONObject; import com.bweb.config.SysConst; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -9,6 +10,7 @@ import com.hai.common.exception.ErrorHelp; import com.hai.common.exception.SysCode; import com.hai.common.security.SessionObject; import com.hai.common.security.UserCenter; +import com.hai.common.utils.MemberValidateUtil; import com.hai.common.utils.ResponseMsgUtil; import com.hai.entity.HighAgent; import com.hai.entity.SecUser; @@ -55,6 +57,109 @@ public class HighAgentController { @Resource private SecUserService secUserService; + @RequestMapping(value = "/insertChildAgent", method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "新增子级代理商") + public ResponseData insertChildAgent(@RequestBody JSONObject body) { + try { + //发布人员 + UserInfoModel userInfoModel = userCenter.getSessionModel(UserInfoModel.class); + if (userInfoModel == null) { + log.error("HighAgentController -> insertAgent() error!",""); + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMPETENCE_INSUFFICIENT, ""); + } + + if (body == null || + StringUtils.isBlank(body.getString("agentName")) || + StringUtils.isBlank(body.getString("agentPhone")) || + StringUtils.isBlank(body.getString("agentAddress")) + ) { + log.error("HighAgentController -> insertAgent() error!",""); + throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); + } + + // 校验账户手机号 + if (!MemberValidateUtil.validatePhone(body.getString("agentPhone"))) { + log.error("BsStudentController --> updateMerchant() error!", "请输入正确的手机号"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.PHONE_NUM_IS_ERROR, ""); + } + + // 校验账号用户名是否存在 + if (secUserService.findByLoginName(body.getString("agentPhone")) != null) { + log.error("HighAgentController --> insertAgent() error!", "手机号已存在,请更换!"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.USER_LOGIN_NAME_IS_EXIST_ERROR, ""); + } + + HighAgent agent = new HighAgent(); + agent.setParentId(userInfoModel.getHighAgent().getId()); + agent.setParentName(userInfoModel.getHighAgent().getAgentName()); + agent.setType(userInfoModel.getHighAgent().getType()); + agent.setAgentName(body.getString("agentName")); + agent.setAgentAddress(body.getString("agentAddress")); + agent.setAgentPhone(body.getString("agentPhone")); + agent.setAgentKey(String.valueOf(System.currentTimeMillis())); + agent.setAgentUser(body.getString("agentName")); + + agent.setStatus(1); // 状态:0:不可用,1:可用 + agent.setCreateTime(new Date()); + agent.setOperatorId(userInfoModel.getSecUser().getId()); + agent.setOperatorName(userInfoModel.getSecUser().getUserName()); + highAgentService.insertChildAgent(agent); + return ResponseMsgUtil.success("新增成功"); + + } catch (Exception e) { + log.error("HighAgentController --> insertChildAgent() error!", e); + return ResponseMsgUtil.exception(e); + } + } + + @RequestMapping(value = "/changeAgentStatus", method = RequestMethod.GET) + @ResponseBody + @ApiOperation(value = "变更代理商状态") + public ResponseData changeAgentStatus(@RequestParam(value = "agentId" , required = true) Long agentId, + @RequestParam(value = "status" , required = true) Integer status) { + try { + HighAgent highAgent = highAgentService.findByAgentMsgId(agentId); + if (highAgent == null) { + log.error("HighAgentController --> changeAgentStatus() error!"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_USER_ERROR, ""); + } + highAgent.setStatus(status); + highAgentService.updateAgentDetail(highAgent); + + return ResponseMsgUtil.success("操作成功"); + + } catch (Exception e) { + log.error("HighAgentController --> changeAgentStatus() error!", e); + return ResponseMsgUtil.exception(e); + } + } + + @RequestMapping(value = "/getChildAgentList", method = RequestMethod.GET) + @ResponseBody + @ApiOperation(value = "查询子级代理商列表") + public ResponseData getChildAgentList(@RequestParam(value = "agentId" , required = true) Long agentId, + @RequestParam(value = "agentPhone" , required = false) String agentPhone, + @RequestParam(value = "agentName" , required = false) String agentName, + @RequestParam(value = "status" , required = false) Integer status, + @RequestParam(value = "pageNum" , required = true) Integer pageNum, + @RequestParam(value = "pageSize" , required = true) Integer pageSize) { + try { + Map param = new HashMap<>(); + param.put("parentAgentId", agentId); + param.put("agentPhone", agentPhone); + param.put("agentName", agentName); + param.put("status", status); + + PageHelper.startPage(pageNum, pageSize); + return ResponseMsgUtil.success(new PageInfo<>(highAgentService.getListAgentMsg(param))); + + } catch (Exception e) { + log.error("HighAgentController --> changeAgentStatus() error!", e); + return ResponseMsgUtil.exception(e); + } + } + @RequestMapping(value = "/insertAgent", method = RequestMethod.POST) @ResponseBody @ApiOperation(value = "新增代理商") @@ -206,7 +311,7 @@ public class HighAgentController { // throw ErrorHelp.genException(SysCode.System, ErrorCode.MENU_TREE_HAS_NOT_ERROR, ""); // } - Map map = new HashMap<>(); + Map map = new HashMap<>(); if (StringUtils.isNotBlank(agentName)) { map.put("agentName", agentName); @@ -235,7 +340,6 @@ public class HighAgentController { } } - @RequestMapping(value = "/findByAgentId", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "根据id查询详情") diff --git a/hai-bweb/src/main/java/com/bweb/controller/HighCouponAgentController.java b/hai-bweb/src/main/java/com/bweb/controller/HighCouponAgentController.java index a785a0b2..220551ad 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/HighCouponAgentController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/HighCouponAgentController.java @@ -105,6 +105,90 @@ public class HighCouponAgentController { } } + @RequestMapping(value = "/assignCouponChildAgent", method = RequestMethod.POST) + @ResponseBody + @ApiOperation(value = "分配卡券给子级代理商") + public ResponseData assignCouponChildAgent(@RequestBody JSONObject body, HttpServletRequest request) { + try { + UserInfoModel userInfoModel = userCenter.getSessionModel(UserInfoModel.class); + if (userInfoModel == null || userInfoModel.getHighAgent() == null) { + log.error("HighCouponAgentController -> assignCouponAgent() error!","该主角色没有权限"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.MENU_TREE_HAS_NOT_ERROR, ""); + } + + if(body == null + || body.getLong("couponAgentRelId") == null + || body.getLong("agentId") == null + || body.getInteger("stockCount") == null + ) { + log.error("HighCouponAgentController -> assignCouponAgent() error!","参数错误"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); + } + + // 查询父级代理商的卡券关系 + HighCouponAgentRel rel = highCouponAgentService.getRelById(body.getLong("couponAgentRelId")); + if (rel == null) { + log.error("HighCouponAgentController -> assignCouponAgent() error!","参数错误"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.REQ_PARAMS_ERROR, ""); + } + if (rel.getAgentId().equals(body.getLong("agentId") )) { + log.error("HighCouponAgentController -> assignCouponAgent() error!","不能给自己分配"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "不能给自己分配"); + } + if (body.getInteger("stockCount").intValue() > rel.getStockCount().intValue()) { + log.error("HighCouponAgentController -> assignCouponAgent() error!","库存数量不足"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "库存数量不足"); + } + + // 查询卡券详情 + HighCoupon coupon = highCouponService.getCouponById(rel.getCouponId()); + if (coupon == null) { + log.error("HighCouponAgentController -> assignCouponAgent() error!","未找到卡券信息"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_COUPON, ""); + } + // 查询代理商 + HighAgent highAgent = highAgentService.findByAgentMsgId(body.getLong("agentId")); + if (highAgent == null) { + log.error("HighCouponAgentController -> assignCouponAgent() error!", "未找到代理商信息"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_AGENT, ""); + } + if (highAgent.getParentId() == null) { + log.error("HighCouponAgentController -> assignCouponAgent() error!", "不是子级代理商"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "不是子级代理商"); + } + + // 校验是否分配过 + HighCouponAgentRel couponAgent = highCouponAgentService.getRelByCouponAgent(rel.getCouponId(), body.getLong("agentId"), rel.getType()); + if (couponAgent != null) { + couponAgent.setStockCount(couponAgent.getStockCount() + body.getInteger("stockCount")); + couponAgent.setOperatorId(userInfoModel.getSecUser().getId()); + couponAgent.setOperatorName(userInfoModel.getSecUser().getUserName()); + highCouponAgentService.assignCouponAgent(couponAgent, body.getInteger("stockCount")); + } else { + couponAgent = new HighCouponAgentRel(); + couponAgent.setParentCouponAgentId(rel.getId()); + couponAgent.setType(rel.getType()); + couponAgent.setCouponId(rel.getCouponId()); + couponAgent.setAgentId(body.getLong("agentId")); + couponAgent.setCouponName(coupon.getCouponName()); + couponAgent.setSalesPrice(coupon.getSalesPrice()); + couponAgent.setStatus(1); // 状态 0:删除 1:正常 + couponAgent.setStockCount(body.getInteger("stockCount")); + couponAgent.setSalesCount(0); + couponAgent.setCreateTime(new Date()); + couponAgent.setOperatorId(userInfoModel.getSecUser().getId()); + couponAgent.setOperatorName(userInfoModel.getSecUser().getUserName()); + highCouponAgentService.assignCouponAgent(couponAgent, body.getInteger("stockCount")); + } + + return ResponseMsgUtil.success("分配成功"); + + } catch (Exception e) { + log.error("HighCouponAgentController --> assignCouponAgent() error!", e); + return ResponseMsgUtil.exception(e); + } + } + @RequestMapping(value = "/getAgentSalesCodeList", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "查询代理商已销售的卡券") @@ -259,7 +343,6 @@ public class HighCouponAgentController { } } - @RequestMapping(value = "/getCouponByAgent", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "根据代理商 查询卡券") diff --git a/hai-bweb/src/main/java/com/bweb/controller/LoginController.java b/hai-bweb/src/main/java/com/bweb/controller/LoginController.java index f293bacf..af6de63d 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/LoginController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/LoginController.java @@ -173,10 +173,9 @@ public class LoginController { log.error("login error!","未找到代理商"); throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_AGENT, ""); } - if(highAgent.getStatus() != 1) { - log.error("login error!","未找到代理商"); - throw ErrorHelp.genException(SysCode.System, ErrorCode.NOT_FOUND_AGENT, ""); + log.error("login error!","代理商状态异常,请联系管理员"); + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "代理商状态异常,请联系管理员"); } userInfoModel.setHighAgent(highAgent); diff --git a/hai-service/src/main/java/com/hai/dao/HighAgentMapper.java b/hai-service/src/main/java/com/hai/dao/HighAgentMapper.java index 9abf6d82..1de4e899 100644 --- a/hai-service/src/main/java/com/hai/dao/HighAgentMapper.java +++ b/hai-service/src/main/java/com/hai/dao/HighAgentMapper.java @@ -39,14 +39,16 @@ public interface HighAgentMapper extends HighAgentMapperExt { int deleteByPrimaryKey(Long id); @Insert({ - "insert into high_agent (`type`, agent_key, ", + "insert into high_agent (`type`, parent_id, ", + "parent_name, agent_key, ", "agent_name, agent_address, ", "agent_user, agent_phone, ", "create_time, `status`, ", "user_name, operator_id, ", "operator_name, ext_1, ", "ext_2, ext_3)", - "values (#{type,jdbcType=INTEGER}, #{agentKey,jdbcType=VARCHAR}, ", + "values (#{type,jdbcType=INTEGER}, #{parentId,jdbcType=BIGINT}, ", + "#{parentName,jdbcType=VARCHAR}, #{agentKey,jdbcType=VARCHAR}, ", "#{agentName,jdbcType=VARCHAR}, #{agentAddress,jdbcType=VARCHAR}, ", "#{agentUser,jdbcType=VARCHAR}, #{agentPhone,jdbcType=VARCHAR}, ", "#{createTime,jdbcType=TIMESTAMP}, #{status,jdbcType=INTEGER}, ", @@ -65,6 +67,8 @@ public interface HighAgentMapper extends HighAgentMapperExt { @Results({ @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), @Result(column="type", property="type", jdbcType=JdbcType.INTEGER), + @Result(column="parent_id", property="parentId", jdbcType=JdbcType.BIGINT), + @Result(column="parent_name", property="parentName", jdbcType=JdbcType.VARCHAR), @Result(column="agent_key", property="agentKey", jdbcType=JdbcType.VARCHAR), @Result(column="agent_name", property="agentName", jdbcType=JdbcType.VARCHAR), @Result(column="agent_address", property="agentAddress", jdbcType=JdbcType.VARCHAR), @@ -83,14 +87,17 @@ public interface HighAgentMapper extends HighAgentMapperExt { @Select({ "select", - "id, `type`, agent_key, agent_name, agent_address, agent_user, agent_phone, create_time, ", - "`status`, user_name, operator_id, operator_name, ext_1, ext_2, ext_3", + "id, `type`, parent_id, parent_name, agent_key, agent_name, agent_address, agent_user, ", + "agent_phone, create_time, `status`, user_name, operator_id, operator_name, ext_1, ", + "ext_2, ext_3", "from high_agent", "where id = #{id,jdbcType=BIGINT}" }) @Results({ @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), @Result(column="type", property="type", jdbcType=JdbcType.INTEGER), + @Result(column="parent_id", property="parentId", jdbcType=JdbcType.BIGINT), + @Result(column="parent_name", property="parentName", jdbcType=JdbcType.VARCHAR), @Result(column="agent_key", property="agentKey", jdbcType=JdbcType.VARCHAR), @Result(column="agent_name", property="agentName", jdbcType=JdbcType.VARCHAR), @Result(column="agent_address", property="agentAddress", jdbcType=JdbcType.VARCHAR), @@ -119,6 +126,8 @@ public interface HighAgentMapper extends HighAgentMapperExt { @Update({ "update high_agent", "set `type` = #{type,jdbcType=INTEGER},", + "parent_id = #{parentId,jdbcType=BIGINT},", + "parent_name = #{parentName,jdbcType=VARCHAR},", "agent_key = #{agentKey,jdbcType=VARCHAR},", "agent_name = #{agentName,jdbcType=VARCHAR},", "agent_address = #{agentAddress,jdbcType=VARCHAR},", diff --git a/hai-service/src/main/java/com/hai/dao/HighAgentSqlProvider.java b/hai-service/src/main/java/com/hai/dao/HighAgentSqlProvider.java index 276eb335..d6d88d13 100644 --- a/hai-service/src/main/java/com/hai/dao/HighAgentSqlProvider.java +++ b/hai-service/src/main/java/com/hai/dao/HighAgentSqlProvider.java @@ -32,6 +32,14 @@ public class HighAgentSqlProvider { sql.VALUES("`type`", "#{type,jdbcType=INTEGER}"); } + if (record.getParentId() != null) { + sql.VALUES("parent_id", "#{parentId,jdbcType=BIGINT}"); + } + + if (record.getParentName() != null) { + sql.VALUES("parent_name", "#{parentName,jdbcType=VARCHAR}"); + } + if (record.getAgentKey() != null) { sql.VALUES("agent_key", "#{agentKey,jdbcType=VARCHAR}"); } @@ -95,6 +103,8 @@ public class HighAgentSqlProvider { sql.SELECT("id"); } sql.SELECT("`type`"); + sql.SELECT("parent_id"); + sql.SELECT("parent_name"); sql.SELECT("agent_key"); sql.SELECT("agent_name"); sql.SELECT("agent_address"); @@ -133,6 +143,14 @@ public class HighAgentSqlProvider { sql.SET("`type` = #{record.type,jdbcType=INTEGER}"); } + if (record.getParentId() != null) { + sql.SET("parent_id = #{record.parentId,jdbcType=BIGINT}"); + } + + if (record.getParentName() != null) { + sql.SET("parent_name = #{record.parentName,jdbcType=VARCHAR}"); + } + if (record.getAgentKey() != null) { sql.SET("agent_key = #{record.agentKey,jdbcType=VARCHAR}"); } @@ -195,6 +213,8 @@ public class HighAgentSqlProvider { sql.SET("id = #{record.id,jdbcType=BIGINT}"); sql.SET("`type` = #{record.type,jdbcType=INTEGER}"); + sql.SET("parent_id = #{record.parentId,jdbcType=BIGINT}"); + sql.SET("parent_name = #{record.parentName,jdbcType=VARCHAR}"); sql.SET("agent_key = #{record.agentKey,jdbcType=VARCHAR}"); sql.SET("agent_name = #{record.agentName,jdbcType=VARCHAR}"); sql.SET("agent_address = #{record.agentAddress,jdbcType=VARCHAR}"); @@ -222,6 +242,14 @@ public class HighAgentSqlProvider { sql.SET("`type` = #{type,jdbcType=INTEGER}"); } + if (record.getParentId() != null) { + sql.SET("parent_id = #{parentId,jdbcType=BIGINT}"); + } + + if (record.getParentName() != null) { + sql.SET("parent_name = #{parentName,jdbcType=VARCHAR}"); + } + if (record.getAgentKey() != null) { sql.SET("agent_key = #{agentKey,jdbcType=VARCHAR}"); } diff --git a/hai-service/src/main/java/com/hai/dao/HighCouponAgentCodeMapper.java b/hai-service/src/main/java/com/hai/dao/HighCouponAgentCodeMapper.java index 220c3470..28649a26 100644 --- a/hai-service/src/main/java/com/hai/dao/HighCouponAgentCodeMapper.java +++ b/hai-service/src/main/java/com/hai/dao/HighCouponAgentCodeMapper.java @@ -44,19 +44,23 @@ public interface HighCouponAgentCodeMapper extends HighCouponAgentCodeMapperExt "coupon_agent_record_id, convert_user_phone, ", "convert_code, coupon_code_id, ", "coupon_code, qr_code, ", - "`status`, remark, ", - "create_time, sales_time, ", - "operator_id, operator_name, ", - "ext_1, ext_2, ext_3)", + "`status`, assign_coupon_agent_id, ", + "assign_agent_id, assign_agent_name, ", + "remark, create_time, ", + "sales_time, operator_id, ", + "operator_name, ext_1, ", + "ext_2, ext_3)", "values (#{type,jdbcType=INTEGER}, #{couponAgentId,jdbcType=BIGINT}, ", "#{couponId,jdbcType=BIGINT}, #{agentId,jdbcType=BIGINT}, ", "#{couponAgentRecordId,jdbcType=BIGINT}, #{convertUserPhone,jdbcType=VARCHAR}, ", "#{convertCode,jdbcType=VARCHAR}, #{couponCodeId,jdbcType=BIGINT}, ", "#{couponCode,jdbcType=VARCHAR}, #{qrCode,jdbcType=VARCHAR}, ", - "#{status,jdbcType=INTEGER}, #{remark,jdbcType=VARCHAR}, ", - "#{createTime,jdbcType=TIMESTAMP}, #{salesTime,jdbcType=TIMESTAMP}, ", - "#{operatorId,jdbcType=BIGINT}, #{operatorName,jdbcType=VARCHAR}, ", - "#{ext1,jdbcType=VARCHAR}, #{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})" + "#{status,jdbcType=INTEGER}, #{assignCouponAgentId,jdbcType=BIGINT}, ", + "#{assignAgentId,jdbcType=BIGINT}, #{assignAgentName,jdbcType=VARCHAR}, ", + "#{remark,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, ", + "#{salesTime,jdbcType=TIMESTAMP}, #{operatorId,jdbcType=BIGINT}, ", + "#{operatorName,jdbcType=VARCHAR}, #{ext1,jdbcType=VARCHAR}, ", + "#{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})" }) @Options(useGeneratedKeys=true,keyProperty="id") int insert(HighCouponAgentCode record); @@ -79,6 +83,9 @@ public interface HighCouponAgentCodeMapper extends HighCouponAgentCodeMapperExt @Result(column="coupon_code", property="couponCode", jdbcType=JdbcType.VARCHAR), @Result(column="qr_code", property="qrCode", jdbcType=JdbcType.VARCHAR), @Result(column="status", property="status", jdbcType=JdbcType.INTEGER), + @Result(column="assign_coupon_agent_id", property="assignCouponAgentId", jdbcType=JdbcType.BIGINT), + @Result(column="assign_agent_id", property="assignAgentId", jdbcType=JdbcType.BIGINT), + @Result(column="assign_agent_name", property="assignAgentName", jdbcType=JdbcType.VARCHAR), @Result(column="remark", property="remark", jdbcType=JdbcType.VARCHAR), @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="sales_time", property="salesTime", jdbcType=JdbcType.TIMESTAMP), @@ -93,8 +100,9 @@ public interface HighCouponAgentCodeMapper extends HighCouponAgentCodeMapperExt @Select({ "select", "id, `type`, coupon_agent_id, coupon_id, agent_id, coupon_agent_record_id, convert_user_phone, ", - "convert_code, coupon_code_id, coupon_code, qr_code, `status`, remark, create_time, ", - "sales_time, operator_id, operator_name, ext_1, ext_2, ext_3", + "convert_code, coupon_code_id, coupon_code, qr_code, `status`, assign_coupon_agent_id, ", + "assign_agent_id, assign_agent_name, remark, create_time, sales_time, operator_id, ", + "operator_name, ext_1, ext_2, ext_3", "from high_coupon_agent_code", "where id = #{id,jdbcType=BIGINT}" }) @@ -111,6 +119,9 @@ public interface HighCouponAgentCodeMapper extends HighCouponAgentCodeMapperExt @Result(column="coupon_code", property="couponCode", jdbcType=JdbcType.VARCHAR), @Result(column="qr_code", property="qrCode", jdbcType=JdbcType.VARCHAR), @Result(column="status", property="status", jdbcType=JdbcType.INTEGER), + @Result(column="assign_coupon_agent_id", property="assignCouponAgentId", jdbcType=JdbcType.BIGINT), + @Result(column="assign_agent_id", property="assignAgentId", jdbcType=JdbcType.BIGINT), + @Result(column="assign_agent_name", property="assignAgentName", jdbcType=JdbcType.VARCHAR), @Result(column="remark", property="remark", jdbcType=JdbcType.VARCHAR), @Result(column="create_time", property="createTime", jdbcType=JdbcType.TIMESTAMP), @Result(column="sales_time", property="salesTime", jdbcType=JdbcType.TIMESTAMP), @@ -144,6 +155,9 @@ public interface HighCouponAgentCodeMapper extends HighCouponAgentCodeMapperExt "coupon_code = #{couponCode,jdbcType=VARCHAR},", "qr_code = #{qrCode,jdbcType=VARCHAR},", "`status` = #{status,jdbcType=INTEGER},", + "assign_coupon_agent_id = #{assignCouponAgentId,jdbcType=BIGINT},", + "assign_agent_id = #{assignAgentId,jdbcType=BIGINT},", + "assign_agent_name = #{assignAgentName,jdbcType=VARCHAR},", "remark = #{remark,jdbcType=VARCHAR},", "create_time = #{createTime,jdbcType=TIMESTAMP},", "sales_time = #{salesTime,jdbcType=TIMESTAMP},", diff --git a/hai-service/src/main/java/com/hai/dao/HighCouponAgentCodeSqlProvider.java b/hai-service/src/main/java/com/hai/dao/HighCouponAgentCodeSqlProvider.java index 85e542ca..de5c2b49 100644 --- a/hai-service/src/main/java/com/hai/dao/HighCouponAgentCodeSqlProvider.java +++ b/hai-service/src/main/java/com/hai/dao/HighCouponAgentCodeSqlProvider.java @@ -72,6 +72,18 @@ public class HighCouponAgentCodeSqlProvider { sql.VALUES("`status`", "#{status,jdbcType=INTEGER}"); } + if (record.getAssignCouponAgentId() != null) { + sql.VALUES("assign_coupon_agent_id", "#{assignCouponAgentId,jdbcType=BIGINT}"); + } + + if (record.getAssignAgentId() != null) { + sql.VALUES("assign_agent_id", "#{assignAgentId,jdbcType=BIGINT}"); + } + + if (record.getAssignAgentName() != null) { + sql.VALUES("assign_agent_name", "#{assignAgentName,jdbcType=VARCHAR}"); + } + if (record.getRemark() != null) { sql.VALUES("remark", "#{remark,jdbcType=VARCHAR}"); } @@ -125,6 +137,9 @@ public class HighCouponAgentCodeSqlProvider { sql.SELECT("coupon_code"); sql.SELECT("qr_code"); sql.SELECT("`status`"); + sql.SELECT("assign_coupon_agent_id"); + sql.SELECT("assign_agent_id"); + sql.SELECT("assign_agent_name"); sql.SELECT("remark"); sql.SELECT("create_time"); sql.SELECT("sales_time"); @@ -198,6 +213,18 @@ public class HighCouponAgentCodeSqlProvider { sql.SET("`status` = #{record.status,jdbcType=INTEGER}"); } + if (record.getAssignCouponAgentId() != null) { + sql.SET("assign_coupon_agent_id = #{record.assignCouponAgentId,jdbcType=BIGINT}"); + } + + if (record.getAssignAgentId() != null) { + sql.SET("assign_agent_id = #{record.assignAgentId,jdbcType=BIGINT}"); + } + + if (record.getAssignAgentName() != null) { + sql.SET("assign_agent_name = #{record.assignAgentName,jdbcType=VARCHAR}"); + } + if (record.getRemark() != null) { sql.SET("remark = #{record.remark,jdbcType=VARCHAR}"); } @@ -250,6 +277,9 @@ public class HighCouponAgentCodeSqlProvider { sql.SET("coupon_code = #{record.couponCode,jdbcType=VARCHAR}"); sql.SET("qr_code = #{record.qrCode,jdbcType=VARCHAR}"); sql.SET("`status` = #{record.status,jdbcType=INTEGER}"); + sql.SET("assign_coupon_agent_id = #{record.assignCouponAgentId,jdbcType=BIGINT}"); + sql.SET("assign_agent_id = #{record.assignAgentId,jdbcType=BIGINT}"); + sql.SET("assign_agent_name = #{record.assignAgentName,jdbcType=VARCHAR}"); sql.SET("remark = #{record.remark,jdbcType=VARCHAR}"); sql.SET("create_time = #{record.createTime,jdbcType=TIMESTAMP}"); sql.SET("sales_time = #{record.salesTime,jdbcType=TIMESTAMP}"); @@ -312,6 +342,18 @@ public class HighCouponAgentCodeSqlProvider { sql.SET("`status` = #{status,jdbcType=INTEGER}"); } + if (record.getAssignCouponAgentId() != null) { + sql.SET("assign_coupon_agent_id = #{assignCouponAgentId,jdbcType=BIGINT}"); + } + + if (record.getAssignAgentId() != null) { + sql.SET("assign_agent_id = #{assignAgentId,jdbcType=BIGINT}"); + } + + if (record.getAssignAgentName() != null) { + sql.SET("assign_agent_name = #{assignAgentName,jdbcType=VARCHAR}"); + } + if (record.getRemark() != null) { sql.SET("remark = #{remark,jdbcType=VARCHAR}"); } diff --git a/hai-service/src/main/java/com/hai/dao/HighCouponAgentRelMapper.java b/hai-service/src/main/java/com/hai/dao/HighCouponAgentRelMapper.java index 3cf1e4e3..6bae1ca3 100644 --- a/hai-service/src/main/java/com/hai/dao/HighCouponAgentRelMapper.java +++ b/hai-service/src/main/java/com/hai/dao/HighCouponAgentRelMapper.java @@ -39,20 +39,20 @@ public interface HighCouponAgentRelMapper extends HighCouponAgentRelMapperExt { int deleteByPrimaryKey(Long id); @Insert({ - "insert into high_coupon_agent_rel (`type`, coupon_name, ", - "sales_price, coupon_id, ", - "agent_id, stock_count, ", - "sales_count, create_time, ", - "`status`, operator_id, ", - "operator_name, ext_1, ", - "ext_2, ext_3)", - "values (#{type,jdbcType=INTEGER}, #{couponName,jdbcType=VARCHAR}, ", - "#{salesPrice,jdbcType=DECIMAL}, #{couponId,jdbcType=BIGINT}, ", - "#{agentId,jdbcType=BIGINT}, #{stockCount,jdbcType=INTEGER}, ", - "#{salesCount,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, ", - "#{status,jdbcType=INTEGER}, #{operatorId,jdbcType=BIGINT}, ", - "#{operatorName,jdbcType=VARCHAR}, #{ext1,jdbcType=VARCHAR}, ", - "#{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})" + "insert into high_coupon_agent_rel (parent_coupon_agent_id, `type`, ", + "coupon_name, sales_price, ", + "coupon_id, agent_id, ", + "stock_count, sales_count, ", + "create_time, `status`, ", + "operator_id, operator_name, ", + "ext_1, ext_2, ext_3)", + "values (#{parentCouponAgentId,jdbcType=BIGINT}, #{type,jdbcType=INTEGER}, ", + "#{couponName,jdbcType=VARCHAR}, #{salesPrice,jdbcType=DECIMAL}, ", + "#{couponId,jdbcType=BIGINT}, #{agentId,jdbcType=BIGINT}, ", + "#{stockCount,jdbcType=INTEGER}, #{salesCount,jdbcType=INTEGER}, ", + "#{createTime,jdbcType=TIMESTAMP}, #{status,jdbcType=INTEGER}, ", + "#{operatorId,jdbcType=BIGINT}, #{operatorName,jdbcType=VARCHAR}, ", + "#{ext1,jdbcType=VARCHAR}, #{ext2,jdbcType=VARCHAR}, #{ext3,jdbcType=VARCHAR})" }) @Options(useGeneratedKeys=true,keyProperty="id") int insert(HighCouponAgentRel record); @@ -64,6 +64,7 @@ public interface HighCouponAgentRelMapper extends HighCouponAgentRelMapperExt { @SelectProvider(type=HighCouponAgentRelSqlProvider.class, method="selectByExample") @Results({ @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="parent_coupon_agent_id", property="parentCouponAgentId", jdbcType=JdbcType.BIGINT), @Result(column="type", property="type", jdbcType=JdbcType.INTEGER), @Result(column="coupon_name", property="couponName", jdbcType=JdbcType.VARCHAR), @Result(column="sales_price", property="salesPrice", jdbcType=JdbcType.DECIMAL), @@ -83,13 +84,15 @@ public interface HighCouponAgentRelMapper extends HighCouponAgentRelMapperExt { @Select({ "select", - "id, `type`, coupon_name, sales_price, coupon_id, agent_id, stock_count, sales_count, ", - "create_time, `status`, operator_id, operator_name, ext_1, ext_2, ext_3", + "id, parent_coupon_agent_id, `type`, coupon_name, sales_price, coupon_id, agent_id, ", + "stock_count, sales_count, create_time, `status`, operator_id, operator_name, ", + "ext_1, ext_2, ext_3", "from high_coupon_agent_rel", "where id = #{id,jdbcType=BIGINT}" }) @Results({ @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true), + @Result(column="parent_coupon_agent_id", property="parentCouponAgentId", jdbcType=JdbcType.BIGINT), @Result(column="type", property="type", jdbcType=JdbcType.INTEGER), @Result(column="coupon_name", property="couponName", jdbcType=JdbcType.VARCHAR), @Result(column="sales_price", property="salesPrice", jdbcType=JdbcType.DECIMAL), @@ -118,7 +121,8 @@ public interface HighCouponAgentRelMapper extends HighCouponAgentRelMapperExt { @Update({ "update high_coupon_agent_rel", - "set `type` = #{type,jdbcType=INTEGER},", + "set parent_coupon_agent_id = #{parentCouponAgentId,jdbcType=BIGINT},", + "`type` = #{type,jdbcType=INTEGER},", "coupon_name = #{couponName,jdbcType=VARCHAR},", "sales_price = #{salesPrice,jdbcType=DECIMAL},", "coupon_id = #{couponId,jdbcType=BIGINT},", diff --git a/hai-service/src/main/java/com/hai/dao/HighCouponAgentRelSqlProvider.java b/hai-service/src/main/java/com/hai/dao/HighCouponAgentRelSqlProvider.java index 13d0d982..db891761 100644 --- a/hai-service/src/main/java/com/hai/dao/HighCouponAgentRelSqlProvider.java +++ b/hai-service/src/main/java/com/hai/dao/HighCouponAgentRelSqlProvider.java @@ -28,6 +28,10 @@ public class HighCouponAgentRelSqlProvider { SQL sql = new SQL(); sql.INSERT_INTO("high_coupon_agent_rel"); + if (record.getParentCouponAgentId() != null) { + sql.VALUES("parent_coupon_agent_id", "#{parentCouponAgentId,jdbcType=BIGINT}"); + } + if (record.getType() != null) { sql.VALUES("`type`", "#{type,jdbcType=INTEGER}"); } @@ -94,6 +98,7 @@ public class HighCouponAgentRelSqlProvider { } else { sql.SELECT("id"); } + sql.SELECT("parent_coupon_agent_id"); sql.SELECT("`type`"); sql.SELECT("coupon_name"); sql.SELECT("sales_price"); @@ -129,6 +134,10 @@ public class HighCouponAgentRelSqlProvider { sql.SET("id = #{record.id,jdbcType=BIGINT}"); } + if (record.getParentCouponAgentId() != null) { + sql.SET("parent_coupon_agent_id = #{record.parentCouponAgentId,jdbcType=BIGINT}"); + } + if (record.getType() != null) { sql.SET("`type` = #{record.type,jdbcType=INTEGER}"); } @@ -194,6 +203,7 @@ public class HighCouponAgentRelSqlProvider { sql.UPDATE("high_coupon_agent_rel"); sql.SET("id = #{record.id,jdbcType=BIGINT}"); + sql.SET("parent_coupon_agent_id = #{record.parentCouponAgentId,jdbcType=BIGINT}"); sql.SET("`type` = #{record.type,jdbcType=INTEGER}"); sql.SET("coupon_name = #{record.couponName,jdbcType=VARCHAR}"); sql.SET("sales_price = #{record.salesPrice,jdbcType=DECIMAL}"); @@ -218,6 +228,10 @@ public class HighCouponAgentRelSqlProvider { SQL sql = new SQL(); sql.UPDATE("high_coupon_agent_rel"); + if (record.getParentCouponAgentId() != null) { + sql.SET("parent_coupon_agent_id = #{parentCouponAgentId,jdbcType=BIGINT}"); + } + if (record.getType() != null) { sql.SET("`type` = #{type,jdbcType=INTEGER}"); } diff --git a/hai-service/src/main/java/com/hai/entity/HighAgent.java b/hai-service/src/main/java/com/hai/entity/HighAgent.java index e38f7875..958e9b23 100644 --- a/hai-service/src/main/java/com/hai/entity/HighAgent.java +++ b/hai-service/src/main/java/com/hai/entity/HighAgent.java @@ -20,6 +20,16 @@ public class HighAgent implements Serializable { */ private Integer type; + /** + * 上级代理商id + */ + private Long parentId; + + /** + * 上级代理商名称 + */ + private String parentName; + /** * 代理商编号 */ @@ -50,6 +60,9 @@ public class HighAgent implements Serializable { */ private Date createTime; + /** + * 状态:0:不可用,1:可用 2:禁用 + */ private Integer status; /** @@ -91,6 +104,22 @@ public class HighAgent implements Serializable { this.type = type; } + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + public String getParentName() { + return parentName; + } + + public void setParentName(String parentName) { + this.parentName = parentName; + } + public String getAgentKey() { return agentKey; } @@ -209,6 +238,8 @@ public class HighAgent implements Serializable { HighAgent other = (HighAgent) that; return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) && (this.getType() == null ? other.getType() == null : this.getType().equals(other.getType())) + && (this.getParentId() == null ? other.getParentId() == null : this.getParentId().equals(other.getParentId())) + && (this.getParentName() == null ? other.getParentName() == null : this.getParentName().equals(other.getParentName())) && (this.getAgentKey() == null ? other.getAgentKey() == null : this.getAgentKey().equals(other.getAgentKey())) && (this.getAgentName() == null ? other.getAgentName() == null : this.getAgentName().equals(other.getAgentName())) && (this.getAgentAddress() == null ? other.getAgentAddress() == null : this.getAgentAddress().equals(other.getAgentAddress())) @@ -230,6 +261,8 @@ public class HighAgent implements Serializable { int result = 1; result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); result = prime * result + ((getType() == null) ? 0 : getType().hashCode()); + result = prime * result + ((getParentId() == null) ? 0 : getParentId().hashCode()); + result = prime * result + ((getParentName() == null) ? 0 : getParentName().hashCode()); result = prime * result + ((getAgentKey() == null) ? 0 : getAgentKey().hashCode()); result = prime * result + ((getAgentName() == null) ? 0 : getAgentName().hashCode()); result = prime * result + ((getAgentAddress() == null) ? 0 : getAgentAddress().hashCode()); @@ -254,6 +287,8 @@ public class HighAgent implements Serializable { sb.append("Hash = ").append(hashCode()); sb.append(", id=").append(id); sb.append(", type=").append(type); + sb.append(", parentId=").append(parentId); + sb.append(", parentName=").append(parentName); sb.append(", agentKey=").append(agentKey); sb.append(", agentName=").append(agentName); sb.append(", agentAddress=").append(agentAddress); diff --git a/hai-service/src/main/java/com/hai/entity/HighAgentExample.java b/hai-service/src/main/java/com/hai/entity/HighAgentExample.java index 496431ed..c882d04b 100644 --- a/hai-service/src/main/java/com/hai/entity/HighAgentExample.java +++ b/hai-service/src/main/java/com/hai/entity/HighAgentExample.java @@ -245,6 +245,136 @@ public class HighAgentExample { return (Criteria) this; } + public Criteria andParentIdIsNull() { + addCriterion("parent_id is null"); + return (Criteria) this; + } + + public Criteria andParentIdIsNotNull() { + addCriterion("parent_id is not null"); + return (Criteria) this; + } + + public Criteria andParentIdEqualTo(Long value) { + addCriterion("parent_id =", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotEqualTo(Long value) { + addCriterion("parent_id <>", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdGreaterThan(Long value) { + addCriterion("parent_id >", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdGreaterThanOrEqualTo(Long value) { + addCriterion("parent_id >=", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdLessThan(Long value) { + addCriterion("parent_id <", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdLessThanOrEqualTo(Long value) { + addCriterion("parent_id <=", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdIn(List values) { + addCriterion("parent_id in", values, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotIn(List values) { + addCriterion("parent_id not in", values, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdBetween(Long value1, Long value2) { + addCriterion("parent_id between", value1, value2, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotBetween(Long value1, Long value2) { + addCriterion("parent_id not between", value1, value2, "parentId"); + return (Criteria) this; + } + + public Criteria andParentNameIsNull() { + addCriterion("parent_name is null"); + return (Criteria) this; + } + + public Criteria andParentNameIsNotNull() { + addCriterion("parent_name is not null"); + return (Criteria) this; + } + + public Criteria andParentNameEqualTo(String value) { + addCriterion("parent_name =", value, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameNotEqualTo(String value) { + addCriterion("parent_name <>", value, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameGreaterThan(String value) { + addCriterion("parent_name >", value, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameGreaterThanOrEqualTo(String value) { + addCriterion("parent_name >=", value, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameLessThan(String value) { + addCriterion("parent_name <", value, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameLessThanOrEqualTo(String value) { + addCriterion("parent_name <=", value, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameLike(String value) { + addCriterion("parent_name like", value, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameNotLike(String value) { + addCriterion("parent_name not like", value, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameIn(List values) { + addCriterion("parent_name in", values, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameNotIn(List values) { + addCriterion("parent_name not in", values, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameBetween(String value1, String value2) { + addCriterion("parent_name between", value1, value2, "parentName"); + return (Criteria) this; + } + + public Criteria andParentNameNotBetween(String value1, String value2) { + addCriterion("parent_name not between", value1, value2, "parentName"); + return (Criteria) this; + } + public Criteria andAgentKeyIsNull() { addCriterion("agent_key is null"); return (Criteria) this; diff --git a/hai-service/src/main/java/com/hai/entity/HighCouponAgentCode.java b/hai-service/src/main/java/com/hai/entity/HighCouponAgentCode.java index a5b23b11..55d0b7fa 100644 --- a/hai-service/src/main/java/com/hai/entity/HighCouponAgentCode.java +++ b/hai-service/src/main/java/com/hai/entity/HighCouponAgentCode.java @@ -71,10 +71,25 @@ public class HighCouponAgentCode extends HighCouponAgentCodeModel implements Ser private String qrCode; /** - * 状态:1.待销售 2.未使用 3.已使用 + * 状态:0.删除 1.待销售 2.未使用 3.已使用 4. 分发代理商 */ private Integer status; + /** + * 分配给卡券和代理商的id + */ + private Long assignCouponAgentId; + + /** + * 分配代理商id + */ + private Long assignAgentId; + + /** + * 分配代理商名称 + */ + private String assignAgentName; + /** * 备注 */ @@ -204,6 +219,30 @@ public class HighCouponAgentCode extends HighCouponAgentCodeModel implements Ser this.status = status; } + public Long getAssignCouponAgentId() { + return assignCouponAgentId; + } + + public void setAssignCouponAgentId(Long assignCouponAgentId) { + this.assignCouponAgentId = assignCouponAgentId; + } + + public Long getAssignAgentId() { + return assignAgentId; + } + + public void setAssignAgentId(Long assignAgentId) { + this.assignAgentId = assignAgentId; + } + + public String getAssignAgentName() { + return assignAgentName; + } + + public void setAssignAgentName(String assignAgentName) { + this.assignAgentName = assignAgentName; + } + public String getRemark() { return remark; } @@ -292,6 +331,9 @@ public class HighCouponAgentCode extends HighCouponAgentCodeModel implements Ser && (this.getCouponCode() == null ? other.getCouponCode() == null : this.getCouponCode().equals(other.getCouponCode())) && (this.getQrCode() == null ? other.getQrCode() == null : this.getQrCode().equals(other.getQrCode())) && (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus())) + && (this.getAssignCouponAgentId() == null ? other.getAssignCouponAgentId() == null : this.getAssignCouponAgentId().equals(other.getAssignCouponAgentId())) + && (this.getAssignAgentId() == null ? other.getAssignAgentId() == null : this.getAssignAgentId().equals(other.getAssignAgentId())) + && (this.getAssignAgentName() == null ? other.getAssignAgentName() == null : this.getAssignAgentName().equals(other.getAssignAgentName())) && (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark())) && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime())) && (this.getSalesTime() == null ? other.getSalesTime() == null : this.getSalesTime().equals(other.getSalesTime())) @@ -318,6 +360,9 @@ public class HighCouponAgentCode extends HighCouponAgentCodeModel implements Ser result = prime * result + ((getCouponCode() == null) ? 0 : getCouponCode().hashCode()); result = prime * result + ((getQrCode() == null) ? 0 : getQrCode().hashCode()); result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode()); + result = prime * result + ((getAssignCouponAgentId() == null) ? 0 : getAssignCouponAgentId().hashCode()); + result = prime * result + ((getAssignAgentId() == null) ? 0 : getAssignAgentId().hashCode()); + result = prime * result + ((getAssignAgentName() == null) ? 0 : getAssignAgentName().hashCode()); result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode()); result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode()); result = prime * result + ((getSalesTime() == null) ? 0 : getSalesTime().hashCode()); @@ -347,6 +392,9 @@ public class HighCouponAgentCode extends HighCouponAgentCodeModel implements Ser sb.append(", couponCode=").append(couponCode); sb.append(", qrCode=").append(qrCode); sb.append(", status=").append(status); + sb.append(", assignCouponAgentId=").append(assignCouponAgentId); + sb.append(", assignAgentId=").append(assignAgentId); + sb.append(", assignAgentName=").append(assignAgentName); sb.append(", remark=").append(remark); sb.append(", createTime=").append(createTime); sb.append(", salesTime=").append(salesTime); diff --git a/hai-service/src/main/java/com/hai/entity/HighCouponAgentCodeExample.java b/hai-service/src/main/java/com/hai/entity/HighCouponAgentCodeExample.java index 44123806..624a22d1 100644 --- a/hai-service/src/main/java/com/hai/entity/HighCouponAgentCodeExample.java +++ b/hai-service/src/main/java/com/hai/entity/HighCouponAgentCodeExample.java @@ -885,6 +885,196 @@ public class HighCouponAgentCodeExample { return (Criteria) this; } + public Criteria andAssignCouponAgentIdIsNull() { + addCriterion("assign_coupon_agent_id is null"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdIsNotNull() { + addCriterion("assign_coupon_agent_id is not null"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdEqualTo(Long value) { + addCriterion("assign_coupon_agent_id =", value, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdNotEqualTo(Long value) { + addCriterion("assign_coupon_agent_id <>", value, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdGreaterThan(Long value) { + addCriterion("assign_coupon_agent_id >", value, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdGreaterThanOrEqualTo(Long value) { + addCriterion("assign_coupon_agent_id >=", value, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdLessThan(Long value) { + addCriterion("assign_coupon_agent_id <", value, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdLessThanOrEqualTo(Long value) { + addCriterion("assign_coupon_agent_id <=", value, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdIn(List values) { + addCriterion("assign_coupon_agent_id in", values, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdNotIn(List values) { + addCriterion("assign_coupon_agent_id not in", values, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdBetween(Long value1, Long value2) { + addCriterion("assign_coupon_agent_id between", value1, value2, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignCouponAgentIdNotBetween(Long value1, Long value2) { + addCriterion("assign_coupon_agent_id not between", value1, value2, "assignCouponAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdIsNull() { + addCriterion("assign_agent_id is null"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdIsNotNull() { + addCriterion("assign_agent_id is not null"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdEqualTo(Long value) { + addCriterion("assign_agent_id =", value, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdNotEqualTo(Long value) { + addCriterion("assign_agent_id <>", value, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdGreaterThan(Long value) { + addCriterion("assign_agent_id >", value, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdGreaterThanOrEqualTo(Long value) { + addCriterion("assign_agent_id >=", value, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdLessThan(Long value) { + addCriterion("assign_agent_id <", value, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdLessThanOrEqualTo(Long value) { + addCriterion("assign_agent_id <=", value, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdIn(List values) { + addCriterion("assign_agent_id in", values, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdNotIn(List values) { + addCriterion("assign_agent_id not in", values, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdBetween(Long value1, Long value2) { + addCriterion("assign_agent_id between", value1, value2, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentIdNotBetween(Long value1, Long value2) { + addCriterion("assign_agent_id not between", value1, value2, "assignAgentId"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameIsNull() { + addCriterion("assign_agent_name is null"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameIsNotNull() { + addCriterion("assign_agent_name is not null"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameEqualTo(String value) { + addCriterion("assign_agent_name =", value, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameNotEqualTo(String value) { + addCriterion("assign_agent_name <>", value, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameGreaterThan(String value) { + addCriterion("assign_agent_name >", value, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameGreaterThanOrEqualTo(String value) { + addCriterion("assign_agent_name >=", value, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameLessThan(String value) { + addCriterion("assign_agent_name <", value, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameLessThanOrEqualTo(String value) { + addCriterion("assign_agent_name <=", value, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameLike(String value) { + addCriterion("assign_agent_name like", value, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameNotLike(String value) { + addCriterion("assign_agent_name not like", value, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameIn(List values) { + addCriterion("assign_agent_name in", values, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameNotIn(List values) { + addCriterion("assign_agent_name not in", values, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameBetween(String value1, String value2) { + addCriterion("assign_agent_name between", value1, value2, "assignAgentName"); + return (Criteria) this; + } + + public Criteria andAssignAgentNameNotBetween(String value1, String value2) { + addCriterion("assign_agent_name not between", value1, value2, "assignAgentName"); + return (Criteria) this; + } + public Criteria andRemarkIsNull() { addCriterion("remark is null"); return (Criteria) this; diff --git a/hai-service/src/main/java/com/hai/entity/HighCouponAgentRel.java b/hai-service/src/main/java/com/hai/entity/HighCouponAgentRel.java index 57d98c69..b92de4a6 100644 --- a/hai-service/src/main/java/com/hai/entity/HighCouponAgentRel.java +++ b/hai-service/src/main/java/com/hai/entity/HighCouponAgentRel.java @@ -21,6 +21,11 @@ public class HighCouponAgentRel extends HighCouponAgentRelModel implements Seria */ private Long id; + /** + * 上级关系 + */ + private Long parentCouponAgentId; + /** * 类型 1:销售码 2:兑换码 */ @@ -92,6 +97,14 @@ public class HighCouponAgentRel extends HighCouponAgentRelModel implements Seria this.id = id; } + public Long getParentCouponAgentId() { + return parentCouponAgentId; + } + + public void setParentCouponAgentId(Long parentCouponAgentId) { + this.parentCouponAgentId = parentCouponAgentId; + } + public Integer getType() { return type; } @@ -217,6 +230,7 @@ public class HighCouponAgentRel extends HighCouponAgentRelModel implements Seria } HighCouponAgentRel other = (HighCouponAgentRel) that; return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId())) + && (this.getParentCouponAgentId() == null ? other.getParentCouponAgentId() == null : this.getParentCouponAgentId().equals(other.getParentCouponAgentId())) && (this.getType() == null ? other.getType() == null : this.getType().equals(other.getType())) && (this.getCouponName() == null ? other.getCouponName() == null : this.getCouponName().equals(other.getCouponName())) && (this.getSalesPrice() == null ? other.getSalesPrice() == null : this.getSalesPrice().equals(other.getSalesPrice())) @@ -238,6 +252,7 @@ public class HighCouponAgentRel extends HighCouponAgentRelModel implements Seria final int prime = 31; int result = 1; result = prime * result + ((getId() == null) ? 0 : getId().hashCode()); + result = prime * result + ((getParentCouponAgentId() == null) ? 0 : getParentCouponAgentId().hashCode()); result = prime * result + ((getType() == null) ? 0 : getType().hashCode()); result = prime * result + ((getCouponName() == null) ? 0 : getCouponName().hashCode()); result = prime * result + ((getSalesPrice() == null) ? 0 : getSalesPrice().hashCode()); @@ -262,6 +277,7 @@ public class HighCouponAgentRel extends HighCouponAgentRelModel implements Seria sb.append(" ["); sb.append("Hash = ").append(hashCode()); sb.append(", id=").append(id); + sb.append(", parentCouponAgentId=").append(parentCouponAgentId); sb.append(", type=").append(type); sb.append(", couponName=").append(couponName); sb.append(", salesPrice=").append(salesPrice); diff --git a/hai-service/src/main/java/com/hai/entity/HighCouponAgentRelExample.java b/hai-service/src/main/java/com/hai/entity/HighCouponAgentRelExample.java index 59ebd92c..cd6d1606 100644 --- a/hai-service/src/main/java/com/hai/entity/HighCouponAgentRelExample.java +++ b/hai-service/src/main/java/com/hai/entity/HighCouponAgentRelExample.java @@ -186,6 +186,66 @@ public class HighCouponAgentRelExample { return (Criteria) this; } + public Criteria andParentCouponAgentIdIsNull() { + addCriterion("parent_coupon_agent_id is null"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdIsNotNull() { + addCriterion("parent_coupon_agent_id is not null"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdEqualTo(Long value) { + addCriterion("parent_coupon_agent_id =", value, "parentCouponAgentId"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdNotEqualTo(Long value) { + addCriterion("parent_coupon_agent_id <>", value, "parentCouponAgentId"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdGreaterThan(Long value) { + addCriterion("parent_coupon_agent_id >", value, "parentCouponAgentId"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdGreaterThanOrEqualTo(Long value) { + addCriterion("parent_coupon_agent_id >=", value, "parentCouponAgentId"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdLessThan(Long value) { + addCriterion("parent_coupon_agent_id <", value, "parentCouponAgentId"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdLessThanOrEqualTo(Long value) { + addCriterion("parent_coupon_agent_id <=", value, "parentCouponAgentId"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdIn(List values) { + addCriterion("parent_coupon_agent_id in", values, "parentCouponAgentId"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdNotIn(List values) { + addCriterion("parent_coupon_agent_id not in", values, "parentCouponAgentId"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdBetween(Long value1, Long value2) { + addCriterion("parent_coupon_agent_id between", value1, value2, "parentCouponAgentId"); + return (Criteria) this; + } + + public Criteria andParentCouponAgentIdNotBetween(Long value1, Long value2) { + addCriterion("parent_coupon_agent_id not between", value1, value2, "parentCouponAgentId"); + return (Criteria) this; + } + public Criteria andTypeIsNull() { addCriterion("`type` is null"); return (Criteria) this; diff --git a/hai-service/src/main/java/com/hai/service/HighAgentService.java b/hai-service/src/main/java/com/hai/service/HighAgentService.java index f81df352..a96d9c79 100644 --- a/hai-service/src/main/java/com/hai/service/HighAgentService.java +++ b/hai-service/src/main/java/com/hai/service/HighAgentService.java @@ -25,7 +25,7 @@ public interface HighAgentService { * @throws Exception 抛出异常 */ - List getListAgentMsg(Map map) throws Exception; + List getListAgentMsg(Map map) throws Exception; /** * @@ -61,6 +61,17 @@ public interface HighAgentService { */ void updateAgentMsg(HighAgentModel highAgentModel) throws Exception; + /** + * + * @Title: insertUser + * @Description: 新增代理商信息 + * @author: Sum1Dream + * @Date: 2021/03/09 11:23 + * @param: [highUser] 用户信息 + * @return: com.hai.entity.HighAgentMsg + */ + void insertChildAgent(HighAgent agent) throws Exception ; + /** * * @Title: insertUser diff --git a/hai-service/src/main/java/com/hai/service/HighCouponAgentService.java b/hai-service/src/main/java/com/hai/service/HighCouponAgentService.java index a8dda49e..198b87f5 100644 --- a/hai-service/src/main/java/com/hai/service/HighCouponAgentService.java +++ b/hai-service/src/main/java/com/hai/service/HighCouponAgentService.java @@ -3,6 +3,7 @@ package com.hai.service; import com.hai.entity.HighCouponAgentCode; import com.hai.entity.HighCouponAgentRecord; import com.hai.entity.HighCouponAgentRel; +import com.hai.entity.HighCouponCode; import org.apache.ibatis.annotations.Param; import java.security.PrivateKey; @@ -37,6 +38,13 @@ public interface HighCouponAgentService { **/ HighCouponAgentRel getRelByCouponAgent(Long couponId,Long agentId, Integer type); + /** + * 根据id查询关系 + * @param couponAgentRelId + * @return + */ + HighCouponAgentRel getRelById(Long couponAgentRelId); + /** * @Author 胡锐 * @Description 查询卡券与代理商关系列表 @@ -135,4 +143,10 @@ public interface HighCouponAgentService { */ Map pushGzSinopec(Long couponAgentRelId, String phone, String remark) throws Exception; + /** + * 查询代理商未分配的 销售码、兑换码 + * @param couponAgentRelId + * @return + */ + List getNoSaleCode(Long couponAgentRelId); } diff --git a/hai-service/src/main/java/com/hai/service/impl/HighAgentServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/HighAgentServiceImpl.java index acd2225f..6acd5dab 100644 --- a/hai-service/src/main/java/com/hai/service/impl/HighAgentServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/HighAgentServiceImpl.java @@ -8,8 +8,11 @@ import com.hai.entity.SecUser; import com.hai.model.HighAgentModel; import com.hai.service.HighAgentService; import com.hai.service.SecUserService; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; @@ -31,27 +34,36 @@ public class HighAgentServiceImpl implements HighAgentService { private SecUserService secUserService; @Override - public List getListAgentMsg(Map map) throws Exception { + public List getListAgentMsg(Map map) throws Exception { HighAgentExample example = new HighAgentExample(); HighAgentExample.Criteria criteria = example.createCriteria(); - if (StringUtils.isNotBlank(map.get("agentName"))) { + if (MapUtils.getLong(map, "parentAgentId") != null) { + criteria.andParentIdEqualTo(MapUtils.getLong(map, "parentAgentId")); + } + + if (StringUtils.isNotBlank(MapUtils.getString(map, "agentName"))) { criteria.andAgentNameLike("%" + map.get("agentName") + "%"); } - if (StringUtils.isNotBlank(map.get("agentPhone"))) { - criteria.andAgentPhoneEqualTo( map.get("agentPhone")); + + if (StringUtils.isNotBlank(MapUtils.getString(map, "agentPhone"))) { + criteria.andAgentPhoneEqualTo(MapUtils.getString(map, "agentPhone")); } - if (StringUtils.isNotBlank(map.get("status"))) { - criteria.andStatusEqualTo(Integer.valueOf(map.get("status"))); + + if (MapUtils.getInteger(map, "status") != null) { + criteria.andStatusEqualTo(MapUtils.getInteger(map, "status")); } - if (StringUtils.isNotBlank(map.get("type"))) { - criteria.andTypeEqualTo(Integer.valueOf(map.get("type"))); + + if (MapUtils.getInteger(map, "type") != null) { + criteria.andTypeEqualTo(MapUtils.getInteger(map, "type")); } - if (StringUtils.isNotBlank(map.get("operatorId"))) { - criteria.andOperatorIdEqualTo(Long.valueOf(map.get("operatorId"))); + + if (MapUtils.getLong(map, "operatorId") != null) { + criteria.andOperatorIdEqualTo(MapUtils.getLong(map, "operatorId")); } + example.setOrderByClause("create_time desc"); return highAgentMapper.selectByExample(example); } @@ -89,6 +101,25 @@ public class HighAgentServiceImpl implements HighAgentService { } } + @Override + @Transactional(propagation= Propagation.REQUIRES_NEW) + public void insertChildAgent(HighAgent agent) throws Exception { + highAgentMapper.insert(agent); + + SecUser secUser = new SecUser(); + secUser.setUserName(agent.getUserName()); + secUser.setLoginName(agent.getAgentPhone()); + secUser.setPassword(MD5Util.encode("123456".getBytes())); + secUser.setAdminFlag(1); + secUser.setStatus(1); + secUser.setRoleId(6L); + secUser.setObjectType(4); + secUser.setObjectId(agent.getId()); + secUser.setCreateTime(new Date()); + secUser.setUpdateTime(new Date()); + secUserService.addUser(secUser); + } + @Override public void insertAgentMsg(HighAgentModel highAgentModel) throws Exception { highAgentMapper.insert(highAgentModel); diff --git a/hai-service/src/main/java/com/hai/service/impl/HighCouponAgentServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/HighCouponAgentServiceImpl.java index 17727303..8b3569c9 100644 --- a/hai-service/src/main/java/com/hai/service/impl/HighCouponAgentServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/HighCouponAgentServiceImpl.java @@ -72,7 +72,6 @@ public class HighCouponAgentServiceImpl implements HighCouponAgentService { @Override @Transactional(propagation= Propagation.REQUIRES_NEW) public void assignCouponAgent(HighCouponAgentRel highCouponAgentRel,Integer stockCount) { - if (highCouponAgentRel.getId() != null) { highCouponAgentRelMapper.updateByPrimaryKey(highCouponAgentRel); } else { @@ -99,51 +98,92 @@ public class HighCouponAgentServiceImpl implements HighCouponAgentService { record.setCreateTime(new Date()); highCouponAgentRecordMapper.insert(record); - if (highCouponAgentRel.getType() == 1) { - // 查询未销售的卡券 - List codeList = highCouponCodeService.getNoSaleCode(highCouponAgentRel.getCouponId()); - if (stockCount > codeList.size()) { - throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "无法分配,分配数量超过库存数量"); + if (highCouponAgentRel.getParentCouponAgentId() == null) { + if (highCouponAgentRel.getType() == 1) { + // 查询未销售的卡券 + List codeList = highCouponCodeService.getNoSaleCode(highCouponAgentRel.getCouponId()); + if (stockCount > codeList.size()) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "无法分配,分配数量超过库存数量"); + } + List assignCouponCodeList = codeList.stream().limit(stockCount).collect(Collectors.toList()); + HighCouponAgentCode highCouponAgentCode; + for (HighCouponCode code : assignCouponCodeList) { + code.setAgentId(highCouponAgentRel.getAgentId()); + code.setIsAssignAgent(true); + highCouponCodeService.updateCouponCode(code); + + highCouponAgentCode = new HighCouponAgentCode(); + highCouponAgentCode.setType(highCouponAgentRel.getType()); + highCouponAgentCode.setCouponAgentId(highCouponAgentRel.getId()); + highCouponAgentCode.setCouponAgentRecordId(record.getId()); + highCouponAgentCode.setCouponId(code.getCouponId()); + highCouponAgentCode.setAgentId(highCouponAgentRel.getAgentId()); + highCouponAgentCode.setCouponCodeId(code.getId()); + highCouponAgentCode.setCouponCode(code.getSalesCode()); + highCouponAgentCode.setQrCode(code.getExt1()); + highCouponAgentCode.setStatus(1); + highCouponAgentCode.setCreateTime(new Date()); + highCouponAgentCode.setOperatorId(highCouponAgentRel.getOperatorId()); + highCouponAgentCode.setOperatorName(highCouponAgentRel.getOperatorName()); + highCouponAgentCodeMapper.insert(highCouponAgentCode); + } } - List assignCouponCodeList = codeList.stream().limit(stockCount).collect(Collectors.toList()); - HighCouponAgentCode highCouponAgentCode; - for (HighCouponCode code : assignCouponCodeList) { - code.setAgentId(highCouponAgentRel.getAgentId()); - code.setIsAssignAgent(true); - highCouponCodeService.updateCouponCode(code); - - highCouponAgentCode = new HighCouponAgentCode(); - highCouponAgentCode.setType(highCouponAgentRel.getType()); - highCouponAgentCode.setCouponAgentId(highCouponAgentRel.getId()); - highCouponAgentCode.setCouponAgentRecordId(record.getId()); - highCouponAgentCode.setCouponId(code.getCouponId()); - highCouponAgentCode.setAgentId(highCouponAgentRel.getAgentId()); - highCouponAgentCode.setCouponCodeId(code.getId()); - highCouponAgentCode.setCouponCode(code.getSalesCode()); - highCouponAgentCode.setQrCode(code.getExt1()); - highCouponAgentCode.setStatus(1); - highCouponAgentCode.setCreateTime(new Date()); - highCouponAgentCode.setOperatorId(highCouponAgentRel.getOperatorId()); - highCouponAgentCode.setOperatorName(highCouponAgentRel.getOperatorName()); - highCouponAgentCodeMapper.insert(highCouponAgentCode); + + if (highCouponAgentRel.getType() == 2) { + HighCouponAgentCode highCouponAgentCode; + for (int i = 0; i < stockCount; i++) { + highCouponAgentCode = new HighCouponAgentCode(); + highCouponAgentCode.setType(highCouponAgentRel.getType()); + highCouponAgentCode.setCouponAgentId(highCouponAgentRel.getId()); + highCouponAgentCode.setCouponAgentRecordId(record.getId()); + highCouponAgentCode.setCouponId(highCoupon.getId()); + highCouponAgentCode.setAgentId(highCouponAgentRel.getAgentId()); + highCouponAgentCode.setConvertCode(generateConvertCode(highCouponAgentRel.getId())); + highCouponAgentCode.setStatus(1); + highCouponAgentCode.setCreateTime(new Date()); + highCouponAgentCode.setOperatorId(highCouponAgentRel.getOperatorId()); + highCouponAgentCode.setOperatorName(highCouponAgentRel.getOperatorName()); + highCouponAgentCodeMapper.insert(highCouponAgentCode); + } } } - if (highCouponAgentRel.getType() == 2) { - HighCouponAgentCode highCouponAgentCode; + if (highCouponAgentRel.getParentCouponAgentId() != null) { + + // 父级代理商库存 + HighCouponAgentRel parentRel = getRelById(highCouponAgentRel.getParentCouponAgentId()); + if (parentRel == null) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "未找到代理商"); + } + parentRel.setStockCount(parentRel.getStockCount() - stockCount); + parentRel.setSalesCount(parentRel.getSalesCount() + stockCount); + highCouponAgentRelMapper.updateByPrimaryKey(parentRel); + + // 查询父代理商未分配的码值 + List codeList = getNoSaleCode(parentRel.getId()); + if (codeList.size() < stockCount) { + throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "库存数量不足"); + } for (int i = 0; i < stockCount; i++) { - highCouponAgentCode = new HighCouponAgentCode(); - highCouponAgentCode.setType(highCouponAgentRel.getType()); - highCouponAgentCode.setCouponAgentId(highCouponAgentRel.getId()); - highCouponAgentCode.setCouponAgentRecordId(record.getId()); - highCouponAgentCode.setCouponId(highCoupon.getId()); - highCouponAgentCode.setAgentId(highCouponAgentRel.getAgentId()); - highCouponAgentCode.setConvertCode(generateConvertCode(highCouponAgentRel.getId())); - highCouponAgentCode.setStatus(1); - highCouponAgentCode.setCreateTime(new Date()); - highCouponAgentCode.setOperatorId(highCouponAgentRel.getOperatorId()); - highCouponAgentCode.setOperatorName(highCouponAgentRel.getOperatorName()); - highCouponAgentCodeMapper.insert(highCouponAgentCode); + HighCouponAgentCode code = codeList.get(i); + code.setAssignCouponAgentId(highCouponAgentRel.getId()); + code.setAssignAgentId(highAgent.getId()); + code.setAssignAgentName(highAgent.getAgentName()); + code.setStatus(4); + highCouponAgentCodeMapper.updateByPrimaryKey(code); + + code.setId(null); + code.setAssignCouponAgentId(null); + code.setAssignAgentId(null); + code.setAssignAgentName(null); + code.setStatus(1); + code.setAgentId(highCouponAgentRel.getAgentId()); + code.setCouponAgentId(highCouponAgentRel.getId()); + code.setCouponAgentRecordId(record.getId()); + code.setCreateTime(new Date()); + code.setOperatorId(highCouponAgentRel.getOperatorId()); + code.setOperatorName(highCouponAgentRel.getOperatorName()); + highCouponAgentCodeMapper.insert(code); } } } @@ -164,6 +204,11 @@ public class HighCouponAgentServiceImpl implements HighCouponAgentService { return null; } + @Override + public HighCouponAgentRel getRelById(Long couponAgentRelId) { + return highCouponAgentRelMapper.selectByPrimaryKey(couponAgentRelId); + } + @Override public List getCouponAgentList(Map map) { HighCouponAgentRelExample example = new HighCouponAgentRelExample(); @@ -617,4 +662,13 @@ public class HighCouponAgentServiceImpl implements HighCouponAgentService { map.put("couponAgentCode", convertCode); return map; } + + @Override + public List getNoSaleCode(Long couponAgentRelId) { + HighCouponAgentCodeExample example = new HighCouponAgentCodeExample(); + example.createCriteria().andStatusEqualTo(1).andCouponAgentIdEqualTo(couponAgentRelId); + example.setOrderByClause("create_time desc"); + return highCouponAgentCodeMapper.selectByExample(example); + } + } From a0cf36e60bc9e67e5edadcdd60bd92ee15792bea Mon Sep 17 00:00:00 2001 From: hurui <177768073@qq.com> Date: Tue, 21 Jun 2022 16:59:30 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bweb/controller/HighOrderController.java | 9 +++++++-- .../cweb/controller/HighTestController.java | 2 +- .../java/com/hai/schedule/HighGasSchedule.java | 4 ++-- .../com/hai/config/MqttProviderConfig.java | 18 +++++++++--------- .../com/hai/config/ZkcPrinterTemplate.java | 13 +++++-------- .../hai/service/impl/HighOrderServiceImpl.java | 4 ++-- 6 files changed, 26 insertions(+), 24 deletions(-) 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 ec7436fd..0cfd4592 100644 --- a/hai-bweb/src/main/java/com/bweb/controller/HighOrderController.java +++ b/hai-bweb/src/main/java/com/bweb/controller/HighOrderController.java @@ -75,7 +75,8 @@ public class HighOrderController { @RequestMapping(value = "/print", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "打印") - public ResponseData print(@RequestParam(name = "orderId", required = true) Long orderId) { + public ResponseData print(@RequestParam(name = "orderId", required = true) Long orderId, + @RequestParam(name = "printType", required = true) Integer printType) { try { HighOrder order = highOrderService.getOrderById(orderId); @@ -83,11 +84,15 @@ public class HighOrderController { log.error("HighCouponController -> getCouponList() error!","权限不足"); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMPETENCE_INSUFFICIENT, ""); } - order.setPrintStatus(true); order.setPrintNum(order.getPrintNum() + 1); highOrderService.updateOrderDetail(order); + // 1. 热敏打印机 2. 云打印机 + if (printType == 2) { + highOrderService.printGasOrder(order.getHighChildOrderList().get(0).getGoodsId(), order.getOrderNo()); + } + return ResponseMsgUtil.success("操作成功"); } catch (Exception e) { 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 386869e1..62f9dd35 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 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 { HighOrder order = highOrderService.getOrderByOrderNo("HF2022061411034235002"); for (HighChildOrder childOrder : order.getHighChildOrderList()) { String printText = ZkcPrinterTemplate.oilCashierStubTemp( childOrder.getGoodsName(), order.getOrderNo(), DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss"), "嗨森逛", childOrder.getGasGunNo(), childOrder.getGasOilNo(), childOrder.getGasOilLiters().toString(), order.getTotalPrice().toString() ); System.out.println(printText); mqttProviderConfig.publish(2, false, topic, ZkcPrinterTemplate.hexStringToString(printText)); } // Thread.sleep(6000); 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 +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 { /* HighOrder order = highOrderService.getOrderByOrderNo("HF2022061411034235002"); for (HighChildOrder childOrder : order.getHighChildOrderList()) { String printText = ZkcPrinterTemplate.oilCashierStubTemp( childOrder.getGoodsName(), order.getOrderNo(), DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss"), "嗨森逛", childOrder.getGasGunNo(), childOrder.getGasOilNo(), childOrder.getGasOilLiters().toString(), order.getTotalPrice().toString() ); System.out.println(printText); mqttProviderConfig.publish(2, false, topic, ZkcPrinterTemplate.hexStringToString(printText)); }*/ String orderNo = "HF" + System.currentTimeMillis(); 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(("流水号:" + orderNo).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)); HighOrder order = highOrderService.getOrderByOrderNo("HF2022062114395449901"); for (HighChildOrder childOrder : order.getHighChildOrderList()) { // highOrderService.printGasOrder(childOrder.getGoodsId(), order.getOrderNo()); String oilCashierStubTempText = ZkcPrinterTemplate.oilCashierStubTemp( childOrder.getGoodsName(), order.getOrderNo(), DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss"), "嗨森逛", childOrder.getGasGunNo(), childOrder.getGasOilNo(), childOrder.getGasOilLiters().toString(), order.getTotalPrice().toString() ); System.out.println(oilCashierStubTempText); // mqttProviderConfig.publish(2, true, topic, hexStringToString(oilCashierStubTempText)); } // Thread.sleep(6000); 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-schedule/src/main/java/com/hai/schedule/HighGasSchedule.java b/hai-schedule/src/main/java/com/hai/schedule/HighGasSchedule.java index 1de9a2aa..6e7eb7b4 100644 --- a/hai-schedule/src/main/java/com/hai/schedule/HighGasSchedule.java +++ b/hai-schedule/src/main/java/com/hai/schedule/HighGasSchedule.java @@ -151,11 +151,11 @@ public class HighGasSchedule { } } - @Scheduled(cron = "0 30 7 * * ?") //每日7点1分执行一次 + /* @Scheduled(cron = "0 30 7 * * ?") //每日7点1分执行一次 public void refreshPriceOfficial() throws Exception { gasOilPriceOfficialService.refreshPriceOfficial(); gasOilPriceOfficialService.refreshGasPriceOfficial(null, null); - } + }*/ } diff --git a/hai-service/src/main/java/com/hai/config/MqttProviderConfig.java b/hai-service/src/main/java/com/hai/config/MqttProviderConfig.java index c3e14a98..f23d202d 100644 --- a/hai-service/src/main/java/com/hai/config/MqttProviderConfig.java +++ b/hai-service/src/main/java/com/hai/config/MqttProviderConfig.java @@ -11,16 +11,18 @@ import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; +import java.util.Random; + @Configuration @Slf4j public class MqttProviderConfig { - @Value("${spring.mqtt.username}") + // @Value("${spring.mqtt.username}") private String username; - @Value("${spring.mqtt.password}") + // @Value("${spring.mqtt.password}") private String password; - @Value("${spring.mqtt.url}") + // @Value("${spring.mqtt.url}") private String hostUrl; /* @Value("${spring.mqtt.client.id}") @@ -58,7 +60,7 @@ public class MqttProviderConfig { MqttConnectOptions options = new MqttConnectOptions(); //是否清空session,设置false表示服务器会保留客户端的连接记录(订阅主题,qos),客户端重连之后能获取到服务器在客户端断开连接期间推送的消息 //设置为true表示每次连接服务器都是以新的身份 - options.setCleanSession(true); + options.setCleanSession(false); //设置连接用户名 options.setUserName(username); //设置连接密码 @@ -67,6 +69,8 @@ public class MqttProviderConfig { options.setConnectionTimeout(100); //设置心跳时间 单位为秒,表示服务器每隔 1.5*20秒的时间向客户端发送心跳判断客户端是否在线 options.setKeepAliveInterval(20); + + options.setAutomaticReconnect(false); // 设置遗嘱消息的话题,若客户端和服务器之间的连接意外断开,服务器将发布客户端的遗嘱信息 // options.setWill("willTopic",(clientId + "与服务器断开连接").getBytes(),0,false); //设置回调 @@ -88,7 +92,7 @@ public class MqttProviderConfig { MqttMessage mqttMessage = new MqttMessage(); mqttMessage.setQos(qos); mqttMessage.setRetained(retained); - mqttMessage.setPayload(message.getBytes("UTF-8")); + mqttMessage.setPayload(message.getBytes()); // 主题的目的地,用于发布/订阅信息 MqttTopic mqttTopic = client.getTopic(topic); //提供一种机制来跟踪消息的传递进度 @@ -106,10 +110,6 @@ public class MqttProviderConfig { } } - 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(); diff --git a/hai-service/src/main/java/com/hai/config/ZkcPrinterTemplate.java b/hai-service/src/main/java/com/hai/config/ZkcPrinterTemplate.java index 8c625c1c..b98e9bc3 100644 --- a/hai-service/src/main/java/com/hai/config/ZkcPrinterTemplate.java +++ b/hai-service/src/main/java/com/hai/config/ZkcPrinterTemplate.java @@ -1,9 +1,12 @@ package com.hai.config; +import com.hai.common.utils.DateUtil; + import java.io.ByteArrayOutputStream; +import java.util.Date; /** - * 商鹏打印机模板 + * ZKC云打印机模板 * @author hurui */ public class ZkcPrinterTemplate { @@ -37,7 +40,7 @@ public class ZkcPrinterTemplate { stream.write(gasName.getBytes("UTF-8")); stream.write(0x0A); - stream.write("(收银员)".getBytes("UTF-8")); + stream.write("(收银员存根)".getBytes("UTF-8")); stream.write(0x0A); // 左对齐 @@ -70,9 +73,6 @@ public class ZkcPrinterTemplate { stream.write("实际加油升数以加油机为准!".getBytes("UTF-8")); stream.write(0x0A); - stream.write("--------------------------------".getBytes("UTF-8")); - stream.write(0x0A); - stream.write(0x1B); stream.write(0x0E); @@ -161,9 +161,6 @@ public class ZkcPrinterTemplate { stream.write("实际加油升数以加油机为准!".getBytes("UTF-8")); stream.write(0x0A); - stream.write("--------------------------------".getBytes("UTF-8")); - stream.write(0x0A); - stream.write(0x1B); stream.write(0x0E); 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 85d32daf..13abe2f7 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 @@ -1717,7 +1717,7 @@ public class HighOrderServiceImpl implements HighOrderService { String oilCashierStubTempText = ZkcPrinterTemplate.oilCashierStubTemp( childOrder.getGoodsName(), order.getOrderNo(), - DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss"), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), "嗨森逛", childOrder.getGasGunNo(), childOrder.getGasOilNo(), @@ -1730,7 +1730,7 @@ public class HighOrderServiceImpl implements HighOrderService { String oilClientStubTempText = ZkcPrinterTemplate.oilClientStubTemp( childOrder.getGoodsName(), order.getOrderNo(), - DateUtil.date2String(new Date(), "yyyy-MM-dd HH:mm:ss"), + DateUtil.date2String(order.getPayTime(), "yyyy-MM-dd HH:mm:ss"), "嗨森逛", childOrder.getGasGunNo(), childOrder.getGasOilNo(),