diff --git a/.gitignore b/.gitignore index d05cdd4d..f1b8fab9 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ target build .idea .gradle +/hiver-admin/src/main/java/cc/hiver/Test.java diff --git a/hiver-admin/src/main/resources/application.yml b/hiver-admin/src/main/resources/application.yml index c0714115..1d726d8f 100644 --- a/hiver-admin/src/main/resources/application.yml +++ b/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: diff --git a/hiver-admin/src/main/resources/logback.xml b/hiver-admin/src/main/resources/logback.xml index c0480f43..1c31c645 100644 --- a/hiver-admin/src/main/resources/logback.xml +++ b/hiver-admin/src/main/resources/logback.xml @@ -166,7 +166,9 @@ - + diff --git a/hiver-core/src/main/java/cc/hiver/core/common/utils/AsyncUtil.java b/hiver-core/src/main/java/cc/hiver/core/common/utils/AsyncUtil.java index cc96530e..3b89dc2f 100644 --- a/hiver-core/src/main/java/cc/hiver/core/common/utils/AsyncUtil.java +++ b/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; } diff --git a/hiver-core/src/main/java/cc/hiver/core/common/utils/JasyptUtil.java b/hiver-core/src/main/java/cc/hiver/core/common/utils/JasyptUtil.java index 27156aa1..5573f197 100644 --- a/hiver-core/src/main/java/cc/hiver/core/common/utils/JasyptUtil.java +++ b/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")); } } diff --git a/hiver-core/src/main/java/cc/hiver/core/entity/OrderXd.java b/hiver-core/src/main/java/cc/hiver/core/entity/OrderXd.java index 7c4dad8f..1e4285c2 100644 --- a/hiver-core/src/main/java/cc/hiver/core/entity/OrderXd.java +++ b/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; /** * 关联订单工 diff --git a/hiver-core/src/main/java/cc/hiver/core/service/OrderService.java b/hiver-core/src/main/java/cc/hiver/core/service/OrderService.java index 5c5b37fd..a72d3941 100644 --- a/hiver-core/src/main/java/cc/hiver/core/service/OrderService.java +++ b/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 findByOrderId(String orderId); + List findByCondition(OrderXd order); + Page findAllByCondition(OrderXd order, SearchVo searchVo, Pageable pageable); diff --git a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/OrderServiceImpl.java b/hiver-core/src/main/java/cc/hiver/core/serviceimpl/OrderServiceImpl.java index b109b8cc..c0fa54b4 100644 --- a/hiver-core/src/main/java/cc/hiver/core/serviceimpl/OrderServiceImpl.java +++ b/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 findByCondition(OrderXd order) { + return orderDao.findAll(new Specification() { + @Nullable + @Override + public Predicate toPredicate(Root root, CriteriaQuery cq, CriteriaBuilder cb) { + Path orderIdField = root.get("orderId"); + Path norderLogisticsField = root.get("orderLogistics"); + Path kdOrderIdField = root.get("kdOrderId"); + Path timeoutField = root.get("timeout"); + Path orderStatusdField = root.get("orderStatus"); + Path orderByWorkerField = root.get("orderByWorker"); + Path createTimeField = root.get("createTime"); + Path regionField = root.get("region"); + + List 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; + } + }); + } + + } diff --git a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/OrderController.java b/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/OrderController.java index fb1fccd2..4da79655 100644 --- a/hiver-modules/hiver-base/src/main/java/cc/hiver/base/controller/manage/OrderController.java +++ b/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> 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>().setData(page); } + + /** + * 待抢单的订单类型 + * + * 该方法用于返回app端要抢单的展示列表信息 + * 1.需要根据订单工所在区域进行查询显示是否为所在区域订单信息 + * 2.显示的订单信息为未被抢单的订单信息 + * + * key值定义暂定以区域为类型进行查询 + * + * */ + @RequestMapping(value = "/app/getAll", method = RequestMethod.POST) + @ApiOperation(value = "获取全部订单列表") + @Cacheable(value="AllOrder",key="'Pending'") + public Result> getAll(@RequestBody OrderXd orderxd) { + List list = orderService.findByCondition(orderxd); + return new ResultUtil>().setData(list); + } }