Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

颜琼丽 13 часов назад
Родитель
Сommit
e6628e75a6
25 измененных файлов с 377 добавлено и 21 удалено
  1. 2 2
      jd-logistics-auth/src/main/java/com/ruoyi/auth/controller/WxMiniController.java
  2. 1 1
      jd-logistics-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
  3. 42 0
      jd-logistics-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
  4. 7 1
      jd-logistics-modules/jd-logistics-system/pom.xml
  5. 14 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/controller/Kd100Controller.java
  6. 7 2
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/controller/MonthQRCodeController.java
  7. 10 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/request/CommonBusinessGetQRCodeExtendRequest.java
  8. 10 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/request/CommonMonthSettleQRQueryExtendRequest.java
  9. 50 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/service/impl/Kuaidi100Service.java
  10. 17 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/config/GemaiyunSmsConfig.java
  11. 4 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/config/KD100ExpressConfig.java
  12. 1 1
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizWaybillCostDetails.java
  13. 5 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/dto/MonthQRCodeDTO.java
  14. 2 2
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsOrderService.java
  15. 1 1
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsService.java
  16. 16 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizAddressBookServiceImpl.java
  17. 21 2
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizWaybillOrderServiceImpl.java
  18. 11 5
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/JDLogisticsService.java
  19. 1 1
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/MonthQRCodeTaskServiceImpl.java
  20. 1 1
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/SFLogisticsService.java
  21. 49 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/GemaiyunSmsUtil.java
  22. 61 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/PasswordUtils.java
  23. 42 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  24. 1 1
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/system/SysUserMapper.xml
  25. 1 1
      jd-logistics-ui-v3/src/views/logistics/monthSummary/costList.vue

+ 2 - 2
jd-logistics-auth/src/main/java/com/ruoyi/auth/controller/WxMiniController.java

@@ -34,7 +34,7 @@ public class WxMiniController {
         // 用户登录
         LoginUser userInfo = sysLoginService.openIdLogin(form.getJsCode(), form.getCode());
         // 获取登录token
-        return R.ok(tokenService.createToken(userInfo));
+        return R.ok(tokenService.createTokenWechat(userInfo));
     }
 
     /**
@@ -48,6 +48,6 @@ public class WxMiniController {
         // 用户登录
         LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
         // 获取登录token
-        return R.ok(tokenService.createToken(userInfo));
+        return R.ok(tokenService.createTokenWechat(userInfo));
     }
 }

+ 1 - 1
jd-logistics-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java

@@ -186,7 +186,7 @@ public class SysLoginService
         String username = phoneNumber.getData();
         String openId = openIdData.getData();
         sysUser.setOpenId(openId);
-        sysUser.setUserName(username);
+        sysUser.setPhonenumber(username);
         // 查询用户信息
         R<LoginUser> userResult = remoteUserService.getUserByOpenId(sysUser, SecurityConstants.INNER);
 

+ 42 - 0
jd-logistics-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java

@@ -171,4 +171,46 @@ public class TokenService
     {
         return ACCESS_TOKEN + token;
     }
+
+
+    /**
+     * 创建微信登录令牌
+     */
+    public Map<String, Object> createTokenWechat(LoginUser loginUser)
+    {
+        String token = IdUtils.fastUUID();
+        Long userId = loginUser.getSysUser().getUserId();
+        String userName = loginUser.getSysUser().getUserName();
+        loginUser.setToken(token);
+        loginUser.setUserid(userId);
+        loginUser.setUsername(userName);
+        loginUser.setIpaddr(IpUtils.getIpAddr());
+        refreshTokenWechat(loginUser);
+
+        // Jwt存储信息
+        Map<String, Object> claimsMap = new HashMap<String, Object>();
+        claimsMap.put(SecurityConstants.USER_KEY, token);
+        claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
+        claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName);
+
+        // 接口返回信息
+        Map<String, Object> rspMap = new HashMap<String, Object>();
+        rspMap.put("access_token", JwtUtils.createToken(claimsMap));
+        rspMap.put("expires_in", 15 * 24 * MILLIS_MINUTE);
+        return rspMap;
+    }
+
+    /**
+     * 刷新微信令牌有效期
+     *
+     * @param loginUser 登录信息
+     */
+    public void refreshTokenWechat(LoginUser loginUser)
+    {
+        loginUser.setLoginTime(System.currentTimeMillis());
+        loginUser.setExpireTime(loginUser.getLoginTime() + 15 * 24 * MILLIS_MINUTE);
+        // 根据uuid将loginUser缓存
+        String userKey = getTokenKey(loginUser.getToken());
+        redisService.setCacheObject(userKey, loginUser, 15L, TimeUnit.DAYS);
+    }
 }

