From 99484c90e0d7093772e632e4da37221191833f04 Mon Sep 17 00:00:00 2001 From: Cauchy Date: Tue, 17 Oct 2023 13:23:21 +0800 Subject: [PATCH] flow finished need to test --- .../java/com/peanut/common/utils/KdUtils.java | 5 +-- .../java/com/peanut/config/Constants.java | 29 ++++++++++++ .../book/entity/BuyOrderDetailEntity.java | 2 +- .../ExpressCommodity.java} | 4 +- .../modules/book/entity/ExpressOrder.java | 7 ++- .../modules/book/service/BuyOrderService.java | 2 +- .../book/service/ExpressFeeService.java | 2 +- .../book/service/ExpressOrderService.java | 16 +++---- .../impl/BuyOrderDetailServiceImpl.java | 10 +---- .../service/impl/BuyOrderServiceImpl.java | 29 +++++++++--- .../service/impl/ExpressFeeServiceImpl.java | 12 ++--- .../service/impl/ExpressOrderServiceImpl.java | 45 +++++++++---------- .../book/vo/ExpressOrderRequestVo.java | 25 ++++++++++- .../modules/book/vo/ExpressUserInfoVo.java | 2 +- 14 files changed, 120 insertions(+), 70 deletions(-) rename src/main/java/com/peanut/modules/book/{vo/ExpressCommodityVo.java => entity/ExpressCommodity.java} (89%) diff --git a/src/main/java/com/peanut/common/utils/KdUtils.java b/src/main/java/com/peanut/common/utils/KdUtils.java index 1f5140fd..252e1da0 100644 --- a/src/main/java/com/peanut/common/utils/KdUtils.java +++ b/src/main/java/com/peanut/common/utils/KdUtils.java @@ -43,8 +43,7 @@ public class KdUtils { } public static String urlEncoder(String str, String charset) throws UnsupportedEncodingException{ - String result = URLEncoder.encode(str, charset); - return result; + return URLEncoder.encode(str, charset); } /** @@ -55,7 +54,7 @@ public class KdUtils { * @throws UnsupportedEncodingException ,Exception * @return DataSign签名 */ - public static String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, Exception + public static String encrypt (String content, String keyValue, String charset) throws Exception { if (keyValue != null) { diff --git a/src/main/java/com/peanut/config/Constants.java b/src/main/java/com/peanut/config/Constants.java index a2e9821e..de6e4a8f 100644 --- a/src/main/java/com/peanut/config/Constants.java +++ b/src/main/java/com/peanut/config/Constants.java @@ -56,4 +56,33 @@ public class Constants { * 购买方式 - 购物车 */ public static final String BUY_TYPE_CART = "1"; + + /** + * 快递鸟 API key + */ + public static final String EXPRESS_API_KEY = "f4342e6c-5cfa-458f-997b-f973eb29eb1d"; + /** + * business ID + */ + public static final String EXPRESS_BUSINESS_ID = "1788532"; + /** + * 顺丰月付码 + */ + public static final String EXPRESS_SF_MONTH_CODE = "0226032007"; + /** + * 快递接口指令-下单 + */ + public static final String EXPRESS_REQUEST_TYPE_PLACE_ORDER = "1007"; + /** + * 快递接口指令-下单 + */ + public static final String EXPRESS_REQUEST_TYPE_QUERY = "1002"; + /** + * 快递接口 - 下单 URL + */ + public static final String EXPRESS_PLACE_ORDER_URL = "https://api.kdniao.com/api/EOrderService"; + /** + * 快递接口 - 查询 URL + */ + public static final String EXPRESS_QUERY_URL = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx"; } \ No newline at end of file diff --git a/src/main/java/com/peanut/modules/book/entity/BuyOrderDetailEntity.java b/src/main/java/com/peanut/modules/book/entity/BuyOrderDetailEntity.java index 019662fe..7342e117 100644 --- a/src/main/java/com/peanut/modules/book/entity/BuyOrderDetailEntity.java +++ b/src/main/java/com/peanut/modules/book/entity/BuyOrderDetailEntity.java @@ -56,7 +56,7 @@ public class BuyOrderDetailEntity implements Serializable { /** * 商品重量 */ - private Float weight; + private Double weight; /** * 商品类型 */ diff --git a/src/main/java/com/peanut/modules/book/vo/ExpressCommodityVo.java b/src/main/java/com/peanut/modules/book/entity/ExpressCommodity.java similarity index 89% rename from src/main/java/com/peanut/modules/book/vo/ExpressCommodityVo.java rename to src/main/java/com/peanut/modules/book/entity/ExpressCommodity.java index 0629b9e1..5c61c7f2 100644 --- a/src/main/java/com/peanut/modules/book/vo/ExpressCommodityVo.java +++ b/src/main/java/com/peanut/modules/book/entity/ExpressCommodity.java @@ -1,4 +1,4 @@ -package com.peanut.modules.book.vo; +package com.peanut.modules.book.entity; import lombok.Data; @@ -8,7 +8,7 @@ import lombok.Data; * @CreateTime: 2023/10/16 */ @Data -public class ExpressCommodityVo { +public class ExpressCommodity { /** * 商品名称 */ diff --git a/src/main/java/com/peanut/modules/book/entity/ExpressOrder.java b/src/main/java/com/peanut/modules/book/entity/ExpressOrder.java index a787d50a..d2851800 100644 --- a/src/main/java/com/peanut/modules/book/entity/ExpressOrder.java +++ b/src/main/java/com/peanut/modules/book/entity/ExpressOrder.java @@ -5,6 +5,7 @@ import lombok.Data; import java.math.BigDecimal; import java.util.Date; +import java.util.List; /** * @Description: 快递订单 @@ -45,7 +46,7 @@ public class ExpressOrder { /** * 总重量 */ - private int totalWeight; + private BigDecimal totalWeight; /** * 创建时间 */ @@ -54,4 +55,8 @@ public class ExpressOrder { * 删除标识 */ private int delFlag; + /** + * 物品信息 + */ + private List Commodity; } diff --git a/src/main/java/com/peanut/modules/book/service/BuyOrderService.java b/src/main/java/com/peanut/modules/book/service/BuyOrderService.java index 43f4c6d0..a9cc9417 100644 --- a/src/main/java/com/peanut/modules/book/service/BuyOrderService.java +++ b/src/main/java/com/peanut/modules/book/service/BuyOrderService.java @@ -28,5 +28,5 @@ public interface BuyOrderService extends IService { // 查询所有订单是否有可合并 Page checkOrder(Map params); - void createSplitPackageOrder(String expressCompanyCode, Integer userAddressId, List shopProductIdList); + void createSplitPackageOrder(String expressCompanyCode, Integer userAddressId, List shopProductIdList) throws Exception; } \ No newline at end of file diff --git a/src/main/java/com/peanut/modules/book/service/ExpressFeeService.java b/src/main/java/com/peanut/modules/book/service/ExpressFeeService.java index 93f6ebca..d92b943c 100644 --- a/src/main/java/com/peanut/modules/book/service/ExpressFeeService.java +++ b/src/main/java/com/peanut/modules/book/service/ExpressFeeService.java @@ -16,5 +16,5 @@ public interface ExpressFeeService extends IService { * @param regionCode 地区代码 * @return BigDecimal 费用 */ - BigDecimal calculateExpressFee(String expressCompanyCode, int weight, String regionCode); + BigDecimal calculateExpressFee(String expressCompanyCode, BigDecimal weight, String regionCode); } diff --git a/src/main/java/com/peanut/modules/book/service/ExpressOrderService.java b/src/main/java/com/peanut/modules/book/service/ExpressOrderService.java index d95cf7c1..a2827387 100644 --- a/src/main/java/com/peanut/modules/book/service/ExpressOrderService.java +++ b/src/main/java/com/peanut/modules/book/service/ExpressOrderService.java @@ -2,23 +2,19 @@ package com.peanut.modules.book.service; import com.baomidou.mybatisplus.extension.service.IService; import com.peanut.modules.book.entity.ExpressOrder; +import com.peanut.modules.book.entity.UserAddress; import org.springframework.stereotype.Service; @Service public interface ExpressOrderService extends IService { /** - * 新增快递订单信息 + * 下单生成面单 * - * @param expressOrder 快递订单 - * @return object - id + * @param userAddress + * @param expressOrder + * @throws Exception */ - int insertNewExpressOrder(ExpressOrder expressOrder); - - void placeExpressOrder(Integer userAddressId, ExpressOrder expressOrder); - -// void printDeliveryBill(); -// -// void expressRealTimeQuery(); + void placeExpressOrder(UserAddress userAddress, ExpressOrder expressOrder) throws Exception; } diff --git a/src/main/java/com/peanut/modules/book/service/impl/BuyOrderDetailServiceImpl.java b/src/main/java/com/peanut/modules/book/service/impl/BuyOrderDetailServiceImpl.java index 596d516a..9bcb99f7 100644 --- a/src/main/java/com/peanut/modules/book/service/impl/BuyOrderDetailServiceImpl.java +++ b/src/main/java/com/peanut/modules/book/service/impl/BuyOrderDetailServiceImpl.java @@ -31,14 +31,6 @@ public class BuyOrderDetailServiceImpl extends ServiceImpl buyOrderDetailEntityList = this.list(new QueryWrapper()); + List buyOrderDetailEntityList = this.list(new QueryWrapper<>()); for(String sn : shippingSnList){ for(BuyOrderDetailEntity buyOrderDetailEntity : buyOrderDetailEntityList){ if(StringUtil.isNotEmpty(buyOrderDetailEntity.getShippingSn()) && buyOrderDetailEntity.getShippingSn().equals(sn)){ diff --git a/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java b/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java index cda9aa2d..c0b4ba36 100644 --- a/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java +++ b/src/main/java/com/peanut/modules/book/service/impl/BuyOrderServiceImpl.java @@ -1,6 +1,5 @@ package com.peanut.modules.book.service.impl; -import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; @@ -13,6 +12,7 @@ import com.peanut.modules.book.dao.BuyOrderDao; import com.peanut.modules.book.dao.ShopProductDao; import com.peanut.modules.book.entity.*; import com.peanut.modules.book.service.*; +import com.peanut.modules.book.entity.ExpressCommodity; import com.peanut.modules.book.vo.UserOrderVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,7 +55,7 @@ public class BuyOrderServiceImpl extends ServiceImpl params) throws Exception { - IPage page = null; + IPage page; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String startTime = null; String endTime = null; @@ -248,9 +248,24 @@ public class BuyOrderServiceImpl extends ServiceImpl shopProductIdList) { - // 根据商品 id 获取总重量 - int totalWeight = shopProductDao.getTotalWeight(shopProductIdList); + public void createSplitPackageOrder(String expressCompanyCode, Integer userAddressId, List buyOrderDetailId) throws Exception { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.in("id", buyOrderDetailId); + List buyOrderDetailList = buyOrderDetailService.list(queryWrapper); + BigDecimal totalWeight = new BigDecimal(0); + List commodityList = new ArrayList<>(); + for (BuyOrderDetailEntity buyOrderDetail : buyOrderDetailList) { + ExpressCommodity commodity = new ExpressCommodity(); + commodity.setGoodsName(buyOrderDetail.getProductName()); + commodity.setGoodsquantity(buyOrderDetail.getQuantity()); + commodity.setGoodsWeight(buyOrderDetail.getWeight()); + totalWeight = totalWeight.add( + BigDecimal.valueOf(buyOrderDetail.getWeight()).multiply(new BigDecimal(buyOrderDetail.getQuantity())) + ); + commodityList.add(commodity); + } + + // 获取用户地址 UserAddress address = userAddressService.getById(userAddressId); // 计算快递费用 @@ -259,9 +274,9 @@ public class BuyOrderServiceImpl extends ServiceImpl implements ExpressFeeService { @Override - public BigDecimal calculateExpressFee(String expressCompanyCode, int weight, String regionCode) { - int integerPart = weight / 100; - int decimalPart = weight % 100; - // 将重量转换为公斤 - BigDecimal realWeight = BigDecimal.valueOf(integerPart).add(BigDecimal.valueOf(decimalPart) - .divide(new BigDecimal(100), MathContext.DECIMAL64)); - realWeight = realWeight.setScale(0, RoundingMode.UP); + public BigDecimal calculateExpressFee(String expressCompanyCode, BigDecimal weight, String regionCode) { BigDecimal fee = null; switch (expressCompanyCode) { case "SF": - fee = calculateSFExpressFee(realWeight, regionCode); + fee = calculateSFExpressFee(weight, regionCode); break; case "YD": - fee = calculateYDExpressFee(realWeight, regionCode); + fee = calculateYDExpressFee(weight, regionCode); break; } return fee; diff --git a/src/main/java/com/peanut/modules/book/service/impl/ExpressOrderServiceImpl.java b/src/main/java/com/peanut/modules/book/service/impl/ExpressOrderServiceImpl.java index 5b77d314..3f18c3e8 100644 --- a/src/main/java/com/peanut/modules/book/service/impl/ExpressOrderServiceImpl.java +++ b/src/main/java/com/peanut/modules/book/service/impl/ExpressOrderServiceImpl.java @@ -1,19 +1,22 @@ package com.peanut.modules.book.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.peanut.common.utils.HttpClientUtils; +import com.peanut.common.utils.KdUtils; +import com.peanut.config.Constants; import com.peanut.modules.book.dao.ExpressOrderDao; import com.peanut.modules.book.entity.*; import com.peanut.modules.book.service.*; -import com.peanut.modules.book.vo.ExpressCommodityVo; import com.peanut.modules.book.vo.ExpressOrderRequestVo; import com.peanut.modules.book.vo.ExpressUserInfoVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; /** * @Description: 快递订单 Service 实现 @@ -36,12 +39,6 @@ public class ExpressOrderServiceImpl extends ServiceImpl commodityVoList = new ArrayList<>(); - orderRequestVo.setCommodity(commodityVoList); - //orderRequestVo.setWeight(expressOrder.getTotalWeight()); + orderRequestVo.setCommodity(expressOrder.getCommodity()); + orderRequestVo.setWeight(expressOrder.getTotalWeight().doubleValue()); orderRequestVo.setRemark(expressOrder.getRemark()); + String RequestData = JSONObject.toJSONString(orderRequestVo); + Map params = new HashMap<>(); + params.put("RequestData", RequestData); + params.put("EBusinessID", Constants.EXPRESS_BUSINESS_ID); + params.put("RequestType", Constants.EXPRESS_REQUEST_TYPE_PLACE_ORDER); + String dataSign = KdUtils.encrypt(RequestData, Constants.EXPRESS_API_KEY, "UTF-8"); + params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8")); + params.put("DataType", "2"); + String response = HttpClientUtils.kdSendPost(Constants.EXPRESS_PLACE_ORDER_URL, params); + System.out.println(response); } private ExpressUserInfoVo buildReceiverBasedOnUserAddress(UserAddress userAddress) { ExpressUserInfoVo vo = new ExpressUserInfoVo(); - vo.setName(userAddress.getConsigneeName()); + vo.setCompany(userAddress.getConsigneeName()); vo.setMobile(userAddress.getConsigneePhone()); vo.setAddress(userAddress.getDetailAddress()); String regionCode = userAddress.getRegionCode(); diff --git a/src/main/java/com/peanut/modules/book/vo/ExpressOrderRequestVo.java b/src/main/java/com/peanut/modules/book/vo/ExpressOrderRequestVo.java index d708541a..ca161aad 100644 --- a/src/main/java/com/peanut/modules/book/vo/ExpressOrderRequestVo.java +++ b/src/main/java/com/peanut/modules/book/vo/ExpressOrderRequestVo.java @@ -1,8 +1,9 @@ package com.peanut.modules.book.vo; +import com.peanut.modules.book.entity.ExpressCommodity; import lombok.Data; -import java.util.List ; +import java.util.List; /** * @Description: 快递请求 Value Object @@ -28,6 +29,18 @@ public class ExpressOrderRequestVo { * 快递公司业务类型 */ private int ExpType; + /** + * 月付款账号 + */ + private String MonthCode; + /** + * 快递运费 + */ + private Double Cost; + /** + * 其他费用 + */ + private Double OtherCost; /** * 发货人 */ @@ -39,11 +52,19 @@ public class ExpressOrderRequestVo { /** * 货物信息 */ - private List Commodity; + private List Commodity; /** * 重量 */ private Double Weight; + /** + * 包裹数量 + */ + private Integer Quantity; + /** + * 包裹体积 + */ + private Double Volume; /** * 备注 */ diff --git a/src/main/java/com/peanut/modules/book/vo/ExpressUserInfoVo.java b/src/main/java/com/peanut/modules/book/vo/ExpressUserInfoVo.java index 94eac6fc..18d9cb56 100644 --- a/src/main/java/com/peanut/modules/book/vo/ExpressUserInfoVo.java +++ b/src/main/java/com/peanut/modules/book/vo/ExpressUserInfoVo.java @@ -12,7 +12,7 @@ public class ExpressUserInfoVo { /** * 姓名 */ - private String Name; + private String Company; /** * 电话 */