Commit 7b57fa6e authored by 以墨为白's avatar 以墨为白 🎧

任务完成情况

parent 045c68ea
Pipeline #522 failed with stages
...@@ -4,12 +4,26 @@ Content-Type: application/json ...@@ -4,12 +4,26 @@ Content-Type: application/json
x-szpt-appid: 1 x-szpt-appid: 1
x-szpt-timestamp: 21 x-szpt-timestamp: 21
x-szpt-nonce: nonce x-szpt-nonce: nonce
x-szpt-sign: 804a69ec3288bd90a9955fef6b6f4cfa x-szpt-sign: a31189e46fc5c41894b3e155dafb77b4
{ {
"id":"23", "id":"23",
"appKey":"wer" "appKey":"wer"
} }
###### ######任务完成情况
######1
POST http://localhost:8086/rest/index/addXxRwwcqk
Content-Type: application/json
x-szpt-appid: 1
x-szpt-timestamp: 21
x-szpt-nonce: nonce
x-szpt-sign: cf9292d20f20c3705cabe1f08d07bec7
{
"rwid":"23",
"xxyid":"wer",
"bmzt": "1",
"shrid": "2",
"wczt": "3"
}
package com.zksy.szpt.config; package com.zksy.szpt.config;
import com.zksy.szpt.filter.SignatureVerificationFilter; import com.zksy.szpt.filter.SignatureVerificationFilter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -14,9 +15,6 @@ import javax.annotation.Resource; ...@@ -14,9 +15,6 @@ import javax.annotation.Resource;
@Component @Component
public class WebConfig implements WebMvcConfigurer { public class WebConfig implements WebMvcConfigurer {
@Resource
SignatureVerificationFilter signatureVerificationFilter;
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
// 多个拦截器组成一个拦截器链 // 多个拦截器组成一个拦截器链
...@@ -37,6 +35,7 @@ public class WebConfig implements WebMvcConfigurer { ...@@ -37,6 +35,7 @@ public class WebConfig implements WebMvcConfigurer {
/** /**
* 静态资源配置 * 静态资源配置
*
* @param registry * @param registry
*/ */
@Override @Override
...@@ -52,12 +51,13 @@ public class WebConfig implements WebMvcConfigurer { ...@@ -52,12 +51,13 @@ public class WebConfig implements WebMvcConfigurer {
/** /**
* 注册过滤器,这里注册的是自定义的签名验证过滤器,并且只会对/rest/*路径下的请求进行过滤 * 注册过滤器,这里注册的是自定义的签名验证过滤器,并且只会对/rest/*路径下的请求进行过滤
*
* @return * @return
*/ */
@Bean @Bean
public FilterRegistrationBean getFilter1Registration() { public FilterRegistrationBean getFilter1Registration(@Qualifier("signatureVerificationFilter") SignatureVerificationFilter signatureVerificationFilter) {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(this.signatureVerificationFilter); filterRegistrationBean.setFilter(signatureVerificationFilter);
//设置过滤器名称和路径,在过滤器类写了的话,这里不用重复写 //设置过滤器名称和路径,在过滤器类写了的话,这里不用重复写
filterRegistrationBean.setName("filter"); filterRegistrationBean.setName("filter");
filterRegistrationBean.addUrlPatterns("/rest/*"); filterRegistrationBean.addUrlPatterns("/rest/*");
......
package com.zksy.szpt.controller;
import com.zksy.szpt.domain.dto.XxRwwcqkDTO;
import com.zksy.szpt.service.IndexService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
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.validation.Valid;
@Api(tags = "新增服务")
@RequestMapping("/rest/index")
@RestController
public class IndexController {
private final IndexService indexService;
public IndexController(IndexService indexService) {
this.indexService = indexService;
}
@ApiOperation(value = "新增xx_rwwcqk数据")
@PostMapping("/addXxRwwcqk")
public Integer addXxRwwcqk(@RequestBody @Valid XxRwwcqkDTO xxRwwcqkDTO) {
return indexService.addXxRwwcqk(xxRwwcqkDTO);
}
}
package com.zksy.szpt.domain.dto;
import javax.validation.constraints.NotBlank;
import java.util.Date;
public class XxRwwcqkDTO {
/**
* 任务ID
*/
@NotBlank(message = "任务ID不能为空")
private String rwid;
/**
* 义警ID
*/
@NotBlank(message = "义警ID不能为空")
private String xxyid;
/**
* 姓名
*/
private String xm;
/**
* 联系电话;
*/
private String lxdh;
/**
* 义警队伍;cslb=3210
*/
private String yjdw;
/**
* 完成状态;cslb=3212
*/
@NotBlank(message = "完成状态不能为空")
private String wczt;
/**
* 报名状态;cslb=1005
*/
@NotBlank(message = "报名状态不能为空")
private String bmzt;
/**
* 反馈内容;
*/
private String fknr;
/**
* 接收时间
*/
private Date jssj;
/**
* 反馈时间
*/
private Date fksj;
/**
* 审核时间
*/
private Date shsj;
/**
* 审核人姓名
*/
private String shrxm;
/**
* 审核人id
*/
@NotBlank(message = "审核人ID不能为空")
private String shrid;
/**
* 审核说明
*/
private String shsm;
/**
* 运营单位ID
*/
private String mchid;
public String getRwid() {
return rwid;
}
public void setRwid(String rwid) {
this.rwid = rwid == null ? null : rwid.trim();
}
public String getXxyid() {
return xxyid;
}
public void setXxyid(String xxyid) {
this.xxyid = xxyid == null ? null : xxyid.trim();
}
public String getXm() {
return xm;
}
public void setXm(String xm) {
this.xm = xm == null ? null : xm.trim();
}
public String getLxdh() {
return lxdh;
}
public void setLxdh(String lxdh) {
this.lxdh = lxdh == null ? null : lxdh.trim();
}
public String getYjdw() {
return yjdw;
}
public void setYjdw(String yjdw) {
this.yjdw = yjdw == null ? null : yjdw.trim();
}
public String getWczt() {
return wczt;
}
public void setWczt(String wczt) {
this.wczt = wczt == null ? null : wczt.trim();
}
public String getBmzt() {
return bmzt;
}
public void setBmzt(String bmzt) {
this.bmzt = bmzt == null ? null : bmzt.trim();
}
public String getFknr() {
return fknr;
}
public void setFknr(String fknr) {
this.fknr = fknr == null ? null : fknr.trim();
}
public Date getJssj() {
return jssj;
}
public void setJssj(Date jssj) {
this.jssj = jssj;
}
public Date getFksj() {
return fksj;
}
public void setFksj(Date fksj) {
this.fksj = fksj;
}
public Date getShsj() {
return shsj;
}
public void setShsj(Date shsj) {
this.shsj = shsj;
}
public String getShrxm() {
return shrxm;
}
public void setShrxm(String shrxm) {
this.shrxm = shrxm == null ? null : shrxm.trim();
}
public String getShrid() {
return shrid;
}
public void setShrid(String shrid) {
this.shrid = shrid == null ? null : shrid.trim();
}
public String getShsm() {
return shsm;
}
public void setShsm(String shsm) {
this.shsm = shsm == null ? null : shsm.trim();
}
public String getMchid() {
return mchid;
}
public void setMchid(String mchid) {
this.mchid = mchid == null ? null : mchid.trim();
}
}
\ No newline at end of file
...@@ -6,7 +6,6 @@ import java.util.Date; ...@@ -6,7 +6,6 @@ import java.util.Date;
@TableName("tb_app_store") @TableName("tb_app_store")
public class AppStore { public class AppStore {
@TableId(type = IdType.AUTO)
private Long id; private Long id;
//uuid, 唯一标识,雪花算法实现 //uuid, 唯一标识,雪花算法实现
@TableId(type = IdType.ASSIGN_ID) @TableId(type = IdType.ASSIGN_ID)
......
package com.zksy.szpt.domain.po; package com.zksy.szpt.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date; import java.util.Date;
@TableName
public class XxRwwcqk { public class XxRwwcqk {
/** /**
* IID * IID
...@@ -11,6 +16,7 @@ public class XxRwwcqk { ...@@ -11,6 +16,7 @@ public class XxRwwcqk {
/** /**
* 任务完成ID * 任务完成ID
*/ */
@TableId(type = IdType.ASSIGN_ID)
private String id; private String id;
/** /**
......
...@@ -3,36 +3,35 @@ package com.zksy.szpt.filter; ...@@ -3,36 +3,35 @@ package com.zksy.szpt.filter;
import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zksy.szpt.domain.HttpResult; import com.zksy.szpt.domain.HttpResult;
import com.zksy.szpt.domain.HttpResultState; import com.zksy.szpt.domain.HttpResultState;
import com.zksy.szpt.service.AppStoreService; import com.zksy.szpt.service.AppStoreService;
import com.zksy.szpt.util.SignatureUtil; import com.zksy.szpt.util.SignatureUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StreamUtils; import org.springframework.util.StreamUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.filter.OncePerRequestFilter;
import javax.annotation.Resource;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.function.Function;
@Component @Component
public class SignatureVerificationFilter extends OncePerRequestFilter { public class SignatureVerificationFilter extends OncePerRequestFilter {
public Logger logger = LoggerFactory.getLogger(SignatureVerificationFilter.class); public Logger logger = LoggerFactory.getLogger(SignatureVerificationFilter.class);
private static Map<String, Function<String, String>> workTypeMap = new HashMap<>(); @Resource
ObjectMapper objectMapper;
private final AppStoreService appStoreService; private final AppStoreService appStoreService;
...@@ -68,10 +67,9 @@ public class SignatureVerificationFilter extends OncePerRequestFilter { ...@@ -68,10 +67,9 @@ public class SignatureVerificationFilter extends OncePerRequestFilter {
// 时间戳 // 时间戳
String timestampStr = request.getHeader(SignatureUtil.TIMESTAMP); String timestampStr = request.getHeader(SignatureUtil.TIMESTAMP);
if (!StringUtils.hasText(appId) || !StringUtils.hasText(sign) || !StringUtils.hasText(nonce) || !StringUtils.hasText(timestampStr)) { if (!StringUtils.hasText(appId) || !StringUtils.hasText(sign) || !StringUtils.hasText(nonce) || !StringUtils.hasText(timestampStr)) {
logger.error("缺少参数appId{},sign{},nonce{},timestampStr{}", appId, sign, nonce, timestampStr); logger.warn("缺少参数appId:{},sign:{},nonce{},timestampStr:{}", appId, sign, nonce, timestampStr);
this.write(response, "缺少参数"); this.write(response, "请求头缺少参数,appId:" + appId + ",sign:" + sign + ",nonce:" + nonce + ",timestamp:" + timestampStr);
return false; return false;
} }
...@@ -92,10 +90,11 @@ public class SignatureVerificationFilter extends OncePerRequestFilter { ...@@ -92,10 +90,11 @@ public class SignatureVerificationFilter extends OncePerRequestFilter {
// return false; // return false;
// } // }
// 请求体 // 请求体
String body = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8); String body = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8);
// 需要签名的数据:appId+nonce+timestampStr+body+secretKey body = objectMapper.writeValueAsString(objectMapper.readValue(body, Map.class));
// 校验签名 // 校验签名appId+nonce+timestampStr+body+secretKey
String data = String.format("%s%s%s%s%s", appId, nonce, timestampStr, body, secretKey); String data = String.format("%s%s%s%s%s", appId, nonce, timestampStr, body, secretKey);
String generatedSignature = DigestUtil.md5Hex(data); String generatedSignature = DigestUtil.md5Hex(data);
if (!generatedSignature.equals(sign)) { if (!generatedSignature.equals(sign)) {
......
package com.zksy.szpt.handler; package com.zksy.szpt.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.handlers.StrictFill;
import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* 自动填充 create_time, update_time 字段 * 自动填充 create_time, update_time 字段
...@@ -14,11 +17,24 @@ public class SzptMetaObjectHandler implements MetaObjectHandler { ...@@ -14,11 +17,24 @@ public class SzptMetaObjectHandler implements MetaObjectHandler {
@Override @Override
public void insertFill(MetaObject metaObject) { public void insertFill(MetaObject metaObject) {
// 新增时自动填充 create_time, update_time 字段 // 新增时自动填充 create_time, update_time 字段
this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
// this.strictInsertFill(metaObject, "cjsj", Date.class, new Date());
List<StrictFill> fields = Arrays.asList(
StrictFill.of("createTime", Date.class, new Date()),
StrictFill.of("cjsj", Date.class, new Date())
);
this.strictInsertFill(findTableInfo(metaObject), metaObject, fields);
} }
@Override @Override
public void updateFill(MetaObject metaObject) { public void updateFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "updateTime", Date.class, new Date()); List<StrictFill> fields = Arrays.asList(
StrictFill.of("updateTime", Date.class, new Date()),
StrictFill.of("gxrid", String.class, "1"),
StrictFill.of("gxsj", Date.class, new Date()),
StrictFill.of("gxrxm", String.class, "测试")
);
this.strictInsertFill(findTableInfo(metaObject), metaObject, fields);
// this.strictInsertFill(metaObject, "updateTime", Date.class, new Date());
} }
} }
package com.zksy.szpt.mapper; package com.zksy.szpt.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zksy.szpt.domain.po.XxRwwcqk; import com.zksy.szpt.domain.po.XxRwwcqk;
import com.zksy.szpt.domain.po.XxRwwcqkExample; import com.zksy.szpt.domain.po.XxRwwcqkExample;
import java.util.List; import java.util.List;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
public interface XxRwwcqkMapper { public interface XxRwwcqkMapper extends BaseMapper<XxRwwcqk> {
long countByExample(XxRwwcqkExample example); long countByExample(XxRwwcqkExample example);
int deleteByExample(XxRwwcqkExample example); int deleteByExample(XxRwwcqkExample example);
int deleteByPrimaryKey(Long iid); int deleteByPrimaryKey(Long iid);
int insert(XxRwwcqk record);
int insertSelective(XxRwwcqk record); int insertSelective(XxRwwcqk record);
......
package com.zksy.szpt.service;
import com.zksy.szpt.domain.dto.XxRwwcqkDTO;
import com.zksy.szpt.domain.po.XxRwwcqk;
import com.zksy.szpt.mapper.XxRwwcqkMapper;
import com.zksy.szpt.util.BeanMapperUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class IndexService {
@Resource
private XxRwwcqkMapper xxRwwcqkMapper;
public Integer addXxRwwcqk(XxRwwcqkDTO xxRwwcqkDTO) {
XxRwwcqk xxRwwcqk = BeanMapperUtil.map(xxRwwcqkDTO, XxRwwcqk.class);
return xxRwwcqkMapper.insert(xxRwwcqk);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment