QrCodeController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. package com.ydtech.modules.order.controller;
  2. import cn.dev33.satoken.annotation.SaIgnore;
  3. import cn.hutool.core.collection.CollUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.ydtech.exception.SystemException;
  6. import com.ydtech.modules.admin.constants.UserConstants;
  7. import com.ydtech.modules.admin.model.po.SysBarcodeConfig;
  8. import com.ydtech.modules.admin.service.SysBarcodeConfigService;
  9. import com.ydtech.modules.admin.service.SysQRCodeRelationService;
  10. import com.ydtech.modules.esm.model.EsmInsCompany;
  11. import com.ydtech.modules.esm.service.EsmInsCompanyService;
  12. import com.ydtech.modules.order.entity.InsAreaCompany;
  13. import com.ydtech.modules.order.entity.InsOrderQrCode;
  14. import com.ydtech.modules.order.entity.InsOrders;
  15. import com.ydtech.modules.order.entity.vo.QrCodeVo;
  16. import com.ydtech.modules.order.service.InsAreaCompanyService;
  17. import com.ydtech.modules.order.service.InsOrderQrCodeService;
  18. import com.ydtech.modules.order.service.InsOrdersService;
  19. import com.ydtech.modules.protocol.constants.ValidStatus;
  20. import com.ydtech.modules.protocol.entity.po.PtlAgreement;
  21. import com.ydtech.modules.protocol.service.PtlAgreementService;
  22. import com.ydtech.utils.StringUtils;
  23. import io.swagger.annotations.Api;
  24. import io.swagger.annotations.ApiOperation;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.beans.factory.annotation.Value;
  27. import org.springframework.stereotype.Controller;
  28. import org.springframework.web.bind.annotation.GetMapping;
  29. import org.springframework.web.bind.annotation.PostMapping;
  30. import org.springframework.web.bind.annotation.RequestMapping;
  31. import org.springframework.web.servlet.ModelAndView;
  32. import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
  33. import javax.annotation.Resource;
  34. import java.io.IOException;
  35. import java.time.LocalDate;
  36. import java.time.LocalDateTime;
  37. import java.util.Date;
  38. import java.util.HashMap;
  39. import java.util.List;
  40. import java.util.Objects;
  41. @Api(tags = "订单二维码管理")
  42. @Controller
  43. @RequestMapping(value = "/order/qrCode")
  44. public class QrCodeController {
  45. @Resource
  46. private InsOrderQrCodeService insOrderQrCodeService;
  47. @Resource
  48. private InsAreaCompanyService insAreaCompanyService;
  49. @Resource
  50. SysQRCodeRelationService sysQRCodeRelationService;
  51. @Resource
  52. SysBarcodeConfigService sysBarcodeConfigService;
  53. @Resource
  54. InsOrdersService insOrdersService;
  55. @Resource
  56. private PtlAgreementService ptlAgreementService;
  57. //二维码生成地址
  58. @Value("${qrcode.genAddress}")
  59. private String qrCodeGenAddress;
  60. //二维码生成地址
  61. @Value("${qrcode.imageSrc}")
  62. private String imageSrc;
  63. @Autowired
  64. private EsmInsCompanyService esmInsCompanyService;
  65. @GetMapping(value = "/getQrCode")
  66. @ApiOperation(value = "获取二维码")
  67. public ModelAndView getQrCode(String areaCompanyId) {
  68. InsOrderQrCode insOrderQrCode = insOrderQrCodeService.getOneOrSave(areaCompanyId);
  69. InsAreaCompany insAreaCompany = insAreaCompanyService.getById(areaCompanyId);
  70. Integer qrCodeType = sysQRCodeRelationService.getQRCodeType(insAreaCompany.getApiType(), insAreaCompany.getCompanyId(),
  71. insAreaCompany.getInscompany());
  72. ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
  73. if (!Objects.isNull(insOrderQrCode)) {
  74. InsOrders insOrders = insOrdersService.getById(insOrderQrCode.getOrderno());
  75. QrCodeVo qrCodeVo = new QrCodeVo();
  76. String qrCodeUrl = qrCodeGenAddress + "?areaCompanyId=" + areaCompanyId;
  77. qrCodeVo.setQrCodeUrl(qrCodeUrl);
  78. qrCodeVo.setInscompany(insAreaCompany.getInscompany());//保险公司
  79. qrCodeVo.setSumpremium(insAreaCompany.getSumpremium());//总保费
  80. qrCodeVo.setSypremium(insAreaCompany.getSypremium());//商业险
  81. qrCodeVo.setJqpremium(insAreaCompany.getJqpremium());//交强险
  82. qrCodeVo.setTaxamount(insAreaCompany.getTaxamount());//车船税
  83. qrCodeVo.setJypremium(insAreaCompany.getJypremium());//驾驭险
  84. qrCodeVo.setCApplyNme(insOrders.getApplyinfo().getString("name"));//投保人
  85. qrCodeVo.setCInsuredNme(insOrders.getInsureinfo().getString("name"));//被保人
  86. qrCodeVo.setCOwnerNme(insOrders.getOwnerinfo().getString("name"));//车主
  87. qrCodeVo.setCPlateNo(insOrders.getLicenseno());//车牌号
  88. qrCodeVo.setJqStartDate(insAreaCompany.getJqStartDate());//交强开始时间
  89. qrCodeVo.setJqEndDate(insAreaCompany.getJqEndDate());//交强结束时间
  90. qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
  91. qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
  92. qrCodeVo.setQrCodeType(qrCodeType);
  93. modelAndView.addObject("code", 200);
  94. modelAndView.addObject("data", qrCodeVo);
  95. modelAndView.addObject("msg", "");
  96. } else {
  97. modelAndView.addObject("code", 500);
  98. modelAndView.addObject("data", "");
  99. modelAndView.addObject("msg", "二维码不存在");
  100. }
  101. return modelAndView;
  102. }
  103. @PostMapping(value = "/destructionQrCode")
  104. @ApiOperation(value = "销毁二维码")
  105. public ModelAndView destructionQrCode(String areaCompanyId) {
  106. ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
  107. boolean b = insOrderQrCodeService.updateQrCode(areaCompanyId, 0);
  108. if (b) {
  109. modelAndView.addObject("code", 200);
  110. modelAndView.addObject("data", "二维码销毁成功");
  111. modelAndView.addObject("msg", "");
  112. return modelAndView;
  113. }
  114. throw new SystemException("二维码销毁失败");
  115. }
  116. @GetMapping(value = "/index")
  117. @ApiOperation(value = "扫描二维码地址")
  118. @SaIgnore
  119. public Object index(String areaCompanyId) throws IOException {
  120. InsOrderQrCode insOrderQrCode = insOrderQrCodeService.getOne(areaCompanyId);
  121. InsAreaCompany insAreaCompany = insAreaCompanyService.getById(areaCompanyId);
  122. if (ValidStatus.AVS_0.getCode().equals(Integer.parseInt(insAreaCompany.getCodeValidStatus()))) {
  123. //重定向到错误页面中
  124. return getModelAndView("费用失效,请重新报价。");
  125. }
  126. // 根据保险公司获取二维码配置方式
  127. LambdaQueryWrapper<SysBarcodeConfig> wrapper = new LambdaQueryWrapper<>();
  128. wrapper.eq(SysBarcodeConfig::getCompanyId, insAreaCompany.getCompanyId())
  129. .eq(SysBarcodeConfig::getApiType, insAreaCompany.getApiType());
  130. List<SysBarcodeConfig> configs = sysBarcodeConfigService.list(wrapper);
  131. if (CollUtil.isEmpty(getConfigs(configs)) || configs.size() > 1) {
  132. //重定向到错误页面中
  133. return getModelAndView("配置已失效,请联系客服处理");
  134. }
  135. Integer configType = configs.get(0).getType();
  136. if (insOrderQrCode == null) {
  137. //重定向到错误页面中
  138. return getModelAndView("");
  139. }
  140. //更新二维码扫描时间
  141. insOrderQrCode.setScanCodeTime(new Date());
  142. insOrderQrCodeService.updateById(insOrderQrCode);
  143. LocalDateTime createtime = insAreaCompany.getCreatetime();
  144. LocalDate qrcodeCreateTime = createtime.toLocalDate();
  145. LocalDate currentDate = LocalDate.now();
  146. if (Math.abs(currentDate.toEpochDay() - qrcodeCreateTime.toEpochDay()) >= 1) {
  147. //重定向到错误页面中
  148. return getModelAndView("二维码仅当天支付有效");
  149. }
  150. PtlAgreement ptlAgreement = ptlAgreementService.getById(insAreaCompany.getAgreementId());
  151. // 禁用状态
  152. if (ValidStatus.AVS_0.getCode().equals(Integer.parseInt(ptlAgreement.getValidStatus()))) {
  153. //重定向到错误页面中
  154. return getModelAndView("");
  155. }
  156. LocalDateTime endDate = ptlAgreement.getEndDate();
  157. // 订单创建时间在协议失效时间之后提示错误
  158. if (insAreaCompany.getCreatetime().isAfter(endDate)) {
  159. return getModelAndView("");
  160. }
  161. if (UserConstants.CONFIG_TYPE_2.equals(configType) || UserConstants.CONFIG_TYPE_1.equals(configType)) {
  162. InsOrders insOrders = insOrdersService.getById(insOrderQrCode.getOrderno());
  163. // 获取图标
  164. EsmInsCompany company = esmInsCompanyService.getById(insAreaCompany.getCompanyId());
  165. ModelAndView modelAndView = new ModelAndView();
  166. QrCodeVo qrCodeVo = new QrCodeVo();
  167. qrCodeVo.setLogo(company.getLogo());
  168. if (UserConstants.CONFIG_TYPE_1.equals(configType)) {
  169. modelAndView.setViewName("qrcode1");
  170. qrCodeVo.setQrCodeUrl("data:image/png;base64," + insAreaCompany.getPaymentLink());
  171. } else {
  172. modelAndView.setViewName("qrcode");
  173. qrCodeVo.setQrCodeUrl(insAreaCompany.getPaymentLink());
  174. }
  175. qrCodeVo.setImageSrc(imageSrc);
  176. qrCodeVo.setInscompany(insAreaCompany.getInscompany());//保险公司
  177. qrCodeVo.setInscompanyCode(insAreaCompany.getCompanyId());//保险公司编号
  178. qrCodeVo.setSumpremium(insAreaCompany.getSumpremium());//总保费
  179. qrCodeVo.setSypremium(insAreaCompany.getSypremium());//商业险
  180. qrCodeVo.setJqpremium(insAreaCompany.getJqpremium());//交强险
  181. qrCodeVo.setTaxamount(insAreaCompany.getTaxamount());//车船税
  182. qrCodeVo.setJypremium(insAreaCompany.getJypremium());//驾驭险
  183. qrCodeVo.setCApplyNme(insOrders.getApplyinfo().getString("name"));//投保人
  184. qrCodeVo.setCInsuredNme(insOrders.getInsureinfo().getString("name"));//被保人
  185. qrCodeVo.setCOwnerNme(insOrders.getOwnerinfo().getString("name"));//车主
  186. qrCodeVo.setCPlateNo(insOrders.getLicenseno());//车牌号
  187. qrCodeVo.setJqStartDate(insAreaCompany.getJqStartDate());//交强开始时间
  188. qrCodeVo.setJqEndDate(insAreaCompany.getJqEndDate());//交强结束时间
  189. qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
  190. qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
  191. qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
  192. qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
  193. modelAndView.addObject("data", qrCodeVo);
  194. return modelAndView;
  195. } else if (UserConstants.CONFIG_TYPE_0.equals(configType)) {
  196. return "redirect:" + insOrderQrCode.getJumpUrl();
  197. } else {
  198. return getModelAndView("配置已失效,请联系客服处理");
  199. }
  200. }
  201. private static List<SysBarcodeConfig> getConfigs(List<SysBarcodeConfig> configs) {
  202. return configs;
  203. }
  204. private static ModelAndView getModelAndView(String message) {
  205. //重定向到错误页面中
  206. ModelAndView modelAndView = new ModelAndView("qrcode_error");
  207. HashMap<String, Object> map = new HashMap<>();
  208. if (StringUtils.isNotEmpty(message)) {
  209. map.put("message", message);
  210. } else {
  211. map.put("message", "协议已失效,请联系客服处理");
  212. }
  213. modelAndView.addAllObjects(map);
  214. return modelAndView;
  215. }
  216. @GetMapping(value = "/error")
  217. @ApiOperation(value = "错误页面显示")
  218. public String error() {
  219. return "qrcode_error";
  220. }
  221. }