Procházet zdrojové kódy

更新入账管理接口,更新已完成订单接口,新增待结算订单接口,更新区分优惠券接口,更新添加系统优惠券接口,新增管理员审核添加优惠券接口,新增判断系统登入用户是否是超级管理员接口

liu před 1 rokem
rodič
revize
e92ba07e5a

+ 1 - 1
db/insert_241014.sql

@@ -1,6 +1,6 @@
 -- 创建站点表
 CREATE TABLE rider_station
 (
-    id           INT PRIMARY KEY,
+    id           INT AUTO_INCREMENT PRIMARY KEY,
     station_name VARCHAR(100)
 );

+ 3 - 0
db/update_241017.sql

@@ -0,0 +1,3 @@
+ALTER TABLE tb_order ADD time_out BIGINT  COMMENT '超时时间';
+
+ALTER TABLE tb_coupon ADD state INT  COMMENT '状态:0-待审核,1-发布,2-撤销';

+ 4 - 0
src/main/java/com/sqx/common/constant/RedisKey.java

@@ -83,4 +83,8 @@ public interface RedisKey {
      */
     String MP_OF_SHOP_TOKEN_CACHE_KEY = "wm:data:wx:shop-mp:token";
 
+    /**
+     * 订单超时锁
+     */
+    String TIME_OUT_LOCK = "wm:time:out:lock:%s";
 }

+ 15 - 4
src/main/java/com/sqx/modules/app/entity/UserMoneyDetails.java

@@ -128,11 +128,22 @@ public class UserMoneyDetails implements Serializable {
     private BigDecimal orderNumber;
 
     /**
-     * 订单id
-     */
-    /**
      * 订单号
      */
     @TableField(exist = false)
-    private BigDecimal orderId;
+    private Long orderId;
+
+//    支付金额
+    @TableField(exist = false)
+    private BigDecimal payMoney;
+
+//    短信发送总费用
+    @TableField(exist = false)
+    private BigDecimal smsMoneyTotal;
+
+//    总金额
+    @TableField(exist = false)
+    private BigDecimal orderAmount;
+
+
 }

+ 57 - 0
src/main/java/com/sqx/modules/app/service/impl/UserMoneyDetailsServiceImpl.java

@@ -1,7 +1,9 @@
 package com.sqx.modules.app.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sqx.common.utils.PageUtils;
@@ -9,6 +11,13 @@ import com.sqx.common.utils.Result;
 import com.sqx.modules.app.dao.UserMoneyDetailsDao;
 import com.sqx.modules.app.entity.UserMoneyDetails;
 import com.sqx.modules.app.service.UserMoneyDetailsService;
+import com.sqx.modules.common.dao.CommonInfoDao;
+import com.sqx.modules.common.entity.CommonInfo;
+import com.sqx.modules.common.service.CommonInfoService;
+import com.sqx.modules.errand.entity.TbIndent;
+import com.sqx.modules.errand.entity.TbIndentSmsSendLog;
+import com.sqx.modules.errand.service.TbIndentService;
+import com.sqx.modules.errand.service.TbIndentSmsSendLogService;
 import com.sqx.modules.pay.controller.query.CashOutQueryDTO;
 import com.sqx.modules.pay.controller.query.WalletDetailQuery;
 import com.sqx.modules.pay.vo.CashOutVO;
