ソースを参照

fix: 修复微信用户信息并发调用change接口时主键重复的问题

zengweijie 2 年 前
コミット
48b467b02e

+ 1 - 13
smsb-customer-manager-app/src/main/java/com/inspur/customer/service/wechat/WechatAppletUserServiceImpl.java

@@ -28,19 +28,7 @@ public class WechatAppletUserServiceImpl extends ServiceImpl<WechatAppletUserMap
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void change(WechatAppletUserDto dto) {
-        WechatAppletUser wechatAppletUser = super.getOne(Wrappers.lambdaQuery(WechatAppletUser.class).eq(WechatAppletUser::getOpenid, dto.getOpenid()));
-        if (wechatAppletUser != null) {
-            super.update(Wrappers.lambdaUpdate(WechatAppletUser.class)
-                .set(WechatAppletUser::getOpenid, dto.getOpenid())
-                .set(Objects.nonNull(dto.getPhoneNumber()), WechatAppletUser::getPhoneNumber, dto.getPhoneNumber())
-                .set(Objects.nonNull(dto.getNickName()), WechatAppletUser::getNickName, dto.getNickName())
-                .set(Objects.nonNull(dto.getAvatarUrl()), WechatAppletUser::getAvatarUrl, dto.getAvatarUrl())
-                .set(Objects.nonNull(dto.getGender()), WechatAppletUser::getGender, dto.getGender())
-                .set(Objects.nonNull(dto.getUnionid()), WechatAppletUser::getUnionid, dto.getUnionid())
-                .eq(WechatAppletUser::getOpenid, dto.getOpenid()));
-        } else {
-            super.save(BeanCopyUtils.copy(dto, WechatAppletUser.class));
-        }
+        super.baseMapper.change(BeanCopyUtils.copy(dto, WechatAppletUser.class));
     }
 
     @Override

+ 0 - 2
smsb-customer-manager-client/src/main/java/com/inspur/customer/object/wechat/WechatAppletUserDto.java

@@ -20,8 +20,6 @@ import java.io.Serializable;
 @NoArgsConstructor
 public class WechatAppletUserDto implements Serializable {
     private static final long serialVersionUID = -4789099819647373586L;
-    private Long id;
-
     @NotEmpty(message = "openid不能为空")
     private String openid;
     

+ 2 - 0
smsb-customer-manager-infrastructure/src/main/java/com/inspur/customer/infrastructure/mapper/wechat/WechatAppletUserMapper.java

@@ -3,6 +3,7 @@ package com.inspur.customer.infrastructure.mapper.wechat;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.inspur.customer.infrastructure.object.wechat.WechatAppletUser;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @author zengweijie
@@ -11,4 +12,5 @@ import org.apache.ibatis.annotations.Mapper;
  **/
 @Mapper
 public interface WechatAppletUserMapper extends BaseMapper<WechatAppletUser> {
+    void change(@Param("user") WechatAppletUser wechatAppletUser);
 }

+ 1 - 4
smsb-customer-manager-infrastructure/src/main/java/com/inspur/customer/infrastructure/object/wechat/WechatAppletUser.java

@@ -17,10 +17,7 @@ import java.io.Serializable;
 @TableName("wechat_applet_user")
 public class WechatAppletUser implements Serializable {
     private static final long serialVersionUID = 2228544833202173914L;
-
-    @TableId(type = IdType.ASSIGN_ID)
-    private Long id;
-
+    @TableId(type = IdType.INPUT)
     private String openid;
 
     private String unionid;

+ 53 - 1
smsb-customer-manager-infrastructure/src/main/resources/mapper/wechat/WechatAppletUserMapper.xml

@@ -1,5 +1,57 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.inspur.customer.infrastructure.mapper.wechat.WechatAppletUserMapper">
-
+    <insert id="change">
+        INSERT INTO `wechat_applet_user`(`openid`
+        <if test="user.unionid != null">
+            , `unionid`
+        </if>
+        <if test="user.nickName != null">
+            , `nick_name`
+        </if>
+        <if test="user.avatarUrl != null">
+            , `avatar_url`
+        </if>
+        <if test="user.gender != null">
+            , `gender`
+        </if>
+        <if test="user.phoneNumber != null">
+            , `phone_number`
+        </if>
+        )
+        VALUES
+        (#{user.openid}
+        <if test="user.unionid != null">
+            , #{user.unionid}
+        </if>
+        <if test="user.nickName != null">
+            , #{user.nickName}
+        </if>
+        <if test="user.avatarUrl != null">
+            , #{user.avatarUrl}
+        </if>
+        <if test="user.gender != null">
+            , #{user.gender}
+        </if>
+        <if test="user.phoneNumber != null">
+            , #{user.phoneNumber}
+        </if>
+        )
+        ON DUPLICATE KEY UPDATE `openid` = VALUES (`openid`)
+        <if test="user.unionid != null">
+            , `unionid` = VALUES (`unionid`)
+        </if>
+        <if test="user.nickName != null">
+            , `nick_name` = VALUES (`nick_name`)
+        </if>
+        <if test="user.avatarUrl != null">
+            , `avatar_url` = VALUES (`avatar_url`)
+        </if>
+        <if test="user.gender != null">
+            , `gender` = VALUES (`gender`)
+        </if>
+        <if test="user.phoneNumber != null">
+            , `phone_number` = VALUES (`phone_number`)
+        </if>
+    </insert>
 </mapper>