From 0e2c0a960427a149274c93527eab8667280fde9b Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Wed, 21 Aug 2024 17:45:16 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BB=A3=E5=AE=A2=E4=B8=8B=E5=8D=95=E4=BC=9A?= =?UTF-8?q?=E5=91=98=E4=BD=99=E9=A2=9D=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cashierservice/bean/TableStateEnum.java | 2 +- .../controller/PayController.java | 20 +++++ .../cashierservice/entity/TbOrderInfo.java | 4 +- .../mybatis/MpShopUserFlowMapper.java | 7 ++ .../mybatis/MpShopUserMapper.java | 13 +++ .../cashierservice/service/OrderService.java | 6 ++ .../cashierservice/service/PayService.java | 84 +++++++++++++++++++ .../resources/mapper/TbOrderInfoMapper.xml | 3 +- 8 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/mybatis/MpShopUserFlowMapper.java create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/mybatis/MpShopUserMapper.java diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/bean/TableStateEnum.java b/src/main/java/com/chaozhanggui/system/cashierservice/bean/TableStateEnum.java index c2d743e..b802123 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/bean/TableStateEnum.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/bean/TableStateEnum.java @@ -2,7 +2,7 @@ package com.chaozhanggui.system.cashierservice.bean; public enum TableStateEnum { IDLE("idle"), - CLOSED("closed"), PAYING("paying"), PENDING("pending"); + CLOSED("closed"), PAYING("paying"), PENDING("pending"), USING("using"); private String state = "closed"; TableStateEnum(String state) { diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/PayController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/PayController.java index 1493248..eb19f37 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/PayController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/PayController.java @@ -198,6 +198,26 @@ public class PayController { } + /** + * 会员支付 + * @param token + * @param loginName + * @param clientType + * @param orderId + * @return + */ + @GetMapping("vipPay") + @LimitSubmit(key = "vipPay:%s") + public Result vipPay(@RequestHeader("token") String token, + @RequestHeader("loginName") String loginName, + @RequestHeader("clientType") String clientType, + @RequestParam("orderId") String orderId, + @RequestParam("vipUserId") Integer vipUserId){ + return payService.vipPay(orderId,token, vipUserId); + } + + + /** diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbOrderInfo.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbOrderInfo.java index 3ef40ba..a6a8bbc 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbOrderInfo.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbOrderInfo.java @@ -102,6 +102,8 @@ public class TbOrderInfo implements Serializable { private Integer staffId; + private String useType; + private static final long serialVersionUID = 1L; public TbOrderInfo(){ super(); @@ -166,4 +168,4 @@ public class TbOrderInfo implements Serializable { this.payType=payType; this.tableName=tableName; } -} \ No newline at end of file +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/mybatis/MpShopUserFlowMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/mybatis/MpShopUserFlowMapper.java new file mode 100644 index 0000000..2ec4dfe --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/mybatis/MpShopUserFlowMapper.java @@ -0,0 +1,7 @@ +package com.chaozhanggui.system.cashierservice.mybatis; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.chaozhanggui.system.cashierservice.entity.TbShopUserFlow; + +public interface MpShopUserFlowMapper extends BaseMapper { +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/mybatis/MpShopUserMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/mybatis/MpShopUserMapper.java new file mode 100644 index 0000000..70e6689 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/mybatis/MpShopUserMapper.java @@ -0,0 +1,13 @@ +package com.chaozhanggui.system.cashierservice.mybatis; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.chaozhanggui.system.cashierservice.entity.TbShopUser; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; + +import java.math.BigDecimal; + +public interface MpShopUserMapper extends BaseMapper { + @Update("update tb_shop_user set amount=amount-#{orderAmount}, consume_amount=consume_amount+#{orderAmount} where id=#{vipUserId} and amount >= 0") + long decrBalance(@Param("vipUserId") Integer vipUserId, @Param("orderAmount") BigDecimal orderAmount); +} 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 e6c31f4..71542e8 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java @@ -591,6 +591,9 @@ public class OrderService { orderInfo.setMasterId(masterId); orderInfo.setRemark(orderVo.getRemark()); orderInfo.setUserId(orderVo.getUserId()); + if (StrUtil.isNotBlank(orderVo.getTableId())) { + orderInfo.setTableId(orderVo.getTableId()); + } if (Objects.nonNull(tbToken)){ orderInfo.setTokenId(tbToken.getId()); } @@ -661,6 +664,9 @@ public class OrderService { redisUtil.deleteByKey("SHOP:CODE:USER:" + clientType + ":" + orderVo.getShopId() + ":" + day + orderVo.getUserId()); // 代课下单 if (!StrUtil.isBlank(orderVo.getTableId())) { + mpShopTableMapper.update(null, new LambdaUpdateWrapper() + .eq(TbShopTable::getQrcode, orderInfo.getTableId()) + .set(TbShopTable::getStatus, TableStateEnum.USING.getState())); producer.printMechine(String.valueOf(orderInfo.getId())); } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java index 487e36f..020ba31 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -1,8 +1,10 @@ package com.chaozhanggui.system.cashierservice.service; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.chaozhanggui.system.cashierservice.dao.*; import com.chaozhanggui.system.cashierservice.entity.*; import com.chaozhanggui.system.cashierservice.entity.dto.ReturnGroupOrderDto; @@ -11,6 +13,8 @@ import com.chaozhanggui.system.cashierservice.exception.MsgException; import com.chaozhanggui.system.cashierservice.model.ReturnOrderReq; import com.chaozhanggui.system.cashierservice.model.ScanPayReq; import com.chaozhanggui.system.cashierservice.model.TradeQueryReq; +import com.chaozhanggui.system.cashierservice.mybatis.MpShopUserFlowMapper; +import com.chaozhanggui.system.cashierservice.mybatis.MpShopUserMapper; import com.chaozhanggui.system.cashierservice.rabbit.RabbitProducer; import com.chaozhanggui.system.cashierservice.sign.CodeEnum; import com.chaozhanggui.system.cashierservice.sign.Result; @@ -118,6 +122,10 @@ public class PayService { @Autowired TbPlussShopStaffMapper tbPlussShopStaffMapper; + @Autowired + private MpShopUserMapper mpShopUserMapper; + @Autowired + private MpShopUserFlowMapper mpShopUserFlowMapper; public static void main(String[] args) { @@ -710,6 +718,82 @@ public class PayService { return Result.success(CodeEnum.SUCCESS); } + public Result vipPay(String orderId, String token, Integer vipUserId) { + if (ObjectUtil.isEmpty(orderId)) { + return Result.fail(CodeEnum.PARAM); + } + + TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); + + if (ObjectUtil.isEmpty(orderInfo)) { + return Result.fail(CodeEnum.ORDERNOEXIST); + } + + if (!"unpaid".equals(orderInfo.getStatus())) { + return Result.fail(CodeEnum.ORDERSTATUSERROR); + } + + + int count = tbShopPayTypeMapper.countSelectByShopIdAndPayType(orderInfo.getShopId(), "cash"); + if (count < 1) { + return Result.fail(CodeEnum.PAYTYPENOEXIST); + } + + // 扣减会员余额 + TbShopUser shopUser = mpShopUserMapper.selectOne(new LambdaUpdateWrapper() + .eq(TbShopUser::getStatus, 1) + .eq(TbShopUser::getId, vipUserId)); + + if (shopUser == null) { + return Result.fail("用户不存在或已被禁用"); + } + + long flag = mpShopUserMapper.decrBalance(vipUserId, orderInfo.getOrderAmount()); + if (flag < 1) { + return Result.fail("余额不足或扣除余额失败"); + } + + TbShopUserFlow userFlow = new TbShopUserFlow(); + userFlow.setAmount(orderInfo.getOrderAmount()); + userFlow.setBalance(shopUser.getAmount()); + userFlow.setShopUserId(shopUser.getId()); + userFlow.setBizCode("vipCardCash"); + userFlow.setBizName("代客下单会员余额支付"); + userFlow.setCreateTime(DateUtil.date()); + userFlow.setType("-"); + mpShopUserFlowMapper.insert(userFlow); + + + orderInfo.setPayAmount(orderInfo.getOrderAmount()); + orderInfo.setPayType("cash"); + orderInfo.setStatus("closed"); + orderInfo.setPayOrderNo("cash".concat(SnowFlakeUtil.generateOrderNo())); + tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); + //更新购物车状态 + int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); + + tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId), "closed"); + log.info("更新购物车:{}", cartCount); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("token", token); + jsonObject.put("type", "create"); + jsonObject.put("orderId", orderId); + + producer.putOrderCollect(jsonObject.toJSONString()); + + + producer.printMechine(orderId); + + // 发送库存记录mq消息 + JSONObject mqData = new JSONObject(); + mqData.put("orderId", orderId); + mqData.put("type", "pc"); + producer.sendStockSaleMsg(mqData); + + return Result.success(CodeEnum.SUCCESS); + } + @Transactional(rollbackFor = Exception.class) public Result cashPay(String orderId, String token,BigDecimal payAmount,BigDecimal discountAmount) { if (ObjectUtil.isEmpty(orderId)) { diff --git a/src/main/resources/mapper/TbOrderInfoMapper.xml b/src/main/resources/mapper/TbOrderInfoMapper.xml index 6d79ed9..b132347 100644 --- a/src/main/resources/mapper/TbOrderInfoMapper.xml +++ b/src/main/resources/mapper/TbOrderInfoMapper.xml @@ -47,6 +47,7 @@ + @@ -56,7 +57,7 @@ discount_amount, table_id, small_change, send_type, order_type, product_type, status, billing_id, merchant_id, shop_id, is_vip, member_id, user_id, product_score, deduct_score, user_coupon_id, user_coupon_amount, refund_able, paid_time, is_effect, is_group, - updated_at, `system_time`, created_at, is_accepted, pay_order_no,trade_day,`source`,remark,master_id,`table_name`,out_number + updated_at, `system_time`, created_at, is_accepted, pay_order_no,trade_day,`source`,remark,master_id,`table_name`,out_number, use_type