diff --git a/docs/erp_ship_waybill.sql b/docs/erp_ship_waybill.sql new file mode 100644 index 00000000..d6a6380a --- /dev/null +++ b/docs/erp_ship_waybill.sql @@ -0,0 +1,68 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80200 + Source Host : localhost:3306 + Source Schema : qihang-erp + + Target Server Type : MySQL + Target Server Version : 80200 + File Encoding : 65001 + + Date: 16/06/2024 18:29:52 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for erp_ship_waybill +-- ---------------------------- +DROP TABLE IF EXISTS `erp_ship_waybill`; +CREATE TABLE `erp_ship_waybill` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `order_id` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '订单号', + `shop_id` bigint NOT NULL COMMENT '店铺id', + `shop_type` int NOT NULL COMMENT '店铺类型', + `waybill_code` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '快递单号', + `logistics_code` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '快递公司编码', + `print_data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '打印数据', + `status` int NULL DEFAULT NULL COMMENT '状态(1已取号2已打印3已发货)', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间', + `update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '发货电子面单记录表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for oms_tao_waybill_account +-- ---------------------------- +DROP TABLE IF EXISTS `oms_tao_waybill_account`; +CREATE TABLE `oms_tao_waybill_account` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `shop_id` bigint NOT NULL COMMENT '店铺id', + `seller_id` bigint NULL DEFAULT NULL COMMENT '商家ID', + `cp_code` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '物流服务商编码', + `cp_type` int NULL DEFAULT NULL COMMENT '1是直营,2是加盟', + `quantity` int NULL DEFAULT NULL COMMENT '可用单数', + `allocated_quantity` int NULL DEFAULT NULL COMMENT '已用单数', + `branch_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '网点ID', + `branch_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '网点名称', + `print_quantity` int NULL DEFAULT NULL COMMENT '已经打印的面单总数', + `cancel_quantity` int NULL DEFAULT NULL COMMENT '取消的面对总数', + `waybill_address_id` bigint NULL DEFAULT NULL COMMENT 'waybill 地址记录ID(非地址库ID)', + `province` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '省名称(一级地址)', + `city` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '市名称(二级地址)', + `area` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '区名称(三级地址)', + `address_detail` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '详细地址', + `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发货人', + `mobile` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发货手机号', + `phone` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发货固定电话', + `is_show` int NULL DEFAULT NULL COMMENT '是否前台显示1显示0不显示', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '淘宝电子面单账户信息表' ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/open-api/tao-api/libs/tao-api2-1.5.4.jar b/open-api/tao-api/libs/tao-api2-1.5.4.jar deleted file mode 100644 index d23d3746..00000000 Binary files a/open-api/tao-api/libs/tao-api2-1.5.4.jar and /dev/null differ diff --git a/open-api/tao-api/libs/tao-api2-1.6.16.jar b/open-api/tao-api/libs/tao-api2-1.6.16.jar new file mode 100644 index 00000000..f042be2b Binary files /dev/null and b/open-api/tao-api/libs/tao-api2-1.6.16.jar differ diff --git a/open-api/tao-api/pom.xml b/open-api/tao-api/pom.xml index d7609f64..5a45f2da 100644 --- a/open-api/tao-api/pom.xml +++ b/open-api/tao-api/pom.xml @@ -26,9 +26,9 @@ cn.qihangerp.open.tao tao-api2 - 1.5.4 + 1.6.16 system - ${project.basedir}/libs/tao-api2-1.5.4.jar + ${project.basedir}/libs/tao-api2-1.6.16.jar 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 new file mode 100644 index 00000000..1c98c729 --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/controller/EwaybillController.java @@ -0,0 +1,246 @@ +package com.qihang.tao.controller; + +import cn.qihangerp.open.tao.WaybillAccountApiHelper; +import cn.qihangerp.open.tao.WaybillApiHelper; +import cn.qihangerp.open.tao.common.ApiResultVo; +import cn.qihangerp.open.tao.model.WaybillBranchAccountList; +import cn.qihangerp.open.tao.model.WaybillCloudPrint; +import cn.qihangerp.open.tao.request.WaybillCloudPrintApplyNewRequest; +import cn.qihangerp.open.tao.request.WaybillCloudPrintApplyNewRequestSender; +import cn.qihangerp.open.tao.request.WaybillCloudPrintApplyNewRequestTradeOrderInfoDto; +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qihang.common.common.AjaxResult; +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.tao.common.BaseController; +import com.qihang.tao.common.TaoRequest; +import com.qihang.tao.domain.ErpShipWaybill; +import com.qihang.tao.domain.OmsTaoOrder; +import com.qihang.tao.domain.OmsTaoWaybillAccount; +import com.qihang.tao.domain.bo.TaoOrderPushBo; +import com.qihang.tao.domain.bo.TaoWaybillGetBo; +import com.qihang.tao.openApi.ApiCommon; +import com.qihang.tao.service.ErpShipWaybillService; +import com.qihang.tao.service.OmsTaoOrderService; +import com.qihang.tao.service.OmsTaoWaybillAccountService; +import lombok.AllArgsConstructor; +import lombok.extern.java.Log; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Log +@AllArgsConstructor +@RestController +@RequestMapping("/ewaybill") +public class EwaybillController extends BaseController { + private final ApiCommon apiCommon; + private final OmsTaoWaybillAccountService waybillAccountService; + private final OmsTaoOrderService orderService; + private final ErpShipWaybillService erpShipWaybillService; + + @RequestMapping(value = "/get_waybill_account_list", method = RequestMethod.POST) + public AjaxResult getWaybillAccountList(@RequestBody TaoRequest params) throws Exception { + if (params.getShopId() == null || params.getShopId() <= 0) { + return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id"); + } + List list = waybillAccountService.list(new LambdaQueryWrapper().eq(OmsTaoWaybillAccount::getShopId, params.getShopId()).eq(OmsTaoWaybillAccount::getIsShow, 1)); + return AjaxResult.success(list); + } + + /** + * 拉取电子面单账号 + * @param params + * @return + * @throws Exception + */ + @RequestMapping(value = "/pull_waybill_account", method = RequestMethod.POST) + public AjaxResult pullWaybillAccount(@RequestBody TaoRequest params) throws Exception { + if (params.getShopId() == null || params.getShopId() <= 0) { + return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id"); + } + + var checkResult = apiCommon.checkBefore(params.getShopId()); + if (checkResult.getCode() != HttpStatus.SUCCESS) { + return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(), checkResult.getData()); + } + String accessToken = checkResult.getData().getAccessToken(); + String appKey = checkResult.getData().getAppKey(); + String appSecret = checkResult.getData().getAppSecret(); + Long sellId = checkResult.getData().getSellerShopId(); + + ApiResultVo apiResultVo = WaybillAccountApiHelper.pullWaybillBranchAccountList(appKey, appSecret, accessToken); + List list = new ArrayList<>(); + if(apiResultVo.getCode()==0){ + for (var item : apiResultVo.getList()){ + for(var acc:item.getBranchAccountCols().getWaybillBranchAccount()){ + OmsTaoWaybillAccount vo = new OmsTaoWaybillAccount(); + vo.setShopId(params.getShopId()); + vo.setSellerId(sellId); + vo.setIsShow(1); + vo.setCpCode(item.getCpCode()); + vo.setCpType(item.getCpType()); + vo.setAllocatedQuantity(acc.getAllocatedQuantity()); + vo.setBranchCode(acc.getBranchCode()); + vo.setBranchName(acc.getBranchName()); + vo.setCancelQuantity(acc.getCancelQuantity()); + vo.setPrintQuantity(acc.getPrintQuantity()); + vo.setQuantity(acc.getQuantity()); + if(acc.getShippAddressCols().getWaybillAddress().size()>0) { + vo.setAddressDetail(acc.getShippAddressCols().getWaybillAddress().get(0).getAddressDetail()); + vo.setArea(acc.getShippAddressCols().getWaybillAddress().get(0).getArea()); + vo.setCity(acc.getShippAddressCols().getWaybillAddress().get(0).getCity()); + vo.setProvince(acc.getShippAddressCols().getWaybillAddress().get(0).getProvince()); + vo.setWaybillAddressId(acc.getShippAddressCols().getWaybillAddress().get(0).getWaybillAddressId().longValue()); + list.add(vo); + } + + waybillAccountService.save(vo); + log.info("========添加tao电子面单账户信息=========="); + } + } + } + + + return AjaxResult.success(list); + } + + @PostMapping("/get_waybill_code") + @ResponseBody + public AjaxResult getWaybillCode(@RequestBody TaoWaybillGetBo req) { + if (req.getAccountId() == null || req.getAccountId() <= 0) { + return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,请选择电子面单账户"); + } + 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, "参数错误,没有选择订单"); + } + var checkResult = apiCommon.checkBefore(req.getShopId()); + if (checkResult.getCode() != HttpStatus.SUCCESS) { + return AjaxResult.error(checkResult.getCode(), checkResult.getMsg(), checkResult.getData()); + } + String accessToken = checkResult.getData().getAccessToken(); + String appKey = checkResult.getData().getAppKey(); + String appSecret = checkResult.getData().getAppSecret(); + Long sellerShopId = checkResult.getData().getSellerShopId(); + + // 获取电子面单账户信息(包含了发货地址信息) + OmsTaoWaybillAccount account = waybillAccountService.getById(req.getAccountId()); + + WaybillCloudPrintApplyNewRequest request = new WaybillCloudPrintApplyNewRequest(); + request.setCp_code(account.getCpCode()); + + WaybillCloudPrintApplyNewRequestSender sender = new WaybillCloudPrintApplyNewRequestSender(); + sender.setName(account.getName()); + sender.setMobile(account.getMobile()); + WaybillCloudPrintApplyNewRequestSender.AddressDTO addressDTO = new WaybillCloudPrintApplyNewRequestSender.AddressDTO(); + addressDTO.setCity(account.getCity()); + addressDTO.setProvince(account.getProvince()); + addressDTO.setDistrict(account.getArea()); + addressDTO.setTown(""); + addressDTO.setDetail(account.getAddressDetail()); + sender.setAddress(addressDTO); + request.setSender(sender); + + // 组合取号的订单信息trade_order_info_dtos + List orderList = new ArrayList<>(); + + for(String orderId:req.getIds()){ + if(StringUtils.hasText(orderId)){ + OmsTaoOrder omsTaoOrder = orderService.queryDetailByTid(orderId); + if(omsTaoOrder!=null) { + WaybillCloudPrintApplyNewRequestTradeOrderInfoDto dto = new WaybillCloudPrintApplyNewRequestTradeOrderInfoDto(); + dto.setObjectId(omsTaoOrder.getTid()); + dto.setTemplateUrl("http://cloudprint.cainiao.com/template/standard/101"); + dto.setUserId(sellerShopId.intValue()); + + WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.OrderInfoDTO orderInfoDTO = new WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.OrderInfoDTO(); + orderInfoDTO.setOrderChannelsType("TB"); + orderInfoDTO.setTradeOrderList(omsTaoOrder.getTid()); + dto.setOrderInfo(orderInfoDTO); + + WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.PackageInfoDTO packageInfoDTO = new WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.PackageInfoDTO(); + List items = new ArrayList<>(); + for (var orderItem : omsTaoOrder.getItems()) { + WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.PackageInfoDTO.ItemsDTO itemsDTO = new WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.PackageInfoDTO.ItemsDTO(); + itemsDTO.setCount(orderItem.getNum()); + itemsDTO.setName(orderItem.getTitle()); + items.add(itemsDTO); + } + packageInfoDTO.setItems(items); + dto.setPackageInfo(packageInfoDTO); + + WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.RecipientDTO recipientDTO = new WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.RecipientDTO(); + WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.RecipientDTO.AddressDTO addressDTO1 = new WaybillCloudPrintApplyNewRequestTradeOrderInfoDto.RecipientDTO.AddressDTO(); + addressDTO1.setCity(omsTaoOrder.getReceiverCity()); + addressDTO1.setTown(omsTaoOrder.getReceiverTown()); + addressDTO1.setProvince(omsTaoOrder.getReceiverState()); + addressDTO1.setDistrict(omsTaoOrder.getReceiverDistrict()); + addressDTO1.setDetail(omsTaoOrder.getReceiverAddress()); + recipientDTO.setAddress(addressDTO1); + recipientDTO.setName(omsTaoOrder.getReceiverName()); + recipientDTO.setOaid(omsTaoOrder.getOaid()); + recipientDTO.setTid(omsTaoOrder.getTid()); + dto.setRecipient(recipientDTO); + orderList.add(dto); + } + } + } + + request.setTrade_order_info_dtos(orderList); + + ApiResultVo apiResultVo = WaybillApiHelper.waybillCloudPrintApplyNew(appKey, appSecret, accessToken, request); + if(apiResultVo.getCode()==0){ + // 保持数据 + for(var result: apiResultVo.getList()){ + ErpShipWaybill waybill = new ErpShipWaybill(); + waybill.setShopId(req.getShopId()); + waybill.setOrderId(result.getObjectId()); + waybill.setWaybillCode(result.getWaybillCode()); + waybill.setLogisticsCode(result.getCpCode()); + waybill.setPrintData(result.getPrintData()); + erpShipWaybillService.waybillUpdate(waybill); + log.info("====保存電子面單信息========"+result.getObjectId()); + } + }else{ + return AjaxResult.error(apiResultVo.getMsg()); + } + + return success(); + } + + @PostMapping("/get_print_data") + @ResponseBody + public AjaxResult getPrintData(@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, "参数错误,没有选择订单"); + } + List listByOrderIds = erpShipWaybillService.getListByOrderIds(req.getShopId(), req.getIds()); + return AjaxResult.success(listByOrderIds); + } + + @PostMapping("/push_print_success") + @ResponseBody + public AjaxResult pushPrintSuccess(@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.printSuccess(req.getShopId(), req.getIds()); + return AjaxResult.success(); + } +} diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/domain/ErpShipWaybill.java b/open-api/tao-api/src/main/java/com/qihang/tao/domain/ErpShipWaybill.java new file mode 100644 index 00000000..ea0d7344 --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/domain/ErpShipWaybill.java @@ -0,0 +1,78 @@ +package com.qihang.tao.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_waybill + */ +@Data +public class ErpShipWaybill implements Serializable { + /** + * + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 订单号 + */ + private String orderId; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 店铺类型 + */ + private Integer shopType; + + /** + * 快递单号 + */ + private String waybillCode; + + /** + * 快递公司编码 + */ + private String logisticsCode; + + /** + * 打印数据 + */ + private String printData; + + /** + * 状态(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/open-api/tao-api/src/main/java/com/qihang/tao/domain/OmsTaoWaybillAccount.java b/open-api/tao-api/src/main/java/com/qihang/tao/domain/OmsTaoWaybillAccount.java new file mode 100644 index 00000000..a688fdf4 --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/domain/OmsTaoWaybillAccount.java @@ -0,0 +1,98 @@ +package com.qihang.tao.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; + +/** + * 淘宝电子面单账户信息表 + * @TableName oms_tao_waybill_account + */ +@Data +public class OmsTaoWaybillAccount implements Serializable { + /** + * + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + private Long shopId; + + /** + * 物流服务商编码 + */ + private String cpCode; + + /** + * 1是直营,2是加盟 + */ + private Integer cpType; + + /** + * 商家ID + */ + private Long sellerId; + + /** + * 可用单数 + */ + private Integer quantity; + + /** + * 已用单数 + */ + private Integer allocatedQuantity; + + /** + * 网点ID + */ + private String branchCode; + private String branchName; + + /** + * 已经打印的面单总数 + */ + private Integer printQuantity; + + /** + * 取消的面对总数 + */ + private Integer cancelQuantity; + + /** + * waybill 地址记录ID(非地址库ID) + */ + private Long waybillAddressId; + + /** + * 省名称(一级地址) + */ + private String province; + + /** + * 市名称(二级地址) + */ + private String city; + + /** + * 区名称(三级地址) + */ + private String area; + + /** + * 详细地址 + */ + private String addressDetail; + private String name; + private String mobile; + private String phone; + + /** + * 是否前台显示1显示0不显示 + */ + private Integer isShow; + + private static final long serialVersionUID = 1L; + +} \ No newline at end of file diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/domain/bo/TaoOrderBo.java b/open-api/tao-api/src/main/java/com/qihang/tao/domain/bo/TaoOrderBo.java index 9fb71209..e5d5fbb0 100644 --- a/open-api/tao-api/src/main/java/com/qihang/tao/domain/bo/TaoOrderBo.java +++ b/open-api/tao-api/src/main/java/com/qihang/tao/domain/bo/TaoOrderBo.java @@ -11,4 +11,5 @@ public class TaoOrderBo implements Serializable { private Long erpGoodsSkuId; private Long shopId; private String status; + private Integer erpSendStatus; } diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/domain/bo/TaoWaybillGetBo.java b/open-api/tao-api/src/main/java/com/qihang/tao/domain/bo/TaoWaybillGetBo.java new file mode 100644 index 00000000..9562d19e --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/domain/bo/TaoWaybillGetBo.java @@ -0,0 +1,10 @@ +package com.qihang.tao.domain.bo; + +import lombok.Data; + +@Data +public class TaoWaybillGetBo { + private Long accountId;//电子面单账户id + private String[] ids; + private Long shopId;//店铺Id +} diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/domain/vo/WaybillBranchAccountVo.java b/open-api/tao-api/src/main/java/com/qihang/tao/domain/vo/WaybillBranchAccountVo.java new file mode 100644 index 00000000..db3433d9 --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/domain/vo/WaybillBranchAccountVo.java @@ -0,0 +1,32 @@ +//package com.qihang.tao.domain.vo; +// +//import com.fasterxml.jackson.annotation.JsonProperty; +//import lombok.Data; +// +//@Data +//public class WaybillBranchAccountVo { +// private String cpCode; +// private Integer cpType; +// +// private Integer allocatedQuantity; +// +// private String branchCode; +// +// private String branchName; +// +// private Integer cancelQuantity; +// +// private Integer printQuantity; +// +// private Integer quantity; +// +// private String addressDetail; +// +// private String area; +// +// private String city; +// +// private String province; +// +// private Integer waybillAddressId; +//} diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/mapper/ErpShipWaybillMapper.java b/open-api/tao-api/src/main/java/com/qihang/tao/mapper/ErpShipWaybillMapper.java new file mode 100644 index 00000000..15d9495e --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/mapper/ErpShipWaybillMapper.java @@ -0,0 +1,18 @@ +package com.qihang.tao.mapper; + +import com.qihang.tao.domain.ErpShipWaybill; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author qilip +* @description 针对表【erp_ship_waybill(发货电子面单记录表)】的数据库操作Mapper +* @createDate 2024-06-16 17:18:22 +* @Entity com.qihang.tao.domain.ErpShipWaybill +*/ +public interface ErpShipWaybillMapper extends BaseMapper { + +} + + + + diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/mapper/OmsTaoWaybillAccountMapper.java b/open-api/tao-api/src/main/java/com/qihang/tao/mapper/OmsTaoWaybillAccountMapper.java new file mode 100644 index 00000000..8dacafb4 --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/mapper/OmsTaoWaybillAccountMapper.java @@ -0,0 +1,18 @@ +package com.qihang.tao.mapper; + +import com.qihang.tao.domain.OmsTaoWaybillAccount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author qilip +* @description 针对表【oms_tao_waybill_account(淘宝电子面单账户信息表)】的数据库操作Mapper +* @createDate 2024-06-16 11:56:38 +* @Entity com.qihang.tao.domain.OmsTaoWaybillAccount +*/ +public interface OmsTaoWaybillAccountMapper extends BaseMapper { + +} + + + + diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/openApi/ApiCommon.java b/open-api/tao-api/src/main/java/com/qihang/tao/openApi/ApiCommon.java index 3a593539..8648797e 100644 --- a/open-api/tao-api/src/main/java/com/qihang/tao/openApi/ApiCommon.java +++ b/open-api/tao-api/src/main/java/com/qihang/tao/openApi/ApiCommon.java @@ -50,9 +50,9 @@ public class ApiCommon { // if(!StringUtils.hasText(platform.getServerUrl())) { // return ResultVo.error(HttpStatus.PARAMS_ERROR, "第三方平台配置错误,没有找到ApiRequestUrl"); // } -// if(shop.getSellerId() == null || shop.getSellerId() <= 0) { -// return ResultVo.error(HttpStatus.PARAMS_ERROR, "第三方平台配置错误,没有找到SellerUserId"); -// } + if(shop.getSellerShopId() == null || shop.getSellerShopId() <= 0) { + return ResultVo.error(HttpStatus.PARAMS_ERROR, "第三方平台配置错误,没有找到SellerShopId"); + } ShopApiParams params = new ShopApiParams(); params.setAppKey(platform.getAppKey()); @@ -60,7 +60,7 @@ public class ApiCommon { params.setAccessToken(shop.getAccessToken()); params.setRedirectUrl(platform.getRedirectUrl()); params.setServerUrl(platform.getServerUrl()); - + params.setSellerShopId(shop.getSellerShopId()); if (!StringUtils.hasText(shop.getAccessToken())) { return ResultVo.error(HttpStatus.UNAUTHORIZED, "Token已过期,请重新授权", params); 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 new file mode 100644 index 00000000..528838a4 --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/service/ErpShipWaybillService.java @@ -0,0 +1,19 @@ +package com.qihang.tao.service; + +import com.qihang.common.common.ResultVo; +import com.qihang.tao.domain.ErpShipWaybill; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** +* @author qilip +* @description 针对表【erp_ship_waybill(发货电子面单记录表)】的数据库操作Service +* @createDate 2024-06-16 17:18:22 +*/ +public interface ErpShipWaybillService extends IService { + ResultVo waybillUpdate(ErpShipWaybill shipWaybill); + List getListByOrderIds(Long shopId,String[] orderIds); + + ResultVo printSuccess(Long shopId,String[] orderIds); +} diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/service/OmsTaoOrderService.java b/open-api/tao-api/src/main/java/com/qihang/tao/service/OmsTaoOrderService.java index f7982d3b..d599afac 100644 --- a/open-api/tao-api/src/main/java/com/qihang/tao/service/OmsTaoOrderService.java +++ b/open-api/tao-api/src/main/java/com/qihang/tao/service/OmsTaoOrderService.java @@ -25,5 +25,5 @@ public interface OmsTaoOrderService extends IService { PageResult queryPageList(TaoOrderBo bo, PageQuery pageQuery); OmsTaoOrder queryDetailById(Long id); - + OmsTaoOrder queryDetailByTid(String tid); } diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/service/OmsTaoWaybillAccountService.java b/open-api/tao-api/src/main/java/com/qihang/tao/service/OmsTaoWaybillAccountService.java new file mode 100644 index 00000000..e36f4b0b --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/service/OmsTaoWaybillAccountService.java @@ -0,0 +1,13 @@ +package com.qihang.tao.service; + +import com.qihang.tao.domain.OmsTaoWaybillAccount; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author qilip +* @description 针对表【oms_tao_waybill_account(淘宝电子面单账户信息表)】的数据库操作Service +* @createDate 2024-06-16 11:56:38 +*/ +public interface OmsTaoWaybillAccountService extends IService { + +} 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 new file mode 100644 index 00000000..00e250d8 --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/ErpShipWaybillServiceImpl.java @@ -0,0 +1,117 @@ +package com.qihang.tao.service.impl; + +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.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.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** +* @author qilip +* @description 针对表【erp_ship_waybill(发货电子面单记录表)】的数据库操作Service实现 +* @createDate 2024-06-16 17:18:22 +*/ +@AllArgsConstructor +@Service +public class ErpShipWaybillServiceImpl extends ServiceImpl + implements ErpShipWaybillService{ + private final ErpShipWaybillMapper mapper; + private final OmsTaoOrderMapper orderMapper; + + /** + * 更新电子面单信息 + * @param shipWaybill + * @return + */ + @Transactional + @Override + public ResultVo waybillUpdate(ErpShipWaybill shipWaybill) { + String orderId= shipWaybill.getOrderId(); + if(shipWaybill.getId()!=null&&shipWaybill.getId()>0){ + // 存在,修改 + shipWaybill.setCreateBy(null); + shipWaybill.setCreateTime(null); + shipWaybill.setOrderId(null); + shipWaybill.setShopId(null); + shipWaybill.setShopType(null); + mapper.updateById(shipWaybill); + }else{ + // 新增 + List erpShipWaybills = mapper.selectList(new LambdaQueryWrapper().eq(ErpShipWaybill::getOrderId, orderId)); + if(erpShipWaybills==null|| erpShipWaybills.size()==0) { + shipWaybill.setStatus(1);//已取号 + shipWaybill.setShopType(EnumShopType.TAO.getIndex()); + shipWaybill.setCreateTime(new Date()); + mapper.insert(shipWaybill); + }else{ + ErpShipWaybill update = new ErpShipWaybill(); + update.setId(erpShipWaybills.get(0).getId()); + update.setWaybillCode(shipWaybill.getWaybillCode()); + update.setLogisticsCode(shipWaybill.getLogisticsCode()); + update.setPrintData(shipWaybill.getPrintData()); + update.setStatus(1); + update.setUpdateTime(new Date()); + update.setUpdateBy("重新取号"); + mapper.updateById(update); + } + } + // 更新关联订单erp_send_status状态 + OmsTaoOrder orderUpdate = new OmsTaoOrder(); + orderUpdate.setErpSendStatus(shipWaybill.getStatus()); + orderUpdate.setErpSendCode(shipWaybill.getWaybillCode()); + orderUpdate.setErpSendCompany(shipWaybill.getLogisticsCode()); + orderMapper.update(orderUpdate,new LambdaQueryWrapper().eq(OmsTaoOrder::getTid,orderId)); + + return ResultVo.success(); + } + + @Override + public List getListByOrderIds(Long shopId, String[] orderIds) { + List erpShipWaybills = mapper.selectList( + new LambdaQueryWrapper() + .eq(ErpShipWaybill::getShopId,shopId) + .in(ErpShipWaybill::getOrderId, Arrays.stream(orderIds).toList())); + return erpShipWaybills; + } + + @Transactional + @Override + public ResultVo printSuccess(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){ + ErpShipWaybill update = new ErpShipWaybill(); + update.setId(erpShipWaybills.get(0).getId()); + update.setStatus(2); + 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())); + } + } + return ResultVo.success(); + } +} + + + + diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoOrderServiceImpl.java b/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoOrderServiceImpl.java index 8a8eb1d3..e53538b9 100644 --- a/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoOrderServiceImpl.java +++ b/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoOrderServiceImpl.java @@ -165,6 +165,7 @@ public class OmsTaoOrderServiceImpl extends ServiceImpl taoGoodsPage = mapper.selectPage(pageQuery.build(), queryWrapper); @@ -182,6 +183,15 @@ public class OmsTaoOrderServiceImpl extends ServiceImpl().eq(OmsTaoOrderItem::getTid,omsTaoOrder.getTid()))); return omsTaoOrder; } + @Override + public OmsTaoOrder queryDetailByTid(String tid) { + List omsTaoOrders = mapper.selectList(new LambdaQueryWrapper().eq(OmsTaoOrder::getTid, tid)); + if(omsTaoOrders == null) return null; + + OmsTaoOrder omsTaoOrder = omsTaoOrders.get(0); + omsTaoOrder.setItems(itemMapper.selectList(new LambdaQueryWrapper().eq(OmsTaoOrderItem::getTid,omsTaoOrder.getTid()))); + return omsTaoOrder; + } } diff --git a/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoWaybillAccountServiceImpl.java b/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoWaybillAccountServiceImpl.java new file mode 100644 index 00000000..068007a9 --- /dev/null +++ b/open-api/tao-api/src/main/java/com/qihang/tao/service/impl/OmsTaoWaybillAccountServiceImpl.java @@ -0,0 +1,22 @@ +package com.qihang.tao.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qihang.tao.domain.OmsTaoWaybillAccount; +import com.qihang.tao.service.OmsTaoWaybillAccountService; +import com.qihang.tao.mapper.OmsTaoWaybillAccountMapper; +import org.springframework.stereotype.Service; + +/** +* @author qilip +* @description 针对表【oms_tao_waybill_account(淘宝电子面单账户信息表)】的数据库操作Service实现 +* @createDate 2024-06-16 11:56:38 +*/ +@Service +public class OmsTaoWaybillAccountServiceImpl extends ServiceImpl + implements OmsTaoWaybillAccountService{ + +} + + + + diff --git a/open-api/tao-api/src/main/resources/mapper/ErpShipWaybillMapper.xml b/open-api/tao-api/src/main/resources/mapper/ErpShipWaybillMapper.xml new file mode 100644 index 00000000..68098896 --- /dev/null +++ b/open-api/tao-api/src/main/resources/mapper/ErpShipWaybillMapper.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + id,order_id,shop_id, + shop_type,waybill_code,logistics_code, + print_data,status,create_time, + create_by,update_time,update_by + + diff --git a/open-api/tao-api/src/main/resources/mapper/OmsTaoWaybillAccountMapper.xml b/open-api/tao-api/src/main/resources/mapper/OmsTaoWaybillAccountMapper.xml new file mode 100644 index 00000000..f4614119 --- /dev/null +++ b/open-api/tao-api/src/main/resources/mapper/OmsTaoWaybillAccountMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,cp_code,cp_type,shop_id,branch_name, + seller_id,quantity,allocated_quantity, + branch_code,print_quantity,cancel_quantity, + waybill_address_id,province,city,`name`,mobile,phone + area,address_detail,is_show + + diff --git a/vue/src/api/tao/ewaybill.js b/vue/src/api/tao/ewaybill.js new file mode 100644 index 00000000..3ad38515 --- /dev/null +++ b/vue/src/api/tao/ewaybill.js @@ -0,0 +1,46 @@ +import request from '@/utils/request' +// 获取电子面单账户list +export function getWaybillAccountList(data) { + return request({ + url: '/api/tao-api/ewaybill/get_waybill_account_list', + method: 'post', + data: data + }) +} + + +// 更新电子面单账户 +export function pullWaybillAccount(data) { + return request({ + url: '/api/tao-api/ewaybill/pull_waybill_account', + method: 'post', + data: data + }) +} + +// 取号 +export function getWaybillCode(data) { + return request({ + url: '/api/tao-api/ewaybill/get_waybill_code', + method: 'post', + data: data + }) +} + +// 获取打印的数据 +export function getWaybillPrintData(data) { + return request({ + url: '/api/tao-api/ewaybill/get_print_data', + method: 'post', + data: data + }) +} + +// 打印成功 +export function pushWaybillPrintSuccess(data) { + return request({ + url: '/api/tao-api/ewaybill/push_print_success', + method: 'post', + data: data + }) +} diff --git a/vue/src/views/shop/tao/ewaybill/account_list.vue b/vue/src/views/shop/tao/ewaybill/account_list.vue deleted file mode 100644 index 6c303122..00000000 --- a/vue/src/views/shop/tao/ewaybill/account_list.vue +++ /dev/null @@ -1,234 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - 搜索 - 重置 - - - - - - API拉取商品数据 - - - - - - - - - - - - - - - - - - - - - - - - - - - 销售中 - 已下架 - - - - - 关联ERP - - - - - - - - - - - - - - - - - - - - - - diff --git a/vue/src/views/shop/tao/ewaybill/index.vue b/vue/src/views/shop/tao/ewaybill/index.vue index 08630999..ce7e464f 100644 --- a/vue/src/views/shop/tao/ewaybill/index.vue +++ b/vue/src/views/shop/tao/ewaybill/index.vue @@ -1,84 +1,172 @@ - + + + + + + + + + + + + + 搜索 + 重置 + + + + + + - - - - - - 获取 - - - - - - - - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 取号 + + + + + 打印电子面单 + 打印电子面单 + :disabled="multiple" + @click="handleShipSend" + >发货 - + - - - - + - + {{scope.row.tid}} + {{shopList.find(x=>x.id === scope.row.shopId).name}} + + + + + + + + x {{scope.row.num}} + + + + + + + + + + + + + + + + + + + + + {{ parseTime(scope.row.created) }} + + + + - - - - - - 销售中 - 已下架 - - - - - 关联ERP + + + + {{scope.row.receiverName}} {{scope.row.receiverMobile}} + + + {{scope.row.receiverState}} {{scope.row.receiverCity}} {{scope.row.receiverDistrict}} {{scope.row.receiverTown}} + + + {{scope.row.receiverAddress}} + + - - - - + + - - + + + + {{ item.cpCode }} + {{item.branchName}}:{{item.quantity}} + + + 更新电子面单账户信息 @@ -110,7 +206,14 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css' import {listShop} from "@/api/shop/shop"; -import {getDeliverList} from "@/api/wei/ewaybill"; +import {listOrder} from "@/api/tao/order"; +import { + getWaybillAccountList, + pullWaybillAccount, + getWaybillCode, + getWaybillPrintData, + pushWaybillPrintSuccess +} from "@/api/tao/ewaybill"; export default { name: "printTao", @@ -120,6 +223,7 @@ export default { loading: true, // 选中数组 ids: [], + shopList: [], // 非单个禁用 single: true, // 非多个禁用 @@ -130,13 +234,15 @@ export default { total: 0, // 弹出层标题 title: "", - // 是否显示弹出层 - open: false, + // 取号弹出 + getCodeOpen: false, // 查询参数 queryParams: { pageNum: 1, pageSize: 10, - name: null + status: 'WAIT_SELLER_SEND_GOODS', + erpSendStatus:0, + shopId: null }, // 打印参数 printParams: { @@ -149,29 +255,26 @@ export default { printerList: [], deliverList: [], // 表单校验 - rules: {} + rules: { + accountId: [{ required: true, message: '请选择电子面单账户' }], + } }; }, created() { this.openWs() - // listShop({platform:3}).then(response => { - // this.shopList = response.rows; - // }); - // this.getList(); - this.loading = false; + listShop({platform: 4}).then(response => { + this.shopList = response.rows; + if (this.shopList && this.shopList.length > 0) { + this.queryParams.shopId = this.shopList[0].id + } + this.getList(); + }); }, methods: { - /** getDeliverList获取开通的快递公司 */ - getDeliverList(){ - getDeliverList({shopId:2}).then(response => { - this.deliverList = response.data; - }); - - }, /** 查询商品管理列表 */ getList() { this.loading = true; - listGoodsSku(this.queryParams).then(response => { + listOrder(this.queryParams).then(response => { this.orderList = response.rows; this.total = response.total; this.loading = false; @@ -179,7 +282,7 @@ export default { }, // 取消按钮 cancel() { - this.open = false; + this.getCodeOpen = false; this.reset(); }, // 表单重置 @@ -202,31 +305,10 @@ export default { }, // 多选框选中数据 handleSelectionChange(selection) { - this.ids = selection.map(item => item.orderId) - this.single = selection.length!==1 + this.ids = selection.map(item => item.tid) + this.single = selection.length !== 1 this.multiple = !selection.length }, - handleLink(row) { - this.reset(); - const id = row.id || this.ids - getGoodsSku(id).then(response => { - console.log('=====00000000============',response) - this.form = response.data; - this.open = true; - }); - }, - /** 提交按钮 */ - submitForm() { - this.$refs["form"].validate(valid => { - if (valid) { - linkErpGoodsSkuId(this.form).then(response => { - this.$modal.msgSuccess("关联成功"); - this.open = false; - this.getList(); - }); - } - }); - }, openWs() { const ws = new WebSocket('ws://127.0.0.1:13528'); ws.onopen = () => { @@ -248,12 +330,53 @@ export default { } }; // 当发生错误时触发 - ws.onerror = function(error) { + ws.onerror = function (error) { obj.msgError("打印组件连接失败!请安装并启动菜鸟云打印打印组件!"); console.error('WebSocket error:', error); // alert('WebSocket error occurred. Check the console for more details.'); }; }, + // 取号弹窗 + handleGetEwaybillCode() { + const ids = this.ids; + if (ids) { + getWaybillAccountList({shopId: this.queryParams.shopId}).then(response => { + this.deliverList = response.data; + this.getCodeOpen = true + }); + } else { + this.$modal.msgError("请选择订单") + } + }, + // 更新电子面单信息 + updateWaybillAccount() { + pullWaybillAccount({shopId: this.queryParams.shopId}).then(response => { + this.deliverList = response.data; + }); + }, + /** 取号提交按钮 */ + getCodeOpenForm() { + this.$refs["form"].validate(valid => { + if (valid) { + const ids = this.ids; + console.log('=========3333========', ids) + if (ids) { + console.log('===请求参数=====', {shopId: this.queryParams.shopId, ids: ids, accountId: this.form.accountId}) + getWaybillCode({ + shopId: this.queryParams.shopId, + ids: ids, + accountId: this.form.accountId + }).then(response => { + this.$modal.msgSuccess("取号成功") + this.getList() + this.getCodeOpen = false + }); + } else { + this.$modal.msgError("请选择订单") + } + } + }); + }, handlePrintEwaybill() { // if (!this.ws) { // this.$modal.msgError('打印组件连接失败!请安装并启动微信视频号小单打印组件!'); @@ -263,138 +386,82 @@ export default { // this.$modal.msgError('请选择快递公司!'); // return // } - if(!this.printParams.printer){ + if (!this.printParams.printer) { this.$modal.msgError('请选择打印机!'); return } - const ws = new WebSocket('ws://127.0.0.1:13528'); - ws.onopen = () => { - console.log('开始打印: '); - // 打印 - ws.send(JSON.stringify({ - "cmd": "print", - "requestID": "123458976", - "version": "1.0", - "task": { - "taskID": "7293666", - "preview": false, - "printer": this.printParams.printer, - "previewType": "pdf", - "firstDocumentNumber": 10, - "totalDocumentCount": 100, - "documents": [{ - "documentID": "0123456789", - "contents": [{ - "data": { - "_dataFrom": "waybill", - "_page_config": { - "REQUEST_LAYERED_IMAGE": false - }, - "adsInfo": { - "adId": "3", - "advertisementType": "DEFAULT", - "bannerUrl": "https://ad-cdn.cainiao.com/img/3/1672122736541.png", - "miniBannerUrl": "https://ad-cdn.cainiao.com/img/3/1672122733813.png", - "useCustomArea": false - }, - "cpCode": "CP446881", - "extraInfo": { - "appKey": "12175777", - "encryptWaybillCode": "zG7MEOejeVDcuQt6QsjCsA%3D%3D", - "templateAdDisplayUp": true - }, - "needEncrypt": false, - "orderChannelLogo": "https://cdn-cloudprint.cainiao.com/waybill-print/templateImages/tao.png", - "orderChannelsType": "TB", - "packageInfo": { - "goodValue": 34.3, - "goodsDescription": "服装", - "height": 50, - "id": "1", - "items": [ - { - "count": 1, - "name": "衣服" - } - ], - "length": 30, - "packagingDescription": "5纸3木2拖", - "totalPackagesCount": 10, - "volume": 1, - "weight": 1, - "width": 30 - }, - "parent": false, - "realCpCode": "CP446881", - "recipient": { - "address": { - "city": "北京市", - "detail": "AES:RomTZ9FHeg4LOQTx2lyM17d9fJHmOF3PGgsIV0mH13Eb0dd50rNzcNYT4ypTQzqghI04MdngeEM6JEDwnSFgHA==", - "district": "朝阳区", - "province": "北京", - "town": "望京街道" - }, - "caid": "As268woscee", - "mobile": "13260469442-4846", - "name": "李*", - "secretConsigneeMobile": "13260469442-4846", - "tid": "3719055060544802021" - }, - "routingExtraInfo": {}, - "routingInfo": { - "consolidation": {}, - "origin": { - "code": "660605", - "name": "南海区站点" - }, - "receiveBranch": {}, - "sortation": {}, - "startCenter": {}, - "terminalCenter": {} - }, - "secretWaybillType": "recipientSecret", - "sender": { - "address": { - "city": "佛山市", - "detail": "九江镇九江大道珠银库房A1栋(京东仓)", - "district": "南海区", - "province": "广东省" - }, - "mobile": "1326443654", - "name": "Bar", - "phone": "057123222" - }, - "shippingOption": { - "code": "STANDARD_EXPRESS", - "title": "标准快递" - }, - "waybillCode": "700059605746" - }, - "signature": "MD:Aznc5rkMLD16KZwMbdWBtQ==", - "templateURL": "http://cloudprint.cainiao.com/template/standard/101", - "ver": "waybill_print_secret_version_1" - }] - }] - } - })) - }; - let obj = this.$modal; - ws.onmessage = (e) => { - const resp = JSON.parse(e.data || '{}') - if (resp.command === 'print') { - console.log('打印结果: ', resp); - obj.msgError("打印结果!"+JSON.stringify(resp)); + const ids = this.ids; + getWaybillPrintData({shopId: this.queryParams.shopId, ids: ids}).then(response => { + console.log("======打印======", response.data) + if (response.data) { + const ws = new WebSocket('ws://127.0.0.1:13528'); + ws.onopen = () => { + let printData = [] + response.data.forEach(x => printData.push(JSON.parse(x.printData))) + console.log('开始打印: 组合打印数据:', printData); + // 打印 + ws.send(JSON.stringify({ + "cmd": "print", + "requestID": this.getUUID(8, 16), + "version": "1.0", + "task": { + "taskID": this.getUUID(8,10), + "preview": false, + "printer": this.printParams.printer, + "previewType": "pdf", + "firstDocumentNumber": 10, + "totalDocumentCount": 100, + "documents": [{ + "documentID": this.getUUID(8,10), + "contents": printData + }] + } + })) + }; + let obj = this.$modal; + ws.onmessage = (e) => { + const resp = JSON.parse(e.data || '{}') + if (resp.cmd === 'print') { + console.log('打印结果: ', resp); + obj.msgSuccess("打印成功!" + JSON.stringify(resp)); + // 请求回调 + return pushWaybillPrintSuccess({shopId: this.queryParams.shopId, ids: ids}) + } + }; + + + // 当发生错误时触发 + ws.onerror = function (error) { + obj.msgError("打印失败!"); + console.error('WebSocket error:', error); + // alert('WebSocket error occurred. Check the console for more details.'); + }; } - }; + }); - // 当发生错误时触发 - ws.onerror = function(error) { - obj.msgError("打印失败!"); - console.error('WebSocket error:', error); - // alert('WebSocket error occurred. Check the console for more details.'); - }; - + }, + handleShipSend(){ + this.$modal.msgError("开源版本未实现平台发货!请自行对接发货"); + }, + getUUID(len, radix) { + var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); + var uuid = [], i; + radix = radix || chars.length; + if (len) { + for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]; + } else { + var r; + uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'; + uuid[14] = '4'; + for (i = 0; i < 36; i++) { + if (!uuid[i]) { + r = 0 | Math.random() * 16; + uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; + } + } + } + return uuid.join(''); } } }; diff --git a/vue/src/views/shop/tao/order/index.vue b/vue/src/views/shop/tao/order/index.vue index 3a29a7b7..192bfc72 100644 --- a/vue/src/views/shop/tao/order/index.vue +++ b/vue/src/views/shop/tao/order/index.vue @@ -107,9 +107,9 @@ - + - {{ parseTime(scope.row.created, '{y}-{m}-{d} {h}:{m}:{s}') }} + {{ parseTime(scope.row.created) }}
{{scope.row.tid}}
+ {{scope.row.receiverName}} {{scope.row.receiverMobile}} +
+ {{scope.row.receiverState}} {{scope.row.receiverCity}} {{scope.row.receiverDistrict}} {{scope.row.receiverTown}} +
+ {{scope.row.receiverAddress}} +