From a372ea6cf0645ce12af6541958b5c8a3e3fe4b20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=81=E9=BD=90?= <280645618@qq.com> Date: Tue, 18 Jun 2024 20:01:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84jd=E7=94=B5=E5=AD=90=E9=9D=A2?= =?UTF-8?q?=E5=8D=95=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +- docs/qihang-erp.sql | 39 ++- .../com/qihang/oms/domain/ErpShipWaybill.java | 4 + open-api/jd-api/libs/jd-api-1.6.17.jar | Bin 121349 -> 124351 bytes open-api/jd-api/pom.xml | 2 +- .../jd/controller/WaybillController.java | 328 ++++++++++++++++++ .../com/qihang/jd/domain/ErpShipWaybill.java | 78 +++++ .../java/com/qihang/jd/domain/OmsJdOrder.java | 14 + .../qihang/jd/domain/OmsJdWaybillAccount.java | 142 ++++++++ .../com/qihang/jd/domain/bo/JdOrderBo.java | 1 + .../qihang/jd/domain/bo/JdWaybillGetBo.java | 10 + .../jd/mapper/ErpShipWaybillMapper.java | 18 + .../jd/mapper/OmsJdWaybillAccountMapper.java | 18 + .../java/com/qihang/jd/openApi/ApiCommon.java | 32 +- .../jd/service/ErpShipWaybillService.java | 20 ++ .../service/OmsJdWaybillAccountService.java | 13 + .../impl/ErpShipWaybillServiceImpl.java | 161 +++++++++ .../service/impl/OmsJdOrderServiceImpl.java | 7 + .../impl/OmsJdWaybillAccountServiceImpl.java | 22 ++ .../resources/mapper/ErpShipWaybillMapper.xml | 28 ++ .../resources/mapper/OmsJdOrderMapper.xml | 6 +- .../mapper/OmsJdWaybillAccountMapper.xml | 46 +++ .../service/impl/OmsTaoOrderServiceImpl.java | 8 +- vue/src/api/jd/ewaybill.js | 55 +++ vue/src/views/shop/jd/ewaybill/index.vue | 91 ++--- vue/src/views/shop/tao/ewaybill/index.vue | 2 +- 26 files changed, 1063 insertions(+), 94 deletions(-) create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/controller/WaybillController.java create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/domain/ErpShipWaybill.java create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdWaybillAccount.java create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdWaybillGetBo.java create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/mapper/ErpShipWaybillMapper.java create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/mapper/OmsJdWaybillAccountMapper.java create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/service/ErpShipWaybillService.java create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/service/OmsJdWaybillAccountService.java create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/service/impl/ErpShipWaybillServiceImpl.java create mode 100644 open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdWaybillAccountServiceImpl.java create mode 100644 open-api/jd-api/src/main/resources/mapper/ErpShipWaybillMapper.xml create mode 100644 open-api/jd-api/src/main/resources/mapper/OmsJdWaybillAccountMapper.xml create mode 100644 vue/src/api/jd/ewaybill.js diff --git a/README.md b/README.md index 844af343..b9a0985a 100644 --- a/README.md +++ b/README.md @@ -19,20 +19,20 @@ -### 开放计划 -+ [ ] 打单--> 备货 --> 发货 --> 物流跟踪 +### 近期开发计划 ++ [x] 打单--> 备货 --> 发货 --> 物流跟踪 + [ ] 接入店铺退款 + [ ] 淘宝 + [ ] 京东 + [ ] 拼多多 + [ ] 抖店 + [ ] 视频号小店 -+ [ ] 接入电子面单打印 ++ [x] 接入电子面单打印 + [x] 淘宝 - + [ ] 京东 + + [x] 京东 + [x] 视频号小店 - + [ ] 拼多多 - + [ ] 抖店 + + [x] 拼多多 + + [x] 抖店 ## 二、关键流程 diff --git a/docs/qihang-erp.sql b/docs/qihang-erp.sql index 201f47af..0166d80f 100644 --- a/docs/qihang-erp.sql +++ b/docs/qihang-erp.sql @@ -11,7 +11,7 @@ Target Server Version : 80032 File Encoding : 65001 - Date: 18/06/2024 16:00:44 + Date: 18/06/2024 19:59:12 */ SET NAMES utf8mb4; @@ -551,6 +551,7 @@ CREATE TABLE `erp_ship_order_fee` ( DROP TABLE IF EXISTS `erp_ship_stock_up`; CREATE TABLE `erp_ship_stock_up` ( `id` bigint(0) NOT NULL AUTO_INCREMENT, + `shop_id` bigint(0) DEFAULT NULL COMMENT '店铺id', `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 '订单编号', @@ -1041,6 +1042,9 @@ CREATE TABLE `oms_jd_order` ( `create_time` datetime(0) DEFAULT NULL, `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 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '京东订单表' ROW_FORMAT = Dynamic; @@ -1077,6 +1081,39 @@ CREATE TABLE `oms_jd_order_item` ( PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '京东订单明细表' ROW_FORMAT = Dynamic; +-- ---------------------------- +-- Table structure for oms_jd_waybill_account +-- ---------------------------- +DROP TABLE IF EXISTS `oms_jd_waybill_account`; +CREATE TABLE `oms_jd_waybill_account` ( + `id` bigint(0) NOT NULL AUTO_INCREMENT, + `shop_id` bigint(0) NOT NULL COMMENT '店铺id', + `seller_id` bigint(0) DEFAULT NULL COMMENT '商家ID', + `provider_id` int(0) DEFAULT NULL COMMENT '承运商id', + `provider_code` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '承运商编码', + `provider_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '承运商名称', + `provider_type` int(0) DEFAULT NULL COMMENT '承运商类型,1-快递公司 2-物流公司 3-安装公司 4-生鲜冷链公司', + `amount` int(0) DEFAULT NULL COMMENT '可用单数', + `support_cod` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否支持货到付款', + `branch_code` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网点ID', + `branch_name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '网点名称', + `settlement_code` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '财务结算编码', + `province_id` int(0) DEFAULT NULL, + `province_name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '省名称(一级地址)', + `city_id` int(0) DEFAULT NULL, + `city_name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '市名称(二级地址)', + `country_id` int(0) DEFAULT NULL COMMENT '区名称(三级地址)', + `country_name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `countryside_id` int(0) DEFAULT NULL, + `countryside_name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '区名称(三级地址)', + `address` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '详细地址', + `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发货人', + `mobile` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '发货手机号', + `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; + -- ---------------------------- -- Table structure for oms_pdd_goods -- ---------------------------- diff --git a/oms-api/src/main/java/com/qihang/oms/domain/ErpShipWaybill.java b/oms-api/src/main/java/com/qihang/oms/domain/ErpShipWaybill.java index 10ac4a09..8ba541fa 100644 --- a/oms-api/src/main/java/com/qihang/oms/domain/ErpShipWaybill.java +++ b/oms-api/src/main/java/com/qihang/oms/domain/ErpShipWaybill.java @@ -2,6 +2,9 @@ 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; /** @@ -13,6 +16,7 @@ public class ErpShipWaybill implements Serializable { /** * */ + @TableId(value = "id", type = IdType.AUTO) private Long id; /** 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 index 0b756285c7c2836b4d47b448283a38a9cadeb6aa..91f59656f6a96d42ba6c76ce4ae1d9cd59e47a69 100644 GIT binary patch delta 11293 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 delta 8308 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 1.5.4 system - ${project.basedir}/libs/jd-api-1.5.4.jar + ${project.basedir}/libs/jd-api-1.6.17.jar org.codehaus.jackson diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/controller/WaybillController.java b/open-api/jd-api/src/main/java/com/qihang/jd/controller/WaybillController.java new file mode 100644 index 00000000..1035e325 --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/controller/WaybillController.java @@ -0,0 +1,328 @@ +package com.qihang.jd.controller; + + +import cn.qihangerp.open.jd.WaybillAccountApiHelper; +import cn.qihangerp.open.jd.WaybillApiHelper; +import cn.qihangerp.open.jd.common.ApiResultVo; +import cn.qihangerp.open.jd.jdl.CloudPrintApiHelper; +import cn.qihangerp.open.jd.jdl.CloudPrintData; +import cn.qihangerp.open.jd.jdl.PullCloudPrintRequestDto; +import cn.qihangerp.open.jd.jdl.WayBillInfo; +import cn.qihangerp.open.jd.model.WaybillAccount; +import cn.qihangerp.open.jd.model.WaybillCodeResponse; +import cn.qihangerp.open.jd.request.WaybillAddress; +import cn.qihangerp.open.jd.request.WaybillReceiveRequest; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qihang.common.common.AjaxResult; +import com.qihang.common.enums.HttpStatus; +import com.qihang.jd.domain.ErpShipWaybill; +import com.qihang.jd.domain.OmsJdOrder; +import com.qihang.jd.domain.OmsJdWaybillAccount; +import com.qihang.jd.domain.bo.JdWaybillGetBo; +import com.qihang.jd.openApi.ApiCommon; +import com.qihang.jd.openApi.PullRequest; +import com.qihang.jd.service.ErpShipWaybillService; +import com.qihang.jd.service.OmsJdOrderService; +import com.qihang.jd.service.OmsJdWaybillAccountService; +import com.qihang.security.common.BaseController; +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.*; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +@Log +@AllArgsConstructor +@RestController +@RequestMapping("/ewaybill") +public class WaybillController extends BaseController { + private final ApiCommon apiCommon; + private final OmsJdWaybillAccountService waybillAccountService; + private final OmsJdOrderService orderService; + private final ErpShipWaybillService erpShipWaybillService; + private final KafkaTemplate kafkaTemplate; + + @RequestMapping(value = "/get_waybill_account_list", method = RequestMethod.POST) + public AjaxResult getWaybillAccountList(@RequestBody PullRequest params) throws Exception { + if (params.getShopId() == null || params.getShopId() <= 0) { + return AjaxResult.error(HttpStatus.PARAMS_ERROR, "参数错误,没有店铺Id"); + } + List list = waybillAccountService.list(new LambdaQueryWrapper().eq(OmsJdWaybillAccount::getShopId, params.getShopId()).eq(OmsJdWaybillAccount::getIsShow, 1)); + return AjaxResult.success(list); + } + + /** + * 拉取电子面单账号 + * @param params + * @return + * @throws Exception + */ + @RequestMapping(value = "/pull_waybill_account", method = RequestMethod.POST) + public AjaxResult pullWaybillAccount(@RequestBody PullRequest 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.getWaybillAccount(appKey, appSecret, accessToken, sellId.toString()); + + List list = new ArrayList<>(); + if(apiResultVo.getCode()==0){ + for (var item : apiResultVo.getList()) { + + OmsJdWaybillAccount vo = new OmsJdWaybillAccount(); + vo.setShopId(params.getShopId()); + vo.setSellerId(sellId); + vo.setIsShow(1); + + vo.setProviderId(item.getProviderId()); + vo.setProviderType(item.getProviderType()); + vo.setProviderName(item.getProviderName()); + vo.setProviderCode(item.getProviderCode()); + vo.setBranchCode(item.getBranchCode()); + vo.setBranchName(item.getBranchName()); + vo.setAmount(item.getAmount()); +// vo.setSupportCod(); + vo.setSettlementCode(item.getSettlementCode()); + if (item.getAddress()!=null) { + vo.setProvinceId(item.getAddress().getProvinceId()); + vo.setProvinceName(item.getAddress().getProvinceName()); + vo.setCityId(item.getAddress().getCityId()); + vo.setCityName(item.getAddress().getCityName()); + vo.setCountryId(item.getAddress().getCountryId()); + vo.setCountryName(item.getAddress().getCountryName()); + vo.setCountrysideId(item.getAddress().getCountrysideId()); + vo.setCountrysideName(item.getAddress().getCountrysideName()); + vo.setAddress(item.getAddress().getAddress()); + list.add(vo); + } + + waybillAccountService.save(vo); + log.info("========添加jd电子面单账户信息=========="); + + } + } + + + return AjaxResult.success(list); + } + + @PostMapping("/get_waybill_code") + @ResponseBody + public AjaxResult getWaybillCode(@RequestBody JdWaybillGetBo 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(); + + // 获取电子面单账户信息(包含了发货地址信息) + OmsJdWaybillAccount account = waybillAccountService.getById(req.getAccountId()); + + for(String orderId:req.getIds()){ + if(StringUtils.hasText(orderId)){ + List list = orderService.list(new LambdaQueryWrapper().eq(OmsJdOrder::getOrderId, orderId)); + + if(list!=null && list.size()>0) { + OmsJdOrder omsTaoOrder = list.get(0); + WaybillReceiveRequest request = new WaybillReceiveRequest(); + request.setWaybillType(1); + request.setWaybillCount(1); + request.setProviderCode(account.getProviderCode()); + request.setProviderId(account.getProviderId()); + request.setSettlementCode(account.getSettlementCode()); + request.setSalePlatform("0010001"); + request.setPlatformOrderNo(omsTaoOrder.getOrderId()); + request.setVendorCode(sellerShopId.toString()); + request.setVendorName("xxxxxx"); + request.setVendorOrderCode(omsTaoOrder.getOrderId()); + request.setWeight(BigDecimal.ZERO); + request.setVolume(BigDecimal.ZERO); + request.setPayType(0); + request.setGoodsMoney(BigDecimal.ZERO); + request.setShouldPayMoney(BigDecimal.ZERO); + request.setNeedGuarantee(false); + request.setGuaranteeMoney(BigDecimal.ZERO); + request.setReceiveTimeType(0); + + WaybillAddress fromAddress = new WaybillAddress(); + fromAddress.setProvinceId(account.getProvinceId()); + fromAddress.setProvinceName(account.getProvinceName()); + fromAddress.setCityId(account.getCityId()); + fromAddress.setCityName(account.getCityName()); + fromAddress.setCountryId(account.getCountryId()); + fromAddress.setCountryName(account.getCountryName()); + fromAddress.setCountrysideId(account.getCountrysideId()); + fromAddress.setCountrysideName(account.getCountrysideName()); + fromAddress.setAddress(account.getAddress()); + fromAddress.setContact(account.getName()); + fromAddress.setMobile(account.getMobile()); + fromAddress.setPhone(account.getPhone()); + request.setFromAddress(fromAddress); + + WaybillAddress toAddress = new WaybillAddress(); + toAddress.setProvinceId(StringUtils.hasText(omsTaoOrder.getProvinceId())?Integer.parseInt(omsTaoOrder.getProvinceId()):0); + toAddress.setProvinceName(omsTaoOrder.getProvince()); + toAddress.setCityId(StringUtils.hasText(omsTaoOrder.getCityId())?Integer.parseInt(omsTaoOrder.getCityId()):0); + toAddress.setCityName(omsTaoOrder.getCity()); + toAddress.setCountryId(StringUtils.hasText(omsTaoOrder.getCountyId())?Integer.parseInt(omsTaoOrder.getCounty()):0); + toAddress.setCountryName(omsTaoOrder.getCounty()); + toAddress.setCountrysideId(StringUtils.hasText(omsTaoOrder.getTownId())?Integer.parseInt(omsTaoOrder.getTownId()):0); + toAddress.setCountrysideName(omsTaoOrder.getTown()); + toAddress.setAddress(omsTaoOrder.getFullAddress()); + toAddress.setContact(omsTaoOrder.getFullname()); + toAddress.setMobile(omsTaoOrder.getMobile()); + toAddress.setPhone(omsTaoOrder.getTelephone()); + request.setToAddress(toAddress); + + ApiResultVo apiResultVo = WaybillApiHelper.getWaybillCode(appKey, appSecret, accessToken, request); + if(apiResultVo.getCode()==0){ + // 保持数据 + + ErpShipWaybill waybill = new ErpShipWaybill(); + waybill.setShopId(req.getShopId()); + waybill.setOrderId(apiResultVo.getData().getPlatformOrderNo()); + if(apiResultVo.getData().getWaybillCodeList()!=null&&apiResultVo.getData().getWaybillCodeList().size()>0) { + waybill.setWaybillCode(apiResultVo.getData().getWaybillCodeList().get(0)); + } + waybill.setLogisticsCode(account.getProviderCode()); +// waybill.setPrintData(result.getPrintData()); + waybill.setStatus(1);//1已取号 + erpShipWaybillService.waybillUpdate(waybill); + log.info("====保存電子面單信息jd========"+apiResultVo.getData().getPlatformOrderNo()); + + }else{ + return AjaxResult.error(apiResultVo.getMsg()); + } + } + } + } + + + + + + return success(); + } + + @PostMapping("/get_print_data") + @ResponseBody + public AjaxResult getPrintData(@RequestBody JdWaybillGetBo 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, "参数错误,没有选择订单"); + } + 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(); + + List list = erpShipWaybillService.getListByOrderIds(req.getShopId(), req.getIds()); + List dtos = new ArrayList<>(); + if(list!=null && list.size()>0) { + for (var ship:list) { + if(!StringUtils.hasText(ship.getPrintData())) { + PullCloudPrintRequestDto dto = new PullCloudPrintRequestDto(); + dto.setCpCode(ship.getLogisticsCode()); + dto.setObjectId(ship.getOrderId()); + Map map = new HashMap<>(); + map.put("eCustomerCode", sellerShopId.toString()); + dto.setParameters(map); + List wayBillInfos = new ArrayList<>(); + WayBillInfo w = new WayBillInfo(); + w.setPopFlag(1); + w.setOrderNo(ship.getOrderId()); + w.setWayBillCode(ship.getWaybillCode()); + wayBillInfos.add(w); + dto.setWayBillInfos(wayBillInfos); + dtos.add(dto); + } + } + } + ApiResultVo apiResultVo = CloudPrintApiHelper.pullCloudPrintData(appKey, appSecret, accessToken, dtos); + if(apiResultVo.getCode()==0){ + // 更新数据 + for (var item:apiResultVo.getList()) { + ErpShipWaybill waybillNew = new ErpShipWaybill(); + waybillNew.setPrintData(item.getPerPrintData()); + waybillNew.setUpdateBy("获取打印数据"); + waybillNew.setUpdateTime(new Date()); + erpShipWaybillService.update(waybillNew,new LambdaQueryWrapper().eq(ErpShipWaybill::getWaybillCode,item.getWayBillNo())); + log.info("====保存電子面單打印信息jd========"+item.getWayBillNo()); + ErpShipWaybill list1 = list.stream().filter(x -> x.getWaybillCode().equals(item.getWayBillNo())).findFirst().get(); + if(list1!=null){ + list1.setPrintData(item.getPerPrintData()); + } + } + + + + }else{ + return AjaxResult.error(apiResultVo.getMsg()); + } + return AjaxResult.success(list); + } + + @PostMapping("/push_print_success") + @ResponseBody + public AjaxResult pushPrintSuccess(@RequestBody JdWaybillGetBo 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(); + } + + /** + * 发货 + * @param req + * @return + */ + @PostMapping("/push_ship_send") + @ResponseBody + public AjaxResult pushShipSend(@RequestBody JdWaybillGetBo 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/jd-api/src/main/java/com/qihang/jd/domain/ErpShipWaybill.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/ErpShipWaybill.java new file mode 100644 index 00000000..87355054 --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/ErpShipWaybill.java @@ -0,0 +1,78 @@ +package com.qihang.jd.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/jd-api/src/main/java/com/qihang/jd/domain/OmsJdOrder.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdOrder.java index 78a4cfde..991d61dd 100644 --- a/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdOrder.java +++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdOrder.java @@ -262,6 +262,20 @@ public class OmsJdOrder implements Serializable { * 订单审核时间 */ private Date auditTime; + /** + * erp发货快递公司 + */ + private String erpSendCompany; + + /** + * erp发货快递单号 + */ + private String erpSendCode; + + /** + * erp发货状态 + */ + private Integer erpSendStatus; @TableField(exist = false) private List itemList; diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdWaybillAccount.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdWaybillAccount.java new file mode 100644 index 00000000..be25727d --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/OmsJdWaybillAccount.java @@ -0,0 +1,142 @@ +package com.qihang.jd.domain; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +/** + * 京东电子面单账户信息表 + * @TableName oms_jd_waybill_account + */ +@Data +public class OmsJdWaybillAccount implements Serializable { + /** + * + */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + /** + * 店铺id + */ + private Long shopId; + + /** + * 商家ID + */ + private Long sellerId; + + /** + * 承运商id + */ + private Integer providerId; + + /** + * 承运商编码 + */ + private String providerCode; + + /** + * 承运商名称 + */ + private String providerName; + + /** + * 承运商类型,1-快递公司 2-物流公司 3-安装公司 4-生鲜冷链公司 + */ + private Integer providerType; + + /** + * 可用单数 + */ + private Integer amount; + + /** + * 是否支持货到付款 + */ + private String supportCod; + + /** + * 网点ID + */ + private String branchCode; + + /** + * 网点名称 + */ + private String branchName; + + /** + * 财务结算编码 + */ + private String settlementCode; + + /** + * + */ + private Integer provinceId; + + /** + * 省名称(一级地址) + */ + private String provinceName; + + /** + * + */ + private Integer cityId; + + /** + * 市名称(二级地址) + */ + private String cityName; + + /** + * 区名称(三级地址) + */ + private Integer countryId; + + /** + * + */ + private String countryName; + + /** + * + */ + private Integer countrysideId; + + /** + * 区名称(三级地址) + */ + private String countrysideName; + + /** + * 详细地址 + */ + private String address; + + /** + * 发货人 + */ + 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/jd-api/src/main/java/com/qihang/jd/domain/bo/JdOrderBo.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdOrderBo.java index 73d42d73..98b8b814 100644 --- a/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdOrderBo.java +++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdOrderBo.java @@ -9,4 +9,5 @@ public class JdOrderBo implements Serializable { private String orderId; private Integer shopId; private String orderState; + private Integer erpSendStatus; } diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdWaybillGetBo.java b/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdWaybillGetBo.java new file mode 100644 index 00000000..deb9b7df --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/domain/bo/JdWaybillGetBo.java @@ -0,0 +1,10 @@ +package com.qihang.jd.domain.bo; + +import lombok.Data; + +@Data +public class JdWaybillGetBo { + private Long accountId;//电子面单账户id + private String[] ids; + private Long shopId;//店铺Id +} diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/mapper/ErpShipWaybillMapper.java b/open-api/jd-api/src/main/java/com/qihang/jd/mapper/ErpShipWaybillMapper.java new file mode 100644 index 00000000..e29f0b15 --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/mapper/ErpShipWaybillMapper.java @@ -0,0 +1,18 @@ +package com.qihang.jd.mapper; + +import com.qihang.jd.domain.ErpShipWaybill; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author TW +* @description 针对表【erp_ship_waybill(发货电子面单记录表)】的数据库操作Mapper +* @createDate 2024-06-18 18:48:08 +* @Entity com.qihang.jd.domain.ErpShipWaybill +*/ +public interface ErpShipWaybillMapper extends BaseMapper { + +} + + + + diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/mapper/OmsJdWaybillAccountMapper.java b/open-api/jd-api/src/main/java/com/qihang/jd/mapper/OmsJdWaybillAccountMapper.java new file mode 100644 index 00000000..cd3857fa --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/mapper/OmsJdWaybillAccountMapper.java @@ -0,0 +1,18 @@ +package com.qihang.jd.mapper; + +import com.qihang.jd.domain.OmsJdWaybillAccount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author TW +* @description 针对表【oms_jd_waybill_account(京东电子面单账户信息表)】的数据库操作Mapper +* @createDate 2024-06-18 18:25:19 +* @Entity com.qihang.jd.domain.OmsJdWaybillAccount +*/ +public interface OmsJdWaybillAccountMapper extends BaseMapper { + +} + + + + diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/openApi/ApiCommon.java b/open-api/jd-api/src/main/java/com/qihang/jd/openApi/ApiCommon.java index 11db49cc..ff20ab9e 100644 --- a/open-api/jd-api/src/main/java/com/qihang/jd/openApi/ApiCommon.java +++ b/open-api/jd-api/src/main/java/com/qihang/jd/openApi/ApiCommon.java @@ -49,9 +49,9 @@ public class ApiCommon { // return ResultVo.error(HttpStatus.PARAMS_ERROR, "第三方平台配置错误,没有找到ServerUrl"); // } -// if(shop.getSellerId() == null || shop.getSellerId() <= 0) { -// return com.qihang.tao.common.ApiResult.build(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()); @@ -64,32 +64,6 @@ public class ApiCommon { return ResultVo.error(HttpStatus.UNAUTHORIZED1, "Token已过期,请重新授权", params); } - - /****************先查询卖家对不对***************/ -// TaobaoClient client = new DefaultTaobaoClient(url, appkey, secret); -// UserSellerGetRequest reqSeller = new UserSellerGetRequest(); -// reqSeller.setFields("nick,user_id"); -// UserSellerGetResponse rsp = client.execute(reqSeller, sessionKey); -// if(StringUtils.hasText(rsp.getErrorCode())){ -// if(rsp.getErrorCode().equals("27")){ -// return new ApiResult<>(EnumResultVo.TokenFail.getIndex(), "Token已过期,请重新授权",params); -// } -// else if(rsp.getErrorCode().equals("11")){ -// if(rsp.getSubCode().equals("isv.permission-api-package-limit")) -// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), "请检查淘宝用户API:taobao.user.seller.get是否具有访问权限",params); -// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), rsp.getSubCode(),params); -// } -// else if(rsp.getErrorCode().equals("25")){ -// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), "无效签名!请检查SessionKey、appKey、appSecret是否匹配",params); -// } else -// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), "参数错误!"+(StringUtils.hasText(rsp.getSubMsg()) ? rsp.getSubMsg(): rsp.getMsg())); -// } -// if(rsp.getUser() == null || rsp.getUser().getUserId() == null){ -// return new ApiResult<>(EnumResultVo.ParamsError.getIndex(), "参数错误!请设置店铺SellerUserId值!",params); -// } -// else if (shop.getSellerUserId().longValue() != rsp.getUser().getUserId().longValue()) { -// return new ApiResult<>(EnumResultVo.TokenFail.getIndex(), "当前用户是:" + rsp.getUser().getNick() + ",请重新授权",params); -// } return ResultVo.success(HttpStatus.SUCCESS, params); } diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/service/ErpShipWaybillService.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/ErpShipWaybillService.java new file mode 100644 index 00000000..20141931 --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/ErpShipWaybillService.java @@ -0,0 +1,20 @@ +package com.qihang.jd.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.qihang.common.common.ResultVo; +import com.qihang.jd.domain.ErpShipWaybill; + +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); + ResultVo pushShipSend(Long shopId,String[] orderIds); +} diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/service/OmsJdWaybillAccountService.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/OmsJdWaybillAccountService.java new file mode 100644 index 00000000..bc6c2533 --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/OmsJdWaybillAccountService.java @@ -0,0 +1,13 @@ +package com.qihang.jd.service; + +import com.qihang.jd.domain.OmsJdWaybillAccount; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author TW +* @description 针对表【oms_jd_waybill_account(京东电子面单账户信息表)】的数据库操作Service +* @createDate 2024-06-18 18:25:19 +*/ +public interface OmsJdWaybillAccountService extends IService { + +} diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/ErpShipWaybillServiceImpl.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/ErpShipWaybillServiceImpl.java new file mode 100644 index 00000000..7c4c300e --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/ErpShipWaybillServiceImpl.java @@ -0,0 +1,161 @@ +package com.qihang.jd.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.jd.domain.ErpShipWaybill; +import com.qihang.jd.domain.OmsJdOrder; +import com.qihang.jd.mapper.ErpShipWaybillMapper; +import com.qihang.jd.mapper.OmsJdOrderMapper; +import com.qihang.jd.service.ErpShipWaybillService; +import lombok.AllArgsConstructor; +import org.springframework.kafka.core.KafkaTemplate; +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 OmsJdOrderMapper orderMapper; + private final KafkaTemplate kafkaTemplate; + + /** + * 更新电子面单信息 + * @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状态 + OmsJdOrder orderUpdate = new OmsJdOrder(); + orderUpdate.setErpSendStatus(shipWaybill.getStatus()); + orderUpdate.setErpSendCode(shipWaybill.getWaybillCode()); + orderUpdate.setErpSendCompany(shipWaybill.getLogisticsCode()); + orderMapper.update(orderUpdate,new LambdaQueryWrapper().eq(OmsJdOrder::getOrderId,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){ + if(w.getStatus()==1) { + 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状态 + OmsJdOrder orderUpdate = new OmsJdOrder(); + orderUpdate.setErpSendStatus(update.getStatus()); + + orderMapper.update(orderUpdate, new LambdaQueryWrapper().eq(OmsJdOrder::getOrderId, w.getOrderId())); + + //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状态 + OmsJdOrder orderUpdate = new OmsJdOrder(); + orderUpdate.setErpSendStatus(update.getStatus()); + + orderMapper.update(orderUpdate, new LambdaQueryWrapper().eq(OmsJdOrder::getOrderId, 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/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdOrderServiceImpl.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdOrderServiceImpl.java index 892da29a..8bbbd6b2 100644 --- a/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdOrderServiceImpl.java +++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdOrderServiceImpl.java @@ -43,6 +43,13 @@ public class OmsJdOrderServiceImpl extends ServiceImpl page = mapper.selectPage(pageQuery.build(), queryWrapper); if(page.getRecords()!=null){ diff --git a/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdWaybillAccountServiceImpl.java b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdWaybillAccountServiceImpl.java new file mode 100644 index 00000000..dd40df0a --- /dev/null +++ b/open-api/jd-api/src/main/java/com/qihang/jd/service/impl/OmsJdWaybillAccountServiceImpl.java @@ -0,0 +1,22 @@ +package com.qihang.jd.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qihang.jd.domain.OmsJdWaybillAccount; +import com.qihang.jd.service.OmsJdWaybillAccountService; +import com.qihang.jd.mapper.OmsJdWaybillAccountMapper; +import org.springframework.stereotype.Service; + +/** +* @author TW +* @description 针对表【oms_jd_waybill_account(京东电子面单账户信息表)】的数据库操作Service实现 +* @createDate 2024-06-18 18:25:19 +*/ +@Service +public class OmsJdWaybillAccountServiceImpl extends ServiceImpl + implements OmsJdWaybillAccountService{ + +} + + + + diff --git a/open-api/jd-api/src/main/resources/mapper/ErpShipWaybillMapper.xml b/open-api/jd-api/src/main/resources/mapper/ErpShipWaybillMapper.xml new file mode 100644 index 00000000..af99b39a --- /dev/null +++ b/open-api/jd-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/jd-api/src/main/resources/mapper/OmsJdOrderMapper.xml b/open-api/jd-api/src/main/resources/mapper/OmsJdOrderMapper.xml index a62c2c16..47313fbc 100644 --- a/open-api/jd-api/src/main/resources/mapper/OmsJdOrderMapper.xml +++ b/open-api/jd-api/src/main/resources/mapper/OmsJdOrderMapper.xml @@ -55,6 +55,9 @@ + + + @@ -66,7 +69,8 @@ invoice_code,order_remark,order_start_time, order_end_time,fullname,telephone, mobile,full_address,province, - city,county,town, + city,county,town,erp_send_company, + erp_send_code,erp_send_status,create_time, province_id,city_id,county_id, town_id,vender_remark,balance_used, pin,return_order,payment_confirm_time, diff --git a/open-api/jd-api/src/main/resources/mapper/OmsJdWaybillAccountMapper.xml b/open-api/jd-api/src/main/resources/mapper/OmsJdWaybillAccountMapper.xml new file mode 100644 index 00000000..a0a19ff8 --- /dev/null +++ b/open-api/jd-api/src/main/resources/mapper/OmsJdWaybillAccountMapper.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,shop_id,seller_id, + provider_id,provider_code,provider_name, + provider_type,amount,support_cod, + branch_code,branch_name,settlement_code, + province_id,province_name,city_id, + city_name,country_id,country_name, + countryside_id,countryside_name,address, + name,mobile,phone, + is_show + + 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 e53538b9..6653e37f 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,8 +165,14 @@ public class OmsTaoOrderServiceImpl extends ServiceImpl taoGoodsPage = mapper.selectPage(pageQuery.build(), queryWrapper); if(taoGoodsPage.getRecords()!=null){ diff --git a/vue/src/api/jd/ewaybill.js b/vue/src/api/jd/ewaybill.js new file mode 100644 index 00000000..456d81cc --- /dev/null +++ b/vue/src/api/jd/ewaybill.js @@ -0,0 +1,55 @@ +import request from '@/utils/request' +// 获取电子面单账户list +export function getWaybillAccountList(data) { + return request({ + url: '/api/jd-api/ewaybill/get_waybill_account_list', + method: 'post', + data: data + }) +} + + +// 更新电子面单账户 +export function pullWaybillAccount(data) { + return request({ + url: '/api/jd-api/ewaybill/pull_waybill_account', + method: 'post', + data: data + }) +} + +// 取号 +export function getWaybillCode(data) { + return request({ + url: '/api/jd-api/ewaybill/get_waybill_code', + method: 'post', + data: data + }) +} + +// 获取打印的数据 +export function getWaybillPrintData(data) { + return request({ + url: '/api/jd-api/ewaybill/get_print_data', + method: 'post', + data: data + }) +} + +// 打印成功 +export function pushWaybillPrintSuccess(data) { + return request({ + url: '/api/jd-api/ewaybill/push_print_success', + method: 'post', + data: data + }) +} + + +export function pushShipSend(data) { + return request({ + url: '/api/jd-api/ewaybill/push_ship_send', + method: 'post', + data: data + }) +} diff --git a/vue/src/views/shop/jd/ewaybill/index.vue b/vue/src/views/shop/jd/ewaybill/index.vue index a90a3516..76f40bb1 100644 --- a/vue/src/views/shop/jd/ewaybill/index.vue +++ b/vue/src/views/shop/jd/ewaybill/index.vue @@ -79,68 +79,52 @@ - + - + - + - - - - - - - - - @@ -171,10 +155,10 @@ - {{ item.cpCode }} - {{item.branchName}}:{{item.quantity}} + {{ item.providerName }} + {{item.branchName}}:{{item.amount}} 更新电子面单账户信息 @@ -193,14 +177,14 @@ import '@riophae/vue-treeselect/dist/vue-treeselect.css' import {listShop} from "@/api/shop/shop"; -import {listOrder} from "@/api/tao/order"; +import {listOrder} from "@/api/jd/order"; import { getWaybillAccountList, pullWaybillAccount, getWaybillCode, getWaybillPrintData, pushWaybillPrintSuccess, pushShipSend -} from "@/api/tao/ewaybill"; +} from "@/api/jd/ewaybill"; export default { name: "printJd", @@ -227,8 +211,8 @@ export default { queryParams: { pageNum: 1, pageSize: 10, - status: 'WAIT_SELLER_SEND_GOODS', - erpSendStatus:null, + orderState: 'WAIT_SELLER_STOCK_OUT', + erpSendStatus:-1, shopId: null }, // 打印参数 @@ -249,7 +233,7 @@ export default { }, created() { this.openWs() - listShop({platform: 4}).then(response => { + listShop({platform: 3}).then(response => { this.shopList = response.rows; if (this.shopList && this.shopList.length > 0) { this.queryParams.shopId = this.shopList[0].id @@ -292,12 +276,12 @@ export default { }, // 多选框选中数据 handleSelectionChange(selection) { - this.ids = selection.map(item => item.tid) + this.ids = selection.map(item => item.orderId) this.single = selection.length !== 1 this.multiple = !selection.length }, openWs() { - const ws = new WebSocket('ws://127.0.0.1:13528'); + const ws = new WebSocket('ws://127.0.0.1:9113'); ws.onopen = () => { console.log('与打印组件建立连接成功: '); // 或打印机 @@ -318,7 +302,7 @@ export default { }; // 当发生错误时触发 ws.onerror = function (error) { - obj.msgError("打印组件连接失败!请安装并启动菜鸟云打印组件!"); + obj.msgError("打印组件连接失败!请安装并启动京东云打印组件!"); console.error('WebSocket error:', error); // alert('WebSocket error occurred. Check the console for more details.'); }; @@ -375,14 +359,13 @@ export default { // } if (!this.printParams.printer) { this.$modal.msgError('请选择打印机!'); - return pushWaybillPrintSuccess({shopId: this.queryParams.shopId, ids: this.ids}) return } 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'); + const ws = new WebSocket('ws://127.0.0.1:9113'); ws.onopen = () => { let printData = [] response.data.forEach(x => printData.push(JSON.parse(x.printData))) diff --git a/vue/src/views/shop/tao/ewaybill/index.vue b/vue/src/views/shop/tao/ewaybill/index.vue index 34a5a2bb..0fa219b1 100644 --- a/vue/src/views/shop/tao/ewaybill/index.vue +++ b/vue/src/views/shop/tao/ewaybill/index.vue @@ -228,7 +228,7 @@ export default { pageNum: 1, pageSize: 10, status: 'WAIT_SELLER_SEND_GOODS', - erpSendStatus:null, + erpSendStatus:-1,//-1代表未发货的 shopId: null }, // 打印参数