liu 9 месяцев назад
Родитель
Сommit
65c9fc7b2a

+ 3 - 2
src/main/java/com/sqx/common/utils/SignUtil.java

@@ -1,6 +1,7 @@
 package com.sqx.common.utils;
 
 import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -10,14 +11,14 @@ import org.springframework.util.DigestUtils;
 
 import java.nio.charset.StandardCharsets;
 
-
+@Slf4j
 public class SignUtil {
     //获取快跑者平台签名
     public static String getSign(String body, String dev_key, String team_token, String ticket, Long timestamp, Integer version) {
 
         String message = "body=" + body + "&dev_key=" + dev_key + "&team_token=" + team_token + "&ticket=" + ticket + "&timestamp=" + timestamp + "&version=" + version + "WNEL248ZY8381W91EB66ZTULHBU176M9";
         String sign = encryptToMD5(message);
-        System.out.println("sign = " + sign);
+        log.info("sign = " + sign);
 
         return sign;
     }

+ 390 - 4
src/main/java/com/sqx/modules/callBack/controller/CallBackController.java

@@ -5,22 +5,33 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.sqx.common.constant.RedisKey;
 import com.sqx.common.exception.SqxException;
+import com.sqx.common.utils.Result;
+import com.sqx.common.utils.SignUtil;
+import com.sqx.modules.address.entity.Address;
+import com.sqx.modules.address.service.AddressService;
 import com.sqx.modules.app.entity.UserEntity;
 import com.sqx.modules.app.service.UserService;
 import com.sqx.modules.callBack.dto.CallBackDto;
 import com.sqx.modules.errand.entity.TbIndent;
 import com.sqx.modules.errand.service.TbIndentService;
+import com.sqx.modules.errand.service.impl.TbIndentServiceImpl;
+import com.sqx.modules.goods.entity.GoodsShop;
+import com.sqx.modules.goods.service.GoodsShopService;
+import com.sqx.modules.order.dao.OrderGoodsDao;
+import com.sqx.modules.order.entity.OrderGoods;
 import com.sqx.modules.order.entity.TbOrder;
 import com.sqx.modules.order.service.AppOrderService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
 import org.checkerframework.checker.units.qual.A;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -28,6 +39,10 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
 
 @RestController
 @RequestMapping("/back")
@@ -43,6 +58,15 @@ public class CallBackController {
     @Autowired
     AppOrderService appOrderService;
 
+    @Autowired
+    private GoodsShopService goodsShopService;
+
+    @Autowired
+    private AddressService addressService;
+
+    @Autowired
+    private OrderGoodsDao orderGoodsDao;
+
 
     /**
      * 回调
@@ -74,6 +98,10 @@ public class CallBackController {
         if ("4".equals(state)) {//接单
             log.info("骑手接单:" + order_no);
             tbOrder.setStatus(3);
+            if (ObjectUtils.isNotEmpty(trade_no)) {
+                log.info("快跑者订单号:"+trade_no);
+                tbOrder.setTradeNo(trade_no);
+            }
             appOrderService.updateOrder(tbOrder);
             tbIndentService.orderIndentReceiving(userEntity.getUserId(), tbOrder.getOrderId()+"");
         } else if ("5".equals(state)) {//取餐
@@ -86,5 +114,363 @@ public class CallBackController {
         return "success";
     }
 
+    @GetMapping("/open/test")
+    public Result test(String orderNumber){
+        TbOrder order = appOrderService.getOne(new QueryWrapper<TbOrder>().eq("order_number", orderNumber));
+
+        log.info("第一次创建快跑者订单");
+        String responseBody = creatSpeedRunnerOrder(order);
+        if (ObjectUtils.isNotEmpty(responseBody)) {
+            String tradeNo = getTradeNo(responseBody);
+            log.info("第一次创建快跑者订单返回的订单号:" + tradeNo);
+            if (ObjectUtils.isNotEmpty(tradeNo)) {
+                order.setTradeNo(tradeNo);
+                appOrderService.updateById(order);
+            } else {
+                log.info("创建快跑者订单的返回的订单为空,第二次创建");
+                String responseBody2 = creatSpeedRunnerOrder(order);
+                if (ObjectUtils.isNotEmpty(responseBody2)) {
+                    String tradeNo2 = getTradeNo(responseBody2);
+                    log.info("第二次创建快跑者订单返回的订单号:" + tradeNo2);
+                    if (ObjectUtils.isNotEmpty(tradeNo2)) {
+                        order.setTradeNo(tradeNo2);
+                        appOrderService.updateById(order);
+                    }
+                }
+            }
+        } else {
+            String responseBody2 = creatSpeedRunnerOrder(order);
+            if (ObjectUtils.isNotEmpty(responseBody2)) {
+                String tradeNo2 = getTradeNo(responseBody2);
+                log.info("第二次创建快跑者订单返回的订单号:" + tradeNo2);
+                if (ObjectUtils.isNotEmpty(tradeNo2)) {
+                    order.setTradeNo(tradeNo2);
+                    appOrderService.updateById(order);
+                }
+            }
+        }
+        return Result.success();
+    }
+
+    public static void main(String[] args) {
+        String test="不要葱不要蒜不要香菜,加辣椒加辣椒\r\n早点送";
+        String s = test.replaceAll("\\n", "\n");
+        System.out.println("s = " + s);
+    }
+
+    public String creatSpeedRunnerOrder(TbOrder tbOrder){
+//               获取店铺信息
+        GoodsShop goodsShop = goodsShopService.getById(tbOrder.getShopId());
+//               获取餐品信息
+        List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>()
+                .eq("order_id", tbOrder.getOrderId()));
+        StringBuilder stringBuilder = new StringBuilder();
+        for (int i = 0; i < orderGoodsList.size(); i++) {
+            OrderGoods orderGoods = orderGoodsList.get(i);
+            double goodsPrice = orderGoods.getGoodsPrice().doubleValue();
+            Integer goodsNum = orderGoods.getGoodsNum();
+            String goodsName = orderGoods.getGoodsName();
+            if (i == 0) {
+                stringBuilder.append(goodsName).append("(").append(goodsPrice).append("x").append(goodsNum).append(")");
+            } else {
+                stringBuilder.append(",").append(goodsName).append("(").append(goodsPrice).append("x").append(goodsNum).append(")");
+
+            }
+        }
+//               获取用户收货地址
+        Address address = addressService.getById(tbOrder.getAddressId());
+
+        JSONObject body = new JSONObject();
+        String shopId = tbOrder.getShopId()+"";
+        if (ObjectUtils.isNotEmpty(shopId)) {
+            try {
+                shopId = URLEncoder.encode(shopId, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("shop_id", shopId);
+
+        String shopName = goodsShop.getShopName();
+        if (ObjectUtils.isNotEmpty(shopName)) {
+            try {
+                shopName = URLEncoder.encode(shopName, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            shopName=shopName.replaceAll("\\+","-");
+        }
+        body.put("shop_name", shopName);
+
+        String phone = goodsShop.getPhone();
+        if (ObjectUtils.isNotEmpty(phone)) {
+            try {
+                phone = URLEncoder.encode(phone, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("shop_tel", phone);
+
+
+        String detailedAddress = goodsShop.getDetailedAddress();
+        if (ObjectUtils.isNotEmpty(detailedAddress)) {
+            try {
+                detailedAddress = URLEncoder.encode(detailedAddress, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            detailedAddress=detailedAddress.replaceAll("\\+","-");
+        }
+        body.put("shop_address", detailedAddress);
+
 
+        String shopTag  =goodsShop.getShopLng() + "," + goodsShop.getShopLat();
+        if (ObjectUtils.isNotEmpty(detailedAddress)) {
+            try {
+                shopTag = URLEncoder.encode(shopTag, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("shop_tag", shopTag);
+
+
+//        将+变成-
+        String orderContent = stringBuilder.toString();
+        if (ObjectUtils.isNotEmpty(orderContent)) {
+            try {
+                orderContent = URLEncoder.encode(orderContent, "UTF-8");
+//                orderContent=orderContent.replaceAll("🦆","");
+//                orderContent=orderContent.replaceAll("(双拼)","");
+                System.out.println("orderContent = " + orderContent);
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            orderContent=orderContent.replaceAll("\\+","-");
+        }
+        body.put("order_content", orderContent);
+
+
+        String remark = tbOrder.getRemark();
+        if (ObjectUtils.isNotEmpty(remark)) {
+            try {
+                remark=remark.replaceAll("\\r\\n|\\n|\\r", " ");
+                remark = URLEncoder.encode(remark, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            remark=remark.replaceAll("\\+","-");
+        }
+        body.put("order_note", remark);
+
+        String orderSequence = tbOrder.getOrderSequence();
+        if (ObjectUtils.isNotEmpty(orderSequence)) {
+            try {
+                orderSequence =URLEncoder.encode(orderSequence, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("order_mark", orderSequence);
+
+
+        body.put("order_from", shopName+ "#" + orderSequence);
+
+
+        String payTime = tbOrder.getPayTime();
+        if (ObjectUtils.isNotEmpty(payTime)) {
+            try {
+                payTime = URLEncoder.encode(payTime, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("order_time", payTime);
+
+
+        String userName = address.getUserName();
+        if (ObjectUtils.isNotEmpty(userName)) {
+            try {
+                userName = URLEncoder.encode(userName, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            userName=userName.replaceAll("\\+","-");
+        }
+        body.put("customer_name", userName);
+
+        String userPhone = tbOrder.getPhone();
+        if (ObjectUtils.isNotEmpty(userPhone)) {
+            try {
+                userPhone = URLEncoder.encode(userPhone, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("customer_tel", userPhone);
+
+
+        String addressDetail = address.getAddressDetail();
+        if (ObjectUtils.isNotEmpty(addressDetail)) {
+            try {
+                addressDetail = URLEncoder.encode(addressDetail, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+
+//            addressDetail=addressDetail.replaceAll("\\+","-");
+        }
+        body.put("customer_address", addressDetail);
+
+
+        String customerTag=address.getLng() + "," + address.getLat();
+        if (ObjectUtils.isNotEmpty(customerTag)) {
+            try {
+                customerTag = URLEncoder.encode(customerTag, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("customer_tag", customerTag);
+
+
+        String orderNumber = tbOrder.getOrderNumber();
+        if (ObjectUtils.isNotEmpty(orderNumber)) {
+            try {
+                orderNumber = URLEncoder.encode(orderNumber, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("order_no", orderNumber);
+
+        String payMoney = tbOrder.getPayMoney().toPlainString();
+        if (ObjectUtils.isNotEmpty(payMoney)) {
+            try {
+                payMoney = URLEncoder.encode(payMoney, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("order_price",payMoney);
+        body.put("pay_status", 0);
+
+        log.info("body信息:" + body);
+
+//               版本
+        String version = "1";
+//               时间戳
+        long currentTimeMillis = System.currentTimeMillis();
+        long currentTimeSeconds = currentTimeMillis / 1000;
+        String timestamp = String.valueOf(currentTimeSeconds);
+        log.info("timestamp: "+timestamp);
+//               唯一标识符
+        String ticket = "83f0ff99-7c8e-47e8-8802-bd3754414a52";
+//               团队token
+        String teamToken = "Q444DMV4LT8WSGRW";
+//               开发者中心的开发密钥
+        String devKey = "31RRHA4O165VFN9W2DAPDYDH8N83BT12";
+
+        JSONObject body2 = new JSONObject();
+//        String shopId = tbOrder.getShopId()+"";
+        body2.put("shop_id", tbOrder.getShopId()+"");
+
+//        String shopName = goodsShop.getShopName();
+        body2.put("shop_name", goodsShop.getShopName());
+
+//        String phone = goodsShop.getPhone();
+        body2.put("shop_tel", goodsShop.getPhone());
+
+//        String detailedAddress = goodsShop.getDetailedAddress();
+        body2.put("shop_address", goodsShop.getDetailedAddress());
+
+
+//        String shopTag  =goodsShop.getShopLng() + "," + goodsShop.getShopLat();
+        body2.put("shop_tag", goodsShop.getShopLng() + "," + goodsShop.getShopLat());
+
+
+//        将+变成-
+//        String orderContent = stringBuilder.toString();
+        body2.put("order_content", stringBuilder.toString());
+
+
+        String remark2 = tbOrder.getRemark();
+        if (ObjectUtils.isNotEmpty(remark2)) {
+            remark2=remark2.replaceAll("\\r\\n|\\n|\\r", " ");
+
+            // 方法2:使用Java 8+的\\R正则表达式;
+        }
+        body2.put("order_note", remark2);
+
+//        String orderSequence = tbOrder.getOrderSequence();
+        body2.put("order_mark", tbOrder.getOrderSequence());
+
+
+        body2.put("order_from", goodsShop.getShopName()+ "#" + tbOrder.getOrderSequence());
+
+
+//        String payTime = tbOrder.getPayTime();
+
+        body2.put("order_time", tbOrder.getPayTime());
+
+
+//        String userName = address.getUserName();
+
+        body2.put("customer_name", address.getUserName());
+
+//        String userPhone = address.getUserPhone();
+
+        body2.put("customer_tel", tbOrder.getPhone());
+
+
+//        String addressDetail = address.getAddressDetail();
+        body2.put("customer_address", address.getAddressDetail());
+
+
+//        String customerTag=address.getLng() + "," + address.getLat();
+        body2.put("customer_tag", address.getLng() + "," + address.getLat());
+
+
+//        String orderNumber = tbOrder.getOrderNumber();
+
+        body2.put("order_no", tbOrder.getOrderNumber());
+
+//        String payMoney = tbOrder.getPayMoney().toPlainString();
+        body2.put("order_price",tbOrder.getPayMoney().toPlainString());
+        body2.put("pay_status", 0);
+        log.info("body2信息:" + body2);
+//               获取签名
+        String sign = SignUtil.getSign(body2.toString(), devKey, teamToken, ticket, currentTimeSeconds, 1);
+        String responseBody="";
+        try {
+            log.info("创建快跑者订单");
+            CloseableHttpClient client = HttpClients.createDefault();
+            // 创建httppost
+            HttpPost httpPost = new HttpPost("https://open.keloop.cn/open/order/createOrder");
+            String params = "version=" + version + "&timestamp=" + timestamp + "&ticket=" + ticket + "&team_token=" + teamToken + "&dev_key=" + devKey + "&sign=" + sign + "&body=" + body.toString(); // 注意:这里不需要手动编码,HttpClient会处理它。
+            StringEntity entity = new StringEntity(params, StandardCharsets.UTF_8);
+            entity.setContentType("application/x-www-form-urlencoded"); // 设置Content-Type为application/x-www-form-urlencoded,但不是必须的,HttpClient会自动设置。
+            httpPost.setEntity(entity);
+            responseBody = EntityUtils.toString(client.execute(httpPost).getEntity());
+            log.info("创建结果:"+responseBody);
+        }catch (Exception e){
+            e.printStackTrace();
+//            throw new RuntimeException("responseBody");
+        }
+        return responseBody;
+    }
+
+    public static String getTradeNo(String responseBody){
+        com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(responseBody);
+        String tradeNo="";
+        Integer code = jsonObject.getInteger("code");
+        if (ObjectUtils.isNotEmpty(code)) {
+            if (code==200) {
+                JSONObject date = jsonObject.getJSONObject("data");
+                tradeNo = date.getString("trade_no");
+            }
+        }
+        return tradeNo;
+    }
 }

+ 279 - 47
src/main/java/com/sqx/modules/errand/service/impl/TbIndentServiceImpl.java

@@ -14,10 +14,7 @@ import com.google.gson.Gson;
 import com.sqx.common.constant.RedisKey;
 import com.sqx.common.exception.SqxException;
 import com.sqx.common.sms.SmsSendResult;
-import com.sqx.common.utils.DateUtils;
-import com.sqx.common.utils.MyGlobalThreadPool;
-import com.sqx.common.utils.PageUtils;
-import com.sqx.common.utils.Result;
+import com.sqx.common.utils.*;
 import com.sqx.modules.address.dao.AddressDao;
 import com.sqx.modules.address.entity.Address;
 import com.sqx.modules.address.service.AddressService;
@@ -90,7 +87,10 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.support.DefaultTransactionDefinition;
 
 import javax.annotation.Resource;
+import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -341,40 +341,43 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
         tbIndent.setUserId(order.getUserId());
         tbIndent.setShopId(order.getShopId());
         baseMapper.insert(tbIndent);
+        log.info("创建跑腿订单完成");
 
+        log.info("调用快跑者前——订单类型:"+order.getOrderType()+",跑腿订单状态:"+tbIndent.getIndentState());
         //            创建快跑者订单
-        log.info("第一次创建快跑者订单");
-        String responseBody = creatSpeedRunnerOrder(order);
-        if (ObjectUtils.isNotEmpty(responseBody)) {
-            String tradeNo = getTradeNo(responseBody);
-            log.info("第一次创建快跑者订单返回的订单号:"+tradeNo);
-            if (ObjectUtils.isNotEmpty(tradeNo)) {
-                order.setTradeNo(tradeNo);
-                appOrderService.updateById(order);
-            }else {
-                log.info("创建快跑者订单的返回的订单为空,第二次创建");
+        if (order.getOrderType() == 2 && !"11".equals(tbIndent.getIndentState())) {
+            log.info("第一次创建快跑者订单");
+            String responseBody = creatSpeedRunnerOrder(order);
+            if (ObjectUtils.isNotEmpty(responseBody)) {
+                String tradeNo = getTradeNo(responseBody);
+                log.info("第一次创建快跑者订单返回的订单号:" + tradeNo);
+                if (ObjectUtils.isNotEmpty(tradeNo)) {
+                    order.setTradeNo(tradeNo);
+                    appOrderService.updateById(order);
+                } else {
+                    log.info("创建快跑者订单的返回的订单为空,第二次创建");
+                    String responseBody2 = creatSpeedRunnerOrder(order);
+                    if (ObjectUtils.isNotEmpty(responseBody2)) {
+                        String tradeNo2 = getTradeNo(responseBody2);
+                        log.info("第二次创建快跑者订单返回的订单号:" + tradeNo2);
+                        if (ObjectUtils.isNotEmpty(tradeNo2)) {
+                            order.setTradeNo(tradeNo2);
+                            appOrderService.updateById(order);
+                        }
+                    }
+                }
+            } else {
                 String responseBody2 = creatSpeedRunnerOrder(order);
                 if (ObjectUtils.isNotEmpty(responseBody2)) {
                     String tradeNo2 = getTradeNo(responseBody2);
-                    log.info("第二次创建快跑者订单返回的订单号:"+tradeNo2);
+                    log.info("第二次创建快跑者订单返回的订单号:" + tradeNo2);
                     if (ObjectUtils.isNotEmpty(tradeNo2)) {
                         order.setTradeNo(tradeNo2);
                         appOrderService.updateById(order);
                     }
                 }
             }
-        }else {
-            String responseBody2 = creatSpeedRunnerOrder(order);
-            if (ObjectUtils.isNotEmpty(responseBody2)) {
-                String tradeNo2 = getTradeNo(responseBody2);
-                log.info("第二次创建快跑者订单返回的订单号:"+tradeNo2);
-                if (ObjectUtils.isNotEmpty(tradeNo2)) {
-                    order.setTradeNo(tradeNo2);
-                    appOrderService.updateById(order);
-                }
-            }
         }
-
         return Result.success();
     }
 
@@ -387,34 +390,193 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
         StringBuilder stringBuilder = new StringBuilder();
         for (int i = 0; i < orderGoodsList.size(); i++) {
             OrderGoods orderGoods = orderGoodsList.get(i);
-            String skuMessage = orderGoods.getSkuMessage();
+            double goodsPrice = orderGoods.getGoodsPrice().doubleValue();
+            Integer goodsNum = orderGoods.getGoodsNum();
             String goodsName = orderGoods.getGoodsName();
             if (i == 0) {
-                stringBuilder.append(goodsName).append(": ").append(skuMessage);
+                stringBuilder.append(goodsName).append("(").append(goodsPrice).append("x").append(goodsNum).append(")");
             } else {
-                stringBuilder.append(",").append(goodsName).append(":").append(skuMessage);
+                stringBuilder.append(",").append(goodsName).append("(").append(goodsPrice).append("x").append(goodsNum).append(")");
+
             }
         }
 //               获取用户收货地址
         Address address = addressService.getById(tbOrder.getAddressId());
 
-        com.alibaba.fastjson.JSONObject body = new com.alibaba.fastjson.JSONObject();
-        body.put("shop_id", tbOrder.getShopId());
-        body.put("shop_name", goodsShop.getShopName());
-        body.put("shop_tel", goodsShop.getPhone());
-        body.put("shop_address", goodsShop.getDetailedAddress());
-        body.put("shop_tag", goodsShop.getShopLng() + "," + goodsShop.getShopLat());
-        body.put("order_content", stringBuilder.toString());
-        body.put("order_note", tbOrder.getRemark());
-        body.put("order_mark", tbOrder.getOrderSequence());
-        body.put("order_from", goodsShop.getShopName() + "#" + tbOrder.getOrderSequence());
-        body.put("order_time", tbOrder.getPayTime());
-        body.put("customer_name", address.getUserName());
-        body.put("customer_tel", address.getUserPhone());
-        body.put("customer_address", address.getAddressDetail());
-        body.put("customer_tag", address.getLng() + "," + address.getLat());
-        body.put("order_no", tbOrder.getOrderNumber());
-        body.put("order_price", tbOrder.getPayMoney());
+        JSONObject body = new JSONObject();
+        String shopId = tbOrder.getShopId()+"";
+        if (ObjectUtils.isNotEmpty(shopId)) {
+            try {
+                shopId = URLEncoder.encode(shopId, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("shop_id", shopId);
+
+        String shopName = goodsShop.getShopName();
+        if (ObjectUtils.isNotEmpty(shopName)) {
+            try {
+                shopName = URLEncoder.encode(shopName, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            shopName=shopName.replaceAll("\\+","-");
+        }
+        body.put("shop_name", shopName);
+
+        String phone = goodsShop.getPhone();
+        if (ObjectUtils.isNotEmpty(phone)) {
+            try {
+                phone = URLEncoder.encode(phone, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("shop_tel", phone);
+
+
+        String detailedAddress = goodsShop.getDetailedAddress();
+        if (ObjectUtils.isNotEmpty(detailedAddress)) {
+            try {
+                detailedAddress = URLEncoder.encode(detailedAddress, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            detailedAddress=detailedAddress.replaceAll("\\+","-");
+        }
+        body.put("shop_address", detailedAddress);
+
+
+        String shopTag  =goodsShop.getShopLng() + "," + goodsShop.getShopLat();
+        if (ObjectUtils.isNotEmpty(detailedAddress)) {
+            try {
+                shopTag = URLEncoder.encode(shopTag, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("shop_tag", shopTag);
+
+
+//        将+变成-
+        String orderContent = stringBuilder.toString();
+        if (ObjectUtils.isNotEmpty(orderContent)) {
+            try {
+                orderContent = URLEncoder.encode(orderContent, "UTF-8");
+//                orderContent=orderContent.replaceAll("🦆","");
+//                orderContent=orderContent.replaceAll("(双拼)","");
+                System.out.println("orderContent = " + orderContent);
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            orderContent=orderContent.replaceAll("\\+","-");
+        }
+        body.put("order_content", orderContent);
+
+
+        String remark = tbOrder.getRemark();
+        if (ObjectUtils.isNotEmpty(remark)) {
+            try {
+                remark=remark.replaceAll("\\r\\n|\\n|\\r", " ");
+                remark = URLEncoder.encode(remark, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            remark=remark.replaceAll("\\+","-");
+        }
+        body.put("order_note", remark);
+
+        String orderSequence = tbOrder.getOrderSequence();
+        if (ObjectUtils.isNotEmpty(orderSequence)) {
+            try {
+                orderSequence =URLEncoder.encode(orderSequence, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("order_mark", orderSequence);
+
+
+        body.put("order_from", shopName+ "#" + orderSequence);
+
+
+        String payTime = tbOrder.getPayTime();
+        if (ObjectUtils.isNotEmpty(payTime)) {
+            try {
+                payTime = URLEncoder.encode(payTime, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("order_time", payTime);
+
+
+        String userName = address.getUserName();
+        if (ObjectUtils.isNotEmpty(userName)) {
+            try {
+                userName = URLEncoder.encode(userName, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+//            userName=userName.replaceAll("\\+","-");
+        }
+        body.put("customer_name", userName);
+
+        String userPhone = tbOrder.getPhone();
+        if (ObjectUtils.isNotEmpty(userPhone)) {
+            try {
+                userPhone = URLEncoder.encode(userPhone, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("customer_tel", userPhone);
+
+
+        String addressDetail = address.getAddressDetail();
+        if (ObjectUtils.isNotEmpty(addressDetail)) {
+            try {
+                addressDetail = URLEncoder.encode(addressDetail, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+
+//            addressDetail=addressDetail.replaceAll("\\+","-");
+        }
+        body.put("customer_address", addressDetail);
+
+
+        String customerTag=address.getLng() + "," + address.getLat();
+        if (ObjectUtils.isNotEmpty(customerTag)) {
+            try {
+                customerTag = URLEncoder.encode(customerTag, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("customer_tag", customerTag);
+
+
+        String orderNumber = tbOrder.getOrderNumber();
+        if (ObjectUtils.isNotEmpty(orderNumber)) {
+            try {
+                orderNumber = URLEncoder.encode(orderNumber, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("order_no", orderNumber);
+
+        String payMoney = tbOrder.getPayMoney().toPlainString();
+        if (ObjectUtils.isNotEmpty(payMoney)) {
+            try {
+                payMoney = URLEncoder.encode(payMoney, "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                throw new RuntimeException(e);
+            }
+        }
+        body.put("order_price",payMoney);
         body.put("pay_status", 0);
 
         log.info("body信息:" + body);
@@ -425,6 +587,7 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
         long currentTimeMillis = System.currentTimeMillis();
         long currentTimeSeconds = currentTimeMillis / 1000;
         String timestamp = String.valueOf(currentTimeSeconds);
+        log.info("timestamp: "+timestamp);
 //               唯一标识符
         String ticket = "83f0ff99-7c8e-47e8-8802-bd3754414a52";
 //               团队token
@@ -432,8 +595,76 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
 //               开发者中心的开发密钥
         String devKey = "31RRHA4O165VFN9W2DAPDYDH8N83BT12";
 
+        JSONObject body2 = new JSONObject();
+//        String shopId = tbOrder.getShopId()+"";
+        body2.put("shop_id", tbOrder.getShopId()+"");
+
+//        String shopName = goodsShop.getShopName();
+        body2.put("shop_name", goodsShop.getShopName());
+
+//        String phone = goodsShop.getPhone();
+        body2.put("shop_tel", goodsShop.getPhone());
+
+//        String detailedAddress = goodsShop.getDetailedAddress();
+        body2.put("shop_address", goodsShop.getDetailedAddress());
+
+
+//        String shopTag  =goodsShop.getShopLng() + "," + goodsShop.getShopLat();
+        body2.put("shop_tag", goodsShop.getShopLng() + "," + goodsShop.getShopLat());
+
+
+//        将+变成-
+//        String orderContent = stringBuilder.toString();
+        body2.put("order_content", stringBuilder.toString());
+
+
+        String remark2 = tbOrder.getRemark();
+        if (ObjectUtils.isNotEmpty(remark2)) {
+            remark2=remark2.replaceAll("\\r\\n|\\n|\\r", " ");
+
+            // 方法2:使用Java 8+的\\R正则表达式;
+        }
+        body2.put("order_note", remark2);
+
+//        String orderSequence = tbOrder.getOrderSequence();
+        body2.put("order_mark", tbOrder.getOrderSequence());
+
+
+        body2.put("order_from", goodsShop.getShopName()+ "#" + tbOrder.getOrderSequence());
+
+
+//        String payTime = tbOrder.getPayTime();
+
+        body2.put("order_time", tbOrder.getPayTime());
+
+
+//        String userName = address.getUserName();
+
+        body2.put("customer_name", address.getUserName());
+
+//        String userPhone = address.getUserPhone();
+
+        body2.put("customer_tel", tbOrder.getPhone());
+
+
+//        String addressDetail = address.getAddressDetail();
+        body2.put("customer_address", address.getAddressDetail());
+
+
+//        String customerTag=address.getLng() + "," + address.getLat();
+        body2.put("customer_tag", address.getLng() + "," + address.getLat());
+
+
+//        String orderNumber = tbOrder.getOrderNumber();
+
+        body2.put("order_no", tbOrder.getOrderNumber());
+
+//        String payMoney = tbOrder.getPayMoney().toPlainString();
+        body2.put("order_price",tbOrder.getPayMoney().toPlainString());
+        body2.put("pay_status", 0);
+        log.info("body2信息:" + body2);
 //               获取签名
-        String sign = com.sqx.common.utils.SignUtil.getSign(body.toString(), devKey, teamToken, ticket, currentTimeSeconds, 1);
+        String sign = SignUtil.getSign(body2.toString(), devKey, teamToken, ticket, currentTimeSeconds, 1);
         String responseBody="";
         try {
             log.info("创建快跑者订单");
@@ -448,6 +679,7 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
             log.info("创建结果:"+responseBody);
         }catch (Exception e){
             e.printStackTrace();
+//            throw new RuntimeException("responseBody");
         }
         return responseBody;
     }

+ 26 - 3
src/main/java/com/sqx/modules/lovers/controller/LoversSetOrderController.java

@@ -2,17 +2,23 @@ package com.sqx.modules.lovers.controller;
 
 import com.sqx.common.utils.PageUtils;
 import com.sqx.common.utils.Result;
-import com.sqx.modules.app.annotation.Login;
+import com.sqx.modules.lovers.dto.LoversSetOrderDeliveryInfoModifyDTO;
 import com.sqx.modules.lovers.dto.LoversSetOrderQueryDTO;
 import com.sqx.modules.lovers.service.LoversSetOrderInfoService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.util.List;
 
 @Api(tags = {"管理端-情侣套餐订单"})
 @RestController
@@ -22,11 +28,28 @@ public class LoversSetOrderController {
 
     private final LoversSetOrderInfoService loversSetOrderInfoService;
 
-    @Login
-    @ApiOperation("用户端订单分页")
+    @ApiOperation("管理端端订单分页")
     @GetMapping("pages")
     public Result pages(@Valid LoversSetOrderQueryDTO queryDTO){
         PageUtils pageUtils = loversSetOrderInfoService.orderPage(queryDTO);
         return Result.success().put("data", pageUtils);
     }
+
+    @ApiOperation("删除订单")
+    @DeleteMapping("{orderId}")
+    public Result deleteOrder(@PathVariable Long orderId) {
+        loversSetOrderInfoService.deleteOrder(orderId);
+
+        return Result.success();
+    }
+
+    @ApiOperation("配送单修改")
+    @PutMapping("delivery-info/{orderId}")
+    public Result updateDeliveryInfo(@PathVariable Long orderId,
+                                     @Valid @NotNull(message = "修改信息不能为空") @Size(message = "修改信息不能为空")
+                                     List<LoversSetOrderDeliveryInfoModifyDTO> deliveryInfoModifyList) {
+        loversSetOrderInfoService.updateDeliveryInfo(orderId, deliveryInfoModifyList);
+
+        return Result.success();
+    }
 }

+ 3 - 9
src/main/java/com/sqx/modules/lovers/controller/app/AppLoversSetOrderController.java

@@ -11,13 +11,7 @@ import com.sqx.modules.pay.vo.WechatTransactionsParamVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestAttribute;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotNull;
@@ -67,7 +61,7 @@ public class AppLoversSetOrderController {
 
     @Login
     @ApiOperation("用户删除订单")
-    @DeleteMapping("{orderId}")
+    @GetMapping("{orderId}")
     public Result deleteOrder(@RequestAttribute Long userId, @PathVariable Long orderId) {
         loversSetOrderInfoService.userDeleteOrder(userId, orderId);
 
@@ -76,7 +70,7 @@ public class AppLoversSetOrderController {
 
     @Login
     @ApiOperation("配送单修改")
-    @PutMapping("delivery-info/{orderId}")
+    @PostMapping("delivery-info/{orderId}")
     public Result updateDeliveryInfo(@RequestAttribute Long userId,
                                      @PathVariable Long orderId,
                                      @Valid @NotNull(message = "修改信息不能为空") @Size(message = "修改信息不能为空")

+ 13 - 0
src/main/java/com/sqx/modules/lovers/service/LoversSetOrderInfoService.java

@@ -61,10 +61,23 @@ public interface LoversSetOrderInfoService extends IService<LoversSetOrderInfo>
     void userDeleteOrder(Long userId, Long orderId);
 
     /**
+     * 删除订单(管理员)
+     * @param orderId 订单id
+     */
+    void deleteOrder(Long orderId);
+
+    /**
      * 修改配送单信息
      * @param userId 用户id
      * @param orderId 订单id
      * @param deliveryInfoModifyList 待修改配送单信息
      */
     void updateDeliveryInfo(Long userId, Long orderId, List<LoversSetOrderDeliveryInfoModifyDTO> deliveryInfoModifyList);
+
+    /**
+     * 修改配送单信息(管理员)
+     * @param orderId 订单id
+     * @param deliveryInfoModifyList 待修改配送单信息
+     */
+    void updateDeliveryInfo(Long orderId, List<LoversSetOrderDeliveryInfoModifyDTO> deliveryInfoModifyList);
 }

+ 27 - 1
src/main/java/com/sqx/modules/lovers/service/impl/LoversSetOrderInfoServiceImpl.java

@@ -1,6 +1,7 @@
 package com.sqx.modules.lovers.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -41,7 +42,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.RoundingMode;
-import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
@@ -160,11 +160,37 @@ public class LoversSetOrderInfoServiceImpl extends ServiceImpl<LoversSetOrderInf
     }
 
     @Override