+ 7 - 1
jd-logistics-modules/jd-logistics-system/pom.xml

@@ -46,7 +46,13 @@
             <groupId>com.mysql</groupId>
             <artifactId>mysql-connector-j</artifactId>
         </dependency>
-        
+
+
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>3.1</version>
+        </dependency>
         <!-- RuoYi Common DataSource -->
         <dependency>
             <groupId>com.ruoyi</groupId>

+ 14 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/controller/Kd100Controller.java

@@ -67,6 +67,20 @@ public class Kd100Controller {
 
 
 
+    @PostMapping("/queryIcrExpres")
+    public Map queryIcrExpres(@RequestBody Map param)  {
+        try {
+                Map   result = kuaidi100Service.queryIcrExpres(param);
+                return  result;
+        } catch (Exception e) {
+            return AjaxResult.error("智能识别文字出错!");
+        }
+
+
+    }
+
+
+
 
 
 

+ 7 - 2
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/controller/MonthQRCodeController.java

@@ -7,6 +7,7 @@ import com.ruoyi.common.core.web.controller.BaseController;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.security.annotation.InnerAuth;
 import com.ruoyi.logistics.config.SFExpressConfig;
+import com.ruoyi.logistics.constant.SysConfigConstants;
 import com.ruoyi.logistics.service.IMonthQRCodeTaskService;
 import com.ruoyi.logistics.service.LogisticsOrderService;
 import com.ruoyi.system.service.ISysConfigService;
@@ -68,9 +69,13 @@ public class MonthQRCodeController extends BaseController {
      * @return
      */
     @GetMapping("/getMonthCard")
-    public AjaxResult getMonthCard(@RequestParam("source") Integer source) {
+    public AjaxResult getMonthCard(@RequestParam("source") Integer source, @RequestParam("type") Integer type) {
         if (source == 1) {
-            return success(configService.selectConfigByKey("jd.logistics.customercode"));
+            if (type == 1) {
+                return success(configService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_CUSTOMERCODE));
+            } else if (type == 2) {
+                return success(configService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_BUSINESSUNITCODE));
+            }
         }
         return success(sfExpressConfig.getMonthlyCord());
     }

+ 10 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/request/CommonBusinessGetQRCodeExtendRequest.java

@@ -0,0 +1,10 @@
+package com.ruoyi.front.request;
+
+import com.lop.open.api.sdk.domain.ECAP.CommonBusinessApi.commonGetQRCodeV1.CommonBusinessGetQRCodeRequest;
+import lombok.Data;
+
+@Data
+public class CommonBusinessGetQRCodeExtendRequest extends CommonBusinessGetQRCodeRequest {
+
+    private String businessUnitCode;
+}

+ 10 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/request/CommonMonthSettleQRQueryExtendRequest.java

@@ -0,0 +1,10 @@
+package com.ruoyi.front.request;
+
+import com.lop.open.api.sdk.domain.ECAP.CommonQueryOrderApi.commonGetOrderByMonthSettleQRV1.CommonMonthSettleQRQueryRequest;
+import lombok.Data;
+
+@Data
+public class CommonMonthSettleQRQueryExtendRequest extends CommonMonthSettleQRQueryRequest {
+
+    private String businessUnitCode;
+}

+ 50 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/service/impl/Kuaidi100Service.java

@@ -2,6 +2,7 @@ package com.ruoyi.front.service.impl;
 
 
 import com.alibaba.fastjson2.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ruoyi.logistics.config.KD100ExpressConfig;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -15,6 +16,7 @@ import java.net.URL;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
+import java.time.Instant;
 import java.util.List;
 import java.util.Map;
 
@@ -145,4 +147,52 @@ public class Kuaidi100Service {
         return response.toString();
     }
 
+
+    /**
+     * 该接口提供智能识别姓名、电话、地址的功能,并解析地址返回对应信息
+     */
+
+    public Map queryIcrExpres(Map params) throws Exception {
+        String param = "{\"content\":\"" + params.get("param")+ "\" }";
+        String time= String.valueOf(Instant.now().toEpochMilli());
+        // 2. 生成签名
+        String sign = md5(param +time+ kd100ExpressConfig.getAppKey() + kd100ExpressConfig.getAppSecret()).toUpperCase();
+        // 3. 构建请求体
+        String postData = "key=" + URLEncoder.encode(kd100ExpressConfig.getAppKey(), "UTF-8")
+                + "&sign=" + URLEncoder.encode(sign, "UTF-8")
+                + "&t=" + time
+                + "&param=" + URLEncoder.encode(param, "UTF-8");
+        // 4. 发送HTTP POST请求
+        URL url = new URL(kd100ExpressConfig.getQueryIcrUrl());
+        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+        conn.setRequestMethod("POST");
+        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+        conn.setDoOutput(true);
+        conn.setDoInput(true);
+        conn.setConnectTimeout(5000);
+        conn.setReadTimeout(10000);
+        // 5. 写入请求数据
+        try (OutputStream os = conn.getOutputStream()) {
+            os.write(postData.getBytes(StandardCharsets.UTF_8));
+            os.flush();
+        }
+        // 6. 读取响应结果
+        int responseCode = conn.getResponseCode();
+        StringBuilder response = new StringBuilder();
+        if (responseCode == HttpURLConnection.HTTP_OK) {
+            BufferedReader in = new BufferedReader(
+                    new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+            String inputLine;
+            while ((inputLine = in.readLine()) != null) {
+                response.append(inputLine);
+            }
+            in.close();
+        } else {
+            throw new RuntimeException("HTTP请求失败,状态码: " + responseCode);
+        }
+        conn.disconnect();
+        ObjectMapper objectMapper = new ObjectMapper();
+        Map<String, Object> map = objectMapper.readValue(response.toString(), Map.class);
+        return map;
+    }
 }

+ 17 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/config/GemaiyunSmsConfig.java

@@ -0,0 +1,17 @@
+package com.ruoyi.logistics.config;
+
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "sms.gemaiyun")
+public class GemaiyunSmsConfig {
+    private String accessKey;
+    private String accessSecret;
+    private String sign;
+    private String templateId;
+    private String url;
+}

