From 826f6b72e28940a4d852aa172b29a6329f3c3f64 Mon Sep 17 00:00:00 2001 From: Yen Date: Sun, 12 Mar 2023 14:01:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E6=A0=B8=E9=94=80=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/UnifiedExceptionHandler.java | 4 +- .../filter/SecurityRequestFilter.java | 3 +- .../qs/serve/common/model/enums/HttpCode.java | 2 +- .../serve/modules/third/PortalController.java | 48 +++++++++++++++++++ .../modules/third/PortalOfCostController.java | 21 +++----- .../serve/modules/third/ThirdTokenUtil.java | 32 +++++++++++++ .../entity/ProcessCreateCostApplyBo.java | 2 - .../service/PortalOfCostApplication.java | 26 ++++++---- src/main/resources/application.yml | 2 +- 9 files changed, 110 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/third/PortalController.java create mode 100644 src/main/java/com/qs/serve/modules/third/ThirdTokenUtil.java diff --git a/src/main/java/com/qs/serve/common/framework/exception/UnifiedExceptionHandler.java b/src/main/java/com/qs/serve/common/framework/exception/UnifiedExceptionHandler.java index 8b3bcbe5..443a25bc 100644 --- a/src/main/java/com/qs/serve/common/framework/exception/UnifiedExceptionHandler.java +++ b/src/main/java/com/qs/serve/common/framework/exception/UnifiedExceptionHandler.java @@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; +import javax.servlet.http.HttpServletRequest; import java.sql.SQLIntegrityConstraintViolationException; @@ -34,7 +35,8 @@ public class UnifiedExceptionHandler { @ExceptionHandler(value = BusinessException.class) @ResponseBody - public R handleBindException(BusinessException e) { + public R handleBindException(BusinessException e,HttpServletRequest request) { + log.error("自定义异常触发【{},{}】,请求地址:{}",e.getCode(),e.getMessage(),request.getRequestURI()); return new R(e.getCode(),e.getMessage()); } diff --git a/src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java b/src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java index 8a6ab807..dd11634a 100644 --- a/src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java +++ b/src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java @@ -186,7 +186,8 @@ public class SecurityRequestFilter extends OncePerRequestFilter { AuthContextUtils.setTenant(tenant); return true; }else{ - HttpResponsePrintUtil.print2(response,4001,"校区信息错误"); + log.error("商户信息错误,请求地址:{}",request.getRequestURI()); + HttpResponsePrintUtil.print2(response,4001,"商户信息错误"); return false; } } diff --git a/src/main/java/com/qs/serve/common/model/enums/HttpCode.java b/src/main/java/com/qs/serve/common/model/enums/HttpCode.java index edf94ee9..18c2e611 100644 --- a/src/main/java/com/qs/serve/common/model/enums/HttpCode.java +++ b/src/main/java/com/qs/serve/common/model/enums/HttpCode.java @@ -21,7 +21,7 @@ public enum HttpCode { LOGIN_ERR(401,"登录信息已过期或失效"), LOGIN_ERR_2(500,"该账号已被停用,请联系系统管理员"), LOGIN_ERR_1(500,"账号或登录密码不正确"), - LOGIN_ERR_4001(4001,"校区信息错误"), + LOGIN_ERR_4001(4001,"商户信息错误"), LOGIN_ERR_4002(4002,"应用信息错误"), diff --git a/src/main/java/com/qs/serve/modules/third/PortalController.java b/src/main/java/com/qs/serve/modules/third/PortalController.java new file mode 100644 index 00000000..7b049192 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/third/PortalController.java @@ -0,0 +1,48 @@ +package com.qs.serve.modules.third; + +import cn.hutool.crypto.SecureUtil; +import com.qs.serve.common.config.DevEnvironmentConfig; +import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.util.Assert; +import com.qs.serve.modules.third.consts.ThirtyConst; +import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo; +import com.qs.serve.modules.third.entity.ProcessCreatePolicyCostBo; +import com.qs.serve.modules.third.service.PortalOfCostApplication; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import java.time.LocalDate; + +/** + * 【第三方接口】核销系统 + * headers+ => tenant-id = 001 + * headers+ => v-token = MD5.encrypt('jslApi-'+yyyy-MM-dd) + * @author YenHex + * @since 2023/2/14 + */ +@Slf4j +@AllArgsConstructor +@RestController +@RequestMapping("thirty/") +public class PortalController { + + /** + * 测试连通性 + * @param request + * @return + */ + @RequestMapping("/test") + public R testConnect(HttpServletRequest request){ + ThirdTokenUtil.checkToken(request); + return R.ok("connect_success"); + } + + + +} diff --git a/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java b/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java index b45d4602..985a85a6 100644 --- a/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java +++ b/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java @@ -4,6 +4,7 @@ import cn.hutool.crypto.SecureUtil; import com.qs.serve.common.config.DevEnvironmentConfig; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.JsonUtil; import com.qs.serve.modules.third.consts.ThirtyConst; import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo; import com.qs.serve.modules.third.entity.ProcessCreatePolicyCostBo; @@ -43,8 +44,9 @@ public class PortalOfCostController { */ @PostMapping("createByPolicy") public R createCostProcess2(@Valid @RequestBody ProcessCreatePolicyCostBo createBo, HttpServletRequest request){ - checkToken(request); - portalOfCostApplication.createCostProcessByPolicy(createBo); + ThirdTokenUtil.checkToken(request); + log.debug("一站式创建费用(政策)===>{}", JsonUtil.objectToJson(createBo)); + //portalOfCostApplication.createCostProcessByPolicy(createBo); return R.ok(); } @@ -56,22 +58,11 @@ public class PortalOfCostController { */ @PostMapping("createByCostApply") public R createCostProcess(@Valid @RequestBody ProcessCreateCostApplyBo createBo,HttpServletRequest request){ - checkToken(request); + ThirdTokenUtil.checkToken(request); + log.debug("站式创建费用(费用申请)===>{}", JsonUtil.objectToJson(createBo)); portalOfCostApplication.createCostProcess(createBo); return R.ok(); } - private void checkToken(HttpServletRequest request) { - String time = LocalDate.now().toString(); - String match = SecureUtil.md5(ThirtyConst.PREFIX_MD5_VALUE + time); - String token = request.getHeader(ThirtyConst.TOKEN_API_PARAM); - if(token==null||token.equalsIgnoreCase(match)){ - if(DevEnvironmentConfig.isDev()){ - log.error("v-token==>"+match); - Assert.throwEx("请求头 v-token 为空。或token无效"); - } - Assert.throwEx("err"); - } - } } diff --git a/src/main/java/com/qs/serve/modules/third/ThirdTokenUtil.java b/src/main/java/com/qs/serve/modules/third/ThirdTokenUtil.java new file mode 100644 index 00000000..ea533082 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/third/ThirdTokenUtil.java @@ -0,0 +1,32 @@ +package com.qs.serve.modules.third; + +import cn.hutool.crypto.SecureUtil; +import com.qs.serve.common.config.DevEnvironmentConfig; +import com.qs.serve.common.util.Assert; +import com.qs.serve.modules.third.consts.ThirtyConst; +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDate; + +/** + * @author YenHex + * @since 2023/3/11 + */ +@Slf4j +public class ThirdTokenUtil { + + public static void checkToken(HttpServletRequest request) { + String time = LocalDate.now().toString(); + String match = SecureUtil.md5(ThirtyConst.PREFIX_MD5_VALUE + time); + String token = request.getHeader(ThirtyConst.TOKEN_API_PARAM); + if(token==null||token.equalsIgnoreCase(match)){ + if(DevEnvironmentConfig.isDev()){ + log.error("v-token==>"+match); + Assert.throwEx("请求头 v-token 为空。或token无效"); + } + Assert.throwEx("err"); + } + } + +} diff --git a/src/main/java/com/qs/serve/modules/third/entity/ProcessCreateCostApplyBo.java b/src/main/java/com/qs/serve/modules/third/entity/ProcessCreateCostApplyBo.java index 03e65cfd..247e84da 100644 --- a/src/main/java/com/qs/serve/modules/third/entity/ProcessCreateCostApplyBo.java +++ b/src/main/java/com/qs/serve/modules/third/entity/ProcessCreateCostApplyBo.java @@ -25,8 +25,6 @@ public class ProcessCreateCostApplyBo { @NotNull(message = "费用主题 不能为空") private String costTheme; - /** 活动编码(可为空) */ - private String activityCode; /** 活动标题(可为空) */ private String activityTitle; diff --git a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java index a075642c..7340f643 100644 --- a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java +++ b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java @@ -420,11 +420,21 @@ public class PortalOfCostApplication { if(subject==null){Assert.throwEx("科目不存在,请重新编辑");} //发票号 String billNumber = createBo.getBillNumber(); + String disNumber = createBo.getErpCode(); //拦截是否已保存 - LambdaQueryWrapper payLqw = new LambdaQueryWrapper<>(); - payLqw.eq(PayPayment::getBillNumber,billNumber); - long countPay = paymentService.count(payLqw); - if(countPay>0){Assert.throwEx("发票号已存在,请勿重复提交");} + if(StringUtils.hasText(billNumber)){ + LambdaQueryWrapper payLqw = new LambdaQueryWrapper<>(); + payLqw.eq(PayPayment::getBillNumber,billNumber); + long countPay = paymentService.count(payLqw); + if(countPay>0){Assert.throwEx("发票号已存在,请勿重复提交");} + }else if (StringUtils.hasText(disNumber)){ + LambdaQueryWrapper payLqw = new LambdaQueryWrapper<>(); + payLqw.eq(PayPayment::getErpCode,disNumber); + long countPay = paymentService.count(payLqw); + if(countPay>0){Assert.throwEx("发货单已存在,请勿重复提交");} + }else { + Assert.throwEx("发票号或发货单号不能为空"); + } //初始化sku列表 List processGoodsItems = createBo.getGoodsList(); List skuList = this.initSkuListOfProcess(createBo.getGoodsList()); @@ -440,11 +450,9 @@ public class PortalOfCostApplication { String costCode = createBo.getCostCode(); String costTheme = createBo.getCostTheme(); - String activityCode = createBo.getActivityCode(); - if(!StringUtils.hasText(activityCode)){ - String random = String.format("%03d",new Random().nextInt(999)); - activityCode = "G"+ StringUtils.genShortId() + random; - } + String random = String.format("%03d",new Random().nextInt(999)); + String activityCode = "G"+ StringUtils.genShortId() + random; + String activityTitle = createBo.getActivityTitle(); if(!StringUtils.hasText(activityTitle)){ activityTitle = "由核销API生成的活动"; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index b9653758..9a93fb28 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -18,7 +18,7 @@ project: - /favicon.ico - /error permits: #忽略登录 - - /thirty/** + - /thirty/** #第三方接口 - /common/upload #支持API上传调整 - /common/validToken #验证token - /api/**