Prechádzať zdrojové kódy

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

785834757 1 rok pred
rodič
commit
8a2d883f59
29 zmenil súbory, kde vykonal 656 pridanie a 66 odobranie
  1. 3 0
      src/main/java/com/ydtech/components/TokenInterceptor.java
  2. 25 0
      src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java
  3. 25 0
      src/main/java/com/ydtech/modules/admin/controller/taskStatistics/TaskStatisticsController.java
  4. 49 10
      src/main/java/com/ydtech/modules/admin/model/dto/ReceivableExcel.java
  5. 22 0
      src/main/java/com/ydtech/modules/admin/model/vo/ZgdTokenVo.java
  6. 6 0
      src/main/java/com/ydtech/modules/admin/service/TaskStatisticsService.java
  7. 6 0
      src/main/java/com/ydtech/modules/admin/service/impl/CompanyDataReportServiceImpl.java
  8. 1 1
      src/main/java/com/ydtech/modules/admin/service/impl/SysUserAccountServiceImpl.java
  9. 54 1
      src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java
  10. 16 1
      src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java
  11. 7 3
      src/main/java/com/ydtech/modules/ins/model/yc/ruote/Ruote.java
  12. 57 0
      src/main/java/com/ydtech/modules/order/components/yongcheng/YongchengRequestApiComponents.java
  13. 21 0
      src/main/java/com/ydtech/modules/order/controller/InsOrdersController.java
  14. 2 1
      src/main/java/com/ydtech/modules/order/controller/YongChengOrderApiController.java
  15. 5 0
      src/main/java/com/ydtech/modules/order/dao/InsAreaCompanyMapper.java
  16. 2 1
      src/main/java/com/ydtech/modules/order/entity/api/yongcheng/constants/RequestUrl.java
  17. 117 0
      src/main/java/com/ydtech/modules/order/entity/api/yongcheng/request/PriceDiscountRatioRequest.java
  18. 29 0
      src/main/java/com/ydtech/modules/order/entity/api/yongcheng/response/PriceDiscountRatioResponse.java
  19. 2 1
      src/main/java/com/ydtech/modules/order/service/YongchengOrderApiService.java
  20. 6 6
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  21. 49 6
      src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java
  22. 16 12
      src/main/java/com/ydtech/modules/ttqf/RetrieveTTQFApi.java
  23. 14 7
      src/main/java/com/ydtech/modules/ttqf/service/impl/TtqfServiceImpl.java
  24. 5 5
      src/main/resources/application-prod.yml
  25. 1 2
      src/main/resources/mapper/modules/admin/DeptBalanceMapper.xml
  26. 35 4
      src/main/resources/mapper/modules/console/ProfitAnalysisMapper.xml
  27. 1 1
      src/main/resources/mapper/modules/esm/EsmUserImageMapper.xml
  28. 78 4
      src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml
  29. 2 0
      src/main/resources/mapper/modules/protocol/PtlAgreementGroupLinkDeptMapper.xml

+ 3 - 0
src/main/java/com/ydtech/components/TokenInterceptor.java

@@ -23,6 +23,9 @@ public class TokenInterceptor {
         notMatchList.add("/scanQrCode");  //扫描登录二维码
         notMatchList.add("/getQrCodeStatus");  //获取登录二维码状态
 
+
+        notMatchList.add("/getToken"); //获取token
+
         notMatchList.add("/wechat/login");  // 微信登陆
 
         notMatchList.add("/captchaById"); // 验证码通过ID

+ 25 - 0
src/main/java/com/ydtech/modules/admin/controller/SysLoginController.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.admin.controller;
 
 import cn.dev33.satoken.session.SaSession;
+import cn.dev33.satoken.session.TokenSign;
 import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -664,4 +665,28 @@ public class SysLoginController {
         }
         return HttpResult.ok(resultMap);
     }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/1/15 8:32
+     *  @Description:  通过用户id查询登录的token
+     */
+    @PostMapping("getToken")
+    @ApiOperation(value = "通过用户id查询token")
+    public boolean getTokenByUserId(@RequestBody ZgdTokenVo zgdTokenVo)  {
+        SaSession saSession = StpUtil.getSessionByLoginId(zgdTokenVo.getUserId());
+        List<TokenSign> tokenSignList = saSession.getTokenSignList();
+        boolean  flag =false;
+        if(tokenSignList!=null){
+            for (int i = 0; i < tokenSignList.size(); i++) {
+                if (tokenSignList.get(i).getValue().equals(zgdTokenVo.getZgdToken())){
+                    flag=true;
+                    break;
+                }
+            }
+        }
+        return flag;
+    }
+
 }

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

@@ -207,6 +207,31 @@ public class TaskStatisticsController {
             return HttpResult.error("查询错误"+e.getMessage());
         }
     }
+
+    /**
+     * @description:   财务中心-费用校验 -人员查询
+     * @author: whp
+     **/
+    @PostMapping("costReviewer")
+    @ApiOperation(value = "控制台-财务中心-费用校验")
+    public HttpResult<IPage<TaskStatisticsDto>> costReviewer(@RequestBody TaskStatisticsVo taskStatisticsVo, HttpServletRequest httpServerRequest) {
+        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<TaskStatisticsDto> result = taskStatisticsService.costReviewer(taskStatisticsVo);
+            return HttpResult.ok("查询数据成功", result);
+        }catch (Exception e){
+            return HttpResult.error("查询错误"+e.getMessage());
+        }
+    }
+
     /**
      * @description:   财务中心-费用校验-明细
      * @author: whp

+ 49 - 10
src/main/java/com/ydtech/modules/admin/model/dto/ReceivableExcel.java

@@ -45,26 +45,65 @@ public class ReceivableExcel {
     @ExcelProperty(value = "非车险含保费",index = 12)
     private String noPremium;
 
-    @ExcelProperty(value = "手续费比例",index = 13)
-    private String commissionFeerate;
 
-    @ExcelProperty(value = "跟单费用比例",index = 14)
-    private String otherFeerate;
+    @ExcelProperty(value = "交强手续费比例",index = 13)
+    private String jqSuperviseCostsProportion;
 
-    @ExcelProperty(value = "手续费金额",index = 15)
-    private String commissionFeevalue;
+    @ExcelProperty(value = "商业手续费比例",index = 14)
+    private String sySuperviseCostsProportion;
 
-    @ExcelProperty(value = "跟单费用金额",index = 16)
-    private String otherFeevalue;
+    @ExcelProperty(value = "非车手续费比例",index = 15)
+    private String noSuperviseCostsProportion;
 
 
-    @ExcelProperty(value = "维护人",index = 17)
-    private String leaderName;
+    @ExcelProperty(value = "交强手续费",index = 16)
+    private String jqSuperviseCostsPremiums;
+
+    @ExcelProperty(value = "商业手续费",index = 17)
+    private String sySuperviseCostsPremiums;
+
+    @ExcelProperty(value = "非车手续费",index = 18)
+    private String noSuperviseCostsPremiums;
+
+
+    @ExcelProperty(value = "交强跟单比例",index = 19)
+    private String jqOtherCostsProportion;
+
+    @ExcelProperty(value = "商业跟单比例",index = 20)
+    private String syOtherCostsProportion;
+
+    @ExcelProperty(value = "非车跟单比例",index = 21)
+    private String noOtherCostsProportion;
 
 
+    @ExcelProperty(value = "交强跟单金额",index = 22)
+    private String jqOtherCostsPremium;
 
+    @ExcelProperty(value = "商业跟单金额",index = 23)
+    private String syOtherCostsPremium;
 
+    @ExcelProperty(value = "非车跟单金额",index = 24)
+    private String noOtherCostsPremium;
 
+    @ExcelProperty(value = "手续费比例",index = 25)
+    private String commissionFeerate;
+
+    @ExcelProperty(value = "跟单费用比例",index = 26)
+    private String otherFeerate;
+
+    @ExcelProperty(value = "手续费金额",index = 27)
+    private String commissionFeevalue;
+
+    @ExcelProperty(value = "跟单费用金额",index = 28)
+    private String otherFeevalue;
+
+
+    @ExcelProperty(value = "维护人",index = 29)
+    private String leaderName;
 
+    @ExcelProperty(value = "协议类型",index = 30)
+    private String agreementType;
 
+    @ExcelProperty(value = "对接人",index = 31)
+    private String dockingPerson;
 }

+ 22 - 0
src/main/java/com/ydtech/modules/admin/model/vo/ZgdTokenVo.java

@@ -0,0 +1,22 @@
+package com.ydtech.modules.admin.model.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ZgdTokenVo implements Serializable{
+
+
+    private  String userId;
+
+    private  String zgdToken;
+
+    public ZgdTokenVo() {
+    }
+
+    public ZgdTokenVo(String userId, String zgdToken) {
+        this.userId = userId;
+        this.zgdToken = zgdToken;
+    }
+}

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

@@ -195,4 +195,10 @@ public interface TaskStatisticsService {
      */
     HttpResult ordersDetailsExcel(TaskStatisticsVo taskStatisticsVo);
 
+    /**
+     * @description:   财务中心-费用校验 -人员查询
+     * @author: whp
+     **/
+    IPage<TaskStatisticsDto> costReviewer(TaskStatisticsVo taskStatisticsVo);
+
 }

+ 6 - 0
src/main/java/com/ydtech/modules/admin/service/impl/CompanyDataReportServiceImpl.java

@@ -345,6 +345,12 @@ public class CompanyDataReportServiceImpl implements CompanyDataReportService {
                 if("10".equals(quotationDetailsExcel.getOrderstatus())){
                     quotationDetailsExcel.setOrderstatus("报价失败");
                 }
+                if("11".equals(quotationDetailsExcel.getOrderstatus())){
+                    quotationDetailsExcel.setOrderstatus("重复投保");
+                }
+                if("4".equals(quotationDetailsExcel.getOrderstatus())){
+                    quotationDetailsExcel.setOrderstatus("核保退回");
+                }
             }
 
         }

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

@@ -292,7 +292,7 @@ public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper,
     @Transactional
     public HttpResult<Object> inert(SysUserAccountVo sysUserAccountVo) {
         String userId = BaseController.getUser().getId();
-        if (isManagement(userId) && sysSwitchConfigService.getBalanceExtractStatus()){
+        if (isManagement(userId) ){
             //  个代走线上付款
             UserWithdrawal withdrawal = new UserWithdrawal();
             withdrawal.setUserId(userId);

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

@@ -724,6 +724,34 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
     }
 
     private HttpResult getHttpResult(TaskStatisticsVo taskStatisticsVo) {
+        String leaderId = taskStatisticsVo.getLeaderId();
+        if(com.ydtech.utils.StringUtils.isNotEmpty(leaderId)){
+            //获取领导人下级所有
+            List<String> ids = new ArrayList<>();
+            List<String> userList = this.getUserTreeHx(leaderId, ids);
+            userList.add(leaderId);
+            if(userList.size()>0){
+                taskStatisticsVo.setLeaderIds(userList);
+            }
+        }
+
+        PageVo<TaskStatisticsVo> pageVo = new PageVo<>();
+        Page page = new Page(taskStatisticsVo.getPageNum(), taskStatisticsVo.getPageSize());
+        pageVo.setPageNum(taskStatisticsVo.getPageNum());
+        pageVo.setPageSize(taskStatisticsVo.getPageSize());
+        page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
+
+        if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
+            if("7".equals(taskStatisticsVo.getDays())){
+                taskStatisticsVo.setDays("2");
+            } else if ("30".equals(taskStatisticsVo.getDays())) {
+                taskStatisticsVo.setDays("3");
+            }
+        }
+        HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getBeginDate(), taskStatisticsVo.getEndDate());
+        taskStatisticsVo.setBeginDate(dateMapByType.get("startDate"));
+        taskStatisticsVo.setEndDate(dateMapByType.get("endDate"));
+
         List<TaskStatisticsExcel> list = this.insAreaCompanyMapper.channelExcel(taskStatisticsVo);
         if (list != null && !list.isEmpty()) {
             for (TaskStatisticsExcel record : list) {
@@ -749,7 +777,7 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
 
 
             }
-        }
+         }
         String uploadPath = this.uploadPath + "/excel/";
         Path path = Paths.get(uploadPath);
         if (!Files.exists(path)) {
@@ -1513,4 +1541,29 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         }
     }
 
+    /**
+     * @description:   财务中心 - 费用校验 - 人员查询
+     * @author: whp
+     **/
+    @Override
+    public IPage<TaskStatisticsDto> costReviewer(TaskStatisticsVo taskStatisticsVo) {
+        if(StringUtils.isNotEmpty(taskStatisticsVo.getDays())){
+            if("7".equals(taskStatisticsVo.getDays())){
+                taskStatisticsVo.setDays("2");
+            } else if ("30".equals(taskStatisticsVo.getDays())) {
+                taskStatisticsVo.setDays("3");
+            }
+        }
+        HashMap<String, String> dateMapByType = getDateMapByTypeNew(taskStatisticsVo.getDays(), taskStatisticsVo.getCreatetimeStart(), taskStatisticsVo.getCreatetimeEnd());
+        taskStatisticsVo.setCreatetimeStart(dateMapByType.get("startDate"));
+        taskStatisticsVo.setCreatetimeEnd(dateMapByType.get("endDate"));
+
+        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.costReviewer(page,taskStatisticsVo);
+        return list;
+    }
+
 }

+ 16 - 1
src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java

@@ -2,14 +2,17 @@ package com.ydtech.modules.fnc.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.extra.spring.SpringUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ydtech.constants.enums.dict.FeeAuditAuditstatus;
 import com.ydtech.constants.enums.dict.ins.InsFeeAuditDistributionStatusEnum;
 import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.constants.ManagementSource;
 import com.ydtech.modules.admin.dao.SysPartnerAccountMapper;
 import com.ydtech.modules.admin.dao.SysPremiumDetailsMapper;
+import com.ydtech.modules.admin.dao.SysUserBankCardMapper;
 import com.ydtech.modules.admin.model.*;
 import com.ydtech.modules.admin.model.po.SysChannelCost;
 import com.ydtech.modules.admin.model.po.SysUserAccount;
@@ -141,6 +144,8 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     @Autowired
     private InsOrdersService insOrdersService;
 
+    @Autowired
+    private SysSwitchConfigService sysSwitchConfigService;
 
     public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper,
                                   InsDeptFeeService insDeptFeeService, EsmUserReferrerService esmUserReferrerService,
@@ -408,7 +413,9 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
 
             }
             sysPremiumDetailsMapper.updateStatus(insAreaCompany.getId());
-            dataServerService.sendLgDataServer(insOrderNo);
+            if (isManagement(order.getUserid()) && sysSwitchConfigService.getBalanceExtractStatus()){
+                dataServerService.sendLgDataServer(insOrderNo);
+            }
         } catch (Exception e) {
             throw new SystemException("当前业务繁忙,请稍后重试");
         } finally {
@@ -419,6 +426,14 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
         }
     }
 
+    public boolean isManagement(String userId) {
+        SysUser sysUser = SpringUtil.getBean(SysUserBankCardMapper.class).selectByIdPay(userId);
+        if (ManagementSource.MS_02.getCode().equals(sysUser.getManagementSource())){
+            return true;
+        }
+        return false;
+    }
+
     private void createInsFeeOrderNewDistribution(InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany, InsOrders insOrders,
                                                   String userId, BigDecimal commissionRate, BigDecimal commissionAmount,
                                                   String commissionLevel) {

+ 7 - 3
src/main/java/com/ydtech/modules/ins/model/yc/ruote/Ruote.java

@@ -156,7 +156,7 @@ public class Ruote {
      * @date: 2023年02月08日 0008
      */
     public static Ruote buildQuoteParam(YaQuoteInfoVo yaQuoteInfoVo, YcConfigureParameters ycConfigureParameters,
-                                        AccidentalDrivingVo adVo,String cQryCdeJQ,String cQryCdeSY) {
+                                        AccidentalDrivingVo adVo,String cQryCdeJQ,String cQryCdeSY,String negotiatedPrice) {
 
         Ruote m = new Ruote();
         Ruote.RequestLabel requestLabel = new Ruote.RequestLabel();
@@ -196,9 +196,13 @@ public class Ruote {
         //折旧价
         String defValue = YcBuildData.getDefValue(new BigDecimal(vhl.getNNewPriceValue()), vhl.getCFstRegYm(), startTime);
         vhl.setNActualValue(defValue);
+        if (negotiatedPrice.equals("0")) {
+            String negotiateThePrice = YcBuildData.getNegotiateThePrice(defValue,  vhl, startTime);
+            vhl.setNNewPurchaseValue(negotiateThePrice);
+        } else {
+            vhl.setNNewPurchaseValue(negotiatedPrice);
+        }
 
-        String negotiateThePrice = YcBuildData.getNegotiateThePrice(defValue,  vhl, startTime);
-        vhl.setNNewPurchaseValue(negotiateThePrice);
         condition.setVhl(vhl);
         /**
          * 车主信息

+ 57 - 0
src/main/java/com/ydtech/modules/order/components/yongcheng/YongchengRequestApiComponents.java

@@ -25,8 +25,10 @@ import com.ydtech.modules.ins.model.yc.ruote.Ruote;
 import com.ydtech.modules.ins.model.yc.ruote.response.RuoteResponse;
 import com.ydtech.modules.order.entity.api.yongcheng.constants.RequestUrl;
 import com.ydtech.modules.order.entity.api.yongcheng.request.AccidentUnderwritingRequest;
+import com.ydtech.modules.order.entity.api.yongcheng.request.PriceDiscountRatioRequest;
 import com.ydtech.modules.order.entity.api.yongcheng.request.ProposalPolicyReturnRequest;
 import com.ydtech.modules.order.entity.api.yongcheng.response.AccidentUnderwritingResponse;
+import com.ydtech.modules.order.entity.api.yongcheng.response.PriceDiscountRatioResponse;
 import com.ydtech.modules.order.utils.InsuranceLog;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.text.StringEscapeUtils;
@@ -89,6 +91,52 @@ public class YongchengRequestApiComponents {
 
         String xmlString = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tns=\"http://newWS.front" +
                 ".app.echannel.ebiz.alltrust.com/\">";
+//        xmlString += "<soapenv:Header/>";
+
+        xmlString += "<soapenv:Body>";
+
+        xmlString += gainXmlMapper().writeValueAsString(q);
+
+        xmlString += "</soapenv:Body>\n" +
+                "</soapenv:Envelope>";
+
+        InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\t---------> URl: {} \n---------> 保险公司:{} {}\n---------> 请求参数:{}", url,
+                InsuranceEnum.AICS.getName(), requestUrl.getDesc(), xmlString);
+        HttpEntity<String> httpEntity = new HttpEntity<>(xmlString, httpHeaders);
+
+        ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
+        String body = response.getBody();
+
+        String responseStringMsg = StringEscapeUtils.unescapeXml(body);
+        InsuranceLog.infoLog(InsuranceEnum.AICS.getPinyin(), "\n\n---------> 响应参数:{}", responseStringMsg);
+
+        String cleanStr = YcBuildData.cleanResponseStr(responseStringMsg);
+        if (!cleanStr.contains("<")) {
+            return (S) cleanStr;
+        }
+
+        S bean = gainXmlMapper().readValue(cleanStr, tClass);
+        if (ObjectUtils.isEmpty(bean)) {
+            throw new SystemException("请求失败");
+        }
+
+        return bean;
+    }
+
+    private <Q, S> S post1(Q q, RequestUrl requestUrl, Class<S> tClass) throws JsonProcessingException {
+
+        String url = apiComponents.getUrl() + requestUrl.getUri();
+
+        HttpHeaders httpHeaders = new HttpHeaders();
+        MediaType mediaType = MediaType.parseMediaType("text/xml;charset=UTF-8");
+        httpHeaders.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 " +
+                "Safari/537.36");
+        httpHeaders.setContentType(mediaType);
+
+        String xmlString = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:new=\"http://newWS.front" +
+                ".app.echannel.ebiz.alltrust.com/\">";
+        xmlString += "<soapenv:Header/>";
+
         xmlString += "<soapenv:Body>";
 
         xmlString += gainXmlMapper().writeValueAsString(q);
@@ -222,4 +270,13 @@ public class YongchengRequestApiComponents {
         return post(policy, RequestUrl.API_GUARANTEE_SLIP, PolicyResponse.class);
     }
 
+    /**
+     * 获取协商价折扣比例
+     *
+     * @param priceDiscountRatioRequest 获取协商价折扣比例 入参实体
+     * @return 出参实体
+     */
+    public PriceDiscountRatioResponse priceDiscount(PriceDiscountRatioRequest priceDiscountRatioRequest) throws JsonProcessingException {
+        return post1(priceDiscountRatioRequest, RequestUrl.API_PRICE_DISCOUNT_RATIO, PriceDiscountRatioResponse.class);
+    }
 }

+ 21 - 0
src/main/java/com/ydtech/modules/order/controller/InsOrdersController.java

@@ -301,6 +301,27 @@ public class InsOrdersController extends BaseController {
         return HttpResult.ok("success", downloadLink);
     }
 
+    @PostMapping("/exportHospitalityByAgent")
+    @ApiOperation(value = "导出用户id和订单状态查询关联代理人的订单数据")
+    public HttpResult<String> exportHospitalityByAgent(@RequestBody OrderQueryVo orderQueryVo) {
+        String downloadLink = this.insOrdersService.exportTaskPoolData(orderQueryVo, OrderLinkTypeConstants.ORDER_LINK_TYPE_CONSTANTS_2);
+        return HttpResult.ok("success", downloadLink);
+    }
+
+    @PostMapping("/exportHospitalityByInsuranceCompany")
+    @ApiOperation(value = "导出用户id和订单状态查询关联保险公司的订单数据")
+    public HttpResult<String> exportHospitalityByInsuranceCompany(@RequestBody OrderQueryVo orderQueryVo) {
+        String downloadLink = this.insOrdersService.exportTaskPoolData(orderQueryVo, OrderLinkTypeConstants.ORDER_LINK_TYPE_CONSTANTS_3);
+        return HttpResult.ok("success", downloadLink);
+    }
+
+    @PostMapping("/exportHospitalityByTelemarketing")
+    @ApiOperation(value = "导出用户id和订单状态查询关联电销的订单数据")
+    public HttpResult<String> exportHospitalityByTelemarketing(@RequestBody OrderQueryVo orderQueryVo) {
+        String downloadLink = this.insOrdersService.exportTaskPoolData(orderQueryVo, OrderLinkTypeConstants.ORDER_LINK_TYPE_CONSTANTS_4);
+        return HttpResult.ok("success", downloadLink);
+    }
+
     /**
      * @version
      * @author: hxl

+ 2 - 1
src/main/java/com/ydtech/modules/order/controller/YongChengOrderApiController.java

@@ -19,6 +19,7 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.text.ParseException;
 import java.time.LocalDate;
 import java.util.List;
 
@@ -47,7 +48,7 @@ public class YongChengOrderApiController {
     @QuoteVerification("报价授权")
     @ApiOperation(value = "永诚API方式 - 报价")
     @PostMapping("/quote")
-    public HttpResult quoteApi(@RequestBody BaseQuoteVo<QuoteAccidentalDrivingVo> quoteVo) throws JsonProcessingException {
+    public HttpResult quoteApi(@RequestBody BaseQuoteVo<QuoteAccidentalDrivingVo> quoteVo) throws JsonProcessingException, ParseException {
         BaseQuoteVo<AccidentalDrivingVo> baseQuoteVo = insOrdersService.convertDriving(quoteVo);
         return yongchengOrderApiService.quoteApi(baseQuoteVo);
     }

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

@@ -433,6 +433,11 @@ public interface InsAreaCompanyMapper extends BaseMapper<InsAreaCompany> {
      * @author: whp
      **/
     List<QuotationDetailsExcel> quotationDetailsExcel(@Param("vo") CompanyQutationCountDataQueryDto companyQutationCountDataQueryDto);
+    /**
+     * @description:   财务中心 - 费用校验 - 人员查询
+     * @author: whp
+     **/
+    IPage<TaskStatisticsDto> costReviewer(@Param("page") Page page,@Param("vo") TaskStatisticsVo taskStatisticsVo);
 
 }
 

+ 2 - 1
src/main/java/com/ydtech/modules/order/entity/api/yongcheng/constants/RequestUrl.java

@@ -17,7 +17,8 @@ public enum RequestUrl {
     API_ORDER_QUERY("payCallback", "补传回调及订单信息查询接口"),
     API_UNDERWRITING_RETURNS("returnAppPolicyWebService", "投保单打回接口"),
     API_ACCIDENT("NewQueryYwCvrgWebService", "意外险"),
-    API_SUBMIT_POLICY("SubmitpolicyWebService", "意外险确保接口");
+    API_SUBMIT_POLICY("SubmitpolicyWebService", "意外险确保接口"),
+    API_PRICE_DISCOUNT_RATIO("PriceDiscountService", "获取协商价浮动比例接口");
 
     private final String uri;
 

+ 117 - 0
src/main/java/com/ydtech/modules/order/entity/api/yongcheng/request/PriceDiscountRatioRequest.java

@@ -0,0 +1,117 @@
+package com.ydtech.modules.order.entity.api.yongcheng.request;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import com.ydtech.constants.enums.InsurKind;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.yc.YcConfigureParameters;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author quchen
+ * @date 2025/1/9 17:55
+ */
+
+@Data
+@JacksonXmlRootElement(localName = "new:GtePriceDiscountService")
+public class PriceDiscountRatioRequest implements Serializable {
+    @JacksonXmlProperty(localName = "request")
+    private RequestDTO request;
+
+    public PriceDiscountRatioRequest(YcConfigureParameters ycConfigureParameters, CarInfoVo carInfoVo,List<KindInfoVo> kindInfoVoList,String startTime) {
+        this.request = new RequestDTO(ycConfigureParameters.getPassword(),
+                ycConfigureParameters.getUserName(),
+                carInfoVo,
+                kindInfoVoList,
+                startTime,
+                ycConfigureParameters.getDptCde());
+    }
+
+    @Data
+    private static class RequestDTO implements Serializable {
+
+        @JacksonXmlProperty(localName = "authorityData")
+        private AuthorityDataDTO authorityData;
+
+        @JacksonXmlProperty(localName = "body")
+        private BodyDTO body;
+
+        public RequestDTO(String password, String username,CarInfoVo carInfoVo, List<KindInfoVo> kindInfoVoList, String startTime, String CDptCde) {
+            this.authorityData = new AuthorityDataDTO(username,password);
+            this.body = new BodyDTO(carInfoVo, kindInfoVoList, startTime, CDptCde);
+        }
+
+        @Data
+        @AllArgsConstructor
+        private static class AuthorityDataDTO implements Serializable {
+            /**
+             * 用户名
+             */
+            @JacksonXmlProperty(localName = "userName")
+            private String userName;
+            /**
+             * 密码
+             */
+            @JacksonXmlProperty(localName = "password")
+            private String password;
+        }
+
+
+        @Data
+        @AllArgsConstructor
+        private static class BodyDTO implements Serializable {
+            /**
+             * 机构
+             */
+            private String CDptCde;
+            /**
+             * 产品号 0364商业 0326交强
+             */
+            private String CProdNo;
+            /**
+             * 初登日期
+             */
+            private String CFstRegYm;
+            /**
+             * 保险起期
+             */
+            private String TInsrncBgnTm;
+            /**
+             * 是否含车损险
+             */
+            private String IsContainDamage;
+            /**
+             * 车架号
+             */
+            private String CFrmNo;
+            /**
+             * 是否过户车标志
+             */
+            private String CChgOwnerFlag;
+
+            public BodyDTO(CarInfoVo carInfoVo, List<KindInfoVo> kindInfoVoList, String startTime, String CDptCde){
+                this.CDptCde = CDptCde;
+                this.CFstRegYm = carInfoVo.getRegisterDate();
+                this.TInsrncBgnTm = startTime;
+                this.IsContainDamage = "1";
+                if (!kindInfoVoList.isEmpty()) {
+                    this.CProdNo = "0364";
+                    kindInfoVoList.forEach(kindInfoVo -> {
+                            if (kindInfoVo.getKindCode().equals(InsurKind.A.getCode())) {
+                                this.IsContainDamage = "0";
+                            }
+                    });
+                } else {
+                    this.CProdNo = "0326";
+                }
+                this.CFrmNo = carInfoVo.getFrameNo();
+                this.CChgOwnerFlag = carInfoVo.isTransferFlag() ? "1" : "0";
+            }
+        }
+    }
+}

+ 29 - 0
src/main/java/com/ydtech/modules/order/entity/api/yongcheng/response/PriceDiscountRatioResponse.java

@@ -0,0 +1,29 @@
+package com.ydtech.modules.order.entity.api.yongcheng.response;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import lombok.Data;
+
+/**
+ * @author quchen
+ * @date 2025/1/9 18:06
+ */
+
+@Data
+@JacksonXmlRootElement(localName = "ns2:GtePriceDiscountServiceResponse")
+public class PriceDiscountRatioResponse {
+    /**
+     *  返回消息码  E0001失败  E0000成功
+     */
+    private String code;
+
+    /**
+     *  返回信息
+     */
+    private String msg;
+
+    /**
+     * 协商价折扣比例
+     */
+    private String val;
+
+}

+ 2 - 1
src/main/java/com/ydtech/modules/order/service/YongchengOrderApiService.java

@@ -12,6 +12,7 @@ import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 
+import java.text.ParseException;
 import java.util.List;
 
 public interface YongchengOrderApiService {
@@ -20,7 +21,7 @@ public interface YongchengOrderApiService {
     /**
      * 2 报价
      */
-    HttpResult quoteApi(BaseQuoteVo<AccidentalDrivingVo> quoteVo) throws JsonProcessingException;
+    HttpResult quoteApi(BaseQuoteVo<AccidentalDrivingVo> quoteVo) throws JsonProcessingException, ParseException;
 
     /**
      * 3 核保

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

@@ -81,6 +81,7 @@ import com.ydtech.modules.scheme.entity.vo.RuleFilterVo;
 import com.ydtech.modules.scheme.service.PtlSchemeRulesService;
 import com.ydtech.utils.SnowFlakeUtil;
 import com.ydtech.utils.idgen.IdGenerate;
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.InvalidPropertyException;
@@ -1537,6 +1538,7 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
     @Override
     public BasePageResult<InsOrders> queryPageOrderByLinkType(OrderQueryVo orderQueryVo, int type) {
         //添加收回按钮的操作
+
         Boolean flag = false;
         Page<InsOrders> page = new Page<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize());
         page.setSearchCount(false).setOptimizeCountSql(false);//关闭count查询
@@ -2490,12 +2492,10 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         String signStartDateStr = orderQueryVo.getSignStartDateStr();
         String signEndDateStr = orderQueryVo.getSignEndDateStr();
 
-        if (!InsOrderStatusEnum.ACCEPT_INSURANCE.getCode().equals(orderQueryVo.getOrderStatus())) {
-            throw new SystemException("只允许导出已承保数据");
-        }
-
-        if (StringUtils.isEmpty(signStartDateStr) || StringUtils.isEmpty(signEndDateStr)) {
-            throw new SystemException("1.导出数据时,签单时间必填;2.选择的签单时间(开始日期-结束日期)>30天,导出时,按结束时间往前+30天的数据做导出");
+        String quoteStartDateStr = orderQueryVo.getQuoteStartDateStr();
+        String quoteEndDateStr = orderQueryVo.getQuoteEndDateStr();
+        if ((StringUtils.isEmpty(signStartDateStr) || StringUtils.isEmpty(signEndDateStr)) ||  (StringUtils.isEmpty(quoteStartDateStr) || StringUtils.isEmpty(quoteEndDateStr))) {
+            throw new SystemException("1.导出数据时,签单时间 或者 录单时间必填;2.选择的签单时间 或 录单时间 (开始日期-结束日期)>30天,导出时,按结束时间往前+30天的数据做导出");
         }
 
         final int day = 30;

+ 49 - 6
src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java

@@ -29,6 +29,7 @@ import com.ydtech.modules.ins.model.dto.CarInsPolicyDto;
 import com.ydtech.modules.ins.model.vo.CarInfoVo;
 import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
 import com.ydtech.modules.ins.model.vo.QuoteRespVo;
+import com.ydtech.modules.ins.model.vo.RiskInfoVo;
 import com.ydtech.modules.ins.model.ya.CarModel_Req;
 import com.ydtech.modules.ins.model.yc.CallBackRequest;
 import com.ydtech.modules.ins.model.yc.YcBuildData;
@@ -65,8 +66,10 @@ import com.ydtech.modules.order.entity.InsAreaCompanyExternalPolicy;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.api.yongcheng.constants.MessageStatusCode;
 import com.ydtech.modules.order.entity.api.yongcheng.request.AccidentUnderwritingRequest;
+import com.ydtech.modules.order.entity.api.yongcheng.request.PriceDiscountRatioRequest;
 import com.ydtech.modules.order.entity.api.yongcheng.request.ProposalPolicyReturnRequest;
 import com.ydtech.modules.order.entity.api.yongcheng.response.AccidentUnderwritingResponse;
+import com.ydtech.modules.order.entity.api.yongcheng.response.PriceDiscountRatioResponse;
 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.DrivingInsuranceDto;
@@ -98,6 +101,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -261,7 +266,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
      * @param quoteVo
      * @return
      */
-    private Ruote builderParams(BaseQuoteVo<AccidentalDrivingVo> quoteVo, BaseQuoteInfoVo yaQuoteInfoVo, CoreModelsVo coreModelsVo) {
+    private Ruote builderParams(BaseQuoteVo<AccidentalDrivingVo> quoteVo, BaseQuoteInfoVo yaQuoteInfoVo, CoreModelsVo coreModelsVo,String negotiatedPrice) {
         // 获取协议配置信息
         YcConfigureParameters ycConfigureParameters = gainYcConfigParams(quoteVo.getAgreementId());
         CarInfoVo carInfo = yaQuoteInfoVo.getCarInfo();
@@ -275,7 +280,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         String cQryCdeSY = redisTemplate.opsForValue().get(REDIS_YONGCHENG_QUERY_CODE_SY + yaQuoteInfoVo.getUserId() + carInfo.getVinNo() + carInfo.getLicenseNo());
 
         //组装参数
-        Ruote m = Ruote.buildQuoteParam(yaQuoteInfoVo, ycConfigureParameters, adVo, cQryCdeJQ, cQryCdeSY);
+        Ruote m = Ruote.buildQuoteParam(yaQuoteInfoVo, ycConfigureParameters, adVo, cQryCdeJQ, cQryCdeSY,negotiatedPrice);
         //企业车不构建地区
         String property = carInfo.getProperty();
         if (!"2".equals(property)) {
@@ -470,7 +475,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
      * 2 报价-
      */
     @Override
-    public HttpResult quoteApi(BaseQuoteVo<AccidentalDrivingVo> quoteVo) throws JsonProcessingException {
+    public HttpResult quoteApi(BaseQuoteVo<AccidentalDrivingVo> quoteVo) throws JsonProcessingException, ParseException {
         Integer maxQuoteNum = quoteVo.getMaxQuoteNum();
 
         List<String> requestInfoList = new ArrayList<>();
@@ -483,10 +488,48 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         //查询订单信息
         InsOrders order = insOrdersService.getById(yaQuoteInfoVo.getOrderNo());
 
-        //build参数
-        Ruote m = this.builderParams(quoteVo, yaQuoteInfoVo, coreModelsVo);
-
         List<SysQuoteRecord> sysQuoteRecords = new ArrayList<>();
+
+        BigDecimal negotiatedPrice = null; // 协商价
+        //接口调用前提条件:
+        //旧车,0326/0364, 10座以下非营业个人客车业务”才调该接口查询协商价浮动比例
+        //协商价 = 折旧价*返回的协商价浮动比例
+        if (yaQuoteInfoVo.getCarInfo().getVehicleUse().equals("05") && Integer.parseInt(yaQuoteInfoVo.getCarInfo().getSeatCount()) <= 10 ) {
+            YcConfigureParameters ycConfigureParameters = gainYcConfigParams(quoteVo.getAgreementId());
+            List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
+            //交强
+            RiskInfoVo ciRiskInfo = riskList.stream().filter(x -> x.getRiskCode().equals(InsuranceRisk.TRAFFIC.getCode())).findFirst().orElse(null);
+            //商业
+            RiskInfoVo biRiskInfo = riskList.stream().filter(x -> x.getRiskCode().equals(InsuranceRisk.BUSINESS.getCode())).findFirst().orElse(null);
+            String startDate; // 起保日期
+            if (biRiskInfo != null) {
+                startDate = biRiskInfo.getStartDate();
+            } else {
+                startDate = ciRiskInfo.getStartDate();
+            }
+            BigDecimal vehiclePrice = new BigDecimal(yaQuoteInfoVo.getCarInfo().getPurchasePrice()); // 新车购置价
+            String registerDate = yaQuoteInfoVo.getCarInfo().getRegisterDate();  // 初登日期
+            //转换日期格式
+            SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
+            Date startDateAsDate = inputFormat.parse(startDate);
+            String formattedStartDate = outputFormat.format(startDateAsDate);
+
+            BigDecimal depreciationPrice = new BigDecimal(YcBuildData.getDefValue(vehiclePrice, registerDate, formattedStartDate)); // 折旧价
+            PriceDiscountRatioRequest priceDiscountRatioRequest = new PriceDiscountRatioRequest(ycConfigureParameters, yaQuoteInfoVo.getCarInfo(), quoteVo.getKinds(), startDate);
+            PriceDiscountRatioResponse priceDiscountRatioResponse = yongchengRequestApiComponents.priceDiscount(priceDiscountRatioRequest);
+            if (priceDiscountRatioResponse.getCode().equals("E0000")) {
+                if (priceDiscountRatioResponse.getVal() != null) {
+                    // 协商价 = 折旧价 * 返回的协商价浮动比例
+                    negotiatedPrice = depreciationPrice.multiply(new BigDecimal(priceDiscountRatioResponse.getVal())) ;
+                }
+            } else {
+                negotiatedPrice = BigDecimal.ZERO;
+            }
+        }
+
+        //build参数
+        Ruote m = this.builderParams(quoteVo, yaQuoteInfoVo, coreModelsVo, negotiatedPrice.toString());
         //递归报价
         RuoteResponse rr = this.getResponse(m, yaQuoteInfoVo.getCarInfo().getVinNo(), requestInfoList, yaQuoteInfoVo,quoteVo.getCompanyId(),maxQuoteNum,sysQuoteRecords);
 

+ 16 - 12
src/main/java/com/ydtech/modules/ttqf/RetrieveTTQFApi.java

@@ -236,7 +236,19 @@ public class RetrieveTTQFApi {
         PresignResponse response = tangClient.execute(request);
         if(response.isSuccess()) {
             log.info("成功 ====>Pressing {}", response.getResultModel());
-            return contractH5(sysUser.getIdentity());
+            ContractH5Response h5Response = contractH5(sysUser.getIdentity());
+            if(h5Response.isSuccess()) {
+                //  返回当前签约H5页面
+                String signUrl = h5Response.getResultModel().getSignUrl();
+                if (!StringUtils.isEmpty(signUrl)){
+                    signService.saveUserSign(sysUser.getIdentity(),sysUser.getId());
+                }
+                log.info("成功 ====>ContractH5 {}", response.getResultModel());
+                return signUrl;
+            } else {
+                log.error("调起用户签约信息异常");
+                throw new SystemException("调起用户签约信息异常");
+            }
         } else {
             log.error("失败{}", response);
             return response.getBizMsg();
@@ -261,20 +273,12 @@ public class RetrieveTTQFApi {
     /**
      * 合同签约唤起接口
      */
-    public static String contractH5(String idCardNo) {
-        ContractH5Response response = tangClient.execute(ContractH5Request.builder()
+    public static ContractH5Response contractH5(String idCardNo) {
+        return tangClient.execute(ContractH5Request.builder()
                 .requestId(System.currentTimeMillis() + "").bizModel(ContractH5Model.builder()
                         .idCardNo(idCardNo).mchReturnUrl(PayConstantStatus.getUserSignNotifyUrl()).build())
                 .build());
-        if(response.isSuccess()) {
-            //  返回当前签约H5页面
-            String signUrl = response.getResultModel().getSignUrl();
-            log.info("成功 ====>ContractH5 {}", response.getResultModel());
-            return signUrl;
-        } else {
-            log.error("调起用户签约信息异常");
-        }
-        return "";
+
     }
 
     /**

+ 14 - 7
src/main/java/com/ydtech/modules/ttqf/service/impl/TtqfServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ipaynow.jiaxin.domain.QueryPresignResultModel;
 import com.ipaynow.jiaxin.response.BillDownloadResponse;
+import com.ipaynow.jiaxin.response.ContractH5Response;
 import com.ipaynow.jiaxin.response.ReceiptlDownloadResponse;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
@@ -222,9 +223,9 @@ public class TtqfServiceImpl implements TtqfService {
 
     @Override
     public HttpResult queryPressing(UserWithdrawal withdrawal) {
-        if (!sysSwitchConfigService.getBalanceExtractStatus()){
-            return HttpResult.ok(WithdrawalFRes.builder().bizCode("0").msg("").url("").build());
-        }
+//        if (!sysSwitchConfigService.getBalanceExtractStatus()){
+//            return HttpResult.ok(WithdrawalFRes.builder().bizCode("0").msg("").url("").build());
+//        }
         SysUser sysUser = SpringUtil.getBean(SysUserBankCardMapper.class).selectByIdPay(withdrawal.getUserId());
         if (Objects.isNull(sysUser)){
             return HttpResult.error("用户不存在,请检查");
@@ -237,7 +238,16 @@ public class TtqfServiceImpl implements TtqfService {
         }
         PayUserSign payUserSign = signService.selectOne(sysUser.getIdentity(),sysUser.getId());
         if (!Objects.isNull(payUserSign)){
-            String signUrl = RetrieveTTQFApi.contractH5(sysUser.getIdentity());
+            ContractH5Response h5Response = RetrieveTTQFApi.contractH5(sysUser.getIdentity());
+            String signUrl = "";
+            if(h5Response.isSuccess()) {
+                //  返回当前签约H5页面
+                 signUrl = h5Response.getResultModel().getSignUrl();
+                log.info("成功 ====>ContractH5 {}", h5Response.getResultModel());
+            } else {
+                log.error("调起用户签约信息异常");
+                throw new SystemException("调起用户签约信息异常");
+            }
             if (Objects.equals(PayConstantStatus.SIGN_STATUS,payUserSign.getSign()) &&
                     Objects.equals(PayConstantStatus.AUTH_STATUS,payUserSign.getAuthStatus())){
 
@@ -272,9 +282,6 @@ public class TtqfServiceImpl implements TtqfService {
                 return HttpResult.error("用户身份证号不存在,请检查");
             }
             String pres = RetrieveTTQFApi.pres(sysUser, withdrawal);
-            if (!StringUtils.isEmpty(pres)){
-                signService.saveUserSign(sysUser.getIdentity(),sysUser.getId());
-            }
             return HttpResult.ok(WithdrawalFRes.builder().bizCode("").url(pres).msg("").build());
         }catch (Exception e){
             log.error("获取用户签约信息异常{}",e.getMessage());

+ 5 - 5
src/main/resources/application-prod.yml

@@ -479,12 +479,12 @@ customer:
 httpUrl: https://sxzgkj.baoxianzhanggui.com/copartnerH5/#/pages/index/result?
 
 ttqf:
-  mch-id: '000000466591593'
+  mch-id: '000000335874804'
   platform-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo/PmfNo3v8+VIT2oSUMXtZJGtGiBfqjVQAeKjppXkZ9jgzNjVbRAnWdTXKifyQQa5QhGeFCjJ9RS5WwLyZMBdwbhJJ2YkVDDXDc284CuXf5J3TDodkexfDwyPf3SvSVemRej5muhju1DOzLAyvx4GRKbDOEQqNiFxmn7HnQ2U6HsnQKa/LkB4ydogauI81q/taOcLyZsxz+uiIxYHQ2kujDBYncH3ncBeNQ7rWh7trWvCZ2sbtmUjbU2FC/cpp1oFBQbiQAuVA+4NBjobT/Ig7hGT9NiJ0elzOX5vWKvZelu6zD8z/frqXKSeyDWdjE9TB53pvCCuCiZSyOEwLJ0uwIDAQAB
-  mch-private-key: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCe7732/NU4Gfnpc61/pajF5VJODLC8HVPv+egBtgNB/AHPRTu8pLCwsJF1o1VFOeJMmp+fFI3lV04e9aGrEV3D/iWKJmdq/+O66eRuWoDZ2kGkgIgBf2FDdIe3GJOZmtc2TsxpU47sRjOzeOqUMPSJy5R82UKttrYEbYeDR6icUoWvkEFtTB5ZgJVsEP316LEJQIGevCpLKekZnlgtBsuF/DcMB4zAo4PQSHzGTvVox+hYrmK2/qGVbPb64TBFXiK019+xqN3uVNK3+3ZAC5jRF3kReBYWx5W4U9uAtEltX1AtFZS1VzaGbYlhcAOlijO+C2x+s9mG0FTKgsyMYZYNAgMBAAECggEBAJYoUKQxmMxJFmhuBsPrYfmdv9XHfY4scyntRDmhmZBUo+0MLvT574jvOG4Y4y3lEx1mlFn6VFkR09fCH3x8isbprNPJlrlrit8DrPJphQTNhGkDmfs4Ok89oB7nFEPyG1POvKbh78zgQmZUXeOmINKyyNXveWSfk3W5eWcZY35TnTbTYXsbk9mzV54r+XNXbF50WnBhPV+0Q8ak7d0cM579a6dr2eiorXYN4qFdevnM3h/bVm9l58Eo7/jujMHhciyjDrGOL8IOLLgFvKtn2jSbLfA0XadDJUY8SjqgC0O5Cd8V1R97DpE3xVF2Q21QyijRqGeiyQ9uHbEkJSbK5u0CgYEA/qxGwekzslwFMuddvld5Xm0ns/8W5yDICbnsmRPLOWmPzGgiJ7/kUrvjO9n8CQJhUuDCw+ey4/v6YHOa8s8TqWRh7UF5DzZZzWDTwKCGMMvthXXu9RYPdhQ6W1s44ICv2K0IU5uRdVYapw5FpR2cfrUkVBf4u+Q5b/esw0lv/iMCgYEAn8PBy9RvFjA/4PrxNfBFV2xC1v1QxPVHiItMdsn5B7bADET1zrJnE0hvllJTzowZsIJ4Sy1D0GQHwA+I/4MXN6lCA/dc33u8bbd/NejurZtv8HWmPKK6nEJp+21aJMJHsNq6atmpQDBq3uE7IIsLjGscogX16RrDl5a7iErNpg8CgYEAzyHhXt/EO0HavJ8vQJu2zBUtoJlN0Gh6Kmb8xzgxJx3zZgYgGYJaOuw0Ej7mXZGBBL5nypyNhB4ycvYzxV6lGDXb6/M/eh7zhTZGo7oryk5ifhUAaHgr1Rb4q8sTBI3F+A4r4ox6DxwcC1lxTa061leQF5FzraYfDTE9Y4w8OU8CgYAnOo3vWq4cKKTGvVdVAzZDjRWsbG7UrdVutaWE1XsMZdcqLBSfODcPCQ49PuHNKaF1MdQPwYGRPb6ZbjcZZjrhM/I9vxNS3LMbzZ6ywgs5HZ2S0ZCL+vkPPU+AqQ0lUX8A8fQsIF3qoPjc2TkHeJzRUcuqDQSgxC2anyxU/ukYCQKBgQC4TdIAM8K385r5Q51ttqQXKZRkprsJ6ig6XIrT8tKO03lY20jovo0ubvSmgdqapQad+v+Lneeo7dJ8+lrDjfvcLBHHAg+ThC1nI7aTLRb8hQxtra2ObtvFrnDi1Tl19ANtzDp0T4Jb5zfoIK2167dJKgOuKcJjjDs42dQ/hbiCug==
-  host: https://ttqftest.chinaums.com
-  lg-url: https://test.baoxianzhanggui.com/prod-api/paySign/information/zgInformationPush
-  tokenUrl: https://test.baoxianzhanggui.com/web-api
+  mch-private-key: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDT9QuzsChbWnJFVN69babqmVv/Lh9BUxlPYQpwSeWe+sJ9DGRJAkLB2RTZZnWBod1tKlFk8wSU+iOMlCOuLUJKDAoMEmdOKJ66Tref1hjaNtNtaTLZknDVeHf2ScdYVtE6KzK+xOlYpHFIoXWHJO0iYuPGzVqPjiLvlHIY93l6sCIdSYn0w4jAzfTy0Xs201UMhnOdkfP/hJ1a2rooNm803EBQLH7H0p3FMDI46aIW9/llN+rXQcIIX+4sBixWNfJknXS+07GjT2oxEAFhOZ1eYrcPFx4X0NdSFnuLg/dQTHD9urF7RN3w5TGQKZYt9ZNVdpVuY9Emvm3W1iZO/d2tAgMBAAECggEBAM6bn9OBFGWwLZFNoG2QFFO8OAPvZoIbyaEp264HKnAkyS5xxNOyA3bH713XVRWOvbOqu3qmtMGvbrWatYkUDvj08VpBGjgCum6rSqzgWotjRAbzs6CH8br0WiNWWZ3PytVjxGxWr4s7iD2fPVwF761ELfnctLkYeQ+GaQ3TNbQTc7k7XWZKQPW7t6l0tOiV02GpHO3xbYkmERFKi2l6IYooN789Nt2bI++5EzYNkRZ2xwgmQzGjZG1TctajfE7YEwEegHojIi68llmms6bINjYnz4uh1HomNs+ZPgN94wrXntwrGHAwsMkDhmIxtIDhDqFRxOVbdTkLrpDwJbF6awECgYEA9/eLrAznoXpvnqGAQ/2300fbsaigZicaGmGSJGyClSIDgNPi72zc+LYFmYDAIBYg5QOdfErc+jjwWEr1kC4mfGvqhZHueBLkM+rJ4/205L0C4eRik0HtA6QXi3cYJLShDF+6d9Z72I4eJZV/daI1H0Fo8C1e9p7EsPISbBPCN+0CgYEA2tLcntoQK4L9FfehvteClV7AL7u3r7aGEKvfHwxT6IwDXcTfSAFujj34z0+IINRa+YlWte1jfm/yIKDi4fJeY8T5cNeEUorVYLP/jn1Uhm7hx4k/otwIz4Za7GwR30Ki1q21s9eJmegTcumWx+34FcjRc1u2320UKON4qek6BMECgYEAlisDGhHCoSctu8qgjAx2K+zDnoa5hMO/aiSWxZo1Rq2Po5AuScMK21AYegrfz063YxnaYPBRfPPIkh/rMQLR6d3M7FEhMvR14P8afwkhaLkSqsyN6hItwFu6qopYQ7pkIcNDgNmSrOX8WdR8mTe/pgsNyw4fCYnDIkmnYG5i200CgYAezF7Q3NA5z43fcaMKQTrX2yYhkcIgsQfdgNM+g3Wr3Uj8AaGLeOgejQpf40m9lSXYyUOzB15hhVAG154XPw2Z7TdOcoblNzUhDzSA0ZL7+M8+TkrumRmEW9ygOfWp/q78mCZi0YtEZi2Wltnp+cxZBJK2McpjV+7mcl2hTHomAQKBgCm+QMNA3zPNp49cOZGTuoyq8Hj+eZhnQA8SPAE3mOwCNJTNChqremeS9Rqp43cbr1miaV90Jatt64H2CdlF6ebqJ486McAoQKDqFUlo3o0BxN1J/iNHjXwwYe8daaSPHZpW4jtb3lp+cP20cawuNWi6LX4qV1qWpAufBcL/YB2n
+  host: https://ttqf.chinaums.com
+  lg-url: https://sxzgkj.baoxianzhanggui.com/linggong/paySign/information/zgInformationPush
+  tokenUrl: https://sxzgkj.baoxianzhanggui.com/web-api
 
 #灵活用工平台实时推送ip地址
 sendMessage-zg-yggl-IP: https://test.baoxianzhanggui.com/prod-api

+ 1 - 2
src/main/resources/mapper/modules/admin/DeptBalanceMapper.xml

@@ -220,8 +220,7 @@
         left join sys_amount_auditing saa on saa.id =his.auditiing_id
         left join sys_user su on su.id =his.user_id
         WHERE
-        his.property !=1
-        and his.property !=2
+        his.property in('4','3')
         AND his.documentary = '2'
         and  (ins.del_flag = '1' or o.del_flag IS NULL or o.del_flag = 1)
         <if test="beginDate !=null and beginDate != '' and endDate !=null and endDate != '' ">

+ 35 - 4
src/main/resources/mapper/modules/console/ProfitAnalysisMapper.xml

@@ -321,15 +321,46 @@
 
 
     <select id="receivableExcel" resultType="com.ydtech.modules.admin.model.dto.ReceivableExcel">
-        SELECT
-        *
-        FROM
-        ins_ply_income a
+        select
+        a.orderno ,
+        max(a.policyno) as "policyno",
+        max(a.signdate) as "signdate",
+        max(a.agreement_id) as "agreementId",
+        max(a.dept_id) as "deptId",
+        max(a.licenseno) as "licenseno",
+        max(a.no_policyno) as "noNolicyno",
+        sum(a.commission_feerate) as "commissionFeerate",
+        sum(a.other_feerate) as "otherFeerate",
+        sum(a.commission_feevalue) as "commissionFeevalue",
+        sum(a.other_feevalue) as "otherFeevalue",
+        sum(a.jq_supervise_costs_premiums) as "jqSuperviseCostsPremiums",
+        sum(a.jq_supervise_costs_proportion) as "jqSuperviseCostsProportion",
+        sum(a.sy_supervise_costs_premiums) as "sySuperviseCostsPremiums",
+        sum(a.sy_supervise_costs_proportion) as "sySuperviseCostsProportion",
+        sum(a.no_supervise_costs_premiums) as "noSuperviseCostsPremiums",
+        sum(a.no_supervise_costs_proportion) as "noSuperviseCostsProportion",
+        sum(a.jq_premium) as "jqPremium",
+        sum(a.sy_premium) as "syPremium",
+        sum(a.no_premium) as "noPremium",
+        sum(a.jq_other_costs_premium) as "jqOtherCostsPremium",
+        sum(a.sy_other_costs_premium) as "syOtherCostsPremium",
+        sum(a.no_other_costs_premium) as "noOtherCostsPremium",
+        sum(a.jq_other_costs_proportion) as "jqOtherCostsProportion",
+        sum(a.sy_other_costs_proportion) as "syOtherCostsProportion",
+        sum(a.no_other_costs_proportion) as "noOtherCostsProportion",
+        max(a.company_name) as "companyName",
+        max(a.partner_companies_name) as "partnerCompaniesName",
+        max(a.leader_name) as "leaderName",
+        CASE WHEN max(agree.agreement_type)='1' THEN "平台" ELSE "私有" END   as "agreementType",
+        max(agree.docking_person ) as "dockingPerson"
+        from ins_ply_income a
+        left join ptl_agreement agree  on  agree.id =a.agreement_id
         <where>
             <if test="vo.year !=null  and  vo.year !=''">
                 and DATE_FORMAT( a.signdate, '%Y') =#{vo.year}
             </if>
         </where>
+       GROUP BY  a.orderno
     </select>
 
 

+ 1 - 1
src/main/resources/mapper/modules/esm/EsmUserImageMapper.xml

@@ -23,7 +23,7 @@
     </sql>
 
     <select id="selectEsmUserImageQueryVo" resultMap="EsmUserImageQueryVo">
-        select i.type, i.images_id, f.url
+        select i.type, i.images_id, f.file_path as url
         from esm_user_image as i
                  left join ins_upload_files as f
                            on i.images_id = f.id

+ 78 - 4
src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml

@@ -938,9 +938,9 @@
 
     <select id="quotationDetailsExcel" resultType="com.ydtech.modules.admin.model.dto.QuotationDetailsExcel">
         select
-            iac.orderno as "orderno",
+            iac.id as "orderno",
             iac.agreement_id as "agreementId",
-            iac.orderstatus as "orderstatus",
+            iot.order_status as "orderstatus",
             iac.company_id as "companyId",
             agree.partner_companies_id as "partnerCompaniesId",
             ins.namesimple as "partnerCompaniesName",
@@ -959,7 +959,12 @@
             io.licenseno  as "licenseno",
             su1.name  as "userName",
             su1.leader_name  as "leaderName"
-            from ins_area_company iac
+            from
+            (
+            select iot.suborder,iot.order_status from `ins_orders_track` iot
+            GROUP BY iot.suborder ,iot.order_status
+            ) iot
+            left join ins_area_company  iac ON iac.id = iot.suborder
             LEFT JOIN ptl_agreement agree ON iac.agreement_id = agree.id
             LEFT JOIN ins_orders io ON iac.orderno = io.orderno
             LEFT JOIN sys_user su1  on  su1.id=io.userid
@@ -968,6 +973,7 @@
             LEFT JOIN esm_ins_company ins ON agree.partner_companies_id = ins.id
         <where>
             agree.id IS NOT NULL
+
             and (iac.del_flag = '1' or io.del_flag IS NULL or io.del_flag = 1)
             <if test="vo.companyId  != null  and  vo.companyId!='' ">
                 AND agree.insurance_company_id = #{vo.companyId}
@@ -3009,8 +3015,9 @@
             <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
                 AND   DATE_FORMAT( io.createtime, '%Y-%m-%d')   BETWEEN #{taskStatisticsVo.createtimeStart} AND #{taskStatisticsVo.createtimeEnd}
             </if>
+
             <if test="taskStatisticsVo.beginDate !=null and taskStatisticsVo.beginDate != '' and taskStatisticsVo.endDate !=null and taskStatisticsVo.endDate != ''">
-                AND   DATE_FORMAT( iac.signing_time, '%Y-%m-%d')   BETWEEN  DATE_FORMAT( #{taskStatisticsVo.beginDate}, '%Y-%m-%d') AND  DATE_FORMAT( #{taskStatisticsVo.endDate}, '%Y-%m-%d')
+                AND   DATE_FORMAT( iac.createtime, '%Y-%m-%d')   BETWEEN DATE_FORMAT( #{taskStatisticsVo.beginDate}, '%Y-%m-%d')  AND DATE_FORMAT( #{taskStatisticsVo.endDate}, '%Y-%m-%d')
             </if>
 
             <if test="taskStatisticsVo.deptIds != null and taskStatisticsVo.deptIds != '' and taskStatisticsVo.deptIds.size() > 0">
@@ -3876,4 +3883,71 @@
         ) a
         group by   a.companyId,a.insuranceCompanyName,a.parterCompanyId,a.partnerCompaniesName,a.logo,a.dockingPerson,a.dockingPhone,a.agreementType
     </select>
+
+    <select id="costReviewer" resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
+        SELECT
+        ifa.audituser as "audituser",
+        su.name as  "audituserName",
+        COUNT( CASE WHEN ifa.auditstatus = 1 THEN 1 END ) AS "auditstatusOrders",
+        COUNT( CASE WHEN ifa.auditstatus = 0 THEN 1 END ) AS "auditOrder",
+        COUNT( CASE WHEN ifa.auditstatus = 1 and   ifa.audituser != '自动审核' THEN 1 END ) AS "persionAudit",
+        COUNT( CASE WHEN ifa.audituser = '自动审核'  THEN 1 END ) AS "automaticAudit"
+        FROM
+        ins_fee_audit ifa
+        LEFT JOIN ins_orders io ON io.orderno = ifa.orderno
+        LEFT JOIN ins_area_company iac ON iac.orderno = io.orderno
+        LEFT JOIN ptl_agreement pa ON pa.id = iac.agreement_id
+        LEFT JOIN esm_ins_company eic ON eic.id = pa.partner_companies_id
+        left join sys_user  su  on su.id =ifa.audituser
+        <where>
+            1=1
+            and iac.id = ifa.ins_order_no
+            and iac.orderstatus = 3
+            and (iac.del_flag = '1' or io.del_flag IS NULL or io.del_flag = 1)
+            <if test="taskStatisticsVo.reviewer !=null  and  taskStatisticsVo.reviewer !=''">
+                and su.name =#{taskStatisticsVo.reviewer}
+            </if>
+
+            <if test="taskStatisticsVo.audittime !=null  and  taskStatisticsVo.audittime !=''">
+                and ifa.audittime =#{taskStatisticsVo.audittime}
+            </if>
+
+            <if test="taskStatisticsVo.companyId !=null  and  taskStatisticsVo.companyId !=''">
+                and iac.company_id =#{taskStatisticsVo.companyId}
+            </if>
+
+            <if test="taskStatisticsVo.createtimeStart !=null and taskStatisticsVo.createtimeStart != '' and taskStatisticsVo.createtimeEnd !=null and taskStatisticsVo.createtimeEnd != ''">
+                AND   DATE_FORMAT( iac.signing_time, '%Y-%m-%d')  BETWEEN  DATE_FORMAT( #{taskStatisticsVo.createtimeStart}, '%Y-%m-%d')   AND  DATE_FORMAT( #{taskStatisticsVo.createtimeEnd}, '%Y-%m-%d')
+            </if>
+
+            <if test="taskStatisticsVo.beginDate !=null and taskStatisticsVo.beginDate != '' and taskStatisticsVo.endDate !=null and taskStatisticsVo.endDate != ''">
+                AND   DATE_FORMAT( iac.signing_time, '%Y-%m-%d')   BETWEEN  DATE_FORMAT( #{taskStatisticsVo.beginDate}, '%Y-%m-%d')   AND  DATE_FORMAT( #{taskStatisticsVo.endDate}, '%Y-%m-%d')
+            </if>
+
+            <if test="taskStatisticsVo.auditTimeStart !=null and taskStatisticsVo.auditTimeEnd != '' and taskStatisticsVo.auditTimeStart !=null and taskStatisticsVo.auditTimeEnd != ''">
+                AND   DATE_FORMAT( ifa.audittime, '%Y-%m-%d')   BETWEEN  DATE_FORMAT( #{taskStatisticsVo.auditTimeStart}, '%Y-%m-%d')   AND  DATE_FORMAT( #{taskStatisticsVo.auditTimeEnd}, '%Y-%m-%d')
+            </if>
+
+            <if test="taskStatisticsVo.deptIds != null and taskStatisticsVo.deptIds != '' and taskStatisticsVo.deptIds.size() > 0">
+                AND io.deptid  in
+                <foreach collection="taskStatisticsVo.deptIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+
+            <if test="taskStatisticsVo.userIds != null and taskStatisticsVo.userIds != '' and taskStatisticsVo.userIds.size() > 0">
+                AND su.id  in
+                <foreach collection="taskStatisticsVo.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+            <choose>
+                <when test="taskStatisticsVo.riskCode != null and taskStatisticsVo.riskCode != '' and  taskStatisticsVo.riskCode != 'all' ">
+                    and iac.product = #{taskStatisticsVo.riskCode}
+                </when>
+            </choose>
+        </where>
+        GROUP BY
+        ifa.audituser
+    </select>
 </mapper>

+ 2 - 0
src/main/resources/mapper/modules/protocol/PtlAgreementGroupLinkDeptMapper.xml

@@ -58,6 +58,7 @@
                 ptl_agreement_group_link_agreement  pagla
                 LEFT JOIN ptl_agreement_group  pag    on  pagla.ptl_agreement_group_id = pag.id
             where pag.default_flag=1
+            and pag.del_flag=0
             UNION
             SELECT
                 pagla.ptl_agreement_id
@@ -68,6 +69,7 @@
                     LEFT JOIN ptl_agreement_group  pag    on  pagla.ptl_agreement_group_id = pag.id
             where
                 pag.default_flag=0
+              and pag.del_flag=0
                 and pagld.dept_id = #{deptId}
         )
         order by eic.order_num IS NULL, eic.order_num ASC