Kaynağa Gözat

创建情侣表数据

liu 10 ay önce
ebeveyn
işleme
85686a8ab5

+ 1 - 0
db/update_250822.sql

@@ -0,0 +1 @@
+ALTER TABLE tb_order ADD trade_no varchar(30)  COMMENT '快跑者回调订单号';

+ 193 - 0
src/main/java/com/sqx/modules/errand/service/impl/TbIndentServiceImpl.java

@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.gson.Gson;
@@ -19,6 +20,7 @@ import com.sqx.common.utils.PageUtils;
 import com.sqx.common.utils.Result;
 import com.sqx.modules.address.dao.AddressDao;
 import com.sqx.modules.address.entity.Address;
+import com.sqx.modules.address.service.AddressService;
 import com.sqx.modules.app.dao.UserDao;
 import com.sqx.modules.app.entity.UserEntity;
 import com.sqx.modules.app.entity.UserMoneyDetails;
@@ -52,6 +54,7 @@ import com.sqx.modules.goods.dao.GoodsShopDao;
 import com.sqx.modules.goods.dao.GoodsShopRelevancyDao;
 import com.sqx.modules.goods.entity.GoodsShop;
 import com.sqx.modules.goods.entity.GoodsShopRelevancy;
+import com.sqx.modules.goods.service.GoodsShopService;
 import com.sqx.modules.message.entity.MessageInfo;
 import com.sqx.modules.message.service.MessageService;
 import com.sqx.modules.order.dao.OrderGoodsDao;
@@ -68,6 +71,11 @@ import com.sqx.modules.shop.service.ShopMessageService;
 import com.sqx.modules.utils.HttpClientUtil;
 import com.sqx.modules.utils.SenInfoCheckUtil;
 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.gavaghan.geodesy.Ellipsoid;
 import org.gavaghan.geodesy.GlobalCoordinates;
 import org.redisson.api.RLock;
@@ -83,6 +91,7 @@ import org.springframework.transaction.support.DefaultTransactionDefinition;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
@@ -146,6 +155,12 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
     @Resource
     private PlatformTransactionManager transactionManager;
 
+    @Autowired
+    private GoodsShopService goodsShopService;
+
+    @Autowired
+    private AddressService addressService;
+
     @Override
     public TbIndent findIndentByPayOrdersNo(String ordersNo) {
         return baseMapper.selectOne(new QueryWrapper<TbIndent>().eq("pay_orders_no", ordersNo));
@@ -326,9 +341,131 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
         tbIndent.setUserId(order.getUserId());
         tbIndent.setShopId(order.getShopId());
         baseMapper.insert(tbIndent);
+
+        //            创建快跑者订单
+        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 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);
+            String skuMessage = orderGoods.getSkuMessage();
+            String goodsName = orderGoods.getGoodsName();
+            if (i == 0) {
+                stringBuilder.append(goodsName).append(": ").append(skuMessage);
+            } else {
+                stringBuilder.append(",").append(goodsName).append(":").append(skuMessage);
+            }
+        }
+//               获取用户收货地址
+        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());
+        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);
+//               唯一标识符
+        String ticket = "83f0ff99-7c8e-47e8-8802-bd3754414a52";
+//               团队token
+        String teamToken = "Q444DMV4LT8WSGRW";
+//               开发者中心的开发密钥
+        String devKey = "31RRHA4O165VFN9W2DAPDYDH8N83BT12";
+
+//               获取签名
+        String sign = com.sqx.common.utils.SignUtil.getSign(body.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();
+        }
+        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;
+    }
+
+
     //根据双方经纬度计算距离
     @Override
     public Result distance(double ol, double od, double dl, double dd) {
@@ -1229,6 +1366,24 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
             newIndent.setIndentId(tbIndent.getIndentId());
             newIndent.setIndentState("10");
             tbIndentDao.updateById(newIndent);
+
+//            获取订单的快跑者订单
+            TbOrder tbOrder = appOrderService.getOne(new QueryWrapper<TbOrder>().eq("order_number", indentNumber));
+            if (ObjectUtils.isNotEmpty(tbOrder)&&ObjectUtils.isNotEmpty(tbOrder.getTradeNo())) {
+                //            撤销快跑者订单
+                log.info("第一次撤销快跑者订单");
+                String responseBody = cancelSpeedRunnerOrder(tbOrder.getTradeNo());
+                if (ObjectUtils.isNotEmpty(responseBody)) {
+                    JSONObject jsonObject = JSONObject.parseObject(responseBody);
+                    Integer code = jsonObject.getInteger("code");
+                    if (code!=200) {
+                        log.info("第二次撤销快跑者订单");
+                        cancelSpeedRunnerOrder(tbOrder.getTradeNo());
+                    }
+                }
+
+            }
+
         }
     }
 
