Browse Source

提交本地修改内容

cangku
Houpn 3 years ago
parent
commit
d9cfc3979f
  1. 1
      .gitignore
  2. 3
      hiver-admin/src/main/resources/application.yml
  3. 4
      hiver-admin/src/main/resources/logback.xml
  4. 2
      hiver-core/src/main/java/cc/hiver/core/common/utils/AsyncUtil.java
  5. 4
      hiver-core/src/main/java/cc/hiver/core/common/utils/JasyptUtil.java
  6. 6
      hiver-core/src/main/java/cc/hiver/core/entity/OrderXd.java
  7. 4
      hiver-core/src/main/java/cc/hiver/core/service/OrderService.java
  8. 49
      hiver-core/src/main/java/cc/hiver/core/serviceimpl/OrderServiceImpl.java
  9. 44
      hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/OrderController.java

1
.gitignore

@ -17,3 +17,4 @@ target
build
.idea
.gradle
/hiver-admin/src/main/java/cc/hiver/Test.java

3
hiver-admin/src/main/resources/application.yml

@ -293,6 +293,7 @@ ignored:
- /hiver/iot/sensorHelper/**
- /hiver/goview/visual/**
- /hiver/license/verifyLicense
- /hiver/order/**
# 限流及黑名单不拦截的路径
limitUrls:
- /**/*.js
@ -317,10 +318,10 @@ management:
enabled: false
endpoints:
web:
enabled-by-default: false #关闭所有监控端点
base-path: /hiver/actuator/
exposure:
include: '*'
enabled-by-default: false
# 接口文档增强UI Swagger界面内容配置
knife4j:

4
hiver-admin/src/main/resources/logback.xml

@ -166,7 +166,9 @@
<!-- 默认输出info等级,然后再根据各自的拦截过滤规则去处理 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<!--<appender-ref ref="debug" />-->
<!--
<appender-ref ref="debug" />
-->
<appender-ref ref="info" />
<appender-ref ref="error" />
<!--<appender-ref ref="warn" />-->

2
hiver-core/src/main/java/cc/hiver/core/common/utils/AsyncUtil.java

@ -38,7 +38,7 @@ public class AsyncUtil {
return false;
}
@Scheduled(cron = "0 0 0 * * ?")
//@Scheduled(cron = "0 0 0 * * ?")
public void refresh() {
get = false;
}

4
hiver-core/src/main/java/cc/hiver/core/common/utils/JasyptUtil.java

@ -55,8 +55,8 @@ public class JasyptUtil {
public static void main(String[] args) {
// 加密 若修改了第一个参数加密password记得在配置文件同步修改
System.out.println(encyptPwd("hiver", "1qazxsw2#"));
System.out.println(encyptPwd("hiver", "reddoor168"));
// 解密
System.out.println(decyptPwd("hiver", "9/BNjuqq4ycEMDxTcUmXan6Ss0/WkO6vPOKO5RF7oDn6TblyVB7PprWM6UnBd1Vr"));
System.out.println("-------"+decyptPwd("hiver", "1z9xKRjZhrCWwsQam8n7i125wZyX9ryuajRx6R7YPnznn6jEgv3COmbKIAGJkOld"));
}
}

6
hiver-core/src/main/java/cc/hiver/core/entity/OrderXd.java

