فهرست منبع

Merge remote-tracking branch 'origin/test' into test

lyh 1 سال پیش
والد
کامیت
6ede2e5e7e
29فایلهای تغییر یافته به همراه649 افزوده شده و 103 حذف شده
  1. 10 9
      sql/Online.sql
  2. 0 12
      src/main/java/com/ydtech/config/MvcConfig.java
  3. 2 0
      src/main/java/com/ydtech/modules/admin/components/WechatCustomerComponents.java
  4. 1 0
      src/main/java/com/ydtech/modules/admin/components/wechat/customer/request/CustomerListRequest.java
  5. 20 2
      src/main/java/com/ydtech/modules/admin/controller/SysQyWeChatController.java
  6. 2 8
      src/main/java/com/ydtech/modules/admin/controller/SysUserController.java
  7. 4 20
      src/main/java/com/ydtech/modules/admin/controller/taskStatistics/TaskStatisticsController.java
  8. 9 0
      src/main/java/com/ydtech/modules/admin/controller/wechat/WechatCustomerController.java
  9. 9 1
      src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java
  10. 7 6
      src/main/java/com/ydtech/modules/admin/model/po/SysQyWeChat.java
  11. 1 4
      src/main/java/com/ydtech/modules/admin/service/SysUserService.java
  12. 22 2
      src/main/java/com/ydtech/modules/admin/service/WechatCustomerService.java
  13. 6 2
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java
  14. 7 1
      src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java
  15. 11 1
      src/main/java/com/ydtech/modules/admin/service/impl/UserReportServiceImpl.java
  16. 23 6
      src/main/java/com/ydtech/modules/admin/service/impl/WechatCustomerServiceImpl.java
  17. 22 1
      src/main/java/com/ydtech/modules/ins/model/vo/CustomerInfoVo.java
  18. 1 1
      src/main/java/com/ydtech/modules/order/components/chengtai/ChengTaiRequestApiComponents.java
  19. 1 1
      src/main/java/com/ydtech/modules/order/constants/OrderCacheConstant.java
  20. 157 9
      src/main/java/com/ydtech/modules/order/entity/api/chengtai/request/InsurePremiumRequest.java
  21. 2 2
      src/main/java/com/ydtech/modules/order/entity/api/chengtai/response/InsurePremiumResponse.java
  22. 5 0
      src/main/java/com/ydtech/modules/order/entity/api/yangguang/constants/ImageTypeEnum.java
  23. 9 4
      src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangAccuracyCalculateRequest.java
  24. 5 0
      src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangUpLoadRequest.java
  25. 223 10
      src/main/java/com/ydtech/modules/order/service/impl/ChengTaiOrderApiServiceImpl.java
  26. 3 1
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  27. 75 0
      src/main/java/com/ydtech/modules/order/service/impl/YangGuangOrderApiServiceImpl.java
  28. 2 0
      src/main/java/com/ydtech/utils/baidu/BusinessLicenseRecognition.java
  29. 10 0
      src/main/resources/mapper/modules/admin/SysUserMapper.xml

+ 10 - 9
sql/Online.sql

