diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java index 08cb26d..e9127d2 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java @@ -13,7 +13,12 @@ import com.chaozhanggui.system.cashierservice.redis.RedisUtil; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; import com.chaozhanggui.system.cashierservice.sign.Result; import com.chaozhanggui.system.cashierservice.socket.AppWebSocketServer; +import com.chaozhanggui.system.cashierservice.util.DateUtils; +import com.chaozhanggui.system.cashierservice.util.RedisUtils; import com.chaozhanggui.system.cashierservice.util.SnowFlakeUtil; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -24,7 +29,10 @@ import java.io.IOException; import java.math.BigDecimal; import java.time.Instant; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.Objects; +import java.util.concurrent.TimeUnit; /** * @author 12847 @@ -33,7 +41,7 @@ import java.util.List; public class OrderService { @Resource - private TbCashierCartMapper cashierCartMapper; + private TbShopUserMapper shopUserMapper; @Resource private TbOrderInfoMapper orderInfoMapper; @@ -48,18 +56,31 @@ public class OrderService { @Resource private TbUserInfoMapper userInfoMapper; + @Autowired + private TbWiningUserMapper tbWiningUserMapper; @Resource - private TbOrderDetailMapper tbOrderDetailMapper; + private TbOrderDetailMapper tbOrderDetailMapper; + @Autowired + private TbIntegralMapper tbIntegralMapper; + @Resource + private TbParamsMapper paramsMapper; @Resource private RedisUtil redisUtil; + @Resource + private RedisUtils redisUtils; + @Resource + private TbUserCouponsMapper userCouponsMapper; + @Resource + private TbSystemCouponsMapper systemCouponsMapper; /** * 创建订单 + * * @param tableId * @return */ @Transactional(rollbackFor = Exception.class) - public Result createOrder(Integer tableId,Integer shopId,Integer userId){ + public Result createOrder(Integer tableId, Integer shopId, Integer userId) { // //查询该台桌是否还有开启的购物车 // List cashierCarVoList = cashierCartMapper.selectByTableIdOpen(tableId); // if (cashierCarVoList.isEmpty()){ @@ -139,26 +160,25 @@ public class OrderService { // orderVo.setOrderType(orderInfo.getOrderType()); // orderVo.setOrderId(orderInfo.getId()); // orderVo.setSendType(orderInfo.getSendType()); - return Result.success(CodeEnum.ENCRYPT,orderVo); + return Result.success(CodeEnum.ENCRYPT, orderVo); } - public Result orderInfo(Integer orderId){ + public Result orderInfo(Integer orderId) { TbOrderInfo orderInfo = orderInfoMapper.selectByPrimaryKey(orderId); - if (orderInfo == null){ + if (orderInfo == null) { return Result.fail("未找到订单"); } - TbShopInfo tbShopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getShopId())); - if (tbShopInfo == null){ + if (tbShopInfo == null) { return Result.fail("未找到订单"); } TbShopTable tbShopTable = shopTableMapper.selectQRcode(orderInfo.getTableId()); - List details= tbOrderDetailMapper.selectAllByOrderId(orderId); - if(ObjectUtil.isEmpty(details)||details.size()<=0){ + List details = tbOrderDetailMapper.selectAllByOrderId(orderId); + if (ObjectUtil.isEmpty(details) || details.size() <= 0) { return Result.fail("未找到订单"); } @@ -170,37 +190,37 @@ public class OrderService { orderVo.setOrderNo(orderInfo.getOrderNo()); orderVo.setTime(orderInfo.getCreatedAt()); orderVo.setPayAmount(orderInfo.getOrderAmount()); - orderVo.setTableName(tbShopTable == null?"":tbShopTable.getName()); + orderVo.setTableName(tbShopTable == null ? "" : tbShopTable.getName()); orderVo.setOrderType(orderInfo.getOrderType()); orderVo.setOrderId(orderInfo.getId()); orderVo.setSendType(orderInfo.getSendType()); - return Result.success(CodeEnum.ENCRYPT,orderVo); + return Result.success(CodeEnum.ENCRYPT, orderVo); } - public Result orderList(Integer userId,Integer page,Integer size,String status){ + public Result orderList(Integer userId, Integer page, Integer size, String status) { TbUserInfo tbUserInfo = userInfoMapper.selectByPrimaryKey(userId); - if (tbUserInfo == null){ + if (tbUserInfo == null) { return Result.fail("生成订单失败"); } //获取页码号 int beginNo; - if(page <=0){ + if (page <= 0) { beginNo = 0; - }else{ + } else { beginNo = (page - 1) * size; } - List tbOrderInfos = orderInfoMapper.selectByUserId(userId, beginNo, size,status); + List tbOrderInfos = orderInfoMapper.selectByUserId(userId, beginNo, size, status); - for (TbOrderInfo orderInfo:tbOrderInfos){ - List list = tbOrderDetailMapper.selectAllByOrderId(orderInfo.getId()); - int num = 0; - for (TbOrderDetail orderDetail:list){ - num = num+orderDetail.getNum(); - } - orderInfo.setDetailList(list); - orderInfo.setTotalNumber(num); + for (TbOrderInfo orderInfo : tbOrderInfos) { + List list = tbOrderDetailMapper.selectAllByOrderId(orderInfo.getId()); + int num = 0; + for (TbOrderDetail orderDetail : list) { + num = num + orderDetail.getNum(); + } + orderInfo.setDetailList(list); + orderInfo.setTotalNumber(num); } // // for (OrderVo date :tbOrderInfos) { @@ -215,7 +235,7 @@ public class OrderService { // date.setTotalNumber(number); // } // } - return Result.success(CodeEnum.ENCRYPT,tbOrderInfos); + return Result.success(CodeEnum.ENCRYPT, tbOrderInfos); } @@ -224,10 +244,63 @@ public class OrderService { // redisUtil.seckill(tableId,message); // AppWebSocketServer.onClosed(tableId); List list = productSkuMapper.selectAll(); - for (TbProductSku productSku:list){ + for (TbProductSku productSku : list) { // productSku.setStockNumber(200.00); - redisUtil.saveMessage("PRODUCT:"+productSku.getShopId()+":"+productSku.getId(),productSku.getStockNumber().intValue()+""); + redisUtil.saveMessage("PRODUCT:" + productSku.getShopId() + ":" + productSku.getId(), productSku.getStockNumber().intValue() + ""); } } + + @Transactional(rollbackFor = Exception.class) + public Result tradeIntegral(String userId, String id) { + updateIntegral(userId, id); + return Result.success(CodeEnum.ENCRYPT); + } + + private void updateIntegral(String userId, String id) { + + boolean lock_coin = redisUtils.lock(RedisCst.INTEGRAL_COIN_KEY + userId, 5000, TimeUnit.MILLISECONDS); + if (lock_coin) { + TbIntegral integral = tbIntegralMapper.selectByPrimaryKey(Integer.valueOf(id)); + if (Objects.isNull(integral) || !integral.getStatus().equals("1")) { + throw new MsgException("该优惠券已被使用"); + } + TbParams params = paramsMapper.selectByPrimaryKey(1); + BigDecimal jfAmount = params.getTradeRatio().multiply(integral.getNum()); + TbShopUser tbShopUser = shopUserMapper.selectByUserId(userId); + tbShopUser.setLevelConsume(tbShopUser.getLevelConsume().add(jfAmount)); + shopUserMapper.updateByPrimaryKeySelective(tbShopUser); + integral.setStatus("TRADE"); + integral.setUpdateTime(new Date()); + tbIntegralMapper.updateByPrimaryKeySelective(integral); + redisUtils.releaseLock(RedisCst.INTEGRAL_COIN_KEY + userId); + } else { + updateIntegral(userId, id); + } + } + +// public Result mineYhq(String userId) { +// List list = tbIntegralMapper.selectAllByUserId(userId); +// return Result.success(CodeEnum.ENCRYPT, list); +// } + + public Result mineCoupons(String userId, String status, Integer page, Integer size) { + PageHelper.startPage(page, size); + List list = userCouponsMapper.selectByUserId(userId,status); + PageInfo pageInfo = new PageInfo(list); + return Result.success(CodeEnum.SUCCESS, pageInfo); + } + + public Result findCoupons(Integer page, Integer size) { + PageHelper.startPage(page, size); + List list = systemCouponsMapper.selectAll(); + PageInfo pageInfo = new PageInfo(list); + return Result.success(CodeEnum.SUCCESS, pageInfo); + } + + public Result findWiningUser() { + String day = DateUtils.getDay(); + List list = tbWiningUserMapper.selectAllByTrade(day); + return Result.success(CodeEnum.SUCCESS, list); + } }