优化订单查询

This commit is contained in:
weicw
2023-08-08 17:20:57 +08:00
parent 2ca82fedb1
commit 44cfec9028
9 changed files with 483 additions and 294 deletions

View File

@@ -90,6 +90,8 @@ public class Equipment implements Serializable {
@ApiModelProperty(value = "用户ID")
private Integer userId;
@ApiModelProperty(value = "投资人ID")
private Integer touziUserId;
@ApiModelProperty(value = "排序(数字越小越靠前)")
private Integer sortNumber;
@@ -145,4 +147,8 @@ public class Equipment implements Serializable {
@ApiModelProperty(value = "绑定的用户")
@TableField(exist = false)
private User user;
@ApiModelProperty(value = "绑定的用户")
@TableField(exist = false)
private User touziUser;
}

View File

@@ -0,0 +1,141 @@
package com.gxwebsoft.apps.task;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.annotation.SqlParser;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gxwebsoft.apps.entity.Equipment;
import com.gxwebsoft.apps.service.EquipmentGoodsService;
import com.gxwebsoft.apps.service.EquipmentService;
import com.gxwebsoft.common.core.config.MybatisPlusConfig;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.common.system.service.UserService;
import com.gxwebsoft.love.entity.UserPlanLog;
import com.gxwebsoft.love.param.UserPlanLogParam;
import com.gxwebsoft.shop.entity.Order;
import com.gxwebsoft.shop.param.OrderParam;
import com.gxwebsoft.shop.service.OrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import static com.gxwebsoft.common.core.constants.OrderConstants.*;
/**
* 定时任务:订单处理
*/
@Component
@Slf4j
public class OrderTask {
@Resource
private OrderService orderService;
@Resource
private EquipmentService equipmentService;
@Resource
private EquipmentGoodsService goodsService;
@Resource
private UserService userService;
/**
* 删除30分钟未下单的订单
*/
@Scheduled(cron="0 0/30 * * * ? ")
public void removeTimeoutOrder() {
Date newDate = DateUtil.offset(DateUtil.date(), DateField.MINUTE, -30);
LambdaQueryWrapper<Order> wrapper = Wrappers.lambdaQuery(Order.class)
.eq(Order::getPayStatus, PAY_STATUS_NO_PAY)
.lt(Order::getCreateTime, newDate);
boolean remove = orderService.remove(wrapper);
}
/**
* 计算分润
*/
@Scheduled(cron="0 0/30 * * * ? ")
@Transactional
public void CalcProfit() {
log.info("开始计算分润");
// 查询所有未结算订单
LambdaQueryWrapper<Order> wrapper = Wrappers.lambdaQuery(Order.class)
.eq(Order::getIsSettled, ORDER_SETTLED_NO)
.eq(Order::getPayStatus, PAY_STATUS_SUCCESS)
.eq(Order::getOrderStatus, ORDER_STATUS_COMPLETED);
List<Order> orderList = orderService.list(wrapper);
// 查询所有关联的设备
Set<Integer> equipmentIds = new HashSet<>();
Set<String> tuijianUserPhones = new HashSet<>();
for (Order order : orderList) {
equipmentIds.add(order.getEquipmentId());
if(order.getDealerPhone() != null){
tuijianUserPhones.add(order.getDealerPhone());
}
}
List<Equipment> equipmentList = equipmentService.list(Wrappers.lambdaQuery(Equipment.class).in(Equipment::getEquipmentId, equipmentIds));
Map<Integer, Equipment> equipmentMap = new HashMap<>();
Set<Integer> touziUserIds = new HashSet<>();
for (Equipment equipment : equipmentList) {
equipmentMap.put(equipment.getEquipmentId(),equipment);
if(equipment.getTouziUserId() != null) {
touziUserIds.add(equipment.getTouziUserId());
}
}
// 查询所有投资人
Map<Integer, User> touziUserMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(touziUserIds)){
List<User> list = userService.list(Wrappers.lambdaQuery(User.class).in(User::getUserId, touziUserIds));
for (User user : list) {
touziUserMap.put(user.getUserId(), user);
}
}
// 查询所有推荐人
Map<String, User> tuijianUserMap = new HashMap<>();
if(CollectionUtils.isNotEmpty(tuijianUserPhones)){
List<User> tuijianUserList = userService.list(Wrappers.lambdaQuery(User.class).in(User::getPhone, tuijianUserPhones));
for (User user : tuijianUserList) {
tuijianUserMap.put(user.getPhone(), user);
}
}
// 开始结算
for (Order order : orderList) {
// 计算投资人收益
Equipment equipment = equipmentMap.get(order.getEquipment());
User touziUser = touziUserMap.get(equipment.getTouziUserId());
if(touziUser != null){
}
//获取推荐人身份、 计算推荐人收益
User tuijianUser = tuijianUserMap.get(order.getDealerPhone());
if(tuijianUser != null){
}
// 计算门店收益
// 计算区域经理收益
System.out.println(equipment);
}
}
}