@@ -27,6 +36,15 @@ import java.util.stream.Collectors;
 @Service
 public class UserMoneyDetailsServiceImpl extends ServiceImpl<UserMoneyDetailsDao, UserMoneyDetails> implements UserMoneyDetailsService {
 
+    @Autowired
+    private TbIndentSmsSendLogService smsSendLogService;
+
+    @Autowired
+    private CommonInfoDao commonInfoDao;
+
+    @Autowired
+    private TbIndentService tbIndentService;
+
     @Override
     public Result queryUserMoneyDetails(Integer page, Integer limit, Long userId, Integer classify, Integer type) {
         IPage<UserMoneyDetails> page1 = new Page(page, limit);
@@ -130,6 +148,45 @@ public class UserMoneyDetailsServiceImpl extends ServiceImpl<UserMoneyDetailsDao
         IPage<UserMoneyDetails> iPage = new Page<>();
         Integer row=(page-1)*limit;
         List<UserMoneyDetails> userMoneyDetailsList = baseMapper.accountEntryManagementDetailsList(row,limit, shopName, shopPhone, userPhone, couponName, orderNumber, startTime, endTime);
+//        查询每条成功的短信金额
+        CommonInfo commonInfo = commonInfoDao.findOne(421);
+        String value = commonInfo.getValue();
+        Double smsMoney = Double.valueOf(value);
+
+//        计算每个订单所发送短信金额
+        LambdaQueryWrapper<TbIndentSmsSendLog> wrapper=new LambdaQueryWrapper<>();
+        for (int i = 0; i < userMoneyDetailsList.size(); i++) {
+            UserMoneyDetails userMoneyDetails = userMoneyDetailsList.get(i);
+            BigDecimal couponMoney = userMoneyDetails.getCouponMoney();
+            if (ObjectUtils.isEmpty(couponMoney)) {
+                couponMoney=new BigDecimal(0);
+            }
+            BigDecimal activityDiscountAmount = userMoneyDetails.getActivityDiscountAmount();
+            if (ObjectUtils.isEmpty(activityDiscountAmount)) {
+                activityDiscountAmount=new BigDecimal(0);
+            }
+            BigDecimal payMoney = userMoneyDetails.getPayMoney();
+            // 订单金额
+            BigDecimal orderAmount = payMoney.add(couponMoney).add(activityDiscountAmount).setScale(2, BigDecimal.ROUND_DOWN);
+            userMoneyDetails.setOrderAmount(orderAmount);
+
+            LambdaQueryWrapper<TbIndent> wrapperTBI=new LambdaQueryWrapper<>();
+            wrapperTBI.eq(TbIndent::getOrderId,userMoneyDetails.getOrderId());
+            TbIndent tbIndent = tbIndentService.getOne(wrapperTBI);
+            if (ObjectUtils.isNotEmpty(tbIndent)) {
+                wrapper.eq(TbIndentSmsSendLog::getSuccessFlag,"1");
+                wrapper.eq(TbIndentSmsSendLog::getOrderId,tbIndent.getOrderId());
+                List<TbIndentSmsSendLog> list = smsSendLogService.list(wrapper);
+                Double smsMoneyTotal=smsMoney*list.size();
+                BigDecimal decimal = new BigDecimal(smsMoneyTotal).setScale(2, BigDecimal.ROUND_DOWN);
+                userMoneyDetails.setSmsMoneyTotal(decimal);
+            }else {
+                userMoneyDetails.setSmsMoneyTotal(new BigDecimal(0));
+            }
+
+        }
+
+
         int total = baseMapper.accountEntryManagementDetailsCount(shopName, shopPhone, userPhone, couponName, orderNumber, startTime, endTime);
 
 //        当前页数

+ 8 - 1
src/main/java/com/sqx/modules/coupon/controller/CouponController.java

@@ -1,5 +1,6 @@
 package com.sqx.modules.coupon.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.sqx.common.utils.Result;
 import com.sqx.modules.coupon.entity.TbCoupon;
@@ -9,6 +10,7 @@ import com.sqx.modules.datacentre.dao.ShopAdminDao;
 import com.sqx.modules.datacentre.entity.SysUserShop;
 import com.sqx.modules.sys.controller.AbstractController;
 import com.sqx.modules.sys.entity.SysUserEntity;
+import com.sqx.modules.sys.entity.SysUserRoleEntity;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -60,7 +62,6 @@ public class CouponController extends AbstractController {
     @ApiOperation("修改优惠券信息")
     @PostMapping(value = "updateCoupon")
     public Result updateCoupon(@RequestBody TbCoupon tbCoupon){
-
         return tbCouponService.updateCoupon(tbCoupon);
     }
 
@@ -72,4 +73,10 @@ public class CouponController extends AbstractController {
         return tbCouponService.giveCoupon(couponId, userIdList, shopId);
     }
 
+    @ApiOperation("审核优惠券")
+    @GetMapping(value = "checkCoupon")
+    public Result checkCoupon(Long couponId,Integer sysUserId, Integer state){
+        return tbCouponService.checkCoupon(couponId, sysUserId, state);
+    }
+
 }

+ 6 - 0
src/main/java/com/sqx/modules/coupon/entity/TbCoupon.java

@@ -57,8 +57,14 @@ public class TbCoupon implements Serializable {
     @ApiModelProperty("所属商铺 0为总后台发布的优惠券")
     private Long shopId;
 
+    @ApiModelProperty("状态:0-待审核,1-发布,2-撤销")
+    private Integer state;
+
     @TableField(exist = false)
     private String shopName;
 
+    @TableField(exist = false)
+    private Integer sysUserId;
+
     public TbCoupon() {}
 }

+ 2 - 0
src/main/java/com/sqx/modules/coupon/service/TbCouponService.java

@@ -24,4 +24,6 @@ public interface TbCouponService extends IService<TbCoupon> {
     Result giveCoupon(Long couponId, List<String> userIdList, Long shopId);
 
     TbCoupon selectCoupon(Long couponId);
+
+    Result checkCoupon(Long couponId, Integer sysUserId, Integer state);
 }

+ 39 - 0
src/main/java/com/sqx/modules/coupon/service/impl/TbCouponServiceImpl.java

@@ -1,6 +1,9 @@
 package com.sqx.modules.coupon.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.sqx.common.utils.PageUtils;
@@ -10,6 +13,9 @@ import com.sqx.modules.coupon.dao.TbCouponUserDao;
 import com.sqx.modules.coupon.entity.TbCoupon;
 import com.sqx.modules.coupon.service.TbCouponService;
 import com.sqx.modules.datacentre.entity.SysUserShop;
+import com.sqx.modules.sys.entity.SysUserRoleEntity;
+import com.sqx.modules.sys.service.SysUserRoleService;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -27,6 +33,9 @@ public class TbCouponServiceImpl extends ServiceImpl<TbCouponDao, TbCoupon> impl
     @Autowired
     private TbCouponUserDao tbCouponUserDao;
 
+    @Autowired
+    private SysUserRoleService sysUserRoleService;
+
     @Override
     public Result seleteAllCoupon(Integer page, Integer limit,Long shopId,String shopName) {
         if(page == null || limit==null){
@@ -42,6 +51,18 @@ public class TbCouponServiceImpl extends ServiceImpl<TbCouponDao, TbCoupon> impl
 
     @Override
     public Result issueCoupon(TbCoupon tbCoupon) {
+        Integer sysUserId = tbCoupon.getSysUserId();
+//        判断是否是超级管理员
+        LambdaQueryWrapper<SysUserRoleEntity> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(SysUserRoleEntity::getRoleId,3)
+                        .eq(SysUserRoleEntity::getUserId,sysUserId);
+        SysUserRoleEntity sysUserRoleEntity = sysUserRoleService.getOne(wrapper);
+        if (ObjectUtils.isEmpty(sysUserRoleEntity)) {
+            tbCoupon.setState(0);
+        }else {
+            tbCoupon.setState(1);
+        }
+
         tbCoupon.setDeleteFlag(0);
         tbCouponDao.insert(tbCoupon);
         return Result.success();
@@ -93,6 +114,24 @@ public class TbCouponServiceImpl extends ServiceImpl<TbCouponDao, TbCoupon> impl
     }
 
     @Override
+    public Result checkCoupon(Long couponId, Integer sysUserId, Integer state) {
+        TbCoupon tbCoupon = tbCouponDao.selectById(couponId);
+        if (ObjectUtils.isEmpty(tbCoupon)) {
+            return Result.error("无该优惠券");
+        }
+        LambdaQueryWrapper<SysUserRoleEntity> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(SysUserRoleEntity::getRoleId,3)
+                .eq(SysUserRoleEntity::getUserId,sysUserId);
+        SysUserRoleEntity sysUserRoleEntity = sysUserRoleService.getOne(wrapper);
+        if (ObjectUtils.isEmpty(sysUserRoleEntity)) {
+            return Result.error("该用户不是超级管理,无审批权限");
+        }
+        tbCoupon.setState(state);
+        tbCouponDao.updateById(tbCoupon);
+        return Result.success();
+    }
+
+    @Override
     public Result deleteCoupon(Long couponId) {
         tbCouponDao.deleteById(couponId);
         return Result.success();

+ 15 - 0
src/main/java/com/sqx/modules/order/controller/app/AppOrderController.java

@@ -140,6 +140,8 @@ public class AppOrderController {
         return appOrderService.selectOrderList(userId, shopId, status, orderType, page, limit);
     }
 
+
+
     @Login
     @ApiOperation("查看直接购买商品详情")
     @GetMapping(value = "selectBuyGoods")
@@ -247,5 +249,18 @@ public class AppOrderController {
         return Result.success();
     }
 
+    @Login
+    @ApiOperation("查看单个订单")
+    @GetMapping(value = "/selectOrder")
+    public Result selectOrder(@RequestAttribute Long userId, Integer orderId,Integer page, Integer limit){
+        return appOrderService.selectOrder(userId, orderId,page, limit);
+    }
+
+    @Login
+    @ApiOperation("将超时订单改成已取消订单")
+    @GetMapping(value = "/updateTimeOutOrder")
+    public Result updateTimeOutOrder(@RequestAttribute Long userId, Integer orderId){
+        return appOrderService.updateTimeOutOrder(userId, orderId);
+    }
 
 }

+ 6 - 0
src/main/java/com/sqx/modules/order/entity/TbOrder.java

@@ -282,6 +282,12 @@ public class TbOrder implements Serializable {
     @ApiModelProperty("站点名称")
     private String stationName;
 
+    @ApiModelProperty("是否发送成功 1发送成功 0发送失败")
+    @TableField(exist = false)
+    private String successFlag;
+
+    @ApiModelProperty("超时时间")
+    private Long timeOut;
 
     public TbOrder() {}
 }

+ 4 - 0
src/main/java/com/sqx/modules/order/service/AppOrderService.java

@@ -170,4 +170,8 @@ public interface AppOrderService extends IService<TbOrder> {
      * @return 订单列表
      */
     List<TbOrder> getProdIngOrders(LocalDateTime datetime);
+
+    Result selectOrder(Long userId, Integer orderId,Integer page, Integer limit);
+
+    Result updateTimeOutOrder(Long userId, Integer orderId);
 }

+ 76 - 0
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -5,10 +5,12 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -93,6 +95,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.support.DefaultTransactionDefinition;
 
 import javax.annotation.Resource;
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -1477,6 +1480,27 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
     @Override
     public Result selectOrderById(Long orderId) {
         TbOrder tbOrder = appOrderDao.selectByOrderId(orderId);
+//        短信的orderId对应骑手订单id
+        LambdaQueryWrapper<TbIndent> wrapperTBI=new LambdaQueryWrapper<>();
+        wrapperTBI.eq(TbIndent::getOrderId,tbOrder.getOrderId());
+        TbIndent tbIndent = tbIndentService.getOne(wrapperTBI);
+        if (ObjectUtils.isNotEmpty(tbIndent)) {
+            //        只能单独去搜索短信发送结果
+            LambdaQueryWrapper<TbIndentSmsSendLog> wrapper=new LambdaQueryWrapper<>();
+            wrapper.eq(TbIndentSmsSendLog::getOrderId,tbIndent.getIndentId())
+                    .eq(TbIndentSmsSendLog::getSuccessFlag,"1");
+            List<TbIndentSmsSendLog> list = smsSendLogService.list(wrapper);
+            //        只要有发送成功记录就是成功
+            if (list.size()>0) {
+                tbOrder.setSuccessFlag("1");
+            }else {
+                tbOrder.setSuccessFlag("0");
+            }
+        }else {
+            tbOrder.setSuccessFlag("0");
+        }
+
+
         int i = appOrderDao.selectCountOrderByTime(tbOrder.getPayTime(), tbOrder.getShopId());
         tbOrder.setCountOrder(i);
         if (tbOrder.getCouponId() != null) {
@@ -2514,6 +2538,58 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
         return baseMapper.selectMakeOrdersList(minusMinutes);
     }
 
+    @Override
+    public Result selectOrder(Long userId, Integer orderId,Integer page, Integer limit) {
+        HashMap hashMap = new HashMap();
+        Page<TbOrder> pages = new Page(page, limit);
+        LambdaQueryWrapper<TbOrder> wrapper=new LambdaQueryWrapper<>();
+        wrapper.eq(TbOrder::getOrderId,orderId)
+                .eq(TbOrder::getUserId,userId);
+        IPage<TbOrder> tbOrderList = baseMapper.selectPage(pages, wrapper);
+        BigDecimal money = new BigDecimal(0);
+        ArrayList list = new ArrayList();
+        for (int i = 0; i < tbOrderList.getRecords().size(); i++) {
+            List<OrderGoods> orderGoodsList = orderGoodsDao.selectList(new QueryWrapper<OrderGoods>()
+                    .eq("order_id", tbOrderList.getRecords().get(i).getOrderId()));
+            for (int a = 0; a < orderGoodsList.size(); a++) {
+                BigDecimal goodsPrice = orderGoodsList.get(a).getGoodsPrice();
+                Integer goodsNum = orderGoodsList.get(a).getGoodsNum();
+                BigDecimal multiply = goodsPrice.multiply(new BigDecimal(goodsNum));
+                money = money.add(multiply);
+            }
+            list.add(orderGoodsList);
+            tbOrderList.getRecords().get(i).setOrderGoodsList(list);
+        }
+        PageUtils pageUtils = new PageUtils(tbOrderList);
+        hashMap.put("pageUtils", pageUtils);
+        hashMap.put("money", money);
+        return Result.success().put("data", hashMap);
+    }
+
+    @Override
+    public Result updateTimeOutOrder(Long userId, Integer orderId) {
+        RLock lock = redissonClient.getLock(String.format(RedisKey.TIME_OUT_LOCK, orderId));
+        lock.lock();
+        try {
+            TbOrder tbOrder = baseMapper.selectById(orderId);
+            if (ObjectUtils.isEmpty(tbOrder)) {
+                return Result.error("该订单不存在");
+            }
+            Integer status = tbOrder.getStatus();
+            if (status!=0) {
+                return Result.error("当前订单不是待结算订单");
+            }
+            tbOrder.setStatus(5);
+            baseMapper.updateById(tbOrder);
+            return Result.success();
+        } finally {
+            lock.unlock();
+        }
+
+
+
+    }
+
     /**
      * 获取当前店铺当前订单在已支付订单中的序号
      * @param order 订单信息

+ 28 - 6
src/main/java/com/sqx/modules/pay/service/impl/WxServiceImpl.java

@@ -3,6 +3,7 @@ package com.sqx.modules.pay.service.impl;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.github.wxpay.sdk.WXPay;
 import com.github.wxpay.sdk.WXPayConstants;
 import com.github.wxpay.sdk.WXPayUtil;
@@ -224,18 +225,39 @@ public class WxServiceImpl implements WxService {
         lock.lock();
         try {
 
+            Integer status = tbOrder.getStatus();
+            if (status==0) {
+                //            获取超时时间
+                Long timeOut = tbOrder.getTimeOut();
+                if (ObjectUtils.isNotEmpty(timeOut)) {
+                    long time = new Date().getTime();
+
+                    if (timeOut<time) {
+                        return Result.error("订单已过期");
+                    }
+                }
+            }else {
+                // 设置订单号
+                if (StrUtil.isBlank(tbOrder.getOrderNumber())) {
+                    tbOrder.setOrderNumber(getGeneralOrder());
+                }
+
+                // 支付时,订单状态改为 0
+                tbOrder.setStatus(0);
+
+
+//            超时时间
+                Date date = new Date();
+                long time1 = date.getTime()+15*60*1000;
+                tbOrder.setTimeOut(time1);
+            }
+
             tbOrder.setPayType(1);
             if(type == 4 || type == 5){
                 tbOrder.setPayType(3);
             }
 
-            // 设置订单号
-            if (StrUtil.isBlank(tbOrder.getOrderNumber())) {
-                tbOrder.setOrderNumber(getGeneralOrder());
-            }
 
-            // 支付时,订单状态改为 0
-            tbOrder.setStatus(0);
 
             // 保存订单信息
             appOrderDao.updateById(tbOrder);

+ 19 - 0
src/main/java/com/sqx/modules/sys/controller/SysUserController.java

@@ -1,7 +1,9 @@
 package com.sqx.modules.sys.controller;
 
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.sqx.common.annotation.SysLog;
 import com.sqx.common.utils.Constant;
 import com.sqx.common.utils.Result;
@@ -17,6 +19,7 @@ import com.sqx.modules.goods.dao.GoodsShopDao;
 import com.sqx.modules.goods.entity.GoodsShop;
 import com.sqx.modules.sys.dao.SysUserDao;
 import com.sqx.modules.sys.entity.SysUserEntity;
+import com.sqx.modules.sys.entity.SysUserRoleEntity;
 import com.sqx.modules.sys.form.PasswordForm;
 import com.sqx.modules.sys.service.SysUserRoleService;
 import com.sqx.modules.sys.service.SysUserService;
@@ -226,4 +229,20 @@ public class SysUserController extends AbstractController {
 		
 		return Result.success();
 	}
+
+	@SysLog("判断是否是超级管理员")
+	@GetMapping("/isSuperAdmin")
+	public Result isSuperAdmin(Integer sysUserId){
+//        判断是否是超级管理员
+		LambdaQueryWrapper<SysUserRoleEntity> wrapper=new LambdaQueryWrapper<>();
+		wrapper.eq(SysUserRoleEntity::getRoleId,3)
+				.eq(SysUserRoleEntity::getUserId,sysUserId);
+		SysUserRoleEntity sysUserRoleEntity = sysUserRoleService.getOne(wrapper);
+		if (ObjectUtils.isEmpty(sysUserRoleEntity)) {
+			return Result.success().put("superAdmin",0);
+		}else {
+			return Result.success().put("superAdmin",1);
+		}
+	}
+
 }

+ 5 - 0
src/main/java/com/sqx/scheduler/config/SchedulerLock.java

@@ -37,4 +37,9 @@ public interface SchedulerLock {
      * 导出锁
      */
     String EXPORT_LOCK = "export:lock";
+
+    /**
+     * 订单超时锁
+     */
+    String TIME_OUT_LOCK = "wm:time:out:lock";
 }

+ 48 - 0
src/main/java/com/sqx/scheduler/order/OrderScheduler.java

@@ -1,6 +1,8 @@
 package com.sqx.scheduler.order;
 
 import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.sqx.modules.common.entity.CommonInfo;
 import com.sqx.modules.common.service.CommonInfoService;
@@ -17,6 +19,8 @@ import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -161,4 +165,48 @@ public class OrderScheduler {
             lock.unlock();
         }
     }
+
+    /**
+     * 自动更改超时订单
+     * 每3分钟运行一次
+     */
+    @Async
+    @Scheduled(cron = "0 */3 * * * ?")
+    public void changeTimeOutOrder() {
+        RLock lock = redissonClient.getLock(SchedulerLock.TIME_OUT_LOCK);
+        lock.lock();
+        try {
+            log.info("超时订单自动取消任务开始运行");
+//            查询所有超时时间不为空的待结账订单
+            LambdaQueryWrapper<TbOrder> wrapper=new LambdaQueryWrapper<>();
+            wrapper.eq(TbOrder::getStatus,0)
+                    .isNotNull(TbOrder::getTimeOut);
+            List<TbOrder> orderList = orderService.list(wrapper);
+
+
+            if (orderList.size()==0) {
+                log.info("没有符合条件的超时订单,超时订单自动取消任务运行....");
+                return;
+            }
+
+
+            long time = new Date().getTime();
+            ArrayList<TbOrder> orders = new ArrayList<>();
+            for (TbOrder tbOrder : orderList) {
+                Long timeOut = tbOrder.getTimeOut();
+                if (time>timeOut) {
+                    tbOrder.setStatus(5);
+                    orders.add(tbOrder);
+                }
+            }
+
+            orderService.updateBatchById(orders);
+
+            log.info("超时订单自动取消运行成功");
+        } catch (Exception e) {
+            log.error("超时订单自动取消任务运行失败失败原因:{}", e.getMessage());
+        } finally {
+            lock.unlock();
+        }
+    }
 }

+ 17 - 7
src/main/resources/mapper/coupon/TbCouponUserMapper.xml

@@ -14,15 +14,20 @@
     </select>
 
     <select id="CouponList" resultType="com.sqx.modules.coupon.entity.TbCouponUser">
-        select * from tb_coupon_user where user_id = #{userId}
+        select tcu.*,gs.shop_name as shopName from tb_coupon_user tcu
+        left join goods_shop gs on tcu.shop_id = gs.shop_id
+        where tcu.user_id = #{userId}
         <if test="status!=null">
-            and status = #{status}
+            and tcu.status = #{status}
         </if>
-        order by create_time desc
+        order by tcu.create_time desc
     </select>
 
     <update id="updateExpiration">
-        update tb_coupon_user set status = 2 where status = 0 and date_format(expiration_time,'%Y-%m-%d %H:%i:%S') &lt; date_format(now(),'%Y-%m-%d %H:%i:%S')
+        update tb_coupon_user
+        set status = 2
+        where status = 0
+          and date_format(expiration_time, '%Y-%m-%d %H:%i:%S') &lt; date_format(now(), '%Y-%m-%d %H:%i:%S')
     </update>
 
     <select id="selectCouponByUserId" resultType="com.sqx.modules.coupon.entity.TbCouponUser">
@@ -56,13 +61,18 @@
     </select>
 
     <select id="selectCountCoupon" resultType="int">
-        select count(*) from tb_coupon_user where user_id = #{userId} and status = 0
+        select count(*)
+        from tb_coupon_user
+        where user_id = #{userId}
+          and status = 0
     </select>
 
     <insert id="giveCoupon">
-        insert into tb_coupon_user (user_id, coupon_name, coupon_picture, create_time, expiration_time, min_money, goods_type, money, status, end_time, shop_id) values
+        insert into tb_coupon_user (user_id, coupon_name, coupon_picture, create_time, expiration_time, min_money,
+        goods_type, money, status, end_time, shop_id) values
         <foreach collection="userIdList" item="item" separator=",">
-            (#{item}, #{couponName}, #{couponPicture}, #{createTime}, #{expirationTime}, #{minMoney}, #{goodsType}, #{money}, #{status}, #{endTime}, #{shopId})
+            (#{item}, #{couponName}, #{couponPicture}, #{createTime}, #{expirationTime}, #{minMoney}, #{goodsType},
+            #{money}, #{status}, #{endTime}, #{shopId})
         </foreach>
     </insert>
 

+ 2 - 2
src/main/resources/mapper/order/OrderMapper.xml

@@ -345,9 +345,9 @@
             and tor.status in (5, 8)
         </if>
         <if test="status==null">
-            and tor.status in (7, 6, 3, 4, 5, 8)
+            and tor.status in (0, 7, 6, 3, 4, 5, 8)
         </if>
-        order by pay_time desc
+        order by tor.create_time desc
     </select>
 
 

+ 3 - 1
src/main/resources/mapper/userMoney/UserMoneyDetailsMapper.xml

@@ -121,7 +121,9 @@
         tcu.coupon_name as couponName,
         tcu.money as couponMoney,
         apr.discount_amount as activityDiscountAmount,
-        tbo.errand_money as errandMoney
+        tbo.errand_money as errandMoney,
+        tbo.pay_money as payMoney,
+        tbo.order_id as orderId
         FROM
         (
         SELECT