Browse Source

提交登录以后绑定设备,同时下单时进行消息推送,另外提交用户token验证,修改订单状态

cangku
Houpn 3 years ago
parent
commit
d758f7d295
  1. 5
      hiver-core/src/main/java/cc/hiver/core/common/constant/SecurityConstant.java
  2. 50
      hiver-core/src/main/java/cc/hiver/core/config/security/jwt/TokenAuthenticationFilter.java
  3. 2
      hiver-core/src/main/java/cc/hiver/core/dao/WorkerDao.java
  4. 12
      hiver-core/src/main/java/cc/hiver/core/entity/Worker.java
  5. 3
      hiver-core/src/main/java/cc/hiver/core/service/WorkerService.java
  6. 5
      hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java
  7. 37
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/OrderController.java
  8. 11
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java
  9. 18
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerAuthController.java
  10. 28
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerController.java
  11. 3
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Recharge.java
  12. 41
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/OrderQueryVO.java
  13. 2
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SendMessageService.java
  14. 12
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SendMessageServiceImpl.java

5
hiver-core/src/main/java/cc/hiver/core/common/constant/SecurityConstant.java

@ -97,4 +97,9 @@ public interface SecurityConstant {
* 运送员交互token前缀key
*/
String TOKEN_WORKER_PRE = "HIVER_TOKEN_WORKER_PRE:";
/**
* appToken参数头
*/
String APP_YS_HEADER = "appYSToken";
}

50
hiver-core/src/main/java/cc/hiver/core/config/security/jwt/TokenAuthenticationFilter.java

