Browse Source

对接核销调整

contract
Yen 2 years ago
parent
commit
826f6b72e2
  1. 4
      src/main/java/com/qs/serve/common/framework/exception/UnifiedExceptionHandler.java
  2. 3
      src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java
  3. 2
      src/main/java/com/qs/serve/common/model/enums/HttpCode.java
  4. 48
      src/main/java/com/qs/serve/modules/third/PortalController.java
  5. 21
      src/main/java/com/qs/serve/modules/third/PortalOfCostController.java
  6. 32
      src/main/java/com/qs/serve/modules/third/ThirdTokenUtil.java
  7. 2
      src/main/java/com/qs/serve/modules/third/entity/ProcessCreateCostApplyBo.java
  8. 26
      src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java
  9. 2
      src/main/resources/application.yml

4
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());
}

3
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;
}
}

2
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,"应用信息错误"),

48
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");
}
}

21
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");
}
}
}

32
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");
}
}
}

2
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;

26
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<PayPayment> payLqw = new LambdaQueryWrapper<>();
payLqw.eq(PayPayment::getBillNumber,billNumber);
long countPay = paymentService.count(payLqw);
if(countPay>0){Assert.throwEx("发票号已存在,请勿重复提交");}
if(StringUtils.hasText(billNumber)){
LambdaQueryWrapper<PayPayment> payLqw = new LambdaQueryWrapper<>();
payLqw.eq(PayPayment::getBillNumber,billNumber);
long countPay = paymentService.count(payLqw);
if(countPay>0){Assert.throwEx("发票号已存在,请勿重复提交");}
}else if (StringUtils.hasText(disNumber)){
LambdaQueryWrapper<PayPayment> payLqw = new LambdaQueryWrapper<>();
payLqw.eq(PayPayment::getErpCode,disNumber);
long countPay = paymentService.count(payLqw);
if(countPay>0){Assert.throwEx("发货单已存在,请勿重复提交");}
}else {
Assert.throwEx("发票号或发货单号不能为空");
}
//初始化sku列表
List<ProcessGoodsItem> processGoodsItems = createBo.getGoodsList();
List<GoodsSku> 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生成的活动";

2
src/main/resources/application.yml

@ -18,7 +18,7 @@ project:
- /favicon.ico
- /error
permits: #忽略登录
- /thirty/**
- /thirty/** #第三方接口
- /common/upload #支持API上传调整
- /common/validToken #验证token
- /api/**

Loading…
Cancel
Save