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; import com.ydtech.aop.request.RequestSingleParam; import com.ydtech.constants.enums.dict.FeeAuditAuditstatus; import com.ydtech.constants.enums.dict.InsOrderStatusEnum; import com.ydtech.core.page.HttpResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.fnc.entity.InsFeeAudit; 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; import com.ydtech.modules.order.entity.InsOrders; import com.ydtech.modules.order.entity.InsOrdersTrack; import com.ydtech.modules.order.entity.vo.AuditOrderFeeVo; import com.ydtech.modules.order.entity.vo.OrderQueryVo; import com.ydtech.modules.order.entity.vo.OrderVo; import com.ydtech.modules.order.service.InsAreaCompanyService; import com.ydtech.modules.order.service.InsOrdersService; import com.ydtech.modules.order.service.InsOrdersTrackService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; 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.List; @Api(tags = "财务-车险结算") @RequestMapping("/fnc/carSettle") @RestController public class CarSettleController extends BaseController { private final InsOrdersService insOrdersService; private final InsAreaCompanyService insAreaCompanyService; private final InsFeeAuditService insFeeAuditService; private final InsFeeAuditHistoryService insFeeAuditHistoryService; private final InsOrdersTrackService insOrdersTrackService; public CarSettleController(InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService, InsFeeAuditService insFeeAuditService, InsFeeAuditHistoryService insFeeAuditHistoryService,InsOrdersTrackService insOrdersTrackService) { this.insAreaCompanyService = insAreaCompanyService; this.insOrdersService = insOrdersService; this.insFeeAuditService = insFeeAuditService; this.insFeeAuditHistoryService = insFeeAuditHistoryService; this.insOrdersTrackService = insOrdersTrackService; } /** * 根据费用审核状态查询订单 auditStatus * * @param orderQueryVo * @return */ @PostMapping("/queryPageOrder") @ApiOperation(value = "[1]分页查询订单接口") public HttpResult> queryPageOrder(@RequestBody OrderQueryVo orderQueryVo) { orderQueryVo.setOrderStatus("3");//3已承保 BasePageResult quoteResult = this.insOrdersService.queryPageOrder(orderQueryVo); return HttpResult.ok("success", quoteResult); } /** * 根据订单号查询费用明细 * * @param orderNo * @return */ @PostMapping("/feeDetail") @ApiOperation(value = "[2]根据订单号查询费用明细") public HttpResult queryFeeDetail(@RequestSingleParam(value = "orderNo") @Valid String orderNo) { return insOrdersService.getByCompanyId(orderNo, "accountingUser"); } @PostMapping("/validateFeeDetail") @ApiOperation(value = "[2]校验查询费用明细是否占单") public HttpResult validateFeeDetail(@RequestSingleParam(value = "orderNo") @Valid String orderNo) { return insOrdersService.validateFeeDetail(orderNo, "accountingUser"); } @PostMapping("/liftFeeDetail") @ApiOperation(value = "解除订单占用") public HttpResult liftFeeDetail(@RequestSingleParam(value = "orderNo") @Valid String orderNo) { return insOrdersService.liftFeeDetail(orderNo); } /** * 费用审核 * * @param * @return */ @PostMapping("/auditFee") @ApiOperation(value = "[3]费用审核") public HttpResult auditFee(@RequestBody @Valid AuditOrderFeeVo auditOrderFeeVo) { // 订单号 String orderNo = auditOrderFeeVo.getOrderNo(); String insOrderNo = auditOrderFeeVo.getInsOrderNo(); //查询改订单是已审核 List feeList = insFeeAuditService.lambdaQuery() .eq(InsFeeAudit::getOrderno, orderNo) .eq(InsFeeAudit::getInsOrderNo, insOrderNo) .eq(InsFeeAudit::getAuditstatus, FeeAuditAuditstatus.PASSED.getCode()) .list(); if (feeList != null && !feeList.isEmpty()) { return HttpResult.error("该订单已审核"); } //查询已承保的子订单号 List areaList = insAreaCompanyService.lambdaQuery() .eq(StringUtils.isNotEmpty(orderNo), InsAreaCompany::getOrderno, orderNo) .eq(StringUtils.isNotEmpty(insOrderNo),InsAreaCompany::getId,insOrderNo) .eq(InsAreaCompany::getOrderstatus, InsOrderStatusEnum.ACCEPT_INSURANCE.getCode()) .list();//3已承保 if (areaList != null && !areaList.isEmpty()) { try { // if ("1".equals(auditOrderFeeVo.getUpdateFlag())) { // String userId = getUserId(); // feeRuleSchemeService.compareAndUpdateFeeOrderInfo(areaList.get(0).getId(), auditOrderFeeVo.getJqCostsProportionStr(), // auditOrderFeeVo.getSyCostsProportionStr(), userId); // } String problemOrder = areaList.get(0).getProblemOrder(); if ("1".equals(problemOrder)) { throw new SystemException("疑问订单不允许审核"); } //审核通过 if (auditOrderFeeVo.getAuditStatus().equals("1")) { LocalDateTime signingTime = areaList.get(0).getSigningTime(); if (signingTime==null) { throw new SystemException("签单日期为空不允许审核,请手动更新订单签单时间或者联系管理员!!!"); } insFeeAuditService.feeAudit(orderNo, areaList.get(0).getId(), false, FeeAuditAuditstatus.PASSED.getCode()); } else if (auditOrderFeeVo.getAuditStatus().equals("0") || auditOrderFeeVo.getAuditStatus().equals("2")) { insFeeAuditService.saveDefaultInsFeeAuditAndHistory(orderNo, areaList.get(0).getId(), auditOrderFeeVo.getAuditStatus(), auditOrderFeeVo.getRejectinfo()); } }catch (SystemException e) { return HttpResult.error(e.getMessage()); } catch (Exception e) { e.printStackTrace(); return HttpResult.error("系统异常"); } return HttpResult.ok("审核成功"); } else { return HttpResult.error("订单号有误-未承保"); } } @GetMapping("/getFeeAuditHistory/{orderno}") @ApiOperation(value = "获取费用审核轨迹") public HttpResult getFeeAuditHistory(@PathVariable("orderno") String orderno) { InsAreaCompany underWrittenSubOrder = insAreaCompanyService.getById(orderno); 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 insOrdersTracks = insOrdersTrackService.list(new LambdaQueryWrapper().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("licenseNo",insOrders.getLicenseno()); jsonObject.put("insuredname",customer==null?"":customer.getName()); // jsonObject.put("remark",item.getRemark()); list.add(jsonObject); }); List insOrdersTracksCB = insOrdersTrackService.list(new LambdaQueryWrapper().eq(InsOrdersTrack::getSuborder, orderno).eq(InsOrdersTrack::getOrderStatus,"3")); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(InsFeeAuditHistory::getInsOrderNo, orderno); wrapper.orderByAsc(InsFeeAuditHistory::getOperatorTime); List 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); }); return HttpResult.ok("success", list); } /** * 标注疑问订单 * * @return */ @PostMapping("markProblemOrder") @ApiOperation("标注疑问订单") public HttpResult markProblemOrder(@RequestBody ProblemOrderQueryVo problemOrderQueryVo) { return insAreaCompanyService.markProblemOrder(problemOrderQueryVo) ? HttpResult.ok("标注成功") : HttpResult.error("标注失败"); } }