CarSettleController.java 11 KB

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