+    public void deleteOrder(Long orderId) {
+        LoversSetOrderInfo orderInfo = getById(orderId);
+
+        String activeStatus = orderInfo.getActiveStatus();
+        if (!StrUtil.equals(activeStatus, "0")) {
+            throw new SqxException("当前状态下订单不能被删除!");
+        }
+
+        removeById(orderId);
+    }
+
+    @Override
     @Transactional
     public void updateDeliveryInfo(Long userId, Long orderId, List<LoversSetOrderDeliveryInfoModifyDTO> deliveryInfoModifyList) {
         LoversSetOrderInfo orderInfo = getById(orderId);
         validateOrderAccess(orderInfo, userId);
 
+        doUpdateDeliveryInfo(orderId, deliveryInfoModifyList);
+    }
+
+    @Override
+    @Transactional
+    public void updateDeliveryInfo(Long orderId, List<LoversSetOrderDeliveryInfoModifyDTO> deliveryInfoModifyList) {
+        doUpdateDeliveryInfo(orderId, deliveryInfoModifyList);
+    }
+
+    private void doUpdateDeliveryInfo(Long orderId, List<LoversSetOrderDeliveryInfoModifyDTO> deliveryInfoModifyList) {
+        if (CollectionUtil.isEmpty(deliveryInfoModifyList)) {
+            throw new SqxException("配送信息不能为空");
+        }
+
         List<LoversSetOrderDeliveryInfo> oldInfoList = loversSetOrderDeliveryInfoService.getByOrderId(orderId);
         Map<Long, LoversSetOrderDeliveryInfo> oldInfoMap = oldInfoList.stream().collect(Collectors.toMap(LoversSetOrderDeliveryInfo::getId, Function.identity()));
 

+ 0 - 21
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -1830,27 +1830,6 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
             // 生成跑腿订单
             tbIndentService.insertIndent(tbOrder);
 
-            //            创建快跑者订单
-            log.info("第一创建快跑者订单");
-            String responseBody = creatSpeedRunnerOrder(tbOrder);
-            if (ObjectUtils.isNotEmpty(responseBody)) {
-                com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(responseBody);
-                log.info("jsonObject = " + jsonObject);
-                Integer code = jsonObject.getInteger("code");
-                if (code!=200) {
-                    String message = jsonObject.getString("message");
-                    if (!"该订单已存在,请勿重复提交".equals(message)) {
-                        log.info("创建快跑者订单的返回信息:"+message);
-                        log.info("第二次创建");
-                        creatSpeedRunnerOrder(tbOrder);
-                    }
-                }
-            }else {
-                log.info("创建快跑者订单的返回信息为空,第二次创建");
-                creatSpeedRunnerOrder(tbOrder);
-            }
-
-
             //设置小程序消息推送
             CommonInfo one = commonInfoService.findOne(269);
             List<String> msgList = new ArrayList<>();

+ 6 - 0
src/main/java/com/sqx/modules/sys/service/impl/SysUserServiceImpl.java

@@ -158,6 +158,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUserEntity> i
 		this.updateById(user);
 	}
 
