CarSettleController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package com.ydtech.modules.fnc.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.ydtech.aop.request.RequestSingleParam;
  7. import com.ydtech.constants.enums.dict.FeeAuditAuditstatus;
  8. import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
  9. import com.ydtech.core.page.HttpResult;
  10. import com.ydtech.exception.SystemException;
  11. import com.ydtech.modules.base.controller.BaseController;
  12. import com.ydtech.modules.fnc.entity.InsFeeAudit;
  13. import com.ydtech.modules.fnc.entity.InsFeeAuditHistory;
  14. import com.ydtech.modules.fnc.entity.vo.ProblemOrderQueryVo;
  15. import com.ydtech.modules.fnc.service.InsFeeAuditHistoryService;
  16. import com.ydtech.modules.fnc.service.InsFeeAuditService;
  17. import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
  18. import com.ydtech.modules.order.constants.OrderFeeAuditHistroy;
  19. import com.ydtech.modules.order.entity.BasePageResult;
  20. import com.ydtech.modules.order.entity.InsAreaCompany;
  21. import com.ydtech.modules.order.entity.InsOrders;
  22. import com.ydtech.modules.order.entity.InsOrdersTrack;
  23. import com.ydtech.modules.order.entity.vo.AuditOrderFeeVo;
  24. import com.ydtech.modules.order.entity.vo.OrderQueryVo;
  25. import com.ydtech.modules.order.entity.vo.OrderVo;
  26. import com.ydtech.modules.order.service.InsAreaCompanyService;
  27. import com.ydtech.modules.order.service.InsOrdersService;
  28. import com.ydtech.modules.order.service.InsOrdersTrackService;
  29. import io.swagger.annotations.Api;
  30. import io.swagger.annotations.ApiOperation;
  31. import org.apache.commons.lang3.StringUtils;
  32. import org.springframework.web.bind.annotation.*;
  33. import javax.validation.Valid;
  34. import java.time.LocalDateTime;
  35. import java.time.format.DateTimeFormatter;
  36. import java.util.List;
  37. @Api(tags = "财务-车险结算")
  38. @RequestMapping("/fnc/carSettle")
  39. @RestController
  40. public class CarSettleController extends BaseController {
  41. private final InsOrdersService insOrdersService;
  42. private final InsAreaCompanyService insAreaCompanyService;
  43. private final InsFeeAuditService insFeeAuditService;
  44. private final InsFeeAuditHistoryService insFeeAuditHistoryService;
  45. private final InsOrdersTrackService insOrdersTrackService;
  46. public CarSettleController(InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService,
  47. InsFeeAuditService insFeeAuditService,
  48. InsFeeAuditHistoryService insFeeAuditHistoryService,InsOrdersTrackService insOrdersTrackService) {
  49. this.insAreaCompanyService = insAreaCompanyService;
  50. this.insOrdersService = insOrdersService;
  51. this.insFeeAuditService = insFeeAuditService;
  52. this.insFeeAuditHistoryService = insFeeAuditHistoryService;
  53. this.insOrdersTrackService = insOrdersTrackService;
  54. }
  55. /**
  56. * 根据费用审核状态查询订单 auditStatus
  57. *
  58. * @param orderQueryVo
  59. * @return
  60. */
  61. @PostMapping("/queryPageOrder")
  62. @ApiOperation(value = "[1]分页查询订单接口")
  63. public HttpResult<BasePageResult<InsOrders>> queryPageOrder(@RequestBody OrderQueryVo orderQueryVo) {
  64. orderQueryVo.setOrderStatus("3");//3已承保
  65. BasePageResult<InsOrders> quoteResult = this.insOrdersService.queryPageOrder(orderQueryVo);
  66. return HttpResult.ok("success", quoteResult);
  67. }
  68. /**
  69. * 根据订单号查询费用明细
  70. *
  71. * @param orderNo
  72. * @return
  73. */
  74. @PostMapping("/feeDetail")
  75. @ApiOperation(value = "[2]根据订单号查询费用明细")
  76. public HttpResult<OrderVo> queryFeeDetail(@RequestSingleParam(value = "orderNo") @Valid String orderNo) {
  77. return insOrdersService.getByCompanyId(orderNo, "accountingUser");
  78. }
  79. @PostMapping("/validateFeeDetail")
  80. @ApiOperation(value = "[2]校验查询费用明细是否占单")
  81. public HttpResult<OrderVo> validateFeeDetail(@RequestSingleParam(value = "orderNo") @Valid String orderNo) {
  82. return insOrdersService.validateFeeDetail(orderNo, "accountingUser");
  83. }
  84. @PostMapping("/liftFeeDetail")
  85. @ApiOperation(value = "解除订单占用")
  86. public HttpResult liftFeeDetail(@RequestSingleParam(value = "orderNo") @Valid String orderNo) {
  87. return insOrdersService.liftFeeDetail(orderNo);
  88. }
  89. /**
  90. * 费用审核
  91. *
  92. * @param
  93. * @return
  94. */
  95. @PostMapping("/auditFee")
  96. @ApiOperation(value = "[3]费用审核")
  97. public HttpResult auditFee(@RequestBody @Valid AuditOrderFeeVo auditOrderFeeVo) {
  98. // 订单号
  99. String orderNo = auditOrderFeeVo.getOrderNo();
  100. String insOrderNo = auditOrderFeeVo.getInsOrderNo();
  101. //查询改订单是已审核
  102. List<InsFeeAudit> feeList = insFeeAuditService.lambdaQuery()
  103. .eq(InsFeeAudit::getOrderno, orderNo)
  104. .eq(InsFeeAudit::getInsOrderNo, insOrderNo)
  105. .eq(InsFeeAudit::getAuditstatus, FeeAuditAuditstatus.PASSED.getCode())
  106. .list();
  107. if (feeList != null && !feeList.isEmpty()) {
  108. return HttpResult.error("该订单已审核");
  109. }
  110. //查询已承保的子订单号
  111. List<InsAreaCompany> areaList = insAreaCompanyService.lambdaQuery()
  112. .eq(StringUtils.isNotEmpty(orderNo), InsAreaCompany::getOrderno, orderNo)
  113. .eq(StringUtils.isNotEmpty(insOrderNo),InsAreaCompany::getId,insOrderNo)
  114. .eq(InsAreaCompany::getOrderstatus, InsOrderStatusEnum.ACCEPT_INSURANCE.getCode())
  115. .list();//3已承保
  116. if (areaList != null && !areaList.isEmpty()) {
  117. try {
  118. // if ("1".equals(auditOrderFeeVo.getUpdateFlag())) {
  119. // String userId = getUserId();
  120. // feeRuleSchemeService.compareAndUpdateFeeOrderInfo(areaList.get(0).getId(), auditOrderFeeVo.getJqCostsProportionStr(),
  121. // auditOrderFeeVo.getSyCostsProportionStr(), userId);
  122. // }
  123. String problemOrder = areaList.get(0).getProblemOrder();
  124. if ("1".equals(problemOrder)) {
  125. throw new SystemException("疑问订单不允许审核");
  126. }
  127. //审核通过
  128. if (auditOrderFeeVo.getAuditStatus().equals("1")) {
  129. LocalDateTime signingTime = areaList.get(0).getSigningTime();
  130. if (signingTime==null) {
  131. throw new SystemException("签单日期为空不允许审核,请手动更新订单签单时间或者联系管理员!!!");
  132. }
  133. insFeeAuditService.feeAudit(orderNo, areaList.get(0).getId(), false, FeeAuditAuditstatus.PASSED.getCode());
  134. } else if (auditOrderFeeVo.getAuditStatus().equals("0") || auditOrderFeeVo.getAuditStatus().equals("2")) {
  135. insFeeAuditService.saveDefaultInsFeeAuditAndHistory(orderNo, areaList.get(0).getId(),
  136. auditOrderFeeVo.getAuditStatus(), auditOrderFeeVo.getRejectinfo());
  137. }
  138. }catch (SystemException e) {
  139. return HttpResult.error(e.getMessage());
  140. } catch (Exception e) {
  141. e.printStackTrace();
  142. return HttpResult.error("系统异常");
  143. }
  144. return HttpResult.ok("审核成功");
  145. } else {
  146. return HttpResult.error("订单号有误-未承保");
  147. }
  148. }
  149. @GetMapping("/getFeeAuditHistory/{orderno}")
  150. @ApiOperation(value = "获取费用审核轨迹")
  151. public HttpResult getFeeAuditHistory(@PathVariable("orderno") String orderno) {
  152. InsAreaCompany underWrittenSubOrder = insAreaCompanyService.getById(orderno);
  153. if (underWrittenSubOrder == null) {
  154. return HttpResult.error("订单号有误-未承保");
  155. }
  156. InsOrders insOrders = insOrdersService.getById(underWrittenSubOrder.getOrderno());
  157. CustomerInfoVo customer = JSON.toJavaObject(insOrders.getInsureinfo(), CustomerInfoVo.class);
  158. JSONArray list = new JSONArray();
  159. List<InsOrdersTrack> insOrdersTracks = insOrdersTrackService.list(new LambdaQueryWrapper<InsOrdersTrack>().eq(InsOrdersTrack::getSuborder, orderno)
  160. .orderByAsc(InsOrdersTrack::getCreateTime));
  161. insOrdersTracks.forEach(item->{
  162. String desc = OrderFeeAuditHistroy.getDesc(item.getOrderStatus());
  163. JSONObject jsonObject = new JSONObject();
  164. jsonObject.put("id",item.getId());
  165. jsonObject.put("insCompany",item.getInsCompany());
  166. jsonObject.put("operatorTime",item.getCreateTime());
  167. jsonObject.put("audituser",item.getOperatorId());
  168. jsonObject.put("operator",item.getOperator());
  169. jsonObject.put("desc",desc);
  170. jsonObject.put("licenseNo",insOrders.getLicenseno());
  171. jsonObject.put("insuredname",customer==null?"":customer.getName());
  172. // jsonObject.put("remark",item.getRemark());
  173. list.add(jsonObject);
  174. });
  175. List<InsOrdersTrack> insOrdersTracksCB = insOrdersTrackService.list(new LambdaQueryWrapper<InsOrdersTrack>().eq(InsOrdersTrack::getSuborder, orderno).eq(InsOrdersTrack::getOrderStatus,"3"));
  176. LambdaQueryWrapper<InsFeeAuditHistory> wrapper = new LambdaQueryWrapper<>();
  177. wrapper.eq(InsFeeAuditHistory::getInsOrderNo, orderno);
  178. wrapper.orderByAsc(InsFeeAuditHistory::getOperatorTime);
  179. List<InsFeeAuditHistory> insFeeAuditHistories = insFeeAuditHistoryService.list(wrapper);
  180. insFeeAuditHistories.forEach(item->{
  181. String desc = OrderFeeAuditHistroy.getDesc(OrderFeeAuditHistroy.convertStatus(item.getAuditstatus()));
  182. //判断是待审核查询已承保的人的工号
  183. if(OrderFeeAuditHistroy.OFH_5.getDesc().equals(desc) ){
  184. if(insOrdersTracksCB!=null && !insOrdersTracksCB.isEmpty()){
  185. item.setAudituser(insOrdersTracksCB.get(0).getOperatorId());
  186. }
  187. }
  188. if("自动审核".equals(item.getAudituser()) ){
  189. item.setOperator("自动审核");
  190. item.setAudituser("");
  191. }
  192. JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(item));
  193. LocalDateTime operatorTime = item.getOperatorTime();
  194. String dateStr = operatorTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
  195. jsonObject.put("id",item.getId());
  196. jsonObject.put("insCompany",item.getInsCompany());
  197. jsonObject.put("operatorTime",dateStr);
  198. jsonObject.put("audituser",item.getAudituser());
  199. jsonObject.put("operator",item.getOperator());
  200. jsonObject.put("desc",desc);
  201. jsonObject.put("remark",null);
  202. jsonObject.put("licenseNo",insOrders.getLicenseno());
  203. jsonObject.put("insuredname",customer==null?"":customer.getName());
  204. list.add(jsonObject);
  205. });
  206. return HttpResult.ok("success", list);
  207. }
  208. /**
  209. * 标注疑问订单
  210. *
  211. * @return
  212. */
  213. @PostMapping("markProblemOrder")
  214. @ApiOperation("标注疑问订单")
  215. public HttpResult<Object> markProblemOrder(@RequestBody ProblemOrderQueryVo problemOrderQueryVo) {
  216. return insAreaCompanyService.markProblemOrder(problemOrderQueryVo) ? HttpResult.ok("标注成功")
  217. : HttpResult.error("标注失败");
  218. }
  219. }