diff --git a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java index 342a6b38..d846cf41 100644 --- a/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java +++ b/mall-account/src/main/java/com/suisung/mall/account/service/impl/AccountUserBaseServiceImpl.java @@ -1622,7 +1622,7 @@ public class AccountUserBaseServiceImpl extends BaseServiceImpl - 4.0.0 @@ -263,14 +263,6 @@ - - - commons-logging - commons-logging - 1.2 - - - commons-logging @@ -284,20 +276,6 @@ fluent-hc 4.5.2 - - org.apache.httpcomponents - httpcore - - - org.apache.httpcomponents - httpclient - - - - - - - diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/api/service/KdApiExpressSearchService.java b/mall-shop/src/main/java/com/suisung/mall/shop/api/service/KdApiExpressSearchService.java index ce1cfa65..98cd0e15 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/api/service/KdApiExpressSearchService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/api/service/KdApiExpressSearchService.java @@ -4,6 +4,8 @@ import com.suisung.mall.common.api.CommonResult; import java.io.UnsupportedEncodingException; import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Map; /** * @program: mall-suite @@ -13,7 +15,15 @@ import java.security.NoSuchAlgorithmException; **/ public interface KdApiExpressSearchService { - CommonResult select(String order_id, String stock_bill_id) throws UnsupportedEncodingException, NoSuchAlgorithmException; + CommonResult select(String order_id, String stock_bill_id); CommonResult returnLogistics(String return_tracking_name, String return_tracking_number, String order_id) throws UnsupportedEncodingException, NoSuchAlgorithmException; + + /** + * 根据订单号,获取快递鸟的物流轨迹(注意) + * + * @param order_id + * @return + */ + List> getLogisticsTraces(String order_id); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/api/service/impl/KdApiExpressSearchServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/api/service/impl/KdApiExpressSearchServiceImpl.java index 60190737..0dfe840c 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/api/service/impl/KdApiExpressSearchServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/api/service/impl/KdApiExpressSearchServiceImpl.java @@ -3,6 +3,7 @@ package com.suisung.mall.shop.api.service.impl; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.PhoneUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; @@ -10,6 +11,7 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.suisung.mall.common.api.CommonResult; +import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.exception.ApiException; import com.suisung.mall.common.modules.base.ShopBaseExpress; import com.suisung.mall.common.modules.order.ShopOrderDeliveryAddress; @@ -31,6 +33,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -44,8 +47,8 @@ import java.util.Map; @Service public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService { - public static Map stateMap = new HashMap(); private static final Logger logger = LoggerFactory.getLogger(KdApiExpressSearchServiceImpl.class); + public static Map stateMap = new HashMap(); static { stateMap.put("0", "没有记录"); @@ -70,6 +73,7 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService stateMap.put("412", "快递柜或驿站超时未取"); } + private final String request_url = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx"; @Autowired private ShopOrderLogisticsService shopOrderLogisticsService; @Autowired @@ -80,9 +84,8 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService private ShopBaseExpressService shopBaseExpressService; @Autowired private ShopOrderReturnService shopOrderReturnService; - private final String request_url = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx"; - public String orderOnlineByJson(String order_tracking_number, String shipperCode, String CustomerName) throws UnsupportedEncodingException, NoSuchAlgorithmException { + public String orderOnlineByJson(String order_tracking_number, String shipperCode, String CustomerName) { //组装应用级参数 String RequestData = "{" + "'OrderCode': ''," + @@ -94,16 +97,21 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService Map params = new HashMap<>(); String appId = accountBaseConfigService.getConfig("kuaidiniao_e_business_id"); String appKey = accountBaseConfigService.getConfig("kuaidiniao_app_key"); + try { - params.put("RequestData", urlEncoder(RequestData, "UTF-8")); - params.put("EBusinessID", appId); - params.put("RequestType", "8002");//快递查询接口指令8002/地图版快递查询接口指令8004 - String dataSign = encrypt(RequestData, appKey, "UTF-8"); - params.put("DataSign", urlEncoder(dataSign, "UTF-8")); - params.put("DataType", "2"); - String result = HttpUtil.post(request_url, params); + params.put("RequestData", urlEncoder(RequestData, "UTF-8")); + params.put("EBusinessID", appId); + params.put("RequestType", "8002");//快递查询接口指令8002/地图版快递查询接口指令8004 + String dataSign = encrypt(RequestData, appKey, "UTF-8"); + params.put("DataSign", urlEncoder(dataSign, "UTF-8")); + params.put("DataType", "2"); + String result = HttpUtil.post(request_url, params); - return result; + return result; + } catch (Exception e) { + e.printStackTrace(); + return null; + } } /** @@ -165,7 +173,7 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService } @Override - public CommonResult select(String order_id, String stock_bill_id) throws UnsupportedEncodingException, NoSuchAlgorithmException { + public CommonResult select(String order_id, String stock_bill_id) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("order_id", order_id); queryWrapper.eq("stock_bill_id", stock_bill_id); @@ -182,13 +190,13 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService ShopOrderDeliveryAddress orderDeliveryAddress = shopOrderDeliveryAddressService.get(order_id); String phone_number; try { - phone_number = orderDeliveryAddress.getDa_mobile().substring(7, 11); + phone_number = orderDeliveryAddress.getDa_mobile().substring(7, 11); // 手机号码末尾4位数 } catch (Exception e) { throw new ApiException(I18nUtil._("收货信息中手机号填写错误")); } for (ShopOrderLogistics shopOrderLogistic : shopOrderLogistics) { - String order_tracking_number = shopOrderLogistic.getOrder_tracking_number(); + String order_tracking_number = shopOrderLogistic.getOrder_tracking_number(); // 物流运单号 logistics_info_str = orderOnlineByJson(order_tracking_number, shopOrderLogistic.getLogistics_number(), phone_number); JSONObject logistics_info = JSONUtil.parseObj(logistics_info_str); String StateEx = (String) logistics_info.get("StateEx"); @@ -214,6 +222,64 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService } + + public List> getLogisticsTraces(String order_id) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_id", order_id); + queryWrapper.eq("logistics_enable", CommonConstant.Enable); + + List shopOrderLogistics = shopOrderLogisticsService.find(queryWrapper); + if (CollUtil.isEmpty(shopOrderLogistics)) { + logger.warn(I18nUtil._("未找到发货记录")); + return null; + } + + ShopOrderDeliveryAddress orderDeliveryAddress = shopOrderDeliveryAddressService.get(order_id); + String phone_number; + try { + phone_number = orderDeliveryAddress.getDa_mobile().substring(7, 11); // 手机号码末尾4位数 + } catch (Exception e) { + logger.info(I18nUtil._("收货信息中手机号填写错误")); + return null; + } + + List> retList = new ArrayList<>(); + for (ShopOrderLogistics shopOrderLogistic : shopOrderLogistics) { + Map resultMap = new HashMap(); + String order_tracking_number = shopOrderLogistic.getOrder_tracking_number(); // 物流运单号 + String logistics_info_str = orderOnlineByJson(order_tracking_number, shopOrderLogistic.getLogistics_number(), phone_number); + if (StrUtil.isBlank(logistics_info_str)) { + logger.info(I18nUtil._("物流信息获取失败")); + continue; + } + + JSONObject logistics_info = JSONUtil.parseObj(logistics_info_str); + if (ObjectUtil.isNull(logistics_info)) { + logger.info(I18nUtil._("转换物流信息获取失败")); + continue; + } + String StateEx = (String) logistics_info.get("StateEx"); + Integer state = logistics_info.get("State", Integer.class); + if (state == null || state.equals(0)) { + String reason = logistics_info.get("Reason", String.class); + logger.info(I18nUtil._("非系统错误,请联系管理员检查物流配置项,或检查发货信息是否真实有效!错误信息:{" + reason + "}")); + continue; + } + + resultMap.put("shipperCode", logistics_info.get("ShipperCode")); + resultMap.put("logisticCode", logistics_info.get("LogisticCode")); + resultMap.put("state", logistics_info.get("State")); + resultMap.put("stateEx", StateEx); + resultMap.put("express_state", stateMap.get(StateEx)); + resultMap.put("traces", logistics_info.get("Traces")); + + retList.add(resultMap); + } + + return retList; + + } + @Override public CommonResult returnLogistics(String return_tracking_name, String return_tracking_number, String order_id) throws UnsupportedEncodingException, NoSuchAlgorithmException { QueryWrapper wrapper = new QueryWrapper<>(); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/components/IpUtil.java b/mall-shop/src/main/java/com/suisung/mall/shop/components/IpUtil.java index 943aa496..576411e9 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/components/IpUtil.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/components/IpUtil.java @@ -24,24 +24,6 @@ public class IpUtil implements ApplicationRunner { private static Searcher searcher = null; - @Override - public void run(ApplicationArguments args) throws Exception { - try { - log.info("开始加载 ip2region 数据文件"); - - //Resource resource = new ClassPathResource("static/ip/ip2region.xdb"); - //InputStream inputStream = resource.getInputStream() - InputStream inputStream = getClass().getClassLoader().getResourceAsStream("static/ip/ip2region.xdb"); - byte[] bytes = new byte[inputStream.available()]; - inputStream.read(bytes); - inputStream.close(); - searcher = Searcher.newWithBuffer(bytes); - log.info("成功加载 ip2region 数据文件。"); - } catch (IOException e) { - log.error("加载 ip2region 失败。{}", e.getMessage()); - } - } - public static String getRegion(String ip) { if (Objects.isNull(searcher)) { log.error("IP2RegionUtils 没有成功加载数据文件"); @@ -50,7 +32,7 @@ public class IpUtil implements ApplicationRunner { try { return searcher.search(ip); } catch (Exception e) { - log.error("IP 格式错误:{}", e.getMessage()); + log.error("IP 格式错误:{}", e); return null; } } @@ -77,4 +59,22 @@ public class IpUtil implements ApplicationRunner { return districtVo; } + + @Override + public void run(ApplicationArguments args) throws Exception { + try { + log.info("开始加载 ip2region 数据文件"); + + //Resource resource = new ClassPathResource("static/ip/ip2region.xdb"); + //InputStream inputStream = resource.getInputStream() + InputStream inputStream = getClass().getClassLoader().getResourceAsStream("static/ip/ip2region.xdb"); + byte[] bytes = new byte[inputStream.available()]; + inputStream.read(bytes); + inputStream.close(); + searcher = Searcher.newWithBuffer(bytes); + log.info("成功加载 ip2region 数据文件。"); + } catch (IOException e) { + log.error("加载 ip2region 失败。{}", e.getMessage()); + } + } } \ No newline at end of file diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java index 797b2a59..fe717b06 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java @@ -7992,8 +7992,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl page = shopStoreEmployeeRightsBaseService.listKey(new QueryWrapper<>(), 1, ConfigConstant.MAX_LIST_NUM); + + List rights_group_rights_ids = Convert.toList(Integer.class, page.getRecords()); + List shopStoreEmployeeRightsGroups = new ArrayList<>(); + String str_rights_group_rights_ids = CollUtil.join(rights_group_rights_ids, ","); + + ShopStoreEmployeeRightsGroup shopManager = new ShopStoreEmployeeRightsGroup(); + shopManager.setStore_id(storeId); + shopManager.setRights_group_rights_ids(str_rights_group_rights_ids); + shopManager.setRights_group_name(I18nUtil._("店铺管理员")); //Store Owner + shopManager.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(shopManager); + + ShopStoreEmployeeRightsGroup operationsManager = new ShopStoreEmployeeRightsGroup(); + operationsManager.setStore_id(storeId); + operationsManager.setRights_group_rights_ids(str_rights_group_rights_ids); + operationsManager.setRights_group_name(I18nUtil._("运营经理")); //Store Owner + operationsManager.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(operationsManager); + + ShopStoreEmployeeRightsGroup orderReviewer = new ShopStoreEmployeeRightsGroup(); + orderReviewer.setStore_id(storeId); + orderReviewer.setRights_group_rights_ids(str_rights_group_rights_ids); + orderReviewer.setRights_group_name(I18nUtil._("订单审核员")); //Store Owner + orderReviewer.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(orderReviewer); + + ShopStoreEmployeeRightsGroup financialAuditor = new ShopStoreEmployeeRightsGroup(); + financialAuditor.setStore_id(storeId); + financialAuditor.setRights_group_rights_ids(str_rights_group_rights_ids); + financialAuditor.setRights_group_name(I18nUtil._("财务审核员")); //Store Owner + financialAuditor.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(financialAuditor); + + ShopStoreEmployeeRightsGroup shippingAuditor = new ShopStoreEmployeeRightsGroup(); + shippingAuditor.setStore_id(storeId); + shippingAuditor.setRights_group_rights_ids(str_rights_group_rights_ids); + shippingAuditor.setRights_group_name(I18nUtil._("发货审核员")); //Store Owner + shippingAuditor.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(shippingAuditor); + + ShopStoreEmployeeRightsGroup businessManager = new ShopStoreEmployeeRightsGroup(); + businessManager.setStore_id(storeId); + businessManager.setRights_group_rights_ids(str_rights_group_rights_ids); + businessManager.setRights_group_name(I18nUtil._("业务经理")); //Store Owner + businessManager.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(businessManager); + + ShopStoreEmployeeRightsGroup warehouseManager = new ShopStoreEmployeeRightsGroup(); + warehouseManager.setStore_id(storeId); + warehouseManager.setRights_group_rights_ids(str_rights_group_rights_ids); + warehouseManager.setRights_group_name(I18nUtil._("仓库管理员")); //Store Owner + warehouseManager.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(warehouseManager); + + ShopStoreEmployeeRightsGroup dataMaintainer = new ShopStoreEmployeeRightsGroup(); + dataMaintainer.setStore_id(storeId); + dataMaintainer.setRights_group_rights_ids(str_rights_group_rights_ids); + dataMaintainer.setRights_group_name(I18nUtil._("资料维护员")); //Store Owner + dataMaintainer.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(dataMaintainer); + + ShopStoreEmployeeRightsGroup customerService = new ShopStoreEmployeeRightsGroup(); + customerService.setStore_id(storeId); + customerService.setRights_group_rights_ids(str_rights_group_rights_ids); + customerService.setRights_group_name(I18nUtil._("客服")); //Store Owner + customerService.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(customerService); + + ShopStoreEmployeeRightsGroup extension1 = new ShopStoreEmployeeRightsGroup(); + extension1.setStore_id(storeId); + extension1.setRights_group_rights_ids(str_rights_group_rights_ids); + extension1.setRights_group_name(I18nUtil._("扩展1")); //Store Owner + extension1.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(extension1); + + ShopStoreEmployeeRightsGroup extension2 = new ShopStoreEmployeeRightsGroup(); + extension2.setStore_id(storeId); + extension2.setRights_group_rights_ids(str_rights_group_rights_ids); + extension2.setRights_group_name(I18nUtil._("扩展2")); //Store Owner + extension2.setRights_group_rights_data(""); //Store Owner + shopStoreEmployeeRightsGroups.add(extension2); + + if (!shopStoreEmployeeRightsGroupService.saveOrUpdate(shopStoreEmployeeRightsGroups)) { + throw new ApiException(ResultCode.FAILED); + } + + List rights_group_id = shopStoreEmployeeRightsGroups.stream().map(s -> s.getRights_group_id()).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(rights_group_id)) { + // 初始化雇员信息 + ShopStoreEmployee shopStoreEmployee = new ShopStoreEmployee(); + shopStoreEmployee.setUser_id(userId); + shopStoreEmployee.setStore_id(storeId); + shopStoreEmployee.setRights_group_id(CollUtil.join(rights_group_id, ",")); + shopStoreEmployee.setEmployee_is_admin(CommonConstant.USER_TYPE_ADMIN); + + if (!shopStoreEmployeeService.saveOrUpdate(shopStoreEmployee)) { + throw new ApiException(I18nUtil._("设置店铺管理员权限失败")); + } + + // 添加店铺到用户 + AccountUserBase accountUserBase = new AccountUserBase(); + accountUserBase.setUser_id(userId); + accountUserBase.setStore_ids(String.valueOf(storeId)); + + // todo 初始化商家角色(默认 店铺管理员角色) + String user_rights_group_id = Convert.toStr(rights_group_id.get(0)); + accountUserBase.setRights_group_id(StrUtil.join(",", user_rights_group_id, 2)); + if (!accountService.saveOrUpdateUserBase(accountUserBase)) { + throw new ApiException(I18nUtil._("店铺关联到用户失败")); + } + } + } + /** * 根据店铺名称判断店铺是否存在 * @@ -3176,7 +3300,6 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl