Browse Source

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

Qchen 1 year ago
parent
commit
9f09e28e47
25 changed files with 487 additions and 127 deletions
  1. 4 0
      src/main/java/com/ydtech/modules/admin/service/impl/TaskStatisticsServiceImpl.java
  2. 31 2
      src/main/java/com/ydtech/modules/fnc/controller/CarSettleController.java
  3. 4 0
      src/main/java/com/ydtech/modules/ins/model/vo/QuoteRespVo.java
  4. 5 5
      src/main/java/com/ydtech/modules/order/controller/InsAreaCompanyController.java
  5. 5 0
      src/main/java/com/ydtech/modules/order/controller/InsOrderReadPdfController.java
  6. 7 1
      src/main/java/com/ydtech/modules/order/controller/InsOrdersTrackController.java
  7. 1 1
      src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java
  8. 12 0
      src/main/java/com/ydtech/modules/order/entity/InsOrdersTrack.java
  9. 73 7
      src/main/java/com/ydtech/modules/order/entity/api/pingan/utils/PDFUtil.java
  10. 6 0
      src/main/java/com/ydtech/modules/order/entity/po/InsOrderPayDateRecord.java
  11. 7 0
      src/main/java/com/ydtech/modules/order/entity/vo/InsOrderReadPdfContentVo.java
  12. 7 0
      src/main/java/com/ydtech/modules/order/entity/vo/InsOrderReadPdfVo.java
  13. 11 2
      src/main/java/com/ydtech/modules/order/service/InsOrderPayDateRecordService.java
  14. 8 1
      src/main/java/com/ydtech/modules/order/service/InsOrdersTrackService.java
  15. 65 20
      src/main/java/com/ydtech/modules/order/service/impl/InsOrderPayDateRecordServiceImpl.java
  16. 0 3
      src/main/java/com/ydtech/modules/order/service/impl/InsOrderPdfUrlServiceImpl.java
  17. 1 0
      src/main/java/com/ydtech/modules/order/service/impl/InsOrderReadPdfServiceImpl.java
  18. 58 0
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersTrackServiceImpl.java
  19. 2 0
      src/main/java/com/ydtech/modules/order/service/impl/InsSubOrderUpdateDetailServiceImpl.java
  20. 66 0
      src/main/java/com/ydtech/modules/order/timer/UpdateOrderTimer.java
  21. 1 1
      src/main/resources/mapper/modules/admin/SysTelemarketingWechatDataMapper.xml
  22. 1 0
      src/main/resources/mapper/modules/admin/SysUserMapper.xml
  23. 30 24
      src/main/resources/mapper/modules/admin/TaskStatisticsMapper.xml
  24. 78 58
      src/main/resources/mapper/modules/order/InsAreaCompanyMapper.xml
  25. 4 2
      src/main/resources/mapper/modules/order/InsOrderReadPdfMapper.xml

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

@@ -611,6 +611,7 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         // 获取系统中的所有用户
         LambdaQueryWrapper<SysUser> queryWrapperUser = new LambdaQueryWrapper<>();
         queryWrapperUser.eq(SysUser :: getStatus,"1");
+        queryWrapperUser.notLike(SysUser::getId,"M");
         List<SysUser> users = this.sysUserMapper.selectList(queryWrapperUser);
 
         // 创建查询包装器,用于查询指定用户ID的用
@@ -623,6 +624,9 @@ public class TaskStatisticsServiceImpl  implements TaskStatisticsService {
         List<String> strIds = new ArrayList<>();
         // 递归获取第一级下属及其所有下属的ID
         findChildren(usersLevel1, users, strIds);
+        if(!strIds.contains(userId)){
+            strIds.add(userId);
+        }
         return strIds;
     }
 

+ 31 - 2
src/main/java/com/ydtech/modules/fnc/controller/CarSettleController.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.fnc.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -15,6 +16,7 @@ import com.ydtech.modules.fnc.entity.InsFeeAuditHistory;
 import com.ydtech.modules.fnc.entity.vo.ProblemOrderQueryVo;
 import com.ydtech.modules.fnc.service.InsFeeAuditHistoryService;
 import com.ydtech.modules.fnc.service.InsFeeAuditService;
+import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
 import com.ydtech.modules.order.constants.OrderFeeAuditHistroy;
 import com.ydtech.modules.order.entity.BasePageResult;
 import com.ydtech.modules.order.entity.InsAreaCompany;
@@ -32,6 +34,8 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -161,29 +165,54 @@ public class CarSettleController extends BaseController {
         if (underWrittenSubOrder == null) {
             return HttpResult.error("订单号有误-未承保");
         }
+        InsOrders insOrders = insOrdersService.getById(underWrittenSubOrder.getOrderno());
+        CustomerInfoVo customer = JSON.toJavaObject(insOrders.getInsureinfo(), CustomerInfoVo.class);
         JSONArray list = new JSONArray();
         List<InsOrdersTrack> insOrdersTracks = insOrdersTrackService.list(new LambdaQueryWrapper<InsOrdersTrack>().eq(InsOrdersTrack::getSuborder, orderno)
                 .orderByAsc(InsOrdersTrack::getCreateTime));
         insOrdersTracks.forEach(item->{
             String desc = OrderFeeAuditHistroy.getDesc(item.getOrderStatus());
             JSONObject jsonObject = new JSONObject();
+            jsonObject.put("id",item.getId());
             jsonObject.put("insCompany",item.getInsCompany());
             jsonObject.put("operatorTime",item.getCreateTime());
             jsonObject.put("audituser",item.getOperatorId());
             jsonObject.put("operator",item.getOperator());
             jsonObject.put("desc",desc);
-            jsonObject.put("remark",item.getRemark());
+            jsonObject.put("licenseNo",insOrders.getLicenseno());
+            jsonObject.put("insuredname",customer==null?"":customer.getName());
+           // jsonObject.put("remark",item.getRemark());
             list.add(jsonObject);
         });
-
+        List<InsOrdersTrack> insOrdersTracksCB = insOrdersTrackService.list(new LambdaQueryWrapper<InsOrdersTrack>().eq(InsOrdersTrack::getSuborder, orderno).eq(InsOrdersTrack::getOrderStatus,"3"));
         LambdaQueryWrapper<InsFeeAuditHistory> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(InsFeeAuditHistory::getInsOrderNo, orderno);
         wrapper.orderByAsc(InsFeeAuditHistory::getOperatorTime);
         List<InsFeeAuditHistory> insFeeAuditHistories = insFeeAuditHistoryService.list(wrapper);
         insFeeAuditHistories.forEach(item->{
             String desc = OrderFeeAuditHistroy.getDesc(OrderFeeAuditHistroy.convertStatus(item.getAuditstatus()));
+            //判断是待审核查询已承保的人的工号
+            if(OrderFeeAuditHistroy.OFH_5.getDesc().equals(desc)  ){
+                if(insOrdersTracksCB!=null && !insOrdersTracksCB.isEmpty()){
+                    item.setAudituser(insOrdersTracksCB.get(0).getOperatorId());
+                }
+            }
+            if("自动审核".equals(item.getAudituser())  ){
+                item.setOperator("自动审核");
+                item.setAudituser("");
+            }
             JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(item));
+            LocalDateTime operatorTime = item.getOperatorTime();
+            String dateStr = operatorTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+            jsonObject.put("id",item.getId());
+            jsonObject.put("insCompany",item.getInsCompany());
+            jsonObject.put("operatorTime",dateStr);
+            jsonObject.put("audituser",item.getAudituser());
+            jsonObject.put("operator",item.getOperator());
             jsonObject.put("desc",desc);
+            jsonObject.put("remark",null);
+            jsonObject.put("licenseNo",insOrders.getLicenseno());
+            jsonObject.put("insuredname",customer==null?"":customer.getName());
             list.add(jsonObject);
         });
 

+ 4 - 0
src/main/java/com/ydtech/modules/ins/model/vo/QuoteRespVo.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.ins.model.vo;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.order.entity.TaxArrears;
 import com.ydtech.modules.order.entity.crawler.response.CrawlerQuoteResponse;
@@ -38,6 +39,9 @@ public class QuoteRespVo {
     @ApiModelProperty("提示信息")
     private String tips;
 
+    @TableField(value = "orderstatus")
+    private String orderstatus;
+
     @ApiModelProperty("商业险险种")
     private List<QuoteKindRespVo> kindList;
 

+ 5 - 5
src/main/java/com/ydtech/modules/order/controller/InsAreaCompanyController.java

@@ -37,7 +37,7 @@ public class InsAreaCompanyController {
 
     private final InsOrderPdfUrlService  insOrderPdfUrlService;
 
-    private  InsOrderPayDateRecordService  insOrderPayDateRecordService;
+    private final InsOrderPayDateRecordService  insOrderPayDateRecordService;
 
     @GetMapping("/statusInquiry/{subOrderNo}")
     @ApiOperation("状态查询")
@@ -146,10 +146,10 @@ public class InsAreaCompanyController {
      *  @Date: 2024/10/21 14:54
      *  @Description: 更新保单的签单日期和缴费时间
      */
-    @GetMapping("/udapteOrderDate")
+    @GetMapping("/updateOrderDate")
     @ApiOperation("更新保单的签单日期和缴费时间")
     public HttpResult udapteOrderDate(String subOrderId) {
-        insOrderPayDateRecordService.udapteOrderDate(subOrderId);
+        insOrderPayDateRecordService.updateOrderDate(subOrderId);
         return HttpResult.ok("更新成功");
     }
 
@@ -159,10 +159,10 @@ public class InsAreaCompanyController {
      *  @Date: 2024/10/21 14:54
      *  @Description: 更新保单的签单日期和缴费时间
      */
-    @GetMapping("/udapteOrderDateRecord")
+    @GetMapping("/updateOrderDateRecord")
     @ApiOperation("更新保单的签单日期和缴费时间列表")
     public HttpResult<List<InsOrderPayDateRecord>> udapteOrderDateRecord(String subOrderId) {
-        List<InsOrderPayDateRecord> list=insOrderPayDateRecordService.udapteOrderDateRecord(subOrderId);
+        List<InsOrderPayDateRecord> list=insOrderPayDateRecordService.updateOrderDateRecord(subOrderId);
         return HttpResult.ok(list);
     }
 }

+ 5 - 0
src/main/java/com/ydtech/modules/order/controller/InsOrderReadPdfController.java

@@ -23,6 +23,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -133,4 +134,8 @@ public class InsOrderReadPdfController extends BaseController {
         BasePageResult<InsOrders> quoteResult = insOrdersService.queryPageOrderCB(orderQueryVo);
         return HttpResult.ok("success", quoteResult);
     }
+
+
+
+
 }

+ 7 - 1
src/main/java/com/ydtech/modules/order/controller/InsOrdersTrackController.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.controller;
 
 
+import com.alibaba.fastjson.JSONArray;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.order.entity.InsOrdersTrack;
 import com.ydtech.modules.order.service.InsOrdersTrackService;
@@ -36,5 +37,10 @@ public class InsOrdersTrackController {
         return HttpResult.ok(query);
     }
 
-
+    @GetMapping("/queryBySuborderDetails")
+    @ApiOperation(value = "子订单轨迹查询")
+    public HttpResult<JSONArray> queryBySuborderDetails(@RequestParam(required = false) String suborder) {
+        JSONArray list  = this.insOrdersTrackService.queryBySuborderDetails(suborder);
+        return HttpResult.ok(list);
+    }
 }

+ 1 - 1
src/main/java/com/ydtech/modules/order/entity/InsAreaCompany.java

@@ -64,7 +64,7 @@ public class InsAreaCompany implements Serializable {
      * @see com.ydtech.constants.enums.dict.InsOrderStatusEnum
      */
     @TableField(value = "orderstatus")
-    private String orderstatus;
+    private String orderstatus = "0";
     /**
      * 保险公司编号
      */

+ 12 - 0
src/main/java/com/ydtech/modules/order/entity/InsOrdersTrack.java

@@ -141,4 +141,16 @@ public class InsOrdersTrack implements Serializable {
         this.createTime = LocalDateTime.now();
         this.remark = remark;
     }
+    public InsOrdersTrack(String suborder, String companyId, String insCompany, String orderNo, String orderStatus, String operatorId, String operator, String remark,LocalDateTime createTime) {
+        this.suborder = suborder;
+        this.companyId = companyId;
+        this.insCompany = insCompany;
+        this.orderNo = orderNo;
+        this.orderStatus = orderStatus;
+        this.operatorId = operatorId;
+        this.operator = operator;
+        this.createTime = createTime;
+        this.remark = remark;
+    }
+
 }

+ 73 - 7
src/main/java/com/ydtech/modules/order/entity/api/pingan/utils/PDFUtil.java

@@ -13,11 +13,12 @@ import java.net.MalformedURLException;
 import java.net.URI;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.HashMap;
-import java.util.UUID;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static com.ydtech.modules.order.utils.InsuranceLog.logger;
+
 /**
  *  @version
  *  @author: hxl
@@ -172,6 +173,7 @@ public class PDFUtil {
             pdfStripper.setShouldSeparateByBeads(true);
             text= pdfStripper.getText(document);
             text = text.replaceAll("\\s+", " ");
+            logger.info(text);
             document.close();
         } catch (IOException e) {
             throw new RuntimeException(e);
@@ -180,6 +182,9 @@ public class PDFUtil {
     }
 
     public static String getPdfContentStr(String pdfText, String beginStr,String endStr,String dateType) {
+        if("end".equals(endStr)){
+            return getEndString(pdfText, beginStr);
+        }
         String contentStr = getContentStr(pdfText, beginStr, endStr);
         if(StringUtils.isNotBlank(contentStr)){
             contentStr=contentStr.replaceAll(" ", "");
@@ -189,11 +194,27 @@ public class PDFUtil {
             contentStr = contentStr.replaceAll("\\s+", "");
             contentStr = contentStr.replaceAll("[^\u4E00-\u9FA50-9年月日:-]+", "");
             contentStr = contentStr.replaceAll("时", "");
+            String longestRepeat = getRepeatedData(contentStr);
+            if(StringUtils.isNotBlank(longestRepeat)){
+                contentStr = longestRepeat;
+            }
         }
         return contentStr;
     }
 
     public static LocalDateTime getPdfContentDate(String pdfText, String beginStr,String endStr,String dateType) {
+        if("end".equals(endStr)){
+            String substring = getEndString(pdfText, beginStr);
+            String patten ="";
+            if("1".equals(dateType)){
+                patten ="yyyy-MM-dd HH:mm:ss";
+            }else if("2".equals(dateType)){
+                patten = "yyyy/MM/dd HH:mm:ss";
+            }else if("3".equals(dateType)){
+                patten = "yyyy年MM月dd日 HH:mm:ss";
+            }
+            return LocalDateTime.parse(substring, DateTimeFormatter.ofPattern(patten));
+        }
         String payDate = getContentStr(pdfText, beginStr, endStr);
         LocalDateTime payDateTime = null;
         if("1".equals(dateType)){
@@ -205,6 +226,31 @@ public class PDFUtil {
         }
         return payDateTime;
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/23 9:26
+     *  @Description: 截取开始到字符串结尾的字符
+     */
+    private static String getEndString(String pdfText, String beginStr) {
+        String substring = pdfText.substring(pdfText.indexOf(beginStr), pdfText.length());
+        substring=substring.replaceAll(beginStr, "");
+        substring=substring.replaceAll(beginStr, "");
+        substring = substring.replaceAll(" ", "");
+        substring = substring.replaceAll("\\n+", "");
+        substring = substring.replaceAll("\\t+", "");
+        substring = substring.replaceAll("\\r+", "");
+        substring = substring.replaceAll("\\s+", "");
+        if(substring.length() == 18){
+            substring = substring.substring(0,10)+" "+ substring.substring(10,18);
+        }else if(substring.length() == 15){
+            substring = substring.substring(0,10)+" "+ substring.substring(10,15)+":00";
+        }else if(substring.length() == 10){
+            substring = substring+" 00:00:00";
+        }
+        return substring;
+    }
+
     public static HashMap<String,LocalDateTime> getPdfContent(String pdfPath, String companyId){
         HashMap<String,LocalDateTime>  map =new  HashMap<String,LocalDateTime>();
         String pdfText = getPdfText(pdfPath);
@@ -421,6 +467,10 @@ public class PDFUtil {
             payDate = payDate.replaceAll("\\s+", "");
             payDate = payDate.replaceAll("[^\u4E00-\u9FA50-9年月日:]+", "");
             payDate = payDate.replaceAll("时", "");
+            String longestRepeat = getRepeatedData(payDate);
+            if(StringUtils.isNotBlank(longestRepeat)){
+                payDate = longestRepeat;
+            }
             int count = 0;
             int index = 0;
             while ((index = payDate.indexOf(":", index)) != -1) {
@@ -469,7 +519,21 @@ public class PDFUtil {
             return null;
         }
     }
-
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/22 15:08
+     *  @Description: 找出字符串中的重复值
+     */
+    private static String getRepeatedData(String input) {
+        String repeatedData = "";
+        Pattern pattern = Pattern.compile("(\\d{4}年\\d{1,2}月\\d{1,2}日)\\s*\\1");
+        Matcher matcher = pattern.matcher(input);
+        if (matcher.find()) {
+            repeatedData= matcher.group(1);
+        }
+        return repeatedData;
+    }
     public static String trafferHttpToLocalPath(String path) {
         if (path.contains("http") || path.contains("https")) {
             //转成本地路径
@@ -508,8 +572,8 @@ public class PDFUtil {
        // String pdfFilePath = "D:\\nasData\\carInsPolicy\\1823634528262541312\\晋JH6836-交强险保单.pdf"; // PDF文件路径
         //  HashMap<String, LocalDateTime> zmbx = getPdfContent(pdfFilePath, "TPBX");
         //恒邦
-        String pdfFilePath = "D:\\nasData\\carInsPolicy\\晋KLY103\\晋KLY103-交强险保单.pdf"; // PDF文件路径
-        HashMap<String, LocalDateTime> zmbx = getPdfContent(pdfFilePath, "HBIC");
+       // String pdfFilePath = "D:\\nasData\\carInsPolicy\\晋KLY103\\晋KLY103-交强险保单.pdf"; // PDF文件路径
+       // HashMap<String, LocalDateTime> zmbx = getPdfContent(pdfFilePath, "HBIC");
         //国任
         // String pdfFilePath = "D:\\nasData\\carInsPolicy\\晋A139LV\\晋A139LV-交强险保单.pdf"; // PDF文件路径
         //  HashMap<String, LocalDateTime> zmbx = getPdfContent(pdfFilePath, "XDCX");
@@ -602,11 +666,13 @@ public class PDFUtil {
         // String pdfFilePath = "D:\\bx\\ancheng\\f0b6430219fe3f32b2d63ab41dba95c4.pdf"; // PDF文件路径
         // HashMap<String, LocalDateTime> zmbx = getPdfContent(pdfFilePath, "ACIC");
         // 永安
-        // String pdfFilePath = "D:\\bx\\yongan\\交强.pdf"; // PDF文件路径
-        //   HashMap<String, LocalDateTime> zmbx = getPdfContent(pdfFilePath, "YAIC");
+        String pdfFilePath = "D:\\bx\\yongan\\交强.pdf"; // PDF文件路径
+           HashMap<String, LocalDateTime> zmbx = getPdfContent(pdfFilePath, "YAIC");
 
         System.out.println(zmbx.toString());
 
     }
 
+
+
 }

+ 6 - 0
src/main/java/com/ydtech/modules/order/entity/po/InsOrderPayDateRecord.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -31,6 +32,7 @@ public class InsOrderPayDateRecord implements Serializable {
     /**
      * 创建时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
@@ -41,21 +43,25 @@ public class InsOrderPayDateRecord implements Serializable {
     /**
      * 旧支付时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime oldPayDate;
 
     /**
      * 旧签单时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime oldSignTime;
 
     /**
      * 新支付时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime newPayDate;
 
     /**
      * 新签单时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime newSignTime;
 
     /**

+ 7 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsOrderReadPdfContentVo.java

@@ -24,4 +24,11 @@ public class InsOrderReadPdfContentVo implements Serializable {
     @NotBlank(message = "保单路径不能为空")
     @ApiModelProperty("保单路径")
     private String url;
+
+    /**
+     * 保单类型
+     */
+    @NotBlank(message = "保单类型不能为空")
+    @ApiModelProperty("保单类型  1. 交强 2 商业")
+    private String type;
 }

+ 7 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsOrderReadPdfVo.java

@@ -69,4 +69,11 @@ public class InsOrderReadPdfVo implements Serializable {
     @ApiModelProperty(value = "页数")
     @Min(value = 1, message = "页数最小为1")
     private int pageNum;
+
+    /**
+     * 类型
+     */
+    @ApiModelProperty("类型 1.交强 2.商业")
+    private String type;
+
 }

+ 11 - 2
src/main/java/com/ydtech/modules/order/service/InsOrderPayDateRecordService.java

@@ -17,12 +17,21 @@ public interface InsOrderPayDateRecordService extends IService<InsOrderPayDateRe
      *  @Date: 2024/10/21 14:59
      *  @Description: 更新签单时间和签单日期
      */
-    void udapteOrderDate(String subOrderId);
+    void updateOrderDate(String subOrderId);
     /**
      *  @version
      *  @author: hxl
      *  @Date: 2024/10/21 17:01
      *  @Description:  查看更新时间记录
      */
-    List<InsOrderPayDateRecord> udapteOrderDateRecord(String subOrderId);
+    List<InsOrderPayDateRecord> updateOrderDateRecord(String subOrderId);
+
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/22 11:07
+     *  @Description: 定时更新订单的时间
+     */
+     void batchOrderDate(String beginDate,String endDate);
 }

+ 8 - 1
src/main/java/com/ydtech/modules/order/service/InsOrdersTrackService.java

@@ -1,5 +1,6 @@
 package com.ydtech.modules.order.service;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrdersTrack;
@@ -56,5 +57,11 @@ public interface InsOrdersTrackService extends IService<InsOrdersTrack> {
                 .orderByAsc(InsOrdersTrack::getCreateTime)
                 .list();
     }
-
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/23 11:42
+     *  @Description: 查询订单轨迹
+     */
+    JSONArray queryBySuborderDetails(String suborder);
 }

+ 65 - 20
src/main/java/com/ydtech/modules/order/service/impl/InsOrderPayDateRecordServiceImpl.java

@@ -7,23 +7,25 @@ import com.ydtech.modules.base.controller.BaseController;
 import com.ydtech.modules.esm.model.EsmInsCompany;
 import com.ydtech.modules.order.dao.InsOrderPayDateRecordMapper;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrdersTrack;
 import com.ydtech.modules.order.entity.api.pingan.utils.PDFUtil;
+import com.ydtech.modules.order.entity.dto.ReadPdfUrlDto;
 import com.ydtech.modules.order.entity.dto.ReadPdfUrlListDto;
 import com.ydtech.modules.order.entity.po.InsOrderPayDateRecord;
 import com.ydtech.modules.order.entity.po.InsOrderReadPdf;
-import com.ydtech.modules.order.service.InsAreaCompanyService;
-import com.ydtech.modules.order.service.InsOrderPayDateRecordService;
-import com.ydtech.modules.order.service.InsOrderPdfUrlService;
-import com.ydtech.modules.order.service.InsOrderReadPdfService;
+import com.ydtech.modules.order.service.*;
+import com.ydtech.utils.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author Administrator
@@ -52,6 +54,9 @@ public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDat
     @Autowired
     private InsOrderReadPdfService  insOrderReadPdfService;
 
+    @Autowired
+    private InsOrdersTrackService insOrdersTrackService;
+
     /**
      *  @version
      *  @author: hxl
@@ -59,7 +64,7 @@ public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDat
      *  @Description: 更新签单日期和缴费时间
      */
     @Override
-    public void udapteOrderDate(String subOrderId) {
+    public void updateOrderDate(String subOrderId) {
         ReadPdfUrlListDto readPdfUrlListDto =null;
         try{
              readPdfUrlListDto = insOrderPdfUrlService.readPdfUrlList(subOrderId, false);
@@ -70,50 +75,69 @@ public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDat
         InsAreaCompany subOrder = insAreaCompanyService.getById(subOrderId);
         if(readPdfUrlListDto!=null){
             String code ="";
-            String fileurl ="";
+            String jqFileurl ="";
+            String sqFileurl ="";
             //判断订单交强路径是否为空
             if(readPdfUrlListDto.getOldfileList()!=null && !readPdfUrlListDto.getOldfileList().isEmpty()){
-                code="jq";
+                code="1";
                 //交强
-                fileurl = readPdfUrlListDto.getOldfileList().get(0).getFileurl();
-            }else if(readPdfUrlListDto.getBusinessList()!=null && !readPdfUrlListDto.getBusinessList().isEmpty()){
-                code="sy";
+                ReadPdfUrlDto jq= readPdfUrlListDto.getOldfileList().stream().filter(s->s.getFileTitle().equals("交强电子保单")).collect(Collectors.toList()).get(0);
+                if(jq!=null){
+                    jqFileurl = jq.getFileurl();
+                }
+            }
+            if(readPdfUrlListDto.getBusinessList()!=null && !readPdfUrlListDto.getBusinessList().isEmpty()){
                 //商业
-                fileurl = readPdfUrlListDto.getBusinessList().get(0).getFileurl();
-            }else{
-                throw   new SystemException("保单路径错误");
+                ReadPdfUrlDto sy= readPdfUrlListDto.getBusinessList().stream().filter(s->s.getFileTitle().equals("商业电子保单")).collect(Collectors.toList()).get(0);
+                if(sy!=null){
+                    sqFileurl = sy.getFileurl();
+                }
+            }
+            if(StringUtils.isBlank(jqFileurl)){
+                jqFileurl=sqFileurl;
+                code="2";
             }
-            if(StringUtils.isNotBlank(fileurl)){
-                fileurl = fileurl.replaceAll(apiUrl+showFileUrl, "");
-                fileurl = uploadFilePath+fileurl;
+            String localUrl ="";
+            if(StringUtils.isNotBlank(jqFileurl)){
+                localUrl = PDFUtil.trafferHttpToLocalPath(jqFileurl);
             }
             //通过保险公司配置读取截取的前缀和后缀
             LambdaQueryWrapper<InsOrderReadPdf> qws = new LambdaQueryWrapper<>();
             qws.eq(InsOrderReadPdf::getCompanyId,subOrder.getCompanyId());
+            qws.eq(InsOrderReadPdf::getType,code);
             List<InsOrderReadPdf> list = insOrderReadPdfService.list(qws);
             HashMap<String,LocalDateTime> map=new HashMap<>();
             HashMap<String,LocalDateTime> oldMap=new HashMap<>();
             oldMap.put("payDate",subOrder.getPayDate());
             oldMap.put("signingTime",subOrder.getPayDate());
-            String pdfText = PDFUtil.getPdfText(fileurl);
+            String pdfText = PDFUtil.getPdfText(localUrl);
             if(StringUtils.isNotBlank(pdfText)){
                 if(list!=null  && list.size()>0){
                     for(InsOrderReadPdf insOrderReadPdf:list){
                        LocalDateTime pdfContentDate = PDFUtil.getPdfContentDate(pdfText, insOrderReadPdf.getReadBegin(), insOrderReadPdf.getReadEnd(), insOrderReadPdf.getReadType());
-                       map.put(insOrderReadPdf.getReadName(),pdfContentDate);
+                       map.put(insOrderReadPdf.getOrderMsg(),pdfContentDate);
                     }
                 }
             }
+            //刪除临时文件
+            if (jqFileurl.contains("http") || jqFileurl.contains("https")) {
+                File file =new File(localUrl);
+                file.delete();
+            }
             //插入數據
             InsOrderPayDateRecord  dto=new InsOrderPayDateRecord(null, subOrderId, new Date(), new BaseController().getUserId(), subOrder.getPayDate(), subOrder.getSigningTime(), map.get("payDate"), map.get("signingTime"), oldMap.toString(), map.toString());
             this.save(dto);
             if(map.get("payDate")!=null){
                 subOrder.setPayDate(map.get("payDate"));
+                //插入轨迹表
+               // InsOrdersTrack insOrdersTrack = new InsOrdersTrack(subOrder.getId(), subOrder.getCompanyId(), subOrder.getInscompany(), subOrder.getOrderno(), "缴费时间", new BaseController().getUser().getId(), new BaseController().getUser().getName(),"缴费时间",map.get("payDate"));
+               // insOrdersTrackService.save(insOrdersTrack);
             }
             if(map.get("signingTime")!=null){
                 subOrder.setSigningTime(map.get("signingTime"));
             }
-           // insAreaCompanyService.save(subOrder);
+            //更新时间表
+             insAreaCompanyService.save(subOrder);
 
         }else{
            throw   new SystemException("生成保单失败");
@@ -126,11 +150,32 @@ public class InsOrderPayDateRecordServiceImpl extends ServiceImpl<InsOrderPayDat
      *  @Description:  查看保单修改记录
      */
     @Override
-    public List<InsOrderPayDateRecord> udapteOrderDateRecord(String subOrderId) {
+    public List<InsOrderPayDateRecord> updateOrderDateRecord(String subOrderId) {
         LambdaQueryWrapper<InsOrderPayDateRecord> lqw = new LambdaQueryWrapper<>();
         lqw.eq(InsOrderPayDateRecord::getSubOrderNo, subOrderId);
         return this.list(lqw);
     }
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/22 10:51
+     *  @Description: 定时更新订单的缴费时间和签单日期
+     */
+    public void batchOrderDate(String beginDate,String endDate) {
+       //查询当前时间0点 到当前时间范围内的已承保的订单  并更新时间 HH:mm:ss
+       List<InsAreaCompany> list = insAreaCompanyService.findListByDate(beginDate,endDate);
+       if(list!=null && list.size()>0){
+           for(InsAreaCompany  insAreaCompany : list){
+               try{
+                   //更新時間
+                   updateOrderDate(insAreaCompany.getId());
+               }catch(Exception e){
+
+               }
+           }
+       }
+    }
 }
 
 

+ 0 - 3
src/main/java/com/ydtech/modules/order/service/impl/InsOrderPdfUrlServiceImpl.java

@@ -143,9 +143,6 @@ public class InsOrderPdfUrlServiceImpl extends ServiceImpl<InsOrderPdfUrlMapper,
         }
         subOrder.setJyPolicyNo(jyPolicyNo);
         if(insOrders.getIsExternal()!=null && insOrders.getIsExternal() ==1){
-            if(flag ){
-                throw  new SystemException("外部订单不允许重新生成");
-            }
             //外部订单
             return insAreaCompanyExternalPolicyService.getPolicyByCompanyIdPdfList(subOrder,insOrders);
         }

+ 1 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsOrderReadPdfServiceImpl.java

@@ -69,6 +69,7 @@ public class InsOrderReadPdfServiceImpl extends ServiceImpl<InsOrderReadPdfMappe
     public InsOrderReadPdfContentDto readPdfContent(InsOrderReadPdfContentVo insOrderReadPdfContentVo) {
         LambdaQueryWrapper<InsOrderReadPdf> qw = new LambdaQueryWrapper<>();
         qw.eq(InsOrderReadPdf::getCompanyId,insOrderReadPdfContentVo.getCompanyId());
+        qw.eq(InsOrderReadPdf::getType,insOrderReadPdfContentVo.getType());
         List<InsOrderReadPdf> list = this.list(qw);
         String url = insOrderReadPdfContentVo.getUrl();
         String laoclUrl = PDFUtil.trafferHttpToLocalPath(url);

+ 58 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersTrackServiceImpl.java

@@ -2,14 +2,29 @@ package com.ydtech.modules.order.service.impl;
 
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.stp.StpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.constants.enums.dict.InsOrderStatusAllEnum;
+import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
+import com.ydtech.modules.order.constants.OrderFeeAuditHistroy;
 import com.ydtech.modules.order.dao.InsOrdersTrackMapper;
 import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.InsOrdersTrack;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.order.service.InsOrdersTrackService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author Administrator
  * @description 针对表【ins_orders_track(订单轨迹表)】的数据库操作Service实现
@@ -19,6 +34,13 @@ import org.springframework.stereotype.Service;
 public class InsOrdersTrackServiceImpl extends ServiceImpl<InsOrdersTrackMapper, InsOrdersTrack>
         implements InsOrdersTrackService {
 
+    @Lazy
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+    @Lazy
+    @Autowired
+    private InsOrdersService insOrdersService;
+
     @Override
     public void addingTrajectories(InsAreaCompany insAreaCompany) {
         SaSession saSession = StpUtil.getSessionByLoginId(StpUtil.getLoginId());
@@ -40,6 +62,42 @@ public class InsOrdersTrackServiceImpl extends ServiceImpl<InsOrdersTrackMapper,
         InsOrdersTrack insOrdersTrack = new InsOrdersTrack(insAreaCompany, "admin", "自动操作");
         this.baseMapper.insert(insOrdersTrack);
     }
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/23 11:43
+     *  @Description:  查询订单轨迹
+     */
+    @Override
+    public JSONArray queryBySuborderDetails(String suborder) {
+         List<InsOrdersTrack> list = this.lambdaQuery()
+                .eq(InsOrdersTrack::getSuborder, suborder)
+                .orderByAsc(InsOrdersTrack::getCreateTime)
+                .list();
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getById(suborder);
+
+        InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
+        CustomerInfoVo customer = JSON.toJavaObject(insOrders.getInsureinfo(), CustomerInfoVo.class);
+        JSONArray arrayList = new JSONArray();
+        if(list!=null && !list.isEmpty()){
+            list.forEach(item->{
+                InsOrderStatusAllEnum insOrderStatusAllEnum = InsOrderStatusAllEnum.matchKey(item.getOrderStatus());
+                String desc = insOrderStatusAllEnum.getDesc();
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("insCompany",item.getInsCompany());
+                jsonObject.put("operatorTime",item.getCreateTime());
+                jsonObject.put("audituser",item.getOperatorId());
+                jsonObject.put("operator",item.getOperator());
+                jsonObject.put("desc",desc);
+                jsonObject.put("licenseNo",insOrders.getLicenseno());
+                jsonObject.put("insuredname",customer==null?"":customer.getName());
+                arrayList.add(jsonObject);
+            });
+        }
+        return arrayList;
+    }
+
+
 }
 
 

+ 2 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsSubOrderUpdateDetailServiceImpl.java

@@ -105,6 +105,7 @@ public class InsSubOrderUpdateDetailServiceImpl extends ServiceImpl<InsSubOrderU
                 //插入轨迹表
                 insOrdersTrack.setOrderType("2");
                 insOrdersTrack.setOrderStatus("人工核保");
+                insOrdersTrack.setRemark(null);
                 insOrdersTrackService.save(insOrdersTrack);
                 LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
                 insOrdersTrack.setCreateTime(localDateTime);
@@ -116,6 +117,7 @@ public class InsSubOrderUpdateDetailServiceImpl extends ServiceImpl<InsSubOrderU
             if(InsOrderStatusEnum.QUOTE_ING.getCode().equals(oldStatus) &&  InsOrderStatusEnum.WAIT_PAY.getCode().equals(newStatus)){
                 insOrdersTrack.setOrderType("1");
                 insOrdersTrack.setOrderStatus("自动核保");
+                insOrdersTrack.setRemark(null);
                 LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
                 insOrdersTrack.setCreateTime(localDateTime);
                 insOrdersTrackService.save(insOrdersTrack);

+ 66 - 0
src/main/java/com/ydtech/modules/order/timer/UpdateOrderTimer.java

@@ -0,0 +1,66 @@
+package com.ydtech.modules.order.timer;
+
+import com.ydtech.modules.order.service.InsOrderPayDateRecordService;
+import com.ydtech.utils.DateUtil;
+import com.ydtech.utils.DateUtil_N;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2024/10/22 10:45
+ *  @Description:  定时订单的缴费时间和签单时间
+ */
+@Slf4j
+@Component
+public class UpdateOrderTimer {
+
+    @Autowired
+    private InsOrderPayDateRecordService insOrderPayDateRecordService;
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2024/10/22 10:47
+     *  @Description:
+     * 中午一点
+     * 凌晨一点
+     */
+    @Scheduled(cron = "0 0 13 * * ?")
+    private void updateOrderDateNoon() {
+        log.info("定时更新订单的签单时间和缴费日期,启动时间:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+        //凌晨1点到中午1点
+        String benginDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd")+" 01:00:00";
+        String endDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss");
+        try {
+            insOrderPayDateRecordService.batchOrderDate(benginDate,endDate);
+            log.info("定时更新订单的签单时间和缴费日期成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("定时更新订单的签单时间和缴费日期失败:{}", e.getMessage());
+        }
+    }
+
+
+    @Scheduled(cron = "0 0 1 * * ?")
+    private void updateOrderDateBeforeDawn() {
+        log.info("定时更新订单的签单时间和缴费日期,启动时间:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+        //中午1点到凌晨1点
+        String benginDate = DateUtil.getDateFormat(DateUtil_N.getPreviousDate(new Date()), "yyyy-MM-dd")+" 13:00:01";
+        String endDate = DateUtil.getDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss");
+        try {
+            insOrderPayDateRecordService.batchOrderDate(benginDate,endDate);
+            log.info("定时更新订单的签单时间和缴费日期成功");
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("定时更新订单的签单时间和缴费日期失败:{}", e.getMessage());
+        }
+    }
+}

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

@@ -65,7 +65,7 @@
             </if>
 
             <if test="vo.userIds != null and vo.userIds != '' and vo.userIds.size() > 0">
-                AND t1.id  in
+                AND t1.leader_id  in
                 <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach>

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

@@ -1943,6 +1943,7 @@
         select *
         from sys_user su
         where su.status = 1
+          and su.id   NOT LIKE '%M%'
         and  su.leader_id =#{userId}
     </select>
 

+ 30 - 24
src/main/resources/mapper/modules/admin/TaskStatisticsMapper.xml

@@ -55,7 +55,7 @@
                 and su.id=#{vo.userId}
             </if>
             <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
-                and su.id in
+                and su.leader_id in
                 <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach>
@@ -106,7 +106,7 @@
                 and su.id=#{vo.userId}
             </if>
             <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
-                and su.id in
+                and su.leader_id in
                 <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach>
@@ -173,7 +173,7 @@
             </if>
 
             <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
-                and su.id in
+                and su.leader_id in
                 <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
                     #{item}
                 </foreach>
@@ -192,13 +192,6 @@
                     #{item}
                 </foreach>
             </if>
-
-            <if test="vo.userIds != null and vo.userIds != '' and vo.userIds.size() > 0">
-                AND io.userid in
-                <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
-                    #{item}
-                </foreach>
-            </if>
         </where>
     </select>
 
@@ -212,7 +205,6 @@
                  left join sys_dept sd on sd.id =su.dept_id
         <where>
              1=1
-            and iac.orderstatus ='3'
             <if test="vo.createtimeStart  != null  and  vo.createtimeStart!=''  and vo.createtimeEnd  != null  and  vo.createtimeEnd!=''">
                 AND DATE_FORMAT( iac.signing_time, '%Y-%m-%d') BETWEEN DATE_FORMAT( #{vo.createtimeStart}, '%Y-%m-%d') AND
                 DATE_FORMAT( #{vo.createtimeEnd}, '%Y-%m-%d')
@@ -233,6 +225,15 @@
                 </foreach>
             </if>
 
+
+
+            <if test="vo.userIds  !=null  and vo.userIds!=''  and vo.userIds.size()>0">
+                and su.leader_id in
+                <foreach collection="vo.userIds" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+
             <if test="vo.managementSource !=null  and vo.managementSource!=''">
                 and sd.management_source=#{vo.managementSource}
             </if>
@@ -334,20 +335,25 @@
     <select id="channelAgentDetails" resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
         SELECT
         iac.inscompany,
-        COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) AS qutationCount,
-        COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) AS underwritingCount,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
-        COUNT( CASE WHEN iac.orderstatus = 4 THEN 1 END ) AS underwritingReturn,
-        COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ) / COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) AS "passingRate",
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) / COUNT( iac.orderstatus ) AS "closeRate",
-        (COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) + COUNT( CASE WHEN iac.orderstatus = 2 THEN 1 END ))/ COUNT(
-        iac.orderstatus ) AS "contributionRate",
-        COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) / COUNT( iac.orderstatus ) AS "quotationRate",
-        COUNT(CASE WHEN io.order_source = 0 and iac.orderstatus = 0 THEN 1 END) as "pcOrderSource",
-        COUNT(CASE WHEN io.order_source = 1 and iac.orderstatus = 0 THEN 1 END) as "appOrderSource",
-        COUNT( CASE WHEN iac.orderstatus = 1 THEN 1 END ) AS "auditOrder"
+
+        COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS qutationCount,
+        COUNT( CASE WHEN iot.order_status = '2' THEN 1 END ) AS underwritingCount,
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) AS qutationInsureCount,
+        COUNT( CASE WHEN iot.order_status = '4' THEN 1 END ) AS underwritingReturn,
+        COUNT( CASE WHEN iot.order_status = '2' THEN 1 END ) / COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS "passingRate",
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) / COUNT( CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END ) AS "closeRate",
+        (COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) + COUNT( CASE WHEN  iot.order_status = '2'  THEN 1 END ))/ COUNT(
+        CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END ) AS "contributionRate",
+        COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) / COUNT( CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END ) AS "quotationRate",
+        COUNT(CASE WHEN io.order_source = 0 and iot.order_status = '0' THEN 1 END) as "pcOrderSource",
+        COUNT(CASE WHEN io.order_source = 1 and iot.order_status = '0' THEN 1 END) as "appOrderSource",
+        COUNT( CASE WHEN iot.order_status = '1' THEN 1 END ) AS "auditOrder"
         FROM
-        ins_area_company iac
+        (
+        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 ins_orders io ON io.orderno = iac.orderno
         LEFT JOIN sys_dept sd ON sd.id = io.deptid
         <where>

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

@@ -1066,19 +1066,23 @@
         io.userid AS "userId",
         sd.parent_id as "deptId",
         sd.management_source as "managementSource",
-        COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) AS qutationCount,
-        COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ) AS underwritingCount,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
-        COUNT( CASE WHEN iac.orderstatus = 4 THEN 1 END ) AS underwritingReturn,
-        COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ) / COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) AS "passingRate",
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) /  COUNT( iac.orderstatus ) AS "closeRate",
-        (COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )  +  COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ))/ COUNT( iac.orderstatus ) AS "contributionRate",
-        COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) / COUNT( iac.orderstatus ) AS "quotationRate",
-        COUNT(CASE WHEN io.order_source = 0  and iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END) as "pcOrderSource",
-        COUNT(CASE WHEN io.order_source = 1  and iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END) as "appOrderSource",
-        COUNT( CASE WHEN iac.orderstatus in( 1 , 2 , 3 ,4) THEN 1 END ) AS "auditOrder"
+        COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS qutationCount,
+        COUNT( CASE WHEN iot.order_status ='2' THEN 1 END ) AS underwritingCount,
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) AS qutationInsureCount,
+        COUNT( CASE WHEN iot.order_status = '4' THEN 1 END ) AS underwritingReturn,
+        COUNT( CASE WHEN iot.order_status ='2' THEN 1 END ) / COUNT( CASE WHEN iot.order_status ='0' THEN 1 END ) AS "passingRate",
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) /  COUNT(  CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END ) AS "closeRate",
+        (COUNT( CASE WHEN iot.order_status = '3' THEN 1 END )  +  COUNT( CASE WHEN iot.order_status = '2' THEN 1 END ))/ COUNT(CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END) AS "contributionRate",
+        COUNT( CASE WHEN iot.order_status  = '0' THEN 1 END ) / COUNT(CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END  ) AS "quotationRate",
+        COUNT(CASE WHEN io.order_source = 0  and iot.order_status ='0' THEN 1 END) as "pcOrderSource",
+        COUNT(CASE WHEN io.order_source = 1  and iot.order_status ='0' THEN 1 END) as "appOrderSource",
+        COUNT( CASE WHEN iot.order_status = '1' THEN 1 END ) AS "auditOrder"
         FROM
-        ins_area_company iac
+        (
+        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 ins_orders io ON io.orderno = iac.orderno
         LEFT JOIN sys_dept sd ON sd.id = io.deptid
         <where>
@@ -1172,19 +1176,24 @@
         io.userid AS "userId",
         sd.parent_id as "deptId",
         sd.management_source as "managementSource",
-        COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) AS qutationCount,
-        COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ) AS underwritingCount,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
-        COUNT( CASE WHEN iac.orderstatus = 4 THEN 1 END ) AS underwritingReturn,
-        COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ) / COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) AS "passingRate",
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) /  COUNT( iac.orderstatus ) AS "closeRate",
-        (COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )  +  COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ))/ COUNT( iac.orderstatus ) AS "contributionRate",
-        COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) / COUNT( iac.orderstatus ) AS "quotationRate",
-        COUNT(CASE WHEN io.order_source = 0  and iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END) as "pcOrderSource",
-        COUNT(CASE WHEN io.order_source = 1  and iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END) as "appOrderSource",
-        COUNT( CASE WHEN iac.orderstatus in( 1 , 2 , 3 ,4) THEN 1 END ) AS "auditOrder"
+
+        COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS qutationCount,
+        COUNT( CASE WHEN iot.order_status  ='2' THEN 1 END ) AS underwritingCount,
+        COUNT( CASE WHEN iot.order_status  = '3' THEN 1 END ) AS qutationInsureCount,
+        COUNT( CASE WHEN iot.order_status =  '4' THEN 1 END ) AS underwritingReturn,
+        COUNT( CASE WHEN iot.order_status  = '2' THEN 1 END ) / COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS "passingRate",
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) /  COUNT( CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END) AS "closeRate",
+        (COUNT( CASE WHEN iot.order_status = '3' THEN 1 END )  +  COUNT( CASE WHEN iot.order_status =  '2' THEN 1 END ))/ COUNT(CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END) AS "contributionRate",
+        COUNT( CASE WHEN iot.order_status  ='0' THEN 1 END ) / COUNT(CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END ) AS "quotationRate",
+        COUNT(CASE WHEN io.order_source = 0  and iot.order_status = '0' THEN 1 END) as "pcOrderSource",
+        COUNT(CASE WHEN io.order_source = 1  and iot.order_status = '0' THEN 1 END) as "appOrderSource",
+        COUNT( CASE WHEN iot.order_status ='1' THEN 1 END ) AS "auditOrder"
         FROM
-        ins_area_company iac
+        (
+        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 ins_orders io ON io.orderno = iac.orderno
         LEFT JOIN sys_dept sd ON sd.id = io.deptid
         <where>
@@ -1414,7 +1423,7 @@
 
 
     <select id="insuranceCompanyQueryPage"  resultType="com.ydtech.modules.admin.model.dto.TaskStatisticsDto">
-        SELECT
+        select
         a.*,
         ( SELECT eic.namesimple FROM esm_ins_company eic WHERE eic.id = a.partner_companies_id ) AS "partnerCompaniesName"
         FROM
@@ -1423,18 +1432,21 @@
         pa.insurance_company_id,
         pa.partner_companies_id,
         pa.insurance_company AS "insuranceCompanyName",
-        COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) AS qutationCount,
-        COUNT( CASE WHEN iac.orderstatus in( 1 , 2 , 3 ,4) THEN 1 END ) AS "auditOrder",
-        COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ) AS underwritingCount,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
-        COUNT( CASE WHEN iac.orderstatus = 4 THEN 1 END ) AS underwritingReturn,
-
-        COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ) / COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) AS "passingRate",
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) / COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) AS "closeRate",
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) / COUNT( iac.orderstatus ) AS "contributionRate",
-        COUNT( CASE WHEN iac.orderstatus = 0 THEN 1 END ) / COUNT( iac.orderstatus ) AS "quotationRate"
+        COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS qutationCount,
+        COUNT( CASE WHEN iot.order_status  = '1' THEN 1 END ) AS "auditOrder",
+        COUNT( CASE WHEN iot.order_status  = '2' THEN 1 END ) AS underwritingCount,
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) AS qutationInsureCount,
+        COUNT( CASE WHEN iot.order_status = '4' THEN 1 END ) AS underwritingReturn,
+        COUNT( CASE WHEN iot.order_status  ='2' THEN 1 END ) / COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS "passingRate",
+        COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) / COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) AS "closeRate",
+        (COUNT( CASE WHEN iot.order_status = '3' THEN 1 END ) + COUNT( CASE WHEN iot.order_status = '2' THEN 1 END )) / COUNT( iot.order_status ) AS "contributionRate",
+        COUNT( CASE WHEN iot.order_status = '0' THEN 1 END ) / COUNT( iot.order_status ) AS "quotationRate"
         FROM
-        ins_area_company iac
+        (
+        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 ins_fee_audit ifa ON ifa.ins_order_no = iac.id
         LEFT JOIN ptl_agreement pa ON pa.id = iac.agreement_id
         LEFT JOIN ins_orders io ON io.orderno = iac.orderno
@@ -1552,17 +1564,21 @@
         suLeader.name as "leaderName",
         suLeader.mobile as "leaderMobile",
         sd.management_source as "managementSource",
-        COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END ) AS qutationCount,
-        COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ) AS underwritingCount,
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ) AS qutationInsureCount,
-        COUNT( CASE WHEN iac.orderstatus = 4 THEN 1 END ) AS underwritingReturn,
-        (COUNT( CASE WHEN iac.orderstatus in (2,3) THEN 1 END ) +COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END ))  /  COUNT(iac.orderstatus)  as "passingRate",
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )  /  COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END )  as "closeRate",
-        COUNT( CASE WHEN iac.orderstatus = 3 THEN 1 END )  /  COUNT(iac.orderstatus)  as  "contributionRate",
-        COUNT( CASE WHEN iac.orderstatus in ( 0 ,1 , 2 , 3 ,4) THEN 1 END )  /  COUNT(iac.orderstatus)  as "quotationRate",
-        COUNT( CASE WHEN iac.orderstatus in( 1 , 2 , 3 ,4) THEN 1 END  )   as  "auditOrder"
+        COUNT( CASE WHEN iot.order_status  = '0' THEN 1 END ) AS qutationCount,
+        COUNT( CASE WHEN iot.order_status  = '2' THEN 1 END ) AS underwritingCount,
+        COUNT( CASE WHEN iot.order_status =  '3' THEN 1 END ) AS qutationInsureCount,
+        COUNT( CASE WHEN iot.order_status =  '4' THEN 1 END ) AS underwritingReturn,
+        COUNT( CASE WHEN iot.order_status = '2' THEN 1 END )  /  COUNT( CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END )  as "passingRate",
+        COUNT( CASE WHEN iot.order_status =  '3' THEN 1 END )  /  COUNT( CASE WHEN iot.order_status ='0' THEN 1 END )  as "closeRate",
+        COUNT( CASE WHEN iot.order_status =  '3' THEN 1 END )  /  COUNT( CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END )  as  "contributionRate",
+        COUNT( CASE WHEN iot.order_status =  '0' THEN 1 END )  /  COUNT( CASE WHEN  iot.order_status in ('0','1','2','3','4') THEN 1 END )  as "quotationRate",
+        COUNT( CASE WHEN iot.order_status =  '1' THEN 1 END  )   as  "auditOrder"
         FROM
-        ins_area_company iac
+        (
+        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 ins_orders io on io.orderno = iac.orderno
         left join sys_dept sd on sd.id=io.deptid
         left join sys_user su on su.id=io.userid
@@ -3159,9 +3175,9 @@
         SELECT
         iac.id as orderno,
         io.quoteno,
-        io.orderstatus,
-        io.company_id,
-        io.ins_company,
+        iac.orderstatus,
+        iac.company_id,
+        iac.inscompany,
         io.carinfo,
         io.userid,
         io.username,
@@ -3221,7 +3237,7 @@
             AND json_extract(io.insureinfo, '$.name') = #{params.insuredName}
         </if>
         <if test="params.companyId != null and params.companyId != ''">
-            AND io.company_id = #{params.companyId}
+            AND iac.company_id = #{params.companyId}
         </if>
         <if test="params.engineNo != null and params.engineNo != ''">
             and JSON_EXTRACT( io.carinfo, '$.engineNo' ) = #{params.engineNo}
@@ -3294,10 +3310,10 @@
 
     <select id="getExpectNetProfit" resultType="com.ydtech.modules.order.entity.InsAreaCompany">
         select
-        sum(IFNULL(ifon.jq_costs_premiums,0) + IFNULL(ifon.sy_costs_premiums,0) + IFNULL (ifon.no_costs_premiums,0)) as "entranceAllFee",
-        sum(IFNULL(jq_export_other_costs_premiums,0) + IFNULL(jq_export_supervise_costs_premiums,0) +IFNULL(sy_export_other_costs_premiums,0) +IFNULL(sy_export_supervise_costs_premiums,0)
-        +IFNULL(no_export_supervise_costs_premiums,0)+IFNULL(no_export_supervise_costs_premiums,0) ) as "exportAllFee",
-        sum(IFNULL(b.distributionAmount,0)) as "distributionAmount"
+        ROUND(sum(IFNULL(ifon.jq_costs_premiums,0) + IFNULL(ifon.sy_costs_premiums,0) + IFNULL (ifon.no_costs_premiums,0)),2) as "entranceAllFee",
+        ROUND(sum(IFNULL(jq_export_other_costs_premiums,0) + IFNULL(jq_export_supervise_costs_premiums,0) +IFNULL(sy_export_other_costs_premiums,0) +IFNULL(sy_export_supervise_costs_premiums,0)
+        +IFNULL(no_export_supervise_costs_premiums,0)+IFNULL(no_export_supervise_costs_premiums,0) ),2) as "exportAllFee",
+        ROUND(sum(IFNULL(b.distributionAmount,0)),2) as "distributionAmount"
         from ins_area_company iac
         left join ins_orders io on io.orderno = iac.orderno
         LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
@@ -3312,8 +3328,9 @@
             left join ins_orders io on io.orderno = iac.orderno
             LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
             <where>
+                iac.orderstatus = 3
                 <if test="vo.userId !=null  and  vo.userId  !=''">
-                    ifon.first_level_user_id  =#{vo.userId}
+                    AND ifon.first_level_user_id  =#{vo.userId}
                 </if>
                 <if test="vo.ids  != null  and  vo.ids.size()>0 ">
                     AND ifon.first_level_user_id IN
@@ -3335,8 +3352,9 @@
             left join ins_orders io on io.orderno = iac.orderno
             LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
             <where>
+                iac.orderstatus = 3
                 <if test="vo.userId !=null  and  vo.userId  !=''">
-                    ifon.two_level_user_id  =#{vo.userId}
+                  AND  ifon.two_level_user_id  =#{vo.userId}
                 </if>
                 <if test="vo.ids  != null  and  vo.ids.size()>0 ">
                     AND ifon.two_level_user_id IN
@@ -3359,8 +3377,9 @@
             left join ins_orders io on io.orderno = iac.orderno
             LEFT JOIN ins_fee_order_new ifon ON iac.id = ifon.ins_order_no
             <where>
+                iac.orderstatus = 3
                 <if test="vo.userId !=null  and  vo.userId  !=''">
-                    ifon.three_level_user_id  =#{vo.userId}
+                    AND  ifon.three_level_user_id  =#{vo.userId}
                 </if>
                 <if test="vo.ids  != null  and  vo.ids.size()>0 ">
                     AND ifon.three_level_user_id IN
@@ -3376,8 +3395,9 @@
             ) c on  c.threeLevelUserId = a.firstLevelUserId
         ) b   on b.firstLevelUserId =iac.leader_id
         <where>
+            iac.orderstatus = 3
             <if test="vo.userId !=null  and  vo.userId  !=''">
-                io.userid  =#{vo.userId}
+               AND io.userid  =#{vo.userId}
             </if>
             <if test="vo.ids  != null  and  vo.ids.size()>0 ">
                 AND io.userid IN

+ 4 - 2
src/main/resources/mapper/modules/order/InsOrderReadPdfMapper.xml

@@ -15,13 +15,14 @@
             <result property="readEnd" column="read_end" jdbcType="VARCHAR"/>
             <result property="readType" column="read_type" jdbcType="VARCHAR"/>
             <result property="orderMsg" column="order_msg" jdbcType="VARCHAR"/>
+            <result property="type" column="type" jdbcType="VARCHAR"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id,company_id,company_name,
         create_time,create_user,read_name,
         read_begin,read_end,read_type,
-        order_msg
+        order_msg,type
     </sql>
     <select id="queryPage" resultType="com.ydtech.modules.order.entity.po.InsOrderReadPdf">
        select
@@ -31,7 +32,8 @@
             iorp.read_name,
             iorp.read_begin,
             iorp.read_end,read_type,
-            iorp.order_msg
+            iorp.order_msg,
+            iorp.type
        from
            ins_order_read_pdf iorp
         <where>