package com.ydtech.modules.order.controller; import cn.keking.anti_reptile.annotation.AntiReptile; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydtech.aop.request.RequestSingleParam; import com.ydtech.core.page.HttpResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.model.po.SysUserIsDial; import com.ydtech.modules.admin.service.SysUserIsDialService; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.fee.service.CostsCalcService; import com.ydtech.modules.ins.model.InsOrdersExcelVo; import com.ydtech.modules.inv.utils.EasyExcelUtils; import com.ydtech.modules.order.components.InsOrdersComponents; import com.ydtech.modules.order.constants.OrderLinkTypeConstants; import com.ydtech.modules.order.entity.*; import com.ydtech.modules.order.entity.dto.InquiryDetalsQueryDto; import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto; import com.ydtech.modules.order.entity.vo.*; import com.ydtech.modules.order.service.*; import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto; import com.ydtech.modules.protocol.utils.AssertionUtils; import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew; import com.ydtech.modules.protocols.service.InsFeeOrderNewService; import com.ydtech.utils.StringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @Api(tags = "订单") @RequestMapping("/insurance/order") @RestController public class InsOrdersController extends BaseController { private final InsOrdersService insOrdersService; private final InsAreaCompanyService insAreaCompanyService; private final InsOrdersComponents insOrdersComponents; private final InsAccidentalDrivingService insAccidentalDrivingService; private final SysUserIsDialService sysUserIsDialService; private final BatchOrderService batchOrderService; private final InsAreaCompanyPositionService insAreaCompanyPositionService; private final InsFeeOrderNewService insFeeOrderNewService; private final CostsCalcService costsCalcService; @Value("${upload.file.path}") private String uploadPath; @Value("${upload.file.url}") private String uploadUrl; public InsOrdersController(InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService, InsOrdersComponents insOrdersComponents, InsAccidentalDrivingService insAccidentalDrivingService, SysUserIsDialService sysUserIsDialService, BatchOrderService batchOrderService, InsAreaCompanyPositionService insAreaCompanyPositionService, InsFeeOrderNewService insFeeOrderNewService, CostsCalcService costsCalcService) { this.insAreaCompanyService = insAreaCompanyService; this.insOrdersService = insOrdersService; this.insOrdersComponents = insOrdersComponents; this.insAccidentalDrivingService = insAccidentalDrivingService; this.sysUserIsDialService = sysUserIsDialService; this.batchOrderService = batchOrderService; this.insAreaCompanyPositionService = insAreaCompanyPositionService; this.insFeeOrderNewService = insFeeOrderNewService; this.costsCalcService = costsCalcService; } @GetMapping("/getAgreementInsCompany") @ApiOperation(value = "获取协议报价保险公司") public HttpResult> getAgreementInsCompany(@RequestParam(required = false) String deptId) { if (StringUtils.isEmpty(deptId)) { deptId = getDeptId(); } String userId = getUserId(); return this.insOrdersService.getAgreementInsCompany(deptId, userId); } @PostMapping("/generateOrder") @ApiOperation(value = "生成订单") public HttpResult generateOrder(@Validated @RequestBody BaseQuoteInfoVo quoteInfoVo) { SysUser user = getUser(); //app 订单取消了商业险信息 if (Objects.isNull(quoteInfoVo.getKindList())) { quoteInfoVo.setKindList(new ArrayList<>()); } InsOrders insOrders = this.insOrdersService.generateOrder(user, quoteInfoVo); return HttpResult.ok("success", insOrders); } @PostMapping("/getByOrderNo") @ApiOperation(value = "通过订单ID查询订单信息") public HttpResult getByOrderNo(@RequestSingleParam(value = "orderNo") String orderNo) { BaseQuoteInfoVo quoteInfo = insOrdersComponents.getQuoteInfo(orderNo); return HttpResult.ok("success", null); } @PostMapping("/revise") @ApiOperation(value = "查询订单和子订单") public HttpResult revise(@RequestSingleParam(value = "orderNo") String orderNo) { InsOrdersEditingVo insOrders = this.insOrdersService.revise(orderNo); return HttpResult.ok("success", insOrders); } @PostMapping("/reviseApp") @ApiOperation(value = "查询订单和子订单") public HttpResult reviseApp(@RequestSingleParam(value = "orderNo") String orderNo) { InsOrdersEditingVo insOrders = this.insOrdersService.reviseApp(orderNo); return HttpResult.ok("success", insOrders); } @PostMapping("/queryPageOrder") @ApiOperation(value = "[1]分页查询订单接口") public HttpResult> queryPageOrder(@RequestBody @Valid OrderQueryVo orderQueryVo) { BasePageResult quoteResult = this.insOrdersService.newQueryPageOrder(orderQueryVo); return HttpResult.ok("success", quoteResult); } @PostMapping("/orderExportExcel") @ApiOperation(value = "订单导出excel接口") public HttpResult orderExportExcel(@RequestBody InsOrdersExcelVo insOrdersExcelVo) { return this.insOrdersService.orderExportExcel(insOrdersExcelVo); } @PostMapping("/querySuborder") @ApiOperation(value = "[2]通过订单号查询子订单") public HttpResult> querySuborder(@RequestSingleParam(value = "orderNo") String orderNo) { List quoteResult = this.insOrdersService.querySuborder(orderNo); return HttpResult.ok("success", quoteResult); } @PostMapping("/queryInsAreaCompany") @ApiOperation(value = "通过主订单ID查询子订单") public HttpResult> queryInsAreaCompany(@RequestSingleParam(value = "orderNo") String orderNo) { this.insOrdersService.existOrder(orderNo); List insAreaCompanies = this.insAreaCompanyService.lambdaQuery().eq(InsAreaCompany::getOrderno, orderNo).list(); return HttpResult.ok("success", insAreaCompanies); } @PostMapping("/queryQuoteHistory") @ApiOperation(value = "查询报价历史") public HttpResult> queryQuoteHistory(@RequestBody QuoteHistoryVo quoteHistoryVo) { InsOrders insOrders = this.insOrdersService.existOrder(quoteHistoryVo.getOrderNo()); List insAreaCompanies = this.insAreaCompanyService.lambdaQuery() .eq(!ObjectUtils.isEmpty(quoteHistoryVo.getOrderNo()), InsAreaCompany::getOrderno, quoteHistoryVo.getOrderNo()) .eq(!ObjectUtils.isEmpty(quoteHistoryVo.getOrderStatus()), InsAreaCompany::getOrderstatus, quoteHistoryVo.getOrderStatus()) .eq(InsAreaCompany::getDelFlag, "1") .orderByDesc(InsAreaCompany::getCreatetime) .list(); List insAreaCompanyIdList = insAreaCompanies.stream().map(InsAreaCompany::getId).collect(Collectors.toList()); List list = insFeeOrderNewService.lambdaQuery().in(InsFeeOrderNew::getInsOrderNo, insAreaCompanyIdList).list(); Map insFeeOrderNewMap = list.stream().collect(Collectors.toMap(InsFeeOrderNew::getInsOrderNo, x -> x)); List collect = insAreaCompanies.stream().map(a -> { InsAreaCompanyHistoryVo insAreaCompanyHistoryVo = new InsAreaCompanyHistoryVo(); BeanUtils.copyProperties(a, insAreaCompanyHistoryVo); insAreaCompanyHistoryVo.setLicenseno(insOrders.getLicenseno()); insAreaCompanyHistoryVo.setUserName(insOrders.getUsername()); insAreaCompanyHistoryVo.setUserId(insOrders.getUserid()); insAreaCompanyHistoryVo.setQuoteno(insOrders.getQuoteno()); InsFeeOrderNew insFeeOrderNew = insFeeOrderNewMap.get(a.getId()); if (!ObjectUtils.isEmpty(insFeeOrderNew)){ SubOrderExportFeeVo subOrderExportFeeVo = costsCalcService.getExportFee(insFeeOrderNew); insAreaCompanyHistoryVo.setJqExportFee(subOrderExportFeeVo.getJqExportCosts()); insAreaCompanyHistoryVo.setSyExportFee(subOrderExportFeeVo.getSyExportCosts()); insAreaCompanyHistoryVo.setNoExportFee(subOrderExportFeeVo.getNoExportCosts()); insAreaCompanyHistoryVo.setJqExportRadio(subOrderExportFeeVo.getJqExportRadio()); insAreaCompanyHistoryVo.setSyExportRadio(subOrderExportFeeVo.getSyExportRadio()); insAreaCompanyHistoryVo.setNoExportRadio(subOrderExportFeeVo.getNoExportRadio()); insAreaCompanyHistoryVo.setSumExportFee(subOrderExportFeeVo.getJqExportCosts() .add(subOrderExportFeeVo.getSyExportCosts()) .add(subOrderExportFeeVo.getNoExportCosts())); } // 设置评分信息 insAreaCompanyHistoryVo.setRatingInformation(); return insAreaCompanyHistoryVo; }).collect(Collectors.toList()); return HttpResult.ok("success", collect); } @PostMapping("/getByCompanyId") @ApiOperation(value = "通过子订单查询订单信息") public HttpResult getByCompanyId(@RequestSingleParam(value = "companyId") String companyId) { String userId = getUserId(); return this.insOrdersService.getByCompanyId(companyId, userId); } @PostMapping("/getAccidentalDriving") @ApiOperation(value = "获取驾意险") public HttpResult> getAccidentalDriving(@RequestBody @Valid AccidentalDrivingQueryVo accidentalDrivingVo) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(InsAccidentalDriving::getCompanyCode, accidentalDrivingVo.getCompanyCode()).and(i -> i.eq(InsAccidentalDriving::getSeatNumMax, accidentalDrivingVo.getSeatNum()).or(j -> j.le(InsAccidentalDriving::getSeatNumMax, accidentalDrivingVo.getSeatNum()).ge(InsAccidentalDriving::getSeatNumMax, accidentalDrivingVo.getSeatNum()))); List insAccidentalDrivings = insAccidentalDrivingService.list(wrapper); if (insAccidentalDrivings.isEmpty()) { throw new SystemException("查询结果为空"); } return HttpResult.ok(insAccidentalDrivings); } @PostMapping("/verifyOrders") @ApiOperation(value = "验证近期是否出过单") public HttpResult verifyOrders(@RequestBody VerifyOrdersVo verifyOrdersVo) { return insOrdersService.verifyOrders(verifyOrdersVo); } @PostMapping("/getPolicyInsuranceReport") @ApiOperation(value = "分页获取保单清单数据") public HttpResult> getPolicyInsuranceReport(@RequestBody PolicyInsuranceReportReqVo policyInsuranceReportReqVo) { String userId = getUserId(); BasePageResult quoteResult = insOrdersService.getPolicyInsuranceReport(policyInsuranceReportReqVo, userId); return HttpResult.ok("success", quoteResult); } @PostMapping("/exportPolicyInsuranceReport") @ApiOperation(value = "导出保单清单数据") public HttpResult exportPolicyInsuranceReport(@RequestBody PolicyInsuranceReportReqVo policyInsuranceReportReqVo) { String userId = getUserId(); return insOrdersService.exportPolicyInsuranceReport(policyInsuranceReportReqVo, userId); } /** * @version * @author: hxl * @Date: 2024/4/17 15:32 * @Description: 添加待客录单查询订单接口 */ @PostMapping("/queryPageHospitalityOrder") @ApiOperation(value = "通过用户id和订单状态查询待客录单接口+分页") public HttpResult> queryPageHospitalityOrder(@RequestBody OrderQueryVo orderQueryVo) { if (orderQueryVo.getUserId() == null || "".equals(orderQueryVo.getUserId())) { return HttpResult.error("待客录单人员id不能为空"); } try { //前台传的部门不对赋值null orderQueryVo.setDeptId(null); BasePageResult quoteResult = this.insOrdersService.queryPageHospitalityOrder(orderQueryVo); return HttpResult.ok("success", quoteResult); } catch (Exception e) { return HttpResult.error("查询失败" + e.getMessage()); } } /** * @version * @author: hxl * @Date: 2024/4/17 15:32 * @Description: 通过用户id和订单状态查询关联渠道的订单数据+分页 */ @AntiReptile @PostMapping("/queryPageHospitalityByChannel") @ApiOperation(value = "通过用户id和订单状态查询关联渠道的订单数据+分页") public HttpResult queryPageHospitalityByChannel(@RequestBody OrderQueryVo orderQueryVo) { if (orderQueryVo.getUserId() == null || "".equals(orderQueryVo.getUserId())) { return HttpResult.error("待客录单人员id不能为空"); } try { BasePageResult quoteResult = this.insOrdersService.queryPageOrderByLinkType(orderQueryVo, OrderLinkTypeConstants.ORDER_LINK_TYPE_CONSTANTS_1.getCode()); return HttpResult.ok("success", quoteResult); } catch (Exception e) { return HttpResult.error("查询失败" + e.getMessage()); } } /** * @version * @author: hxl * @Date: 2024/4/17 15:32 * @Description: 通过用户id和订单状态查询关联代理人的订单数据+分页 */ @AntiReptile @PostMapping("/queryPageHospitalityLinkagent") @ApiOperation(value = "通过用户id和订单状态查询关联代理人的订单数据+分页") public HttpResult queryPageHospitalityLinkagent(@RequestBody OrderQueryVo orderQueryVo) { if (orderQueryVo.getUserId() == null || "".equals(orderQueryVo.getUserId())) { return HttpResult.error("待客录单人员id不能为空"); } try { BasePageResult quoteResult = this.insOrdersService.queryPageOrderByLinkType(orderQueryVo, OrderLinkTypeConstants.ORDER_LINK_TYPE_CONSTANTS_2.getCode()); return HttpResult.ok("success", quoteResult); } catch (Exception e) { return HttpResult.error("查询失败" + e.getMessage()); } } /** * @version * @author: hxl * @Date: 2024/4/17 15:32 * @Description: 通过用户id和订单状态查询关联保险公司的订单数据+分页 */ @AntiReptile @PostMapping("/queryPageHospitalityByInsuranceCompany") @ApiOperation(value = "通过用户id和订单状态查询关联保险公司的订单数据+分页") public HttpResult queryPageHospitalityByInsuranceCompany(@RequestBody OrderQueryVo orderQueryVo) { if (orderQueryVo.getUserId() == null || "".equals(orderQueryVo.getUserId())) { return HttpResult.error("待客录单人员id不能为空"); } //if(orderQueryVo.getOrderStatus()==null || "".equals(orderQueryVo.getOrderStatus())){ // return HttpResult.error("订单状态不能为空"); // } try { BasePageResult quoteResult = this.insOrdersService.queryPageOrderByLinkType(orderQueryVo, OrderLinkTypeConstants.ORDER_LINK_TYPE_CONSTANTS_3.getCode()); return HttpResult.ok("success", quoteResult); } catch (Exception e) { return HttpResult.error("查询失败" + e.getMessage()); } } @AntiReptile @PostMapping("/queryPageTelemarketingLinkAgent") @ApiOperation(value = "通过用户id和订单状态查询电销人员的订单数据+分页") public HttpResult queryPageTelemarketingLinkAgent(@RequestBody OrderQueryVo orderQueryVo) { try { BasePageResult quoteResult = this.insOrdersService.queryPageOrderByLinkType(orderQueryVo, OrderLinkTypeConstants.ORDER_LINK_TYPE_CONSTANTS_4.getCode()); return HttpResult.ok("success", quoteResult); } catch (Exception e) { return HttpResult.error("查询失败" + e.getMessage()); } } @PostMapping("/getTaskByCompanyId") @ApiOperation(value = "通过子订单查询订单信息(任务管理)") public HttpResult getTaskByCompanyId(@RequestSingleParam(value = "companyId") String companyId) { String userId = getUserId(); return this.insOrdersService.getTaskByCompanyId(companyId, userId); } /** * @version * @author: hxl * @Date: 2024/5/13 8:41 * @Description: 批量更新子订单的险种信息 */ @GetMapping("/updateBatchPruductById") @ApiOperation(value = "批量更新子订单的险种信息") public HttpResult updateBatchPruductById(String subOrderId) { return this.insAreaCompanyService.updateBatchPruductById(subOrderId); } @GetMapping("/getMobileByOrderNo") @ApiOperation(value = "通过订单号查询手机号码") public HttpResult getMobileByOrderNo(String orderNo, String type) { JSONObject result = new JSONObject(); String phone = insOrdersService.getMobileByOrderNo(orderNo, type); result.put("phone", phone); SysUserIsDial sysUserIsDial = sysUserIsDialService.getByUserId(getUserId()); if (sysUserIsDial != null) { if (sysUserIsDial.getIsDial().equals("1")) { result.put("username", sysUserIsDial.getDialUserName()); result.put("password", sysUserIsDial.getDialPassWord()); } } return HttpResult.ok(result); } /** * 获取快到期的保单 * * @return */ @PostMapping("/getExpirationInsure") @ApiOperation(value = "获取快到期的保单") public HttpResult getExpirationInsure(@RequestBody OrderExpirationQueryVo orderExpirationQueryVo) { Page page = buildPageRequest(orderExpirationQueryVo.getPageDto()); orderExpirationQueryVo.setUserid(getUserId()); return HttpResult.ok(insOrdersService.getExpirationInsure(page, orderExpirationQueryVo)); } /** * 获取快到期的保单的数量 * * @return */ @PostMapping("/getExpirationInsureCount") @ApiOperation(value = "获取快到期的保单数量") public HttpResult getExpirationInsureCount(@RequestBody OrderExpirationQueryVo orderExpirationQueryVo) { orderExpirationQueryVo.setUserid(getUserId()); return HttpResult.ok(insOrdersService.getExpirationInsureCount(orderExpirationQueryVo)); } /** * 批单操作 * * @param batchOrderVo * @return */ @PostMapping("/batchOrder") @ApiOperation(value = "批单") public HttpResult batchOrder(@RequestBody BatchOrderVo batchOrderVo) { boolean result = batchOrderService.batchOrder(batchOrderVo); if (result) { return HttpResult.ok("批单修改成功,等待审核"); } else { return HttpResult.error("批单修改失败"); } } /** * 获取批单信息 * * @param subOrderNo * @return */ @GetMapping("/getBatchOrder") @ApiOperation(value = "获取批单信息") public HttpResult getBatchOrder(String subOrderNo) { BatchOrder batchOrderBySubOrderNo = batchOrderService.getBatchOrderBySubOrderNo(subOrderNo); if (batchOrderBySubOrderNo != null) { return HttpResult.ok(batchOrderBySubOrderNo); } else { return HttpResult.error("获取批单失败"); } } @PostMapping("/getBatchOrderList") @ApiOperation(value = "获取批单列表") public HttpResult getBatchOrderList(@RequestBody BatchOrderQueryVo batchOrderQueryVo) { Page page = buildPageRequest(batchOrderQueryVo.getPageDto()); if (batchOrderQueryVo.getIsAudit() == null) { batchOrderQueryVo.setIsAudit(0); } return HttpResult.ok(batchOrderService.getBatchOrderList(page, batchOrderQueryVo)); } @PostMapping("/getBtachOrderRejectList") @ApiOperation(value = "获取批单驳回列表") public HttpResult getBatchOrderRejectList(@RequestBody BatchOrderQueryVo batchOrderQueryVo) { Page page = buildPageRequest(batchOrderQueryVo.getPageDto()); batchOrderQueryVo.setUserId(getUserId()); if (batchOrderQueryVo.getIsAudit() == null) { batchOrderQueryVo.setIsAudit(2); } return HttpResult.ok(batchOrderService.getBatchOrderRejectList(page, batchOrderQueryVo)); } @PostMapping("/auditBatchOrder") @ApiOperation(value = "批单审核") public HttpResult auditBatchOrder(@RequestBody BatchOrderAuditVo batchOrderAuditVo) { boolean result = batchOrderService.auditBatchOrder(batchOrderAuditVo); if (result) { return HttpResult.ok("批单审核成功"); } else { return HttpResult.error("批单审核失败"); } } @PostMapping("/savePosition") @ApiOperation(value = "保存位置信息") public HttpResult savePosition(@RequestBody InsAreaCompanyPosition insAreaCompanyPosition) { return HttpResult.ok(insAreaCompanyPositionService.save(insAreaCompanyPosition)); } /** * @version * @author: hxl * @Date: 2024/6/24 18:07 * @Description: 通过子订单ids获取比价信息 */ @PostMapping("/getInquiryDetalsBySubOrderNos") @ApiOperation(value = "通过子订单ids获取比价信息") public HttpResult getInquiryDetalsBySubOrderNos(@RequestBody InquiryDetalsQueryDto inquiryDetalsDto) { return HttpResult.ok(insOrdersService.getInquiryDetalsBySubOrderIds(inquiryDetalsDto)); } @PostMapping("/queryHxOrdersCount") @ApiOperation(value = "查询后线人员代课录单次数") public HttpResult> queryHxOrdersCount(@RequestBody QueryHxOrdersCountVo queryHxOrdersCountVo) { IPage result = insOrdersService.queryHxOrdersCount(queryHxOrdersCountVo); return HttpResult.ok("success", result); } @PostMapping("/exportHxOrdersCount") @ApiOperation(value = "导出后线人员代课录单次数") public HttpResult exportHxOrdersCount(@RequestBody QueryHxOrdersCountVo queryHxOrdersCountVo) throws IOException { List result = insOrdersService.exportHxOrdersCount(queryHxOrdersCountVo); String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { Files.createDirectories(path); } String fileName = EasyExcelUtils.downExcel(uploadPath, "后线人员代课录单统计报表", QueryHxOrdersCountExcel.class, result); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } @PostMapping("/queryLicenseInOrder") @ApiOperation(value = "查询订单中的车牌") public HttpResult> queryLicenseInOrder(@RequestBody QueryLicenseInOrderVo queryLicenseInOrderVo){ List licenseList = insOrdersService.queryLicenseInOrder(queryLicenseInOrderVo); return HttpResult.ok(licenseList); } @PostMapping("/queryInsuredInOrder") @ApiOperation(value = "查询订单中的被保人") public HttpResult> queryInsuredInOrder(@RequestBody QueryLicenseInOrderVo queryInsuredInOrderVo){ List insured = insOrdersService.queryInsuredInOrder(queryInsuredInOrderVo); return HttpResult.ok(insured); } @PostMapping("/shutDown/{orderNo}") @ApiOperation(value = "关闭订单") public HttpResult shutDown(@PathVariable String orderNo) { InsOrders insOrders = insOrdersService.getById(orderNo); insOrders.setDelFlag("0"); boolean b = insOrdersService.updateById(insOrders); AssertionUtils.isSucceed(b, "关闭订单失败"); return HttpResult.ok(); } }