update:订单处理逻辑调整
This commit is contained in:
parent
324df6b903
commit
f5f6e45f43
|
@ -1,22 +1,15 @@
|
|||
package cn.iocoder.yudao.module.haoka.service.orderCatch;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.haoka.controller.admin.onsaleproduct.vo.OnSaleProductPreOrderRespVO;
|
||||
import cn.iocoder.yudao.module.haoka.controller.admin.orderCatch.po.Message;
|
||||
import cn.iocoder.yudao.module.haoka.controller.admin.orderCatch.vo.OrderCatchRepVO;
|
||||
import cn.iocoder.yudao.module.haoka.controller.admin.ordersynclog.vo.OrderSyncLogPageReqVO;
|
||||
import cn.iocoder.yudao.module.haoka.controller.admin.ordersynclog.vo.OrderSyncLogSaveReqVO;
|
||||
import cn.iocoder.yudao.module.haoka.dal.dataobject.onsaleproduct.OnSaleProductDO;
|
||||
import cn.iocoder.yudao.module.haoka.dal.dataobject.orders.OrdersDO;
|
||||
import cn.iocoder.yudao.module.haoka.dal.dataobject.ordersynclog.OrderSyncLogDO;
|
||||
import cn.iocoder.yudao.module.haoka.dal.mysql.onsaleproduct.OnSaleProductMapper;
|
||||
import cn.iocoder.yudao.module.haoka.dal.mysql.orders.OrdersMapper;
|
||||
import cn.iocoder.yudao.module.haoka.service.onsaleproduct.OnSaleProductService;
|
||||
import cn.iocoder.yudao.module.haoka.service.ordersynclog.OrderSyncLogService;
|
||||
import cn.iocoder.yudao.module.haoka.service.ordersynclog.OrderSyncLogServiceImpl;
|
||||
import cn.iocoder.yudao.module.haoka.utils.GroupListUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.doudian.open.api.order_batchDecrypt.OrderBatchDecryptRequest;
|
||||
|
@ -41,7 +34,6 @@ import com.doudian.open.core.AccessToken;
|
|||
import com.doudian.open.core.AccessTokenBuilder;
|
||||
import com.doudian.open.core.GlobalConfig;
|
||||
import com.doudian.open.gson.Gson;
|
||||
import com.doudian.open.gson.JsonSyntaxException;
|
||||
import com.doudian.open.msg.refund_RefundAgreed.param.RefundRefundAgreedParam;
|
||||
import com.doudian.open.msg.refund_RefundCreated.param.RefundRefundCreatedParam;
|
||||
import com.doudian.open.msg.refund_ReturnApplyAgreed.param.RefundReturnApplyAgreedParam;
|
||||
|
@ -52,14 +44,8 @@ import com.doudian.open.utils.JsonUtil;
|
|||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
|
@ -112,186 +98,43 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
|
|||
// 200 doudian_refund_RefundCreated
|
||||
// 买家发起售后申请消息
|
||||
RefundRefundCreatedParam refundRefundCreatedParam = gson.fromJson(message.getData()+"", RefundRefundCreatedParam.class);
|
||||
Long pId = refundRefundCreatedParam.getPId();
|
||||
// 更新订单取消
|
||||
List<OrdersDO> ordersDOS = ordersMapper.selectList(new LambdaQueryWrapperX<OrdersDO>().eq(OrdersDO::getRealSourceId, pId).eq(OrdersDO::getDeleted, 0));
|
||||
if(CollectionUtil.isNotEmpty(ordersDOS)){
|
||||
OrdersDO ordersDO = ordersDOS.get(0);
|
||||
ordersDO.setRefundStatus("200");
|
||||
ordersMapper.updateById(ordersDO);
|
||||
}
|
||||
} else if("201".equals(tag)) {
|
||||
// 201 doudian_refund_RefundAgreed
|
||||
// 同意退款消息
|
||||
RefundRefundAgreedParam refundRefundAgreedParam = gson.fromJson(message.getData()+"", RefundRefundAgreedParam.class);
|
||||
Long pId = refundRefundAgreedParam.getPId();
|
||||
List<OrdersDO> ordersDOS = ordersMapper.selectList(new LambdaQueryWrapperX<OrdersDO>().eq(OrdersDO::getRealSourceId, pId).eq(OrdersDO::getDeleted, 0));
|
||||
if(CollectionUtil.isNotEmpty(ordersDOS)){
|
||||
OrdersDO ordersDO = ordersDOS.get(0);
|
||||
ordersDO.setRefundStatus("300");
|
||||
ordersMapper.updateById(ordersDO);
|
||||
}
|
||||
} else if("202".equals(tag)) {
|
||||
// 202 doudian_refund_ReturnApplyAgreed
|
||||
// 同意退货申请消息
|
||||
RefundReturnApplyAgreedParam refundReturnApplyAgreedParam = gson.fromJson(message.getData()+"", RefundReturnApplyAgreedParam.class);
|
||||
Long pId = refundReturnApplyAgreedParam.getPId();
|
||||
List<OrdersDO> ordersDOS = ordersMapper.selectList(new LambdaQueryWrapperX<OrdersDO>().eq(OrdersDO::getRealSourceId, pId).eq(OrdersDO::getDeleted, 0));
|
||||
if(CollectionUtil.isNotEmpty(ordersDOS)){
|
||||
OrdersDO ordersDO = ordersDOS.get(0);
|
||||
ordersDO.setRefundStatus("300");
|
||||
ordersMapper.updateById(ordersDO);
|
||||
}
|
||||
} else if("101".equals(tag)) {
|
||||
// 101 doudian_trade_TradePaid
|
||||
// 订单支付/确认消息 抓取订单
|
||||
TradeTradePaidParam tradeTradePaidParam = gson.fromJson(message.getData()+"", TradeTradePaidParam.class);
|
||||
// 订单id
|
||||
Long pId = tradeTradePaidParam.getPId();
|
||||
// 根据订单id查询订单详情
|
||||
OrderOrderDetailData orderDetail = orderDetail(String.valueOf(pId));
|
||||
ShopOrderDetail order = orderDetail.getShopOrderDetail();
|
||||
// 所有的订单数据
|
||||
List<com.doudian.open.api.order_orderDetail.data.SkuOrderListItem> skuOrderList = order.getSkuOrderList();
|
||||
// 店铺信息
|
||||
Long shopId = order.getShopId();
|
||||
String shopName = order.getShopName();
|
||||
// 物流信息
|
||||
List<com.doudian.open.api.order_orderDetail.data.LogisticsInfoItem> logisticsInfo = order.getLogisticsInfo();
|
||||
/**
|
||||
* 需判断订单是否存在
|
||||
* 1.不存在 --- 新增
|
||||
* 2.存在 --- 更新
|
||||
* 2.1 需更新的数据: 订单状态 退款状态
|
||||
*/
|
||||
// 所有在售商品
|
||||
//List<OnSaleProductDO> onSaleProductDOS = onSaleProductMapper.selectList(new QueryWrapper<OnSaleProductDO>().eq("deleted", 0).eq("onSale", true));
|
||||
List<OnSaleProductDO> onSaleProductDOS = onSaleProductMapper.selectList(new LambdaQueryWrapperX<OnSaleProductDO>().eq(OnSaleProductDO::getDeleted, 0)
|
||||
.eq(OnSaleProductDO::getOnSale, true));
|
||||
// 所有在售商品sku
|
||||
List<String> skuList = onSaleProductDOS.stream().map(OnSaleProductDO::getSku).toList();
|
||||
// 买家备注
|
||||
String buyerWords = order.getBuyerWords();
|
||||
// 收件人电话
|
||||
// String postTel = order.getPostTel();
|
||||
String encryptPostTel = order.getEncryptPostTel();
|
||||
// 收件人姓名
|
||||
// String postReceiver = order.getPostReceiver();
|
||||
String encryptPostReceiver = order.getEncryptPostReceiver();
|
||||
// 收件人地址
|
||||
com.doudian.open.api.order_orderDetail.data.PostAddr postAddr = order.getPostAddr();
|
||||
// 省
|
||||
com.doudian.open.api.order_orderDetail.data.Province province = postAddr.getProvince();
|
||||
// 市
|
||||
com.doudian.open.api.order_orderDetail.data.City city = postAddr.getCity();
|
||||
// 区
|
||||
com.doudian.open.api.order_orderDetail.data.Town town = postAddr.getTown();
|
||||
// 街道/镇
|
||||
com.doudian.open.api.order_orderDetail.data.Street street = postAddr.getStreet();
|
||||
// String detail = postAddr.getDetail();
|
||||
String encryptDetail = postAddr.getEncryptDetail();
|
||||
//用户信息
|
||||
com.doudian.open.api.order_orderDetail.data.UserIdInfo userIdInfo = order.getUserIdInfo();
|
||||
// String idCardNo = userIdInfo.getIdCardNo();
|
||||
String encryptIdCardNo = userIdInfo.getEncryptIdCardNo();
|
||||
// String idCardName = userIdInfo.getIdCardName();
|
||||
String encryptIdCardName = userIdInfo.getEncryptIdCardName();
|
||||
List<OrdersDO> orderList = new ArrayList<>();
|
||||
List<OrdersDO> orderListAll = new ArrayList<>();
|
||||
for (com.doudian.open.api.order_orderDetail.data.SkuOrderListItem skuOrderListItem : skuOrderList) {
|
||||
String orderId = skuOrderListItem.getOrderId();
|
||||
OrdersDO ordersDO = new OrdersDO();
|
||||
// 售后信息
|
||||
com.doudian.open.api.order_orderDetail.data.AfterSaleInfo afterSaleInfo = skuOrderListItem.getAfterSaleInfo();
|
||||
// 售后状态 0-售后初始化, 6-售后申请, 7-售后退货中, 27-拒绝售后申请, 12-售后成功, 28-售后失败, 11-售后已发货, 29-退货后拒绝退款, 13-售后换货商家发货, 14-售后换货用户收货, 51-取消成功, 53-逆向交易完成
|
||||
Long afterSaleStatus = afterSaleInfo.getAfterSaleStatus();
|
||||
// 1-待退款;3-退款成功; 4-退款失败;当买家发起售后后又主动取消售后,此时after_sale_status=28并且refund_status=1的状态不变,不会流转至4状态;
|
||||
Long refundStatus = afterSaleInfo.getRefundStatus();
|
||||
// 商品sku 判断是否抓单
|
||||
String code = skuOrderListItem.getCode();
|
||||
if(skuList.contains(code)){
|
||||
for (OnSaleProductDO onSaleProductDO : onSaleProductDOS) {
|
||||
if(onSaleProductDO.getSku().equals(code)){
|
||||
// 注入产品生产方式 记录初始产品+接口相关信息
|
||||
OnSaleProductPreOrderRespVO onSaleProductPreOrder = onSaleProductService.getOnSaleProductPreOrder(onSaleProductDO.getId());
|
||||
ordersDO.setAutoType(onSaleProductPreOrder.getParentProduct().getAutoType());
|
||||
ordersDO.setOnSaleProductId(onSaleProductPreOrder.getId());
|
||||
ordersDO.setProductId(onSaleProductPreOrder.getParentProduct().getId());
|
||||
ordersDO.setSuperiorProductConfigId(onSaleProductPreOrder.getSuperiorProductConfigRespVO().getId());
|
||||
ordersDO.setSuperiorApiId(onSaleProductPreOrder.getSuperiorApiRespVO().getId());
|
||||
}
|
||||
}
|
||||
// 在售商品
|
||||
ordersDO.setSupplierProductSku(code);
|
||||
Long orderStatus = skuOrderListItem.getOrderStatus();
|
||||
// 1 待确认/待支付-订单创建完毕;105-已支付; 2-备货中; 101-部分发货; 3-已发货(全部发货);4- 已取消;5 已完成(已收货);
|
||||
Long HaokaOrderStatus;// 号卡订单状态
|
||||
Long HaokaOrderRefundStatus;// 号卡订单退款状态
|
||||
// 解析订单状态
|
||||
if(orderStatus == 105L){
|
||||
HaokaOrderStatus = 100L;
|
||||
ordersDO.setStatus(HaokaOrderStatus);
|
||||
}else if(orderStatus == 101L || orderStatus == 3L){
|
||||
HaokaOrderStatus = 500L;
|
||||
ordersDO.setStatus(HaokaOrderStatus);
|
||||
}else {
|
||||
// 更新订单退款状态 订单状态不变
|
||||
}
|
||||
ordersDO.setStatusName(skuOrderListItem.getOrderStatusDesc());
|
||||
// 解析售后状态
|
||||
if(0L == afterSaleStatus){
|
||||
// 未进入售后
|
||||
HaokaOrderRefundStatus = 800L;
|
||||
} else if(afterSaleStatus == 28L || refundStatus == 1L){
|
||||
// 未进入售后
|
||||
HaokaOrderRefundStatus = 800L;
|
||||
} else if(refundStatus == 3L){
|
||||
// 进入售后
|
||||
HaokaOrderRefundStatus = 300L;
|
||||
} else {
|
||||
// 进入售后
|
||||
HaokaOrderRefundStatus = 200L;
|
||||
}
|
||||
ordersDO.setRefundStatus(String.valueOf(HaokaOrderRefundStatus));
|
||||
// 获取计划手机号
|
||||
String productName = skuOrderListItem.getProductName();
|
||||
ordersDO.setSupplierProductName(productName);
|
||||
for (com.doudian.open.api.order_orderDetail.data.SpecItem specItem : skuOrderListItem.getSpec()) {
|
||||
String value = specItem.getValue();
|
||||
String planMobile = getPlanMobile(value);
|
||||
if(planMobile != null){
|
||||
ordersDO.setPlanMobile(planMobile);
|
||||
}
|
||||
}
|
||||
// 查询订单是否存在 不存在则新增,存在则更新
|
||||
List<OrdersDO> ordersDOS = ordersMapper.selectList(new QueryWrapper<OrdersDO>().eq("real_source_id", orderId).eq("deleted", 0));
|
||||
if(CollectionUtil.isNotEmpty(ordersDOS)){
|
||||
// 更新订单
|
||||
OrdersDO ordersDO1 = ordersDOS.get(0);
|
||||
ordersDO1.setRefundStatus(String.valueOf(HaokaOrderRefundStatus));
|
||||
ordersMapper.updateById(ordersDO1);
|
||||
}else {
|
||||
// 新增订单
|
||||
ordersDO.setShopId(String.valueOf(shopId));
|
||||
ordersDO.setShopName(shopName);
|
||||
ordersDO.setRoomId(skuOrderListItem.getRoomIdStr());
|
||||
// 真实订单
|
||||
ordersDO.setRealSourceId(orderId);
|
||||
ordersDO.setSourceId(orderId);
|
||||
// 买家备注
|
||||
ordersDO.setBuyerMemo(buyerWords);
|
||||
//证件信息
|
||||
// ordersDO.setIdCardNum(idCardNo);
|
||||
ordersDO.setEncryptIdCardNum(encryptIdCardNo);
|
||||
// ordersDO.setIdCardName(idCardName);
|
||||
ordersDO.setEncryptIdCardName(encryptIdCardName);
|
||||
// 收件人信息
|
||||
// ordersDO.setAddressMobile(postTel);
|
||||
ordersDO.setEncryptAddressMobile(encryptPostTel);
|
||||
// ordersDO.setAddressName(postReceiver);
|
||||
ordersDO.setEncryptAddressName(encryptPostReceiver);
|
||||
// 收件人地址 省
|
||||
ordersDO.setAddressProvince(province.getName());
|
||||
ordersDO.setAddressProvinceCode(province.getId());
|
||||
// 市
|
||||
ordersDO.setAddressCity(city.getName());
|
||||
ordersDO.setAddressCityCode(city.getId());
|
||||
// 区
|
||||
ordersDO.setAddressDistrict(town.getName());
|
||||
ordersDO.setAddressDistrictCode(town.getId());
|
||||
// 街道/镇
|
||||
ordersDO.setTown(street.getName());
|
||||
// 详细地址
|
||||
// ordersDO.setAddress(detail);
|
||||
ordersDO.setEncryptAddress(encryptDetail);
|
||||
orderList.add(ordersDO);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
orderListAll.addAll(orderList);
|
||||
ordersMapper.insertBatch(orderList);
|
||||
// 执行解密,解密后更新数据库
|
||||
for (List<OrdersDO> ordersDOS : GroupListUtil.groupList(orderListAll, 50)) {
|
||||
batchDecryptOrderAndUpdate(ordersDOS);
|
||||
for (Long sId : tradeTradePaidParam.getSIds()) {
|
||||
orderToDataBase(sId);
|
||||
}
|
||||
} else if("106".equals(tag)) {
|
||||
// 106 doudian_trade_TradeCanceled
|
||||
|
@ -310,7 +153,21 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
|
|||
// 订单已支付待处理
|
||||
TradeTradePendingParam tradeTradePendingParam = gson.fromJson(message.getData()+"", TradeTradePendingParam.class);
|
||||
// 订单id
|
||||
Long pId = tradeTradePendingParam.getPId();
|
||||
for (Long sId : tradeTradePendingParam.getSIds()) {
|
||||
orderToDataBase(sId);
|
||||
}
|
||||
} else {
|
||||
// 未接入的消息类型
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(),e);
|
||||
log.error("订单解析执行报错,错误原因:{}",e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void orderToDataBase(Long pId) {
|
||||
// 根据订单id查询订单详情
|
||||
OrderOrderDetailData orderDetail = orderDetail(String.valueOf(pId));
|
||||
ShopOrderDetail order = orderDetail.getShopOrderDetail();
|
||||
|
@ -431,8 +288,8 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
|
|||
if(CollectionUtil.isNotEmpty(ordersDOS)){
|
||||
// 更新订单
|
||||
OrdersDO ordersDO1 = ordersDOS.get(0);
|
||||
ordersDO1.setRefundStatus(String.valueOf(HaokaOrderRefundStatus));
|
||||
ordersMapper.updateById(ordersDO1);
|
||||
ordersDO.setId(ordersDO1.getId());
|
||||
ordersMapper.updateById(ordersDO);
|
||||
}else {
|
||||
// 新增订单
|
||||
ordersDO.setShopId(String.valueOf(shopId));
|
||||
|
@ -478,15 +335,6 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
|
|||
for (List<OrdersDO> ordersDOS : GroupListUtil.groupList(orderListAll, 50)) {
|
||||
batchDecryptOrderAndUpdate(ordersDOS);
|
||||
}
|
||||
} else {
|
||||
// 未接入的消息类型
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(),e);
|
||||
log.error("订单解析执行报错,错误原因:{}",e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -615,8 +463,8 @@ public class DouDianOrderCatchServiceImpl implements OrderCatchService {
|
|||
if(CollectionUtil.isNotEmpty(ordersDOS)){
|
||||
// 更新订单
|
||||
OrdersDO ordersDO1 = ordersDOS.get(0);
|
||||
ordersDO1.setRefundStatus(String.valueOf(HaokaOrderRefundStatus));
|
||||
ordersMapper.updateById(ordersDO1);
|
||||
ordersDO.setId(ordersDO1.getId());
|
||||
ordersMapper.updateById(ordersDO);
|
||||
}else {
|
||||
// 新增订单
|
||||
ordersDO.setShopId(String.valueOf(shopId));
|
||||
|
|
Loading…
Reference in New Issue