QrCodeController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package com.ydtech.modules.order.controller;
  2. import cn.dev33.satoken.annotation.SaIgnore;
  3. import cn.hutool.core.collection.CollUtil;
  4. import cn.hutool.core.util.StrUtil;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.ydtech.exception.SystemException;
  7. import com.ydtech.modules.admin.constants.UserConstants;
  8. import com.ydtech.modules.admin.model.po.SysBarcodeConfig;
  9. import com.ydtech.modules.admin.service.SysBarcodeConfigService;
  10. import com.ydtech.modules.admin.service.SysQRCodeRelationService;
  11. import com.ydtech.modules.admin.service.impl.SysBarcodeConfigServiceImpl;
  12. import com.ydtech.modules.esm.model.EsmInsCompany;
  13. import com.ydtech.modules.esm.service.EsmInsCompanyService;
  14. import com.ydtech.modules.esm.service.impl.EsmInsCompanyServiceImpl;
  15. import com.ydtech.modules.order.entity.InsAreaCompany;
  16. import com.ydtech.modules.order.entity.InsOrderQrCode;
  17. import com.ydtech.modules.order.entity.InsOrders;
  18. import com.ydtech.modules.order.entity.vo.QrCodeVo;
  19. import com.ydtech.modules.order.service.InsAreaCompanyService;
  20. import com.ydtech.modules.order.service.InsOrderQrCodeService;
  21. import com.ydtech.modules.order.service.InsOrdersService;
  22. import com.ydtech.modules.protocol.entity.constants.PtlApiType;
  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.text.SimpleDateFormat;
  36. import java.time.LocalDate;
  37. import java.time.LocalDateTime;
  38. import java.util.Date;
  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. //二维码生成地址
  56. @Value("${qrcode.genAddress}")
  57. private String qrCodeGenAddress;
  58. //二维码生成地址
  59. @Value("${qrcode.imageSrc}")
  60. private String imageSrc;
  61. @Autowired
  62. private EsmInsCompanyService esmInsCompanyService;
  63. @GetMapping(value = "/getQrCode")
  64. @ApiOperation(value = "获取二维码")
  65. public ModelAndView getQrCode(String areaCompanyId) {
  66. InsOrderQrCode insOrderQrCode = insOrderQrCodeService.getOneOrSave(areaCompanyId);
  67. InsAreaCompany insAreaCompany = insAreaCompanyService.getById(areaCompanyId);
  68. Integer qrCodeType = sysQRCodeRelationService.getQRCodeType(insAreaCompany.getApiType(), insAreaCompany.getCompanyId(),
  69. insAreaCompany.getInscompany());
  70. ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
  71. if (!Objects.isNull(insOrderQrCode)) {
  72. InsOrders insOrders = insOrdersService.getById(insOrderQrCode.getOrderno());
  73. QrCodeVo qrCodeVo = new QrCodeVo();
  74. String qrCodeUrl = qrCodeGenAddress + "?areaCompanyId=" + areaCompanyId;
  75. qrCodeVo.setQrCodeUrl(qrCodeUrl);
  76. qrCodeVo.setInscompany(insAreaCompany.getInscompany());//保险公司
  77. qrCodeVo.setSumpremium(insAreaCompany.getSumpremium());//总保费
  78. qrCodeVo.setSypremium(insAreaCompany.getSypremium());//商业险
  79. qrCodeVo.setJqpremium(insAreaCompany.getJqpremium());//交强险
  80. qrCodeVo.setTaxamount(insAreaCompany.getTaxamount());//车船税
  81. qrCodeVo.setJypremium(insAreaCompany.getJypremium());//驾驭险
  82. qrCodeVo.setCApplyNme(insOrders.getApplyinfo().getString("name"));//投保人
  83. qrCodeVo.setCInsuredNme(insOrders.getInsureinfo().getString("name"));//被保人
  84. qrCodeVo.setCOwnerNme(insOrders.getOwnerinfo().getString("name"));//车主
  85. qrCodeVo.setCPlateNo(insOrders.getLicenseno());//车牌号
  86. qrCodeVo.setJqStartDate(insAreaCompany.getJqStartDate());//交强开始时间
  87. qrCodeVo.setJqEndDate(insAreaCompany.getJqEndDate());//交强结束时间
  88. qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
  89. qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
  90. qrCodeVo.setQrCodeType(qrCodeType);
  91. modelAndView.addObject("code", 200);
  92. modelAndView.addObject("data", qrCodeVo);
  93. modelAndView.addObject("msg", "");
  94. } else {
  95. modelAndView.addObject("code", 500);
  96. modelAndView.addObject("data", "");
  97. modelAndView.addObject("msg", "二维码不存在");
  98. }
  99. return modelAndView;
  100. }
  101. @PostMapping(value = "/destructionQrCode")
  102. @ApiOperation(value = "销毁二维码")
  103. public ModelAndView destructionQrCode(String areaCompanyId) {
  104. ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
  105. boolean b = insOrderQrCodeService.updateQrCode(areaCompanyId, 0);
  106. if (b) {
  107. modelAndView.addObject("code", 200);
  108. modelAndView.addObject("data", "二维码销毁成功");
  109. modelAndView.addObject("msg", "");
  110. return modelAndView;
  111. }
  112. throw new SystemException("二维码销毁失败");
  113. }
  114. @GetMapping(value = "/index")
  115. @ApiOperation(value = "扫描二维码地址")
  116. @SaIgnore
  117. public Object index(String areaCompanyId) throws IOException {
  118. InsOrderQrCode insOrderQrCode = insOrderQrCodeService.getOne(areaCompanyId);
  119. InsAreaCompany insAreaCompany = insAreaCompanyService.getById(areaCompanyId);
  120. // 根据保险公司获取二维码配置方式
  121. LambdaQueryWrapper<SysBarcodeConfig> wrapper = new LambdaQueryWrapper<>();
  122. wrapper.eq(SysBarcodeConfig::getCompanyId, insAreaCompany.getCompanyId())
  123. .eq(SysBarcodeConfig::getApiType, insAreaCompany.getApiType());
  124. List<SysBarcodeConfig> configs = sysBarcodeConfigService.list(wrapper);
  125. if (CollUtil.isEmpty(configs) || configs.size() > 1) {
  126. //重定向到错误页面中
  127. ModelAndView modelAndView = new ModelAndView("qrcode_error");
  128. return modelAndView;
  129. }
  130. Integer configType = configs.get(0).getType();
  131. if (insOrderQrCode == null) {
  132. //重定向到错误页面中
  133. ModelAndView modelAndView = new ModelAndView("qrcode_error");
  134. return modelAndView;
  135. }
  136. //更新二维码扫描时间
  137. insOrderQrCode.setScanCodeTime(new Date());
  138. insOrderQrCodeService.updateById(insOrderQrCode);
  139. LocalDateTime createtime = insAreaCompany.getCreatetime();
  140. LocalDate qrcodeCreateTime = createtime.toLocalDate();
  141. LocalDate currentDate = LocalDate.now();
  142. if (Math.abs(currentDate.toEpochDay() - qrcodeCreateTime.toEpochDay()) >= 1) {
  143. //重定向到错误页面中
  144. ModelAndView modelAndView = new ModelAndView("qrcode_error");
  145. return modelAndView;
  146. }
  147. if (UserConstants.CONFIG_TYPE_2.equals(configType) || UserConstants.CONFIG_TYPE_1.equals(configType)) {
  148. InsOrders insOrders = insOrdersService.getById(insOrderQrCode.getOrderno());
  149. // 获取图标
  150. EsmInsCompany company = esmInsCompanyService.getById(insAreaCompany.getCompanyId());
  151. ModelAndView modelAndView = new ModelAndView();
  152. QrCodeVo qrCodeVo = new QrCodeVo();
  153. qrCodeVo.setLogo(company.getLogo());
  154. if (UserConstants.CONFIG_TYPE_1.equals(configType)) {
  155. modelAndView.setViewName("qrcode1");
  156. qrCodeVo.setQrCodeUrl("data:image/png;base64," + insAreaCompany.getPaymentLink());
  157. } else {
  158. modelAndView.setViewName("qrcode");
  159. qrCodeVo.setQrCodeUrl(insAreaCompany.getPaymentLink());
  160. }
  161. qrCodeVo.setImageSrc(imageSrc);
  162. qrCodeVo.setInscompany(insAreaCompany.getInscompany());//保险公司
  163. qrCodeVo.setInscompanyCode(insAreaCompany.getCompanyId());//保险公司编号
  164. qrCodeVo.setSumpremium(insAreaCompany.getSumpremium());//总保费
  165. qrCodeVo.setSypremium(insAreaCompany.getSypremium());//商业险
  166. qrCodeVo.setJqpremium(insAreaCompany.getJqpremium());//交强险
  167. qrCodeVo.setTaxamount(insAreaCompany.getTaxamount());//车船税
  168. qrCodeVo.setJypremium(insAreaCompany.getJypremium());//驾驭险
  169. qrCodeVo.setCApplyNme(insOrders.getApplyinfo().getString("name"));//投保人
  170. qrCodeVo.setCInsuredNme(insOrders.getInsureinfo().getString("name"));//被保人
  171. qrCodeVo.setCOwnerNme(insOrders.getOwnerinfo().getString("name"));//车主
  172. qrCodeVo.setCPlateNo(insOrders.getLicenseno());//车牌号
  173. qrCodeVo.setJqStartDate(insAreaCompany.getJqStartDate());//交强开始时间
  174. qrCodeVo.setJqEndDate(insAreaCompany.getJqEndDate());//交强结束时间
  175. qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
  176. qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
  177. qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
  178. qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
  179. modelAndView.addObject("data", qrCodeVo);
  180. return modelAndView;
  181. } else if (UserConstants.CONFIG_TYPE_0.equals(configType)) {
  182. return "redirect:" + insOrderQrCode.getJumpUrl();
  183. } else {
  184. //重定向到错误页面中
  185. ModelAndView modelAndView = new ModelAndView("qrcode_error");
  186. return modelAndView;
  187. }
  188. }
  189. @GetMapping(value = "/error")
  190. @ApiOperation(value = "错误页面显示")
  191. public String error() {
  192. return "qrcode_error";
  193. }
  194. }