liub 5 месяцев назад
Родитель
Сommit
e255376c54

+ 5 - 0
tenant/insurance/pom.xml

@@ -72,6 +72,11 @@
             <artifactId>spring-cloud-starter-openfeign</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 77 - 41
tenant/insurance/quotation-chengtai/src/main/java/com/jzg/quotation/chengtai/api/component/ChengTaiRequestApiComponent.java

@@ -47,34 +47,41 @@ public class ChengTaiRequestApiComponent {
     private final RequestComponent requestComponent;
 
     public <T extends BaseRequest, B extends BaseResponse> B requestUrl(String url, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
-        String busReqString = JSON.toJSONString(requestBody, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
-        try{
+        try {
+            String busReqString = JSON.toJSONString(requestBody, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
             PrivateKey privateKey = RSAUtil.getPrivateKeyFromPKCS8("RSA", chengTaiApiProperties.getPrivateKey());
             PublicKey ctPublicKey = RSAUtil.getPublicKeyFromX509("RSA", chengTaiApiProperties.getCtPublicKey());
-            System.out.println(busReqString);
+            log.debug("请求数据: {}", busReqString);
+
             //base64加密
             String baseStr = Base64.getEncoder().encodeToString(busReqString.getBytes(Charset.forName("UTF-8")));
             //rsa加密
             String encryptStr = RSAUtil.encryptString(ctPublicKey, baseStr); //加密
             String signatureStr = RSAUtil.signature(baseStr, privateKey);  //加签
             ChengTaiEncrypted chengTaiEncrypted = new ChengTaiEncrypted(encryptStr,chengTaiApiProperties,signatureStr);
-            System.out.println(JSON.toJSON(chengTaiEncrypted));
+            log.debug("加密后数据: {}", JSON.toJSON(chengTaiEncrypted));
+
             ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, chengTaiEncrypted, responseType, httpHeaders);
 
             String body = JSON.toJSONString(bResponseEntity.getBody());//需要联调观察数据格式
             B res = JSON.parseObject(body).toJavaObject(responseType);
-            System.out.println(JSON.toJSON(res));
-//            if (!ResponseCode.R_000.getCode().equals(res.getCode())){throw new SystemException(res.message);}
+            log.debug("响应数据: {}", JSON.toJSON(res));
+
             // 解密响应
             String newSource = RSAUtil.decryptString(privateKey, res.encryptionMessage);
             String info = new String(Base64.getDecoder().decode(newSource), Charset.forName("UTF-8"));
-            System.out.println(info);
+            log.debug("解密后数据: {}", info);
+
             boolean flag = RSAUtil.signatureVerfiy(newSource, res.signature, ctPublicKey);
-            if(!flag){throw new SystemException(res.message);}
+            if(!flag){throw new SystemException("验签失败: " + res.message);}
             res.setDecodeData(info);
             return res;
-        }catch (Exception e){
-            throw new SystemException(e.toString());
+        } catch (SystemException e) {
+            log.error("请求异常: {}", e.getMessage(), e);
+            throw e;
+        } catch (Exception e) {
+            log.error("请求异常: {}", e.getMessage(), e);
+            throw new SystemException("请求失败: " + e.getMessage());
         }
     }
 
@@ -83,22 +90,32 @@ public class ChengTaiRequestApiComponent {
     }
 
     public <T extends BaseRequest, B extends BaseResponse> B requestUrlToken(String url, T requestBody, Class<B> responseType, HttpHeaders httpHeaders) {
-        try{
+        try {
             ResponseEntity<B> bResponseEntity = requestComponent.objectPost(url, requestBody, responseType, httpHeaders);
-            String body = JSON.toJSONString(bResponseEntity.getBody());//需要联调观察数据格式
+            String body = JSON.toJSONString(bResponseEntity.getBody());
             B res = JSON.parseObject(body).toJavaObject(responseType);
-            if (!ResponseCode.R_000.getCode().equals(res.getCode())){throw new SystemException(res.message);}
+
+            if (!ResponseCode.R_000.getCode().equals(res.getCode())){
+                throw new SystemException("API返回错误: " + res.message);
+            }
+
             PrivateKey privateKey = RSAUtil.getPrivateKeyFromPKCS8("RSA", chengTaiApiProperties.getPrivateKey());
             PublicKey ctPublicKey = RSAUtil.getPublicKeyFromX509("RSA", chengTaiApiProperties.getCtPublicKey());
+
             // 解密响应
             String newSource = RSAUtil.decryptString(privateKey, res.encryptionMessage);
             String info = new String(Base64.getDecoder().decode(newSource), Charset.forName("UTF-8"));
+
             boolean flag = RSAUtil.signatureVerfiy(newSource, res.signature, ctPublicKey);
-            if(!flag){throw new SystemException(res.message);}
+            if(!flag){throw new SystemException("验签失败: " + res.message);}
             res.setDecodeData(info);
             return res;
-        }catch (Exception e){
-            throw new SystemException(e.toString());
+        } catch (SystemException e) {
+            log.error("token请求异常: {}", e.getMessage(), e);
+            throw e;
+        } catch (Exception e) {
+            log.error("token请求异常: {}", e.getMessage(), e);
+            throw new SystemException("token请求失败: " + e.getMessage());
         }
     }
 
@@ -135,9 +152,7 @@ public class ChengTaiRequestApiComponent {
                 .get(AUTHORIZATION);
 
         if (StringUtils.isNotBlank(authorization)) {
-            System.out.print("---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n");
-            System.out.printf("authorization:" + authorization);
-            System.out.print("---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n---------------\n--------------\n");
+            log.debug("使用缓存中的token: {}", authorization);
             httpHeaders.set(AUTHTOKEN, authorization);
             httpHeaders.setContentType(MediaType.APPLICATION_JSON);
             return httpHeaders;
@@ -151,17 +166,19 @@ public class ChengTaiRequestApiComponent {
                 try {
                     return this.getToken(chengTaiApiConfigureParameters,httpHeaders,url);
                 } catch (Exception e) {
-                    throw new SystemException(e.toString());
+                    log.error("获取token失败: {}", e.getMessage(), e);
+                    throw new SystemException("获取token失败: " + e.getMessage());
                 } finally {
-                    lock.unlock();
+                    if (lock.isHeldByCurrentThread()) {
+                        lock.unlock();
+                    }
                 }
             }
 
         } catch (InterruptedException e) {
-            log.debug(e.getMessage());
-            lock.unlock();
+            log.error("获取锁失败: {}", e.getMessage(), e);
             Thread.currentThread().interrupt();
-            throw new SystemException(e.getMessage());
+            throw new SystemException("获取锁失败: " + e.getMessage());
         }
 
         // 睡眠一段时间 自调用 重新获取缓存中的 header
@@ -183,16 +200,25 @@ public class ChengTaiRequestApiComponent {
      * @return
      */
     private HttpHeaders getToken(ChengTaiApiConfigureParameters chengTaiApiConfigureParameters, HttpHeaders httpHeaders,String url) {
+        try {
+            ChengTaiTokenRequest request = new ChengTaiTokenRequest(chengTaiApiProperties.getPartnerCode());
+            httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+            ChengTaiTokenResponse accessToken = getAccessToken(request,httpHeaders,url);
+
+            if (accessToken == null || StringUtils.isBlank(accessToken.getAccessToken())) {
+                throw new SystemException("获取accessToken失败或为空");
+            }
 
-        ChengTaiTokenRequest request = new ChengTaiTokenRequest(chengTaiApiProperties.getPartnerCode());
-        httpHeaders.setContentType(MediaType.APPLICATION_JSON);
-        ChengTaiTokenResponse accessToken = getAccessToken(request,httpHeaders,url);
-        httpHeaders.set(AUTHTOKEN, accessToken.getAccessToken());
-        // 3.1 存入redis中
-        RMap<Object, Object> rMap = redissonClient.getMap(CacheConstant.CHENGTAI_AUTHORIZATION + chengTaiApiConfigureParameters.getUserId());
-        rMap.put(AUTHORIZATION, accessToken.getAccessToken());
-        rMap.expire(Duration.ofHours(CacheConstant.CHENGTAI_AUTHORIZATION_TIME));
-        return httpHeaders;
+            httpHeaders.set(AUTHTOKEN, accessToken.getAccessToken());
+            // 3.1 存入redis中
+            RMap<Object, Object> rMap = redissonClient.getMap(CacheConstant.CHENGTAI_AUTHORIZATION + chengTaiApiConfigureParameters.getUserId());
+            rMap.put(AUTHORIZATION, accessToken.getAccessToken());
+            rMap.expire(Duration.ofHours(CacheConstant.CHENGTAI_AUTHORIZATION_TIME));
+            return httpHeaders;
+        } catch (Exception e) {
+            log.error("获取token异常: {}", e.getMessage(), e);
+            throw new SystemException("获取token失败: " + e.getMessage());
+        }
     }
 
     /**
@@ -203,14 +229,24 @@ public class ChengTaiRequestApiComponent {
      * @return 出参实体
      */
     private ChengTaiTokenResponse getAccessToken(ChengTaiTokenRequest chengTaiTokenRequest, HttpHeaders httpHeaders,String url) {
-        ChengTaiTokenResponse response = requestRequestUrlToken(RequestUrl.Z00001,
-                chengTaiTokenRequest,
-                ChengTaiTokenResponse.class,
-                httpHeaders,url);
-        ChengTaiTokenResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(ChengTaiTokenResponse.class);
-        res.setCode(response.getCode());
-        res.setMessage(response.getMessage());
-        return res;
+        try {
+            ChengTaiTokenResponse response = requestRequestUrlToken(RequestUrl.Z00001,
+                    chengTaiTokenRequest,
+                    ChengTaiTokenResponse.class,
+                    httpHeaders,url);
+
+            if (response == null || StringUtils.isBlank(response.getDecodeData())) {
+                throw new SystemException("获取token响应为空");
+            }
+
+            ChengTaiTokenResponse res = JSON.parseObject(response.getDecodeData()).toJavaObject(ChengTaiTokenResponse.class);
+            res.setCode(response.getCode());
+            res.setMessage(response.getMessage());
+            return res;
+        } catch (Exception e) {
+            log.error("请求token接口失败: {}", e.getMessage(), e);
+            throw new SystemException("请求token接口失败: " + e.getMessage());
+        }
     }
 
 

+ 29 - 20
tenant/insurance/quotation-summary/src/main/java/com/jzg/quotation/summary/controller/UnifyOrderManager.java

@@ -2,6 +2,7 @@ package com.jzg.quotation.summary.controller;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.ArrayUtil;
 import com.alibaba.nacos.common.utils.CollectionUtils;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -21,6 +22,7 @@ import com.jzg.commons.entity.quote.vo.base.LoginBase;
 import com.jzg.commons.entity.quote.vo.orders.InsOrdersVo;
 import com.jzg.commons.entity.quote.vo.underwriting.SpecialAppointmentsVo;
 import com.jzg.commons.entity.rights.dto.InsOrderRightsDto;
+import com.jzg.commons.entity.rights.dto.InsOrderRightsInfoDto;
 import com.jzg.commons.entity.rights.dto.InsOrderRightsPackageDto;
 import com.jzg.commons.entity.vo.CompanyClauseVo;
 import com.jzg.commons.entity.vo.InsCompanyClauseVo;
@@ -51,6 +53,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
+import lombok.val;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
@@ -218,12 +221,12 @@ public class UnifyOrderManager {
         String companyName = CompanyConstants.getCompanyNameByCode(esmInsCompanyHttpResult.getData().getCompanyCode());
 
 
-        HttpResult<List<PtlAgreement>> byCompanyId = orgClient.getByCompanyId(esmInsCompanyHttpResult.getData().getId(),systemCode);
+        HttpResult<List<PtlAgreement>> byCompanyId = orgClient.getByCompanyId(esmInsCompanyHttpResult.getData().getId(), systemCode);
         if (byCompanyId.getData().isEmpty()) {
             AssertionUtils.isFail(true, "保司未配置协议");
         }
-        PtlAgreement ptlAgreement = byCompanyId.getData().stream().filter(x->x.getId().equals(quoteVo.getOrder().getAgreementId())).findFirst().orElse(null);
-        if(Objects.isNull(ptlAgreement)){
+        PtlAgreement ptlAgreement = byCompanyId.getData().stream().filter(x -> x.getId().equals(quoteVo.getOrder().getAgreementId())).findFirst().orElse(null);
+        if (Objects.isNull(ptlAgreement)) {
             throw new SystemException("协议不存在");
         }
         quoteVo.getOrder().setAgreementId(ptlAgreement.getId());
@@ -263,14 +266,14 @@ public class UnifyOrderManager {
             quoteResultsVo.setOrdersNo(ordersNo);
             // 报价后更新订单
             insOrdersService.orderAfterUpdateQuote(ordersNo, quoteResultsVo);
-        }catch(Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             Throwable root = e.getCause() != null ? e.getCause() : e;
             insOrdersService.orderAfterUpdateFailedQuote(ordersNo, root.getMessage());
             throw new SystemException(root.getMessage());
         }
         return quoteResultsVo.getQuoteStatusEnum()
-                .equals(InsOrderStatusEnum.WAIT_AUDIT) ? HttpResult.ok(quoteResultsVo) : HttpResult.error(500,quoteResultsVo,quoteResultsVo.getErrorMessage());
+                .equals(InsOrderStatusEnum.WAIT_AUDIT) ? HttpResult.ok(quoteResultsVo) : HttpResult.error(500, quoteResultsVo, quoteResultsVo.getErrorMessage());
     }
 
 
@@ -303,9 +306,9 @@ public class UnifyOrderManager {
         InsOrdersPolicy insOrdersPolicy = insOrdersPolicyService.getById(insOrders.getId());
         // 核保之前判断是否是待核保  或 核保失败
         StateResult stateResult;
-        if(insOrders.getOrderStatus().equals(InsOrderStatusEnum.WAIT_AUDIT.getCode()) || insOrders.getOrderStatus().equals(InsOrderStatusEnum.AUDIT_FAIL.getCode())){
+        if (insOrders.getOrderStatus().equals(InsOrderStatusEnum.WAIT_AUDIT.getCode()) || insOrders.getOrderStatus().equals(InsOrderStatusEnum.AUDIT_FAIL.getCode())) {
             stateResult = orderStateListener.statusChange(InsOrderStatusEnum.AUDIT_ING, InsOrderStatusEnum.WAIT_AUDIT.getCode());
-        }else{
+        } else {
             stateResult = orderStateListener.statusChange(InsOrderStatusEnum.AUDIT_ING, insOrders.getOrderStatus());
         }
         //核保之前更新订单为待核保
@@ -313,7 +316,7 @@ public class UnifyOrderManager {
         insOrdersService.updateById(insOrders);
         // 发送订单状态变更消息
         insOrdersService.orderStatusMessage(insOrders,
-                insOrdersCarInfo,insOrdersCosts,
+                insOrdersCarInfo, insOrdersCosts,
                 baseController.getToken(), MessageCodeEnum.TEMPLATE_2);
         //拼装参数
         underwritingVo.setInsOrders(insOrders);
@@ -341,12 +344,16 @@ public class UnifyOrderManager {
         }
         underwritingVo.setSpecialAppointmentsVos(specialAppointmentsVos);
 
+        if (ArrayUtil.isEmpty(underwritingVo.getInsOrderRightsInfoDto())) {
+           underwritingVo.setInsOrderRightsInfoDto(new InsOrderRightsInfoDto());
+        }
+
         boolean hasRights = CollectionUtils.isNotEmpty(underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsList());//权益券
         boolean hasPackages = CollectionUtils.isNotEmpty(underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsPackageList());//权益套餐
         //核保前需要判断如果有选权益需要判断选中权益总价不超过可用金额
-        if(hasRights || hasPackages){
+        if (hasRights || hasPackages) {
             InsFeeOrders feeOrders = insFeeOrdersService.getById(underwritingVo.getOrder().getOrdersNo());
-            AssertionUtils.isFail(Objects.isNull(feeOrders),"费用信息不匹配");
+            AssertionUtils.isFail(Objects.isNull(feeOrders), "费用信息不匹配");
             checkUsedAmount(feeOrders.getAvailableAmount(), underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsList(), underwritingVo.getInsOrderRightsInfoDto().getInsOrderRightsPackageList());
         }
 
@@ -358,13 +365,13 @@ public class UnifyOrderManager {
         if (underwritingResultsVo.getUnderwritingStatus().equals(InsOrderStatusEnum.PAY_PENDING)) {
             // 发送订单状态变更消息
             insOrdersService.orderStatusMessage(insOrders,
-                    insOrdersCarInfo,insOrdersCosts,
+                    insOrdersCarInfo, insOrdersCosts,
                     baseController.getToken(), MessageCodeEnum.TEMPLATE_5);
             //核保成功将权益信息入库
-            if(null != underwritingVo.getInsOrderRightsInfoDto()){
-                 if(hasRights || hasPackages){
-                     insOrderRightsInfoService.saveInsOrderRightsInfo(underwritingVo.getInsOrderRightsInfoDto(),underwritingVo.getOrder().getOrdersNo());
-                 }
+            if (null != underwritingVo.getInsOrderRightsInfoDto()) {
+                if (hasRights || hasPackages) {
+                    insOrderRightsInfoService.saveInsOrderRightsInfo(underwritingVo.getInsOrderRightsInfoDto(), underwritingVo.getOrder().getOrdersNo());
+                }
             }
             return HttpResult.ok("核保成功");
         } else {
@@ -375,7 +382,7 @@ public class UnifyOrderManager {
                 insOrdersService.updateById(insOrders);
                 // 发送订单状态变更消息
                 insOrdersService.orderStatusMessage(insOrders,
-                        insOrdersCarInfo,insOrdersCosts,
+                        insOrdersCarInfo, insOrdersCosts,
                         baseController.getToken(), MessageCodeEnum.TEMPLATE_4);
             }
             throw new SystemException(underwritingResultsVo.getUnderwritingResult());
@@ -440,7 +447,7 @@ public class UnifyOrderManager {
         String systemCode = getSystemCode();
 
         //先默认第一个协议
-        HttpResult<List<PtlAgreement>> byCompanyId = orgClient.getByCompanyId(insOrders.getCompanyId(),systemCode);
+        HttpResult<List<PtlAgreement>> byCompanyId = orgClient.getByCompanyId(insOrders.getCompanyId(), systemCode);
         if (byCompanyId.getData().isEmpty()) {
             AssertionUtils.isFail(true, "保司未配置协议");
         }
@@ -471,7 +478,7 @@ public class UnifyOrderManager {
         String systemCode = getSystemCode();
 
         //先默认第一个协议
-        HttpResult<List<PtlAgreement>> byCompanyId = orgClient.getByCompanyId(insOrders.getCompanyId(),systemCode);
+        HttpResult<List<PtlAgreement>> byCompanyId = orgClient.getByCompanyId(insOrders.getCompanyId(), systemCode);
         if (byCompanyId.getData().isEmpty()) {
             AssertionUtils.isFail(true, "保司未配置协议");
         }
@@ -609,7 +616,7 @@ public class UnifyOrderManager {
 
         // 发送订单状态变更消息
         insOrdersService.orderStatusMessage(insOrders,
-                carInfo,costs,
+                carInfo, costs,
                 baseController.getToken(), MessageCodeEnum.TEMPLATE_7);
         return HttpResult.ok(insOrdersPdfUrl);
     }
@@ -618,10 +625,12 @@ public class UnifyOrderManager {
     @Operation(summary = "测试")
     public HttpResult test(@RequestBody LoginBase loginBase) {
         zhongMeiCrawlerRequest.login(loginBase);
-        return  HttpResult.ok();
+        return HttpResult.ok();
     }
+
     /**
      * 判断已使用金额不超过可用金额
+     *
      * @param availableAmount
      * @param rightsList
      * @param rightsPackageList

+ 2 - 5
tenant/insurance/quotation-summary/src/main/resources/mapper/InsFeeAuditMapper.xml

@@ -52,7 +52,7 @@
         LEFT JOIN ins_orders_car_info as ioci on io.id = ioci.order_no
         LEFT JOIN ins_orders_car_user_info as iocui on io.id = iocui.order_no and iocui.policy_person_type = 3
         LEFT JOIN sys_user qsu on qsu.mobile = io.real_quote_user_id
-        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and system_code = #{param.systemCode}
+        LEFT JOIN sys_user_jzg_info suji ON suji.user_id = qsu.id and suji.system_code = #{param.systemCode}
         LEFT JOIN sys_user su on su.id = io.real_quote_user_id
         LEFT JOIN sys_dept sd on suji.dept_id = sd.id
         LEFT JOIN ptl_agreement pa on io.agreement_id = pa.id
@@ -77,9 +77,6 @@
             <if test="param.licenseNo != null and param.licenseNo != ''">
                 and ioci.license_no like concat('%',#{param.licenseNo},'%')
             </if>
-            <if test="param.licenseNo != null and param.licenseNo != ''">
-                and ioci.license_no like concat('%',#{param.licenseNo},'%')
-            </if>
             <if test="param.attrType != null ">
                 and suji.type_attr = #{param.attrType}
             </if>
@@ -94,7 +91,7 @@
             </if>
             <if test="param.companyIdList != null and param.companyIdList.size() > 0" >
                 AND io.company_id in
-                <foreach collection="companyIdList" item="item" open="(" separator="," close=")">
+                <foreach collection="param.companyIdList" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach>
             </if>

+ 4 - 0
tenant/organization/src/main/resources/application.yml

@@ -112,6 +112,10 @@ data-scope:
   ignoreFunction:
     - getAuditedOrder
     - getUserInfoList
+    - selectLeftList
+    - getTeamUserPage
+    - getOrganizationUser
+    - deleteOrganizationUser
 
 
 logging: