Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/master'

FengChaoYu 1 deň pred
rodič
commit
b17c4af7be
15 zmenil súbory, kde vykonal 557 pridanie a 63 odobranie
  1. 24 2
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/controller/user/WorkerController.java
  2. 0 1
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/common/CommonLogic.java
  3. 3 0
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/order/PayOrderLogic.java
  4. 127 4
      mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/policy/WorkerLogic.java
  5. 95 0
      mall-server-api/src/main/java/com/gree/mall/manager/bean/policy/PolicyOrderDsVO.java
  6. 4 2
      mall-server-api/src/main/java/com/gree/mall/manager/bean/policy/PolicyVo.java
  7. 2 0
      mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/PolicyCMapper.java
  8. 40 4
      mall-server-api/src/main/java/com/gree/mall/manager/controller/policy/PolicyOrderController.java
  9. 4 43
      mall-server-api/src/main/java/com/gree/mall/manager/controller/workerorder/ESOrderBaseController.java
  10. 1 0
      mall-server-api/src/main/java/com/gree/mall/manager/enums/PolicyTypeEnum.java
  11. 107 4
      mall-server-api/src/main/java/com/gree/mall/manager/logic/policy/PolicyOrderLogic.java
  12. 2 2
      mall-server-api/src/main/java/com/gree/mall/manager/logic/worker/WorkerWarrantyLogic.java
  13. 124 1
      mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/OrderBaseEsLogic.java
  14. 24 0
      mall-server-api/src/main/resources/mapper/PolicyCMapper.xml
  15. BIN
      mall-server-api/src/main/resources/template/第三者保险导入.xlsx

+ 24 - 2
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/controller/user/WorkerController.java

@@ -59,10 +59,11 @@ public class WorkerController {
     @ApiOperation("我的意外保险")
     public ResponseHelper<Page<PolicyOrder>> myPolicy(
 
+            @ApiParam(required = true, value = "AC 意外险 DS 第三者") @RequestParam(required = true) String type,
             @ApiParam(required = true, value = "pageNum") @RequestParam(required = true) Integer pageNum,
             @ApiParam(required = true, value = "pageSize") @RequestParam(required = true)Integer pageSize
     ){
-        Page<PolicyOrder> workerPolicies = workerLogic.myPolicy(pageNum,pageSize);
+        Page<PolicyOrder> workerPolicies = workerLogic.myPolicy(pageNum,pageSize,type);
         return ResponseHelper.success(workerPolicies);
     }
 
@@ -78,7 +79,7 @@ public class WorkerController {
 
 
     @PostMapping("/myWebsit")
-    @ApiOperation("我的续保网点")
+    @ApiOperation("我的意外续保网点")
     public ResponseHelper<List<AdminWebsit>> myWebsit(
     ){
         List<AdminWebsit> adminWebsitPage = workerLogic.myWebsit();
@@ -86,6 +87,27 @@ public class WorkerController {
     }
 
 
+    @PostMapping("/myDsWebsit")
+    @ApiOperation("我的第三者续保网点")
+    public ResponseHelper<List<AdminWebsit>> myDsWebsit(
+    ){
+        List<AdminWebsit> adminWebsitPage = workerLogic.myDsWebsit();
+        return ResponseHelper.success(adminWebsitPage);
+    }
+
+
+    @PostMapping("/dsPolicy")
+    @ApiOperation("购买第三者保险")
+    public ResponseHelper<Page<Policy>> dsPolicy(
+            @ApiParam(required = true, value = "网点id") @RequestParam(required = true) String websitId,
+            @ApiParam(required = true, value = "pageNum") @RequestParam(required = true) Integer pageNum,
+            @ApiParam(required = true, value = "pageSize") @RequestParam(required = true)Integer pageSize
+    ){
+        Page<Policy> workerPolicies = workerLogic.dsPolicy(websitId,pageNum,pageSize);
+        return ResponseHelper.success(workerPolicies);
+    }
+
+
     @PostMapping("/agreementList")
     @ApiOperation("保险协议列表")
     public ResponseHelper<List<Agreement>> agreementList(

+ 0 - 1
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/common/CommonLogic.java

@@ -88,7 +88,6 @@ public class CommonLogic {
             token = request.getParameter("x-token");
         }
 
-    //    log.info("打印token:"+token);
         AdminCompanyWechat adminCompanyWechat;
         User user = null;
 

+ 3 - 0
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/order/PayOrderLogic.java

@@ -1224,6 +1224,9 @@ public class PayOrderLogic {
 
         WorkerOrder workerOrder = workerOrderService.getById(orderId);
 
+        if (workerOrder == null)
+            throw new RemoteServiceException("单号已变更,请刷新数据");
+
         AdminWebsit adminWebsit = adminWebsitService.getById(workerOrder.getWebsitId());
 
         if (StringUtil.isEmpty(adminWebsit.getPayWorkerCodeId()))

+ 127 - 4
mall-miniapp-service/src/main/java/com/gree/mall/miniapp/logic/policy/WorkerLogic.java

@@ -261,7 +261,7 @@ public class WorkerLogic {
     }
 
 
-    public Page<PolicyOrder> myPolicy(Integer pageNum, Integer pageSize) {
+    public Page<PolicyOrder> myPolicy(Integer pageNum, Integer pageSize,String type) {
 
         CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
 
@@ -274,7 +274,7 @@ public class WorkerLogic {
 
         Page<PolicyOrder> page = policyOrderService.lambdaQuery()
                 .in(PolicyOrder::getWebsitUserId,collect)
-                .eq(PolicyOrder::getType,"AC")
+                .in(PolicyOrder::getType,type)
                 .eq(PolicyOrder::getIsPay,IsYesNoEnum.YES.getKey())
                 .orderByDesc(PolicyOrder::getCreateTime)
                 .page(new Page<>(pageNum, pageSize));
@@ -425,7 +425,7 @@ public class WorkerLogic {
         List<WorkerPolicy> workerPolicies = workerPolicyService.lambdaQuery()
                 .eq(WorkerPolicy::getWebsitId, websitId)
                 .eq(WorkerPolicy::getWebsitUserId, websiUser.getId())
-                .eq(WorkerPolicy::getPolicyType, "AC")
+                .eq(WorkerPolicy::getPolicyType, policy.getType())
                 .orderByDesc(WorkerPolicy::getEndTime)
                 .list();
 
@@ -494,7 +494,7 @@ public class WorkerLogic {
         policyOrder.setWorkerNumber(currentCompanyWechat.getUser().getWorkerNumber());
         policyOrder.setBuyUnit(adminWebsit.getInsureSteadUnit());
         policyOrder.setBuyUnit(adminWebsit.getInsureSteadUnit());
-        policyOrder.setType("AC");
+        policyOrder.setType(policy.getType());
 
         policyOrder.insert();
 
@@ -773,4 +773,127 @@ public class WorkerLogic {
         }
         return true;
     }
+
+    public List<AdminWebsit> myDsWebsit() {
+
+        Mailbox mailbox = mailboxService.getById("1");
+
+        CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
+
+        List<WebsitUser> websitUsers = websitUserService.lambdaQuery().eq(WebsitUser::getUserId, currentCompanyWechat.getUserId())
+                .ne(WebsitUser::getExamineStatus,"WAIT").list();
+
+        List<AdminWebsit> adminWebsits = new ArrayList<>();
+
+        List<String> collect = websitUsers.stream()
+                .map(WebsitUser::getWebsitId).collect(Collectors.toList());
+
+        List<Policy> policies = policyService.lambdaQuery().eq(Policy::getType, "DS")
+                .ge(Policy::getEndTime, new Date())
+                .list();
+
+        if (CollectionUtils.isEmpty(policies))
+            return new ArrayList<>();
+
+        List<PolicyWebsit> policyWebsits = policyWebsitService.lambdaQuery()
+                .in(PolicyWebsit::getWebsitId,collect )
+                .in(PolicyWebsit::getPolicyId,policies.stream()
+                        .map(Policy::getId).collect(Collectors.toList()) )
+                .list();
+
+        if (CollectionUtils.isEmpty(policyWebsits))
+            return new ArrayList<>();
+
+
+        Policy policy = policyService.lambdaQuery()
+                .eq(Policy::getType, "DS")
+                .ge(Policy::getEndTime, new Date())
+                .in(Policy::getId,  policyWebsits.stream()
+                        .map(PolicyWebsit::getPolicyId).collect(Collectors.toList()))
+                .orderByDesc(Policy::getEndTime)
+                .last("limit 1").one();
+
+        if (policy == null)
+            return new ArrayList<>();
+
+
+        for (WebsitUser websitUser : websitUsers) {
+
+            if ( policyWebsits.stream().filter(item ->item.getWebsitId().equals(websitUser.getWebsitId())).count() <1) {
+                continue;
+            }
+
+            if (  policyOrderService.lambdaQuery()
+                    .eq(PolicyOrder::getWebsitUserId,websitUser.getId())
+                    .eq(PolicyOrder::getType,"DS")
+                    .eq(PolicyOrder::getIsPay,IsYesNoEnum.YES.getKey())
+                    .and(item -> item
+                            .isNull(PolicyOrder::getStartTime)
+                            .or().ge(PolicyOrder::getEndTime, policy.getEndTime())
+
+                    )
+                    .eq(PolicyOrder::getWebsitUserId,websitUser.getId())
+                    .count() < 1){
+                AdminWebsit adminWebsit = adminWebsitService.getById(websitUser.getWebsitId());
+                if (!adminWebsit.getAttr().equals("SELF"))
+                    continue;
+                adminWebsits.add(adminWebsit);
+            }
+
+        }
+
+        return adminWebsits;
+    }
+
+    public Page<Policy> dsPolicy(String websitId, Integer pageNum, Integer pageSize) {
+
+        CurrentCompanyWechat currentCompanyWechat = commonLogic.getCurrentCompanyWechat();
+
+        WebsitUser websitUser = websitUserService.lambdaQuery()
+                .eq(WebsitUser::getWebsitId, websitId)
+                .eq(WebsitUser::getUserId, currentCompanyWechat.getUserId()).last("limit 1").one();
+
+        List<PolicyWebsit> policyWebsits = policyWebsitService.lambdaQuery().eq(PolicyWebsit::getWebsitId, websitId).list();
+
+        if (CollectionUtils.isEmpty(policyWebsits))
+            return new Page<>();
+
+
+        List<PolicyOrder> policyOrderList = policyOrderService
+                .lambdaQuery()
+                .eq(PolicyOrder::getType, "DS")
+                .isNotNull(PolicyOrder::getEndTime)
+                .eq(PolicyOrder::getIsPay, IsYesNoEnum.YES.getKey())
+                .eq(PolicyOrder::getWebsitUserId, websitUser.getId())
+                .orderByDesc(PolicyOrder::getEndTime)
+                .list();
+
+
+        List<PolicyOrder> policyOrders = policyOrderService
+                .lambdaQuery()
+                .eq(PolicyOrder::getType, "DS")
+                .isNull(PolicyOrder::getEndTime)
+                .eq(PolicyOrder::getIsPay, IsYesNoEnum.YES.getKey())
+                .eq(PolicyOrder::getWebsitUserId, websitUser.getId())
+                .list();
+
+
+        List<String> policyIds = policyOrders.stream().map(PolicyOrder::getPolicyId).collect(Collectors.toList());
+
+
+        boolean notEmpty = CollectionUtil.isNotEmpty(policyOrderList);
+
+        Page<Policy> page = policyService.lambdaQuery()
+                .notIn(CollectionUtil.isEmpty(policyOrderList) && CollectionUtil.isNotEmpty(policyOrders), Policy::getId, policyIds)
+                .eq(Policy::getIsBuy, IsYesNoEnum.YES.getKey())
+                .le(Policy::getPolicyStartTime, new Date())
+                .eq(Policy::getType, "DS")
+                .ge(Policy::getEndTime, notEmpty?policyOrderList.get(0).getEndTime():new Date())
+                .in(Policy::getId, policyWebsits.stream().map(PolicyWebsit::getPolicyId).collect(Collectors.toList()))
+                .orderByAsc(Policy::getEndTime)
+                .page(new Page<>(pageNum, pageSize));
+
+
+        return page;
+    }
 }

+ 95 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/policy/PolicyOrderDsVO.java

@@ -0,0 +1,95 @@
+package com.gree.mall.manager.bean.policy;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.gree.mall.manager.annotation.ZfireField;
+import com.gree.mall.manager.enums.IsYesNoEnum;
+import com.gree.mall.manager.enums.PolicyOrderStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@ApiModel
+@Data
+public class PolicyOrderDsVO {
+
+    @ApiModelProperty(value = "订单号")
+    @TableId(value = "id", type = IdType.ID_WORKER_STR)
+    private String id;
+
+    @ApiModelProperty(value = "保单状态")
+    private PolicyOrderStatusEnum policyOrderStatus;
+
+    @ApiModelProperty(value = "保单名称")
+    private String policyName;
+
+    @ApiModelProperty(value = "保单编号")
+    private String policyNumber;
+
+    @ApiModelProperty(value = "所属公司")
+    private String belongCompany;
+
+    @ApiModelProperty(value = "所属公司编号")
+    private String belongCompanyCode;
+
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "所属公司")
+    private String companyWechatName;
+    @ZfireField(hide = true)
+    @ApiModelProperty(value = "所属公司编号")
+    private String companyWechatId;
+
+    @ApiModelProperty(value = "网点名称")
+    private String websitName;
+
+    @ApiModelProperty(value = "网点编号")
+    private String websitId;
+
+    @ApiModelProperty(value = "工程师编号")
+    private String workerNumber;
+
+    @ApiModelProperty(value = "工程师")
+    private String workerName;
+
+    @ApiModelProperty(value = "身份证")
+    private String workerIdcard;
+
+    @ApiModelProperty(value = "工程师电话")
+    private String workerMobile;
+
+    @ApiModelProperty(value = "支付金额")
+    private String payAmount;
+
+    @ApiModelProperty(value = "微信流水号")
+    private String transactionId;
+
+    @ApiModelProperty(value = "支付时间")
+    private Date payTime;
+
+    @ApiModelProperty(value = "生效日期")
+    private Date startTime;
+
+    @ApiModelProperty(value = "截止日期")
+    private Date endTime;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @ApiModelProperty(value = "创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    @ApiModelProperty(value = "修改人")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+}

+ 4 - 2
mall-server-api/src/main/java/com/gree/mall/manager/bean/policy/PolicyVo.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.gree.mall.manager.annotation.ZfireField;
 import com.gree.mall.manager.enums.IsYesNoEnum;
+import com.gree.mall.manager.enums.PolicyTypeEnum;
 import com.gree.mall.manager.plus.entity.Policy;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -16,7 +17,7 @@ import java.util.Date;
 
 @ApiModel
 @Data
-public class PolicyVo   {
+public class PolicyVo    {
 
 
     @ZfireField(hide = true)
@@ -60,7 +61,8 @@ public class PolicyVo   {
     @TableField(fill = FieldFill.INSERT_UPDATE)
     private String updateBy;
 
-
+    @ApiModelProperty(value = "保单类型")
+    private PolicyTypeEnum type;
 
 
 }

+ 2 - 0
mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/PolicyCMapper.java

@@ -25,4 +25,6 @@ public interface PolicyCMapper {
     IPage<PolicyOrderEmVO> listEm(Page page, @Param("ex")ZfireParamBean zfireParam,@Param("adminCompanyIds") List<String> adminCompanyIds);
 
     IPage<PolicyOrderInVO> listIn(Page page, @Param("ex")ZfireParamBean zfireParam, @Param("adminCompanyIds") List<String> adminCompanyIds);
+
+    IPage<PolicyOrderDsVO> listDs(Page page,@Param("ex")  ZfireParamBean zfireParam, @Param("adminCompanyIds")List<String> adminCompanyIds);
 }

+ 40 - 4
mall-server-api/src/main/java/com/gree/mall/manager/controller/policy/PolicyOrderController.java

@@ -4,10 +4,7 @@ import cn.hutool.core.lang.TypeReference;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gree.mall.manager.annotation.ZfireList;
-import com.gree.mall.manager.bean.policy.PolicyDetail;
-import com.gree.mall.manager.bean.policy.PolicyOrderEmVO;
-import com.gree.mall.manager.bean.policy.PolicyOrderInVO;
-import com.gree.mall.manager.bean.policy.PolicyOrderVO;
+import com.gree.mall.manager.bean.policy.*;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.helper.ResponseHelper;
 import com.gree.mall.manager.logic.policy.PolicyOrderLogic;
@@ -40,6 +37,45 @@ public class PolicyOrderController {
 
 
     @ZfireList
+    @PostMapping("/listDs")
+    @ApiOperation(value = "第三者险订单列表")
+    public ResponseHelper<IPage<PolicyOrderDsVO>> listDs(
+            @RequestBody ZfireParamBean zfireParamBean
+    ) throws RemoteServiceException {
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        IPage<PolicyOrderDsVO> policyOrderVOIPage = policyOrderLogic.listDs(new Page(zfireParam.getPageNum(), zfireParam.getPageSize()), zfireParam);
+        return ResponseHelper.success(policyOrderVOIPage, new TypeReference<PolicyOrderDsVO>() {});
+    }
+
+    @PostMapping("/listDs/export")
+    @ApiOperation(value = "第三者险订单列表导出")
+    public void listDsExport(
+            @RequestBody ZfireParamBean zfireParamBean,
+            HttpServletRequest request,
+            HttpServletResponse response
+    ) throws Exception {
+        //1.组装查询条件
+        ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
+        //2.查询要导出的内容
+        IPage<PolicyOrderDsVO> policyOrderVOIPage = policyOrderLogic.listDs(new Page(zfireParam.getPageNum(), zfireParam.getPageSize()), zfireParam);
+        //3.导出
+        FieldUtils.exportData(policyOrderVOIPage.getRecords(), zfireParam.getExportFields(), request, response);
+    }
+
+
+
+    @PostMapping("/importDs")
+    @ApiOperation(value = "第三者险导入")
+    public ResponseHelper importDs(
+            @RequestParam MultipartFile file
+    ) throws RemoteServiceException, IOException {
+        List<Object> objects = ExcelUtils.importExcel(file);
+        policyOrderLogic.importDs(objects);
+        return ResponseHelper.success();
+    }
+
+
+    @ZfireList
     @PostMapping("/list")
     @ApiOperation(value = "意外保险订单列表")
     public ResponseHelper<IPage<PolicyOrderVO>> list(

+ 4 - 43
mall-server-api/src/main/java/com/gree/mall/manager/controller/workerorder/ESOrderBaseController.java

@@ -43,11 +43,9 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
+import java.io.FileWriter;
 import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 
@@ -80,48 +78,11 @@ public class ESOrderBaseController {
         //1.组装查询条件
         ZfireParamBean zfireParam = FieldUtils.supplyParam(zfireParamBean);
         //2.查询要导出的内容
-        zfireParamBean.setPageNum(1);
-        zfireParamBean.setPageSize(10000);
-        IPage<OrderBaseVO> orderBaseVOIPage = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
-        List<OrderBaseVO> records = orderBaseVOIPage.getRecords();
-        if (records.size() == 10000){
-            zfireParamBean.setPageNum(2);
-            zfireParamBean.setPageSize(10000);
-            IPage<OrderBaseVO> orderBaseVOIPage2 = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
 
-            records.addAll(orderBaseVOIPage2.getRecords());
-
-        }
-
-        if (records.size() == 20000){
-            zfireParamBean.setPageNum(3);
-            zfireParamBean.setPageSize(10000);
-            IPage<OrderBaseVO> orderBaseVOIPage3 = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
-
-            records.addAll(orderBaseVOIPage3.getRecords());
-
-        }
-
-        if (records.size() == 30000){
-            zfireParamBean.setPageNum(4);
-            zfireParamBean.setPageSize(10000);
-            IPage<OrderBaseVO> orderBaseVOIPage3 = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
-
-            records.addAll(orderBaseVOIPage3.getRecords());
-
-        }
-
-        if (records.size() == 40000){
-            zfireParamBean.setPageNum(5);
-            zfireParamBean.setPageSize(10000);
-            IPage<OrderBaseVO> orderBaseVOIPage3 = orderBaseEsLogic.orderBaseEsList(zfireParamBean);
-
-            records.addAll(orderBaseVOIPage3.getRecords());
-
-        }
+        List<OrderBaseVO> orderBaseVOIPage = orderBaseEsLogic.listExport(zfireParamBean);
 
         //3.导出
-        FieldUtils.exportData(records, zfireParam.getExportFields(), request, response);
+        FieldUtils.exportData(orderBaseVOIPage, zfireParam.getExportFields(), request, response);
     }
 
     @PostMapping("/status/count")

+ 1 - 0
mall-server-api/src/main/java/com/gree/mall/manager/enums/PolicyTypeEnum.java

@@ -11,6 +11,7 @@ public enum  PolicyTypeEnum implements BaseEnum {
     AC("AC","意外险"),
     EM("EM","雇主险"),
     IN("IN","工伤险"),
+    DS("DS","第三者责任险"),
 
 
             ;

+ 107 - 4
mall-server-api/src/main/java/com/gree/mall/manager/logic/policy/PolicyOrderLogic.java

@@ -1,15 +1,14 @@
 package com.gree.mall.manager.logic.policy;
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gree.mall.manager.bean.admin.AdminUserCom;
-import com.gree.mall.manager.bean.policy.PolicyOrderEmVO;
-import com.gree.mall.manager.bean.policy.PolicyOrderInVO;
-import com.gree.mall.manager.bean.policy.PolicyOrderVO;
-import com.gree.mall.manager.bean.policy.PolicyVo;
+import com.gree.mall.manager.bean.policy.*;
 import com.gree.mall.manager.commonmapper.PolicyCMapper;
 import com.gree.mall.manager.enums.IsYesNoEnum;
 import com.gree.mall.manager.enums.PolicyOrderEmStutasEnum;
@@ -568,4 +567,108 @@ public class PolicyOrderLogic {
         return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
     }
 
+    public IPage<PolicyOrderDsVO> listDs(Page page, ZfireParamBean zfireParam) {
+
+        //获取当前登录企业id
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+
+        List<String> adminCompanyIds = adminUser.getCompanyWechatIds();
+        //1.组装查询条件
+        zfireParam = FieldUtils.supplyParam(zfireParam, PolicyOrderDsVO.class, adminUser);
+
+        IPage<PolicyOrderDsVO> policyOrderVOIPage = policyCMapper.listDs(page, zfireParam, adminCompanyIds);
+        return policyOrderVOIPage;
+    }
+
+
+    @Transactional(rollbackFor = Exception.class)
+    public void importDs(List<Object> objects) {
+
+        for (Object o : objects) {
+            List<Object> row = (List<Object>) o;
+
+            AdminWebsit adminWebsit = adminWebsitService.lambdaQuery().eq(AdminWebsit::getWebsitNumber, (String) row.get(1)).one();
+
+
+            User user = userService.lambdaQuery().eq(User::getIdCard, (String) row.get(4))
+                    .one();
+
+            if (user == null)
+                throw new RemoteServiceException((String) row.get(4)+"身份证找不到对应师傅");
+
+            WebsitUser websitUser = websitUserService.lambdaQuery()
+                    .eq(WebsitUser::getWebsitId, (String) row.get(1))
+                    .eq(WebsitUser::getUserId, user.getUserId())
+                    .one();
+
+
+            List<PolicyOrder> policyOrders = policyOrderService.lambdaQuery()
+                    .eq(PolicyOrder::getWebsitUserId, websitUser.getId())
+                    .eq(PolicyOrder::getType, "DS")
+                    .in(PolicyOrder::getPolicyOrderStatus,
+                            PolicyOrderEmStutasEnum.DSX.getKey()
+                    ).list();
+
+            if (CollectionUtil.isEmpty(policyOrders)){
+                throw new RemoteServiceException((String) row.get(4)+"找不到对应订单号");
+            }
+            PolicyOrder policyOrder = policyOrders.get(0);
+
+            policyOrder.setStartTime(DateUtil.parse((String) row.get(6), "yyyy-MM-dd"));
+            policyOrder.setEndTime(this.getEndOfDay(DateUtil.parse((String) row.get(7), "yyyy-MM-dd")));
+            policyOrder.setBelongCompany(adminWebsit.getBelongCompany());
+            policyOrder.setBelongCompanyCode(adminWebsit.getBelongCompanyCode());
+            policyOrder.setCompanyWechatId(adminWebsit.getCompanyWechatId());
+            policyOrder.setCompanyWechatName(adminWebsit.getCompanyWechatName());
+
+            policyOrder.setWebsitId(adminWebsit.getWebsitId());
+            policyOrder.setWebsitName(adminWebsit.getName());
+
+            if (policyOrder.getStartTime().after(policyOrder.getEndTime()))
+                throw new RemoteServiceException((String) row.get(4)+"开始时间不能大于结束时间");
+
+            if (new Date().after(policyOrder.getStartTime()) && new Date().before(policyOrder.getEndTime()))
+                policyOrder.setPolicyOrderStatus("BZZ");
+            else if (new Date().after(policyOrder.getEndTime()))
+                policyOrder.setPolicyOrderStatus("YSX");
+            else {
+                policyOrder.setPolicyOrderStatus("DSX");
+            }
+
+            policyOrder.updateById();
+
+
+            List<PolicyOrder> policyOrderList = policyOrderService.lambdaQuery()
+                    .eq(PolicyOrder::getWebsitUserId, websitUser.getId())
+                    .eq(PolicyOrder::getType, "DS")
+                    .in(PolicyOrder::getPolicyOrderStatus,
+                            PolicyOrderEmStutasEnum.DSX.getKey(),
+                            PolicyOrderEmStutasEnum.BZZ.getKey()
+                    ).list();
+
+            Boolean wp = this.hasOverlapPolicy(policyOrderList);
+
+            if (wp)
+                throw new RemoteServiceException(user.getIdCard()+"第三者险有相同覆盖范围内的保险");
+
+
+
+        }
+    }
+
+    public Boolean hasOverlapPolicy(List<PolicyOrder> policyOrders){
+
+        for (int i= 0; i<policyOrders.size();i++){
+            PolicyOrder workerPolicy = policyOrders.get(i);
+            for (int j = i+1; j <policyOrders.size() ; j++) {
+                PolicyOrder workerPolicy2 = policyOrders.get(j);
+                if (workerPolicy.getEndTime().after(workerPolicy2.getStartTime()) && workerPolicy2.getEndTime().after(workerPolicy.getStartTime())){
+                    return true;
+                }
+            }
+        }
+
+        return false;
+
+    }
 }

+ 2 - 2
mall-server-api/src/main/java/com/gree/mall/manager/logic/worker/WorkerWarrantyLogic.java

@@ -227,9 +227,9 @@ public class WorkerWarrantyLogic {
   /*          if (workerWarranty.getWaitAmount().doubleValue() < 0)
                 throw new RemoteServiceException("第"+rowIndex+"行"+"缴纳金额超过应缴纳金额");
 */
-            if (workerWarranty.getRefundAmount() != null && workerWarranty.getRefundAmount().doubleValue() > workerWarranty.getPayableAmount().doubleValue()) {
+     /*       if (workerWarranty.getRefundAmount() != null && workerWarranty.getRefundAmount().doubleValue() > workerWarranty.getPayableAmount().doubleValue()) {
                 throw new RemoteServiceException("总退金额大于了缴纳金额");
-            }
+            }*/
             workerWarranties.add(workerWarranty);
 
         }

+ 124 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/workorder/OrderBaseEsLogic.java

@@ -15,6 +15,7 @@ import com.gree.mall.manager.enums.MaterialExamineStatusEnum;
 import com.gree.mall.manager.es.OrderBaseEsRepository;
 import com.gree.mall.manager.es.OrderWorkerEsRepository;
 import com.gree.mall.manager.es.SettlementOrderEsRepository;
+import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.plus.entity.*;
 import com.gree.mall.manager.plus.service.PgOrderBaseService;
@@ -27,9 +28,13 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.elasticsearch.action.search.SearchResponse;
+import org.elasticsearch.client.RequestOptions;
+import org.elasticsearch.common.unit.TimeValue;
 import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.Scroll;
 import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
 import org.elasticsearch.search.aggregations.AggregationBuilders;
 import org.elasticsearch.search.aggregations.Aggregations;
@@ -40,6 +45,7 @@ import org.elasticsearch.search.sort.SortOrder;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.elasticsearch.core.*;
 import org.springframework.data.elasticsearch.core.document.Document;
+import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
 import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
 import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
 import org.springframework.stereotype.Service;
@@ -130,7 +136,7 @@ public class OrderBaseEsLogic {
         page.setSize(zfireParamBean.getPageSize());
         page.setRecords(BeanUtil.copyToList(orderBaseEs,OrderBaseVO.class));
         //服务单标识
-        if (zfireParamBean.getPageSize() != -1 && page.getTotal() > 0) {
+        if (zfireParamBean.getPageSize() != -1 && page.getTotal() > 0 && page.getRecords().size() > 0) {
             List<String> orderBaseIds = page.getRecords()
                     .stream()
                     .map(OrderBaseVO::getId)
@@ -641,4 +647,121 @@ public class OrderBaseEsLogic {
 
         orderWorkerEsRepository.saveAll(pgOrderWorkerEs);
     }
+
+    public List<OrderBaseVO> listExport(WorkOrderZfireParam zfireParamBean) {
+
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+
+        BoolQueryBuilder queryBuilder1 = QueryBuilders.boolQuery();
+        this.montage(queryBuilder1,zfireParamBean);
+
+        if (CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds())) {
+            queryBuilder1.must(
+                    QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("create_websit_id", adminUser.getAdminWebsitIds()))
+                            .should(QueryBuilders.termsQuery("websit_id", adminUser.getAdminWebsitIds()))
+            );
+
+        }
+
+        List<String> orderBaseId = new ArrayList<>();
+
+        if (zfireParamBean.getIsWait() != null && zfireParamBean.getIsWait()){
+            List<String> collect = workerOrderService.lambdaQuery()
+                    .eq(WorkerOrder::getPayStatus, "WAIT")
+                    .in(CollectionUtils.isNotEmpty(adminUser.getAdminWebsitIds()),WorkerOrder::getWebsitId,  adminUser.getAdminWebsitIds())
+                    .ne(WorkerOrder::getWorkerOrderId, "").select(WorkerOrder::getWorkerOrderId)
+                    .list().stream().map(WorkerOrder::getWorkerOrderId).collect(Collectors.toList());
+
+            if (CollectionUtils.isEmpty(collect))
+                return new ArrayList<>();
+
+            orderBaseId.addAll(collect);
+
+
+        }
+
+        if (!CollectionUtils.isEmpty(orderBaseId)){
+            queryBuilder1.must(QueryBuilders.termsQuery("id",orderBaseId));
+        }
+
+
+
+        NativeSearchQuery query  = new NativeSearchQueryBuilder()
+                .withQuery(queryBuilder1)
+                .withSort(SortBuilders.fieldSort("create_time").order(SortOrder.DESC))
+                .withPageable(PageRequest.of(0, 3000))
+                .build();
+
+
+
+        // 2. 初始化 Scroll
+        SearchScrollHits<OrderBaseEs> scrollHits = elasticsearchRestTemplate.searchScrollStart(
+                60000, // Scroll 上下文保持时间(毫秒)
+                query,
+                OrderBaseEs.class,
+                IndexCoordinates.of("pg_order_base")
+        );
+
+        String scrollId = scrollHits.getScrollId();
+        int batch = 0;
+
+        if (scrollHits.getTotalHits() > 60000)
+            throw  new RemoteServiceException("数据超过六万上限,请分批导出");
+
+        List<OrderBaseEs> orderBaseVOS = new ArrayList<>();
+
+        try {
+            while (!scrollHits.isEmpty()) {
+                // 3. 处理当前批次数据
+                scrollHits.forEach(hit -> {
+                    OrderBaseEs entity = hit.getContent();
+                    orderBaseVOS.add(entity);
+                });
+
+                batch++;
+
+                // 4. 获取下一批次
+                scrollHits = elasticsearchRestTemplate.searchScrollContinue(
+                        scrollId,
+                        60000,
+                        OrderBaseEs.class,
+                        IndexCoordinates.of("pg_order_base")
+                );
+                scrollId = scrollHits.getScrollId(); // 更新 scrollId
+            }
+        } finally {
+            // 5. 清理 Scroll 上下文
+            if (scrollId != null) {
+                List<String> scroll = new ArrayList<>();
+                scroll.add(scrollId);
+                elasticsearchRestTemplate.searchScrollClear(scroll);
+            }
+        }
+
+        List<OrderBaseVO> orderBaseVOS1 = BeanUtil.copyToList(orderBaseVOS, OrderBaseVO.class);
+
+
+        List<String> orderBaseIds = orderBaseVOS1
+                .stream()
+                .map(OrderBaseVO::getId)
+                .collect(Collectors.toList());
+
+        List<WorkerOrder> workerOrderList = workerOrderService.lambdaQuery().in(WorkerOrder::getWorkerOrderId, orderBaseIds)
+                .eq(WorkerOrder::getPayStatus, MaterialExamineStatusEnum.PAID.getKey())
+                .select(WorkerOrder::getWorkerOrderId, WorkerOrder::getTotalAmount).list();
+
+        for (OrderBaseVO orderBaseVO : orderBaseVOS1) {
+
+            List<WorkerOrder> workerOrders = workerOrderList.stream()
+                    .filter(item -> item.getWorkerOrderId().equals(orderBaseVO.getId())).collect(Collectors.toList());
+            if (!CollectionUtils.isEmpty(workerOrderList)) {
+                BigDecimal bigDecimal = workerOrders.stream().map(WorkerOrder::getTotalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
+                orderBaseVO.setWorkerPrice(bigDecimal);
+            }
+
+        }
+
+        return orderBaseVOS1;
+
+    }
 }

+ 24 - 0
mall-server-api/src/main/resources/mapper/PolicyCMapper.xml

@@ -136,4 +136,28 @@
         </if>
         ${ex.orderBy}
     </select>
+    <select id="listDs" resultType="com.gree.mall.manager.bean.policy.PolicyOrderDsVO">
+        SELECT
+        ${ex.selected}
+        FROM policy_order a
+        ${ex.query}
+        and a.type = 'DS'
+        and a.is_pay = 'YES'
+        <if test="adminCompanyIds != null and adminCompanyIds.size > 0">
+            AND a.company_wechat_id IN
+            <foreach item="item" index="index" collection="adminCompanyIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="ex.adminWebsitIds != null and ex.adminWebsitIds.size > 0">
+            AND a.websit_id IN
+            <foreach item="item" index="index" collection="ex.adminWebsitIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="ex.orderBy == null or ex.orderBy ==''">
+            ORDER BY a.create_time DESC
+        </if>
+        ${ex.orderBy}
+    </select>
 </mapper>

BIN
mall-server-api/src/main/resources/template/第三者保险导入.xlsx