@@ -1,9 +1,10 @@
---  2024-11-29 BY dongxin
-CREATE TABLE `ins_area_company_related_info`  (
-                                                  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键/自增',
-                                                  `company_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '子订单id',
-                                                  `jqappoint` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '交强特别约定',
-                                                  `syappoint` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '商业特别约定',
-                                                  PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '子订单关联信息表' ROW_FORMAT = Dynamic;
---  2024-11-29 BY dongxin
+--  2024-12-02 BY wks
+alter table sys_qy_wechat
+    drop column support_staff_url;
+
+alter table sys_qy_wechat
+    add open_kf_id varchar(256) null comment '客服账号ID';
+
+alter table sys_qy_wechat
+    add open_kf_name varchar(256) null comment '客服账号名称';
+--  2024-12-02 BY wks

+ 0 - 12
src/main/java/com/ydtech/config/MvcConfig.java

@@ -3,16 +3,11 @@ package com.ydtech.config;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.ydtech.aop.DynamicNameAspect;
 import com.ydtech.aop.DynamicTableNameHandler;
 import com.ydtech.aop.RequestStringParamHandlerMethodArgumentResolver;
 import com.ydtech.components.CorsInterceptor;
 import com.ydtech.components.TokenInterceptor;
-import com.ydtech.config.properties.WechatOpenProperties;
-import me.chanjar.weixin.mp.api.WxMpService;
-import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
-import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -26,8 +21,6 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import javax.annotation.Resource;
 import java.nio.charset.StandardCharsets;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 @Configuration
 public class MvcConfig implements WebMvcConfigurer {
@@ -143,9 +136,4 @@ public class MvcConfig implements WebMvcConfigurer {
 
     }
 
-    @Bean
-    public XmlMapper xmlMapper(){
-        return new XmlMapper();
-    }
-
 }

+ 2 - 0
src/main/java/com/ydtech/modules/admin/components/WechatCustomerComponents.java

@@ -11,6 +11,7 @@ import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.utils.cache.BaseCacheConfig;
 import com.ydtech.utils.cache.RedissonUtils;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.util.crypto.WxCryptUtil;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Component;
@@ -23,6 +24,7 @@ import java.util.concurrent.TimeUnit;
  * @author: wenks
  * @date: 2024/11/28 15:35
  **/
+@Slf4j
 @Component
 @RequiredArgsConstructor
 public class WechatCustomerComponents {

+ 1 - 0
src/main/java/com/ydtech/modules/admin/components/wechat/customer/request/CustomerListRequest.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.admin.components.wechat.customer.request;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.ydtech.core.page.BasePageVO;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;

+ 20 - 2
src/main/java/com/ydtech/modules/admin/controller/SysQyWeChatController.java

@@ -3,18 +3,17 @@ package com.ydtech.modules.admin.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.po.SysQyWeChat;
 import com.ydtech.modules.admin.service.SysQyWeChatService;
 import com.ydtech.modules.admin.service.SysSwitchConfigService;
 import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.admin.service.WechatCustomerService;
 import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.time.LocalDateTime;
@@ -33,6 +32,8 @@ public class SysQyWeChatController {
 
     private final SysSwitchConfigService sysSwitchConfigService;
 
+    private final WechatCustomerService wechatCustomerService;
+
     @ApiOperation(value = "配置宣传图/客服")
     @PostMapping(value = "/save/picture")
     public HttpResult<SysQyWeChat> save(@RequestBody SysQyWeChat sysQyWeChat) {
@@ -62,6 +63,8 @@ public class SysQyWeChatController {
             List<SysQyWeChat> list = sysQyWeChatService.list();
             sysQyWeChat = list.get(new Random().nextInt(list.size()));
         }
+        sysQyWeChat.setOpenKfId(null);
+        sysQyWeChat.setOpenKfName(null);
         sysQyWeChat.setDisplay(b);
         return HttpResult.ok(sysQyWeChat);
     }
@@ -73,4 +76,19 @@ public class SysQyWeChatController {
         return HttpResult.ok(sysQyWeChat);
     }
 
+    @ApiOperation(value = "查询微信客服链接")
+    @PostMapping(value = "/find/wechatCustomer")
+    public HttpResult<String> findWechatPictureByUserId() {
+        String userId = BaseController.getUser().getId();
+        SysUser user = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getId, userId));
+        SysQyWeChat sysQyWeChat = sysQyWeChatService.getOne(new LambdaQueryWrapper<SysQyWeChat>().eq(SysQyWeChat::getUserId, user.getLeaderId()));
+        if (sysQyWeChat == null) {
+            List<SysQyWeChat> list = sysQyWeChatService.list();
+            sysQyWeChat = list.get(new Random().nextInt(list.size()));
+        }
+        String s = wechatCustomerService.addContactWay(sysQyWeChat.getOpenKfId());
+        String url = s + "&scene_param=" + userId;
+        return HttpResult.ok(url);
+    }
+
 }

+ 2 - 8
src/main/java/com/ydtech/modules/admin/controller/SysUserController.java

@@ -3,7 +3,6 @@ package com.ydtech.modules.admin.controller;
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.extra.spring.SpringUtil;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -19,9 +18,6 @@ import com.ydtech.modules.admin.components.request.UnionPayRequest;
 import com.ydtech.modules.admin.components.response.UnionPayResponse;
 import com.ydtech.modules.admin.constants.RoleConstants;
 import com.ydtech.modules.admin.constants.UserWorkStatus;
-import com.ydtech.modules.admin.dao.SysAgencyLeaderMapper;
-import com.ydtech.modules.admin.dao.SysPartnerMapper;
-import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.dao.SysUserRecordMapper;
 import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.*;
@@ -52,7 +48,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import io.swagger.models.auth.In;
 import jodd.util.StringUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -63,7 +58,6 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
-import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.time.LocalDate;
 import java.util.*;
@@ -1319,8 +1313,8 @@ public class SysUserController extends BaseController {
      */
     @ApiOperation(value = "电销管理人数据列表")
     @GetMapping(value = "/findDxUserList")
-    public HttpResult findDxUserList() {
-        return HttpResult.ok(sysUserService.findDxUserList());
+    public HttpResult findDxUserList(String type) {
+        return HttpResult.ok(sysUserService.findDxUserList(type));
     }
 
 }

+ 4 - 20
src/main/java/com/ydtech/modules/admin/controller/taskStatistics/TaskStatisticsController.java

@@ -14,6 +14,7 @@ import com.ydtech.modules.admin.service.TaskStatisticsService;
 import com.ydtech.modules.admin.utils.KztGetDeptUtils;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -399,17 +400,9 @@ public class TaskStatisticsController {
      **/
     @PostMapping("getBusinessAgentData")
     @ApiOperation(value = "控制台-业务数据-代理人")
-    public HttpResult<IPage<BusinessAgentData>> getBusinessAgentData(@RequestBody TaskStatisticsVo taskStatisticsVo, HttpServletRequest httpServerRequest) {
+    public HttpResult<IPage<BusinessAgentData>> getBusinessAgentData(@RequestBody TaskStatisticsVo taskStatisticsVo) {
         try{
-            KztGetDeptUtils kztGetDeptUtils = new KztGetDeptUtils();
-            KztGetDeptUtilsDto kztGetDeptUtilsDto = kztGetDeptUtils.KztGetDeptIds(httpServerRequest.getRequestURL().toString());
-            if(ObjectUtils.isNotEmpty(kztGetDeptUtilsDto)){
-                if("1".equals(kztGetDeptUtilsDto.getType())){
-                    taskStatisticsVo.setDeptIds(kztGetDeptUtilsDto.getIds());
-                } else if ("2".equals(kztGetDeptUtilsDto.getType())) {
-                    taskStatisticsVo.setUserIds(kztGetDeptUtilsDto.getIds());
-                }
-            }
+
             IPage<BusinessAgentData> result = taskStatisticsService.getBusinessAgentData(taskStatisticsVo);
             return HttpResult.ok("查询数据成功", result);
         }catch (Exception e){
@@ -424,17 +417,8 @@ public class TaskStatisticsController {
      **/
     @PostMapping("getBusinessAgentDataTotal")
     @ApiOperation(value = "控制台-业务数据-代理人-合计")
-    public HttpResult<BusinessAgentData> getBusinessAgentDataTotal(@RequestBody TaskStatisticsVo taskStatisticsVo, HttpServletRequest httpServerRequest) {
+    public HttpResult<BusinessAgentData> getBusinessAgentDataTotal(@RequestBody TaskStatisticsVo taskStatisticsVo) {
         try{
-            KztGetDeptUtils kztGetDeptUtils = new KztGetDeptUtils();
-            KztGetDeptUtilsDto kztGetDeptUtilsDto = kztGetDeptUtils.KztGetDeptIds(httpServerRequest.getRequestURL().toString());
-            if(ObjectUtils.isNotEmpty(kztGetDeptUtilsDto)){
-                if("1".equals(kztGetDeptUtilsDto.getType())){
-                    taskStatisticsVo.setDeptIds(kztGetDeptUtilsDto.getIds());
-                } else if ("2".equals(kztGetDeptUtilsDto.getType())) {
-                    taskStatisticsVo.setUserIds(kztGetDeptUtilsDto.getIds());
-                }
-            }
             BusinessAgentData result = taskStatisticsService.getBusinessAgentDataTotal(taskStatisticsVo);
             return HttpResult.ok("查询数据成功", result);
         }catch (Exception e){

+ 9 - 0
src/main/java/com/ydtech/modules/admin/controller/wechat/WechatCustomerController.java

@@ -3,6 +3,7 @@ package com.ydtech.modules.admin.controller.wechat;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.components.wechat.customer.response.CustomerListResponse;
 import com.ydtech.modules.admin.service.WechatCustomerService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -12,6 +13,7 @@ import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 @Api(tags = "微信业务")
 @Slf4j
@@ -38,4 +40,11 @@ public class WechatCustomerController {
         return HttpResult.ok();
     }
 
+    @PostMapping(path = "/list")
+    @ApiOperation(value = "客服列表")
+    public HttpResult<List<CustomerListResponse.AccountListDTO>> list() throws JsonProcessingException {
+        List<CustomerListResponse.AccountListDTO> list = customerService.list();
+        return HttpResult.ok(list);
+    }
+
 }

+ 9 - 1
src/main/java/com/ydtech/modules/admin/dao/SysUserMapper.java

@@ -10,7 +10,6 @@ import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.report.user.QianLineQDPersonnelReportDto;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.base.model.dto.PageDto;
-import com.ydtech.modules.order.entity.BasePageResult;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
@@ -539,6 +538,15 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * 根据登陆者 id deptId 查询
      */
     List<SysUser> selectLeaderBylanderInfo(@Param("deptId") String deptId, @Param("leaderId") String leaderId, @Param("userId") String userId);
+
+
+    /**
+     * @version
+     * @author: hxl
+     * @Date: 2024/9/24 17:35
+     * @Description: 查询电销的管理人列表
+     */
+    List<SysUser> findDxZyUserList();
 }
 
 

+ 7 - 6
src/main/java/com/ydtech/modules/admin/model/po/SysQyWeChat.java

@@ -48,12 +48,13 @@ public class SysQyWeChat {
     @TableField( "wechat_picture_url")
     private String wechatPictureUrl;
 
-    /**
-     * 企业微信客服URL
-     */
-    @ApiModelProperty("企业微信客服URL")
-    @TableField("support_staff_url")
-    private String supportStaffUrl;
+    @ApiModelProperty("企业微信客服id")
+    @TableField("open_kf_id")
+    private String openKfId;
+
+    @ApiModelProperty("企业微信客服名称")
+    @TableField("open_kf_name")
+    private String openKfName;
 
     @ApiModelProperty("创建用户")
     @TableField("operator")

+ 1 - 4
src/main/java/com/ydtech/modules/admin/service/SysUserService.java

@@ -14,10 +14,7 @@ import com.ydtech.modules.admin.model.dto.*;
 import com.ydtech.modules.admin.model.vo.*;
 import com.ydtech.modules.base.model.dto.PageDto;
 import com.ydtech.modules.base.model.vo.PageVo;
-import org.apache.ibatis.annotations.Param;
-import org.springframework.web.bind.annotation.RequestParam;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -276,7 +273,7 @@ public interface SysUserService extends BaseIService<SysUser> {
      *  @Date: 2024/9/24 17:35
      *  @Description:  查询电销的管理人列表
      */
-    List<SysUser> findDxUserList();
+    List<SysUser> findDxUserList(String type);
 
     List<Map<String,String>>  selectHxUserList(SysUserDto sysUserDto);
 

+ 22 - 2
src/main/java/com/ydtech/modules/admin/service/WechatCustomerService.java

@@ -1,6 +1,10 @@
 package com.ydtech.modules.admin.service;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.ydtech.core.page.BasePageVO;
+import com.ydtech.modules.admin.components.wechat.customer.response.CustomerListResponse;
+
+import java.util.List;
 
 public interface WechatCustomerService {
 
@@ -8,16 +12,32 @@ public interface WechatCustomerService {
      * 配置微信客服回调信息
      *
      * @param msgSignature
-     * @param timestamp 时间戳
+     * @param timestamp    时间戳
      * @param nonce
-     * @param echoStr 加密后的参数
+     * @param echoStr      加密后的参数
      * @return 校验参数
      */
     String customerCallback(String msgSignature, String timestamp, String nonce, String echoStr);
 
     /**
      * 回调事件
+     *
      * @param wechatEncrypt
      */
     void callbackSendMsgOnEvent(String wechatEncrypt) throws JsonProcessingException;
+
+
+    /**
+     * 获取全部客服账号
+     *
+     * @return 客服列表
+     */
+    List<CustomerListResponse.AccountListDTO> list();
+
+    /**
+     * 获取链接
+     *
+     * @return 跳转链接
+     */
+    String addContactWay(String openKfId);
 }

+ 6 - 2
src/main/java/com/ydtech/modules/admin/service/impl/SysUserServiceImpl.java

@@ -60,7 +60,6 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 import java.io.*;
 import java.math.BigDecimal;
 import java.net.HttpURLConnection;
@@ -2482,7 +2481,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      * @Description: 电销管理人数据
      */
     @Override
-    public List<SysUser> findDxUserList() {
+    public List<SysUser> findDxUserList(String type) {
+        if("1".equals(type)){
+            return sysUserMapper.findDxUserList();
+        }else if("2".equals(type)){
+            return sysUserMapper.findDxZyUserList();
+        }
         return sysUserMapper.findDxUserList();
     }
 

+ 7 - 1
src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java

@@ -689,6 +689,9 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         pageVo.setPageNum(taskStatisticsVo.getPageNum());
         pageVo.setPageSize(taskStatisticsVo.getPageSize());
 
+        if(StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) &&  (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) &&  StringUtils.isEmpty(taskStatisticsVo.getDeptId()) ) ){
+            return new Page<>(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageNum());
+        }
 
         HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDateType(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
         taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
@@ -861,6 +864,9 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
                 taskStatisticsVo.setUserIds(new ArrayList<>());
             }
         }
+        if (StringUtils.isNotEmpty(taskStatisticsVo.getTreeType()) && (StringUtils.isEmpty(taskStatisticsVo.getTreeUserId()) && StringUtils.isEmpty(taskStatisticsVo.getDeptId()))) {
+            return new BusinessAgentData();
+        }
 
         String deptId = BaseController.getDeptId();
         BusinessAgentData result = this.taskStatisticsMapper.getBusinessAgentDataTotalAdd(taskStatisticsVo);
@@ -882,7 +888,7 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         BigDecimal subtract = entranceAllFee.subtract(exportAllFee);
         result.setDistributionAmount(subtract); //毛利润
         if(subtract.compareTo(BigDecimal.ZERO)>0){
-            BigDecimal resultDivided = subtract.divide(sumPremium, 2, RoundingMode.HALF_UP); //人均产能
+            BigDecimal resultDivided = subtract.divide(sumPremium, 4, RoundingMode.HALF_UP); //人均产能
             result.setDistributionAmountRate(resultDivided);
         }else {
             result.setDistributionAmountRate(BigDecimal.ZERO);

+ 11 - 1
src/main/java/com/ydtech/modules/admin/service/impl/UserReportServiceImpl.java

@@ -340,6 +340,7 @@ public class UserReportServiceImpl implements UserReportService {
             List<QxFrontlineAgentDto> getQxFrontlineAgentList = sysUserMapper.getQxFrontlineAgentList(qxFrontlineAgentVo);
             if (qxFrontlineAgentVo.getManagementSource().equals("1")) {// 渠道
                 getQxFrontlineAgentList .clear();
+
                 getQxFrontlineAgentList.addAll(userReportMapper.selectChannelPersonOld(qxFrontlineAgentVo));
             } else if (qxFrontlineAgentVo.getManagementSource().equals("2")) {// 代理人
                 this.agentPerson(getQxFrontlineAgentList, qxFrontlineAgentVo);
@@ -399,8 +400,17 @@ public class UserReportServiceImpl implements UserReportService {
 
     @Override
     public HttpResult agentExcel(QxFrontlineAgentVo qxFrontlineAgentVo) {
-//        QxFrontlineAgentExcel
 
+        String leaderId = qxFrontlineAgentVo.getLeaderId();
+        if(StringUtils.isNotEmpty(leaderId)) {
+            //获取领导人下级所有
+            List<String> ids = new ArrayList<>();
+            List<String> userList = this.getUserTreeHx(leaderId, ids);
+            userList.add(leaderId);
+            if (userList.size() > 0) {
+                qxFrontlineAgentVo.setLeaderIds(userList);
+            }
+        }
         HashMap<String, String> map = getDateMapByType(qxFrontlineAgentVo.getDays(), qxFrontlineAgentVo.getCreatetimeStart(), qxFrontlineAgentVo.getCreatetimeEnd());
         qxFrontlineAgentVo.setCreatetimeStart(map.get("startDate"));
         qxFrontlineAgentVo.setCreatetimeEnd(map.get("endDate"));

+ 23 - 6
src/main/java/com/ydtech/modules/admin/service/impl/WechatCustomerServiceImpl.java

@@ -3,23 +3,24 @@ package com.ydtech.modules.admin.service.impl;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.ydtech.modules.admin.components.WechatCustomerComponents;
+import com.ydtech.modules.admin.components.wechat.customer.request.CustomerAddContactWayRequest;
+import com.ydtech.modules.admin.components.wechat.customer.request.CustomerListRequest;
 import com.ydtech.modules.admin.components.wechat.customer.request.CustomerSendMsgOnEventRequest;
 import com.ydtech.modules.admin.components.wechat.customer.request.CustomerSyncMsgRequest;
+import com.ydtech.modules.admin.components.wechat.customer.response.CustomerAddContactWayResponse;
+import com.ydtech.modules.admin.components.wechat.customer.response.CustomerListResponse;
 import com.ydtech.modules.admin.components.wechat.customer.response.CustomerSyncMsgResponse;
-import com.ydtech.modules.admin.model.SysDept;
 import com.ydtech.modules.admin.model.SysUser;
 import com.ydtech.modules.admin.model.vo.wechat.WechatCustomerCallbackVo;
 import com.ydtech.modules.admin.model.vo.wechat.WechatEncryptVo;
-import com.ydtech.modules.admin.service.SysDeptService;
 import com.ydtech.modules.admin.service.SysUserService;
 import com.ydtech.modules.admin.service.WechatCustomerService;
 import com.ydtech.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.util.crypto.WxCryptUtil;
-import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgListResp;
-import me.chanjar.weixin.cp.bean.kf.WxCpKfMsgSendRequest;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 import java.util.List;
 
@@ -32,7 +33,7 @@ public class WechatCustomerServiceImpl implements WechatCustomerService {
 
     private final SysUserService sysUserService;
 
-    private final XmlMapper xmlMapper;
+    private final XmlMapper xmlMapper = new XmlMapper();
 
     @Override
     public String customerCallback(String msgSignature, String timestamp, String nonce, String echoStr) {
@@ -59,14 +60,30 @@ public class WechatCustomerServiceImpl implements WechatCustomerService {
         CustomerSyncMsgResponse.MsgListDTO msgListDTO = customerSyncMsgResponse.getMsgList().get(msgList.size() - 1);
 
         CustomerSyncMsgResponse.MsgListDTO.EventDTO event = msgListDTO.getEvent();
+        if(ObjectUtils.isEmpty(event)) {
+            return;
+        }
         String sceneParam = event.getSceneParam();
         if (StringUtils.isEmpty(sceneParam)) {
             return;
         }
 
         SysUser sysUser = sysUserService.getById(sceneParam);
-        CustomerSendMsgOnEventRequest customerSendMsgOnEventRequest = CustomerSendMsgOnEventRequest.sendMsgOnEvent(sysUser, msgListDTO.getMsgid(),event.getWelcomeCode());
+        CustomerSendMsgOnEventRequest customerSendMsgOnEventRequest = CustomerSendMsgOnEventRequest.sendMsgOnEvent(sysUser, msgListDTO.getMsgid(), event.getWelcomeCode());
         wechatCustomerComponents.sendMsgOnEvent(customerSendMsgOnEventRequest);
     }
 
+    @Override
+    public List<CustomerListResponse.AccountListDTO> list() {
+        CustomerListRequest customerListResponse = new CustomerListRequest(0, 100);
+        return wechatCustomerComponents.list(customerListResponse).getAccountList();
+    }
+
+    @Override
+    public String addContactWay(String openKfId) {
+        CustomerAddContactWayRequest customerAddContactWayRequest = new CustomerAddContactWayRequest(openKfId, "WELCOME_MESSAGE");
+        CustomerAddContactWayResponse customerAddContactWayResponse = wechatCustomerComponents.addContactWay(customerAddContactWayRequest);
+        return customerAddContactWayResponse.getUrl();
+    }
+
 }

+ 22 - 1
src/main/java/com/ydtech/modules/ins/model/vo/CustomerInfoVo.java

@@ -29,10 +29,13 @@ public class CustomerInfoVo {
     private String name;
 
     @NotNull(message = "车主、投保人、被保人身份证号不能为空")
-    @CheckIdentifyNumber
     @ApiModelProperty("身份证号")
     private String identifyNumber;
 
+//    @NotNull(message = "(企业)车主、投保人、被保人组织机构代码不能为空")
+    @ApiModelProperty("组织机构代码")
+    private String organizationCode;
+
 //    @NotNull(message = "车主、投保人、被保人身份证类型不能为空")
     @ApiModelProperty("身份证类型")
     private String identifyType;
@@ -70,6 +73,24 @@ public class CustomerInfoVo {
     @ApiModelProperty(value = "同投保人")
     private boolean insuranceHolder;
 
+    @ApiModelProperty(value = "省")
+    private String province;
+
+    @ApiModelProperty(value = "市")
+    private String city;
+
+    @ApiModelProperty(value = "县")
+    private String county;
+
+    @ApiModelProperty(value = "车主类型(0:法人 1:个人(中国籍) 2: 个人(非中国籍))")
+    private String property;
+
+    @ApiModelProperty(value = "注册资本金")
+    private String registeredCapital;
+    @ApiModelProperty(value = "经营范围")
+    private String scope;
+
+
     public boolean contrastInfo(CustomerInfoVo customerInfoVo) {
         if (!ObjectUtils.nullSafeEquals(this.name, customerInfoVo.getName())) {
             return false;

+ 1 - 1
src/main/java/com/ydtech/modules/order/components/chengtai/ChengTaiRequestApiComponents.java

@@ -213,7 +213,7 @@ public class ChengTaiRequestApiComponents {
         if (!flag){
             throw new SystemException("验签失败");
         }
-        if (!ResponseCode.R_000.getCode().equals(responseCode)) {
+        if (!ResponseCode.R_000.getCode().equals(responseCode) && !responseMsg.contains("重复投保") && !responseMsg.contains("录入的校验码有误")) {
             throw new SystemException(responseMsg);
         }
     }

+ 1 - 1
src/main/java/com/ydtech/modules/order/constants/OrderCacheConstant.java

@@ -112,6 +112,6 @@ public class OrderCacheConstant {
     /**
      * 微信客服token
      */
-    public static final String WECHAT_CUSTOMER_TOKEN = "WECHAT:CUSTOMER:TOKEN";
+    public static final String WECHAT_CUSTOMER_TOKEN = "wechat:customer:token";
 
 }

+ 157 - 9
src/main/java/com/ydtech/modules/order/entity/api/chengtai/request/InsurePremiumRequest.java

@@ -14,6 +14,7 @@ import com.ydtech.modules.order.entity.InsDrivingIntentionInsurance;
 import com.ydtech.modules.order.entity.InsDrivingIntentionInsuranceSon;
 import com.ydtech.modules.order.entity.api.chengtai.constants.*;
 import com.ydtech.modules.order.entity.api.chengtai.response.CarInfoResponse;
+import com.ydtech.modules.order.entity.api.chengtai.response.InsurePremiumResponse;
 import com.ydtech.modules.order.entity.api.chengtai.response.QueryCarActualValueResponse;
 import com.ydtech.modules.order.entity.config.ChengTaiConfigureParameters;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
@@ -55,11 +56,10 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
                                 QueryCarActualValueResponse carActualValueResponse,
                                 PersonAreaVo personAreaVo,
                                 ChengTaiConfigureParameters parameters,
-                                BaseQuoteVo<InsDrivingIntentionInsurance> quoteVo,
-                                CarInfoResponse.CarModelListDTO modelListDTO){
+                                BaseQuoteVo<InsDrivingIntentionInsurance> quoteVo){
         super(parameters.getPartnerCode());
         // 标的信息
-        InsuredObjectDTO insuredObject = new InsuredObjectDTO(quoteInfoVo, carModelListDTO,carActualValueResponse, modelListDTO);
+        InsuredObjectDTO insuredObject = new InsuredObjectDTO(quoteInfoVo, carModelListDTO,carActualValueResponse);
         this.insuredObject = insuredObject;
         // 客户信息
         OwnerDTO owner = new OwnerDTO(quoteInfoVo.getOwnerInfo(), personAreaVo);
@@ -211,6 +211,8 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
         private ContractMainDTO contractMain;
         @JsonProperty("coverage")
         private List<CoverageDTO> coverage;
+        @JsonProperty("platFormMessage")
+        private PlatFormMessageDTO platFormMessage;
 
         public BiContractDTO(BaseQuoteInfoVo quoteInfoVo,BigDecimal actualValue){
             boolean isNewEnergy = quoteInfoVo.getCarInfo().isNewEnergy();
@@ -221,6 +223,77 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
             this.coverage = CoverageDTO.toCoverageList(isNewEnergy,quoteInfoVo,actualValue);
         }
 
+        @NoArgsConstructor
+        @Data
+        public static class PlatFormMessageDTO {
+//            @JsonProperty("scoreCode")
+//            private String scoreCode;
+//            @JsonProperty("lastPolicyQueryDate")
+//            private String lastPolicyQueryDate;
+//            @JsonProperty("insureYears")
+//            private String insureYears;
+//            @JsonProperty("ciCarKind")
+//            private String ciCarKind;
+//            @JsonProperty("peccancyAdjustCI")
+//            private String peccancyAdjustCI;
+//            @JsonProperty("lastPolicyExpireDate")
+//            private String lastPolicyExpireDate;
+//            @JsonProperty("noClaimAdjustReasonCodeBI")
+//            private String noClaimAdjustReasonCodeBI;
+//            @JsonProperty("modelEnergyType")
+//            private String modelEnergyType;
+//            @JsonProperty("noClaimAdjustReason")
+//            private String noClaimAdjustReason;
+//            @JsonProperty("score")
+//            private String score;
+//            @JsonProperty("queryDate")
+//            private String queryDate;
+//            @JsonProperty("claimAdjustReasonCodeBI")
+//            private String claimAdjustReasonCodeBI;
+//            @JsonProperty("ciModelCode")
+//            private String ciModelCode;
+//            @JsonProperty("lastPolicyEffectiveDate")
+//            private String lastPolicyEffectiveDate;
+//            @JsonProperty("unMatchLicenseNoMessage")
+//            private String unMatchLicenseNoMessage;
+//            @JsonProperty("lastReplacementValue")
+//            private String lastReplacementValue;
+//            @JsonProperty("expireDate")
+//            private String expireDate;
+//            @JsonProperty("repeatedMsg")
+//            private String repeatedMsg;
+            @JsonProperty("question")
+            private String question;
+//            @JsonProperty("noClaimAdjustReasonBI")
+//            private String noClaimAdjustReasonBI;
+//            @JsonProperty("nonClaimAdjust")
+//            private String nonClaimAdjust;
+            @JsonProperty("querySequenceNo")
+            private String querySequenceNo;
+//            @JsonProperty("noClaimAdjustReasonCodeCI")
+//            private String noClaimAdjustReasonCodeCI;
+//            @JsonProperty("lastModelCode")
+//            private String lastModelCode;
+//            @JsonProperty("claimAdjustReasonCodeCI")
+//            private String claimAdjustReasonCodeCI;
+//            @JsonProperty("lastModel")
+//            private String lastModel;
+            @JsonProperty("answer")
+            private String answer;
+//            @JsonProperty("claimCoeff")
+//            private String claimCoeff;
+//            @JsonProperty("claimAdjustLevel")
+//            private String claimAdjustLevel;
+//            @JsonProperty("peccancyAdjustReasonCI")
+//            private String peccancyAdjustReasonCI;
+            @JsonProperty("reinsuranceFlag")
+            private String reinsuranceFlag;
+//            @JsonProperty("claimTimes")
+//            private String claimTimes;
+//            @JsonProperty("rateFloatFlag")
+//            private String rateFloatFlag;
+        }
+
         @NoArgsConstructor
         @Data
         public static class ContractMainDTO {
@@ -242,6 +315,8 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
             private String validAtOnce;
             @JsonProperty("validDate")
             private String validDate;
+            @JsonProperty("expiryDate")
+            private String expiryDate;
 
             public ContractMainDTO(BaseQuoteInfoVo quoteInfoVo,boolean isNewEnergy){
                 if(isNewEnergy){
@@ -257,6 +332,7 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
                         this.validAtOnce = StringUtils.isBlank(riskInfoVo.getInstantFlag())
                                 || "0".equals(riskInfoVo.getInstantFlag()) ? "0" : "1"; // 及时起保
                         this.validDate =riskInfoVo.getStartDate();
+                        this.expiryDate = riskInfoVo.getEndDate();
                         this.renewalFlag = "0";
                     }
                 }
@@ -342,8 +418,8 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
 
         public InsuredObjectDTO(BaseQuoteInfoVo quoteInfoVo,
                                 CarInfoResponse.CarModelListDTO carModelListDTO,
-                                QueryCarActualValueResponse carActualValueResponse, CarInfoResponse.CarModelListDTO modelListDTO){
-            PolicyCarDTO policyCarDTO = new PolicyCarDTO(quoteInfoVo, carModelListDTO,carActualValueResponse,modelListDTO);
+                                QueryCarActualValueResponse carActualValueResponse){
+            PolicyCarDTO policyCarDTO = new PolicyCarDTO(quoteInfoVo, carModelListDTO,carActualValueResponse);
             this.policyCar = policyCarDTO;
 
             // 修理厂信息
@@ -433,8 +509,7 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
 
             public PolicyCarDTO(BaseQuoteInfoVo quoteInfoVo,
                                 CarInfoResponse.CarModelListDTO carModelListDTO,
-                                QueryCarActualValueResponse carActualValueResponse,
-                                CarInfoResponse.CarModelListDTO modelListDTO){
+                                QueryCarActualValueResponse carActualValueResponse){
                 CarInfoVo carInfo = quoteInfoVo.getCarInfo();
                 this.vin = carInfo.getFrameNo();
                 this.engine = carInfo.getEngineNo();
@@ -477,14 +552,14 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
                 this.carCheckStatus = "3";
                 this.carCheckReason = "1";
                 this.carCheckReasonName = "按期续保未增保损失险类";
-                if (Objects.isNull(modelListDTO.getDisplacement())){
+                if (Objects.isNull(carModelListDTO.getDisplacement())){
                     if(StringUtils.isBlank(carInfo.getEnginedesc())){
                         this.displacement = new BigDecimal(1);
                     }else{
                         this.displacement = new BigDecimal(carInfo.getEnginedesc()).multiply(new BigDecimal("1000"));
                     }
                 }else{
-                    this.displacement = modelListDTO.getDisplacement().multiply(new BigDecimal("1000"));
+                    this.displacement = carModelListDTO.getDisplacement().multiply(new BigDecimal("1000"));
                 }
                 this.exhaustScaleUnit = "ml";
                 this.approvedLoad = StringUtils.isBlank(carInfo.getLimitLoad()) ? new BigDecimal(0) : new BigDecimal(carInfo.getLimitLoad());
@@ -603,6 +678,8 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
         private List<CoverageDTO> coverage;
         @JsonProperty("tax")
         private TaxDTO tax;
+        @JsonProperty("platFormMessage")
+        private PlatFormMessageDTO platFormMessage;
 
         public CiContractDTO(BaseQuoteInfoVo quoteInfoVo){
             // 险种信息
@@ -613,6 +690,77 @@ public class InsurePremiumRequest extends ChengTaiBaseRequest{
             this.tax = new TaxDTO(quoteInfoVo);
         }
 
+        @NoArgsConstructor
+        @Data
+        public static class PlatFormMessageDTO {
+//            @JsonProperty("scoreCode")
+//            private String scoreCode;
+//            @JsonProperty("lastPolicyQueryDate")
+//            private String lastPolicyQueryDate;
+//            @JsonProperty("insureYears")
+//            private String insureYears;
+//            @JsonProperty("ciCarKind")
+//            private String ciCarKind;
+//            @JsonProperty("peccancyAdjustCI")
+//            private String peccancyAdjustCI;
+//            @JsonProperty("lastPolicyExpireDate")
+//            private String lastPolicyExpireDate;
+//            @JsonProperty("noClaimAdjustReasonCodeBI")
+//            private String noClaimAdjustReasonCodeBI;
+//            @JsonProperty("modelEnergyType")
+//            private String modelEnergyType;
+//            @JsonProperty("noClaimAdjustReason")
+//            private String noClaimAdjustReason;
+//            @JsonProperty("score")
+//            private String score;
+//            @JsonProperty("queryDate")
+//            private String queryDate;
+//            @JsonProperty("claimAdjustReasonCodeBI")
+//            private String claimAdjustReasonCodeBI;
+//            @JsonProperty("ciModelCode")
+//            private String ciModelCode;
+//            @JsonProperty("lastPolicyEffectiveDate")
+//            private String lastPolicyEffectiveDate;
+//            @JsonProperty("unMatchLicenseNoMessage")
+//            private String unMatchLicenseNoMessage;
+//            @JsonProperty("lastReplacementValue")
+//            private String lastReplacementValue;
+//            @JsonProperty("expireDate")
+//            private String expireDate;
+//            @JsonProperty("repeatedMsg")
+//            private String repeatedMsg;
+            @JsonProperty("question")
+            private String question;
+//            @JsonProperty("noClaimAdjustReasonBI")
+//            private String noClaimAdjustReasonBI;
+//            @JsonProperty("nonClaimAdjust")
+//            private String nonClaimAdjust;
+            @JsonProperty("querySequenceNo")
+            private String querySequenceNo;
+//            @JsonProperty("noClaimAdjustReasonCodeCI")
+//            private String noClaimAdjustReasonCodeCI;
+//            @JsonProperty("lastModelCode")
+//            private String lastModelCode;
+//            @JsonProperty("claimAdjustReasonCodeCI")
+//            private String claimAdjustReasonCodeCI;
+//            @JsonProperty("lastModel")
+//            private String lastModel;
+            @JsonProperty("answer")
+            private String answer;
+//            @JsonProperty("claimCoeff")
+//            private String claimCoeff;
+//            @JsonProperty("claimAdjustLevel")
+//            private String claimAdjustLevel;
+//            @JsonProperty("peccancyAdjustReasonCI")
+//            private String peccancyAdjustReasonCI;
+            @JsonProperty("reinsuranceFlag")
+            private String reinsuranceFlag;
+//            @JsonProperty("claimTimes")
+//            private String claimTimes;
+//            @JsonProperty("rateFloatFlag")
+//            private String rateFloatFlag;
+        }
+
         @NoArgsConstructor
         @Data
         public static class ContractMainDTO {

+ 2 - 2
src/main/java/com/ydtech/modules/order/entity/api/chengtai/response/InsurePremiumResponse.java

@@ -213,7 +213,7 @@ public class InsurePremiumResponse extends ChengTaiBaseResponse {
             @JsonProperty("validDate")
             private String validDate;
             @JsonProperty("coveragePremium")
-            private String coveragePremium;
+            private Double coveragePremium;
             @JsonProperty("glassClassCode")
             private String glassClassCode;
             @JsonProperty("calculateFlag")
@@ -540,7 +540,7 @@ public class InsurePremiumResponse extends ChengTaiBaseResponse {
             @JsonProperty("riskCode")
             private String riskCode;
             @JsonProperty("totalPremium")
-            private String totalPremium;
+            private Double totalPremium;
             @JsonProperty("policyNo")
             private String policyNo;
             @JsonProperty("validAtOnce")

+ 5 - 0
src/main/java/com/ydtech/modules/order/entity/api/yangguang/constants/ImageTypeEnum.java

@@ -35,6 +35,11 @@ public enum ImageTypeEnum {
     ITE_14("14","行驶证",new String[]{
             InsuranceImageEnum.C01.getCode(),
             InsuranceImageEnum.D01.getCode()
+    }),
+    ITE_18("18","营业执照",new String[]{
+            InsuranceImageEnum.Y02.getCode(),
+            InsuranceImageEnum.Y03.getCode(),
+            InsuranceImageEnum.Y04.getCode()
     });
 
     private final String code;

+ 9 - 4
src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangAccuracyCalculateRequest.java

@@ -491,13 +491,18 @@ public class YangGuangAccuracyCalculateRequest extends YangGuangBaseRequest{
             this.IdentifyNumber = customerInfoVo.getIdentifyNumber();
             if (carInfoVo.getProperty() != null && carInfoVo.getProperty().equals("1")) {
                 this.InsuredType = "0";
+                this.IdentifyType = "01";
+                this.CarInsuredRelation = "1";
             } else if (carInfoVo.getProperty() != null && carInfoVo.getProperty().equals("2")) {
-                this.InsuredType = "1";
-            } else if (carInfoVo.getProperty() != null && carInfoVo.getProperty().equals("3")) {
+                this.IdentifyType = "09";
                 this.InsuredType = "2";
+                this.CarInsuredRelation = "1";
+            } else if (carInfoVo.getProperty() != null && carInfoVo.getProperty().equals("3")) {
+                this.InsuredType = "1";
+                this.IdentifyType = "99";
+                this.CarInsuredRelation = "3";
             }
-            this.IdentifyType = "01";
-            this.CarInsuredRelation = "1";
+
         }
     }
 

+ 5 - 0
src/main/java/com/ydtech/modules/order/entity/api/yangguang/request/YangGuangUpLoadRequest.java

@@ -159,6 +159,11 @@ public class YangGuangUpLoadRequest extends YangGuangBaseRequest{
                                     || InsuranceImageEnum.D04.getCode().equals(this.videoType))
                             {
                                 this.videoType = "12";
+                            } else if (InsuranceImageEnum.Y02.getCode().equals(this.videoType)
+                                    || InsuranceImageEnum.Y03.getCode().equals(this.videoType)
+                                    || InsuranceImageEnum.Y04.getCode().equals(this.videoType))
+                            {
+                                this.videoType = "18";
                             }
                             break;
                         }

+ 223 - 10
src/main/java/com/ydtech/modules/order/service/impl/ChengTaiOrderApiServiceImpl.java

@@ -1,11 +1,13 @@
 package com.ydtech.modules.order.service.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.constants.enums.InsuranceOrderPdf;
 import com.ydtech.constants.enums.InsuranceRisk;
 import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
@@ -16,7 +18,9 @@ import com.ydtech.modules.admin.service.SysAreaService;
 import com.ydtech.modules.ins.model.vo.*;
 import com.ydtech.modules.order.components.ConfigureParametersComponents;
 import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
+import com.ydtech.modules.order.components.VerificationCodeIdentification;
 import com.ydtech.modules.order.components.chengtai.ChengTaiRequestApiComponents;
+import com.ydtech.modules.order.components.gouren.GuorenDuplicateInsuranceComponent;
 import com.ydtech.modules.order.constants.UnderwritingStatus;
 import com.ydtech.modules.order.entity.*;
 import com.ydtech.modules.order.entity.api.chengtai.constants.CtKindCodeEnum;
@@ -25,7 +29,10 @@ import com.ydtech.modules.order.entity.api.chengtai.constants.ResponseCode;
 import com.ydtech.modules.order.entity.api.chengtai.constants.RiskCodeEnum;
 import com.ydtech.modules.order.entity.api.chengtai.request.*;
 import com.ydtech.modules.order.entity.api.chengtai.response.*;
+import com.ydtech.modules.order.entity.api.zijin.request.CalculatePremiumRequest;
 import com.ydtech.modules.order.entity.config.ChengTaiConfigureParameters;
+import com.ydtech.modules.order.entity.crawler.request.RecognitionRequest;
+import com.ydtech.modules.order.entity.crawler.response.RecognitionResponse;
 import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.filter.CarModelsFilterUtils;
 import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
@@ -35,15 +42,15 @@ import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
-import com.ydtech.utils.CalculateUtils;
-import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.*;
 import com.ydtech.utils.baidu.FileUtil;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -116,8 +123,10 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         /** 4. 报价 */
         PersonAreaVo personAreaVo = new PersonAreaVo();
         buildRegion(quoteInfoVo,personAreaVo);
-        InsurePremiumRequest insurePremiumRequest = new InsurePremiumRequest(quoteInfoVo,carModelListDTO, carActualValueResponse,personAreaVo,parameters,quoteVo, carModelListDTO);
-        InsurePremiumResponse insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
+        InsurePremiumRequest insurePremiumRequest = new InsurePremiumRequest(quoteInfoVo,carModelListDTO, carActualValueResponse,personAreaVo,parameters,quoteVo);
+
+        // 重复报价
+        InsurePremiumResponse insurePremiumResponse = this.getResponse(insurePremiumRequest, httpHeaders);
 
         String message = "";
         if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode())){
@@ -153,6 +162,199 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         return responseOrder(insurePremiumResponse, quoteRespVo, ptlAgreementAttribution, insurePremiumResponse.getOrderId());
     }
 
+    /**
+     * 重复报价
+     * @param insurePremiumRequest
+     * @param httpHeaders
+     * @return
+     */
+    private InsurePremiumResponse getResponse(InsurePremiumRequest insurePremiumRequest, HttpHeaders httpHeaders) throws Exception {
+        InsurePremiumResponse insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
+        if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode()) && insurePremiumResponse.getMessage().contains("重复投保")){
+            // 交强险 商业险 重复投保处理
+            this.repetitionInsure(insurePremiumResponse,insurePremiumRequest);
+            insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
+        }
+
+        // 转保车处理
+        InsurePremiumResponse.BiContractDTO biContract = insurePremiumResponse.getBiContract();
+        InsurePremiumResponse.CiContractDTO ciContract = insurePremiumResponse.getCiContract();
+        Double biTotalPremium = null;
+        Double ciTotalPremium = null;
+        Boolean biBoo = false;
+        Boolean ciBoo = false;
+        if(Objects.nonNull(biContract)){
+            biTotalPremium = biContract.getContractMain().getTotalPremium();
+            if(Objects.isNull(biTotalPremium)){
+                biBoo = true;
+            }
+        }
+        if(Objects.nonNull(ciContract)){
+            ciTotalPremium = ciContract.getContractMain().getTotalPremium();
+            if(Objects.isNull(ciTotalPremium)){
+                ciBoo = true;
+            }
+        }
+        if (biBoo || ciBoo) {
+            this.platRepetition(biContract,ciContract,insurePremiumRequest);
+            insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
+        }
+
+        if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode()) && insurePremiumResponse.getMessage().contains("录入的校验码有误")){
+            this.replaceByte(insurePremiumRequest);
+            insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
+        }
+        return insurePremiumResponse;
+    }
+
+    /**
+     * 错误字符替换
+     * @param insurePremiumRequest
+     */
+    private void replaceByte(InsurePremiumRequest insurePremiumRequest) {
+        InsurePremiumRequest.CiContractDTO ciContractReq = insurePremiumRequest.getCiContract();
+        InsurePremiumRequest.BiContractDTO biContractReq = insurePremiumRequest.getBiContract();
+        if(Objects.nonNull(ciContractReq)){
+            InsurePremiumRequest.CiContractDTO.PlatFormMessageDTO platFormMessageDTO = ciContractReq.getPlatFormMessage();
+            platFormMessageDTO.setAnswer(replacingStrings(platFormMessageDTO.getAnswer()));
+        }
+        if(Objects.nonNull(biContractReq)){
+            InsurePremiumRequest.BiContractDTO.PlatFormMessageDTO platFormMessageDTO = biContractReq.getPlatFormMessage();
+            platFormMessageDTO.setAnswer(replacingStrings(platFormMessageDTO.getAnswer()));
+        }
+    }
+
+    public static String replacingStrings(String code) {
+        if (StringUtils.isEmpty(code)) {
+            return code;
+        }
+        if (code.length() > 4) {
+            return code.substring(code.length() - 4);
+        }
+        return code
+                .replace("3", "j")
+                .replace("0", "o");
+    }
+    /**
+     * 转保车处理
+     * @param biContract
+     * @param ciContract
+     * @param insurePremiumRequest
+     */
+    private void platRepetition(InsurePremiumResponse.BiContractDTO biContract, InsurePremiumResponse.CiContractDTO ciContract, InsurePremiumRequest insurePremiumRequest) {
+        String jqImageStr = null;
+        String syImageStr = null;
+
+        //交强险
+        if (Objects.nonNull(ciContract)) {
+            jqImageStr = ciContract.getPlatFormMessage().getQuestion();
+        }
+        //商业险
+        if (Objects.nonNull(biContract)) {
+            syImageStr = biContract.getPlatFormMessage().getQuestion();
+        }
+        Map<String, String> bodyMap = new HashMap<>();
+        bodyMap.put("jqImage", com.ydtech.utils.StringUtils.toString(jqImageStr, ""));
+        bodyMap.put("syImage", com.ydtech.utils.StringUtils.toString(syImageStr, ""));
+        String sendBody = JsonUtils.toJson(bodyMap);
+        String ocrStr = HttpUtil.sendPost("http://39.98.41.104:8088/getres", sendBody);
+        CheckCodeResp resp = JSONUtil.toBean(ocrStr, CheckCodeResp.class);
+
+        if(Objects.nonNull(ciContract)){
+            InsurePremiumRequest.CiContractDTO ciContractReq = insurePremiumRequest.getCiContract();
+            InsurePremiumRequest.CiContractDTO.PlatFormMessageDTO platFormMessage = ciContractReq.getPlatFormMessage();
+            if(Objects.isNull(platFormMessage)){
+                platFormMessage = new InsurePremiumRequest.CiContractDTO.PlatFormMessageDTO();
+            }
+            BeanUtils.copyProperties(ciContract.getPlatFormMessage(), platFormMessage);
+            platFormMessage.setAnswer(resp.jqImageCode);
+            ciContractReq.setPlatFormMessage(platFormMessage);
+            insurePremiumRequest.setCiContract(ciContractReq);
+        }
+        if(Objects.nonNull(biContract)){
+            InsurePremiumRequest.BiContractDTO biContractReq = insurePremiumRequest.getBiContract();
+            InsurePremiumRequest.BiContractDTO.PlatFormMessageDTO platFormMessage = biContractReq.getPlatFormMessage();
+            if(Objects.isNull(platFormMessage)){
+                platFormMessage = new InsurePremiumRequest.BiContractDTO.PlatFormMessageDTO();
+            }
+            BeanUtils.copyProperties(biContract.getPlatFormMessage(), platFormMessage);
+            platFormMessage.setAnswer(resp.syImageCode);
+            biContractReq.setPlatFormMessage(platFormMessage);
+            insurePremiumRequest.setBiContract(biContractReq);
+        }
+    }
+
+    /**
+     * 重复投保时间处理
+     *
+     * @param insurePremiumResponse
+     * @param insurePremiumRequest
+     */
+    private void repetitionInsure(InsurePremiumResponse insurePremiumResponse, InsurePremiumRequest insurePremiumRequest) {
+        String err = insurePremiumResponse.getMessage();
+        List<String> errList = Arrays.asList(err.split("。"));
+        if(CollUtil.isEmpty(errList)){ return; }
+
+        // 定义时间格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+        errList.stream().forEach(a ->{
+            if (a.contains("交强险平台") && a.contains("重复投保")){
+                InsurePremiumRequest.CiContractDTO ciContract = insurePremiumRequest.getCiContract();
+                InsurePremiumRequest.CiContractDTO.ContractMainDTO contractMain = ciContract.getContractMain();
+
+                LocalDateTime dateTime = null;
+                if(a.contains("终保日期")){
+                    String startTime = a.substring(a.indexOf("终保日期")+5,a.indexOf("终保日期")+21);
+                    // 解析原始时间
+                    dateTime =  LocalDateTime.parse(startTime, formatter1);
+                }else{
+                    String startTime = contractMain.getExpiryDate();
+                    // 解析原始时间
+                    dateTime = LocalDateTime.parse(startTime, formatter);
+                }
+                LocalDateTime tomorrowMidnight = dateTime;
+                //判断是否是整点  如果是整点则不进行明天的零点操作
+                if(dateTime.getHour() != 0 || dateTime.getMinute() != 0 || dateTime.getSecond() != 0)
+                {
+                    tomorrowMidnight = dateTime.toLocalDate().plusDays(1).atStartOfDay();
+                }
+                LocalDateTime end = tomorrowMidnight.plusYears(1L);
+                contractMain.setValidDate(DateTimeUtil.format(tomorrowMidnight, DateTimeUtil.DATETIME_PATTERN));
+                LocalDateTime localDateTime = end.minusSeconds(1L);
+                contractMain.setExpiryDate(DateTimeUtil.format(localDateTime, DateTimeUtil.DATETIME_PATTERN));
+                ciContract.setContractMain(contractMain);
+                insurePremiumRequest.setCiContract(ciContract);
+            }
+            if (a.contains("商业险险平台") && a.contains("重复投保")){
+                InsurePremiumRequest.BiContractDTO biContract = insurePremiumRequest.getBiContract();
+                InsurePremiumRequest.BiContractDTO.ContractMainDTO contractMain = biContract.getContractMain();
+                LocalDateTime dateTime = null;
+                if(a.contains("终保日期")){
+                    String startTime = a.substring(a.indexOf("终保日期")+5,a.indexOf("终保日期")+21);
+                    // 解析原始时间
+                    dateTime =  LocalDateTime.parse(startTime, formatter1);
+                }else{
+                    String startTime = contractMain.getExpiryDate();
+                    // 解析原始时间
+                    dateTime = LocalDateTime.parse(startTime, formatter);
+                }
+                LocalDateTime tomorrowMidnight = dateTime;
+                //判断是否是整点  如果是整点则不进行明天的零点操作
+                if(dateTime.getHour() != 0 || dateTime.getMinute() != 0 || dateTime.getSecond() != 0)
+                {
+                    tomorrowMidnight = dateTime.toLocalDate().plusDays(1).atStartOfDay();
+                }
+                LocalDateTime end = tomorrowMidnight.plusYears(1L);
+                contractMain.setValidDate(DateTimeUtil.format(tomorrowMidnight, DateTimeUtil.DATETIME_PATTERN));
+                LocalDateTime localDateTime = end.minusSeconds(1L);
+                contractMain.setExpiryDate(DateTimeUtil.format(localDateTime, DateTimeUtil.DATETIME_PATTERN));
+                biContract.setContractMain(contractMain);
+                insurePremiumRequest.setBiContract(biContract);
+            }
+        });
+    }
+
     private HttpResult<QuoteRespVo> responseOrder(InsurePremiumResponse insurePremiumResponse, QuoteRespVo quoteRespVo, PtlAgreementAttribution ptlAgreementAttribution, String orderId) {
         // 保存订单信息
         InsAreaCompany insAreaCompany = new InsAreaCompany(quoteRespVo, ptlAgreementAttribution);
@@ -176,7 +378,7 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         List<InsAreaCompanyAccidentalDriving> insAreaCompanyAccidentalDrivings = new ArrayList<>();
         accident.forEach(accidentalDriving -> {
             InsAreaCompanyAccidentalDriving insAreaCompanyAccidentalDriving = new InsAreaCompanyAccidentalDriving();
-            insAreaCompanyAccidentalDriving.setCompanyId(insAreaCompany.getCompanyId());
+            insAreaCompanyAccidentalDriving.setCompanyId(insAreaCompany.getId());
             insAreaCompanyAccidentalDriving.setQuantity(Integer.parseInt(accidentalDriving.getQuantity()));
             insAreaCompanyAccidentalDriving.setRideRiskCode(accidentalDriving.getProjectCode());
             insAreaCompanyAccidentalDriving.setRideRiskName(accidentalDriving.getProjectName());
@@ -185,7 +387,7 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         insAreaCompanyService.insertCompanyAndOrders(insAreaCompany, insAreaCompanyAccidentalDrivings);
         // 保存交强特约信息
         InsAreaCompanyRelatedInfo info = new InsAreaCompanyRelatedInfo();
-        info.setCompanyId(insAreaCompany.getCompanyId());
+        info.setCompanyId(insAreaCompany.getId());
         info.setJqappoint(quoteRespVo.getJqappoint());
         info.setSyappoint(quoteRespVo.getSyappoint());
         insAreaCompanyRelatedInfoService.save(info);
@@ -205,7 +407,7 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         // 交强
         if(Objects.nonNull(insurePremiumResponse.getCiContract())){
             InsurePremiumResponse.CiContractDTO.ContractMainDTO ciContractMain = insurePremiumResponse.getCiContract().getContractMain();
-            jqPremium = Double.parseDouble(ciContractMain.getTotalPremium());
+            jqPremium = ciContractMain.getTotalPremium();
             quoteRespVo.setStartDateJq(ciContractMain.getValidDate());
             quoteRespVo.setEndDateJq(ciContractMain.getExpiryDate());
             //车船税
@@ -251,7 +453,7 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
                 CtKindCodeEnum ctKindCodeEnum = Enum.valueOf(CtKindCodeEnum.class, kindInfoVo.getKindCode());
                 InsurePremiumResponse.BiContractDTO.CoverageDTO coverageDTO = coverage.stream().filter(a -> a.getKindCode().equals(ctKindCodeEnum.getCode())).collect(Collectors.toList()).get(0);
                 kind.setAmount(coverageDTO.getAmount().doubleValue());
-                kind.setCoveragePremium(Double.parseDouble(coverageDTO.getCoveragePremium()));
+                kind.setCoveragePremium(coverageDTO.getCoveragePremium());
                 kind.setUnitAmount(Objects.isNull(coverageDTO.getUnitAmount()) ? 0 : coverageDTO.getUnitAmount() );
                 kind.setServiceTimes(coverageDTO.getQuantity());
                 if (!ObjectUtils.isEmpty(kindInfoVo.getDeductibleRate())) {
@@ -392,7 +594,7 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         InsAreaCompany insAreaCompany = insAreaCompanyService.getByIdIsExist(companyId);
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         LambdaQueryWrapper<InsAreaCompanyRelatedInfo> infoLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        infoLambdaQueryWrapper.eq(InsAreaCompanyRelatedInfo::getCompanyId, insAreaCompany.getCompanyId());
+        infoLambdaQueryWrapper.eq(InsAreaCompanyRelatedInfo::getCompanyId, insAreaCompany.getId());
         List<InsAreaCompanyRelatedInfo> infoList = insAreaCompanyRelatedInfoService.list(infoLambdaQueryWrapper);
         // 1 通过 协议id获取配置实体
         PtlAgreementAttribution ptlAgreementAttribution = ptlAgreementAttributionService.getById(insAreaCompany.getAgreementId());
@@ -755,4 +957,15 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
         String dir = "carInsPolicy/" + licensePlate + "/";
         return FileUtil.netUrlToFile(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl);
     }
+
+    @Data
+    static class CheckCodeResp {
+
+        @JsonProperty(value = "jqImageCode")
+        String jqImageCode;
+
+        @JsonProperty(value = "syImageCode")
+        String syImageCode;
+
+    }
 }

+ 3 - 1
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -685,7 +685,9 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         }
         //车险查询添加电销组长可以查询电销下的数据   电销组长 72
         if (dept != null && "3".equals(dept.getManagementSource()) && userRole != null && userRole.getRoleId() == 72) {
-            deptId = dept.getId();
+            //  add  by hxl  去除机构查询
+            //deptId = dept.getId();
+            orderQueryVo.setDeptId(null);
             isDxFlag = true;
         }
         Page<InsOrders> orderVoPage = baseMapper.queryPageOrder(page, orderQueryVo, adminFalg, isCdy, deptId, isDxFlag);

+ 75 - 0
src/main/java/com/ydtech/modules/order/service/impl/YangGuangOrderApiServiceImpl.java

@@ -50,10 +50,13 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Objects;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @Service
@@ -130,6 +133,78 @@ public class YangGuangOrderApiServiceImpl implements YangGuangOrderApiService {
         YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequest = new YangGuangAccuracyCalculateRequest(quoteInfoVo, purchasePrice, carModelList1, riskList.get(0),startDate,ygConfigureParameters,quoteVo);
         yangGuangAccuracyCalculateRequest.setInfotransNo(yangGuangQueryVehicleModelResponse.getInfotransNo());
         YangGuangAccuracyCalculateResponse yangGuangAccuracyCalculateResponse = yangGuangRequestApiComponents.accuracyCalculaye(yangGuangAccuracyCalculateRequest);
+        // 如果发生重复投保 将返回的终保日期带入起保日期重新报价
+        if (yangGuangAccuracyCalculateResponse.getErrorMessage().contains("重复投保")) {
+            // 定义正则表达式来匹配终保日期的格式
+            Pattern pattern = Pattern.compile("终保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2})");
+            Matcher matcher = pattern.matcher(yangGuangAccuracyCalculateResponse.getErrorMessage());
+            if (matcher.find()) {
+                // 获取响应中重复投保的终保日期
+                String endDate = matcher.group(1);
+                DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+                DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+
+                LocalDateTime dateTime = LocalDateTime.parse(endDate, inputFormatter);
+                String newDateStr = dateTime.format(outputFormatter);
+                YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequestRe = new YangGuangAccuracyCalculateRequest(quoteInfoVo, purchasePrice, carModelList1, riskList.get(0),newDateStr,ygConfigureParameters,quoteVo);
+                yangGuangAccuracyCalculateRequestRe.setInfotransNo(yangGuangQueryVehicleModelResponse.getInfotransNo());
+                YangGuangAccuracyCalculateResponse yangGuangAccuracyCalculateResponseRe = yangGuangRequestApiComponents.accuracyCalculaye(yangGuangAccuracyCalculateRequestRe);
+                if (insOrders.getProductid().equals("034001") || insOrders.getProductid().equals("0330034001") || insOrders.getProductid().equals("0330034002")) {
+                    if (yangGuangAccuracyCalculateResponseRe.getErrorCode().equals("0")) {
+                        YangGuangAccuracyCalculateResponse.itemcar itemcar = yangGuangAccuracyCalculateResponseRe.getItemcar();
+                        String actualValue = itemcar.getActualValue();
+                        YangGuangAccuracyCalculateRequest yangGuangAccuracyCalculateRequest1 = new YangGuangAccuracyCalculateRequest(quoteInfoVo, actualValue, carModelList1, riskList.get(0),newDateStr,ygConfigureParameters,quoteVo);
+                        yangGuangAccuracyCalculateRequest1.setInfotransNo(yangGuangQueryVehicleModelResponse.getInfotransNo());
+                        YangGuangAccuracyCalculateResponse yangGuangAccuracyCalculateResponse1 = yangGuangRequestApiComponents.accuracyCalculaye(yangGuangAccuracyCalculateRequest1);
+                        boolean isEnergy = carInfo.isNewEnergy();
+
+                        if (!yangGuangAccuracyCalculateResponse1.getErrorCode().equals("0")) {
+                        InsOrders order = insOrdersService.getById(quoteInfoVo.getOrderNo());
+                        InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+                            if (yangGuangAccuracyCalculateResponse1.getErrorMessage().contains("重复投保")) {
+                            insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+                            }
+                        insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution, order, yangGuangAccuracyCalculateResponse1.getErrorMessage(),insOrderStatusEnum);
+                        throw new SystemException(yangGuangAccuracyCalculateResponse1.getErrorMessage());
+                        }
+                        // 处理数据
+                        QuoteRespVo quoteRespVo = getQuoteRespVo(yangGuangAccuracyCalculateResponse1, quoteInfoVo, quoteVo.getAccidentalDrivingVo(), isEnergy);
+
+                        // 设置核心报价车型
+                        quoteRespVo.setCoreModels(carModelList1.toCoreModelsVo());
+                        return responseOrder(yangGuangAccuracyCalculateResponse1, quoteRespVo, ptlAgreementAttribution, quoteInfoVo.getOrderNo(),
+                                quoteVo.getAccidentalDrivingVo());
+                    } else {
+                        InsOrders order = insOrdersService.getById(quoteInfoVo.getOrderNo());
+                        InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+                        if (yangGuangAccuracyCalculateResponse.getErrorMessage().contains("重复投保")) {
+                            insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+                        }
+                        insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution, order, yangGuangAccuracyCalculateResponse.getErrorMessage(),insOrderStatusEnum);
+                        throw new SystemException(yangGuangAccuracyCalculateResponse.getErrorMessage());
+                    }
+                } else {
+                    boolean isEnergy = carInfo.isNewEnergy();
+                    if (!yangGuangAccuracyCalculateResponse.getErrorCode().equals("0")) {
+                        QuoteRespVo resp  = new QuoteRespVo();
+                        InsOrders order = insOrdersService.getById(quoteInfoVo.getOrderNo());
+                        InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
+                        if (yangGuangAccuracyCalculateResponse.getErrorMessage().contains("重复投保")) {
+                        insOrderStatusEnum = InsOrderStatusEnum.REPEAT_INSURE;
+                        }
+                        insOrdersService.responseFailedOrder(quoteVo,ptlAgreementAttribution, order, yangGuangAccuracyCalculateResponse.getErrorMessage(),insOrderStatusEnum);
+                        throw new SystemException(yangGuangAccuracyCalculateResponse.getErrorMessage());
+                    }
+                    // 处理数据
+                    QuoteRespVo quoteRespVo = getQuoteRespVo(yangGuangAccuracyCalculateResponse, quoteInfoVo, quoteVo.getAccidentalDrivingVo(), isEnergy);
+
+                    // 设置核心报价车型
+                    quoteRespVo.setCoreModels(carModelList1.toCoreModelsVo());
+                    return responseOrder(yangGuangAccuracyCalculateResponse, quoteRespVo, ptlAgreementAttribution, quoteInfoVo.getOrderNo(),
+                            quoteVo.getAccidentalDrivingVo());
+                }
+            }
+        }
         if (insOrders.getProductid().equals("034001") || insOrders.getProductid().equals("0330034001") || insOrders.getProductid().equals("0330034002")) {
             if (yangGuangAccuracyCalculateResponse.getErrorCode().equals("0")) {
                 YangGuangAccuracyCalculateResponse.itemcar itemcar = yangGuangAccuracyCalculateResponse.getItemcar();

+ 2 - 0
src/main/java/com/ydtech/utils/baidu/BusinessLicenseRecognition.java

@@ -4,6 +4,7 @@ package com.ydtech.utils.baidu;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ydtech.modules.order.entity.BusinessLicense;
+import me.chanjar.weixin.common.util.http.URIUtil;
 import org.apache.commons.lang3.StringUtils;
 
 /**
@@ -23,6 +24,7 @@ public class BusinessLicenseRecognition {
      * @return
      */
     public static JSONObject businessLicense(String imgParam) {
+        imgParam= URIUtil.encodeURIComponent(imgParam);
         // 请求url
         String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/business_license";
         try {

+ 10 - 0
src/main/resources/mapper/modules/admin/SysUserMapper.xml

@@ -2080,4 +2080,14 @@
             AND su.id NOT LIKE '%M%'
         </where>
     </select>
+
+    <select id="findDxZyUserList" resultType="com.ydtech.modules.admin.model.SysUser">
+        SELECT t1.id   AS id,
+               t1.NAME AS NAME
+        FROM sys_user t1
+                 LEFT JOIN sys_dept t2 ON t1.dept_id = t2.id
+        WHERE t1.`status` = 1
+          AND t1.id LIKE '%M%'
+          AND t2.management_source = 3
+    </select>
 </mapper>