@@ -1484,6 +1639,44 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
         }
     }
 
+    public String cancelSpeedRunnerOrder(String tradeNo){
+        com.alibaba.fastjson.JSONObject body = new com.alibaba.fastjson.JSONObject();
+        body.put("trade_no",tradeNo);
+        log.info("body信息:" + body);
+
+//               版本
+        String version = "1";
+//               时间戳
+        long currentTimeMillis = System.currentTimeMillis();
+        long currentTimeSeconds = currentTimeMillis / 1000;
+        String timestamp = String.valueOf(currentTimeSeconds);
+//               唯一标识符
+        String ticket = "83f0ff99-7c8e-47e8-8802-bd3754414a52";
+//               团队token
+        String teamToken = "Q444DMV4LT8WSGRW";
+//               开发者中心的开发密钥
+        String devKey = "31RRHA4O165VFN9W2DAPDYDH8N83BT12";
+
+//               获取签名
+        String sign = com.sqx.common.utils.SignUtil.getSign(body.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/cancelOrder");
+            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();
+        }
+        return responseBody;
+    }
+
     @Override
     public Result userEvaluate(ErrandEvaluate errandEvaluate) {
         errandEvaluateDao.insert(errandEvaluate);

+ 29 - 0
src/main/java/com/sqx/modules/lovers/entity/LoversSetContentDetail.java

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 @Data
 @ApiModel("lovers_set_content_detail")
@@ -16,4 +17,32 @@ public class LoversSetContentDetail implements Serializable {
     @TableId(type = IdType.AUTO)
     @ApiModelProperty("主键id")
     private Long id;
+
+    @ApiModelProperty("删除标识;0未删除、1已删除")
+    private String delFlag;
+
+    @ApiModelProperty("情侣套餐内容id")
+    private Long loversSetContentId;
+
+    @ApiModelProperty("商品id")
+    private Long goodsId;
+
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+
+    @ApiModelProperty("店铺id")
+    private Long shopId;
+
+    @ApiModelProperty("店铺名称")
+    private String shopName;
+
+    @ApiModelProperty("数量")
+    private Integer num;
+
+    @ApiModelProperty("价格")
+    private BigDecimal price;
+
+    @ApiModelProperty("原价")
+    private BigDecimal originalPrice;
+
 }

+ 28 - 0
src/main/java/com/sqx/modules/lovers/entity/LoversSetMenstrualPeriodSetting.java

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 @Data
 @ApiModel("lovers_set_menstrual_period_setting")
@@ -16,4 +17,31 @@ public class LoversSetMenstrualPeriodSetting implements Serializable {
     @TableId(type = IdType.AUTO)
     @ApiModelProperty("主键id")
     private Long id;
+
+    @ApiModelProperty("删除标识;0未删除、1已删除")
+    private String delFlag;
+
+    @ApiModelProperty("用户id")
+    private Long userId;
+
+    @ApiModelProperty("持续天数")
+    private Integer durationDays;
+
+    @ApiModelProperty("间隔天数")
+    private Integer intervalDays;
+
+    @ApiModelProperty("上一次月经开始时间")
+    private String lastStartDate;
+
+    @ApiModelProperty("上一次月经结束时间")
+    private String lastEndDate;
+
+    @ApiModelProperty("预计下一次月经开始时间")
+    private String nextStartDateOfExpect;
+
+    @ApiModelProperty("预计下一次月经结束时间")
+    private String nextEndDateOfExpect;
+
+    @ApiModelProperty("创建时间")
+    private String create_date;
 }

+ 15 - 0
src/main/java/com/sqx/modules/lovers/entity/LoversSetOrderDeliveryInfo.java

@@ -16,4 +16,19 @@ public class LoversSetOrderDeliveryInfo implements Serializable {
     @TableId(type = IdType.AUTO)
     @ApiModelProperty("主键id")
     private Long id;
+
+    @ApiModelProperty("情侣套餐订单id")
+    private Long loversSetOrderId;
+
+    @ApiModelProperty("情侣套餐订单详情id")
+    private Long loversSetOrderDetailId;
+
+    @ApiModelProperty("预计配送时间")
+    private String deliveryTimeOfExpect;
+
+    @ApiModelProperty("配送单id(跑腿订单id)")
+    private Long deliveryOrderId;
+
+    @ApiModelProperty("状态;1等待生成配送单、2已生成配送单、3已取消")
+    private String deliveryStatus;
 }

+ 25 - 0
src/main/java/com/sqx/modules/lovers/entity/LoversSetOrderDetail.java

@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 @Data
 @ApiModel("lovers_set_order_detail")
@@ -16,4 +17,28 @@ public class LoversSetOrderDetail implements Serializable {
     @TableId(type = IdType.AUTO)
     @ApiModelProperty("主键id")
     private Long id;
+
+    @ApiModelProperty("情侣套餐订单id")
+    private String loversSetOrderInfoId;
+
+    @ApiModelProperty("商品id")
+    private Long goodsId;
+
+    @ApiModelProperty("商品名称")
+    private String goodsName;
+
+    @ApiModelProperty("店铺id")
+    private Long shopId;
+
+    @ApiModelProperty("店铺名称")
+    private String shopName;
+
+    @ApiModelProperty("数量")
+    private Integer num;
+
+    @ApiModelProperty("价格")
+    private BigDecimal price;
+
+    @ApiModelProperty("原价")
+    private BigDecimal originalPrice;
 }

+ 2 - 0
src/main/java/com/sqx/modules/lovers/entity/LoversSetOrderInfo.java

@@ -16,4 +16,6 @@ public class LoversSetOrderInfo implements Serializable {
     @TableId(type = IdType.AUTO)
     @ApiModelProperty("主键id")
     private Long id;
+
+
 }

+ 12 - 0
src/main/java/com/sqx/modules/lovers/entity/LoversSetRule.java

@@ -16,4 +16,16 @@ public class LoversSetRule implements Serializable {
     @TableId(type = IdType.AUTO)
     @ApiModelProperty("主键id")
     private Long id;
+
+    @ApiModelProperty("删除标识;0未删除、1已删除")
+    private String delFlag;
+
+    @ApiModelProperty("规则名称")
+    private String name;
+
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+    @ApiModelProperty("规则内容")
+    private String content;
 }

+ 3 - 0
src/main/java/com/sqx/modules/order/entity/TbOrder.java

@@ -309,4 +309,7 @@ public class TbOrder implements Serializable {
 
     @ApiModelProperty("身份证号")
     private String idCard;
+
+    @ApiModelProperty("快跑者回调订单号")
+    private String tradeNo;
 }

+ 1 - 1
src/main/resources/application-dev.yml

@@ -115,7 +115,7 @@ secure-api:
     local-date-time-format: yyyy-MM-dd HH:mm:ss
 
 mp:
-    temp: true
+    temp: false
 sftp:
     username: export
     password: Waimai2024#

+ 1 - 1
src/main/resources/mapper/order/OrderMapper.xml

@@ -552,7 +552,7 @@
                ti.indent_number     as indentNumber,
                ti.rider_user_id     as riderUserId,
                ti.indent_state     as indentState,
-               tu.nick_name         as riderNickName,
+               tu.user_name         as riderNickName,
                tu.avatar            as riderAvatar,
                tu.phone             as riderPhone,
                e.evaluate_message   as evaluateMessage,