diff --git a/README.md b/README.md index 109694ea..844af343 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ + [ ] 视频号小店 + [ ] 接入电子面单打印 + [x] 淘宝 + + [ ] 京东 + [x] 视频号小店 + [ ] 拼多多 + [ ] 抖店 diff --git a/core/common/src/main/java/com/qihang/common/mq/MqMessage.java b/core/common/src/main/java/com/qihang/common/mq/MqMessage.java index 76c411cc..8316df3e 100644 --- a/core/common/src/main/java/com/qihang/common/mq/MqMessage.java +++ b/core/common/src/main/java/com/qihang/common/mq/MqMessage.java @@ -10,6 +10,11 @@ public class MqMessage { private int mqType;// 消息类型(1:订单消息;2:退款消息) private EnumShopType shopType; private String keyId; + private String[] orderIds; + private Long shopId; + private String logisticsCompanyCode;//快递公司编码 + private String waybillCode;//运单号 + public static MqMessage build(EnumShopType shopType,int mqType , String keyId){ MqMessage result = new MqMessage(); @@ -18,4 +23,20 @@ public class MqMessage { result.setKeyId(keyId); return result; } + + public static MqMessage build(Long shopId,String orderId){ + MqMessage result = new MqMessage(); + result.setShopId(shopId); + result.setKeyId(orderId); + return result; + } + + public static MqMessage build(Long shopId,String orderId,String logisticsCompanyCode,String waybillCode){ + MqMessage result = new MqMessage(); + result.setShopId(shopId); + result.setKeyId(orderId); + result.setLogisticsCompanyCode(logisticsCompanyCode); + result.setWaybillCode(waybillCode); + return result; + } } diff --git a/core/common/src/main/java/com/qihang/common/mq/MqType.java b/core/common/src/main/java/com/qihang/common/mq/MqType.java index 31e4283e..f035b687 100644 --- a/core/common/src/main/java/com/qihang/common/mq/MqType.java +++ b/core/common/src/main/java/com/qihang/common/mq/MqType.java @@ -10,6 +10,20 @@ public class MqType { */ public static final int REFUND_MESSAGE = 2; + /** + * 新订单消息 + */ public static final String ORDER_MQ = "ORDER_MQ"; + /** + * 新退款消息 + */ public static final String REFUND_MQ = "REFUND_MQ"; + /** + * 新备货消息 + */ + public static final String SHIP_STOCK_UP_MQ = "SHIP_STOCK_UP_MQ"; + /** + * 发货通知 + */ + public static final String SHIP_SEND_MQ = "SHIP_SEND_MQ"; } diff --git a/docs/qihang-erp.sql b/docs/qihang-erp.sql index 32663168..201f47af 100644 --- a/docs/qihang-erp.sql +++ b/docs/qihang-erp.sql @@ -11,7 +11,7 @@ Target Server Version : 80032 File Encoding : 65001 - Date: 17/06/2024 10:57:02 + Date: 18/06/2024 16:00:44 */ SET NAMES utf8mb4; @@ -383,7 +383,7 @@ CREATE TABLE `erp_sale_order` ( PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `order_sn_index`(`order_num`) USING BTREE, INDEX `shopid_index`(`shop_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1801809140794216449 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '订单表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 1801809140794216449 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for erp_sale_order_item @@ -425,7 +425,7 @@ CREATE TABLE `erp_sale_order_item` ( PRIMARY KEY (`id`) USING BTREE, INDEX `goodId_index`(`goods_id`) USING BTREE, INDEX `order_id`(`order_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1801809144007053315 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '订单明细表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 1801809144007053314 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci COMMENT = '订单明细表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for erp_ship_logistics @@ -545,6 +545,32 @@ CREATE TABLE `erp_ship_order_fee` ( PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1786238985318604802 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单发货物流费用' ROW_FORMAT = Dynamic; +-- ---------------------------- +-- Table structure for erp_ship_stock_up +-- ---------------------------- +DROP TABLE IF EXISTS `erp_ship_stock_up`; +CREATE TABLE `erp_ship_stock_up` ( + `id` bigint(0) NOT NULL AUTO_INCREMENT, + `sale_order_id` bigint(0) DEFAULT NULL COMMENT 'erp订单id', + `sale_order_item_id` bigint(0) DEFAULT NULL COMMENT 'erp订单itemid', + `order_num` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '订单编号', + `original_sku_id` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '原始订单skuid', + `goods_id` bigint(0) DEFAULT 0 COMMENT 'erp系统商品id', + `spec_id` bigint(0) DEFAULT 0 COMMENT 'erp系统商品规格id', + `goods_title` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '商品标题', + `goods_img` varchar(300) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '商品图片', + `goods_spec` varchar(2550) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '商品规格', + `goods_num` varchar(35) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '商品编码', + `spec_num` varchar(35) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '商品规格编码', + `quantity` int(0) NOT NULL COMMENT '商品数量', + `status` int(0) NOT NULL COMMENT '状态0待备货1备货中2已出库3已发货', + `create_time` datetime(0) DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人', + `update_time` datetime(0) DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新人', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '备货表' ROW_FORMAT = Dynamic; + -- ---------------------------- -- Table structure for erp_ship_waybill -- ---------------------------- @@ -563,7 +589,7 @@ CREATE TABLE `erp_ship_waybill` ( `update_time` datetime(0) DEFAULT NULL COMMENT '更新时间', `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '更新人', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发货电子面单记录表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 1802644906957025282 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发货电子面单记录表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for oms_dou_goods @@ -1270,7 +1296,7 @@ CREATE TABLE `oms_pdd_waybill_account` ( `phone` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发货固定电话', `is_show` int(0) DEFAULT NULL COMMENT '是否前台显示1显示0不显示', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '拼多多电子面单账户信息表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '拼多多电子面单账户信息表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for oms_tao_goods @@ -1389,9 +1415,6 @@ CREATE TABLE `oms_tao_order` ( `receiving_time` datetime(0) DEFAULT NULL COMMENT '收货时间,这里返回的是完全收货时间', `status` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '交易状态。可选值: * TRADE_NO_CREATE_PAY(没有创建支付宝交易) * WAIT_BUYER_PAY(等待买家付款) * SELLER_CONSIGNED_PART(卖家部分发货) * WAIT_SELLER_SEND_GOODS(等待卖家发货,即:买家已付款) * WAIT_BUYER_CONFIRM_GOODS(等待买家确认收货,即:卖家已发货) * TRADE_BUYER_SIGNED(买家已签收,货到付款专用) * TRADE_FINISHED(交易成功) * TRADE_CLOSED(付款以后用户退款成功,交易自动关闭) * TRADE_CLOSED_BY_TAOBAO(付款以前,卖家或买家主动关闭交易) * PAY_PENDING(国际信用卡支付付款确认中) * WAIT_PRE_AUTH_CONFIRM(0元购合约中) * PAID_FORBID_CONSIGN(拼团中订单或者发货强管控的订单,已付款但禁止发货)', `trade_memo` varchar(2000) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '交易备注。', - `erp_send_company` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'erp发货快递公司', - `erp_send_code` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'erp发货快递单号', - `erp_send_status` int(0) DEFAULT 0 COMMENT 'erp发货状态', `create_time` datetime(0) DEFAULT NULL COMMENT '数据库创建时间', `update_time` datetime(0) DEFAULT NULL COMMENT '数据库更新时间', `update_by` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '数据库更新人', @@ -1427,6 +1450,9 @@ CREATE TABLE `oms_tao_order` ( `tmall_coupon_fee` bigint(0) DEFAULT NULL COMMENT '天猫商家使用,订单使用的红包信息', `audit_status` int(0) DEFAULT NULL COMMENT '订单审核状态(0待审核1已审核)', `audit_time` datetime(0) DEFAULT NULL COMMENT '订单审核时间', + `erp_send_company` varchar(20) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'erp发货快递公司', + `erp_send_code` varchar(30) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT 'erp发货快递单号', + `erp_send_status` int(0) DEFAULT 0 COMMENT 'erp发货状态(1已取号2已打印3已发货10手动发货)', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1801155298566070275 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '淘宝订单表' ROW_FORMAT = Dynamic; @@ -1574,7 +1600,7 @@ CREATE TABLE `oms_tao_waybill_account` ( `phone` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发货固定电话', `is_show` int(0) DEFAULT NULL COMMENT '是否前台显示1显示0不显示', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '淘宝电子面单账户信息表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '淘宝电子面单账户信息表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for oms_wei_goods @@ -2373,7 +2399,7 @@ CREATE TABLE `sys_logininfor` ( PRIMARY KEY (`info_id`) USING BTREE, INDEX `idx_sys_logininfor_s`(`status`) USING BTREE, INDEX `idx_sys_logininfor_lt`(`login_time`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 304 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 303 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统访问记录' ROW_FORMAT = Dynamic; -- ---------------------------- -- Table structure for sys_menu diff --git a/oms-api/src/main/java/com/qihang/oms/domain/ErpShipStockUp.java b/oms-api/src/main/java/com/qihang/oms/domain/ErpShipStockUp.java new file mode 100644 index 00000000..a2e6b488 --- /dev/null +++ b/oms-api/src/main/java/com/qihang/oms/domain/ErpShipStockUp.java @@ -0,0 +1,108 @@ +package com.qihang.oms.domain; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +/** + * 备货表 + * @TableName erp_ship_stock_up + */ +@Data +public class ErpShipStockUp implements Serializable { + /** + * + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * erp订单id + */ + private Long saleOrderId; + + /** + * erp订单itemid + */ + private Long saleOrderItemId; + + /** + * 订单编号 + */ + private String orderNum; + + /** + * 原始订单skuid + */ + private String originalSkuId; + + /** + * erp系统商品id + */ + private Long goodsId; + + /** + * erp系统商品规格id + */ + private Long specId; + + /** + * 商品标题 + */ + private String goodsTitle; + + /** + * 商品图片 + */ + private String goodsImg; + + /** + * 商品规格 + */ + private String goodsSpec; + + /** + * 商品编码 + */ + private String goodsNum; + + /** + * 商品规格编码 + */ + private String specNum; + + /** + * 商品数量 + */ + private Integer quantity; + + /** + * 状态0待备货1备货中2已出库3已发货 + */ + private Integer status; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 更新人 + */ + private String updateBy; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/oms-api/src/main/java/com/qihang/oms/mapper/ErpShipStockUpMapper.java b/oms-api/src/main/java/com/qihang/oms/mapper/ErpShipStockUpMapper.java new file mode 100644 index 00000000..e0678422 --- /dev/null +++ b/oms-api/src/main/java/com/qihang/oms/mapper/ErpShipStockUpMapper.java @@ -0,0 +1,18 @@ +package com.qihang.oms.mapper; + +import com.qihang.oms.domain.ErpShipStockUp; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author TW +* @description 针对表【erp_ship_stock_up(备货表)】的数据库操作Mapper +* @createDate 2024-06-18 15:25:18 +* @Entity com.qihang.oms.domain.ErpShipStockUp +*/ +public interface ErpShipStockUpMapper extends BaseMapper { + +} + + + + diff --git a/oms-api/src/main/java/com/qihang/oms/mq/KafkaMQConsumer.java b/oms-api/src/main/java/com/qihang/oms/mq/KafkaMQConsumer.java index 8e0b7768..f6c20162 100644 --- a/oms-api/src/main/java/com/qihang/oms/mq/KafkaMQConsumer.java +++ b/oms-api/src/main/java/com/qihang/oms/mq/KafkaMQConsumer.java @@ -57,4 +57,26 @@ public class KafkaMQConsumer { public void onRefundMessage(ConsumerRecord message) { logger.info("收到kafka消息REFUND============"+message.topic()+"====="+message.partition()+"======"+message.value()); } + + /** + * 监听备货消息 + * @param message + */ + @KafkaListener(topics = {MqType.SHIP_STOCK_UP_MQ}) + public void onSHIP_STOCK_UP_MQ(ConsumerRecord message) { + logger.info("收到kafka消息 SHIP_STOCK_UP_MQ ============"+message.topic()+"====="+message.partition()+"======"+message.value()); + MqMessage vo = JSON.parseObject(message.value().toString(), MqMessage.class); + orderService.orderShipStockUp(vo.getShopId(),vo.getKeyId()); + } + + /** + * 监听发货完成消息 + * @param message + */ + @KafkaListener(topics = {MqType.SHIP_SEND_MQ}) + public void onSHIP_SEND_MQ(ConsumerRecord message) { + logger.info("收到kafka消息 SHIP_SEND_MQ ============"+message.topic()+"====="+message.partition()+"======"+message.value()); + MqMessage vo = JSON.parseObject(message.value().toString(), MqMessage.class); + orderService.orderSendConfirm(vo.getShopId(),vo.getKeyId(),vo.getLogisticsCompanyCode(),vo.getWaybillCode()); + } } diff --git a/oms-api/src/main/java/com/qihang/oms/service/ErpSaleOrderService.java b/oms-api/src/main/java/com/qihang/oms/service/ErpSaleOrderService.java index 54c3eefe..5681a55d 100644 --- a/oms-api/src/main/java/com/qihang/oms/service/ErpSaleOrderService.java +++ b/oms-api/src/main/java/com/qihang/oms/service/ErpSaleOrderService.java @@ -24,4 +24,16 @@ public interface ErpSaleOrderService extends IService { PageResult queryPageList(ErpSaleOrder bo, PageQuery pageQuery); ErpSaleOrder queryDetailById(Long id); + + ResultVo orderSendConfirm(Long shopId,String orderId,String logisticsCompanyCode,String waybillCode); + + /** + * 订单备货 + * @param shopId + * @param orderId + * @param + * @param + * @return + */ + ResultVo orderShipStockUp(Long shopId,String orderId); } diff --git a/oms-api/src/main/java/com/qihang/oms/service/ErpShipStockUpService.java b/oms-api/src/main/java/com/qihang/oms/service/ErpShipStockUpService.java new file mode 100644 index 00000000..03e742d8 --- /dev/null +++ b/oms-api/src/main/java/com/qihang/oms/service/ErpShipStockUpService.java @@ -0,0 +1,13 @@ +package com.qihang.oms.service; + +import com.qihang.oms.domain.ErpShipStockUp; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author TW +* @description 针对表【erp_ship_stock_up(备货表)】的数据库操作Service +* @createDate 2024-06-18 15:25:18 +*/ +public interface ErpShipStockUpService extends IService { + +} diff --git a/oms-api/src/main/java/com/qihang/oms/service/impl/ErpSaleOrderServiceImpl.java b/oms-api/src/main/java/com/qihang/oms/service/impl/ErpSaleOrderServiceImpl.java index dbd5960f..0e3eed38 100644 --- a/oms-api/src/main/java/com/qihang/oms/service/impl/ErpSaleOrderServiceImpl.java +++ b/oms-api/src/main/java/com/qihang/oms/service/impl/ErpSaleOrderServiceImpl.java @@ -54,6 +54,8 @@ public class ErpSaleOrderServiceImpl extends ServiceImpl orderSendConfirm(Long shopId, String orderId,String logisticsCompanyCode,String waybillCode) { + List erpSaleOrders = orderMapper.selectList(new LambdaQueryWrapper().eq(ErpSaleOrder::getShopId, shopId).eq(ErpSaleOrder::getOrderNum, orderId)); + if(erpSaleOrders!=null && erpSaleOrders.size()>0){ + // 更新erp sale order 订单表发货状态 + if(erpSaleOrders.get(0).getShipStatus()!=3){ + //2是已发货 + ErpSaleOrder update = new ErpSaleOrder(); + update.setId(erpSaleOrders.get(0).getId()); + update.setOrderStatus(2); + update.setShippingCompany(logisticsCompanyCode); + update.setShippingNumber(waybillCode); + update.setShippingCost(BigDecimal.ZERO); + update.setShippingMan("消息通知发货完成"); + update.setShippingTime(new Date()); + update.setShipStatus(3); + + update.setUpdateTime(new Date()); + update.setUpdateBy("消息通知发货完成"); + orderMapper.updateById(update); + } + // 更新备货表相关订单状态erp_ship_stock_up + ErpShipStockUp shipStockUp = new ErpShipStockUp(); + shipStockUp.setUpdateBy("消息通知发货完成"); + shipStockUp.setUpdateTime(new Date()); + shipStockUp.setStatus(3);//状态0待备货1备货中2已出库3已发货 + shipStockUpMapper.update(shipStockUp,new LambdaQueryWrapper().eq(ErpShipStockUp::getSaleOrderId,erpSaleOrders.get(0).getId())); + + } + + return ResultVo.success(); + } + + /** + * 订单备货 + * + * @param shopId + * @param orderId + * @return + */ + @Override + public ResultVo orderShipStockUp(Long shopId, String orderId) { + List erpSaleOrders = orderMapper.selectList(new LambdaQueryWrapper().eq(ErpSaleOrder::getShopId, shopId).eq(ErpSaleOrder::getOrderNum, orderId)); + if(erpSaleOrders!=null && erpSaleOrders.size()>0){ + // 查处item + List items = orderItemMapper.selectList(new LambdaQueryWrapper().eq(ErpSaleOrderItem::getOrderId, erpSaleOrders.get(0).getId())); + if(items!=null&& items.size()>0){ + for (var item:items) { + List erpShipStockUps = shipStockUpMapper.selectList(new LambdaQueryWrapper().eq(ErpShipStockUp::getSaleOrderItemId, item.getId())); + if(erpShipStockUps==null || erpShipStockUps.size()==0) { + ErpShipStockUp shipStockUp = new ErpShipStockUp(); + shipStockUp.setSaleOrderId(item.getOrderId()); + shipStockUp.setSaleOrderItemId(item.getId()); + shipStockUp.setOrderNum(erpSaleOrders.get(0).getOrderNum()); + shipStockUp.setOriginalSkuId(item.getOriginalSkuId()); + shipStockUp.setGoodsId(item.getGoodsId()); + shipStockUp.setSpecId(item.getSpecId()); + shipStockUp.setGoodsTitle(item.getGoodsTitle()); + shipStockUp.setGoodsImg(item.getGoodsImg()); + shipStockUp.setGoodsSpec(item.getGoodsSpec()); + shipStockUp.setGoodsNum(item.getGoodsNum()); + shipStockUp.setSpecNum(item.getSpecNum()); + shipStockUp.setQuantity(item.getQuantity()); + shipStockUp.setStatus(0);//状态0待备货1备货中2已出库3已发货 + shipStockUp.setCreateBy("消息通知备货"); + shipStockUp.setCreateTime(new Date()); + shipStockUpMapper.insert(shipStockUp); + } + } + } + } + return ResultVo.success(); + } } diff --git a/oms-api/src/main/java/com/qihang/oms/service/impl/ErpShipStockUpServiceImpl.java b/oms-api/src/main/java/com/qihang/oms/service/impl/ErpShipStockUpServiceImpl.java new file mode 100644 index 00000000..4d426907 --- /dev/null +++ b/oms-api/src/main/java/com/qihang/oms/service/impl/ErpShipStockUpServiceImpl.java @@ -0,0 +1,22 @@ +package com.qihang.oms.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qihang.oms.domain.ErpShipStockUp; +import com.qihang.oms.service.ErpShipStockUpService; +import com.qihang.oms.mapper.ErpShipStockUpMapper; +import org.springframework.stereotype.Service; + +/** +* @author TW +* @description 针对表【erp_ship_stock_up(备货表)】的数据库操作Service实现 +* @createDate 2024-06-18 15:25:18 +*/ +@Service +public class ErpShipStockUpServiceImpl extends ServiceImpl + implements ErpShipStockUpService{ + +} + + + + diff --git a/oms-api/src/main/resources/mapper/ErpShipStockUpMapper.xml b/oms-api/src/main/resources/mapper/ErpShipStockUpMapper.xml new file mode 100644 index 00000000..c7a60f96 --- /dev/null +++ b/oms-api/src/main/resources/mapper/ErpShipStockUpMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + id,sale_order_id,sale_order_item_id, + order_num,original_sku_id,goods_id, + spec_id,goods_title,goods_img, + goods_spec,goods_num,spec_num, + quantity,status,create_time, + create_by,update_time,update_by + + diff --git a/open-api/jd-api/libs/jd-api-1.5.4.jar b/open-api/jd-api/libs/jd-api-1.5.4.jar deleted file mode 100644 index 22c2a485..00000000 Binary files a/open-api/jd-api/libs/jd-api-1.5.4.jar and /dev/null differ diff --git a/open-api/jd-api/libs/jd-api-1.6.17.jar b/open-api/jd-api/libs/jd-api-1.6.17.jar new file mode 100644 index 00000000..0b756285 Binary files /dev/null and b/open-api/jd-api/libs/jd-api-1.6.17.jar differ diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/task/CronTaskLoader.java b/open-api/jd-api/src/main/java/com/qihang/jd/task/CronTaskLoader.java index fa6a4442..c9f50973 100644 --- a/open-api/jd-api/src/main/java/com/qihang/jd/task/CronTaskLoader.java +++ b/open-api/jd-api/src/main/java/com/qihang/jd/task/CronTaskLoader.java @@ -1,45 +1,45 @@ -package com.qihang.jd.task; - -import com.qihang.common.task.SchedulingConfiguration; -import lombok.extern.java.Log; -import org.springframework.boot.ApplicationArguments; -import org.springframework.boot.ApplicationRunner; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import java.util.concurrent.atomic.AtomicBoolean; -@Log -@Component -public class CronTaskLoader implements ApplicationRunner { -// private static final Logger log = LoggerFactory.getLogger(CronTaskLoader.class); - private final SchedulingConfiguration schedulingConfiguration; - private final AtomicBoolean appStarted = new AtomicBoolean(false); - private final AtomicBoolean initializing = new AtomicBoolean(false); - - public CronTaskLoader(SchedulingConfiguration schedulingConfiguration) { - this.schedulingConfiguration = schedulingConfiguration; - } - - /** - * 定时任务配置刷新(10分钟刷新一次) - */ - @Scheduled(fixedDelay = 600000) - public void cronTaskConfigRefresh() { - if (appStarted.get() && initializing.compareAndSet(false, true)) { - log.info("定时调度任务动态加载开始>>>JD>>>"); - try { - schedulingConfiguration.refresh(); - } finally { - initializing.set(false); - } -// log.info("定时调度任务动态加载结束<<<<<<"); - } - } - - @Override - public void run(ApplicationArguments args) { - if (appStarted.compareAndSet(false, true)) { - cronTaskConfigRefresh(); - } - } -} \ No newline at end of file +//package com.qihang.jd.task; +// +//import com.qihang.common.task.SchedulingConfiguration; +//import lombok.extern.java.Log; +//import org.springframework.boot.ApplicationArguments; +//import org.springframework.boot.ApplicationRunner; +//import org.springframework.scheduling.annotation.Scheduled; +//import org.springframework.stereotype.Component; +// +//import java.util.concurrent.atomic.AtomicBoolean; +//@Log +//@Component +//public class CronTaskLoader implements ApplicationRunner { +//// private static final Logger log = LoggerFactory.getLogger(CronTaskLoader.class); +// private final SchedulingConfiguration schedulingConfiguration; +// private final AtomicBoolean appStarted = new AtomicBoolean(false); +// private final AtomicBoolean initializing = new AtomicBoolean(false); +// +// public CronTaskLoader(SchedulingConfiguration schedulingConfiguration) { +// this.schedulingConfiguration = schedulingConfiguration; +// } +// +// /** +// * 定时任务配置刷新(10分钟刷新一次) +// */ +// @Scheduled(fixedDelay = 600000) +// public void cronTaskConfigRefresh() { +// if (appStarted.get() && initializing.compareAndSet(false, true)) { +// log.info("定时调度任务动态加载开始>>>JD>>>"); +// try { +// schedulingConfiguration.refresh(); +// } finally { +// initializing.set(false); +// } +//// log.info("定时调度任务动态加载结束<<<<<<"); +// } +// } +// +// @Override +// public void run(ApplicationArguments args) { +// if (appStarted.compareAndSet(false, true)) { +// cronTaskConfigRefresh(); +// } +// } +//} \ No newline at end of file diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/task/OrderTask.java b/open-api/jd-api/src/main/java/com/qihang/jd/task/OrderTask.java index 31e637e2..765df70a 100644 --- a/open-api/jd-api/src/main/java/com/qihang/jd/task/OrderTask.java +++ b/open-api/jd-api/src/main/java/com/qihang/jd/task/OrderTask.java @@ -1,30 +1,30 @@ -package com.qihang.jd.task; - -import com.qihang.common.task.IPollableService; -import com.qihang.jd.domain.SysTask; -import com.qihang.jd.service.SysTaskService; - -import lombok.AllArgsConstructor; -import lombok.extern.java.Log; -import org.springframework.stereotype.Service; - -import java.time.LocalDateTime; -@Log -@AllArgsConstructor -@Service -public class OrderTask implements IPollableService { - - private final SysTaskService taskService; - @Override - public void poll() { - log.info("=======自动任务==JD===拉取订单========="+ LocalDateTime.now()); -// System.out.printf("更新JD订单%s","echo"); - } - - @Override - public String getCronExpression() { - SysTask task = taskService.getById(2); -// return "0/1 * * * * ?"; - return task.getCron(); - } -} \ No newline at end of file +//package com.qihang.jd.task; +// +//import com.qihang.common.task.IPollableService; +//import com.qihang.jd.domain.SysTask; +//import com.qihang.jd.service.SysTaskService; +// +//import lombok.AllArgsConstructor; +//import lombok.extern.java.Log; +//import org.springframework.stereotype.Service; +// +//import java.time.LocalDateTime; +//@Log +//@AllArgsConstructor +//@Service +//public class OrderTask implements IPollableService { +// +// private final SysTaskService taskService; +// @Override +// public void poll() { +// log.info("=======自动任务==JD===拉取订单========="+ LocalDateTime.now()); +//// System.out.printf("更新JD订单%s","echo"); +// } +// +// @Override +// public String getCronExpression() { +// SysTask task = taskService.getById(2); +//// return "0/1 * * * * ?"; +// return task.getCron(); +// } +//} \ No newline at end of file diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/controller/EwaybillController.java b/open-api/tao-api/src/main/java/com/qihang/tao/controller/EwaybillController.java index 1c98c729..0cc0ddb5 100644 --- a/open-api/tao-api/src/main/java/com/qihang/tao/controller/EwaybillController.java +++ b/open-api/tao-api/src/main/java/com/qihang/tao/controller/EwaybillController.java @@ -29,6 +29,7 @@ import com.qihang.tao.service.OmsTaoOrderService; import com.qihang.tao.service.OmsTaoWaybillAccountService; import lombok.AllArgsConstructor; import lombok.extern.java.Log; +import org.springframework.kafka.core.KafkaTemplate; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @@ -45,6 +46,7 @@ public class EwaybillController extends BaseController { private final OmsTaoWaybillAccountService waybillAccountService; private final OmsTaoOrderService orderService; private final ErpShipWaybillService erpShipWaybillService; + private final KafkaTemplate kafkaTemplate; @RequestMapping(value = "/get_waybill_account_list", method = RequestMethod.POST) public AjaxResult getWaybillAccountList(@RequestBody TaoRequest params) throws Exception { @@ -208,6 +210,7 @@ public class EwaybillController extends BaseController { waybill.setWaybillCode(result.getWaybillCode()); waybill.setLogisticsCode(result.getCpCode()); waybill.setPrintData(result.getPrintData()); + waybill.setStatus(1);//1已取号 erpShipWaybillService.waybillUpdate(waybill); log.info("====保存電子面單信息========"+result.getObjectId()); } @@ -241,6 +244,26 @@ public class EwaybillController extends BaseController { return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有选择订单"); } erpShipWaybillService.printSuccess(req.getShopId(), req.getIds()); + + return AjaxResult.success(); + } + + /** + * 发货 + * @param req + * @return + */ + @PostMapping("/push_ship_send") + @ResponseBody + public AjaxResult pushShipSend(@RequestBody TaoWaybillGetBo req) { + if (req.getShopId() == null || req.getShopId() <= 0) { + return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id"); + } + if (req.getIds() == null || req.getIds().length <= 0) { + return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有选择订单"); + } + erpShipWaybillService.pushShipSend(req.getShopId(), req.getIds()); + return AjaxResult.success(); } } diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/service/ErpShipWaybillService.java b/open-api/tao-api/src/main/java/com/qihang/tao/service/ErpShipWaybillService.java index 528838a4..c9a32f6f 100644 --- a/open-api/tao-api/src/main/java/com/qihang/tao/service/ErpShipWaybillService.java +++ b/open-api/tao-api/src/main/java/com/qihang/tao/service/ErpShipWaybillService.java @@ -16,4 +16,5 @@ public interface ErpShipWaybillService extends IService { List getListByOrderIds(Long shopId,String[] orderIds); ResultVo printSuccess(Long shopId,String[] orderIds); + ResultVo pushShipSend(Long shopId,String[] orderIds); } diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/ErpShipWaybillServiceImpl.java b/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/ErpShipWaybillServiceImpl.java index a23a2dc0..f535b1a8 100644 --- a/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/ErpShipWaybillServiceImpl.java +++ b/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/ErpShipWaybillServiceImpl.java @@ -1,15 +1,19 @@ package com.qihang.tao.service.impl; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qihang.common.common.ResultVo; import com.qihang.common.enums.EnumShopType; +import com.qihang.common.mq.MqMessage; +import com.qihang.common.mq.MqType; import com.qihang.tao.domain.ErpShipWaybill; import com.qihang.tao.domain.OmsTaoOrder; import com.qihang.tao.mapper.OmsTaoOrderMapper; import com.qihang.tao.service.ErpShipWaybillService; import com.qihang.tao.mapper.ErpShipWaybillMapper; import lombok.AllArgsConstructor; +import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +32,7 @@ public class ErpShipWaybillServiceImpl extends ServiceImpl kafkaTemplate; /** * 更新电子面单信息 @@ -94,24 +99,57 @@ public class ErpShipWaybillServiceImpl extends ServiceImpl().eq(OmsTaoOrder::getTid,w.getOrderId())); + orderMapper.update(orderUpdate, new LambdaQueryWrapper().eq(OmsTaoOrder::getTid, w.getOrderId())); - //TODO: 打印成功之后 加入备货清单 + //TODO: 打印成功之后 加入备货清单 采用kafka推送消息处理 + // 打印完成,通知备货 + kafkaTemplate.send(MqType.SHIP_STOCK_UP_MQ, JSONObject.toJSONString(MqMessage.build(w.getShopId(), w.getOrderId()))); + } + } + } + return ResultVo.success(); + } + @Transactional + @Override + public ResultVo pushShipSend(Long shopId, String[] orderIds) { + List erpShipWaybills = mapper.selectList( + new LambdaQueryWrapper() + .eq(ErpShipWaybill::getShopId,shopId) + .in(ErpShipWaybill::getOrderId, Arrays.stream(orderIds).toList())); + if(erpShipWaybills!=null){ + for (var w : erpShipWaybills){ + if(w.getStatus() > 0 && w.getStatus()<3) { + ErpShipWaybill update = new ErpShipWaybill(); + update.setId(erpShipWaybills.get(0).getId()); + update.setStatus(3);// 已发货 + update.setUpdateTime(new Date()); + update.setUpdateBy("电子面单发货"); + mapper.updateById(update); + // 更新关联订单erp_send_status状态 + OmsTaoOrder orderUpdate = new OmsTaoOrder(); + orderUpdate.setErpSendStatus(update.getStatus()); + orderMapper.update(orderUpdate, new LambdaQueryWrapper().eq(OmsTaoOrder::getTid, w.getOrderId())); + + // 更新erp_sale_order发货状态(controller层采用kafka推送消息处理) + // 发货完成,通知发货出库 + kafkaTemplate.send(MqType.SHIP_SEND_MQ, JSONObject.toJSONString(MqMessage.build(w.getShopId(),w.getOrderId(),w.getLogisticsCode(),w.getWaybillCode()))); + } } } return ResultVo.success(); diff --git a/vue/src/api/tao/ewaybill.js b/vue/src/api/tao/ewaybill.js index 3ad38515..3f245702 100644 --- a/vue/src/api/tao/ewaybill.js +++ b/vue/src/api/tao/ewaybill.js @@ -44,3 +44,12 @@ export function pushWaybillPrintSuccess(data) { data: data }) } + + +export function pushShipSend(data) { + return request({ + url: '/api/tao-api/ewaybill/push_ship_send', + method: 'post', + data: data + }) +} diff --git a/vue/src/views/shipping/ewaybillPrint/index.vue b/vue/src/views/shipping/ewaybillPrint/index.vue index 4cca6fb9..33e5d0bd 100644 --- a/vue/src/views/shipping/ewaybillPrint/index.vue +++ b/vue/src/views/shipping/ewaybillPrint/index.vue @@ -5,7 +5,7 @@ - 京东POP电子面单打印暂不支持 + @@ -27,11 +27,12 @@ import printWei from "@/views/shop/wei/ewaybill/index.vue"; import printTao from "@/views/shop/tao/ewaybill/index.vue"; import printPdd from "@/views/shop/pdd/ewaybill/index.vue"; import printDou from "@/views/shop/dou/ewaybill/index.vue"; +import PrintJd from "@/views/shop/jd/ewaybill/index.vue"; export default { name: "print", - components:{printWei,printTao,printPdd,printDou}, + components:{PrintJd, printWei,printTao,printPdd,printDou}, data() { return { activeName: 'printTao' diff --git a/vue/src/views/shop/jd/ewaybill/index.vue b/vue/src/views/shop/jd/ewaybill/index.vue index fe13e1bf..a90a3516 100644 --- a/vue/src/views/shop/jd/ewaybill/index.vue +++ b/vue/src/views/shop/jd/ewaybill/index.vue @@ -2,9 +2,9 @@
- + - 取号 + >电子面单取号 @@ -62,7 +61,7 @@ icon="el-icon-printer" size="mini" @click="handlePrintEwaybill" - >打印电子面单 + >电子面单打印 发货 + >电子面单发货 @@ -80,20 +79,20 @@ - + - +