@ -152,6 +152,12 @@ public class OrderXd implements Serializable {
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
/**
* 订单区域
*/
@ApiModelProperty("订单所属区域")
@Column(name = "region")
private String region;
/**
* 关联订单工

4
hiver-core/src/main/java/cc/hiver/core/service/OrderService.java

@ -7,6 +7,8 @@ import org.springframework.cache.annotation.CacheConfig;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.util.List;
/**
* 用户接口
*
@ -27,6 +29,8 @@ public interface OrderService extends HiverBaseService<OrderXd, String> {
OrderXd findByOrderId(String orderId);
List<OrderXd> findByCondition(OrderXd order);
Page<OrderXd> findAllByCondition(OrderXd order, SearchVo searchVo, Pageable pageable);

49
hiver-core/src/main/java/cc/hiver/core/serviceimpl/OrderServiceImpl.java

@ -21,7 +21,6 @@ import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* 用户接口实现
@ -162,4 +161,52 @@ public class OrderServiceImpl implements OrderService {
}
@Override
public List<OrderXd> findByCondition(OrderXd order) {
return orderDao.findAll(new Specification<OrderXd>() {
@Nullable
@Override
public Predicate toPredicate(Root<OrderXd> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
Path<String> orderIdField = root.get("orderId");
Path<String> norderLogisticsField = root.get("orderLogistics");
Path<String> kdOrderIdField = root.get("kdOrderId");
Path<String> timeoutField = root.get("timeout");
Path<Integer> orderStatusdField = root.get("orderStatus");
Path<String> orderByWorkerField = root.get("orderByWorker");
Path<Date> createTimeField = root.get("createTime");
Path<String> regionField = root.get("region");
List<Predicate> list = new ArrayList<>();
//区域条件
if (StrUtil.isNotBlank(order.getRegion())) {
list.add(cb.equal(regionField,order.getRegion()));
}
//物流方式限制
if (StrUtil.isNotBlank(order.getOrderLogistics())) {
list.add(cb.equal(norderLogisticsField,order.getOrderLogistics()));
}
//订单工编号应该为空
list.add(cb.or(cb.isNull(orderByWorkerField),cb.equal(orderByWorkerField,order.getOrderByWorker())));
if (StrUtil.isNotBlank(order.getTimeout())) {
list.add(cb.equal(timeoutField, order.getTimeout()));
}
// 状态
if (order.getOrderStatus() != null) {
list.add(cb.equal(orderStatusdField, order.getOrderStatus()));
}
// 数据权限
Predicate[] arr = new Predicate[list.size()];
cq.where(list.toArray(arr));
return null;
}
});
}
}

44
hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/OrderController.java

@ -1,9 +1,6 @@
package cc.hiver.base.controller.manage;
import cc.hiver.base.async.AddMessage;
import cc.hiver.core.common.annotation.ClearAndReloadCache;
import cc.hiver.core.common.constant.CommonConstant;
import cc.hiver.core.common.constant.UserConstant;
import cc.hiver.core.common.redis.RedisTemplateHelper;
import cc.hiver.core.common.utils.*;
import cc.hiver.core.common.vo.PageVo;
@ -12,32 +9,21 @@ import cc.hiver.core.common.vo.SearchVo;
import cc.hiver.core.dao.mapper.DeleteMapper;
import cc.hiver.core.entity.*;
import cc.hiver.core.service.*;
import cc.hiver.core.service.mybatis.IUserRoleService;
import cc.hiver.core.vo.RoleDTO;
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.hibernate.annotations.Cache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.validation.Valid;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 用户管理接口
@ -57,6 +43,9 @@ public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private WorkerService workerService;
@Autowired
private DeleteMapper deleteMapper;
@ -75,7 +64,7 @@ public class OrderController {
*/
@RequestMapping(value = "/getByCondition", method = RequestMethod.GET)
@ApiOperation(value = "多条件分页获取订单列表")
@Cacheable(cacheNames = "get method")
//@Cacheable(cacheNames = ORDER)
public Result<Page<OrderXd>> getByCondition(OrderXd order,
SearchVo searchVo,
PageVo pageVo) {
@ -123,19 +112,18 @@ public class OrderController {
* 2.正常状态下判定当前抢单工押金余额是否充足不足时需要将当前扛包工状态自动修正为不可接单状态同时当前订单无法抢购
* 3.正常抢单情况下需要在redis中设置抢单后的剩余押金金额要存在抢单锁机制实时更新余额
*
* 计划暂定使用延时双删策略尽量保证最终一致性但不是强一致性
* 计划暂定使用延时双删策略尽量保证最终一致性但不是强一致性
* 先进行缓存清除再执行update最后延迟N秒再执行缓存清除
* 延迟N秒的时间要大于一次写操作的时间一般为3-5秒
* 原因如果延迟时间小于写入redis的时间会导致请求1清除了缓存但是请求2缓存还未写入的尴尬
* ps:一般写入的时间会远小于5秒
* 抢单过程需要进行分布式锁ID进行锁定用于抢单上述一是为了保证数据的最终一致性
*
*/
@RequestMapping(value = "/rush/order/{orderId}", method = RequestMethod.POST)
@ApiOperation(value = "抢单接口", notes = "需要通过下单编号获取订单信息后进行绑定")
@ClearAndReloadCache(name = ORDER)
public Result rush(OrderXd u,
@RequestParam(required = false) String[] roleIds) {
public Result rush(OrderXd u) {
orderService.update(u);
@ -178,4 +166,22 @@ public class OrderController {
return new ResultUtil<Page<OrderXd>>().setData(page);
}
/**
* 待抢单的订单类型
*
* 该方法用于返回app端要抢单的展示列表信息
* 1.需要根据订单工所在区域进行查询显示是否为所在区域订单信息
* 2.显示的订单信息为未被抢单的订单信息
*
* key值定义暂定以区域为类型进行查询
*
* */
@RequestMapping(value = "/app/getAll", method = RequestMethod.POST)
@ApiOperation(value = "获取全部订单列表")
@Cacheable(value="AllOrder",key="'Pending'")
public Result<List<OrderXd>> getAll(@RequestBody OrderXd orderxd) {
List<OrderXd> list = orderService.findByCondition(orderxd);
return new ResultUtil<List<OrderXd>>().setData(list);
}
}

Loading…
Cancel
Save