QrCodeController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  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.setCPlateNo(insOrders.getLicenseno());//车牌号
  85. qrCodeVo.setJqStartDate(insAreaCompany.getJqStartDate());//交强开始时间
  86. qrCodeVo.setJqEndDate(insAreaCompany.getJqEndDate());//交强结束时间
  87. qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
  88. qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
  89. qrCodeVo.setQrCodeType(qrCodeType);
  90. modelAndView.addObject("code", 200);
  91. modelAndView.addObject("data", qrCodeVo);
  92. modelAndView.addObject("msg", "");
  93. } else {
  94. modelAndView.addObject("code", 500);
  95. modelAndView.addObject("data", "");
  96. modelAndView.addObject("msg", "二维码不存在");
  97. }
  98. return modelAndView;
  99. }
  100. @PostMapping(value = "/destructionQrCode")
  101. @ApiOperation(value = "销毁二维码")
  102. public ModelAndView destructionQrCode(String areaCompanyId) {
  103. ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
  104. boolean b = insOrderQrCodeService.updateQrCode(areaCompanyId, 0);
  105. if (b) {
  106. modelAndView.addObject("code", 200);
  107. modelAndView.addObject("data", "二维码销毁成功");
  108. modelAndView.addObject("msg", "");
  109. return modelAndView;
  110. }
  111. throw new SystemException("二维码销毁失败");
  112. }
  113. @GetMapping(value = "/index")
  114. @ApiOperation(value = "扫描二维码地址")
  115. @SaIgnore
  116. public Object index(String areaCompanyId) throws IOException {
  117. InsOrderQrCode insOrderQrCode = insOrderQrCodeService.getOne(areaCompanyId);
  118. InsAreaCompany insAreaCompany = insAreaCompanyService.getById(areaCompanyId);
  119. // 根据保险公司获取二维码配置方式
  120. LambdaQueryWrapper<SysBarcodeConfig> wrapper = new LambdaQueryWrapper<>();
  121. wrapper.eq(SysBarcodeConfig::getCompanyId, insAreaCompany.getCompanyId())
  122. .eq(SysBarcodeConfig::getApiType, insAreaCompany.getApiType());
  123. List<SysBarcodeConfig> configs = sysBarcodeConfigService.list(wrapper);
  124. if (CollUtil.isEmpty(configs) || configs.size() > 1) {
  125. //重定向到错误页面中
  126. ModelAndView modelAndView = new ModelAndView("qrcode_error");
  127. return modelAndView;
  128. }
  129. Integer configType = configs.get(0).getType();
  130. if (insOrderQrCode == null) {
  131. //重定向到错误页面中
  132. ModelAndView modelAndView = new ModelAndView("qrcode_error");
  133. return modelAndView;
  134. }
  135. //更新二维码扫描时间
  136. insOrderQrCode.setScanCodeTime(new Date());
  137. insOrderQrCodeService.updateById(insOrderQrCode);
  138. LocalDateTime createtime = insAreaCompany.getCreatetime();
  139. LocalDate qrcodeCreateTime = createtime.toLocalDate();
  140. LocalDate currentDate = LocalDate.now();
  141. if (Math.abs(currentDate.toEpochDay() - qrcodeCreateTime.toEpochDay()) >= 1) {
  142. //重定向到错误页面中
  143. ModelAndView modelAndView = new ModelAndView("qrcode_error");
  144. return modelAndView;
  145. }
  146. if(UserConstants.CONFIG_TYPE_2.equals(configType) || UserConstants.CONFIG_TYPE_1.equals(configType)){
  147. InsOrders insOrders = insOrdersService.getById(insOrderQrCode.getOrderno());
  148. // 获取图标
  149. EsmInsCompany company = esmInsCompanyService.getById(insAreaCompany.getCompanyId());
  150. ModelAndView modelAndView = new ModelAndView();
  151. QrCodeVo qrCodeVo = new QrCodeVo();
  152. qrCodeVo.setLogo(company.getLogo());
  153. if(UserConstants.CONFIG_TYPE_1.equals(configType)){
  154. modelAndView.setViewName("qrcode1");
  155. qrCodeVo.setQrCodeUrl("data:image/png;base64,"+insAreaCompany.getPaymentLink());
  156. } else {
  157. modelAndView.setViewName("qrcode");
  158. qrCodeVo.setQrCodeUrl(insAreaCompany.getPaymentLink());
  159. }
  160. qrCodeVo.setImageSrc(imageSrc);
  161. qrCodeVo.setInscompany(insAreaCompany.getInscompany());//保险公司
  162. qrCodeVo.setInscompanyCode(insAreaCompany.getCompanyId());//保险公司编号
  163. qrCodeVo.setSumpremium(insAreaCompany.getSumpremium());//总保费
  164. qrCodeVo.setSypremium(insAreaCompany.getSypremium());//商业险
  165. qrCodeVo.setJqpremium(insAreaCompany.getJqpremium());//交强险
  166. qrCodeVo.setTaxamount(insAreaCompany.getTaxamount());//车船税
  167. qrCodeVo.setJypremium(insAreaCompany.getJypremium());//驾驭险
  168. qrCodeVo.setCApplyNme(insOrders.getApplyinfo().getString("name"));//投保人
  169. qrCodeVo.setCInsuredNme(insOrders.getInsureinfo().getString("name"));//被保人
  170. qrCodeVo.setCOwnerNme(insOrders.getOwnerinfo().getString("name"));//车主
  171. qrCodeVo.setCPlateNo(insOrders.getLicenseno());//车牌号
  172. qrCodeVo.setJqStartDate(insAreaCompany.getJqStartDate());//交强开始时间
  173. qrCodeVo.setJqEndDate(insAreaCompany.getJqEndDate());//交强结束时间
  174. qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
  175. qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
  176. qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
  177. qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
  178. modelAndView.addObject("data",qrCodeVo);
  179. return modelAndView;
  180. } else if(UserConstants.CONFIG_TYPE_0.equals(configType)){
  181. return "redirect:" + insOrderQrCode.getJumpUrl();
  182. }else{
  183. //重定向到错误页面中
  184. ModelAndView modelAndView = new ModelAndView("qrcode_error");
  185. return modelAndView;
  186. }
  187. }
  188. @GetMapping(value = "/error")
  189. @ApiOperation(value = "错误页面显示")
  190. public String error() {
  191. return "qrcode_error";
  192. }
  193. }