+ 4 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/config/KD100ExpressConfig.java

@@ -2,10 +2,12 @@ package com.ruoyi.logistics.config;
 
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
 import org.springframework.stereotype.Component;
 
 @Data
 @Component
+@RefreshScope
 @ConfigurationProperties(prefix = "kd100.express")
 public class KD100ExpressConfig {
     /**
@@ -31,4 +33,6 @@ public class KD100ExpressConfig {
 
     private String queryPUrl;
 
+    private String queryIcrUrl;
+
 }

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizWaybillCostDetails.java

@@ -85,7 +85,7 @@ public class BizWaybillCostDetails extends BaseEntity
     @Excel(name = "产品类型")
     private String productCode;
     /** 经手人 */
-    @Excel(name = "经手人")
+   // @Excel(name = "经手人")
     private String userName;
 
     @Excel(name = "调账类型")

+ 5 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/dto/MonthQRCodeDTO.java

@@ -47,4 +47,9 @@ public class MonthQRCodeDTO {
      * 创建时间
      */
     private Date createTime;
+
+    /**
+     * 类型 1.京东快递 2.京东快运
+     */
+    private Integer type;
 }

+ 2 - 2
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsOrderService.java

@@ -107,10 +107,10 @@ public class LogisticsOrderService {
         }
     }
 