View File

@@ -38,9 +38,10 @@ public class MybatisPlusConfig {
// String device_id = request.getHeader("device-id");
// System.out.println("device_id = " + device_id);
// 从设备请求头拿ID
try {
String DeviceID = request.getHeader("Device-ID");
if (StrUtil.isNotBlank(DeviceID)) {
return new LongValue(10048);
return new LongValue(6);
}
// 从请求头拿ID
final String tenantId = request.getHeader("tenantId");
@@ -48,6 +49,11 @@ public class MybatisPlusConfig {
return new LongValue(tenantId);
}
return getLoginUserTenantId();
}catch (Exception e){
return new LongValue(6);
}
}
@Override

View File

@@ -19,6 +19,8 @@ public class OrderConstants {
// 收货状态
public static final Integer RECEIPT_STATUS_NO = 10; // 未收货
public static final Integer RECEIPT_STATUS_YES = 20; // 已收货
public static final Integer RECEIPT_STATUS_APPLY = 21; // 申请
public static final Integer RECEIPT_STATUS_reject = 22; // 已驳回退租
public static final Integer RECEIPT_STATUS_RETURN = 30; // 已退货
// 订单状态
@@ -33,5 +35,4 @@ public class OrderConstants {
}

View File

@@ -67,7 +67,7 @@ public class AlipayConfigUtil {
*/
public JSONObject payment(Integer tenantId) {
System.out.println("tenantId = " + tenantId);
String key = "cache".concat(tenantId.toString()).concat(":setting:payment");
String key = "setting:payment:" + tenantId;
System.out.println("key = " + key);
String cache = stringRedisTemplate.opsForValue().get(key);
if (cache == null) {

View File

@@ -177,7 +177,7 @@ public class OpenEquipmentController extends BaseController {
}
// 生成支付宝小程序码
private String createQrcode(Equipment equipment) throws AlipayApiException{
private String createQrcode(Equipment equipment) throws AlipayApiException {
// 实例化客户端
DefaultAlipayClient alipayClient = alipayConfig.alipayClient(getTenantId());
@@ -211,10 +211,10 @@ public class OpenEquipmentController extends BaseController {
final String equipmentCode = equipment.getEquipmentCode();
final Order order = orderService.getById(orderId);
Equipment one = equipmentService.getByEquipmentCode(equipmentCode);
if(one == null){
if (one == null) {
return fail("设备不存在");
}
if(!one.getUserId().equals(0)){
if (!one.getUserId().equals(0)) {
return fail("该设备已被绑定");
}
// 绑定设备
@@ -261,10 +261,10 @@ public class OpenEquipmentController extends BaseController {
Equipment old = equipmentService.getById(oid);
// 订单信息
Order order = orderService.getById(orderId);
if(one == null){
if (one == null) {
return fail("设备不存在");
}
if(!one.getUserId().equals(0)){
if (!one.getUserId().equals(0)) {
return fail("该设备已被绑定");
}
@@ -306,7 +306,7 @@ public class OpenEquipmentController extends BaseController {
@ApiOperation("重置")
@PostMapping("/receipt")
public ApiResult<?> receipt(@RequestBody Order order){
public ApiResult<?> receipt(@RequestBody Order order) {
// 验证签名
isCheckSign();
orderService.updateById(order);
@@ -315,14 +315,19 @@ public class OpenEquipmentController extends BaseController {
@ApiModelProperty("退租")
@PostMapping("/rentingOut")
public ApiResult<?> rentingOut(@RequestBody Order order){
public ApiResult<?> rentingOut(@RequestBody Order order) {
// 验证签名
isCheckSign();
final int count = orderRefundService.count(new LambdaQueryWrapper<OrderRefund>().eq(OrderRefund::getOrderId, order.getOrderId()));
if(count > 0){
OrderRefund refund = orderRefundService.getOne(new LambdaQueryWrapper<OrderRefund>()
.eq(OrderRefund::getOrderId, order.getOrderId()));
if (refund != null) {
if (refund.getAuditStatus() != 30) {
return fail("申请成功,请等待客服人员审核");
}
final OrderRefund refund = new OrderRefund();
}else {
refund = new OrderRefund();
refund.setOrderId(order.getOrderId());
refund.setOrderGoodsId(order.getGoodsId());
refund.setUserId(getLoginUserId());
@@ -330,10 +335,15 @@ public class OpenEquipmentController extends BaseController {
refund.setApplyDesc("申请退租");
refund.setRefundMoney(new BigDecimal(0));
refund.setMerchantCode(order.getMerchantCode());
if (orderRefundService.save(refund)) {
return success("申请成功,请等待客服人员审核");
}
return fail("退租失败");
refund.setAuditStatus(10);
orderRefundService.saveOrUpdate(refund);
// 更新订单状态
Order updateOrder = new Order();
updateOrder.setReceiptStatus(RECEIPT_STATUS_APPLY);
updateOrder.setOrderId(order.getOrderId());
orderService.updateById(updateOrder);
return success("申请成功,请等待客服人员审核");
}
// @ApiModelProperty("退租")

View File

@@ -5,7 +5,10 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gxwebsoft.apps.entity.BcAgent;
import com.gxwebsoft.apps.entity.Equipment;
import com.gxwebsoft.apps.entity.EquipmentGoods;
import com.gxwebsoft.apps.entity.EquipmentOrderGoods;
import com.gxwebsoft.apps.param.BcAgentParam;
@@ -18,6 +21,7 @@ import com.gxwebsoft.common.core.web.*;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.common.system.service.UserService;
import com.gxwebsoft.shop.entity.Order;
import com.gxwebsoft.shop.entity.OrderGoods;
import com.gxwebsoft.shop.entity.UserReferee;
import com.gxwebsoft.shop.param.OrderGoodsParam;
import com.gxwebsoft.shop.param.OrderParam;
@@ -34,7 +38,9 @@ import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@@ -78,22 +84,38 @@ public class OrderController extends BaseController {
param.setMerchantCode(getMerchantCode());
}
// 云芯威项目查询关联设备
if(getTenantId().equals(6)){
if (getTenantId().equals(6)) {
// 查询订单的关联商品
List<Order> list = orderService.listRel(param);
Set<Integer> equipmentIds = new HashSet<>();
Set<Integer> orderIds = new HashSet<>();
for (Order order : list) {
equipmentIds.add(order.getEquipmentId());
orderIds.add(order.getOrderId());
}
List<Equipment> equipmentList = equipmentService.list(Wrappers.lambdaQuery(Equipment.class).in(Equipment::getEquipmentId, equipmentIds));
List<EquipmentOrderGoods> equipmentOrderGoodsList = equipmentOrderGoodsService.list(Wrappers.lambdaQuery(EquipmentOrderGoods.class).in(EquipmentOrderGoods::getOrderId, orderIds));
Map<Integer, List<Equipment>> equipmentCollect = equipmentList.stream().collect(Collectors.groupingBy(Equipment::getEquipmentId));
Map<Integer, List<EquipmentOrderGoods>> equipmentOrderGoodsCollect = equipmentOrderGoodsList.stream().collect(Collectors.groupingBy(EquipmentOrderGoods::getOrderId));
// 查询订单的设备
for (Order order : list) {
final OrderGoodsParam orderGoodsParam = new OrderGoodsParam();
orderGoodsParam.setOrderId(order.getOrderId());
order.setGoodsList(orderGoodsService.listRel(orderGoodsParam));
order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper<EquipmentOrderGoods>().eq(EquipmentOrderGoods::getOrderId,order.getOrderId())));
order.setEquipment(equipmentService.getById(order.getEquipmentId()));
List<EquipmentOrderGoods> equipmentOrderGoods = equipmentOrderGoodsCollect.get(order.getOrderId());
if(CollectionUtils.isNotEmpty(equipmentOrderGoods)){
order.setEquipmentGoods(equipmentOrderGoods.get(0));
}
List<Equipment> equipment = equipmentCollect.get(order.getEquipmentId());
if(CollectionUtils.isNotEmpty(equipment)){
order.setEquipment(equipment.get(0));
}
}
PageParam<Order, OrderParam> page = new PageParam<>(param);
return success(new PageResult<>(list, page.getTotal()));
}
// 贵港自然资源报餐
if(getTenantId().equals(10048) && getAppId() != null){
if (getTenantId().equals(10048) && getAppId() != null) {
param.setUserId(getLoginUserId());
final Boolean agent = param.getAgent();
if (agent != null) {
@@ -127,10 +149,10 @@ public class OrderController extends BaseController {
@PostMapping("/listByIds")
public ApiResult<List<Order>> listByIds(@RequestBody List<Integer> orderIds) {
System.out.println("按订单集查询 = " + orderIds);
if(orderIds.size() > 0){
if (orderIds.size() > 0) {
return success(orderService.listByIds(orderIds));
}
return fail("订单不存在",null);
return fail("订单不存在", null);
//
@@ -167,8 +189,8 @@ public class OrderController extends BaseController {
final List<Order> list = orderService.listRel(order);
// 是否查询订单商品
if(order.getShowGoodsList()){
list.forEach(d->{
if (order.getShowGoodsList()) {
list.forEach(d -> {
final OrderGoodsParam ogp = new OrderGoodsParam();
ogp.setOrderId(d.getOrderId());
ogp.setTemporary(1);
@@ -188,7 +210,7 @@ public class OrderController extends BaseController {
Order order = orderService.getByIdRel(id);
// 云芯威关联设备查询
if (!order.getGoodsId().equals(0) || !order.getEquipmentId().equals(0)) {
order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper<EquipmentOrderGoods>().eq(EquipmentOrderGoods::getOrderId,order.getOrderId())));
order.setEquipmentGoods(equipmentOrderGoodsService.getOne(new LambdaQueryWrapper<EquipmentOrderGoods>().eq(EquipmentOrderGoods::getOrderId, order.getOrderId())));
order.setEquipment(equipmentService.getById(order.getEquipmentId()));
}
return success(order);
@@ -240,7 +262,7 @@ public class OrderController extends BaseController {
// 添加推荐人关系
if (order.getDealerId() != null) {
final User dealer = userService.getById(order.getDealerId());
if(dealer == null){
if (dealer == null) {
return fail("推荐人的用户ID不存在");
}
final UserReferee referee = new UserReferee();
@@ -250,10 +272,10 @@ public class OrderController extends BaseController {
}
}
// 是否存入星期值(10048)
if(order.getDeliveryTime() != null){
if (order.getDeliveryTime() != null) {
order.setWeek(DateUtil.dayOfWeek(order.getDeliveryTime()) - 1);
}
return success("添加成功",order);
return success("添加成功", order);
}
return fail("添加失败");
}
@@ -315,7 +337,7 @@ public class OrderController extends BaseController {
@ApiOperation("支付成功")
@PostMapping("/setPayStatus")
public ApiResult<?> setPayStatus(@RequestBody Order order){
public ApiResult<?> setPayStatus(@RequestBody Order order) {
if (orderService.updateById(order)) {
return success("设置成功");
}
@@ -334,7 +356,7 @@ public class OrderController extends BaseController {
param.setPayStatus(PAY_STATUS_SUCCESS);
param.setDeleted(0);
final List<Order> list = orderService.listRel(param);
if(list.size() == 0){
if (list.size() == 0) {
return fail("今日无报餐记录");
}
final Order order = list.get(0);
@@ -355,6 +377,6 @@ public class OrderController extends BaseController {
// 附带小logo
config.setImg(bufferedImage);
QrCodeUtil.generate(orderNo, config, FileUtil.file(filePath));
return success("请求成功",qrcodeUrl);
return success("请求成功", qrcodeUrl);
}
}

View File

@@ -174,6 +174,9 @@ public class Order implements Serializable {
@ApiModelProperty(value = "是否临时报餐")
private Integer isTemporary;
@ApiModelProperty(value = "推荐人手机号")
private String dealerPhone;
@ApiModelProperty(value = "用户ID")
private Integer userId;

View File

@@ -5,10 +5,10 @@ spring:
datasource:
url: jdbc:mysql://47.119.165.234:3308/open_ws?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username: open_ws
password: A6k4GHifNWWhjcde
# password: A6k4GHifNWWhjcde
# url: jdbc:mysql://47.119.165.234:3308/open_ws?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
# username: open_ws
# password: DzAmFiZfPJ6ZGApm
password: DzAmFiZfPJ6ZGApm
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource