Ver código fonte

Merge branch 'refs/heads/test' into test-unionpay

wks 2 anos atrás
pai
commit
0394b918f8
19 arquivos alterados com 632 adições e 70 exclusões
  1. 34 0
      src/main/java/com/ydtech/modules/admin/controller/taskStatistics/TaskStatisticsController.java
  2. 23 0
      src/main/java/com/ydtech/modules/admin/model/dto/TaskStatisticsDto.java
  3. 5 0
      src/main/java/com/ydtech/modules/admin/model/report/company/CompanyQutationCountDataQueryDto.java
  4. 3 0
      src/main/java/com/ydtech/modules/admin/model/vo/QxFrontlineAgentVo.java
  5. 17 0
      src/main/java/com/ydtech/modules/admin/model/vo/TaskStatisticsVo.java
  6. 14 0
      src/main/java/com/ydtech/modules/admin/service/TaskStatisticsService.java
  7. 32 0
      src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java
  8. 6 6
      src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java
  9. 2 2
      src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java
  10. 5 0
      src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyMapper.java
  11. 2 2
      src/main/java/com/ydtech/modules/order/dao/InsOrdersMapper.java
  12. 2 5
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  13. 63 27
      src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java
  14. 205 0
      src/main/java/com/ydtech/modules/order/utils/QrCodeGenerator.java
  15. 28 6
      src/main/java/com/ydtech/modules/order/utils/pingan/PingAnQuoteRequestAnnotationParser.java
  16. 39 21
      src/main/resources/mapper/modules/admin/SysUserLinkAreaMapper.xml
  17. 3 0
      src/main/resources/mapper/modules/esm/EsmUserReferrerMapper.xml
  18. 131 1
      src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml
  19. 18 0
      src/main/resources/mapper/modules/order/InsOrdersMapper.xml

+ 34 - 0
src/main/java/com/ydtech/modules/admin/controller/taskStatistics/TaskStatisticsController.java

@@ -17,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * @description:   任务统计
  * @author: whp
@@ -109,6 +111,38 @@ public class TaskStatisticsController {
             return HttpResult.error("查询错误"+e.getMessage());
         }
     }
+    /**
+     * @description:   控制台-业务数据
+     * @author: whp
+     * @date: 2024/8/13
+     **/
+    @PostMapping("getBusinessData")
+    @ApiOperation(value = "控制台-业务数据")
+    public HttpResult<IPage<TaskStatisticsDto>> getBusinessData(@RequestBody TaskStatisticsVo taskStatisticsVo) {
+        try{
+            IPage<TaskStatisticsDto> result = taskStatisticsService.getBusinessData(taskStatisticsVo);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
+
+    /**
+     * @description:   控制台-业务数据 - 保险分布
+     * @author: whp
+     * @date: 2024/8/13
+     **/
+    @PostMapping("getDistribution")
+    @ApiOperation(value = "控制台-业务数据-保险分布")
+    public HttpResult<List<TaskStatisticsDto>> getDistribution(@RequestBody TaskStatisticsVo taskStatisticsVo) {
+        try{
+            List<TaskStatisticsDto> result = taskStatisticsService.getDistribution(taskStatisticsVo);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
+
 
 
 }

+ 23 - 0
src/main/java/com/ydtech/modules/admin/model/dto/TaskStatisticsDto.java

@@ -70,4 +70,27 @@ public class TaskStatisticsDto {
 
     @ApiModelProperty(value = "报价笔数")
     private String orderNumber;
+
+    @ApiModelProperty(value = "单均保费")
+    private BigDecimal averagePremium;
+
+    @ApiModelProperty(value = "人员数量")
+    private BigDecimal userNumber;
+
+    @ApiModelProperty(value = "人均产能")
+    private BigDecimal perCapitaAmount;
+
+    @ApiModelProperty(value = "保险公司编码")
+    private String companyId;
+
+    @ApiModelProperty(value = "合作公司编码")
+    private String parterCompanyId;
+
+
+    @ApiModelProperty(value = "报价状态")
+    private String quotationStatus;
+
+
+    @ApiModelProperty(value = "保险公司图标")
+    private String logo;
 }

+ 5 - 0
src/main/java/com/ydtech/modules/admin/model/report/company/CompanyQutationCountDataQueryDto.java

@@ -42,4 +42,9 @@ public class CompanyQutationCountDataQueryDto {
     @ApiModelProperty("时间类型  1.近1月 2.近3月  3.近半年")
     private String  dateType;
 
+
+    @ApiModelProperty("机构来源(1-渠道、2-个代)")
+    private String  managementSource;
+
+
 }

+ 3 - 0
src/main/java/com/ydtech/modules/admin/model/vo/QxFrontlineAgentVo.java

@@ -58,5 +58,8 @@ public class QxFrontlineAgentVo implements Serializable {
     private String level;
 
 
+    @ApiModelProperty(value = "机构所属")
+    private String deptId;
+
 
 }

+ 17 - 0
src/main/java/com/ydtech/modules/admin/model/vo/TaskStatisticsVo.java

@@ -50,6 +50,23 @@ public class TaskStatisticsVo implements Serializable {
     @ApiModelProperty(value = "投保险种")
     private String riskCode;
 
+    @ApiModelProperty(value = "保险公司编码")
+    private String companyId;
+
+    @ApiModelProperty(value = "合作公司编码")
+    private String parterCompanyId;
+
+
+    @ApiModelProperty(value = "报价状态")
+    private String quotationStatus;
+
+    @ApiModelProperty(value = "保费排序")
+    private String orderSort;
+
+    @ApiModelProperty(value = "保费排序")
+    private String userNumberSort;
+
+
 
 
 

+ 14 - 0
src/main/java/com/ydtech/modules/admin/service/TaskStatisticsService.java

@@ -5,6 +5,8 @@ import com.ydtech.modules.admin.model.dto.TaskStatisticsDto;
 import com.ydtech.modules.admin.model.vo.TaskStatisticsVo;
 import com.ydtech.modules.order.entity.BasePageResult;
 
+import java.util.List;
+
 /**
  * @description:   任务统计
  * @author: whp
@@ -36,4 +38,16 @@ public interface TaskStatisticsService {
      * @date: 2024/8/12
      **/
     IPage<TaskStatisticsDto> totalQuotation(TaskStatisticsVo taskStatisticsVo);
+    /**
+     * @description:   控制台-业务数据
+     * @author: whp
+     * @date: 2024/8/13
+     **/
+    IPage<TaskStatisticsDto> getBusinessData(TaskStatisticsVo taskStatisticsVo);
+    /**
+     * @description:   控制台-业务数据 - 保险分布
+     * @author: whp
+     * @date: 2024/8/13
+     **/
+    List<TaskStatisticsDto> getDistribution(TaskStatisticsVo taskStatisticsVo);
 }

+ 32 - 0
src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java

@@ -19,6 +19,7 @@ import com.ydtech.modules.order.entity.InsAreaCompany;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -109,6 +110,37 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.totalQuotation(page,taskStatisticsVo);
         return list;
     }
+    /**
+     * @description:   控制台-业务数据
+     * @author: whp
+     * @date: 2024/8/13
+     **/
+    @Override
+    public IPage<TaskStatisticsDto> getBusinessData(TaskStatisticsVo taskStatisticsVo) {
+        PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
+        Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
+        pageVo.setPageNum(taskStatisticsVo.getPageNum());
+        pageVo.setPageSize(taskStatisticsVo.getPageSize());
+        IPage<TaskStatisticsDto> list = this.insAreaCompanyMapper.getBusinessData(page,taskStatisticsVo);
+        return list;
+    }
+    /**
+     * @description:   控制台-业务数据 - 保险分布
+     * @author: whp
+     * @date: 2024/8/13
+     **/
+    @Override
+    public List<TaskStatisticsDto> getDistribution(TaskStatisticsVo taskStatisticsVo) {
+        List<TaskStatisticsDto> result = new ArrayList<>();
+         //0 报价中 1 待核保  2 已核保代缴费  3 已承保  4  核保退回
+        for (int i = 0; i < 5; i++) {
+            taskStatisticsVo.setQuotationStatus(i+"");
+            TaskStatisticsDto taskStatisticsDtoItem = insAreaCompanyMapper.getDistribution(taskStatisticsVo);
+            taskStatisticsDtoItem.setQuotationStatus(i+"");
+            result.add(taskStatisticsDtoItem);
+        }
+        return result;
+    }
 
 
 }

+ 6 - 6
src/main/java/com/ydtech/modules/esm/service/impl/EsmUserReferrerServiceImpl.java

@@ -349,8 +349,8 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
             EsmTeamPolicyVO esmTeamPolicyVO1 = new EsmTeamPolicyVO();
             EsmTeamPolicyVO esmTeamPolicyVO2 = new EsmTeamPolicyVO();
             EsmTeamPolicyVO esmTeamPolicyVO3 = new EsmTeamPolicyVO();
-            esmTeamPolicyVO2.setTeamlevel("二级团队");
-            esmTeamPolicyVO3.setTeamlevel("三级团队");
+            esmTeamPolicyVO2.setTeamlevel("二级会员");
+            esmTeamPolicyVO3.setTeamlevel("三级会员");
             if (esmTeamPolicyVO0 == null) {
                 esmTeamPolicyVO0 = new EsmTeamPolicyVO();
                 esmTeamPolicyVO0.setSumpremium(0);
@@ -363,7 +363,7 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
 
             // 一级团队信息
             userList1 = this.baseMapper.getIdDown_1(esmUserReferrer.getId());
-            esmTeamPolicyVO1.setTeamlevel("一级团队");
+            esmTeamPolicyVO1.setTeamlevel("一级会员");
             if (userList1 != null && userList1.size() > 0) {
                 userPolicyList1 = this.baseMapper.queryOrderCount(userList1, record.getStartdate(), record.getEnddate());
                 EsmTeamPolicyVO esmTeamPolicyVO1_t = this.baseMapper.queryOrderCountHz(userList1, record.getStartdate(),
@@ -376,7 +376,7 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
                 // 二级团队信息
                 userList2 = this.baseMapper.getIdDown_2(esmUserReferrer.getId());
 
-                esmTeamPolicyVO2.setTeamlevel("二级团队");
+                esmTeamPolicyVO2.setTeamlevel("二级会员");
                 if (userList2 != null && userList2.size() > 0) {
                     userPolicyList2 = this.baseMapper.queryOrderCount(userList2, record.getStartdate(), record.getEnddate());
                     EsmTeamPolicyVO esmTeamPolicyVO2_t = this.baseMapper.queryOrderCountHz(userList2, record.getStartdate(),
@@ -391,7 +391,7 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
                     if(userList3!=null && userList3.size()>0){
                         userPolicyList3=this.baseMapper.queryOrderCount(userList3,record.getStartdate(), record.getEnddate());
                         EsmTeamPolicyVO esmTeamPolicyVO3_t=this.baseMapper.queryOrderCountHz(userList3,record.getStartdate(), record.getEnddate());
-                        esmTeamPolicyVO3.setTeamlevel("三级团队");
+                        esmTeamPolicyVO3.setTeamlevel("三级会员");
                         esmTeamPolicyVO3.setTeamnum(userList3.size());
                         if (esmTeamPolicyVO2_t != null) {
                             esmTeamPolicyVO3.setSumpremium(esmTeamPolicyVO3_t.getSumpremium());
@@ -406,7 +406,7 @@ public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMappe
             //临时团队
             List<String> registList = this.baseMapper.getIdDown3_regist(record.getId());
             EsmTeamPolicyVO esmTeamPolicyVO9 = new EsmTeamPolicyVO();
-            esmTeamPolicyVO9.setTeamlevel("临时团队");
+            esmTeamPolicyVO9.setTeamlevel("临时会员");
             esmTeamPolicyVO9.setTeamnum(registList == null ? 0 : registList.size());
 
             //汇总

+ 2 - 2
src/main/java/com/ydtech/modules/fnc/service/impl/InsPlyIncomeServiceImpl.java

@@ -1376,8 +1376,6 @@ public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, Ins
             insPlyIncome.setOtherFeevalue(this.calculateTotal(insPlyIncome.getJqOtherCostsPremium(), insPlyIncome.getSyOtherCostsPremium(), insPlyIncome.getNoOtherCostsPremium()));  //跟单费金额
             insPlyIncome.setOtherFeerate(this.calculateTotal(jqOtherCostsProportion, syOtherCostsProportion, noOtherCostsProportion));
             //跟单费比例
-            insPlyIncome.setAllFeeValue(this.calculateTotal(insPlyIncome.getCommissionFeevalue(), insPlyIncome.getOtherFeevalue(), null)); // 总费用 =  手续费+跟单费
-            insPlyIncome.setReceivableAmount(this.calculateTotal(insPlyIncome.getCommissionFeevalue(), insPlyIncome.getOtherFeevalue(), null));
             //应收比例 交强应收比例=交强手续费比例+交强非跟单比例
             insPlyIncome.setJqReceivableProportion(this.calculateTotal(jqSuperviseCostsProportion, jqOtherCostsProportion, null)); //交强应收
             insPlyIncome.setSyReceivableProportion(this.calculateTotal(sySuperviseCostsProportion, syOtherCostsProportion, null)); //商业应收
@@ -1388,6 +1386,8 @@ public class InsPlyIncomeServiceImpl extends ServiceImpl<InsPlyIncomeMapper, Ins
             if(insPlyIncomeVo.getPtOtherFeevalue()!=null  &&  insPlyIncomeVo.getPtOtherFeevalue().compareTo(BigDecimal.ZERO) >0){
                 insPlyIncome.setOtherFeevalue(insPlyIncomeVo.getPtOtherFeevalue());
             }
+            insPlyIncome.setAllFeeValue(this.calculateTotal(insPlyIncome.getCommissionFeevalue(), insPlyIncome.getOtherFeevalue(), null)); // 总费用 =  手续费+跟单费
+            insPlyIncome.setReceivableAmount(this.calculateTotal(insPlyIncome.getCommissionFeevalue(), insPlyIncome.getOtherFeevalue(), null));
         } else {
             String agreementId = insPlyIncomeVo.getAgreementId();
 

+ 5 - 0
src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyMapper.java

@@ -228,6 +228,11 @@ public interface InsAreaCompanyMapper extends BaseMapper<InsAreaCompany> {
      **/
     IPage<TaskStatisticsDto> totalQuotation( @Param("page") Page page,@Param("vo") TaskStatisticsVo taskStatisticsVo);
 
+    IPage<TaskStatisticsDto> getBusinessData( @Param("page") Page page,@Param("vo")  TaskStatisticsVo taskStatisticsVo);
+
+    TaskStatisticsDto getDistribution(@Param("vo")  TaskStatisticsVo taskStatisticsVo);
+
+
 }
 
 

+ 2 - 2
src/main/java/com/ydtech/modules/order/dao/InsOrdersMapper.java

@@ -56,14 +56,14 @@ public interface InsOrdersMapper extends BaseMapper<InsOrders> {
      *  @Date: 2024/4/17 18:01
      *  @Description:  通过用户id查询订单、渠道、代理人、保险公司
      */
-    Page<InsOrders> queryPageOrderByLinkType(@Param("page") Page<InsOrders> page,@Param("orderQueryVo") OrderQueryVo orderQueryVo, @Param("agentUserIds") List<String> agentUserIds,  @Param("agreeIds") List<String> agreeIds,@Param("deptIds") List<String> deptIds,@Param("flag") Boolean flag);
+    Page<InsOrders> queryPageOrderByLinkType(@Param("page") Page<InsOrders> page,@Param("orderQueryVo") OrderQueryVo orderQueryVo, @Param("agentUserIds") List<String> agentUserIds,  @Param("agreeIds") List<String> agreeIds,@Param("deptIds") List<String> deptIds,@Param("flag") Boolean flag,@Param("type") int type);
     /**
      *  @version
      *  @author: hxl
      *  @Date: 2024/4/17 18:36
      *  @Description: 通过用户id查询订单、渠道、代理人、保险公司条数
      */
-    Long queryPageOrderByLinkTypeCount(@Param("orderQueryVo") OrderQueryVo orderQueryVo, @Param("agentUserIds")  List<String> agentUserIds, @Param("agreeIds")  List<String> agreeIds,@Param("deptIds") List<String> deptIds,@Param("flag") Boolean flag);
+    Long queryPageOrderByLinkTypeCount(@Param("orderQueryVo") OrderQueryVo orderQueryVo, @Param("agentUserIds")  List<String> agentUserIds, @Param("agreeIds")  List<String> agreeIds,@Param("deptIds") List<String> deptIds,@Param("flag") Boolean flag,@Param("type") int type);
     /**
      *  @version
      *  @author: hxl

+ 2 - 5
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -23,7 +23,6 @@ import com.ydtech.exception.SystemException;
 import com.ydtech.modules.admin.constants.RoleConstants;
 import com.ydtech.modules.admin.dao.SysUserLinkAreaMapper;
 import com.ydtech.modules.admin.dao.SysUserLinkPtlAgreementMapper;
-import com.ydtech.modules.admin.dao.SysUserMapper;
 import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.dto.SysUserLinkPtlAgreementDto;
 import com.ydtech.modules.admin.model.po.SysUserIsDial;
@@ -34,7 +33,6 @@ import com.ydtech.modules.esm.service.EsmUserReferrerService;
 import com.ydtech.modules.fee.service.CostsCalcService;
 import com.ydtech.modules.fee.service.impl.FeeRuleSchemeServiceImpl;
 import com.ydtech.modules.fnc.entity.InsFeeAudit;
-import com.ydtech.modules.fnc.service.InsFeeAuditHistoryService;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
 import com.ydtech.modules.ins.dao.InsFileMapper;
 import com.ydtech.modules.ins.model.InsOrdersExcel;
@@ -86,7 +84,6 @@ import org.springframework.util.ObjectUtils;
 import javax.validation.constraints.NotBlank;
 import java.io.File;
 import java.math.BigDecimal;
-import java.time.Instant;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
@@ -1002,8 +999,8 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         Page<InsOrders> orderVoPage = new Page<>();
         //注释逻辑给前台返回数据
         if ((agentUserIds != null && !agentUserIds.isEmpty()) || (agreeIds != null && !agreeIds.isEmpty())) {
-            orderVoPage = baseMapper.queryPageOrderByLinkType(page, orderQueryVo, agentUserIds, agreeIds, deptIds, flag);
-            total = baseMapper.queryPageOrderByLinkTypeCount(orderQueryVo, agentUserIds, agreeIds, deptIds, flag);
+            orderVoPage = baseMapper.queryPageOrderByLinkType(page, orderQueryVo, agentUserIds, agreeIds, deptIds, flag,type);
+            total = baseMapper.queryPageOrderByLinkTypeCount(orderQueryVo, agentUserIds, agreeIds, deptIds, flag,type);
         }
         orderVoPage.setTotal(total);
         return new BasePageResult<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize(), orderVoPage.getTotal(),

+ 63 - 27
src/main/java/com/ydtech/modules/order/service/impl/PingAnOrderApiServiceImpl.java

@@ -48,6 +48,7 @@ import com.ydtech.modules.order.entity.vo.pingan.StorefrontQueryVo;
 import com.ydtech.modules.order.service.*;
 import com.ydtech.modules.order.utils.MD5Util;
 import com.ydtech.modules.order.utils.PingAnUpLoadUtils;
+import com.ydtech.modules.order.utils.QrCodeGenerator;
 import com.ydtech.modules.order.utils.pingan.PingAnQuoteRequestAnnotationParser;
 import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
 import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
@@ -55,6 +56,8 @@ import com.ydtech.utils.CalculateUtils;
 import com.ydtech.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.collections4.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
@@ -64,7 +67,6 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
-
 /**
  *  @version  平安接口相关api
  *  @author: hxl
@@ -75,6 +77,9 @@ import java.util.*;
 @RequiredArgsConstructor
 public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
 
+
+    public static final Logger logger = LoggerFactory.getLogger(PingAnOrderApiServiceImpl.class);
+
     private final PinganRequestApiComponents pinganRequestApiComponents;
 
     private final PtlAgreementAttributionService ptlAgreementAttributionService;
@@ -102,6 +107,10 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
     private String EXCEL_PATH = "excel//";
 
     private String UPLOAD_PATH = "/upload//excel//";
+
+
+    private final QrCodeGenerator  qrCodeGenerator;
+
     /**
      * @Description 获取财意险险种套餐列表  调用 4.4
      * @Author hxl
@@ -234,7 +243,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
             // 此处返回的  flowid  4.1.续保确认  4.2.车辆信息确认  001 平安车型搜索接口  需要使用
             String flowid = indexResponse.getFlowid();
 
-           // carInfo.setModelcname("欧雅OCTAVIA 2.0L轿车");
+            // carInfo.setModelcname("欧雅OCTAVIA 2.0L轿车");
 
             // 2. 车型查询
             SearchPAVehicleListRequest searchPAVehicleListRequest = new SearchPAVehicleListRequest(parameters.getUserId(), flowid,
@@ -272,7 +281,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                     }
                 }
                 if(models.size()>1){
-                    throw new SystemException("请确认车型,检索出多个下车型,请填写正确信息");
+                    model = models.get(0);
                 }else if(models.size()==0){
                     throw new SystemException("未匹配到车型");
                 }else if(models.size()==1){
@@ -692,7 +701,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                     list.add(forceApplyNo);
                 }
                 if (StringUtils.isNotBlank(accidentApplyNo)) {
-                   // list.add(accidentApplyNo);
+                    // list.add(accidentApplyNo);
                 }
                 pinganApiLog.setId(null);
                 DocumentStatusListRequest documentStatusListRequest = new DocumentStatusListRequest(list, parameters);
@@ -708,6 +717,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                         Boolean jqflag = false;
                         Boolean sqflag = false;
                         Boolean fcflag = false;
+                        String jyPlicyNo=null;
                         //B2 为 未缴费
                         for (DocumentStatusListResponse.DocumentDTO dto : documentList) {
                             if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(bizApplyNo) && bizApplyNo.equals(dto.getApplyNo()==null?"":dto.getApplyNo())) {
@@ -716,7 +726,18 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                             if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(forceApplyNo) && forceApplyNo.equals(dto.getApplyNo()==null?"":dto.getApplyNo())) {
                                 jqflag = true;
                             }
-                            if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(accidentApplyNo) && accidentApplyNo.equals(dto.getApplyNo()==null?"":dto.getApplyNo())) {
+                            List<DocumentStatusListResponse.DocumentDTO.UnAutoListInfoDTO> unAutoListInfo = dto.getUnAutoListInfo();
+                            String applyNo=null;
+                            String policyNo=null;
+                            if(unAutoListInfo!=null && unAutoListInfo.size()>0){
+                                applyNo = unAutoListInfo.get(0).getApplyNo();
+                                policyNo = unAutoListInfo.get(0).getPolicyNo();
+                            }
+                            if (StringUtils.isNotBlank(accidentApplyNo) && accidentApplyNo.equals(applyNo == null ? "" : applyNo)) {
+                                fcflag = true;
+                                jyPlicyNo=policyNo;
+                            }
+                            if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(policyNo)) {
                                 fcflag = true;
                             }
                         }
@@ -801,7 +822,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
             if(jqbzURL.exists()){
                 crawlerPolicyPrintVo.setJqxFlagUrl(jqbzUrl_);
             }
-            if(!jqbdURL.exists() && !jqbzURL.exists() ){
+            if(!jqbdURL.exists() || !jqbzURL.exists() ){
                 getPdfUrl(parameters, jqpolicyno,ownerInfo,carInfoVo, pinganApiLog, insAreaCompany, crawlerPolicyPrintVo,1);
             }
         }
@@ -849,7 +870,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
         String fileBZName="";
         //驾意险
         if(type==3){
-           // flag="true";
+             flag="true";
             fileName="_非车险保单";
         }else if(type==1){
             //交强
@@ -1261,8 +1282,8 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
             PingAnConfigureParameters parameters = configureParametersComponents.toEntity(PingAnConfigureParameters.class,
                     ptlAgreementAttribution);
             ArrayList<String>  list =new ArrayList<>();
-            String bizApplyNo = insAreaCompany.getJqapplyno();
-            String forceApplyNo =insAreaCompany.getSyapplyno();
+            String forceApplyNo = insAreaCompany.getJqapplyno();
+            String  bizApplyNo=insAreaCompany.getSyapplyno();
             JSONArray crossInsurance = insAreaCompany.getCrossInsurance();
             //非车投保单号
             String accidentApplyNo = null;
@@ -1276,8 +1297,9 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                 list.add(forceApplyNo);
             }
             if (StringUtils.isNotBlank(accidentApplyNo)) {
-               // list.add(accidentApplyNo);
+                //  list.add(accidentApplyNo);
             }
+
             pinganApiLog.setId(null);
             DocumentStatusListRequest documentStatusListRequest = new DocumentStatusListRequest(list, parameters);
             DocumentStatusListResponse documentStatusListResponse = null;
@@ -1289,7 +1311,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
             if (documentStatusListResponse != null && "0".equals(documentStatusListResponse.getResultCode())) {
                 ArrayList<DocumentStatusListResponse.DocumentDTO> documentList = documentStatusListResponse.getDocumentList();
                 Boolean jqflag = false;
-                Boolean sqflag = false;
+                Boolean syflag = false;
                 Boolean fcflag = false;
                 String status="";
                 String jqPlicyNo=null;
@@ -1299,17 +1321,24 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                     //B2 为 未缴费
                     for (DocumentStatusListResponse.DocumentDTO dto : documentList) {
                         status =dto.getStatus();
-                        if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(bizApplyNo) && bizApplyNo.equals(dto.getApplyNo() == null ? "" : dto.getApplyNo())) {
-                            jqPlicyNo=dto.getPolicyNo();
-                            sqflag = true;
+                        if (StringUtils.isNotBlank(bizApplyNo) && bizApplyNo.equals(dto.getApplyNo() == null ? "" : dto.getApplyNo())) {
+                            syPlicyNo=dto.getPolicyNo();
+                            syflag = true;
                         }
-                        if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(forceApplyNo) && forceApplyNo.equals(dto.getApplyNo() == null ? "" : dto.getApplyNo())) {
+                        if (StringUtils.isNotBlank(forceApplyNo) && forceApplyNo.equals(dto.getApplyNo() == null ? "" : dto.getApplyNo())) {
                             jqflag = true;
-                            syPlicyNo=dto.getPolicyNo();
+                            jqPlicyNo=dto.getPolicyNo();
+                        }
+                        List<DocumentStatusListResponse.DocumentDTO.UnAutoListInfoDTO> unAutoListInfo = dto.getUnAutoListInfo();
+                        String applyNo=null;
+                        String policyNo=null;
+                        if(unAutoListInfo!=null && unAutoListInfo.size()>0){
+                            applyNo = unAutoListInfo.get(0).getApplyNo();
+                            policyNo = unAutoListInfo.get(0).getPolicyNo();
                         }
-                        if (OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(dto.getStatus()) && StringUtils.isNotBlank(accidentApplyNo) && accidentApplyNo.equals(dto.getApplyNo() == null ? "" : dto.getApplyNo())) {
+                        if (StringUtils.isNotBlank(accidentApplyNo) && accidentApplyNo.equals(applyNo == null ? "" : applyNo)) {
                             fcflag = true;
-                            jyPlicyNo=dto.getPolicyNo();
+                            jyPlicyNo=policyNo;
                         }
                     }
                 }
@@ -1317,7 +1346,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                     insAreaCompany.setJqapplyno(forceApplyNo);
                     insAreaCompany.setJqpolicyno(jqPlicyNo);
                 }
-                if (sqflag) {
+                if (syflag) {
                     insAreaCompany.setSyapplyno(bizApplyNo);
                     insAreaCompany.setSypolicyno(syPlicyNo);
                 }
@@ -1331,14 +1360,17 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                     JSONArray objects = JSON.parseArray(JSON.toJSONString(jyList));
                     insAreaCompany.setCrossInsurance(objects);
                 }
-                if(InsOrderStatusEnum.WAIT_PAY.getCode().equals(status) && ("0".equals(insAreaCompany.getOrderstatus()) || "1".equals(insAreaCompany.getOrderstatus()) )){
+                logger.info(documentStatusListResponse.toString()+"调用状态查询接口");
+                if(OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(status) && ("0".equals(insAreaCompany.getOrderstatus()) || "1".equals(insAreaCompany.getOrderstatus()) )){
                     //说明核保成功,更新大订单和小订单的状态为1  更新为已核保待缴费
                     insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode() );
                     insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
-                }else if(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode().equals(status) && ("0".equals(insAreaCompany.getOrderstatus()) || "1".equals(insAreaCompany.getOrderstatus()) || "2".equals(insAreaCompany.getOrderstatus()))) {
+                }else if(OrderStatusCodeEnum.ORDER_STATUS_CODE_B5.getCode().equals(status) && ("0".equals(insAreaCompany.getOrderstatus()) || "1".equals(insAreaCompany.getOrderstatus()) || "2".equals(insAreaCompany.getOrderstatus()))) {
                     //承保
                     insAreaCompany.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
+                    insAreaCompany.setPayDate(LocalDateTime.now());
                     insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+                    logger.info(insAreaCompany.toString()+"更新为承保状态!!!");
                 }
             }
             return HttpResult.ok(documentStatusListResponse);
@@ -1369,7 +1401,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
             list.add(forceApplyNo);
         }
         if (StringUtils.isNotBlank(accidentApplyNo)) {
-           // list.add(accidentApplyNo);
+            // list.add(accidentApplyNo);
         }
         return  list;
     }
@@ -1484,8 +1516,9 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
         } catch (Exception e) {
             throw new SystemException(e.getMessage());
         }
-        if (signEleApplyResponse != null && "0".equals(signEleApplyResponse.getResultCode())) {
-
+        if (signEleApplyResponse != null && StringUtils.isNotBlank(signEleApplyResponse.getResultMessage())) {
+            String qrCodeUrl = qrCodeGenerator.getQrCode(insAreaCompany.getOrderno(), insAreaCompany.getId(), signEleApplyResponse.getResultMessage(),uploadPath);
+            signEleApplyResponse.setResultMessage(qrCodeUrl);
         }
         return HttpResult.ok(signEleApplyResponse);
     }
@@ -1867,8 +1900,8 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
             PingAnConfigureParameters parameters = configureParametersComponents.toEntity(PingAnConfigureParameters.class,
                     ptlAgreementAttribution);
             ArrayList<String>  list =new ArrayList<>();
-            String bizApplyNo = insAreaCompany.getJqapplyno();
-            String forceApplyNo =insAreaCompany.getSyapplyno();
+            String forceApplyNo = insAreaCompany.getJqapplyno();
+            String  bizApplyNo=insAreaCompany.getSyapplyno();
             JSONArray crossInsurance = insAreaCompany.getCrossInsurance();
             //非车投保单号
             String accidentApplyNo = null;
@@ -1882,8 +1915,9 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                 list.add(forceApplyNo);
             }
             if (StringUtils.isNotBlank(accidentApplyNo)) {
-              //  list.add(accidentApplyNo);
+                //  list.add(accidentApplyNo);
             }
+
             pinganApiLog.setId(null);
             DocumentStatusListRequest documentStatusListRequest = new DocumentStatusListRequest(list, parameters);
             DocumentStatusListResponse documentStatusListResponse = null;
@@ -1944,6 +1978,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                     JSONArray objects = JSON.parseArray(JSON.toJSONString(jyList));
                     insAreaCompany.setCrossInsurance(objects);
                 }
+                logger.info(documentStatusListResponse.toString()+"调用状态查询接口");
                 if(OrderStatusCodeEnum.ORDER_STATUS_CODE_B2.getCode().equals(status) && ("0".equals(insAreaCompany.getOrderstatus()) || "1".equals(insAreaCompany.getOrderstatus()) )){
                     //说明核保成功,更新大订单和小订单的状态为1  更新为已核保待缴费
                     insAreaCompany.setOrderstatus(InsOrderStatusEnum.WAIT_PAY.getCode() );
@@ -1953,6 +1988,7 @@ public class PingAnOrderApiServiceImpl implements PingAnOrderApiService {
                     insAreaCompany.setOrderstatus(InsOrderStatusEnum.ACCEPT_INSURANCE.getCode());
                     insAreaCompany.setPayDate(LocalDateTime.now());
                     insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+                    logger.info(insAreaCompany.toString()+"更新为承保状态!!!");
                 }
             }
             return HttpResult.ok("支付成功");

+ 205 - 0
src/main/java/com/ydtech/modules/order/utils/QrCodeGenerator.java

@@ -0,0 +1,205 @@
+package com.ydtech.modules.order.utils;
+
+
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.google.zxing.*;
+import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
+import com.google.zxing.client.j2se.MatrixToImageConfig;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.HybridBinarizer;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+import com.ydtech.exception.SystemException;
+import org.springframework.stereotype.Component;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.Hashtable;
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/8/13 17:34
+ *  @Description:  生成二维码的工具类型
+ */
+@Component
+public class QrCodeGenerator {
+
+
+    private static final String DEFAULT_CHAR_SET = "UTF-8";
+
+    private static final String DEFAULT_FORMAT_NAME = "JPG";
+
+
+    private static String EXCEL_PATH = "excel//";
+
+    private static String UPLOAD_PATH = "/upload//excel//";
+
+
+
+    // 二维码宽度
+    private static final int DEFAULT_QR_CODE_WIDTH = 300;
+    // 二维码高度
+    private static final int DEFAULT_QR_CODE_HEIGHT = 300;
+
+
+    /**
+     * 创建BitMatrix比特矩阵
+     * @Date 2023/09/24 22:29
+     * @Param contents 二维码里的内容
+     * @Param width 二维码宽度
+     * @param height 二维码高度
+     * @return com.google.zxing.common.BitMatrix
+     */
+    public static  BitMatrix createBitMatrix(String contents , int width , int height) throws WriterException, IOException {
+        if (ObjectUtil.isNull(width)) {
+            width = DEFAULT_QR_CODE_WIDTH;
+        }
+        if (ObjectUtil.isNull(height)) {
+            height = DEFAULT_QR_CODE_HEIGHT;
+        }
+
+        Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
+        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 纠错等级L,M,Q,H
+        hints.put(EncodeHintType.CHARACTER_SET, DEFAULT_CHAR_SET);// 编码utf-8
+        hints.put(EncodeHintType.MARGIN, 1);  // 边距
+
+        // 创建比特矩阵
+        BitMatrix bitMatrix = new MultiFormatWriter().encode(contents,
+                BarcodeFormat.QR_CODE, width, height, hints);
+        return bitMatrix;
+
+    }
+
+    /**
+     * 创建二维码,返回字节数组
+     * @Date 2023/09/24 22:30
+     * @Param contents 二维码里的内容
+     * @Param imageFormat 图片后缀名
+     * @Param width 二维码宽度
+     * @param height 二维码高度
+     * @return byte[]
+     */
+    public static byte[] createQrCode(String contents , String imageFormat , int width , int height) throws WriterException, IOException {
+        if (StrUtil.isBlank(imageFormat)){
+            imageFormat = DEFAULT_FORMAT_NAME;
+        }
+        BitMatrix bitMatrix = createBitMatrix(contents , width, height);
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        MatrixToImageWriter.writeToStream(bitMatrix, imageFormat, os);
+        return os.toByteArray();
+    }
+
+    /**
+     * 创建二维码,返回base64字符串
+     * @Date 2023/09/24 22:30
+     * @Param contents 二维码里的内容
+     * @Param imageFormat 图片后缀名
+     * @Param width 二维码宽度
+     * @param height 二维码高度
+     * @return byte[]
+     */
+    public static String createQrCodeBase64(String contents , String imageFormat , int width , int height) throws WriterException, IOException {
+        byte[] bytes =createQrCode(contents , imageFormat , width, height);
+        return Base64.encode(bytes);
+    }
+
+    /**
+     * 解码二维码
+     * @Date 2023/09/24 22:32
+     * @Param [image]
+     * @return java.lang.String
+     */
+    public static String decodeQrCode(BufferedImage image) throws Exception {
+        if (image == null) return StrUtil.EMPTY;
+        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(image);
+        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
+        Hashtable<DecodeHintType, Object> hints = new Hashtable<DecodeHintType, Object>();
+        hints.put(DecodeHintType.CHARACTER_SET, DEFAULT_CHAR_SET);
+        Result result = new MultiFormatReader().decode(bitmap, hints);
+        return result.getText();
+    }
+
+    /**
+     * 转换为BufferedImage
+     * @Date 2023/09/24 22:32
+     * @Param [bitMatrix]
+     * @return java.awt.image.BufferedImage
+     */
+    public static BufferedImage toBufferedImage(BitMatrix bitMatrix) throws IOException, WriterException {
+        MatrixToImageConfig matrixToImageConfig = new MatrixToImageConfig(0xFF000001, 0xFFFFFFFF);
+        BufferedImage bufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix, matrixToImageConfig);
+        return bufferedImage;
+    }
+
+    /**
+     * 给二维码添加logo
+     * @Date 2023/09/24 22:33
+     * @Param [bufferedImage, logoFile]
+     * @return java.awt.image.BufferedImage
+     */
+    public static BufferedImage addQrCodeLogo(BufferedImage bufferedImage, File logoFile) throws IOException {
+        Graphics2D graphics = bufferedImage.createGraphics();
+        int matrixWidth = bufferedImage.getWidth();
+        int matrixHeigh = bufferedImage.getHeight();
+
+        // 读取logo图片文件
+        BufferedImage logo = ImageIO.read(logoFile);
+        int logoWidth = logo.getWidth();
+        int logoHeight = logo.getHeight();
+
+        //  计算logo放置位置
+        int x = bufferedImage.getWidth()  / 5*2;
+        int y = bufferedImage.getHeight() / 5*2;
+        int width = matrixWidth / 5;
+        int height = matrixHeigh / 5;
+
+        // 开始绘制图片
+        graphics.drawImage(logo, x, y, width, height, null);
+        graphics.drawRoundRect(x, y, logoWidth, logoHeight, 15, 15);
+        graphics.setStroke(new BasicStroke(5.0F, 1, 1));
+        graphics.setColor(Color.white);
+        graphics.drawRect(x, y, logoWidth, logoHeight);
+
+        graphics.dispose();
+        bufferedImage.flush();
+        return bufferedImage;
+    }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/8/13 17:55
+     *  @Description: 返回二维码图片路径
+     */
+    public static String getQrCode(String orderNo,String subOrderNo,String url,String uploadPath)  {
+        BufferedImage bufferedImage =null;
+        String fileName = orderNo+"_"+subOrderNo+"_rwm.jpg";
+        String saveFilePath = uploadPath+"//" + EXCEL_PATH +fileName;
+        String resultPath = UPLOAD_PATH + fileName;
+        try{
+            bufferedImage = toBufferedImage(createBitMatrix(url, 300, 300));
+            ImageIO.write(bufferedImage, "png", new File(saveFilePath));
+        }catch(Exception e){
+          throw new SystemException("转为二维码报错,请重试!!");
+        }
+        return resultPath;
+    }
+
+
+
+    public static void main(String[] args) throws Exception {
+        BufferedImage bufferedImage = toBufferedImage(createBitMatrix("https://dmzstg3-imcs.pingan.com.cn/icore_imcs/auto/new/signEleApply?systemId=PA18_SHOP_MOBILE&params=73C9FEF53D064CF255F2CFDBABFACBA12E9D3C96E1047521652744B5EE5C28B352E38F8E938306220557058195C79E89AF73E3E40CE0DA9650036E08E9AB9F3DD151419E90A464BA45B44645DA6B57C0B998A8B06B5F3018E98C0CD52B2B6A5F40DF7E609F4348BC766F3B9B9D5DAF6CA9C7F80B5FCA66CDD007106A15132525CE522993CB02665803073E9C76E7EE6CE595FFF003E071C12CA95F370A48B38679E5789C27D8EC408213D30D0D0F3EC64BB9ADFA486B87D26425D94CA24DF0A50E7D3B676821216B719AFD7DE2577CCDC55CDD515666C920DB9766DF5904FFB481231936893547E8921170245E7B2C7D34CFA95007A70DC175E947135E97A0411C25C7F7441BB0E91D070194868D47F5F76BAEE7BBCE6067A3C32A44D0EC6ED4C145A10AA04C07860A972E7641FA28CF&signData=da41c267ce742cd668f95401121daca2d53dc50f0b5339754d5b9ff75bc308c5", 300, 300));
+        ImageIO.write(bufferedImage, "png", new File("D:/qrcode.jpg"));
+
+     //   System.out.println(decodeQrCode(bufferedImage));
+
+      //  BufferedImage logoQrCode = addQrCodeLogo(bufferedImage, new File("D://logo.png"));
+       // ImageIO.write(logoQrCode, "png", new File("D:/logoQrcode.jpg"));
+    }
+
+}

+ 28 - 6
src/main/java/com/ydtech/modules/order/utils/pingan/PingAnQuoteRequestAnnotationParser.java

@@ -49,18 +49,40 @@ public class PingAnQuoteRequestAnnotationParser {
                         String nycflag = annotation.flag();
                         KindInfoVo kindInfoVo_A = map.get("A");
                         KindInfoVo kindInfoVo = map.get(key);
-                        if (nycflag.contains(flag) && kindInfoVo_A!=null) {
-                            if ((InsurKind.A.getCode() + "_YN").equals(key)) {
-                                field.set(quoteRequest, kindInfoVo_A.getAmount() == 0 ? "0" : amount01Default);
+                        if (nycflag.contains(flag)) {
+                            if ((InsurKind.A.getCode() + "_YN").equals(key) ) {
+                                if(kindInfoVo_A!=null){
+                                    //设置车损险的默认值
+                                    field.set(quoteRequest, kindInfoVo_A.getAmount() == 0 ? "0" : amount01Default);
+                                }
                             } else {
-                                if (InsurKind.A.getCode().equals(key) || (InsurKind.A.getCode() + "_YN").equals(key)) {
+                                if (InsurKind.A.getCode().equals(key)) {
                                     field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getAmount()));
                                 } else {
                                     if (InsurKind.MJ1.getCode().equals(key) || InsurKind.MJ2.getCode().equals(key) || InsurKind.MJ3.getCode().equals(key) || InsurKind.MJ4.getCode().equals(key)) {
                                         field.set(quoteRequest, kindInfoVo == null ? "0" : "0".equals(kindInfoVo.getDeductibleRate()) ? "0" : kindInfoVo.getDeductibleRate().replace("%", ""));
                                     } else {
-                                        //设置商业险的amout字段
-                                        field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getAmount()));
+                                        // YN 是否
+                                        if(key.contains("_YN")){
+                                            String keys = key.replaceAll("_YN", "");
+                                            kindInfoVo = map.get(keys);
+                                            if(keys.equals("SY_FJ_YBW2") || keys.equals("D4")){
+                                                //SY_FJ_YBW2、D4是从unitAmount中获取的值
+                                                field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getUnitAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getUnitAmount()));
+                                            }else{
+                                                field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getAmount() == 0 ? "0" : "1");
+                                            }
+
+                                        }else{
+                                            if(key.equals("SY_FJ_YBW2") || key.equals("D4")){
+                                                //设置商业险的amout字段
+                                                field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getUnitAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getUnitAmount()));
+                                            }else{
+                                                //设置商业险的amout字段
+                                                field.set(quoteRequest, kindInfoVo == null ? "0" : kindInfoVo.getAmount() == 0 ? "0" : String.format("%.0f", kindInfoVo.getAmount()));
+                                            }
+
+                                        }
                                     }
                                 }
                             }

+ 39 - 21
src/main/resources/mapper/modules/admin/SysUserLinkAreaMapper.xml

@@ -71,32 +71,50 @@
 
     <select id="findAreaIdsByAgentUserId"  resultType="String">
         SELECT
-            su.id
+         DISTINCT id
         FROM
-            sys_user su
-                LEFT JOIN sys_user_info info ON info.id = su.id
-                LEFT JOIN sys_dept sd ON su.dept_id = sd.id
-                LEFT JOIN sys_user_role t3 ON su.id = t3.user_id
-                AND sd.del_flag = '0'
+        (
+        SELECT
+        su.id,
+        CASE
+        WHEN LENGTH( su.dept_id )> 9 THEN
+        SUBSTRING( su.dept_id, 3, 6 )+ ''
+        WHEN LENGTH( su.dept_id )> 7 THEN
+        SUBSTRING( su.dept_id, 3, 4 )+ ''
+        WHEN LENGTH( su.dept_id )> 5 THEN
+        SUBSTRING( su.dept_id, 3, 2 )+ '' ELSE '00'
+        END AS dept_id
+        FROM
+        sys_user su
+        LEFT JOIN sys_dept sd ON su.dept_id = sd.id
+        AND sd.del_flag = '0'
         WHERE
-           sd.management_source = 2
-            <if test="areaCodes != null and areaCodes.size>0" >
-                AND (
-                <foreach collection="areaCodes" item="item" open=" (" separator="or" close=") ">
-                    instr( su.dept_id, TRIM( TRAILING '0' FROM #{item} ))>0
-                </foreach>
-                )
-            </if>
+        sd.management_source = 2
+        ) b
+       <where>
+           <if test="areaCodes != null and areaCodes.size>0" >
+               AND (
+               <foreach collection="areaCodes" item="item" open=" (" separator="or" close=") ">
+                   b.dept_id LIKE  CONCAT(#{item}, '%')
+               </foreach>
+               )
+           </if>
+       </where>
     </select>
 
     <select id="findAreaCodeByUserId"  resultType="String">
-        SELECT
-            DISTINCT link.area_code
+        SELECT DISTINCT
+            b.area_code
         FROM
-            sys_user_link_area link
-        WHERE
-            link.user_id = #{userId}
-        ORDER BY
-            link.area_code
+            (
+                SELECT
+                    ( TRIM( TRAILING '0' FROM link.area_code ) ) AS area_code
+                FROM
+                    sys_user_link_area link
+                WHERE
+                    link.user_id = #{userId}
+                ORDER BY
+                    link.area_code
+            ) b
     </select>
 </mapper>

+ 3 - 0
src/main/resources/mapper/modules/esm/EsmUserReferrerMapper.xml

@@ -354,6 +354,9 @@
             <if test="vo.houseId != null and vo.houseId != ''">
                 and sd.id like concat('%',#{vo.houseId},'%')
             </if>
+            <if test="vo.deptId != null and vo.deptId != ''">
+                and sd.id like concat('%',#{vo.deptId},'%')
+            </if>
         </where>
     </select>
 </mapper>

+ 131 - 1
src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

@@ -860,6 +860,8 @@
             ins_area_company iac
                 LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
                 LEFT JOIN esm_ins_company ins ON agree.partner_companies_id = ins.id
+                LEFT JOIN ins_orders io on iac.orderno = io.orderno
+                LEFT JOIN sys_dept sd on sd.id = io.deptid
         WHERE
             agree.id IS NOT NULL
             <if test="vo.companyId  != null  and  vo.companyId!='' ">
@@ -871,6 +873,9 @@
             <if test="vo.beginDate  != null  and  vo.beginDate!=''  and vo.endDate  != null  and  vo.endDate!=''">
                 AND  iac.createtime  BETWEEN #{vo.beginDate} AND #{vo.endDate}
             </if>
+            <if test="vo.managementSource  != null  and  vo.managementSource!=''">
+                AND  sd.management_source  =#{vo.managementSource}
+            </if>
         GROUP BY
             agree.insurance_company_id,
             agree.insurance_company,
@@ -1186,7 +1191,7 @@
         agree.insurance_company_id AS companyId,
         agree.insurance_company AS companyName,
         agree.partner_companies_id AS parterCompanyId,
-        ins.NAME AS parterCompanyName,
+        ins.namesimple AS parterCompanyName,
         count(iac.orderstatus) AS orderNumber,
         '-' as bigQutationCount,
         '-' as bigUnderwritingCount,
@@ -1233,4 +1238,129 @@
         ins.NAME
     </select>
 
+    <select id="getBusinessData" resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
+
+        select
+            a.companyId as "companyId",
+            a.insuranceCompanyName as "insuranceCompanyName",
+            a.parterCompanyId as "parterCompanyId",
+            a.partnerCompaniesName as "partnerCompaniesName",
+            a.totalPremium as "totalPremium",
+            a.qutationInsureCount as "qutationInsureCount",
+            a.averagePremium as "averagePremium",
+            a.userNumber as "userNumber",
+            a.perCapitaAmount as "perCapitaAmount",
+            b.logo  as "logo"
+        from  (
+        SELECT
+        agree.insurance_company_id AS "companyId",
+        agree.insurance_company AS "insuranceCompanyName",
+        agree.partner_companies_id AS "parterCompanyId",
+        ins.namesimple AS "partnerCompaniesName",
+        sum(iac.sumpremium) as "totalPremium",
+        COUNT(0 ) AS "qutationInsureCount",
+        sum(iac.sumpremium) / COUNT(0 )  AS "averagePremium",
+        COUNT(DISTINCT io.userId) AS "userNumber",
+        sum(iac.sumpremium) / COUNT(DISTINCT io.userId)  as "perCapitaAmount"
+        FROM
+        ins_area_company iac
+        LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
+        LEFT JOIN ins_orders  io  on  io.orderno  = iac.orderno
+        LEFT JOIN esm_ins_company ins ON agree.partner_companies_id = ins.id
+        WHERE
+        agree.id IS NOT NULL
+        and  iac.orderstatus = '3'
+        <if test="vo.companyId  != null  and  vo.companyId!='' ">
+            and  agree.insurance_company_id = #{vo.companyId}
+        </if>
+        <if test="vo.parterCompanyId  != null  and  vo.parterCompanyId!='' ">
+            and agree.partner_companies_id = #{vo.parterCompanyId}
+        </if>
+        <if test="vo.createtimeStart  != null  and  vo.createtimeStart!=''  and vo.createtimeEnd  != null  and  vo.createtimeEnd!=''">
+            AND iac.signing_time BETWEEN #{vo.createtimeStart} AND #{vo.createtimeStart}
+        </if>
+        <if test="vo.provinceId != null and vo.provinceId != ''">
+            and io.deptid like "${vo.provinceId}%"
+        </if>
+        <if test="vo.cityId != null and vo.cityId != ''">
+            and io.deptid like "${vo.cityId}%"
+        </if>
+        <if test="vo.countyId != null and vo.countyId != ''">
+            and io.deptid like "${vo.countyId}%"
+        </if>
+        <if test="vo.houseId != null and vo.houseId != ''">
+            and io.deptid like "${vo.houseId}%"
+        </if>
+        GROUP BY
+        agree.insurance_company_id,
+        agree.insurance_company,
+        agree.partner_companies_id
+        <choose>
+            <when test="vo.orderSort != null and vo.orderSort != '' and  vo.userNumberSort == null ">
+                order by
+                sum(sumpremium) ${vo.orderSort == 'asc' ? 'asc' : 'desc'}
+            </when>
+            <when test="vo.userNumberSort != null and vo.userNumberSort != '' and  vo.orderSort == null ">
+                order by
+                COUNT(DISTINCT io.userId) ${vo.userNumberSort == 'asc' ? 'asc' : 'desc'}
+            </when>
+            <when test="vo.userNumberSort != null and vo.userNumberSort != '' and  vo.orderSort != null and vo.orderSort != ''  ">
+                order by
+                COUNT(DISTINCT io.userId) ${vo.userNumberSort == 'asc' ? 'asc' : 'desc'},   sum(sumpremium) ${vo.orderSort == 'asc' ? 'asc' : 'desc'}
+            </when>
+        </choose>
+        )  a
+        left join  esm_ins_company  b on b.id =a.companyId
+    </select>
+
+
+    <select id="getDistribution" resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
+        SELECT
+        agree.insurance_company_id AS "companyId",
+        agree.insurance_company AS "insuranceCompanyName",
+        agree.partner_companies_id AS "parterCompanyId",
+        ins.namesimple AS "partnerCompaniesName",
+        sum(sumpremium) as "totalPremium",
+        COUNT(0) AS "qutationInsureCount",
+        sum(sumpremium) /  COUNT(0) AS "averagePremium",
+        COUNT(DISTINCT io.userId) AS "userNumber",
+        sum(sumpremium) / COUNT(DISTINCT io.userId)  as "perCapitaAmount"
+        FROM
+        ins_area_company iac
+        LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
+        LEFT JOIN ins_orders  io  on  io.orderno  = iac.orderno
+        LEFT JOIN esm_ins_company ins ON agree.partner_companies_id = ins.id
+        WHERE
+        agree.id IS NOT NULL
+        <if test="vo.companyId  != null  and  vo.companyId!='' ">
+          and  agree.insurance_company_id = #{vo.companyId}
+        </if>
+        <if test="vo.parterCompanyId  != null  and  vo.parterCompanyId!='' ">
+            and agree.partner_companies_id = #{vo.parterCompanyId}
+        </if>
+        <if test="vo.createtimeStart  != null  and  vo.createtimeStart!=''  and vo.createtimeEnd  != null  and  vo.createtimeEnd!=''">
+            AND iac.signing_time BETWEEN #{vo.createtimeStart} AND #{vo.createtimeStart}
+        </if>
+        <if test="vo.provinceId != null and vo.provinceId != ''">
+            and io.deptid like "${vo.provinceId}%"
+        </if>
+        <if test="vo.cityId != null and vo.cityId != ''">
+            and io.deptid like "${vo.cityId}%"
+        </if>
+        <if test="vo.countyId != null and vo.countyId != ''">
+            and io.deptid like "${vo.countyId}%"
+        </if>
+        <if test="vo.houseId != null and vo.houseId != ''">
+            and io.deptid like "${vo.houseId}%"
+        </if>
+        <if test="vo.quotationStatus != null and vo.quotationStatus != ''">
+            and iac.orderstatus  =#{vo.quotationStatus}
+        </if>
+        GROUP BY
+        agree.insurance_company_id,
+        agree.insurance_company,
+        agree.partner_companies_id,
+        ins.namesimple
+    </select>
+
 </mapper>

+ 18 - 0
src/main/resources/mapper/modules/order/InsOrdersMapper.xml

@@ -1012,6 +1012,14 @@
                 OR ( DATE_FORMAT(iac.sy_start_date, '%Y-%m-%d')  BETWEEN #{orderQueryVo.attachStartDateStr} AND #{orderQueryVo.attachEndDateStr} )
                 )
             </if>
+            <choose>
+                <when test="type==1">
+                    and dept.management_source=1
+                </when>
+                <when test="type==2">
+                    and dept.management_source=2
+                </when>
+            </choose>
         </where>
         order by io.createtime desc
     </select>
@@ -1026,6 +1034,8 @@
           ins_area_company iac
             left JOIN
         ins_orders io  on iac.orderno = io.orderno
+        LEFT JOIN
+        sys_dept dept ON dept.id = io.deptid
         <where>
             <if test="agentUserIds != null and agentUserIds.size>0" >
                 AND (
@@ -1124,6 +1134,14 @@
                 OR ( DATE_FORMAT(iac.sy_start_date, '%Y-%m-%d')  BETWEEN #{orderQueryVo.attachStartDateStr} AND #{orderQueryVo.attachEndDateStr} )
                 )
             </if>
+            <choose>
+                <when test="type==1">
+                    and dept.management_source=1
+                </when>
+                <when test="type==2">
+                    and dept.management_source=2
+                </when>
+            </choose>
         </where>
         ) as s
     </select>