-    public JSONObject queryOrderByQRCode(Integer orderType, String qrCode) {
+    public JSONObject queryOrderByQRCode(Integer orderType, String qrCode, Integer qrcodeType) {
         // 根据订单中的物流公司类型获取对应服务
         LogisticsService logisticsService = logisticsFactory.getLogisticsService(orderType==1?"JD":"SF");
-        JSONObject jsonObject = logisticsService.queryOrderByQRCode(qrCode);
+        JSONObject jsonObject = logisticsService.queryOrderByQRCode(qrCode, qrcodeType);
         return jsonObject;
     }
 

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsService.java

@@ -50,7 +50,7 @@ public interface LogisticsService {
     /**
      * 根据二维码查询
      */
-    JSONObject queryOrderByQRCode(String qrCode);
+    JSONObject queryOrderByQRCode(String qrCode, Integer qrcodeType);
 
     /**
      * 根据运单号查询订单详情

+ 16 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizAddressBookServiceImpl.java

@@ -1,9 +1,12 @@
 package com.ruoyi.logistics.service.impl;
 
 import java.util.List;
+
+import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.system.api.model.LoginUser;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.ruoyi.logistics.mapper.BizAddressBookMapper;
@@ -63,6 +66,13 @@ public class BizAddressBookServiceImpl implements IBizAddressBookService
         bizAddressBook.setCreateTime(DateUtils.getNowDate());
         bizAddressBook.setCreateBy(loginUser.getUsername());
 
+
+        List<BizAddressBook> bizAddressBooks = bizAddressBookMapper.selectBizAddressBookList(bizAddressBook);
+        if (CollectionUtils.isNotEmpty(bizAddressBooks)) {
+            throw new ServiceException("地址已存在");
+        }
+
+
         if ("1".equals(bizAddressBook.getDefaultFlag())) {
             bizAddressBookMapper.updateBizAddressBookDefault(loginUser.getUserid());
         }
@@ -86,6 +96,12 @@ public class BizAddressBookServiceImpl implements IBizAddressBookService
         bizAddressBook.setUpdateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
         bizAddressBook.setUpdateTime(DateUtils.getNowDate());
 
+        bizAddressBook.setUserId(loginUser.getUserid());
+        List<BizAddressBook> bizAddressBooks = bizAddressBookMapper.selectBizAddressBookList(bizAddressBook);
+        if (CollectionUtils.isNotEmpty(bizAddressBooks)) {
+            throw new ServiceException("地址已存在");
+        }
+
         if ("1".equals(bizAddressBook.getDefaultFlag())) {
             bizAddressBookMapper.updateBizAddressBookDefault(loginUser.getUserid());
         }

+ 21 - 2
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizWaybillOrderServiceImpl.java

@@ -23,10 +23,12 @@ import com.ruoyi.logistics.domain.BizWaybillCostDetails;
 import com.ruoyi.logistics.domain.dto.OrderStatisticsDto;
 import com.ruoyi.logistics.domain.dto.RecentAddressDto;
 import com.ruoyi.logistics.enums.OrderStatusEnum;
+import com.ruoyi.logistics.mapper.BizAddressBookMapper;
 import com.ruoyi.logistics.mapper.BizWaybillCostDetailsMapper;
 import com.ruoyi.logistics.service.LogisticsOrderService;
 import com.ruoyi.system.api.model.LoginUser;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -60,6 +62,9 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
     @Autowired
     private RedisService redisService;
 
+    @Autowired
+    private BizAddressBookMapper bizAddressBookMapper;
+
     /**
      * 查询运单管理
      * 
@@ -278,6 +283,20 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
         if (provinceName == null || cityName == null || contactName == null || contactPhone == null) {
             return; //基信息不完整,不保存
         }
+
+        BizAddressBook bizAddressBook = new BizAddressBook();
+        bizAddressBook.setUserId(userId);
+        bizAddressBook.setContactName(contactName);
+        bizAddressBook.setContactPhone(contactPhone);
+        bizAddressBook.setProvinceName(provinceName);
+        bizAddressBook.setCityName(cityName);
+        bizAddressBook.setCountyName(countyName);
+        bizAddressBook.setDetailedAddress(detailedAddress);
+
+        List<BizAddressBook> bizAddressBooks = bizAddressBookMapper.selectBizAddressBookList(bizAddressBook);
+        if (CollectionUtils.isEmpty(bizAddressBooks)) {
+            bizAddressBookMapper.insertBizAddressBook(bizAddressBook);
+        }
         
         //构造Redis key
         String redisKey = RedisCacheConstants.USER_RECENT_ADDRESS_CACHE_KEY + userId;
@@ -290,7 +309,7 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
         addressDto.setDetailedAddress(detailedAddress);
         addressDto.setContactName(contactName);
         addressDto.setContactPhone(contactPhone);
-        
+
         // 获取当前列表
         List<RecentAddressDto> addressList = redisService.getCacheList(redisKey);
         if (addressList == null) {
@@ -316,7 +335,7 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
         }
         
         // 保存到Redis,设置过期时间30天
+        redisService.deleteObject(redisKey);
         redisService.setCacheList(redisKey, addressList);
-        redisService.expire(redisKey, 30, TimeUnit.DAYS);
     }
 }

+ 11 - 5
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/JDLogisticsService.java

@@ -21,6 +21,8 @@ import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.bean.BeanUtils;
+import com.ruoyi.front.request.CommonBusinessGetQRCodeExtendRequest;
+import com.ruoyi.front.request.CommonMonthSettleQRQueryExtendRequest;
 import com.ruoyi.logistics.config.JDExpressConfig;
 import com.ruoyi.logistics.constant.JDDictConstants;
 import com.ruoyi.logistics.constant.SysConfigConstants;
@@ -512,11 +514,11 @@ public class JDLogisticsService  implements LogisticsService {
             EcapV1BusinessQrcodeLopRequest request = new EcapV1BusinessQrcodeLopRequest();
 
             //取消订单入参对象
-            CommonBusinessGetQRCodeRequest requestDTO = new CommonBusinessGetQRCodeRequest();
+            CommonBusinessGetQRCodeExtendRequest requestDTO = new CommonBusinessGetQRCodeExtendRequest();
             if (type == 1) {
                 requestDTO.setCustomerCode(sysConfigService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_CUSTOMERCODE));
             } else if (type == 2) {
-                requestDTO.setCustomerCode(sysConfigService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_BUSINESSUNITCODE));
+                requestDTO.setBusinessUnitCode(sysConfigService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_BUSINESSUNITCODE));
             }
 
             request.setRequest(requestDTO);
@@ -550,7 +552,7 @@ public class JDLogisticsService  implements LogisticsService {
     }
 
     @Override
-    public JSONObject queryOrderByQRCode(String qrCode) {
+    public JSONObject queryOrderByQRCode(String qrCode, Integer qrcodeType) {
         log.info("京东开放平台根据二维码查询运单号接口,入参:{}", qrCode);
         JSONObject result = new JSONObject();
         try {
@@ -561,8 +563,12 @@ public class JDLogisticsService  implements LogisticsService {
             //入参对象
             CommonqueryorderapiCommongetorderbymonthsettleqrv1LopRequest request = new CommonqueryorderapiCommongetorderbymonthsettleqrv1LopRequest();
 
-            CommonMonthSettleQRQueryRequest requestDTO = new CommonMonthSettleQRQueryRequest();
-            requestDTO.setCustomerCode(sysConfigService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_CUSTOMERCODE));
+            CommonMonthSettleQRQueryExtendRequest requestDTO = new CommonMonthSettleQRQueryExtendRequest();
+            if (1 == qrcodeType) {
+                requestDTO.setCustomerCode(sysConfigService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_CUSTOMERCODE));
+            } else if (2 == qrcodeType) {
+                requestDTO.setBusinessUnitCode(sysConfigService.selectConfigByKey(SysConfigConstants.JD_LOGISTICS_BUSINESSUNITCODE));
+            }
             requestDTO.setMonthSettleQR(qrCode);
             requestDTO.setAppKey(jdExpressConfig.getAppKey());
 

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/MonthQRCodeTaskServiceImpl.java

@@ -93,7 +93,7 @@ public class MonthQRCodeTaskServiceImpl implements IMonthQRCodeTaskService {
     }
 
     private void jdQRCodeConsume(MonthQRCodeDTO monthQRCodeDTO, SysUser sysUser, SysDept sysDept, String key) {
-        JSONObject waybillCode = logisticsOrderService.queryOrderByQRCode(1, monthQRCodeDTO.getQrCodeContent());
+        JSONObject waybillCode = logisticsOrderService.queryOrderByQRCode(1, monthQRCodeDTO.getQrCodeContent(), monthQRCodeDTO.getType());
         if(!waybillCode.getBooleanValue("success")){
             log.info("根据二维码查询运单号失败{}", waybillCode.getString("msg"));
             return;

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/SFLogisticsService.java

@@ -346,7 +346,7 @@ public class SFLogisticsService implements LogisticsService {
     }
 
     @Override
-    public JSONObject queryOrderByQRCode(String qrCode) {
+    public JSONObject queryOrderByQRCode(String qrCode, Integer qrcodeType) {
         return null;
     }
 

+ 49 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/GemaiyunSmsUtil.java

@@ -0,0 +1,49 @@
+package com.ruoyi.logistics.util;
+
+import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.NameValuePair;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.params.HttpMethodParams;
+
+import java.net.URLEncoder;
+
+public class GemaiyunSmsUtil {
+    /**
+     * 发送歌麦云短信
+     */
+    public static String sendSms(String apiUrl,
+                                 String accesskey,
+                                 String secret,
+                                 String sign,
+                                 String templateId,
+                                 String mobile,
+                                 String content) throws Exception {
+
+        HttpClient httpClient = new HttpClient();
+        PostMethod postMethod = new PostMethod(apiUrl);
+
+        postMethod.getParams().setContentCharset("UTF-8");
+        postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
+                new DefaultHttpMethodRetryHandler());
+
+        // 封装参数
+        NameValuePair[] data = {
+                new NameValuePair("accesskey", accesskey),
+                new NameValuePair("secret", secret),
+                new NameValuePair("sign", sign),
+                new NameValuePair("templateId", templateId),
+                new NameValuePair("mobile", mobile),
+                new NameValuePair("content", URLEncoder.encode(content, "utf-8"))
+        };
+
+        postMethod.setRequestBody(data);
+        postMethod.setRequestHeader("Connection", "close");
+
+        int statusCode = httpClient.executeMethod(postMethod);
+        String result = postMethod.getResponseBodyAsString();
+
+        postMethod.releaseConnection();
+        return "statusCode:" + statusCode + ", body:" + result;
+    }
+}

