From 1dfbb7fe90a76373af78cf391d25f286c8f766d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E9=BD=90?= <280645618@qq.com> Date: Fri, 14 Jun 2024 14:55:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84dou=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=8B=89=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qihang/common/utils/DateUtils.java | 24 +- open-api/dou-api/pom.xml | 6 + .../dou/controller/DouGoodsController.java | 5 +- .../dou/controller/OrderApiController.java | 263 ++++ .../qihang/dou/controller/OrderContoller.java | 58 + .../com/qihang/dou/domain/OmsDouOrder.java | 424 +++++++ .../qihang/dou/domain/OmsDouOrderItem.java | 283 +++++ .../qihang/dou/domain/SShopPullLasttime.java | 5 +- .../com/qihang/dou/domain/SShopPullLogs.java | 2 +- .../com/qihang/dou/domain/bo/DouOrderBo.java | 16 + .../qihang/dou/domain/bo/DouOrderPushBo.java | 8 + .../dou/mapper/OmsDouOrderItemMapper.java | 18 + .../qihang/dou/mapper/OmsDouOrderMapper.java | 18 + .../dou/service/OmsDouOrderItemService.java | 13 + .../dou/service/OmsDouOrderService.java | 26 + .../dou/service/SShopPullLasttimeService.java | 2 +- .../impl/OmsDouOrderItemServiceImpl.java | 22 + .../service/impl/OmsDouOrderServiceImpl.java | 156 +++ .../impl/SShopPullLasttimeServiceImpl.java | 13 +- .../src/main/resources/logback-spring.xml | 65 + .../mapper/OmsDouOrderItemMapper.xml | 83 ++ .../resources/mapper/OmsDouOrderMapper.xml | 120 ++ vue/src/api/dou/order.js | 28 +- vue/src/views/dou/goods/index.vue | 226 ---- vue/src/views/dou/order/index.vue | 1105 ----------------- vue/src/views/pdd/goods/index.vue | 226 ---- vue/src/views/sale/order/pull/index.vue | 2 +- vue/src/views/shop/dou/order/index.vue | 336 +++++ vue/src/views/shop/order_index.vue | 2 +- 29 files changed, 1970 insertions(+), 1585 deletions(-) create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/controller/OrderApiController.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/controller/OrderContoller.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouOrder.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouOrderItem.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouOrderBo.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouOrderPushBo.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouOrderItemMapper.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouOrderMapper.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouOrderItemService.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouOrderService.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouOrderItemServiceImpl.java create mode 100644 open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouOrderServiceImpl.java create mode 100644 open-api/dou-api/src/main/resources/logback-spring.xml create mode 100644 open-api/dou-api/src/main/resources/mapper/OmsDouOrderItemMapper.xml create mode 100644 open-api/dou-api/src/main/resources/mapper/OmsDouOrderMapper.xml delete mode 100644 vue/src/views/dou/goods/index.vue delete mode 100644 vue/src/views/dou/order/index.vue delete mode 100644 vue/src/views/pdd/goods/index.vue create mode 100644 vue/src/views/shop/dou/order/index.vue diff --git a/core/common/src/main/java/com/qihang/common/utils/DateUtils.java b/core/common/src/main/java/com/qihang/common/utils/DateUtils.java index 9511c8ad..3157d40c 100644 --- a/core/common/src/main/java/com/qihang/common/utils/DateUtils.java +++ b/core/common/src/main/java/com/qihang/common/utils/DateUtils.java @@ -140,7 +140,29 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); } - + /** + * 时间字符串转时间戳 + * @param format + * @param time 时间字符串 + * + * @return + */ + public static final long dateTimeStrToTimeStamp(String format, final String time) + { + try + { + if(format==null||format.equals("")){ + format = YYYY_MM_DD_HH_MM_SS; + } + Date date = new SimpleDateFormat(format).parse(time); + return date.getTime(); + } + catch (ParseException e) + { + e.printStackTrace(); + return 0; + } + } /** * 计算时间差 * diff --git a/open-api/dou-api/pom.xml b/open-api/dou-api/pom.xml index a67d31e7..f975ff03 100644 --- a/open-api/dou-api/pom.xml +++ b/open-api/dou-api/pom.xml @@ -33,6 +33,12 @@ system ${project.basedir}/libs/dou-api-0.3.jar + + + net.logstash.logback + logstash-logback-encoder + 7.4 + diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsController.java b/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsController.java index f022627c..6f2224b8 100644 --- a/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsController.java +++ b/open-api/dou-api/src/main/java/com/qihang/dou/controller/DouGoodsController.java @@ -12,8 +12,9 @@ import com.qihang.dou.service.OmsDouGoodsService; import com.qihang.dou.service.OmsDouGoodsSkuService; import com.qihang.security.common.BaseController; import lombok.AllArgsConstructor; +import lombok.extern.java.Log; import org.springframework.web.bind.annotation.*; - +@Log @RequestMapping("/goods") @RestController @AllArgsConstructor @@ -23,7 +24,7 @@ public class DouGoodsController extends BaseController { @RequestMapping(value = "/list", method = RequestMethod.GET) public TableDataInfo goodsList(OmsDouGoods bo, PageQuery pageQuery) { PageResult result = goodsService.queryPageList(bo, pageQuery); - + log.info("访问商品接口"); return getDataTable(result); } diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/controller/OrderApiController.java b/open-api/dou-api/src/main/java/com/qihang/dou/controller/OrderApiController.java new file mode 100644 index 00000000..1640d288 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/controller/OrderApiController.java @@ -0,0 +1,263 @@ +package com.qihang.dou.controller; + +import cn.qihangerp.open.dou.DouOrderApiHelper; +import cn.qihangerp.open.dou.DouTokenApiHelper; +import cn.qihangerp.open.dou.common.ApiResultVo; +import cn.qihangerp.open.dou.model.Token; +import cn.qihangerp.open.dou.model.order.Order; +import com.alibaba.fastjson2.JSONObject; +import com.qihang.common.common.AjaxResult; +import com.qihang.common.common.ResultVo; +import com.qihang.common.common.ResultVoEnum; +import com.qihang.common.enums.EnumShopType; +import com.qihang.common.enums.HttpStatus; +import com.qihang.common.mq.MqMessage; +import com.qihang.common.mq.MqType; +import com.qihang.common.mq.MqUtils; +import com.qihang.dou.domain.OmsDouOrder; +import com.qihang.dou.domain.OmsDouOrderItem; +import com.qihang.dou.domain.SShopPullLasttime; +import com.qihang.dou.domain.SShopPullLogs; +import com.qihang.dou.domain.bo.DouRequest; +import com.qihang.dou.service.OmsDouOrderService; +import com.qihang.dou.service.SShopPullLasttimeService; +import com.qihang.dou.service.SShopPullLogsService; +import lombok.AllArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 淘系订单更新 + */ +@AllArgsConstructor +@RestController +@RequestMapping("/order") +public class OrderApiController { + private static Logger log = LoggerFactory.getLogger(OrderApiController.class); + + private final OmsDouOrderService orderService; + private final DouApiHelper douApiHelper; +// private final MqUtils mqUtils; + private final SShopPullLogsService pullLogsService; + private final SShopPullLasttimeService pullLasttimeService; + /** + * 增量更新订单 + * @param req + * @ + * @throws + */ + @PostMapping("/pull_order") + @ResponseBody + public AjaxResult pullOrder(@RequestBody DouRequest req) throws Exception { + log.info("/**************增量拉取dou订单****************/"); + if (req.getShopId() == null || req.getShopId() <= 0) { + return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id"); + } + Date currDateTime = new Date(); + Long currTimeMillis = System.currentTimeMillis(); + + var checkResult = douApiHelper.checkBefore(req.getShopId()); + if (checkResult.getCode() != ResultVoEnum.SUCCESS.getIndex()) { + return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(),checkResult.getData()); + } + + String appKey = checkResult.getData().getAppKey(); + String appSecret = checkResult.getData().getAppSecret(); + Long douShopId = checkResult.getData().getSellerShopId(); + String accessToken = checkResult.getData().getAccessToken(); + + // 获取最后更新时间 + LocalDateTime startTime = null; + LocalDateTime endTime = null; + SShopPullLasttime lasttime = pullLasttimeService.getLasttimeByShop(req.getShopId(), "ORDER"); + if(lasttime == null){ + endTime = LocalDateTime.now(); + startTime = endTime.minusDays(1); + }else { + startTime = lasttime.getLasttime().minusHours(1);//取上次结束一个小时前 + Duration duration = Duration.between(startTime, LocalDateTime.now()); + long hours = duration.toHours(); + if (hours > 24) { + // 大于24小时,只取24小时 + endTime = startTime.plusHours(24); + } else { + endTime = LocalDateTime.now(); + } +// endTime = startTime.plusDays(1);//取24小时 +// if(endTime.isAfter(LocalDateTime.now())){ +// endTime = LocalDateTime.now(); +// } + } + String startTimeStr = startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + String endTimeStr = endTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + Long startTimestamp = startTime.toEpochSecond(ZoneOffset.ofHours(8)); + Long endTimestamp = endTime.toEpochSecond(ZoneOffset.ofHours(8)); + + String pullParams = "{startTime:"+startTimeStr+",endTime:"+endTimeStr+"}"; + ApiResultVo token = DouTokenApiHelper.getToken(appKey, appSecret,checkResult.getData().getSellerShopId()); + + if(token.getCode()==0) { + accessToken = token.getData().getAccessToken(); + }else{ + return AjaxResult.error(token.getMsg()); + } + + //获取 + ApiResultVo resultVo = DouOrderApiHelper.pullOrderList(startTimestamp, endTimestamp, 1, 20, appKey, appSecret, accessToken); + + if(resultVo.getCode() !=0 ){ + SShopPullLogs logs = new SShopPullLogs(); + logs.setShopId(req.getShopId()); + logs.setShopType(EnumShopType.DOU.getIndex()); + logs.setPullType("ORDER"); + logs.setPullWay("主动拉取订单"); + logs.setPullParams(pullParams); + logs.setPullResult(resultVo.getMsg()); + logs.setPullTime(currDateTime); + logs.setDuration(System.currentTimeMillis() - currTimeMillis); + pullLogsService.save(logs); + return AjaxResult.error("接口拉取错误:"+resultVo.getMsg()); + } + + + int insertSuccess = 0;//新增成功的订单 + int totalError = 0; + int hasExistOrder = 0;//已存在的订单数 + + //循环插入订单数据到数据库 + for (var gitem : resultVo.getList()) { + OmsDouOrder douOrder = new OmsDouOrder(); + BeanUtils.copyProperties(gitem, douOrder); + douOrder.setOrderPhaseList(JSONObject.toJSONString(gitem.getOrderPhaseList())); + douOrder.setEncryptPostAddress(gitem.getPostAddr().getEncryptDetail()); + douOrder.setProvinceName(gitem.getPostAddr().getProvince().getName()); + douOrder.setProvinceId(gitem.getPostAddr().getProvince().getId()); + douOrder.setCityName(gitem.getPostAddr().getCity().getName()); + douOrder.setCityId(gitem.getPostAddr().getCity().getId()); + douOrder.setTownName(gitem.getPostAddr().getTown().getName()); + douOrder.setTownId(gitem.getPostAddr().getTown().getId()); + douOrder.setStreetName(gitem.getPostAddr().getStreet().getName()); + douOrder.setStreetId(gitem.getPostAddr().getStreet().getId()); + douOrder.setMaskPostAddress(gitem.getMaskPostAddr().getDetail()); + douOrder.setLogisticsInfo(JSONObject.toJSONString(gitem.getLogisticsInfo())); + List items = new ArrayList<>(); + if (gitem.getSkuOrderList() != null) { + for (var i : gitem.getSkuOrderList()) { + OmsDouOrderItem item = new OmsDouOrderItem(); + BeanUtils.copyProperties(i, item); + item.setAfterSaleStatus(i.getAfterSaleInfo().getAfterSaleStatus()); + item.setAfterSaleType(i.getAfterSaleInfo().getAfterSaleType()); + item.setRefundStatus(i.getAfterSaleInfo().getRefundStatus()); + item.setSpec(JSONObject.toJSONString(i.getSpec())); + items.add(item); + } + douOrder.setItems(items); + } + + //插入订单数据 + var result = orderService.saveOrder(req.getShopId(), douOrder); + if (result.getCode() == ResultVoEnum.DataExist.getIndex()) { + //已经存在 + log.info("/**************主动更新dou订单:开始更新数据库:" + douOrder.getOrderId() + "存在、更新************开始通知****/"); +// mqUtils.sendApiMessage(MqMessage.build(EnumShopType.DOU, MqType.ORDER_MESSAGE,douOrder.getOrderId())); + hasExistOrder++; + } else if (result.getCode() == ResultVoEnum.SUCCESS.getIndex()) { + log.info("/**************主动更新dou订单:开始更新数据库:" + douOrder.getOrderId() + "不存在、新增************开始通知****/"); +// mqUtils.sendApiMessage(MqMessage.build(EnumShopType.DOU,MqType.ORDER_MESSAGE,douOrder.getOrderId())); + insertSuccess++; + } else { + log.info("/**************主动更新dou订单:开始更新数据库:" + douOrder.getOrderId() + "报错****************/"); + totalError++; + } + } + + if(lasttime == null){ + // 新增 + SShopPullLasttime insertLasttime = new SShopPullLasttime(); + insertLasttime.setShopId(req.getShopId()); + insertLasttime.setCreateTime(new Date()); + insertLasttime.setLasttime(endTime); + insertLasttime.setPullType("ORDER"); + pullLasttimeService.save(insertLasttime); + + }else { + // 修改 + SShopPullLasttime updateLasttime = new SShopPullLasttime(); + updateLasttime.setId(lasttime.getId()); + updateLasttime.setUpdateTime(new Date()); + updateLasttime.setLasttime(endTime); + pullLasttimeService.updateById(updateLasttime); + } + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); + SShopPullLogs logs = new SShopPullLogs(); + logs.setShopType(EnumShopType.DOU.getIndex()); + logs.setShopId(req.getShopId()); + logs.setPullType("ORDER"); + logs.setPullWay("主动拉取订单"); + logs.setPullParams(pullParams); + logs.setPullResult("{insert:"+insertSuccess+",update:"+hasExistOrder+",fail:"+totalError+"}"); + logs.setPullTime(currDateTime); + logs.setDuration(System.currentTimeMillis() - currTimeMillis); + pullLogsService.save(logs); + + String msg = "成功{startTime:"+startTime.format(df)+",endTime:"+endTime.format(df)+"}总共找到:" + resultVo.getTotalRecords() + "条订单,新增:" + insertSuccess + "条,添加错误:" + totalError + "条,更新:" + hasExistOrder + "条"; + log.info("/**************主动更新DOU订单:END:" + msg + "****************/"); + return AjaxResult.success(msg); + } + + + /** + * 更新单个订单 + * + * @param + * @return + * @throws + */ +// @RequestMapping("/pull_order_detail") +// @ResponseBody +// public AjaxResult getOrderPullDetail(@RequestBody PullRequest req) { +// log.info("/**************主动更新dou订单by number****************/"); +// if (req.getShopId() == null || req.getShopId() <= 0) { +// return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id"); +// } +// if (!StringUtils.hasText(req.getOrderId())) { +// return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,缺少orderId"); +// } +// +// var checkResult = apiCommon.checkBefore(req.getShopId()); +// if (checkResult.getCode() != HttpStatus.SUCCESS) { +// return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(), checkResult.getData()); +// } +// +// String appKey = checkResult.getData().getAppKey(); +// String appSecret = checkResult.getData().getAppSecret(); +// Long douShopId = checkResult.getData().getSellerId(); +// +// ResultVo resultVo = OrderApiHelper.pullOrderDetail( appKey, appSecret, douShopId,req.getOrderId()); +// if (resultVo.getCode() == ResultVoEnum.SUCCESS.getIndex() && resultVo.getData()!=null) { +// var result = orderService.saveOrder(req.getShopId(), resultVo.getData()); +// if (result.getCode() == ResultVoEnum.DataExist.getIndex()) { +// //已经存在 +// log.info("/**************主动更新dou订单:开始更新数据库:" + resultVo.getData().getId() + "存在、更新****************/"); +// mqUtils.sendApiMessage(MqMessage.build(EnumShopType.DOU, MqType.ORDER_MESSAGE,resultVo.getData().getOrderId())); +// } else if (result.getCode() == ResultVoEnum.SUCCESS.getIndex()) { +// log.info("/**************主动更新dou订单:开始更新数据库:" + resultVo.getData().getId() + "不存在、新增****************/"); +// mqUtils.sendApiMessage(MqMessage.build(EnumShopType.DOU,MqType.ORDER_MESSAGE,resultVo.getData().getOrderId())); +// } +// return AjaxResult.success(); +// } else { +// return AjaxResult.error(resultVo.getCode(), resultVo.getMsg()); +// } +// } +} diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/controller/OrderContoller.java b/open-api/dou-api/src/main/java/com/qihang/dou/controller/OrderContoller.java new file mode 100644 index 00000000..e935642e --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/controller/OrderContoller.java @@ -0,0 +1,58 @@ +package com.qihang.dou.controller; + +import com.alibaba.fastjson2.JSONObject; +import com.qihang.common.common.AjaxResult; +import com.qihang.common.common.PageQuery; +import com.qihang.common.common.PageResult; +import com.qihang.common.common.TableDataInfo; +import com.qihang.common.enums.EnumShopType; +import com.qihang.common.mq.MqMessage; +import com.qihang.common.mq.MqType; +import com.qihang.common.mq.MqUtils; +import com.qihang.dou.domain.OmsDouOrder; +import com.qihang.dou.domain.bo.DouOrderBo; +import com.qihang.dou.domain.bo.DouOrderPushBo; +import com.qihang.dou.service.OmsDouOrderService; +import com.qihang.security.common.BaseController; +import lombok.AllArgsConstructor; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.web.bind.annotation.*; + +@AllArgsConstructor +@RestController +@RequestMapping("/order") +public class OrderContoller extends BaseController { + private final OmsDouOrderService orderService; + private final KafkaTemplate kafkaTemplate; +// private final MqUtils mqUtils; + @RequestMapping(value = "/list", method = RequestMethod.GET) + public TableDataInfo goodsList(DouOrderBo bo, PageQuery pageQuery) { + PageResult result = orderService.queryPageList(bo, pageQuery); + + return getDataTable(result); + } + + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(orderService.queryDetailById(id)); + } + + /** + * 手动推送到系统 + * @param bo + * @return + */ + @PostMapping("/push_oms") + @ResponseBody + public AjaxResult pushOms(@RequestBody DouOrderPushBo bo) { + // TODO:需要优化消息格式 + if(bo!=null && bo.getIds()!=null) { + for(String id: bo.getIds()) { + kafkaTemplate.send(MqType.ORDER_MQ, JSONObject.toJSONString(MqMessage.build(EnumShopType.PDD, MqType.ORDER_MESSAGE,id))); +// mqUtils.sendApiMessage(MqMessage.build(EnumShopType.PDD, MqType.ORDER_MESSAGE, id)); + } + } + return success(); + } +} diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouOrder.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouOrder.java new file mode 100644 index 00000000..4c050647 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouOrder.java @@ -0,0 +1,424 @@ +package com.qihang.dou.domain; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; + +/** + * 抖店订单表 + * @TableName oms_dou_order + */ +@Data +public class OmsDouOrder implements Serializable { + /** + * + */ + private Long id; + + /** + * 店铺父订单号,抖店平台生成,平台下唯一; + */ + private String orderId; + + /** + * 订单层级,主订单是2级 + */ + private Integer orderLevel; + + /** + * 定金预售阶段单json + */ + private String orderPhaseList; + + /** + * 订单状态1 待确认/待支付(订单创建完毕)105 已支付 2 备货中 101 部分发货 3 已发货(全部发货)4 已取消5 已完成(已收货) + */ + private Integer orderStatus; + + /** + * 订单状态描述 + */ + private String orderStatusDesc; + + /** + * +订单的一些c端标签json + */ + private String orderTag; + + /** + * 【订单类型】 0、普通订单 2、虚拟商品订单 4、电子券(poi核销) 5、三方核销 + */ + private Integer orderType; + + /** + * 订单类型描述 + */ + private String orderTypeDesc; + + /** + * 具体某个小程序的ID + */ + private Integer appId; + + /** + * 抖音小程序ID + */ + private String openId; + + /** + * 小时达订单的接单状态 0-未接单;1-已接单;2-超时取消,或商家取消 + */ + private Integer acceptOrderStatus; + + /** + * 预约发货时间 + */ + private Integer appointmentShipTime; + + /** + * 作者(达人)承担金额(单位:分),订单参与活动和优惠中作者(达人)承担部分的总金额 + */ + private Integer authorCostAmount; + + /** + * 达人抖音号,样品订单场景下才会返回的申样达人信息; + */ + private String awemeId; + + /** + * 【下单端】 0、站外 1、火山 2、抖音 3、头条 4、西瓜 5、微信 6、值点app 7、头条lite 8、懂车帝 9、皮皮虾 11、抖音极速版 12、TikTok 13、musically 14、穿山甲 15、火山极速版 16、服务市场 26、番茄小说 27、UG教育营销电商平台 28、Jumanji 29、电商SDK + */ + private Integer bType; + + /** + * 下单端描述 + */ + private String bTypeDesc; + + /** + * 【下单场景】 0、未知 1、app内-原生 2、app内-小程序 3、H5 13、电商SDK-头条 35、电商SDK-头条lite + */ + private Integer subBType; + + /** + * 下单场景描述 + */ + private String subBTypeDesc; + + /** + * 【业务来源】 1 -鲁班 2 -小店 3 -好好学习 4 -ev 5 -虚拟 6 -建站 7 -核销 8 -玉石 9 -ez 10 -ep 11 -虚拟卡券 12 -服务市场 13 - EP 视频课 14 - EP 直播课 21 -跨境BBC 22 -跨境BC 23 -跨境CC|UPU 24 -手机充值 25 -拍卖保证金 26 -懂车帝抵扣券 27 -懂车帝返现券 28 -离岛免税 29 -海南会员购 30 -抽奖 31 -清北-企业代付 32 -抖+券 33 -联盟寄样 49 -刀剑 53 -通信卡 66 -加油包 76 -大闸蟹 99 -保险 102-小店海外 108-上门取件收款 + */ + private Integer biz; + + /** + * 业务来源描述 + */ + private String bizDesc; + + /** + * 买家留言 + */ + private String buyerWords; + + /** + * 商家备注 + */ + private String sellerWords; + + /** + * 插旗信息:0-灰 1-紫 2-青 3-绿 4-橙 5-红 + */ + private Integer sellerRemarkStars; + + /** + * 取消原因 + */ + private String cancelReason; + + /** + * 支付渠道的流水号 + */ + private String channelPaymentNo; + + /** + * 下单时间,时间戳,秒 + */ + private Integer createTime; + + /** + * 支付时间,时间戳,秒 + */ + private Integer payTime; + + /** + * 订单更新时间,时间戳,秒 + */ + private Integer updateTime; + + /** + * 订单完成时间,时间戳,秒 + */ + private Integer finishTime; + + /** + * 订单过期时间,时间戳,秒 + */ + private Integer orderExpireTime; + + /** + * 用户唯一id + */ + private String doudianOpenId; + + /** + * 收件人姓名 + */ + private String encryptPostReceiver; + + /** + * 收件人电话 + */ + private String encryptPostTel; + + /** + * 收件地址 + */ + private String encryptPostAddress; + + /** + * 预计发货时间,时间戳,秒 + */ + private Integer expShipTime; + + /** + * 物流信息JSON + */ + private String logisticsInfo; + + /** + * 主流程状态,1 待确认/待支付(订单创建完毕)103 部分支付105 已支付2 备货中101 部分发货3 已发货(全部发货)4 已取消5 已完成(已收货)21 发货前退款完结22 发货后退款完结39 收货后退款完结 + */ + private Integer mainStatus; + + /** + * 主流程状态描述 + */ + private String mainStatusDesc; + + /** + * 收件人姓名(脱敏后) + */ + private String maskPostReceiver; + + /** + * 收件人电话(脱敏后) + */ + private String maskPostTel; + + /** + * 收件人地址(脱敏后) + */ + private String maskPostAddress; + + /** + * 省 + */ + private String provinceName; + + /** + * + */ + private String provinceId; + + /** + * + */ + private String cityName; + + /** + * + */ + private String cityId; + + /** + * + */ + private String townName; + + /** + * + */ + private String townId; + + /** + * + */ + private String streetName; + + /** + * + */ + private String streetId; + + /** + * 标识收件人地址的id,可用于合单 + */ + private String openAddressId; + + /** + * 改价金额变化量(单位:分) + */ + private Integer modifyAmount; + + /** + * 改价运费金额变化量(单位:分) + */ + private Integer modifyPostAmount; + + /** + * 仅平台承担金额(单位:分),订单参与活动和优惠中平台承担部分的总金额 + */ + private Integer onlyPlatformCostAmount; + + /** + * 订单金额(单位:分) + */ + private Integer orderAmount; + + /** + * 支付金额(单位:分) + */ + private Integer payAmount; + + /** + * 7=无需支付(0元单);8=DOU分期(信用支付);9=新卡支付;12=先用后付;16=收银台支付 + */ + private Integer payType; + + /** + * 快递费(单位:分) + */ + private Integer postAmount; + + /** + * 运费险金额(单位:分) + */ + private Integer postInsuranceAmount; + + /** + * 运费原价(单位:分),post_origin_amount = post_amount + post_promotion_amount + */ + private Integer postOriginAmount; + + /** + * 运费优惠金额(单位:分) + */ + private Integer postPromotionAmount; + + /** + * 订单优惠总金额(单位:分) = 店铺优惠金额 + 平台优惠金额 + 达人优惠金额 + */ + private Integer promotionAmount; + + /** + * 支付优惠金额(单位:分),支付渠道上的优惠金额 + */ + private Integer promotionPayAmount; + + /** + * 平台优惠金额(单位:分),属于平台的优惠活动、优惠券、红包的总优惠金额 + */ + private Integer promotionPlatformAmount; + + /** + * 红包优惠金额(单位:分) + */ + private Integer promotionRedpackAmount; + + /** + * 平台红包优惠金额(单位:分),属于平台的红包的优惠金额 + */ + private Integer promotionRedpackPlatformAmount; + + /** + * 达人红包优惠金额(单位:分),属于达人的红包的优惠金额 + */ + private Integer promotionRedpackTalentAmount; + + /** + * 店铺优惠金额(单位:分),属于店铺的优惠活动、优惠券、红包的总优惠金额 + */ + private Integer promotionShopAmount; + + /** + * 达人优惠金额(单位:分),属于达人的优惠活动、优惠券、红包的总优惠金额 + */ + private Integer promotionTalentAmount; + + /** + * 发货时间,时间戳,秒 + */ + private Integer shipTime; + + /** + * 商家承担金额(单位:分),订单参与活动和优惠中商家承担部分的总金额 + */ + private Integer shopCostAmount; + + /** + * 平台承担金额(单位:分),订单参与活动和优惠中平台+作者(达人)承担部分的总金额,包含作者(达人)承担金额:platform_cost_amount = only_platform_cost_amount + author_cost_amount + */ + private Integer platformCostAmount; + + /** + * 店铺id,抖店平台生成,平台下唯一; + */ + private Long shopId; + + /** + * 商户名称 + */ + private String shopName; + + /** + * 总优惠金额(单位:分),total_promotion_amount = promotion_amount + post_promotion_amount + */ + private Integer totalPromotionAmount; + + /** + * 用户特征标签;JSON + */ + private String userTagUi; + + /** + * 系统店铺id + */ + private Integer sShopId; + + /** + * 第一次拉取时间 + */ + private Date pullTime; + + /** + * 最后一次拉取时间 + */ + private Date lastPullTime; + + /** + * 0待确认,1已确认2已拦截-9未拉取 + */ + private Integer auditStatus; + + /** + * 审核时间 + */ + private Date auditTime; + @TableField(exist = false) + private List items; + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouOrderItem.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouOrderItem.java new file mode 100644 index 00000000..03c76d81 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/OmsDouOrderItem.java @@ -0,0 +1,283 @@ +package com.qihang.dou.domain; + +import java.io.Serializable; +import lombok.Data; + +/** + * 抖店订单明细表 + * @TableName oms_dou_order_item + */ +@Data +public class OmsDouOrderItem implements Serializable { + /** + * + */ + private Long id; + + /** + * 店铺子订单号,抖店平台生成,平台下唯一;注意:一笔订单下有一个子订单和父订单单号相同。 + */ + private String orderId; + + /** + * 店铺父订单号,抖店平台生成,平台下唯一; + */ + private String parentOrderId; + + /** + * 订单层级 + */ + private Integer orderLevel; + + /** + * 广告来源,video-短视频 live-直播 + */ + private String adEnvType; + + /** + * 售后状态;6-售后申请;27-拒绝售后申请;12-售后成功;7-售后退货中;11-售后已发货;29-售后退货拒绝;13-【换货返回:换货售后换货商家发货】,【补寄返回:补寄待用户收货】; 14-【换货返回:(换货)售后换货用户收货】,【补寄返回:(补寄)用户已收货】 ;28-售后失败;51-订单取消成功;53-逆向交易已完成; + */ + private Integer afterSaleStatus; + + /** + * 售后类型 ;0-退货退款;1-已发货仅退款;2-未发货仅退款;3-换货;4-系统取消;5-用户取消;6-价保;7-补寄; + */ + private Integer afterSaleType; + + /** + * 退款状态:1-待退款;3-退款成功; 4-退款失败;当买家发起售后后又主动取消售后,此时after_sale_status=28并且refund_status=1的状态不变,不会流转至4状态; + */ + private Integer refundStatus; + + /** + * 作者(达人)承担金额(单位:分),订单参与活动和优惠中作者(达人)承担部分的总金额 + */ + private Integer authorCostAmount; + + /** + * 直播主播id(达人);仅直播间和橱窗产生的订单会有值返回; + */ + private Integer authorId; + + /** + * 直播主播名称;仅直播间和橱窗产生的订单会有值返回 + */ + private String authorName; + + /** + * 【C端流量来源】 0-unknown 2-精选联盟 8-小店自卖 + */ + private Integer cBiz; + + /** + * C端流量来源业务类型描述 + */ + private String cBizDesc; + + /** + * +取消原因 + */ + private String cancelReason; + + /** + * 支付渠道的流水号 + */ + private String channelPaymentNo; + + /** + * 商家后台商品编码 + */ + private String code; + + /** + * 用户确认收货时间 + */ + private Integer confirmReceiptTime; + + /** + * 订单完成时间,时间戳,秒 + */ + private Integer finishTime; + + /** + * +商品原价(单位:分) + */ + private Integer goodsPrice; + + /** + * 【商品类型】 0-实体 1-虚拟 + */ + private Integer goodsType; + + /** + * +是否评价 :1-已评价,0-未评价,2 -追评 + */ + private Integer isComment; + + /** + * 订单商品数量 + */ + private Integer itemNum; + + /** + * 物流收货时间 + */ + private Integer logisticsReceiptTime; + + /** + * +改价金额变化量(单位:分) + */ + private Integer modifyAmount; + + /** + * 改价运费金额变化量(单位:分) + */ + private Integer modifyPostAmount; + + /** + * 仅平台承担金额(单位:分),订单参与活动和优惠中平台承担部分的总金额 + */ + private Integer onlyPlatformCostAmount; + + /** + * 订单金额(单位:分) + */ + private Integer orderAmount; + + /** + * 支付金额(单位:分) + */ + private Integer payAmount; + + /** + * 运费险金额(单位:分) + */ + private Integer postInsuranceAmount; + + /** + * 订单优惠总金额(单位:分) = 店铺优惠金额 + 平台优惠金额 + 达人优惠金额 + */ + private Integer promotionAmount; + + /** + * 店铺优惠金额(单位:分),属于店铺的优惠活动、优惠券、红包的总优惠金额 + */ + private Integer promotionShopAmount; + + /** + * 平台优惠金额(单位:分),属于平台的优惠活动、优惠券、红包的总优惠金额 + */ + private Integer promotionPlatformAmount; + + /** + * 商家承担金额(单位:分),订单参与活动和优惠中商家承担部分的总金额 + */ + private Integer shopCostAmount; + + /** + * 平台承担金额(单位:分),订单参与活动和优惠中平台+作者(达人)承担部分的总金额,包含作者(达人)承担金额:platform_cost_amount = only_platform_cost_amount + author_cost_amount + */ + private Integer platformCostAmount; + + /** + * 达人优惠金额(单位:分),属于达人的优惠活动、优惠券、红包的总优惠金额 + */ + private Integer promotionTalentAmount; + + /** + * 支付优惠金额(单位:分),支付渠道上的优惠金额 + */ + private Integer promotionPayAmount; + + /** + * 商品现价(单位:分) + */ + private Integer originAmount; + + /** + * 商品外部编码 + */ + private String outProductId; + + /** + * 外部Skuid + */ + private String outSkuId; + + /** + * 商品ID + */ + private Long productId; + + /** + * 商品skuId + */ + private Long skuId; + + /** + * 商品名称 + */ + private String productName; + + /** + * 商品图片 + */ + private String productPic; + + /** + * 平台优惠金额(单位:分),属于平台的优惠活动、优惠券、红包的总优惠金额 + */ + private Integer promotionRedpackAmount; + + /** + * 平台红包优惠金额(单位:分),属于平台的红包的优惠金额 + */ + private Integer promotionRedpackPlatformAmount; + + /** + * 达人红包优惠金额(单位:分),属于达人的红包的优惠金额 + */ + private Integer promotionRedpackTalentAmount; + + /** + * 直播间id,有值则代表订单来自直播间 + */ + private Integer roomId; + + /** + * +发货时间 + */ + private Integer shipTime; + + /** + * 规格信息JSON + */ + private String spec; + + /** + * 下单来源描述(废弃) + */ + private String themeTypeDesc; + + /** + * 订单更新时间,时间戳,秒 + */ + private Integer updateTime; + + /** + * 下单时间,时间戳,秒 + */ + private Integer createTime; + + /** + * 视频id,有值则代表订单来自短视频video_id + */ + private String videoId; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLasttime.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLasttime.java index 0c223640..15908f74 100644 --- a/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLasttime.java +++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLasttime.java @@ -1,6 +1,7 @@ package com.qihang.dou.domain; import java.io.Serializable; +import java.time.LocalDateTime; import java.util.Date; import lombok.Data; @@ -18,7 +19,7 @@ public class SShopPullLasttime implements Serializable { /** * 店铺id */ - private Integer shopId; + private Long shopId; /** * 类型(ORDER:订单,REFUND:退款) @@ -28,7 +29,7 @@ public class SShopPullLasttime implements Serializable { /** * 最后更新时间 */ - private Date lasttime; + private LocalDateTime lasttime; /** * 创建时间 diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLogs.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLogs.java index b27ad11f..edcf4646 100644 --- a/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLogs.java +++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/SShopPullLogs.java @@ -18,7 +18,7 @@ public class SShopPullLogs implements Serializable { /** * 店铺id */ - private Integer shopId; + private Long shopId; /** * 平台id diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouOrderBo.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouOrderBo.java new file mode 100644 index 00000000..f4b0090b --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouOrderBo.java @@ -0,0 +1,16 @@ +package com.qihang.dou.domain.bo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class DouOrderBo implements Serializable { + private String orderId; + private Long skuId; + private Long erpGoodsSkuId; + private Integer shopId; + private String orderStatus; + private String startTime; + private String endTime; +} diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouOrderPushBo.java b/open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouOrderPushBo.java new file mode 100644 index 00000000..3e718359 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/domain/bo/DouOrderPushBo.java @@ -0,0 +1,8 @@ +package com.qihang.dou.domain.bo; + +import lombok.Data; + +@Data +public class DouOrderPushBo { + private String[] ids; +} diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouOrderItemMapper.java b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouOrderItemMapper.java new file mode 100644 index 00000000..9aa76921 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouOrderItemMapper.java @@ -0,0 +1,18 @@ +package com.qihang.dou.mapper; + +import com.qihang.dou.domain.OmsDouOrderItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author TW +* @description 针对表【oms_dou_order_item(抖店订单明细表)】的数据库操作Mapper +* @createDate 2024-06-14 11:20:51 +* @Entity com.qihang.dou.domain.OmsDouOrderItem +*/ +public interface OmsDouOrderItemMapper extends BaseMapper { + +} + + + + diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouOrderMapper.java b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouOrderMapper.java new file mode 100644 index 00000000..c7cb5c35 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/mapper/OmsDouOrderMapper.java @@ -0,0 +1,18 @@ +package com.qihang.dou.mapper; + +import com.qihang.dou.domain.OmsDouOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author TW +* @description 针对表【oms_dou_order(抖店订单表)】的数据库操作Mapper +* @createDate 2024-06-14 11:20:51 +* @Entity com.qihang.dou.domain.OmsDouOrder +*/ +public interface OmsDouOrderMapper extends BaseMapper { + +} + + + + diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouOrderItemService.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouOrderItemService.java new file mode 100644 index 00000000..e11823b8 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouOrderItemService.java @@ -0,0 +1,13 @@ +package com.qihang.dou.service; + +import com.qihang.dou.domain.OmsDouOrderItem; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author TW +* @description 针对表【oms_dou_order_item(抖店订单明细表)】的数据库操作Service +* @createDate 2024-06-14 11:20:51 +*/ +public interface OmsDouOrderItemService extends IService { + +} diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouOrderService.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouOrderService.java new file mode 100644 index 00000000..0e86ca26 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/OmsDouOrderService.java @@ -0,0 +1,26 @@ +package com.qihang.dou.service; + +import com.qihang.common.common.PageQuery; +import com.qihang.common.common.PageResult; +import com.qihang.common.common.ResultVo; +import com.qihang.dou.domain.OmsDouOrder; +import com.baomidou.mybatisplus.extension.service.IService; +import com.qihang.dou.domain.bo.DouOrderBo; + +/** +* @author TW +* @description 针对表【oms_dou_order(抖店订单表)】的数据库操作Service +* @createDate 2024-06-14 11:20:51 +*/ +public interface OmsDouOrderService extends IService { + PageResult queryPageList(DouOrderBo bo, PageQuery pageQuery); + + OmsDouOrder queryDetailById(Long id); + /** + * 保存店铺订单 + * @param shopId + * @param order + * @return + */ + ResultVo saveOrder(Long shopId, OmsDouOrder order); +} diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLasttimeService.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLasttimeService.java index 218fec8d..25ceef16 100644 --- a/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLasttimeService.java +++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/SShopPullLasttimeService.java @@ -9,5 +9,5 @@ import com.baomidou.mybatisplus.extension.service.IService; * @createDate 2024-06-11 14:40:36 */ public interface SShopPullLasttimeService extends IService { - + SShopPullLasttime getLasttimeByShop(Long shopId,String pullType); } diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouOrderItemServiceImpl.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouOrderItemServiceImpl.java new file mode 100644 index 00000000..68a27f15 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouOrderItemServiceImpl.java @@ -0,0 +1,22 @@ +package com.qihang.dou.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qihang.dou.domain.OmsDouOrderItem; +import com.qihang.dou.service.OmsDouOrderItemService; +import com.qihang.dou.mapper.OmsDouOrderItemMapper; +import org.springframework.stereotype.Service; + +/** +* @author TW +* @description 针对表【oms_dou_order_item(抖店订单明细表)】的数据库操作Service实现 +* @createDate 2024-06-14 11:20:51 +*/ +@Service +public class OmsDouOrderItemServiceImpl extends ServiceImpl + implements OmsDouOrderItemService{ + +} + + + + diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouOrderServiceImpl.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouOrderServiceImpl.java new file mode 100644 index 00000000..78110e22 --- /dev/null +++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/OmsDouOrderServiceImpl.java @@ -0,0 +1,156 @@ +package com.qihang.dou.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qihang.common.common.PageQuery; +import com.qihang.common.common.PageResult; +import com.qihang.common.common.ResultVo; +import com.qihang.common.common.ResultVoEnum; +import com.qihang.common.utils.DateUtils; +import com.qihang.dou.domain.OmsDouOrder; +import com.qihang.dou.domain.OmsDouOrderItem; +import com.qihang.dou.domain.bo.DouOrderBo; +import com.qihang.dou.mapper.OmsDouOrderItemMapper; +import com.qihang.dou.service.OmsDouOrderService; +import com.qihang.dou.mapper.OmsDouOrderMapper; +import lombok.AllArgsConstructor; +import lombok.extern.java.Log; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.util.StringUtils; + +import java.util.Date; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** +* @author TW +* @description 针对表【oms_dou_order(抖店订单表)】的数据库操作Service实现 +* @createDate 2024-06-14 11:20:51 +*/ +@Log +@AllArgsConstructor +@Service +public class OmsDouOrderServiceImpl extends ServiceImpl + implements OmsDouOrderService{ + private final OmsDouOrderMapper mapper; + private final OmsDouOrderItemMapper itemMapper; + private final String DATE_PATTERN = + "^(?:(?:(?:\\d{4}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|1\\d|2[0-8]))|(?:(?:(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:(?:0[48]|[2468][048]|[13579][26])00))-0?2-29))$)|(?:(?:(?:\\d{4}-(?:0?[13578]|1[02]))-(?:0?[1-9]|[12]\\d|30))$)|(?:(?:(?:\\d{4}-0?[13-9]|1[0-2])-(?:0?[1-9]|[1-2]\\d|30))$)|(?:(?:(?:\\d{2}(?:0[48]|[13579][26]|[2468][048])|(?:(?:0[48]|[13579][26]|[2468][048])00))-0?2-29))$)$"; + private final Pattern DATE_FORMAT = Pattern.compile(DATE_PATTERN); + @Override + public PageResult queryPageList(DouOrderBo bo, PageQuery pageQuery) { + long startTimeStamp = 0; + long endTimeStamp = 0; + if(org.springframework.util.StringUtils.hasText(bo.getStartTime())){ + Matcher matcher = DATE_FORMAT.matcher(bo.getStartTime()); + boolean b = matcher.find(); + if(b){ + bo.setStartTime(bo.getStartTime()+" 00:00:00"); + startTimeStamp = DateUtils.dateTimeStrToTimeStamp(null,bo.getStartTime()); + } + } + if(org.springframework.util.StringUtils.hasText(bo.getEndTime())){ + Matcher matcher = DATE_FORMAT.matcher(bo.getEndTime()); + boolean b = matcher.find(); + if(b){ + bo.setEndTime(bo.getEndTime()+" 23:59:59"); + endTimeStamp = DateUtils.dateTimeStrToTimeStamp(null,bo.getEndTime()); + } + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(bo.getShopId()!=null,OmsDouOrder::getShopId,bo.getShopId()) + .eq(StringUtils.hasText(bo.getOrderId()),OmsDouOrder::getOrderId,bo.getOrderId()) + .eq(StringUtils.hasText(bo.getOrderStatus()),OmsDouOrder::getOrderStatus,bo.getOrderStatus()) + .ge(StringUtils.hasText(bo.getStartTime()),OmsDouOrder::getCreateTime, startTimeStamp) + .le(StringUtils.hasText(bo.getEndTime()),OmsDouOrder::getCreateTime,endTimeStamp) + ; + pageQuery.setOrderByColumn("create_time"); + pageQuery.setIsAsc("desc"); + Page taoGoodsPage = mapper.selectPage(pageQuery.build(), queryWrapper); + if(taoGoodsPage.getRecords()!=null){ + for (var order:taoGoodsPage.getRecords()) { + order.setItems(itemMapper.selectList(new LambdaQueryWrapper().eq(OmsDouOrderItem::getParentOrderId,order.getOrderId()))); + } + } + return PageResult.build(taoGoodsPage); + } + + @Override + public OmsDouOrder queryDetailById(Long id) { + return mapper.selectById(id); + } + + @Transactional + @Override + public ResultVo saveOrder(Long shopId, OmsDouOrder order) { + if(order == null ) return ResultVo.error(ResultVoEnum.SystemException); + try { + + List taoOrders = mapper.selectList(new LambdaQueryWrapper().eq(OmsDouOrder::getOrderId, order.getOrderId())); + if (taoOrders != null && taoOrders.size() > 0) { + // 存在,修改 + OmsDouOrder update = new OmsDouOrder(); + update.setId(taoOrders.get(0).getId()); + update.setOrderStatus(order.getOrderStatus()); + update.setOrderStatusDesc(order.getOrderStatusDesc()); + update.setBuyerWords(order.getBuyerWords()); + update.setSellerWords(order.getSellerWords()); + update.setSellerRemarkStars(order.getSellerRemarkStars()); + update.setCancelReason(order.getCancelReason()); + update.setChannelPaymentNo(order.getChannelPaymentNo()); + update.setPayTime(order.getPayTime()); + update.setUpdateTime(order.getUpdateTime()); + update.setFinishTime(order.getFinishTime()); + update.setOrderExpireTime(order.getOrderExpireTime()); + update.setLogisticsInfo(order.getLogisticsInfo()); + update.setMainStatus(order.getMainStatus()); + update.setMainStatusDesc(order.getMainStatusDesc()); + update.setMaskPostReceiver(order.getMaskPostReceiver()); + update.setMaskPostTel(order.getMaskPostTel()); + update.setMaskPostAddress(order.getMaskPostAddress()); + update.setPayAmount(order.getPayAmount()); + update.setPayType(order.getPayType()); + update.setShipTime(order.getShipTime()); + update.setTotalPromotionAmount(order.getTotalPromotionAmount()); + update.setModifyAmount(order.getModifyAmount()); + update.setModifyPostAmount(order.getModifyPostAmount()); + update.setLastPullTime(new Date()); + + mapper.updateById(update); + // 删除item + itemMapper.delete(new LambdaQueryWrapper().eq(OmsDouOrderItem::getParentOrderId,order.getOrderId())); + for (var item : order.getItems()) { + // 新增 + itemMapper.insert(item); + } + return ResultVo.error(ResultVoEnum.DataExist, "订单已经存在,更新成功"); + } else { + // 不存在,新增 + order.setShopId(shopId); + order.setAuditStatus(0); + order.setPullTime(new Date()); + mapper.insert(order); + // 添加item + for (var item : order.getItems()) { + itemMapper.insert(item); + } + + return ResultVo.success(); + } + } catch (Exception e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + e.printStackTrace(); + log.info("保存订单数据错误:"+e.getMessage()); + return ResultVo.error(ResultVoEnum.SystemException, "系统异常:" + e.getMessage()); + } + } +} + + + + diff --git a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLasttimeServiceImpl.java b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLasttimeServiceImpl.java index 015b4655..b7a59cec 100644 --- a/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLasttimeServiceImpl.java +++ b/open-api/dou-api/src/main/java/com/qihang/dou/service/impl/SShopPullLasttimeServiceImpl.java @@ -1,20 +1,31 @@ package com.qihang.dou.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qihang.dou.domain.SShopPullLasttime; import com.qihang.dou.service.SShopPullLasttimeService; import com.qihang.dou.mapper.SShopPullLasttimeMapper; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + /** * @author TW * @description 针对表【s_shop_pull_lasttime(店铺更新最后时间记录)】的数据库操作Service实现 * @createDate 2024-06-11 14:40:36 */ +@AllArgsConstructor @Service public class SShopPullLasttimeServiceImpl extends ServiceImpl implements SShopPullLasttimeService{ - + private final SShopPullLasttimeMapper mapper; + @Override + public SShopPullLasttime getLasttimeByShop(Long shopId, String pullType) { + List sysShopPullLasttimes = mapper.selectList(new LambdaQueryWrapper().eq(SShopPullLasttime::getShopId, shopId).eq(SShopPullLasttime::getPullType, pullType)); + if(sysShopPullLasttimes != null && !sysShopPullLasttimes.isEmpty()) return sysShopPullLasttimes.get(0); + else return null; + } } diff --git a/open-api/dou-api/src/main/resources/logback-spring.xml b/open-api/dou-api/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..92162935 --- /dev/null +++ b/open-api/dou-api/src/main/resources/logback-spring.xml @@ -0,0 +1,65 @@ + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss:SS} %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{50}) - %cyan(%msg%n) + + + + + + + ${LOG_HOME}/%d{yyyy-MM-dd}.log + + 3 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + + + + 10MB + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/open-api/dou-api/src/main/resources/mapper/OmsDouOrderItemMapper.xml b/open-api/dou-api/src/main/resources/mapper/OmsDouOrderItemMapper.xml new file mode 100644 index 00000000..f0600501 --- /dev/null +++ b/open-api/dou-api/src/main/resources/mapper/OmsDouOrderItemMapper.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,order_id,parent_order_id, + order_level,ad_env_type,after_sale_status, + after_sale_type,refund_status,author_cost_amount, + author_id,author_name,c_biz, + c_biz_desc,cancel_reason,channel_payment_no, + code,confirm_receipt_time,finish_time, + goods_price,goods_type,is_comment, + item_num,logistics_receipt_time,modify_amount, + modify_post_amount,only_platform_cost_amount,order_amount, + pay_amount,post_insurance_amount,promotion_amount, + promotion_shop_amount,promotion_platform_amount,shop_cost_amount, + platform_cost_amount,promotion_talent_amount,promotion_pay_amount, + origin_amount,out_product_id,out_sku_id, + product_id,sku_id,product_name, + product_pic,promotion_redpack_amount,promotion_redpack_platform_amount, + promotion_redpack_talent_amount,room_id,ship_time, + spec,theme_type_desc,update_time, + create_time,video_id + + diff --git a/open-api/dou-api/src/main/resources/mapper/OmsDouOrderMapper.xml b/open-api/dou-api/src/main/resources/mapper/OmsDouOrderMapper.xml new file mode 100644 index 00000000..90c73fa1 --- /dev/null +++ b/open-api/dou-api/src/main/resources/mapper/OmsDouOrderMapper.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,order_id,order_level, + order_phase_list,order_status,order_status_desc, + order_tag,order_type,order_type_desc, + app_id,open_id,accept_order_status, + appointment_ship_time,author_cost_amount,aweme_id, + b_type,b_type_desc,sub_b_type, + sub_b_type_desc,biz,biz_desc, + buyer_words,seller_words,seller_remark_stars, + cancel_reason,channel_payment_no,create_time, + pay_time,update_time,finish_time, + order_expire_time,doudian_open_id,encrypt_post_receiver, + encrypt_post_tel,encrypt_post_address,exp_ship_time, + logistics_info,main_status,main_status_desc, + mask_post_receiver,mask_post_tel,mask_post_address, + province_name,province_id,city_name, + city_id,town_name,town_id, + street_name,street_id,open_address_id, + modify_amount,modify_post_amount,only_platform_cost_amount, + order_amount,pay_amount,pay_type, + post_amount,post_insurance_amount,post_origin_amount, + post_promotion_amount,promotion_amount,promotion_pay_amount, + promotion_platform_amount,promotion_redpack_amount,promotion_redpack_platform_amount, + promotion_redpack_talent_amount,promotion_shop_amount,promotion_talent_amount, + ship_time,shop_cost_amount,platform_cost_amount, + shop_id,shop_name,total_promotion_amount, + user_tag_ui,s_shop_id,pull_time, + last_pull_time,audit_status,audit_time + + diff --git a/vue/src/api/dou/order.js b/vue/src/api/dou/order.js index 33803183..107c074b 100644 --- a/vue/src/api/dou/order.js +++ b/vue/src/api/dou/order.js @@ -3,7 +3,7 @@ import request from '@/utils/request' // 查询抖店订单列表 export function listOrder(query) { return request({ - url: '/dou/order/list', + url: '/dou-api/order/list', method: 'get', params: query }) @@ -12,7 +12,7 @@ export function listOrder(query) { // 查询抖店订单详细 export function getOrder(id) { return request({ - url: '/dou/order/' + id, + url: '/dou-api/order/' + id, method: 'get' }) } @@ -26,28 +26,20 @@ export function addOrder(data) { }) } -// 修改抖店订单 -export function confirmOrder(data) { + +// 接口拉取订单 +export function pullOrder(data) { return request({ - url: '/dou/order/confirm', + url: '/dou-api/order/pull_order', method: 'post', data: data }) } -// 删除抖店订单 -export function delOrder(id) { +export function pushOms(data) { return request({ - url: '/dou/order/' + id, - method: 'delete' - }) -} - -// 接口拉取淘宝订单 -export function pullOrder(query) { - return request({ - url: '/douapi/order/pull_order', - method: 'get', - params: query + url: '/dou-api/order/push_oms', + method: 'post', + data: data }) } diff --git a/vue/src/views/dou/goods/index.vue b/vue/src/views/dou/goods/index.vue deleted file mode 100644 index 538fa29e..00000000 --- a/vue/src/views/dou/goods/index.vue +++ /dev/null @@ -1,226 +0,0 @@ - - - diff --git a/vue/src/views/dou/order/index.vue b/vue/src/views/dou/order/index.vue deleted file mode 100644 index 4acaccec..00000000 --- a/vue/src/views/dou/order/index.vue +++ /dev/null @@ -1,1105 +0,0 @@ - - - diff --git a/vue/src/views/pdd/goods/index.vue b/vue/src/views/pdd/goods/index.vue deleted file mode 100644 index e7cb41cf..00000000 --- a/vue/src/views/pdd/goods/index.vue +++ /dev/null @@ -1,226 +0,0 @@ - - - diff --git a/vue/src/views/sale/order/pull/index.vue b/vue/src/views/sale/order/pull/index.vue index 1a96b4b4..a901e5a0 100644 --- a/vue/src/views/sale/order/pull/index.vue +++ b/vue/src/views/sale/order/pull/index.vue @@ -22,7 +22,7 @@ diff --git a/vue/src/views/shop/order_index.vue b/vue/src/views/shop/order_index.vue index 7304564f..075c870a 100644 --- a/vue/src/views/shop/order_index.vue +++ b/vue/src/views/shop/order_index.vue @@ -25,7 +25,7 @@