From 9c9c7d860843c4b5e5b3f92ad5933308749a9bfb Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Thu, 11 Jul 2024 09:36:26 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=BA=93=E5=AD=98=E9=A2=84=E8=AD=A6=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=AD=E4=BF=AE=E6=94=B9=202.=E5=BA=93=E5=AD=98?= =?UTF-8?q?=E9=A2=84=E8=AD=A630=E5=88=86=E9=92=9F=E5=86=85=E5=8F=AA?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E4=B8=80=E6=AC=A1=203.=E7=82=B9=E6=AD=8C?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E6=88=90=E5=8A=9F=E5=90=8C=E6=AD=A5=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=B9=B3=E5=8F=B0=E8=AE=A2=E5=8D=95=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/NotifyController.java | 13 ++-- .../dao/TbShopSongOrderMapper.java | 10 ++- .../entity/TbShopSongOrder.java | 18 +++-- .../system/cashierservice/redis/RedisCst.java | 1 + .../cashierservice/service/CartService.java | 13 +++- .../cashierservice/service/PayService.java | 29 +------- .../service/TbShopSongOrderService.java | 2 +- .../impl/TbShopSongOrderServiceImpl.java | 3 +- .../mapper/TbShopSongOrderMapper.xml | 48 +++++++------ .../resources/mapper/TbUserInfoMapper.xml | 68 +++++++++---------- 10 files changed, 100 insertions(+), 105 deletions(-) diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java index 13eb3e7..a6b4b59 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/NotifyController.java @@ -55,15 +55,9 @@ public class NotifyController { JSONObject object=JSONUtil.parseObj(map.get("bizData").toString()); if(ObjectUtil.isNotEmpty(object)&&object.containsKey("state")){ if("TRADE_SUCCESS".equals(object.get("state").toString())){ - JSONObject extParam = object.getJSONObject("extParam"); String orderNo=object.get("mchOrderNo").toString(); - if (ObjectUtil.isNotEmpty(extParam)&&ObjectUtil.isNotNull(extParam)&&PayTypeConstant.MINI_PAY.equals(extParam.getStr("payType"))) { - log.info("接收到微信点歌支付成功回调,订单编号:{}", orderNo); - return payService.songPaySuccess(orderNo, extParam.getStr("orderNo")); - }else { - String tradeNo=object.get("payOrderId").toString(); - return payService.fstMemberInSuccess(orderNo,tradeNo); - } + String tradeNo=object.get("payOrderId").toString(); + return payService.fstMemberInSuccess(orderNo,tradeNo); } } } @@ -159,8 +153,9 @@ public class NotifyController { if (ObjectUtil.isNotEmpty(map) && map.containsKey("code") && "000000".equals(map.get("code") + "")) { JSONObject object = JSONUtil.parseObj(map.get("bizData")); if (ObjectUtil.isNotEmpty(object) && object.containsKey("state") && "TRADE_SUCCESS".equals(object.getStr("state"))) { + String tradeNo=object.get("payOrderId").toString(); String orderNo = object.getStr("mchOrderNo"); - return payService.songOrderSuccess(orderNo, DateUtils.getTime(new Date())); + return payService.songOrderSuccess(orderNo, tradeNo); } } return null; diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopSongOrderMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopSongOrderMapper.java index 37bd641..9634a95 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopSongOrderMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopSongOrderMapper.java @@ -11,7 +11,7 @@ import java.util.Map; /** * @author Administrator * @description 针对表【tb_shop_song_order】的数据库操作Mapper -* @createDate 2024-07-09 15:23:30 +* @createDate 2024-07-11 09:24:20 * @Entity com.chaozhanggui.system.cashierservice.entity.TbShopSongOrder */ public interface TbShopSongOrderMapper { @@ -38,6 +38,14 @@ public interface TbShopSongOrderMapper { " AND a.state = #{state}") List> selectByUserId(@Param("openId") String openId, @Param("state") Integer state); + @Select(" SELECT\n" + + " *\n" + + " FROM\n" + + " tb_shop_song_order AS a\n" + + " LEFT JOIN tb_shop_song AS b ON a.song_id = b.id\n" + + " WHERE\n" + + " a.open_id = #{openId}\n" + + " AND a.id=#{id}") Map selectByUserIdAndId(@Param("openId") String openId, @Param("id") Integer id); @Select("select * from fycashier.tb_shop_song_order where order_no=#{orderNo};") diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopSongOrder.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopSongOrder.java index 206b519..af3c05e 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopSongOrder.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopSongOrder.java @@ -6,13 +6,13 @@ import java.util.Date; import lombok.Data; /** - * + * * @TableName tb_shop_song_order */ @Data public class TbShopSongOrder implements Serializable { /** - * + * */ private Integer id; @@ -27,7 +27,7 @@ public class TbShopSongOrder implements Serializable { private String songName; /** - * 用户id + * 用户openId */ private String openId; @@ -81,6 +81,11 @@ public class TbShopSongOrder implements Serializable { */ private BigDecimal realMoney; + /** + * 平台订单号 + */ + private String payOrderId; + private static final long serialVersionUID = 1L; @Override @@ -108,7 +113,8 @@ public class TbShopSongOrder implements Serializable { && (this.getToName() == null ? other.getToName() == null : this.getToName().equals(other.getToName())) && (this.getNote() == null ? other.getNote() == null : this.getNote().equals(other.getNote())) && (this.getShopId() == null ? other.getShopId() == null : this.getShopId().equals(other.getShopId())) - && (this.getRealMoney() == null ? other.getRealMoney() == null : this.getRealMoney().equals(other.getRealMoney())); + && (this.getRealMoney() == null ? other.getRealMoney() == null : this.getRealMoney().equals(other.getRealMoney())) + && (this.getPayOrderId() == null ? other.getPayOrderId() == null : this.getPayOrderId().equals(other.getPayOrderId())); } @Override @@ -129,6 +135,7 @@ public class TbShopSongOrder implements Serializable { result = prime * result + ((getNote() == null) ? 0 : getNote().hashCode()); result = prime * result + ((getShopId() == null) ? 0 : getShopId().hashCode()); result = prime * result + ((getRealMoney() == null) ? 0 : getRealMoney().hashCode()); + result = prime * result + ((getPayOrderId() == null) ? 0 : getPayOrderId().hashCode()); return result; } @@ -152,8 +159,9 @@ public class TbShopSongOrder implements Serializable { sb.append(", note=").append(note); sb.append(", shopId=").append(shopId); sb.append(", realMoney=").append(realMoney); + sb.append(", payOrderId=").append(payOrderId); sb.append(", serialVersionUID=").append(serialVersionUID); sb.append("]"); return sb.toString(); } -} +} \ No newline at end of file diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/redis/RedisCst.java b/src/main/java/com/chaozhanggui/system/cashierservice/redis/RedisCst.java index e249a08..398473b 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/redis/RedisCst.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/redis/RedisCst.java @@ -24,4 +24,5 @@ public class RedisCst { public static final String OUT_NUMBER="ORDER:NUMBER:"; // 创建订单锁 public static final String CREATE_ORDER_LOCK = "CREATE_ORDER_LOCK:"; + public static final String SEND_STOCK_WARN_MSG = "SEND_STOCK_WARN_MSG:"; } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java index bbb067f..eaea7c0 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java @@ -460,9 +460,16 @@ public class CartService { ) { List shopOpenIds = shopOpenIdMapper.selectByShopId(Integer.valueOf(product.getShopId())); shopOpenIds.forEach(item -> { - wechatUtil.sendStockWarnMsg(shopInfo.getShopName(), product.getName(), - product.getIsDistribute() == 1 ? String.valueOf(product.getStockNumber() - num) : String.valueOf(productSku.getStockNumber() - num), - "耗材库存不足,请及时补充。", item.getOpenId()); + String message = redisUtil.getMessage(RedisCst.SEND_STOCK_WARN_MSG + product.getId() + ":" + item.getOpenId()); + if (message == null) { + wechatUtil.sendStockWarnMsg(shopInfo.getShopName(), product.getName(), + product.getIsDistribute() == 1 ? String.valueOf(product.getStockNumber() - num) : String.valueOf(productSku.getStockNumber() - num), + "商品库存不足,请及时补充。", item.getOpenId()); + redisUtil.saveMessage(RedisCst.SEND_STOCK_WARN_MSG + product.getId() + ":" + item.getOpenId(), product.getId().toString(), 60 * 30L); + }else { + log.info("{}已在30分钟内推送过消息,跳过发送", item.getOpenId()); + } + }); } } 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 cc22c8d..a6375d4 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -1205,30 +1205,7 @@ public class PayService { PushToClientChannelHandlerAdapter.getInstance().AppSendInfoV1(orderInfo.getShopId(), orderInfo.getOrderNo(), client); } - /** - * 点歌支付成功 - * - * @param mchOrderNo 商户订单编号 - * @param orderNo - * @return - */ - public String songPaySuccess(String mchOrderNo, String orderNo) { - TbMemberIn memberIn = tbMemberInMapper.selectByOrderNo(mchOrderNo); - if (ObjectUtil.isEmpty(memberIn)) { - return "充值记录不存在"; - } - if (!"7".equals(memberIn.getStatus())) { - return "订单已处理"; - } - memberIn.setTradeNo(orderNo); - memberIn.setStatus("0"); - memberIn.setUpdateTime(new Date()); - tbMemberInMapper.updateByPrimaryKeySelective(memberIn); - - shopSongOrderService.successPay(orderNo); - return "success"; - } public Result paySongOrder(String openId, String shopId, Integer orderId, String ip, TbMerchantThirdApply thirdApply) throws JsonProcessingException { if (ObjectUtil.isEmpty(openId) || Objects.isNull(openId)) { @@ -1237,7 +1214,7 @@ public class PayService { TbShopSongOrder songOrder = tbShopSongOrderMapper.selectByPrimaryKey(Long.valueOf(orderId)); - if (songOrder.getState() != 0 && songOrder.getState() != -1) { + if (songOrder == null || songOrder.getState() != 0 && songOrder.getState() != -1) { return Result.fail("订单状态异常,不允许支付"); } @@ -1287,14 +1264,14 @@ public class PayService { } @Transactional(rollbackFor = Exception.class) - public String songOrderSuccess(String mchOrderNo, String orderNo) { + public String songOrderSuccess(String mchOrderNo, String tradeNo) { TbShopSongOrder songOrder = tbShopSongOrderMapper.selectByOrderNo(mchOrderNo); if (ObjectUtil.isEmpty(songOrder)) { return "订单信息不存在"; } log.info("更新点歌订单:{}", songOrder); - shopSongOrderService.successPay(mchOrderNo); + shopSongOrderService.successPay(mchOrderNo, tradeNo); return "SUCCESS"; } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/TbShopSongOrderService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/TbShopSongOrderService.java index 2725025..4de0136 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/TbShopSongOrderService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/TbShopSongOrderService.java @@ -7,7 +7,7 @@ package com.chaozhanggui.system.cashierservice.service; */ public interface TbShopSongOrderService { - void successPay(String orderNo); + void successPay(String orderNo, String tradeNo); void clearExpireOrder(); } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopSongOrderServiceImpl.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopSongOrderServiceImpl.java index 829b239..a1c2494 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopSongOrderServiceImpl.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/impl/TbShopSongOrderServiceImpl.java @@ -26,13 +26,14 @@ public class TbShopSongOrderServiceImpl } @Override - public void successPay(String orderNo) { + public void successPay(String orderNo, String tradeNo) { TbShopSongOrder shopSongOrder = shopSongOrderMapper.selectByOrderNo(orderNo); if (shopSongOrder.getState().equals(1)) { log.warn("点歌支付成功,重复支付,订单编号:{}", orderNo); return; } shopSongOrder.setState(1); + shopSongOrder.setPayOrderId(tradeNo); shopSongOrder.setRealMoney(shopSongOrder.getPayMoney()); shopSongOrderMapper.updateByPrimaryKeySelective(shopSongOrder); shopSongMapper.incrNum(1, shopSongOrder.getSongId()); diff --git a/src/main/resources/mapper/TbShopSongOrderMapper.xml b/src/main/resources/mapper/TbShopSongOrderMapper.xml index d315a75..f14afd6 100644 --- a/src/main/resources/mapper/TbShopSongOrderMapper.xml +++ b/src/main/resources/mapper/TbShopSongOrderMapper.xml @@ -8,7 +8,7 @@ - + @@ -19,6 +19,7 @@ + @@ -26,19 +27,19 @@ open_id,pay_money,state, create_time,client_type,order_no, from_name,to_name,note, - shop_id,real_money + shop_id,real_money,pay_order_id delete from tb_shop_song_order - where id = #{id,jdbcType=INTEGER} + where id = #{id,jdbcType=INTEGER} insert into tb_shop_song_order @@ -46,12 +47,14 @@ ,open_id,pay_money,state ,create_time,client_type,order_no ,from_name,to_name,note - ,shop_id,real_money) + ,shop_id,real_money,pay_order_id + ) values (#{id,jdbcType=INTEGER},#{songId,jdbcType=INTEGER},#{songName,jdbcType=VARCHAR} - ,#{openId,jdbcType=INTEGER},#{payMoney,jdbcType=DECIMAL},#{state,jdbcType=TINYINT} + ,#{openId,jdbcType=VARCHAR},#{payMoney,jdbcType=DECIMAL},#{state,jdbcType=TINYINT} ,#{createTime,jdbcType=TIMESTAMP},#{clientType,jdbcType=TINYINT},#{orderNo,jdbcType=VARCHAR} ,#{fromName,jdbcType=VARCHAR},#{toName,jdbcType=VARCHAR},#{note,jdbcType=VARCHAR} - ,#{shopId,jdbcType=INTEGER},#{realMoney,jdbcType=DECIMAL}) + ,#{shopId,jdbcType=INTEGER},#{realMoney,jdbcType=DECIMAL},#{payOrderId,jdbcType=VARCHAR} + ) insert into tb_shop_song_order @@ -70,12 +73,13 @@ note, shop_id, real_money, + pay_order_id, #{id,jdbcType=INTEGER}, #{songId,jdbcType=INTEGER}, #{songName,jdbcType=VARCHAR}, - #{openId,jdbcType=INTEGER}, + #{openId,jdbcType=VARCHAR}, #{payMoney,jdbcType=DECIMAL}, #{state,jdbcType=TINYINT}, #{createTime,jdbcType=TIMESTAMP}, @@ -86,6 +90,7 @@ #{note,jdbcType=VARCHAR}, #{shopId,jdbcType=INTEGER}, #{realMoney,jdbcType=DECIMAL}, + #{payOrderId,jdbcType=VARCHAR}, @@ -98,7 +103,7 @@ song_name = #{songName,jdbcType=VARCHAR}, - open_id = #{openId,jdbcType=INTEGER}, + open_id = #{openId,jdbcType=VARCHAR}, pay_money = #{payMoney,jdbcType=DECIMAL}, @@ -130,15 +135,18 @@ real_money = #{realMoney,jdbcType=DECIMAL}, + + pay_order_id = #{payOrderId,jdbcType=VARCHAR}, + - where id = #{id,jdbcType=INTEGER} + where id = #{id,jdbcType=INTEGER} update tb_shop_song_order - set + set song_id = #{songId,jdbcType=INTEGER}, song_name = #{songName,jdbcType=VARCHAR}, - open_id = #{openId,jdbcType=INTEGER}, + open_id = #{openId,jdbcType=VARCHAR}, pay_money = #{payMoney,jdbcType=DECIMAL}, state = #{state,jdbcType=TINYINT}, create_time = #{createTime,jdbcType=TIMESTAMP}, @@ -148,18 +156,8 @@ to_name = #{toName,jdbcType=VARCHAR}, note = #{note,jdbcType=VARCHAR}, shop_id = #{shopId,jdbcType=INTEGER}, - real_money = #{realMoney,jdbcType=DECIMAL} - where id = #{id,jdbcType=INTEGER} + real_money = #{realMoney,jdbcType=DECIMAL}, + pay_order_id = #{payOrderId,jdbcType=VARCHAR} + where id = #{id,jdbcType=INTEGER} - - diff --git a/src/main/resources/mapper/TbUserInfoMapper.xml b/src/main/resources/mapper/TbUserInfoMapper.xml index b6340e1..d42bf03 100644 --- a/src/main/resources/mapper/TbUserInfoMapper.xml +++ b/src/main/resources/mapper/TbUserInfoMapper.xml @@ -53,15 +53,15 @@ id, amount, charge_amount, line_of_credit, consume_amount, consume_number, total_score, - lock_score, card_no, card_password, level_id, head_img, nick_name, telephone, wx_ma_app_id, - birth_day, sex, mini_app_open_id, open_id, union_id, code, type, identify, status, - parent_id, parent_level, parent_type, project_id, merchant_id, is_resource, is_online, - is_vip, vip_effect_at, tips, source_path, is_sales_person, is_attention_mp, city, - search_word, last_log_in_at, last_leave_at, created_at, updated_at, bind_parent_at, + lock_score, card_no, card_password, level_id, head_img, nick_name, telephone, wx_ma_app_id, + birth_day, sex, mini_app_open_id, open_id, union_id, code, type, identify, status, + parent_id, parent_level, parent_type, project_id, merchant_id, is_resource, is_online, + is_vip, vip_effect_at, tips, source_path, is_sales_person, is_attention_mp, city, + search_word, last_log_in_at, last_leave_at, created_at, updated_at, bind_parent_at, grand_parent_id,password,is_pwd,pwd - select * from tb_user_info where mini_app_open_id=#{openId} + select * from tb_user_info where mini_app_open_id=#{openId} limit 1 @@ -595,4 +595,4 @@ - \ No newline at end of file +