+	public static void main(String[] args) {
+		String s = new Sha256Hash("12345", "oBha33dmgCyngM5Sbw63").toHex();
+		System.out.println("s = " + s);
+		System.out.println("s = " + "b56fe1b39fbeb4a7d72d298ecd541cd7f2ceac43f0258146d674016b5c42bfa1");
+	}
+
 	@Override
 	@Transactional
 	public void updateShop(SysUserEntity user) {

+ 1 - 1
src/main/java/com/sqx/modules/utils/fieYun/FeiYunUtils.java

@@ -1520,7 +1520,7 @@ public class FeiYunUtils {
                 stringBuilder.append("<BR>");
                 //String returnNo = getDigitBarCode();
                 //sb.append("<BC128_C>"+returnNo+"</BC128_C>");
-                stringBuilder.append("<CB><QR>").append(tbOrder.getOrderId()).append("</QR></CB>");
+                stringBuilder.append("<CB><QR>").append(tbOrder.getOrderNumber()).append("</QR></CB>");
                 stringBuilder.append("<CB>收单码:").append(tbOrder.getOrderId()).append("</CB>");
                 stringBuilder.append("<BR>").append("<BR>").append("<BR>");
                 stringBuilder.append("<CUT>");

+ 1 - 1
src/main/resources/mapper/lovers/LoversSetOrderInfoDao.xml

@@ -81,7 +81,7 @@
             dl.delivery_status
         FROM
             lovers_set_order_info o
-            LEFT JOIN lovers_set_order_detail d ON o.id = d.lovers_set_order_id
+            LEFT JOIN lovers_set_order_detail d ON o.id = d.lovers_set_order_info_id
             LEFT JOIN lovers_set_order_delivery_info dl ON o.id = dl.lovers_set_order_id
         WHERE
             o.del_flag = 0