QrCodeController.java 13 KB

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