+ 61 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/util/PasswordUtils.java

@@ -0,0 +1,61 @@
+package com.ruoyi.logistics.util;
+
+
+import java.security.SecureRandom;
+
+/**
+ * 密码生成工具类
+ * 生成 8 位高强度随机密码:默认包含 大写字母+小写字母+数字
+ */
+public class PasswordUtils {
+
+    // 字符池:大写字母
+    private static final String UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+    // 字符池:小写字母
+    private static final String LOWER = "abcdefghijklmnopqrstuvwxyz";
+    // 字符池:数字
+    private static final String DIGITS = "0123456789";
+    // 字符池:特殊符号(可选)
+    private static final String SPECIAL = "!@#$%^&*_+-=?";
+
+    // 安全随机数(比 Random 更安全)
+    private static final SecureRandom RANDOM = new SecureRandom();
+
+    /**
+     * 生成 8 位随机密码(大小写+数字,最常用)
+     */
+    public static String generate8Password() {
+        // 组合字符池
+        String allChars = UPPER + LOWER + DIGITS;
+        return generateRandomPassword(8, allChars);
+    }
+
+    /**
+     * 生成 8 位随机密码(包含特殊符号,强度更高)
+     */
+    public static String generate8PasswordWithSpecial() {
+        String allChars = UPPER + LOWER + DIGITS + SPECIAL;
+        return generateRandomPassword(8, allChars);
+    }
+
+    /**
+     * 通用密码生成方法
+     * @param length 密码长度
+     * @param chars 字符池
+     * @return 随机密码
+     */
+    private static String generateRandomPassword(int length, String chars) {
+        if (length <= 0 || chars.isEmpty()) {
+            throw new IllegalArgumentException("参数不合法");
+        }
+
+        StringBuilder password = new StringBuilder(length);
+        for (int i = 0; i < length; i++) {
+            int index = RANDOM.nextInt(chars.length());
+            password.append(chars.charAt(index));
+        }
+        return password.toString();
+    }
+
+
+}