@ -6,6 +6,7 @@ import cc.hiver.core.common.utils.ResponseUtil;
import cc.hiver.core.common.utils.SecurityUtil;
import cc.hiver.core.common.vo.TokenMember;
import cc.hiver.core.common.vo.TokenUser;
import cc.hiver.core.common.vo.TokenWorker;
import cc.hiver.core.config.properties.HiverAppTokenProperties;
import cc.hiver.core.config.properties.HiverTokenProperties;
import cn.hutool.core.util.StrUtil;
@ -73,8 +74,12 @@ public class TokenAuthenticationFilter extends BasicAuthenticationFilter {
if (StrUtil.isBlank(appHeader)) {
appHeader = request.getParameter(SecurityConstant.APP_HEADER);
}
String appYSHeader = request.getHeader(SecurityConstant.APP_YS_HEADER);
if (StrUtil.isBlank(appYSHeader)) {
appYSHeader = request.getParameter(SecurityConstant.APP_YS_HEADER);
}
Boolean notValid = (StrUtil.isBlank(header) || (!tokenProperties.getRedis() && !header.startsWith(SecurityConstant.TOKEN_SPLIT)))
&& StrUtil.isBlank(appHeader);
&& StrUtil.isBlank(appHeader) && StrUtil.isBlank(appYSHeader);
if (notValid) {
chain.doFilter(request, response);
return;
@ -83,8 +88,10 @@ public class TokenAuthenticationFilter extends BasicAuthenticationFilter {
UsernamePasswordAuthenticationToken authentication = null;
if (StrUtil.isNotBlank(header)) {
authentication = getAuthentication(header, response);
} else {
} else if(StrUtil.isNotBlank(appHeader)){
authentication = getAppAuthentication(appHeader, response);
} else {
authentication = getAppYSAuthentication(appYSHeader, response);
}
if (authentication == null) {
return;
@ -194,4 +201,43 @@ public class TokenAuthenticationFilter extends BasicAuthenticationFilter {
}
return null;
}
private UsernamePasswordAuthenticationToken getAppYSAuthentication(String appYSHeader, HttpServletResponse response) {
TokenWorker tokenWorker = null;
List<GrantedAuthority> authorities = new ArrayList<>();
if (appTokenProperties.getRedis()) {
// redis
String v = redisTemplate.get(SecurityConstant.TOKEN_WORKER_PRE + appYSHeader);
if (StrUtil.isBlank(v)) {
ResponseUtil.out(response, ResponseUtil.resultMap(false, 401, "扛包工登录已失效,请重新登录"));
return null;
}
tokenWorker = new Gson().fromJson(v, TokenWorker.class);
// 权限
// 重新设置失效时间
redisTemplate.set(SecurityConstant.WORKER_TOKEN + tokenWorker.getWorkerName() + ":" + tokenWorker.getPlatform(), appYSHeader, appTokenProperties.getTokenExpireTime(), TimeUnit.DAYS);
redisTemplate.set(SecurityConstant.TOKEN_WORKER_PRE + appYSHeader, v, appTokenProperties.getTokenExpireTime(), TimeUnit.DAYS);
} else {
// JWT
try {
// 解析token
Claims claims = Jwts.parser()
.setSigningKey(SecurityConstant.JWT_SIGN_KEY)
.parseClaimsJws(appYSHeader.replace(SecurityConstant.TOKEN_SPLIT, ""))
.getBody();
// 获取用户
tokenWorker = new Gson().fromJson(claims.getSubject(), TokenWorker.class);
} catch (ExpiredJwtException e) {
ResponseUtil.out(response, ResponseUtil.resultMap(false, 401, "登录已失效,请重新登录"));
} catch (Exception e) {
log.error(e.toString());
ResponseUtil.out(response, ResponseUtil.resultMap(false, 500, "解析token错误"));
}
}
if (tokenWorker != null && StrUtil.isNotBlank(tokenWorker.getWorkerName())) {
return new UsernamePasswordAuthenticationToken(tokenWorker, null, null);
}
return null;
}
}

2
hiver-core/src/main/java/cc/hiver/core/dao/WorkerDao.java

@ -6,4 +6,6 @@ import cc.hiver.core.entity.Worker;
public interface WorkerDao extends HiverBaseDao<Worker, String> {
Worker findByMobile(String mobile);
Worker findByWorkerId(String workerId);
}

12
hiver-core/src/main/java/cc/hiver/core/entity/Worker.java

@ -21,6 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Data
@ -64,14 +65,14 @@ public class Worker implements Serializable {
*/
@Column(name = "depo_num")
@ApiModelProperty("缴押金总额")
private Integer depoNum = 0;
private BigDecimal depoNum = new BigDecimal(0);
/**
* 押金余额
*/
@ApiModelProperty("押金余额")
@Column(name = "depo_bal")
private Integer depoBal = 0;
private BigDecimal depoBal = new BigDecimal(0);
/**
* 接单状态 1-可抢单 2-不可接单(押金不足状态) 3-已禁用(手工预置状态)
@ -155,4 +156,11 @@ public class Worker implements Serializable {
@Column(name = "client_Id")
private String clientId;
/**
* 扛包扣减固定金额
*/
@ApiModelProperty("扛包扣减固定金额")
@Column(name = "fixed_amount")
private BigDecimal fixedAmount = new BigDecimal(0);
}

3
hiver-core/src/main/java/cc/hiver/core/service/WorkerService.java

@ -27,4 +27,7 @@ public interface WorkerService extends HiverBaseService<Worker, String> {
Worker findByMobile(String mobile);
Worker findByWorkerId(String workerId);
}

5
hiver-core/src/main/java/cc/hiver/core/serviceimpl/WorkerServiceImpl.java

@ -99,4 +99,9 @@ public class WorkerServiceImpl implements WorkerService {
Worker worker = workerDao.findByMobile(mobile);
return worker;
}
@Override
public Worker findByWorkerId(String orderId) {
return workerDao.findByWorkerId(orderId);
}
}

37
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/OrderController.java

@ -12,8 +12,11 @@ import cc.hiver.core.common.vo.SearchVo;
import cc.hiver.core.entity.Worker;
import cc.hiver.core.service.WorkerService;
import cc.hiver.mall.entity.OrderXd;
import cc.hiver.mall.entity.Sale;
import cc.hiver.mall.pojo.vo.OrderQueryVO;
import cc.hiver.mall.pojo.vo.OrderVO;
import cc.hiver.mall.service.OrderService;
import cc.hiver.mall.service.mybatis.SaleService;
import cn.hutool.core.date.DateTime;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -28,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.List;
/**
@ -51,6 +55,8 @@ public class OrderController {
@Autowired
private WorkerService workerService;
@Autowired
private SaleService saleService;
@Autowired
private RedisTemplateHelper redisTemplate;
@ -227,4 +233,35 @@ public class OrderController {
List<OrderXd> list = orderService.findByCondition(orderxd);
return new ResultUtil<List<OrderXd>>().setData(list);
}
@RequestMapping(value = "/app/modifyOrder", method = RequestMethod.POST)
@ApiOperation(value = "运送更新订单状态")
public Result modify(@RequestBody OrderQueryVO orderQueryVO) {
int orderStatus = orderQueryVO.getOrderStatus();
//更新抢单表状态
if(orderStatus == 4){
OrderXd orderXd = orderService.findByOrderId(orderQueryVO.getOrderId());
orderXd.setOrderStatus(orderStatus);
orderService.update(orderXd);
} else if (orderStatus == 5) {
//已完成的话,更新订单表和抢单表状态,扣减金额
OrderXd orderXd = orderService.findByOrderId(orderQueryVO.getOrderId());
orderXd.setOrderStatus(orderStatus);
orderService.update(orderXd);
Sale sale = saleService.getById(orderQueryVO.getOrderId());
sale.setStatus(String.valueOf(orderStatus));
saleService.saveOrUpdate(sale);
Worker worker = workerService.findById(orderQueryVO.getOrderByWorker());
BigDecimal fixedAmount = worker.getFixedAmount();
BigDecimal depoBal = worker.getDepoBal();
worker.setDepoBal(depoBal.subtract(fixedAmount));
workerService.update(worker);
}else{
return ResultUtil.error("请核实当前订单状态,操作有误");
}
// 手动更新缓存
//redisTemplate.delete(WORKER + worker.getWorkerId());
return ResultUtil.success("更新操作成功");
}
}

11
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/SaleController.java

@ -13,6 +13,7 @@ import cc.hiver.mall.pojo.vo.SaleVO;
import cc.hiver.mall.service.*;
import cc.hiver.mall.service.mybatis.SaleDetailService;
import cc.hiver.mall.service.mybatis.SaleService;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -69,15 +70,15 @@ public class SaleController {
//3.处理抢单模块
rushOrderService.handleRushOrder(saleDTO);
//4.消息推送模块
sendMessageService.handleSendAppMessage();
if(StrUtil.isNotEmpty(saleDTO.getOrderByWorker()))
sendMessageService.handleSendAppMessage(saleDTO.getOrderByWorker());
return ResultUtil.success("下单成功");
}
@RequestMapping(value = "/edit", method = RequestMethod.POST)
@ApiOperation(value = "根据id修改货品属性")
public Result edit(SaleQueryVO saleQueryVO) {
public Result edit(@RequestBody SaleQueryVO saleQueryVO) {
Sale sale = saleQueryVO.getSale();
List<SaleDetail> saleDetailList = saleQueryVO.getSaleDetailList();
boolean result = saleService.updateById(sale);
@ -94,7 +95,7 @@ public class SaleController {
@RequestMapping(value = "/delById", method = RequestMethod.POST)
@ApiOperation(value = "根据id删除订单")
public Result delete(Sale sale) {
public Result delete(@RequestBody Sale sale) {
boolean result = saleService.removeById(sale);
if(result) {
QueryWrapper<SaleDetail> deleteWrapper = new QueryWrapper<>();
@ -109,7 +110,7 @@ public class SaleController {
@RequestMapping(value = "/list", method = RequestMethod.POST)
@ApiOperation(value = "根据条件获得分页")
public Result<List<Sale>> queryAll(SaleVO saleVO) {
public Result<List<Sale>> queryAll(@RequestBody SaleVO saleVO) {
QueryWrapper<Sale> queryWrapper = new QueryWrapper<>();
if (!ObjectUtils.isEmpty(saleVO)){
if (ObjectUtils.isEmpty(saleVO.getPayStatus())) queryWrapper.eq("pay_status",saleVO.getPayStatus());

18
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerAuthController.java

@ -10,29 +10,22 @@ import cc.hiver.core.common.exception.HiverException;
import cc.hiver.core.common.redis.RedisTemplateHelper;
import cc.hiver.core.common.sms.SmsUtil;
import cc.hiver.core.common.utils.*;
import cc.hiver.core.common.vo.PageVo;
import cc.hiver.core.common.vo.Result;
import cc.hiver.core.common.vo.SearchVo;
import cc.hiver.core.entity.Worker;
import cc.hiver.core.service.WorkerService;
import cc.hiver.core.vo.WorkerDetailVO;
import cc.hiver.mall.common.constant.WorkerConstant;
import cc.hiver.mall.entity.Recharge;
import cc.hiver.mall.service.RechargeService;
import cn.hutool.core.util.StrUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.data.domain.Page;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.util.concurrent.TimeUnit;
/**
@ -66,7 +59,7 @@ public class WorkerAuthController {
@ApiOperation(value = "app抢单登录接口")
public Result login(@ApiParam("唯一id标识") @PathVariable String workerId, HttpSession httpSession) {
Worker worker = workerService.get(workerId);
Worker worker = workerService.findByWorkerId(workerId);
//这儿暂时有bug,启用的时候其实需要判定原状态是启用还是不可接单状态,需要进行逻辑判断
worker.setWorkerStatus(WorkerConstant.WORKER_STATUS_NORMAL);
workerService.update(worker);
@ -125,4 +118,13 @@ public class WorkerAuthController {
return ResultUtil.success("发送短信验证码成功");
}
}
@RequestMapping(value = "/app/info/{workerId}", method = RequestMethod.POST)
@ApiOperation(value = "app端查询订单工详情页")
public Result disable(@ApiParam("用户唯一id标识") @PathVariable String workerId) {
Worker worker = workerService.get(workerId);
// 手动更新缓存
return ResultUtil.data(worker);
}
}

28
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/WorkerController.java

@ -1,24 +1,15 @@
package cc.hiver.mall.controller;
import cc.hiver.core.common.annotation.RateLimiter;
import cc.hiver.core.common.annotation.SystemLog;
import cc.hiver.core.common.constant.CommonConstant;
import cc.hiver.core.common.constant.MessageConstant;
import cc.hiver.core.common.constant.SettingConstant;
import cc.hiver.core.common.enums.LogType;
import cc.hiver.core.common.exception.HiverException;
import cc.hiver.core.common.sms.SmsUtil;
import cc.hiver.core.common.utils.*;
import cc.hiver.core.entity.Worker;
import cc.hiver.core.service.WorkerService;
import cc.hiver.mall.common.constant.WorkerConstant;
import cc.hiver.core.common.redis.RedisTemplateHelper;
import cc.hiver.core.common.vo.PageVo;
import cc.hiver.core.common.vo.Result;
import cc.hiver.core.common.vo.SearchVo;
import cc.hiver.mall.entity.Recharge;
import cc.hiver.mall.service.RechargeService;
import cn.hutool.core.util.StrUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -29,11 +20,8 @@ import org.springframework.data.domain.Page;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.math.BigDecimal;
/**
* 订单工管理接口
@ -90,8 +78,8 @@ public class WorkerController {
rechargeService.save(recharge);
//更新余额,重置当次应缴
u.setDepoBal(u.getDepoBal() + u.getDepoNum());
u.setDepoNum(0);
u.setDepoBal(u.getDepoBal().add(u.getDepoNum()));
u.setDepoNum(new BigDecimal(0));
workerService.save(u);
@ -109,7 +97,7 @@ public class WorkerController {
public Result edit(Worker u,
@RequestParam(required = false) String[] roleIds) {
//修改抢单工信息时如涉及到充值押金情况,需要更新余额且重置应缴
if(u.getDepoNum() != null && u.getDepoNum()>0){
if(u.getDepoNum() != null && u.getDepoNum().compareTo(BigDecimal.ZERO)>0){
Recharge recharge = new Recharge();
@ -121,9 +109,9 @@ public class WorkerController {
rechargeService.save(recharge);
Worker worker = workerService.findById(u.getWorkerId());
u.setDepoBal(worker.getDepoBal() + u.getDepoNum());
u.setDepoNum(0);
Worker worker = workerService.get(u.getWorkerId());
u.setDepoBal(worker.getDepoBal().add(u.getDepoNum()));
u.setDepoNum(new BigDecimal(0));
}
workerService.update(u);

3
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/entity/Recharge.java

@ -21,6 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@Data
@ -71,7 +72,7 @@ public class Recharge implements Serializable {
*/
@Column(name = "recharge_num")
@ApiModelProperty("当次缴纳")
private Integer rechargeNum = 0;
private BigDecimal rechargeNum = new BigDecimal(0);

41
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/pojo/vo/OrderQueryVO.java

@ -0,0 +1,41 @@
package cc.hiver.mall.pojo.vo;
import cc.hiver.core.common.utils.SnowFlakeUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import java.io.Serializable;
@Data
@ApiModel(value = "下单")
public class OrderQueryVO implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("订单号,默认前缀为XD")
private String orderId;
/**
* 物流方式
*/
@ApiModelProperty("物流方式 1-物流 2-自提 3-快递 4-拼单")
private String orderLogistics;
/**
* 订单状态
*/
@ApiModelProperty("订单状态 1-拣货中 2-已预定 3-已作废 4-已取货 5-已送达")
private Integer orderStatus;
/**
* 抢单工编号
*/
@ApiModelProperty("抢单工编号")
private String orderByWorker;
}

2
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/SendMessageService.java

@ -2,7 +2,7 @@ package cc.hiver.mall.service;
public interface SendMessageService {
void handleSendAppMessage();
void handleSendAppMessage(String workerId);
void handleSendWXMessage();

12
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/SendMessageServiceImpl.java

@ -1,5 +1,7 @@
package cc.hiver.mall.serviceimpl;
import cc.hiver.core.entity.Worker;
import cc.hiver.core.service.WorkerService;
import cc.hiver.core.serviceimpl.JPushServiceImpl;
import cc.hiver.mall.service.SendMessageService;
import org.springframework.beans.factory.annotation.Autowired;
@ -11,10 +13,14 @@ public class SendMessageServiceImpl implements SendMessageService {
@Autowired
JPushServiceImpl jPushService;
@Autowired
WorkerService workerService;
@Override
public void handleSendAppMessage() {
String registrationId = "";
String message = "宝贝儿,来订单了";
public void handleSendAppMessage(String workerId) {
Worker worker = workerService.findById(workerId);
String registrationId = worker.getClientId();
String message = "您有一笔新的订单,请注意查看";
jPushService.sendPushNotification(registrationId, message);
}

Loading…
Cancel
Save