This commit is contained in:
2024-05-06 00:44:03 +08:00
commit b67da75dc2
1268 changed files with 136802 additions and 0 deletions

BIN
api/src/main/java/.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,17 @@
package com.ruoyi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
@SpringBootApplication(scanBasePackages = {"com.ruoyi.api", "com.ruoyi.ct"})
public class CTAPIApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(CTAPIApplication.class);
application.setApplicationStartup(new BufferingApplicationStartup(2048));
application.run(args);
System.out.println("(♥◠‿◠)ノ゙ API启动成功 ლ(´ڡ`ლ)゙");
}
}

Binary file not shown.

View File

@@ -0,0 +1,45 @@
package com.ruoyi.api;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
public class EncryptDemo {
public static void main(String[] args) {
// SM2的公钥
// String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEZRdaHuSCG8U87+Cmh9LKbgC+DRBEwWpAyN31aCzoE1flWonnZezX2GqbvDdz7a0AxE6+FGEH1lxPYW39XhYupw==";
String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEPWIPW8Q8OvHvDfDe3cA4ipkUvR+sDLpqA5uCDqp4BQy3iYCUO62HdNsBnB8/IplMZy8LiJeiRkt0zn740FqGtw==";
// SM2的私钥
String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQggIODudYqK6cb2KKXtVAcoMRSoWotOAuZRKqbgixUmdmgCgYIKoEcz1UBgi2hRANCAARR6gv7bA9ZXo7nr5dnk7K2q8JrnaoyDZ3mr2GPvPVlff9BH/jc6E9j1Ua6GJLpHsjdR+DgdoHrZNF4BqgaabQL";
// String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQghUZb+m/+ficnlbtoVJhkbUsw9FKQ5yF1wYcOP+tRQK+gCgYIKoEcz1UBgi2hRANCAASsJ3XVa/Udszyl0/tudSM7tUJsK190+2UQmEEZ6qLbRguzN+vaI3dsc04KllUojTRgXvE3vfaNAHOwQ6H5cjH+";
// 初始化SM2
SM2 sm2 = SmUtil.sm2(privateKey, publicKey);
// 使用SM2加密字符串
String encryptStr = sm2.encryptBase64("何琳琳", KeyType.PublicKey);
// String encryptStr3 = sm2.encryptBase64("13371893748", KeyType.PublicKey);
// System.out.println(sm2.encryptBase64("e34c1951-c492-4ed5-8e02-1e44eee3df7b", KeyType.PublicKey));
// System.out.println(encryptStr);
String b = "{\n" +
" \"saleId\": \"108103\",\n" +
" \"name\": \"毕彦兵\",\n" +
" \"idCard\": \"230104198809293718\",\n" +
" \"contactMobile\": \"18980692055\",\n" +
" \"province\": \"黑龙江省\",\n" +
" \"city\": \"哈尔滨市\",\n" +
" \"county\": \"松北区\",\n" +
" \"installedAddress\": \"世茂大道\",\n" +
" \"number\": \"17301750842\"\n" +
"}";
System.out.println(sm2.encryptBase64(b, KeyType.PublicKey));
// System.out.println(encryptStr3);
// 使用SM2解密字符串
// String data = sm2.decryptStr("BI7jtmBaoB+O0E/5qbBZd35h5M/BGhLcCB0kOM5ONebPJNC7+mS404aeYpqQEmW5caqLYX9y6eV87tOKwWC3bs+ns83SHA8k1yMMTZrHKooPAH28ylgrgv/jZZbw7Xtsfxm3+XjWUQDmacHrYujwlhCiAHRxAEIot/3fvSkVB49gHjaDj7ER0NQCKUwVt5xLXgJlCHyYsWmY+ZWj6LmzBzIdND1IFQIEx3iKDuXAgZ05ojQb+y27YlI1TLKn36eTOlhifdnOG89UN1UWkMZuZ8m5qnaMyR7bT+7LazIyBvgAGMkgGpCNwVBXT4t5y+/nRvHwYkURGGO7DLgybL5/KtZ74yemZ52tqgU8pm4HWNWncdZ7veeu55gwUe8ttt3C8UtTwtSYlrRpfoWTSwE8rBtvl//MZWkNXqePCnO1QIQYhKiX5GopqjlxFLlr0CirW0/fhA==", KeyType.PrivateKey);
// String data = sm2.decryptStr("BLmSzK7I1FAzi+bePR5HhCL0WruEYftUA4bw1cU0TBM0xfX4MX6ImLJzVBJP5jATbOsDC136xuDBf8uFZxmXf2gnIEOX+qBfZD7LcPgdcv06TpnCVtEQEcGULMe/iB3SEHj2xAx3R3bbkgXKGrJ2paj2D4S0uwbs0mLYpIQLFXsXogNupeUHEIq8aLNyUEDRH9HMFG+sJMJpGW80CaywaCCoevpwjc2pAdMdejT5+4/mQjXhKE5kBMyuRA0ugHR6ZfMd9P+pEk6UFDzlWw8kJ11xWgPZcNKWNA3JJBt035jdyMLNfIrPSeHjVXoQZR/l0CXcu+CsFuYvRH3zVaZBqFy+mmeB8omsdnGiuVYcJQfhAnrdU2p4bZEYAwN7KdaZCOPwE/xHoEyAsxKn/WExsYNfyaCs7wzrVaRJmOGBxL4AxzH9W4M6K6SILdPWeaz/DnPZG+pkSIck9jUwcYQnXR9y2EO95l1kwnbYrhFvL5EdLvHZgnrpWP2P7NCqixCKWYP/2rOoXpfhC0e+6w26lKAOUNbqlMWmvEcNBSUqLLzlmogmhB+Dk3SaJX6cwsFzJR9qW/4jE52V+E2pcD4ZIiqNu6UkFWZvMwQqxUvn/evyoKpPQZNr16HKTmyqG/BODPSDPOACmLDD/B8cLidb9MQaYbfS9eEXkTR7GMWji4YGBU8sMBP7WA==", KeyType.PrivateKey);
// System.out.println(data);
}
}

View File

@@ -0,0 +1,50 @@
package com.ruoyi.api.config;
import com.ruoyi.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.servlet.NoHandlerFoundException;
import javax.servlet.http.HttpServletRequest;
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 请求方式不支持
*/
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
public R<Void> handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
return R.fail(405, e.getMessage());
}
/**
* 拦截未知的运行时异常
*/
@ExceptionHandler(RuntimeException.class)
public R<Void> handleRuntimeException(RuntimeException e, HttpServletRequest request) {
String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生未知异常.", requestURI, e);
return R.fail(e.getMessage());
}
/**
* 系统异常
*/
@ExceptionHandler(Exception.class)
public R<Void> handleException(Exception e, HttpServletRequest request) {
if (e instanceof NoHandlerFoundException) {
return R.fail(404, e.getMessage());
}
String requestURI = request.getRequestURI();
log.error("请求地址'{}',发生系统异常.", requestURI, e);
return R.fail(e.getMessage());
}
}

View File

@@ -0,0 +1,20 @@
package com.ruoyi.api.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.ruoyi.ct.mapper")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //配置插件类
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //具体到配置哪一个插件
return interceptor;
}
}

View File

@@ -0,0 +1,454 @@
package com.ruoyi.api.controller;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.CTResponse;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.ct.domain.AgentOrder;
import com.ruoyi.ct.domain.bo.AgentAccountGoodBo;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
import com.ruoyi.ct.domain.vo.AgentAccountGoodVo;
import com.ruoyi.ct.domain.vo.AgentAccountVo;
import com.ruoyi.ct.domain.vo.AgentOrderVo;
import com.ruoyi.ct.domain.vo.GoodVo;
import com.ruoyi.ct.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@RestController
@Slf4j
@RequestMapping("api/v1.0.0")
public class APIController extends BaseController {
@Resource
private CTService ctService;
@Resource
private IAgentAccountService agentAccountService;
@Resource
private IAgentAccountGoodService agentAccountGoodService;
@Resource
private IAgentService agentService;
@Resource
private IAgentOrderService agentOrderService;
@Resource
private IGoodService goodService;
/**
* 获取账号下的商品列表
* @param request
* @param page 页码默认1
* @param pageSize 每页条数默认20最大不超过50
* @return
*/
@GetMapping("getGoodsList")
public R<JSONObject> getGoodsList(HttpServletRequest request, Integer page, Integer pageSize) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
AgentAccountGoodBo agentAccountGoodBo = new AgentAccountGoodBo();
agentAccountGoodBo.setAgentAccountId(agentAccountVo.getId());
Page<AgentAccountGoodVo> result = agentAccountGoodService.queryPage(agentAccountGoodBo, page, pageSize);
JSONObject resultData = new JSONObject();
JSONObject meta = new JSONObject();
meta.set("total", result.getTotal());
meta.set("page", page);
meta.set("pageSize", pageSize);
resultData.set("meta", meta);
List<JSONObject> dataList = new ArrayList<>();
for(AgentAccountGoodVo vo: result.getRecords()) {
JSONObject data = new JSONObject();
data.set("saleId", vo.getSaleId());
data.set("title", vo.getTitle());
data.set("content", vo.getContent());
dataList.add(data);
}
resultData.set("objects", dataList);
saveLog(request, agentAccountVo.getPersonnelId(), 1, "", resultData.toString());
return R.ok(resultData);
}
@GetMapping("getNumberList")
public R<List<JSONObject>> getNumberList(HttpServletRequest request, Integer page, Integer pageSize, String saleId) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (ObjectUtils.isNull(saleId)) {
log.error("参数错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "参数错误:saleId为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
AgentAccountGoodVo agentAccountGoodVo = agentAccountGoodService.getByGoodAndAccount(saleId, agentAccountVo.getId());
if (ObjectUtils.isNull(agentAccountGoodVo)) {
log.error("参数错误");
log.error("agentAccountVo: "+agentAccountVo);
log.error("saleId: "+saleId);
saveLog(request, agentAccountVo.getPersonnelId(), 0, "参数错误:没找到代理商账号代理的商品", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
try {
List<JSONObject> data = ctService.selectNumber(agentAccountVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize));
saveLog(request, agentAccountVo.getPersonnelId(), 1, "", data.toString());
return R.ok(data);
} catch (Exception e) {
saveLog(request, agentAccountVo.getPersonnelId(), 1, "电信请求异常", "[]");
e.printStackTrace();
log.error(e.getMessage());
return R.ok(new ArrayList<>());
}
}
@PostMapping("confirmOrder")
public R<String> confirmOrder(HttpServletRequest request, @RequestBody String body) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
try {
SM2 sm2 = (SM2) request.getAttribute("sm2");
body = sm2.decryptStr(body, KeyType.PrivateKey);
} catch (Exception e) {
log.error("数据解密错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "数据解密错误", null);
return R.fail(ERROR_CODE_ENCRYPT, "数据解密错误");
}
JSONObject requestBody = JSONUtil.parseObj(body);
System.out.println("requestBody = " + requestBody);
AgentOrderBo agentOrderBo = requestBody.toBean(AgentOrderBo.class);
// 填充固定数据
agentOrderBo.setAgentName(agentAccountVo.getAgentName());
agentOrderBo.setAgentId(agentAccountVo.getAgentId());
agentOrderBo.setStoreId("13");
agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", ""));
agentOrderBo.setStatus("0");
agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId());
agentOrderBo.setCreateTime(new Date());
AgentAccountGoodVo agentAccountGoodVo;
SM2 sm2 = (SM2) request.getAttribute("sm2");
{
// 校验数据
// 校验gid
String saleId = requestBody.getStr("saleId");
if (ObjectUtils.isNull(saleId)) {
log.error("saleId为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "saleId为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
try {
agentAccountGoodVo = agentAccountGoodService.getByGoodAndAccount(saleId, agentAccountVo.getId());
agentOrderBo.setAgentAccountId(agentAccountGoodVo.getId());
agentOrderBo.setSaleId(agentAccountGoodVo.getSaleId());
GoodVo goodVo = goodService.queryById(agentAccountGoodVo.getGoodId());
agentOrderBo.setTitle(goodVo.getName());
agentOrderBo.setContent(goodVo.getContent());
if (ObjectUtils.isNull(agentAccountGoodVo)) {
log.error("saleId无效");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "saleId无效", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
} catch (Exception e) {
log.error("saleId格式错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "saleId格式错误", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
// 校验用户信息,姓名、身份证、手机号
if (ObjectUtils.isNull(agentOrderBo.getName())) {
log.error("姓名为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "姓名为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getIdCard())) {
log.error("身份证号为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "身份证号为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
// String regex = "^\\d{17}[Xx]|\\d{15}$";
// Pattern pattern = Pattern.compile(regex);
// Matcher matcher = pattern.matcher(agentOrderBo.getIdCard());
// if (!matcher.matches()) {
// log.error("身份证号格式错误");
// saveLog(request, agentAccountVo.getPersonnelId(), 0, "身份证号格式错误", null);
// return R.fail(ERROR_CODE_PARAMS, "参数错误");
// }
if (ObjectUtils.isNull(agentOrderBo.getContactMobile())) {
log.error("手机号为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "手机号为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
// regex = "^1[3-9]\\d{9}$";
// pattern = Pattern.compile(regex);
// matcher = pattern.matcher(agentOrderBo.getContactMobile());
// if (!matcher.matches()) {
// log.error("手机号格式错误");
// saveLog(request, agentAccountVo.getPersonnelId(), 0, "手机号格式错误", null);
// return R.fail(ERROR_CODE_PARAMS, "参数错误");
// }
// 校验地址信息
if (ObjectUtils.isNull(agentOrderBo.getProvince())) {
log.error("省为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "省为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getCity())) {
log.error("市为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "市为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getCounty())) {
log.error("区为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "区为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getInstalledAddress())) {
log.error("地址为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "地址为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getInstallAddress())) {
agentOrderBo.setInstallAddress(agentOrderBo.getInstalledAddress());
}
// todo 根据代理商提供的验证url验证用户
JSONObject paramMap = new JSONObject();
paramMap.set("name", agentOrderBo.getName());
paramMap.set("idCard", agentOrderBo.getIdCard());
paramMap.set("contactMobile", agentOrderBo.getContactMobile());
if (ObjectUtils.isNotNull(agentAccountVo.getVerifyUrl())) {
try {
String verifyResult = HttpUtil.post(agentAccountVo.getVerifyUrl(), sm2.encryptBase64(paramMap.toString(), KeyType.PublicKey));
JSONObject verifyData = JSONUtil.parseObj(verifyResult);
if (verifyData.getInt("code") != 200) {
log.error("验证不通过");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "验证不通过", null);
return R.fail(ERROR_CODE_VERIFY, "验证错误");
}
} catch (Exception e) {
e.printStackTrace();
log.error("验证请求错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "验证请求错误", null);
return R.fail(ERROR_CODE_VERIFY, "验证错误");
}
}
}
// 保存数据
// agentOrderService.insertByBo(agentOrderBo);
try {
CTResponse<String> response = ctService.saveOrder(agentOrderBo.getName(), agentOrderBo.getIdCard(), agentOrderBo.getContactMobile(),
agentOrderBo.getInstalledAddress(), agentOrderBo.getSaleId(), agentOrderBo.getStoreId(),
agentOrderBo.getPersonnelId(), agentOrderBo.getProvince(), agentOrderBo.getCity(),
agentOrderBo.getCounty(), agentOrderBo.getSerialNumber(), agentOrderBo.getNumber(),
agentOrderBo.getLogiRemark(), agentOrderBo.getPageUrl(), agentOrderBo.getRemark(),
agentOrderBo.getInstallAddress(), "", "");
if (response.isSuccess()) {
agentOrderBo.setOrderNum(response.getData());
agentOrderBo.setOrderStatus("S1000");
agentOrderBo.setStatus("0");
agentOrderService.insertByBo(agentOrderBo);
return R.ok("操作成功", agentOrderBo.getSerialNumber());
} else {
// 订单验证失败
log.error("电信订单验证失败");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage());
return R.fail(ERROR_CODE_PARAMS, response.getMessage());
}
} catch (Exception e) {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(e.getMessage());
return R.fail(ERROR_CODE_NETWORK, "电信网络异常");
}
}
@GetMapping("getOrderList")
public R<JSONObject> getOrderList(HttpServletRequest request,
Integer page, Integer pageSize,
String saleId,
String name, String contactMobile, String number) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
SM2 sm2 = (SM2) request.getAttribute("sm2");
AgentAccountGoodBo agentAccountGoodBo = new AgentAccountGoodBo();
agentAccountGoodBo.setPersonnelId(agentAccountVo.getPersonnelId());
// if (ObjectUtils.isNull(saleId) && ObjectUtils.isNull(name) && ObjectUtils.isNull(contactMobile) && ObjectUtils.isNull(number)) {
if (ObjectUtils.isNull(saleId)) {
log.error("无saleId");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "无参数", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
LambdaQueryWrapper<AgentOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(AgentOrder::getPersonnelId, agentAccountVo.getPersonnelId());
lqw.eq(ObjectUtils.isNotNull(saleId), AgentOrder::getSaleId, saleId);
if (ObjectUtils.isNotNull(name)) {
try {
lqw.eq(ObjectUtils.isNotNull(name), AgentOrder::getName, sm2.decryptStr(name, KeyType.PrivateKey));
} catch (Exception e) {
log.error("解密姓名错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "解密姓名错误", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
}
if (ObjectUtils.isNotNull(contactMobile)) {
try {
lqw.eq(ObjectUtils.isNotNull(contactMobile), AgentOrder::getContactMobile, sm2.decryptStr(contactMobile, KeyType.PrivateKey));
} catch (Exception e) {
log.error("解密联系电话错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "解密联系电话错误", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
}
if (ObjectUtils.isNotNull(number)) {
try {
lqw.eq(ObjectUtils.isNotNull(number), AgentOrder::getNumber, sm2.decryptStr(number, KeyType.PrivateKey));
} catch (Exception e) {
log.error("解密手机号错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "解密手机号错误", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
}
lqw.gt(AgentOrder::getStatus, "-1");
PageQuery pageQuery = new PageQuery();
pageQuery.setPageNum(page);
pageQuery.setPageSize(pageSize);
TableDataInfo<AgentOrderVo> tableDataInfo = agentOrderService.queryList(lqw, pageQuery);
JSONObject resultData = new JSONObject();
JSONObject meta = new JSONObject();
meta.set("total", tableDataInfo.getTotal());
meta.set("page", page);
meta.set("pageSize", pageSize);
resultData.set("meta", meta);
List<JSONObject> objects = new ArrayList<>();
for (AgentOrderVo vo: tableDataInfo.getRows()) {
JSONObject data = new JSONObject();
data.set("serialNumber", vo.getSerialNumber());
data.set("name", vo.getName());
data.set("contactMobile", vo.getContactMobile());
data.set("idCard", vo.getIdCard());
data.set("number", vo.getNumber());
data.set("status", vo.getStatus());
data.set("orderStatus", vo.getOrderStatus());
data.set("createTime", vo.getCreateTime());
data.set("updateTime", vo.getUpdateTime());
data.set("isRecharge", vo.getIsRecharge());
data.set("chargeTitle", vo.getChargeTitle());
data.set("expressVendor", vo.getExpressVendor());
data.set("expressNum", vo.getExpressNum());
JSONObject goods = new JSONObject();
goods.set("saleId", vo.getSaleId());
goods.set("title", vo.getTitle());
goods.set("content", vo.getContent());
data.set("bookingGoods", goods);
objects.add(data);
}
resultData.set("objects", sm2.encryptBase64(objects.toString(), KeyType.PublicKey));
return R.ok(resultData);
}
@GetMapping("getOrderDetail")
public R<String> getOrderDetail(HttpServletRequest request, String serialNumber) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (ObjectUtils.isNull(serialNumber)) {
log.error("参数错误:serialNumber为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "参数错误:serialNumber为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
AgentOrderBo bo = new AgentOrderBo();
bo.setSerialNumber(serialNumber);
bo.setAgentId(agentAccountVo.getAgentId());
bo.setPersonnelId(agentAccountVo.getPersonnelId());
List<AgentOrderVo> voList = agentOrderService.queryList(bo);
if (voList.size() > 0) {
AgentOrderVo vo = voList.get(0);
JSONObject data = new JSONObject();
data.set("serialNumber", vo.getSerialNumber());
data.set("name", vo.getName());
data.set("contactMobile", vo.getContactMobile());
data.set("idCard", vo.getIdCard());
data.set("number", vo.getNumber());
data.set("status", vo.getStatus());
data.set("orderStatus", vo.getStatus());
data.set("isRecharge", vo.getIsRecharge());
data.set("chargeTitle", vo.getChargeTitle());
data.set("expressVendor", vo.getExpressVendor());
data.set("expressNum", vo.getExpressNum());
data.set("routeArr", JSONUtil.parseArray(vo.getRouteArr()));
data.set("expressRoutes", JSONUtil.parseArray(vo.getExpressRoutes()));
data.set("createTime", vo.getCreateTime());
data.set("updateTime", vo.getUpdateTime());
JSONObject goods = new JSONObject();
goods.set("saleId", vo.getSaleId());
goods.set("title", vo.getTitle());
goods.set("content", vo.getContent());
data.set("bookingGoods", goods);
SM2 sm2 = (SM2) request.getAttribute("sm2");
return R.ok(null, sm2.encryptBase64(data.toString(), KeyType.PublicKey));
}
return R.ok();
}
public static void main(String[] args) {
String body = "{\"name\":\"毕彦兵\",\"idCard\":\"230104198809293718\",\"contactNumber\":\"18980692055\",\"installedAddress\":\"世贸大道世贸都柏林49栋3单元2402\",\"gid\":1,\"province\":\"黑龙江\",\"city\":\"哈尔滨\",\"county\":\"松北区\",\"number\":\"19384158592\",\"logiRemark\":\"\",\"pageUrl\":\"\",\"remark\":\"\",}";
}
}

View File

@@ -0,0 +1,547 @@
package com.ruoyi.api.controller;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.CTResponse;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.ct.domain.AgentOrder;
import com.ruoyi.ct.domain.bo.AgentAccountGoodBo;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
import com.ruoyi.ct.domain.vo.AgentAccountGoodVo;
import com.ruoyi.ct.domain.vo.AgentAccountVo;
import com.ruoyi.ct.domain.vo.AgentOrderVo;
import com.ruoyi.ct.domain.vo.GoodVo;
import com.ruoyi.ct.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@RestController
@Slf4j
@RequestMapping("api/v2.0.0")
public class APIControllerV2 extends BaseController {
@Resource
private CTService ctService;
@Resource
private IAgentAccountService agentAccountService;
@Resource
private IAgentAccountGoodService agentAccountGoodService;
@Resource
private IAgentService agentService;
@Resource
private IAgentOrderService agentOrderService;
@Resource
private IGoodService goodService;
/**
* 获取账号下的商品列表
* @param request
* @param page 页码默认1
* @param pageSize 每页条数默认20最大不超过50
* @return
*/
@GetMapping("getGoodsList")
public R<JSONObject> getGoodsList(HttpServletRequest request, Integer page, Integer pageSize) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
AgentAccountGoodBo agentAccountGoodBo = new AgentAccountGoodBo();
agentAccountGoodBo.setAgentAccountId(agentAccountVo.getId());
Page<AgentAccountGoodVo> result = agentAccountGoodService.queryPage(agentAccountGoodBo, page, pageSize);
JSONObject resultData = new JSONObject();
JSONObject meta = new JSONObject();
meta.set("total", result.getTotal());
meta.set("page", page);
meta.set("pageSize", pageSize);
resultData.set("meta", meta);
List<JSONObject> dataList = new ArrayList<>();
for(AgentAccountGoodVo vo: result.getRecords()) {
JSONObject data = new JSONObject();
data.set("saleId", vo.getSaleId());
data.set("title", vo.getTitle());
data.set("content", vo.getContent());
dataList.add(data);
}
resultData.set("objects", dataList);
saveLog(request, agentAccountVo.getPersonnelId(), 1, "", resultData.toString());
return R.ok(resultData);
}
@GetMapping("getNumberList")
public R<List<JSONObject>> getNumberList(HttpServletRequest request, Integer page, Integer pageSize, String saleId) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (ObjectUtils.isNull(saleId)) {
log.error("参数错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "参数错误:saleId为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
AgentAccountGoodVo agentAccountGoodVo = agentAccountGoodService.getByGoodAndAccount(saleId, agentAccountVo.getId());
if (ObjectUtils.isNull(agentAccountGoodVo)) {
log.error("参数错误");
log.error("agentAccountVo: "+agentAccountVo);
log.error("saleId: "+saleId);
saveLog(request, agentAccountVo.getPersonnelId(), 0, "参数错误:没找到代理商账号代理的商品", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
try {
List<JSONObject> data = ctService.selectNumber(agentAccountVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize));
saveLog(request, agentAccountVo.getPersonnelId(), 1, "", data.toString());
return R.ok(data);
} catch (Exception e) {
saveLog(request, agentAccountVo.getPersonnelId(), 1, "电信请求异常", "[]");
e.printStackTrace();
log.error(e.getMessage());
return R.ok(new ArrayList<>());
}
}
@PostMapping("confirmOrderBaseInfo")
public R<String> confirmOrderBaseInfo(HttpServletRequest request, @RequestBody String body) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
try {
SM2 sm2 = (SM2) request.getAttribute("sm2");
body = sm2.decryptStr(body, KeyType.PrivateKey);
} catch (Exception e) {
log.error("数据解密错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "数据解密错误", null);
return R.fail(ERROR_CODE_ENCRYPT, "数据解密错误");
}
JSONObject requestBody = JSONUtil.parseObj(body);
System.out.println("requestBody = " + requestBody);
AgentOrderBo agentOrderBo = requestBody.toBean(AgentOrderBo.class);
// 填充固定数据
agentOrderBo.setAgentName(agentAccountVo.getAgentName());
agentOrderBo.setAgentId(agentAccountVo.getAgentId());
agentOrderBo.setStoreId("13");
agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", ""));
agentOrderBo.setStatus("0");
agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId());
agentOrderBo.setCreateTime(new Date());
AgentAccountGoodVo agentAccountGoodVo;
SM2 sm2 = (SM2) request.getAttribute("sm2");
{
// 校验数据
// 校验gid
String saleId = requestBody.getStr("saleId");
if (ObjectUtils.isNull(saleId)) {
log.error("saleId为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "saleId为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
try {
agentAccountGoodVo = agentAccountGoodService.getByGoodAndAccount(saleId, agentAccountVo.getId());
agentOrderBo.setAgentAccountId(agentAccountGoodVo.getId());
agentOrderBo.setSaleId(agentAccountGoodVo.getSaleId());
GoodVo goodVo = goodService.queryById(agentAccountGoodVo.getGoodId());
agentOrderBo.setTitle(goodVo.getName());
agentOrderBo.setContent(goodVo.getContent());
if (ObjectUtils.isNull(agentAccountGoodVo)) {
log.error("saleId无效");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "saleId无效", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
} catch (Exception e) {
log.error("saleId格式错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "saleId格式错误", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
// 校验用户信息,姓名、身份证、手机号
if (ObjectUtils.isNull(agentOrderBo.getName())) {
log.error("姓名为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "姓名为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getIdCard())) {
log.error("身份证号为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "身份证号为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
// String regex = "^\\d{17}[Xx]|\\d{15}$";
// Pattern pattern = Pattern.compile(regex);
// Matcher matcher = pattern.matcher(agentOrderBo.getIdCard());
// if (!matcher.matches()) {
// log.error("身份证号格式错误");
// saveLog(request, agentAccountVo.getPersonnelId(), 0, "身份证号格式错误", null);
// return R.fail(ERROR_CODE_PARAMS, "参数错误");
// }
if (ObjectUtils.isNull(agentOrderBo.getContactMobile())) {
log.error("手机号为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "手机号为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
// regex = "^1[3-9]\\d{9}$";
// pattern = Pattern.compile(regex);
// matcher = pattern.matcher(agentOrderBo.getContactMobile());
// if (!matcher.matches()) {
// log.error("手机号格式错误");
// saveLog(request, agentAccountVo.getPersonnelId(), 0, "手机号格式错误", null);
// return R.fail(ERROR_CODE_PARAMS, "参数错误");
// }
// 校验地址信息
if (ObjectUtils.isNull(agentOrderBo.getProvince())) {
log.error("省为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "省为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getCity())) {
log.error("市为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "市为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getCounty())) {
log.error("区为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "区为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getInstalledAddress())) {
log.error("地址为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "地址为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getInstallAddress())) {
agentOrderBo.setInstallAddress(agentOrderBo.getInstalledAddress());
}
// todo 根据代理商提供的验证url验证用户
JSONObject paramMap = new JSONObject();
paramMap.set("name", agentOrderBo.getName());
paramMap.set("idCard", agentOrderBo.getIdCard());
paramMap.set("contactMobile", agentOrderBo.getContactMobile());
// if (ObjectUtils.isNotNull(agentAccountVo.getVerifyUrl())) {
// try {
// String verifyResult = HttpUtil.post(agentAccountVo.getVerifyUrl(), sm2.encryptBase64(paramMap.toString(), KeyType.PublicKey));
// JSONObject verifyData = JSONUtil.parseObj(verifyResult);
// if (verifyData.getInt("code") != 200) {
// log.error("验证不通过");
// saveLog(request, agentAccountVo.getPersonnelId(), 0, "验证不通过", null);
// return R.fail(ERROR_CODE_VERIFY, "验证错误");
// }
// } catch (Exception e) {
// e.printStackTrace();
// log.error("验证请求错误");
// saveLog(request, agentAccountVo.getPersonnelId(), 0, "验证请求错误", null);
// return R.fail(ERROR_CODE_VERIFY, "验证错误");
// }
//
//
// }
}
// 保存数据
agentOrderService.insertByBo(agentOrderBo);
return R.ok("操作成功", agentOrderBo.getSerialNumber());
}
@PostMapping("uploadImg")
public R<String> uploadImg(HttpServletRequest request, @RequestBody String body) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
// try {
// SM2 sm2 = (SM2) request.getAttribute("sm2");
// body = sm2.decryptStr(body, KeyType.PrivateKey);
// } catch (Exception e) {
// log.error("数据解密错误");
// saveLog(request, agentAccountVo.getPersonnelId(), 0, "数据解密错误", null);
// return R.fail(ERROR_CODE_ENCRYPT, "数据解密错误");
// }
JSONObject requestBody = JSONUtil.parseObj(body);
System.out.println("requestBody = " + requestBody);
AgentOrderVo agentOrderVo = agentOrderService.queryBySerialNumber(requestBody.getStr("serialNumber"));
if (ObjectUtils.isNull(agentOrderVo)) {
log.error("订单不存在");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "订单不存在", null);
return R.fail(ERROR_CODE_ENCRYPT, "订单不存在");
}
try {
CTResponse<String> response = ctService.uploadFile(agentOrderVo.getSerialNumber(), agentOrderVo.getName(),
agentOrderVo.getIdCard(), requestBody.getStr("type"), agentOrderVo.getUploadMsgId(), requestBody.getStr("img"));
if (response.isSuccess()) {
AgentOrderBo agentOrderBo = new AgentOrderBo();
agentOrderBo.setId(agentOrderVo.getId());
agentOrderBo.setUploadMsgId(response.getData());
if (requestBody.getStr("type").equals("idCardFront")) {
agentOrderBo.setIdCardFront(1);
}
else if (requestBody.getStr("type").equals("idCardBack")) {
agentOrderBo.setIdCardBack(1);
}
else if (requestBody.getStr("type").equals("frontFace")) {
agentOrderBo.setFrontFace(1);
}
agentOrderService.updateByBo(agentOrderBo);
return R.ok(agentOrderVo.getSerialNumber());
} else {
// 订单验证失败
log.error("上传失败");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "上传失败", response.getMessage());
return R.fail(ERROR_CODE_PARAMS, response.getMessage());
}
} catch (Exception e) {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(e.getMessage());
return R.fail(ERROR_CODE_NETWORK, "电信网络异常");
}
}
@PostMapping("confirmOrder")
public R<String> confirmOrder(HttpServletRequest request, @RequestBody String body) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
try {
SM2 sm2 = (SM2) request.getAttribute("sm2");
body = sm2.decryptStr(body, KeyType.PrivateKey);
} catch (Exception e) {
log.error("数据解密错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "数据解密错误", null);
return R.fail(ERROR_CODE_ENCRYPT, "数据解密错误");
}
JSONObject requestBody = JSONUtil.parseObj(body);
System.out.println("requestBody = " + requestBody);
AgentOrderVo agentOrderVo = agentOrderService.queryBySerialNumber(requestBody.getStr("serialNumber"));
if (ObjectUtils.isNull(agentOrderVo)) {
log.error("订单不存在");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "订单不存在", null);
return R.fail(ERROR_CODE_ENCRYPT, "订单不存在");
}
if (agentOrderVo.getIdCardFront() == 0 || agentOrderVo.getIdCardBack() == 0 || agentOrderVo.getFrontFace() == 0) {
log.error("照片上传不完整");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "照片上传不完整", null);
return R.fail(ERROR_CODE_ENCRYPT, "照片上传不完整");
}
try {
CTResponse<String> response = ctService.saveOrder(agentOrderVo.getName(), agentOrderVo.getIdCard(), agentOrderVo.getContactMobile(),
agentOrderVo.getInstalledAddress(), agentOrderVo.getSaleId(), agentOrderVo.getStoreId(),
agentOrderVo.getPersonnelId(), agentOrderVo.getProvince(), agentOrderVo.getCity(),
agentOrderVo.getCounty(), agentOrderVo.getSerialNumber(), agentOrderVo.getNumber(),
agentOrderVo.getLogiRemark(), agentOrderVo.getPageUrl(), agentOrderVo.getRemark(),
agentOrderVo.getInstallAddress(), "", "idCardFront,idCardBack,frontFace");
if (response.isSuccess()) {
AgentOrderBo agentOrderBo = new AgentOrderBo();
agentOrderBo.setId(agentOrderVo.getId());
agentOrderBo.setOrderNum(response.getData());
agentOrderBo.setOrderStatus("S1000");
agentOrderBo.setStatus("0");
agentOrderService.updateByBo(agentOrderBo);
return R.ok("操作成功", agentOrderBo.getSerialNumber());
} else {
// 订单验证失败
log.error("电信订单验证失败");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage());
return R.fail(ERROR_CODE_PARAMS, response.getMessage());
}
} catch (Exception e) {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(e.getMessage());
return R.fail(ERROR_CODE_NETWORK, "电信网络异常");
}
}
@GetMapping("getOrderList")
public R<JSONObject> getOrderList(HttpServletRequest request,
Integer page, Integer pageSize,
String saleId,
String name, String contactMobile, String number) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
SM2 sm2 = (SM2) request.getAttribute("sm2");
AgentAccountGoodBo agentAccountGoodBo = new AgentAccountGoodBo();
agentAccountGoodBo.setPersonnelId(agentAccountVo.getPersonnelId());
// if (ObjectUtils.isNull(saleId) && ObjectUtils.isNull(name) && ObjectUtils.isNull(contactMobile) && ObjectUtils.isNull(number)) {
if (ObjectUtils.isNull(saleId)) {
log.error("无saleId");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "无参数", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
LambdaQueryWrapper<AgentOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(AgentOrder::getPersonnelId, agentAccountVo.getPersonnelId());
lqw.eq(ObjectUtils.isNotNull(saleId), AgentOrder::getSaleId, saleId);
if (ObjectUtils.isNotNull(name)) {
try {
lqw.eq(ObjectUtils.isNotNull(name), AgentOrder::getName, sm2.decryptStr(name, KeyType.PrivateKey));
} catch (Exception e) {
log.error("解密姓名错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "解密姓名错误", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
}
if (ObjectUtils.isNotNull(contactMobile)) {
try {
lqw.eq(ObjectUtils.isNotNull(contactMobile), AgentOrder::getContactMobile, sm2.decryptStr(contactMobile, KeyType.PrivateKey));
} catch (Exception e) {
log.error("解密联系电话错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "解密联系电话错误", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
}
if (ObjectUtils.isNotNull(number)) {
try {
lqw.eq(ObjectUtils.isNotNull(number), AgentOrder::getNumber, sm2.decryptStr(number, KeyType.PrivateKey));
} catch (Exception e) {
log.error("解密手机号错误");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "解密手机号错误", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
}
lqw.gt(AgentOrder::getStatus, "-1");
PageQuery pageQuery = new PageQuery();
pageQuery.setPageNum(page);
pageQuery.setPageSize(pageSize);
TableDataInfo<AgentOrderVo> tableDataInfo = agentOrderService.queryList(lqw, pageQuery);
JSONObject resultData = new JSONObject();
JSONObject meta = new JSONObject();
meta.set("total", tableDataInfo.getTotal());
meta.set("page", page);
meta.set("pageSize", pageSize);
resultData.set("meta", meta);
List<JSONObject> objects = new ArrayList<>();
for (AgentOrderVo vo: tableDataInfo.getRows()) {
JSONObject data = new JSONObject();
data.set("serialNumber", vo.getSerialNumber());
data.set("name", vo.getName());
data.set("contactMobile", vo.getContactMobile());
data.set("idCard", vo.getIdCard());
data.set("number", vo.getNumber());
data.set("status", vo.getStatus());
data.set("orderStatus", vo.getOrderStatus());
data.set("createTime", vo.getCreateTime());
data.set("updateTime", vo.getUpdateTime());
data.set("isRecharge", vo.getIsRecharge());
data.set("chargeTitle", vo.getChargeTitle());
data.set("expressVendor", vo.getExpressVendor());
data.set("expressNum", vo.getExpressNum());
JSONObject goods = new JSONObject();
goods.set("saleId", vo.getSaleId());
goods.set("title", vo.getTitle());
goods.set("content", vo.getContent());
data.set("bookingGoods", goods);
objects.add(data);
}
resultData.set("objects", sm2.encryptBase64(objects.toString(), KeyType.PublicKey));
return R.ok(resultData);
}
@GetMapping("getOrderDetail")
public R<String> getOrderDetail(HttpServletRequest request, String serialNumber) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (ObjectUtils.isNull(serialNumber)) {
log.error("参数错误:serialNumber为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "参数错误:serialNumber为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
AgentOrderBo bo = new AgentOrderBo();
bo.setSerialNumber(serialNumber);
bo.setAgentId(agentAccountVo.getAgentId());
bo.setPersonnelId(agentAccountVo.getPersonnelId());
List<AgentOrderVo> voList = agentOrderService.queryList(bo);
if (voList.size() > 0) {
AgentOrderVo vo = voList.get(0);
JSONObject data = new JSONObject();
data.set("serialNumber", vo.getSerialNumber());
data.set("name", vo.getName());
data.set("contactMobile", vo.getContactMobile());
data.set("idCard", vo.getIdCard());
data.set("number", vo.getNumber());
data.set("status", vo.getStatus());
data.set("orderStatus", vo.getStatus());
data.set("isRecharge", vo.getIsRecharge());
data.set("chargeTitle", vo.getChargeTitle());
data.set("expressVendor", vo.getExpressVendor());
data.set("expressNum", vo.getExpressNum());
data.set("routeArr", JSONUtil.parseArray(vo.getRouteArr()));
data.set("expressRoutes", JSONUtil.parseArray(vo.getExpressRoutes()));
data.set("createTime", vo.getCreateTime());
data.set("updateTime", vo.getUpdateTime());
JSONObject goods = new JSONObject();
goods.set("saleId", vo.getSaleId());
goods.set("title", vo.getTitle());
goods.set("content", vo.getContent());
data.set("bookingGoods", goods);
SM2 sm2 = (SM2) request.getAttribute("sm2");
return R.ok(null, sm2.encryptBase64(data.toString(), KeyType.PublicKey));
}
return R.ok();
}
public static void main(String[] args) {
String body = "{\"name\":\"毕彦兵\",\"idCard\":\"230104198809293718\",\"contactNumber\":\"18980692055\",\"installedAddress\":\"世贸大道世贸都柏林49栋3单元2402\",\"gid\":1,\"province\":\"黑龙江\",\"city\":\"哈尔滨\",\"county\":\"松北区\",\"number\":\"19384158592\",\"logiRemark\":\"\",\"pageUrl\":\"\",\"remark\":\"\",}";
}
}

View File

@@ -0,0 +1,370 @@
package com.ruoyi.api.controller;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.common.core.domain.CTResponse;
import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.ct.domain.AgentAccountGoodUser;
import com.ruoyi.ct.domain.bo.AgentAccountGoodBo;
import com.ruoyi.ct.domain.bo.AgentAccountGoodUserBo;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
import com.ruoyi.ct.domain.vo.AgentAccountGoodUserVo;
import com.ruoyi.ct.domain.vo.AgentAccountGoodVo;
import com.ruoyi.ct.domain.vo.AgentAccountVo;
import com.ruoyi.ct.domain.vo.GoodVo;
import com.ruoyi.ct.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
@RestController
@Slf4j
@RequestMapping("free-api/v1.0.0")
public class APIFreeController extends BaseController {
@Resource
private CTService ctService;
@Resource
private IAgentAccountService agentAccountService;
@Resource
private IAgentAccountGoodService agentAccountGoodService;
@Resource
private IAgentAccountGoodUserService agentAccountGoodUserService;
@Resource
private IAgentService agentService;
@Resource
private IAgentOrderService agentOrderService;
@Resource
private IGoodService goodService;
private AgentAccountGoodVo checkCode(String code) {
try {
byte[] decodedBytes = Base64.getDecoder().decode(code); // 对Base64字符串进行解码得到byte数组
code = new String(decodedBytes);
String[] codes = code.split(",");
String agentAccountGoodId = codes[0];
String agentAccountId = codes[1];
String goodId = codes[2];
log.error("agentAccountGoodId: "+ agentAccountGoodId);
log.error("agentAccountId: "+ agentAccountId);
log.error("goodId: "+ goodId);
AgentAccountGoodVo agentAccountGoodVo = agentAccountGoodService.queryById(Long.valueOf(agentAccountGoodId));
log.error("agentAccountGoodVo: "+agentAccountGoodVo);
log.error("agentAccountId: "+ agentAccountId.equals(agentAccountGoodVo.getAgentAccountId().toString()));
log.error("goodId: "+ goodId.equals(agentAccountGoodVo.getGoodId().toString()));
if (ObjectUtils.isNotNull(agentAccountGoodVo)
&& agentAccountId.equals(agentAccountGoodVo.getAgentAccountId().toString())
&& goodId.equals(agentAccountGoodVo.getGoodId().toString())) {
return agentAccountGoodVo;
}
return null;
} catch (Exception e) {
log.error(e.getMessage());
return null;
}
}
/**
* 检查有效性用于H5
* @param code base64加密后数据agentAccountGoodId+agentAccountId+goodId
* @return
*/
@GetMapping("/check")
public R<JSONObject> check(@RequestParam String code) {
AgentAccountGoodVo agentAccountGoodVo = checkCode(code);
if (ObjectUtils.isNotNull(agentAccountGoodVo)) {
JSONObject data = new JSONObject();
GoodVo goodVo = goodService.queryById(agentAccountGoodVo.getGoodId());
data.set("title", goodVo.getName());
data.set("images", agentAccountGoodVo.getImages());
data.set("remark", agentAccountGoodVo.getRemark());
return R.ok(data);
}
return R.fail(CODE_ERROR, "活动不存在");
}
/**
* 详情,用于上传用户信息页面
* @param code
* @return
*/
@GetMapping("/detail")
public R<JSONObject> detail(@RequestParam String code, @RequestParam String verifyCode) {
AgentAccountGoodVo agentAccountGoodVo = checkCode(code);
if (ObjectUtils.isNotEmpty(agentAccountGoodVo) && agentAccountGoodVo.getTmpPassword().equals(verifyCode)) {
JSONObject data = new JSONObject();
data.set("registerCount", agentAccountGoodVo.getRegisterCount());
data.set("registeredCount", agentAccountGoodVo.getCompleteCount() + agentAccountGoodVo.getWaitCount());
data.set("verifyCount", agentAccountGoodVo.getVerifyCount());
data.set("verifiedCount", agentAccountGoodVo.getVerifiedCount());
return R.ok(data);
}
return R.fail(CODE_ERROR, "活动不存在");
}
/**
* 号码列表用于H5
* @param request
* @param code
* @param page
* @param pageSize
* @return
*/
@GetMapping("/getNumberList")
public R<List<JSONObject>> getNumberList(HttpServletRequest request, @RequestParam String code, @RequestParam Integer page, @RequestParam Integer pageSize) {
AgentAccountGoodVo agentAccountGoodVo = checkCode(code);
if (ObjectUtils.isEmpty(agentAccountGoodVo)) {
return R.fail(CODE_ERROR, "活动不存在");
}
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
AgentAccountVo agentAccountVo = agentAccountService.queryById(agentAccountGoodVo.getAgentAccountId());
try {
List<JSONObject> data = ctService.selectNumber(agentAccountVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize));
saveLog(request, agentAccountVo.getPersonnelId(), 1, "", data.toString());
return R.ok(data);
} catch (Exception e) {
saveLog(request, agentAccountVo.getPersonnelId(), 1, "电信请求异常", "[]");
e.printStackTrace();
log.error(e.getMessage());
return R.ok(new ArrayList<>());
}
}
/**
* 提交订单用于H5
* @param request
* @param code
* @param requestBody
* @return
*/
@PostMapping("confirmOrder")
public R<String> confirmOrder(HttpServletRequest request, @RequestParam String code,
@RequestBody JSONObject requestBody) {
AgentAccountGoodVo agentAccountGoodVo = checkCode(code);
if (ObjectUtils.isEmpty(agentAccountGoodVo)) {
return R.fail(CODE_ERROR, "活动不存在");
}
AgentAccountVo agentAccountVo = agentAccountService.queryById(agentAccountGoodVo.getAgentAccountId());
System.out.println("requestBody = " + requestBody);
AgentOrderBo agentOrderBo = requestBody.toBean(AgentOrderBo.class);
// 填充固定数据
agentOrderBo.setAgentName(agentAccountVo.getAgentName());
agentOrderBo.setAgentId(agentAccountVo.getAgentId());
agentOrderBo.setStoreId("13");
agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", ""));
agentOrderBo.setStatus("0");
agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId());
agentOrderBo.setCreateTime(new Date());
agentOrderBo.setOrderType(1);
{
agentOrderBo.setAgentAccountId(agentAccountGoodVo.getId());
agentOrderBo.setSaleId(agentAccountGoodVo.getSaleId());
GoodVo goodVo = goodService.queryById(agentAccountGoodVo.getGoodId());
agentOrderBo.setTitle(goodVo.getName());
agentOrderBo.setContent(goodVo.getContent());
// 校验用户信息,姓名、身份证、手机号
if (ObjectUtils.isNull(agentOrderBo.getName())) {
log.error("姓名为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "姓名为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getIdCard())) {
log.error("身份证号为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "身份证号为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getContactMobile())) {
log.error("手机号为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "手机号为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
// 校验地址信息
if (ObjectUtils.isNull(agentOrderBo.getProvince())) {
log.error("省为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "省为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getCity())) {
log.error("市为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "市为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getCounty())) {
log.error("区为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "区为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getInstalledAddress())) {
log.error("地址为空");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "地址为空", null);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getInstallAddress())) {
agentOrderBo.setInstallAddress(agentOrderBo.getInstalledAddress());
}
// 校验数量
if (agentAccountGoodVo.getIsNeedVerify() == 1) {
Integer registerCount = agentAccountGoodVo.getRegisterCount();
Integer completeCount = agentAccountGoodVo.getCompleteCount();
Integer waitCount = agentAccountGoodVo.getWaitCount();;
Integer verifyCount = agentAccountGoodVo.getVerifyCount();
Integer verifiedCount = agentAccountGoodVo.getVerifiedCount();
if (registerCount > 0 && completeCount+waitCount >= registerCount) {
// 申请数量已到达上限
return R.fail(ERROR_CODE_VERIFY, "该推广码下单数量已到达上限");
}
if (verifyCount > 0) {
if (verifiedCount >= verifyCount) {
// 使用录入人员信息的数量已到达上限
return R.fail(ERROR_CODE_VERIFY, "该推广码下单数量已到达上限");
}
AgentAccountGoodUserBo agentAccountGoodUserBo = new AgentAccountGoodUserBo();
agentAccountGoodUserBo.setAgentAccountGoodId(agentAccountGoodVo.getId());
agentAccountGoodUserBo.setName(agentOrderBo.getName());
agentAccountGoodUserBo.setMobile(agentOrderBo.getContactMobile());
agentAccountGoodUserBo.setIdCardNo(agentOrderBo.getIdCard());
int c = agentAccountGoodUserService.queryList(agentAccountGoodUserBo).size();
if (c == 0) {
// 人员不在名单范围内
return R.fail(ERROR_CODE_VERIFY, "非授权用户");
}
AgentAccountGoodBo agentAccountGoodBo = new AgentAccountGoodBo();
agentAccountGoodBo.setVerifiedCount(agentAccountGoodVo.getVerifiedCount() + 1);
agentAccountGoodBo.setWaitCount(agentAccountGoodVo.getWaitCount() + 1);
agentAccountGoodBo.setId(agentAccountGoodVo.getId());
agentAccountGoodService.updateByBo(agentAccountGoodBo);
}
}
// 保存数据
try {
CTResponse<String> response = ctService.saveOrder(agentOrderBo.getName(), agentOrderBo.getIdCard(), agentOrderBo.getContactMobile(),
agentOrderBo.getInstalledAddress(), agentOrderBo.getSaleId(), agentOrderBo.getStoreId(),
agentOrderBo.getPersonnelId(), agentOrderBo.getProvince(), agentOrderBo.getCity(),
agentOrderBo.getCounty(), agentOrderBo.getSerialNumber(), agentOrderBo.getNumber(),
agentOrderBo.getLogiRemark(), agentOrderBo.getPageUrl(), agentOrderBo.getRemark(),
agentOrderBo.getInstallAddress(), "", "");
if (response.isSuccess()) {
agentOrderBo.setOrderNum(response.getData());
agentOrderBo.setOrderStatus("S1000");
agentOrderBo.setStatus("0");
agentOrderService.insertByBo(agentOrderBo);
return R.ok("操作成功", agentOrderBo.getSerialNumber());
} else {
// 订单验证失败
log.error("电信订单验证失败");
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage());
return R.fail(ERROR_CODE_PARAMS, response.getMessage());
}
} catch (Exception e) {
saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", "");
e.printStackTrace();
log.error(e.getMessage());
return R.fail(ERROR_CODE_NETWORK, "电信网络异常");
}
}
}
@GetMapping("/getUserList")
public R<TableDataInfo<AgentAccountGoodUserVo>> getUserList(HttpServletRequest request,
@RequestParam String code,
@RequestParam String verifyCode,
@RequestParam Integer page,
@RequestParam Integer pageSize) {
AgentAccountGoodVo agentAccountGoodVo = checkCode(code);
if (ObjectUtils.isEmpty(agentAccountGoodVo) || !agentAccountGoodVo.getTmpPassword().equals(verifyCode)) {
return R.fail(CODE_ERROR, "活动不存在");
}
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
AgentAccountGoodUserBo bo = new AgentAccountGoodUserBo();
bo.setAgentAccountGoodId(agentAccountGoodVo.getId());
PageQuery pageQuery = new PageQuery();
pageQuery.setPageSize(pageSize);
pageQuery.setPageNum(page);
TableDataInfo<AgentAccountGoodUserVo> tableDataInfo = agentAccountGoodUserService.queryPageList(bo, pageQuery);
return R.ok(tableDataInfo);
}
@PostMapping("/saveUser")
public R<Void> saveUser(HttpServletRequest request, @RequestParam String code,
@RequestParam String verifyCode, @RequestBody AgentAccountGoodUserBo agentAccountGoodUserBo) {
AgentAccountGoodVo agentAccountGoodVo = checkCode(code);
if (ObjectUtils.isEmpty(agentAccountGoodVo) || !agentAccountGoodVo.getTmpPassword().equals(verifyCode)) {
return R.fail(CODE_ERROR, "活动不存在");
}
AgentAccountGoodUserBo bo = new AgentAccountGoodUserBo();
bo.setAgentAccountGoodId(agentAccountGoodVo.getId());
int c = agentAccountGoodUserService.queryList(bo).size();
if (c >= agentAccountGoodVo.getVerifyCount()) {
return R.fail(ERROR_CODE_VERIFY, "授权人员名单已达上限");
}
agentAccountGoodUserBo.setAgentAccountGoodId(agentAccountGoodVo.getId());
c = agentAccountGoodUserService.queryList(agentAccountGoodUserBo).size();
if (c > 0) {
return R.fail(ERROR_CODE_VERIFY, "该用户已存在");
}
agentAccountGoodUserBo.setCreateTime(new Date());
agentAccountGoodUserService.insertByBo(agentAccountGoodUserBo);
return R.ok();
}
@PostMapping("/updateUser")
public R<Void> updateUser(HttpServletRequest request, @RequestParam String code,
@RequestParam String verifyCode, @RequestBody AgentAccountGoodUserBo agentAccountGoodUserBo) {
AgentAccountGoodVo agentAccountGoodVo = checkCode(code);
if (ObjectUtils.isEmpty(agentAccountGoodVo) || !agentAccountGoodVo.getTmpPassword().equals(verifyCode)) {
return R.fail(CODE_ERROR, "活动不存在");
}
agentAccountGoodUserBo.setAgentAccountGoodId(agentAccountGoodVo.getId());
agentAccountGoodUserService.updateByBo(agentAccountGoodUserBo);
return R.ok();
}
@GetMapping("/removeUser")
public R<Void> removeUser(HttpServletRequest request, @RequestParam String code,
@RequestParam String verifyCode,
@RequestParam Long id) {
AgentAccountGoodVo agentAccountGoodVo = checkCode(code);
if (ObjectUtils.isEmpty(agentAccountGoodVo) || !agentAccountGoodVo.getTmpPassword().equals(verifyCode)) {
return R.fail(CODE_ERROR, "活动不存在");
}
AgentAccountGoodUser agentAccountGoodUser = new AgentAccountGoodUser();
agentAccountGoodUser.setId(id);
agentAccountGoodUser.setAgentAccountGoodId(agentAccountGoodVo.getId());
agentAccountGoodUserService.deleteByBo(agentAccountGoodUser);
return R.ok();
}
}

View File

@@ -0,0 +1,321 @@
package com.ruoyi.api.controller;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.ct.domain.AgentOrder;
import com.ruoyi.ct.domain.bo.AgentOrderBo;
import com.ruoyi.ct.domain.vo.AgentAccountGoodVo;
import com.ruoyi.ct.domain.vo.AgentAccountVo;
import com.ruoyi.ct.service.CTService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import static com.ruoyi.api.controller.BaseController.ERROR_CODE_VERIFY;
@RestController
@RequestMapping("api/test/v1.0.0")
@Slf4j
public class APITestController extends BaseTestController {
@Resource
private CTService ctService;
@GetMapping("getGoodsList")
public R<JSONObject> getGoodsList(HttpServletRequest request, Integer page, Integer pageSize) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
JSONObject resultData = new JSONObject();
JSONObject meta = new JSONObject();
meta.set("total", 2);
meta.set("page", page);
meta.set("pageSize", pageSize);
resultData.set("meta", meta);
resultData.set("objects", JSONUtil.parseArray("[{\"saleId\":\"108002\",\"title\":\"49套餐\",\"content\":\"大概的介绍\"},{\"saleId\":\"107657\",\"title\":\"59套餐\"}]"));
return R.ok(resultData);
}
@GetMapping("getNumberList")
public R<List<JSONObject>> getNumberList(HttpServletRequest request, Integer page, Integer pageSize, String saleId) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) {
log.error("参数错误");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
try {
List<JSONObject> data = ctService.selectNumber(agentAccountVo.getPersonnelId(), SALE_ID,
String.valueOf(page), String.valueOf(pageSize));
return R.ok(data);
} catch (Exception e) {
e.printStackTrace();
log.error(e.getMessage());
return R.ok(new ArrayList<>());
}
}
@PostMapping("confirmOrder")
public R<String> confirmOrder(HttpServletRequest request, @RequestBody String body) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
try {
SM2 sm2 = (SM2) request.getAttribute("sm2");
body = sm2.decryptStr(body, KeyType.PrivateKey);
} catch (Exception e) {
log.error("数据解密错误");
return R.fail(ERROR_CODE_ENCRYPT, "数据解密错误");
}
JSONObject requestBody = JSONUtil.parseObj(body);
System.out.println("requestBody = " + requestBody);
AgentOrderBo agentOrderBo = requestBody.toBean(AgentOrderBo.class);
// 填充固定数据
agentOrderBo.setAgentName(agentAccountVo.getAgentName());
agentOrderBo.setAgentId(agentAccountVo.getAgentId());
agentOrderBo.setStoreId("13");
agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", ""));
agentOrderBo.setStatus("0");
agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId());
agentOrderBo.setCreateTime(new Date());
AgentAccountGoodVo agentAccountGoodVo;
{
// 校验数据
// 校验gid
String saleId = requestBody.getStr("saleId");
if (ObjectUtils.isNull(saleId)) {
log.error("saleId为空");
System.out.println("saleId为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
try {
if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) {
log.error("saleId无效");
System.out.println("saleId无效");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
} catch (Exception e) {
log.error("saleId格式错误");
System.out.println("saleId格式错误");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
// 校验用户信息,姓名、身份证、手机号
if (ObjectUtils.isNull(agentOrderBo.getName())) {
log.error("姓名为空");
System.out.println("姓名为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getIdCard())) {
log.error("身份证号为空");
System.out.println("身份证号为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getContactMobile())) {
log.error("手机号为空");
System.out.println("手机号为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
// 校验地址信息
if (ObjectUtils.isNull(agentOrderBo.getProvince())) {
log.error("省为空");
System.out.println("省为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getCity())) {
log.error("市为空");
System.out.println("市为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getCounty())) {
log.error("区为空");
System.out.println("区为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getInstalledAddress())) {
log.error("地址为空");
System.out.println("地址为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
if (ObjectUtils.isNull(agentOrderBo.getInstallAddress())) {
agentOrderBo.setInstallAddress(agentOrderBo.getInstalledAddress());
}
// todo 根据代理商提供的验证url验证用户
String url = requestBody.getStr("url");
if (ObjectUtils.isNotNull("url")) {
JSONObject paramMap = new JSONObject();
paramMap.set("name", agentOrderBo.getName());
paramMap.set("idCard", agentOrderBo.getIdCard());
paramMap.set("contactMobile", agentOrderBo.getContactMobile());
try {
SM2 sm2 = (SM2) request.getAttribute("sm2");
String verifyResult = HttpUtil.post(url, sm2.encryptBase64(paramMap.toString(), KeyType.PublicKey));
JSONObject verifyData = JSONUtil.parseObj(verifyResult);
if (verifyData.getInt("code") != 200) {
log.error("验证不通过");
System.out.println("验证不通过");
return R.fail(ERROR_CODE_VERIFY, "验证错误");
}
} catch (Exception e) {
e.printStackTrace();
log.error("验证请求错误");
System.out.println("验证请求错误");
return R.fail(ERROR_CODE_VERIFY, "验证错误");
}
}
}
return R.ok("操作成功", UUID.randomUUID().toString().replace("-", ""));
}
@GetMapping("getOrderList")
public R<JSONObject> getOrderList(HttpServletRequest request,
Integer page, Integer pageSize,
String saleId,
String name, String contactMobile, String number) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
System.out.println("saleId = " + saleId);
System.out.println("name = " + name);
System.out.println("contactMobile = " + contactMobile);
System.out.println("number = " + number);
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (page == null || page < 1) {
page = 1;
}
if (pageSize == null || pageSize < 1 || pageSize > 50) {
pageSize = 20;
}
SM2 sm2 = (SM2) request.getAttribute("sm2");
// if (ObjectUtils.isNull(saleId) && ObjectUtils.isNull(name) && ObjectUtils.isNull(contactMobile) && ObjectUtils.isNull(number)) {
if (ObjectUtils.isNull(saleId)) {
log.error("参数错误");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
LambdaQueryWrapper<AgentOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(AgentOrder::getPersonnelId, agentAccountVo.getPersonnelId());
lqw.eq(ObjectUtils.isNotNull(saleId), AgentOrder::getSaleId, saleId);
if (ObjectUtils.isNotNull(name)) {
try {
System.out.println("name = " + sm2.decryptStr(name, KeyType.PrivateKey));
lqw.eq(ObjectUtils.isNotNull(name), AgentOrder::getName, sm2.decryptStr(name, KeyType.PrivateKey));
} catch (Exception e) {
log.error("参数错误");
System.out.println("name = " + name);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
}
if (ObjectUtils.isNotNull(contactMobile)) {
try {
System.out.println("contactMobile = " + sm2.decryptStr(contactMobile, KeyType.PrivateKey));
lqw.eq(ObjectUtils.isNotNull(contactMobile), AgentOrder::getContactMobile, sm2.decryptStr(contactMobile, KeyType.PrivateKey));
} catch (Exception e) {
log.error("参数错误");
System.out.println("contactMobile = " + contactMobile);
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
}
if (ObjectUtils.isNotNull(number)) {
try {
System.out.println("number = " + sm2.decryptStr(number, KeyType.PrivateKey));
lqw.eq(ObjectUtils.isNotNull(number), AgentOrder::getNumber, sm2.decryptStr(number, KeyType.PrivateKey));
} catch (Exception e) {
System.out.println("number = " + number);
log.error("参数错误");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
}
JSONObject resultData = new JSONObject();
JSONObject meta = new JSONObject();
meta.set("total", 1);
meta.set("page", page);
meta.set("pageSize", pageSize);
resultData.set("meta", meta);
List<JSONObject> objects = new ArrayList<>();
JSONObject data = new JSONObject();
data.set("serialNumber", UUID.randomUUID().toString().replace("-", ""));
data.set("name", "李白");
data.set("contactMobile", "18900001234");
data.set("idCard", "310101200001011234");
data.set("number", "19112341234");
data.set("status", 0);
data.set("orderStatus", "S1005");
data.set("createTime", "2023-12-31 00:00:00");
data.set("updateTime", "2023-12-31 00:00:00");
JSONObject goods = new JSONObject();
goods.set("saleId", SALE_ID);
goods.set("title", "49套餐");
goods.set("content", "49套餐");
data.set("bookingGoods", goods);
objects.add(data);
resultData.set("objects", sm2.encryptBase64(objects.toString(), KeyType.PublicKey));
return R.ok(resultData);
}
@GetMapping("getOrderDetail")
public R<String> getOrderList(HttpServletRequest request, String serialNumber) {
if (!checkAccount(request)) {
return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString());
}
AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount");
if (ObjectUtils.isNull(serialNumber)) {
log.error("参数错误:serialNumber为空");
return R.fail(ERROR_CODE_PARAMS, "参数错误");
}
JSONObject data = new JSONObject();
data.set("serialNumber", UUID.randomUUID().toString().replace("-", ""));
data.set("name", "李白");
data.set("contactMobile", "18900001234");
data.set("idCard", "310101200001011234");
data.set("number", "19112341234");
data.set("status", 1);
data.set("orderStatus", "S1013");
data.set("createTime", "2023-12-31 00:00:00");
data.set("updateTime", "2023-12-31 00:00:00");
JSONObject goods = new JSONObject();
goods.set("saleId", SALE_ID);
goods.set("title", "49套餐");
goods.set("content", "49套餐");
data.set("bookingGoods", goods);
data.set("expressNum", "SF001");
data.set("routeArr", JSONUtil.parseArray("[{\"fRouteTime\":\"2019-11-23 16:11:45\",\"fStatusName\":\"已提交\",\"fStatusId\":\"S1000\"},{\"fRouteTime\":\"2019-11-23 16:11:50\",\"fStatusName\":\"S1050\",\"fStatusId\":\"S1050\"},{\"fRouteTime\":\"2019-11-23 16:11:56\",\"fStatusName\":\"S105001\",\"fStatusId\":\"S105001\"},{\"fRouteTime\":\"2019-11-23 16:11:57\",\"fStatusName\":\"S100501\",\"fStatusId\":\"S100501\"},{\"fRouteTime\":\"2019-11-23 16:12:19\",\"fStatusName\":\"S100531\",\"fStatusId\":\"S100531\"},{\"fRouteTime\":\"2019-11-23 16:12:21\",\"fStatusName\":\"S100506\",\"fStatusId\":\"S100506\"},{\"fRouteTime\":\"2019-11-24 17:05:01\",\"fStatusName\":\"S100532\",\"fStatusId\":\"S100532\"},{\"fRouteTime\":\"2019-11-25 16:08:12\",\"fStatusName\":\"S1006\",\"fStatusId\":\"S1006\"},{\"fRouteTime\":\"2019-11-25 16:08:12\",\"fStatusName\":\"S101301\",\"fStatusId\":\"S101301\"}]"));
data.set("expressRoutes", JSONUtil.parseArray("[{\"updateDate\":\"2019-11-25 16:06:49\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100030\",\"remark\":\"订单提交补录 ICCID/串码89811111111111成功\",\"createStaff\":165124796390,\"logiOrderId\":12444255,\"logiOrderFlowId\":13119474,\"dversion\":0,\"createDate\":\"2019-11-25 16:06:41\"},{\"updateDate\":\"2019-11-25 08:30:17\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100030\",\"remark\":\"预约再送-快递员张三电话13333333333预约您 2019-11-25 09 时, 再次为您配送快件! \",\"logiOrderId\":12444255,\"logiOrderFlowId\":12973108,\"createDate\":\"2019-11-25 08:29:34\"},{\"updateDate\":\"2019-11-25 08:30:17\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100030\",\"remark\":\"已派送-正在派送途中将由快递员张三电话13333333333送达 请您准备签收。 \",\"logiOrderId\":12444255,\"logiOrderFlowId\":12973111,\"createDate\":\"2019-11-25 08:27:24\"},{\"updateDate\":\"2019-11-24 17:04:59\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100029\",\"remark\":\"快件已入库-您的快件正在运送中,已转至商海德中心仓库。\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12796420,\"createDate\":\"2019-11-24 16:49:39\"},{\"updateDate\":\"2019-11-24 17:04:59\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100002\",\"remark\":\"已收件-您的快件已收取成功,我们将尽快为你派送!\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12796421,\"createDate\":\"2019-11-24 16:46:22\"},{\"updateDate\":\"2019-11-24 16:34:17\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100004\",\"remark\":\"打包录入 ICCID/串码89811111111111成功\",\"createStaff\":164294780591,\"logiOrderId\":12444255,\"logiOrderFlowId\":12802391,\"dversion\":0,\"createDate\":\"2019-11-24 16:34:16\"},{\"updateDate\":\"2019-11-24 17:04:59\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100010\",\"remark\":\"待取件\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12796422,\"createDate\":\"2019-11-24 16:10:12\"},{\"updateDate\":\"2019-11-24 16:10:11\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100014\",\"remark\":\"物流单分发成功\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12767190,\"dversion\":0,\"createDate\":\"2019-11-24 16:10:11\"},{\"updateDate\":\"2019-11-24 16:05:54\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100021\",\"createStaff\":115060634224,\"logiOrderId\":12444255,\"logiOrderFlowId\":12793430,\"dversion\":0,\"createDate\":\"2019-11-24 16:05:54\"},{\"updateDate\":\"2019-11-24 13:46:54\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100015\",\"remark\":\"派送通知\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12749286,\"dversion\":0,\"createDate\":\"2019-11-24 13:46:54\"},{\"updateDate\":\"2019-11-23 16:12:02\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100005\",\"createStaff\":236240021834,\"logiOrderId\":12444255,\"logiOrderFlowId\":12444272,\"dversion\":0,\"createDate\":\"2019-11-23 16:12:02\"}]"));
SM2 sm2 = (SM2) request.getAttribute("sm2");
return R.ok(null, sm2.encryptBase64(data.toString(), KeyType.PublicKey));
}
}

View File

@@ -0,0 +1,165 @@
package com.ruoyi.api.controller;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.ct.domain.ApiLog;
import com.ruoyi.ct.domain.bo.ApiLogBo;
import com.ruoyi.ct.domain.vo.AgentAccountVo;
import com.ruoyi.ct.service.IAgentAccountService;
import com.ruoyi.ct.service.IApiLogService;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Enumeration;
@Slf4j
public class BaseController {
/**
* 操作成功
*/
public final static Integer SUCCESS_CODE = 200;
/**
* 地址错误
*/
public final static Integer NOT_FOUND_CODE = 404;
/**
* 服务器异常
*/
public final static Integer ERROR_SYSTEM_CODE = 500;
/**
* AppId 或 AppSecret错误
*/
public final static Integer ERROR_CODE_LOGIN = 1000;
/**
* 参数错误
*/
public final static Integer ERROR_CODE_PARAMS = 1001;
/**
* 解密错误
*/
public final static Integer ERROR_CODE_ENCRYPT = 1002;
/**
* 电信网络异常
*/
public final static Integer ERROR_CODE_NETWORK = 1003;
/**
* 验证错误
*/
public final static Integer ERROR_CODE_VERIFY = 1004;
/**
* H5验证错误
*/
public final static Integer CODE_ERROR = 1005;
@Resource
private IAgentAccountService iAgentAccountService;
@Resource
private IApiLogService apiLogService;
public boolean checkAccount(HttpServletRequest httpRequest) {
String appId = httpRequest.getHeader("x-ct-appid");
String appPwd = httpRequest.getHeader("x-ct-pwd");
System.out.println("appPwd = " + appPwd);
System.out.println("appId = " + appId);
if (ObjectUtils.isNull(appId) || ObjectUtils.isNull(appPwd)) {
log.error("账号或密码为空");
httpRequest.setAttribute("msg", "账号或密码为空");
saveLog(httpRequest, null, 0, "账号或密码为空", null);
return false;
}
AgentAccountVo agentAccountVo = iAgentAccountService.getByAppId(appId);
System.out.println("agentAccountVo = " + agentAccountVo);
if (ObjectUtils.isNull(agentAccountVo)) {
log.error("账号错误");
httpRequest.setAttribute("msg", "账号错误");
saveLog(httpRequest, agentAccountVo.getPersonnelId(), 0, "账号错误", null);
return false;
}
String ip = StringUtils.blankToDefault(httpRequest.getHeader("x-real-ip"), httpRequest.getRemoteAddr());
if (ObjectUtils.isNotNull(agentAccountVo.getIpList())) {
boolean isWhite = agentAccountVo.getIpList().contains(ip);
if (!isWhite) {
log.error("IP 不在白名单");
httpRequest.setAttribute("msg", "IP 不在白名单");
saveLog(httpRequest, agentAccountVo.getPersonnelId(), 0, "IP 不在白名单", null);
return false;
}
}
SM2 sm2 = SmUtil.sm2(agentAccountVo.getAgentPrivateKey(), agentAccountVo.getPlatformPublicKey());
httpRequest.setAttribute("sm2", sm2);
String pwd;
try {
pwd = sm2.decryptStr(appPwd, KeyType.PrivateKey);
} catch (Exception e) {
log.error("解密错误");
httpRequest.setAttribute("msg", "解密错误");
saveLog(httpRequest, agentAccountVo.getPersonnelId(), 0, "解密错误", null);
return false;
}
if (pwd.equals(agentAccountVo.getAppSecret())) {
httpRequest.setAttribute("agentAccount", agentAccountVo);
return true;
}
log.error("密码错误");
httpRequest.setAttribute("msg", "密码错误");
saveLog(httpRequest, agentAccountVo.getPersonnelId(), 0, "密码错误", null);
return false;
}
public void saveLog(HttpServletRequest httpRequest, String personnelId, int isSuccess, String msg, String res) {
ApiLogBo apiLog = new ApiLogBo();
apiLog.setIp(StringUtils.blankToDefault(httpRequest.getHeader("x-real-ip"), httpRequest.getRemoteAddr()));
apiLog.setUrl(httpRequest.getRequestURL().toString());
System.out.println("httpRequest.getMethod() = " + httpRequest.getMethod());
if (httpRequest.getMethod().equals("POST")) {
try {
InputStream inputStream = httpRequest.getInputStream();
// 将输入流转换为字符串
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
String requestBody = stringBuilder.toString();
apiLog.setRequestBody(requestBody);
} catch (Exception e) {
}
} else {
apiLog.setRequestBody(httpRequest.getQueryString());
}
JSONObject header = new JSONObject();
Enumeration<String> headerKeys = httpRequest.getHeaderNames();
while (headerKeys.hasMoreElements()) {
String key = headerKeys.nextElement();
header.put(key, httpRequest.getHeader(key));
}
apiLog.setRequestHeader(header.toString());
apiLog.setPersonnelId(personnelId);
apiLog.setIsSuccess(Long.valueOf(isSuccess));
apiLog.setErrorMsg(msg);
apiLog.setResponse(res);
Date now = new Date();
apiLog.setCreateTime(now);
apiLog.setCreateBy(String.valueOf(now.getTime()));
apiLogService.insertByBo(apiLog);
}
}

View File

@@ -0,0 +1,93 @@
package com.ruoyi.api.controller;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.ct.domain.vo.AgentAccountVo;
import com.ruoyi.ct.service.IAgentAccountService;
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@Slf4j
public class BaseTestController {
/**
* 操作成功
*/
public final static Integer SUCCESS_CODE = 200;
/**
* 地址错误
*/
public final static Integer NOT_FOUND_CODE = 404;
/**
* 服务器异常
*/
public final static Integer ERROR_SYSTEM_CODE = 500;
/**
* AppId 或 AppSecret错误
*/
public final static Integer ERROR_CODE_LOGIN = 1000;
/**
* 参数错误
*/
public final static Integer ERROR_CODE_PARAMS = 1001;
/**
* 解密错误
*/
public final static Integer ERROR_CODE_ENCRYPT = 1002;
/**
* 电信网络异常
*/
public final static Integer ERROR_CODE_NETWORK = 1003;
public final static String APP_ID = "02a42036-fe1f-4ef1-945a-08660a946b38";
public final static String APP_SECRET = "ff2b4dd8-5843-475d-ac4e-c41bb77537fc";
public final static String PLATFORM_PUBLIC_KEY = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAETyWQQ6VYQkbeW5ELmFFr/U/DAJGocNEd3hunFm4EoRHZD1MZcyqlCR/p/6ICmwZWYTAK3dz96Nabxi6yGOSkCQ==";
public final static String PLATFORM_PRIVATE_KEY = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQg006Jj+5NK9HrtnyXNpnb131jV/8CHeo5t2T74WliktCgCgYIKoEcz1UBgi2hRANCAARPJZBDpVhCRt5bkQuYUWv9T8MAkahw0R3eG6cWbgShEdkPUxlzKqUJH+n/ogKbBlZhMArd3P3o1pvGLrIY5KQJ";
public final static String AGENT_PUBLIC_KEY = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEZRdaHuSCG8U87+Cmh9LKbgC+DRBEwWpAyN31aCzoE1flWonnZezX2GqbvDdz7a0AxE6+FGEH1lxPYW39XhYupw==";
public final static String AGENT_PRIVATE_KEY = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgTjIdgyVigyoyE86vsR+XshZ3c+shTCFO2hgNQpF+HT6gCgYIKoEcz1UBgi2hRANCAARlF1oe5IIbxTzv4KaH0spuAL4NEETBakDI3fVoLOgTV+Vaiedl7NfYapu8N3PtrQDETr4UYQfWXE9hbf1eFi6n";
public final static String PERSONNEL_ID = "207202";
public final static String SALE_ID = "108002";
@Resource
private IAgentAccountService iAgentAccountService;
public boolean checkAccount(HttpServletRequest httpRequest) {
String appId = httpRequest.getHeader("x-ct-appid");
String appPwd = httpRequest.getHeader("x-ct-pwd");
if (ObjectUtils.isNull(appId) || ObjectUtils.isNull(appPwd)) {
log.error("账号或密码为空");
httpRequest.setAttribute("msg", "账号或密码为空");
return false;
}
AgentAccountVo agentAccountVo = iAgentAccountService.getByAppId(appId);
if (ObjectUtils.isNull(agentAccountVo)) {
log.error("账号错误");
httpRequest.setAttribute("msg", "账号错误");
return false;
}
System.out.println("agentAccountVo = " + agentAccountVo);
System.out.println("PLATFORM_PUBLIC_KEY:"+PLATFORM_PUBLIC_KEY);
System.out.println("AGENT_PRIVATE_KEY:"+AGENT_PRIVATE_KEY);
SM2 sm2 = SmUtil.sm2(AGENT_PRIVATE_KEY, PLATFORM_PUBLIC_KEY);
httpRequest.setAttribute("sm2", sm2);
String pwd;
try {
pwd = sm2.decryptStr(appPwd, KeyType.PrivateKey);
} catch (Exception e) {
log.error("解密错误");
httpRequest.setAttribute("msg", "解密错误");
return false;
}
if (pwd.equals(agentAccountVo.getAppSecret())) {
httpRequest.setAttribute("agentAccount", agentAccountVo);
return true;
}
log.error("密码错误");
httpRequest.setAttribute("msg", "密码错误");
return false;
}
}

View File

@@ -0,0 +1,30 @@
package com.ruoyi.api.filter;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@Component
public class APIFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤所有Controller之前");
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
System.out.println("RequestURL=" + httpRequest.getRequestURL());
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("过滤所有Controller之后");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void destroy() {
Filter.super.destroy();
}
}