+ 42 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@@ -4,6 +4,10 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 import javax.validation.Validator;
+
+import com.ruoyi.logistics.config.GemaiyunSmsConfig;
+import com.ruoyi.logistics.util.GemaiyunSmsUtil;
+import com.ruoyi.logistics.util.PasswordUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -65,6 +69,9 @@ public class SysUserServiceImpl implements ISysUserService
     @Autowired
     protected Validator validator;
 
+    @Autowired
+    private GemaiyunSmsConfig smsConfig;
+
     /**
      * 根据条件分页查询用户列表
      * 
@@ -266,9 +273,43 @@ public class SysUserServiceImpl implements ISysUserService
         insertUserPost(user);
         // 新增用户与角色管理
         insertUserRole(user);
+
+        String password=PasswordUtils.generate8PasswordWithSpecial();
+        user.setPassword(password);
+        if(rows>0){
+            sendCreateUserSms(user);
+        }
+
         return rows;
     }
 
+
+
+    private void sendCreateUserSms(SysUser user) {
+        try {
+            // ✅ 局部变量,每个请求独立,安全!
+            StringBuilder sb = new StringBuilder();
+            sb.append(user.getNickName()).append("##")
+                    .append(user.getPassword());
+            String content = sb.toString();
+            // 调用短信接口
+            String result = GemaiyunSmsUtil.sendSms(
+                    smsConfig.getUrl(),
+                    smsConfig.getAccessKey(),
+                    smsConfig.getAccessSecret(),
+                    smsConfig.getSign(),
+                    smsConfig.getTemplateId(),
+                    user.getPhonenumber(),
+                    content
+            );
+            System.out.println(result);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
     /**
      * 注册用户信息
      * 
@@ -362,6 +403,7 @@ public class SysUserServiceImpl implements ISysUserService
      */
     @Override
     public int resetPwd(SysUser user)
+
     {
         return userMapper.updateUser(user);
     }

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -226,6 +226,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectUserByOpenId" parameterType="String" resultMap="SysUserResult">
         <include refid="selectUserVo"/>
-        where u.user_name = #{userName} and u.open_id = #{openId} and u.del_flag = '0'
+        where u.phonenumber = #{userName} and u.open_id = #{openId} and u.del_flag = '0'
     </select>
 </mapper> 

+ 1 - 1
jd-logistics-ui-v3/src/views/logistics/monthSummary/costList.vue

@@ -32,7 +32,7 @@
           <span>月结</span>
         </template>
       </el-table-column>
-      <el-table-column label="费用(元)" align="center" prop="rateAmount" />
+      <el-table-column label="费用(元)" align="center" prop="rateAmount" />aaaaa
       <el-table-column label="经手人" align="center" prop="userName" />
       <el-table-column label="增值费用" align="center" prop="feeItemName" />
 <!--      <el-table-column label="备注" align="center" prop="remark" show-overflow-tooltip/>-->