Ver Fonte

APP微信绑定新增APPOpenId

wjj há 1 semana atrás
pai
commit
6c0aa4e1e0

+ 10 - 0
fs-admin/src/main/java/com/fs/his/controller/FsPackageController.java

@@ -202,4 +202,14 @@ public class FsPackageController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询套餐包奖品选项列表
+     */
+    @GetMapping("/prizeOptions")
+    public TableDataInfo selectPrizePackageList()
+    {
+        List<OptionsVO> list = fsPackageService.selectPrizePackageList();
+        return getDataTable(list);
+    }
+
 }

+ 4 - 0
fs-service/src/main/java/com/fs/app/domain/FsAppRole.java

@@ -25,6 +25,10 @@ public class FsAppRole extends BaseEntity{
     @Excel(name = "APP角色名称")
     private String roleName;
 
+    /** APP角色类型:1-通用 2-积分 3-套餐包 4-商城商品 */
+    @Excel(name = "APP角色类型:1-通用 2-积分 3-套餐包 4-商城商品")
+    private Integer roleType;
+
     /** 注册奖励类型:1-红包 2-积分 3-商品 */
     @Excel(name = "注册奖励类型:1-红包 2-积分 3-商品")
     private Integer registerRewardType;

+ 5 - 0
fs-service/src/main/java/com/fs/app/mapper/FsAppRoleMapper.java

@@ -4,6 +4,7 @@ import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.app.domain.FsAppRole;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * APP角色Mapper接口
@@ -76,4 +77,8 @@ public interface FsAppRoleMapper extends BaseMapper<FsAppRole>{
      * @return FsAppRole 最高级别的角色信息
      */
     FsAppRole selectHighestLevelAppRoleByUserId(@Param("userId") Long userId, @Param("levelSortAsc") String levelSortAsc);
+
+    //根据角色类型获取角色信息列表
+    @Select("SELECT * FROM fs_app_role WHERE role_type = #{roleType}")
+    List<FsAppRole> selectFsAppRoleListByRoleType(@Param("roleType") Integer roleType);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/app/vo/FsAppRoleVO.java

@@ -16,6 +16,9 @@ public class FsAppRoleVO {
     /** APP角色名称 */
     private String roleName;
 
+    /** APP角色类型:1-通用 2-积分 3-套餐包 4-商城商品 */
+    private Integer roleType;
+
     /** 注册奖励类型:1-红包 2-积分 3-商品 */
     private Integer registerRewardType;
 

+ 4 - 1
fs-service/src/main/java/com/fs/his/mapper/FsPackageMapper.java

@@ -71,9 +71,12 @@ public interface FsPackageMapper
     @Select("select package_id dictValue,package_name dictLabel from fs_package where is_show = 0 and status = 1 and (product_type = 1 or product_type = 2 or product_type = 3 )  order by sort")
     List<OptionsVO> selectAllPrivatePackageList();
 
-    //APP商品奖品列表
+    //APP商品列表
     @Select("select package_id dictValue,package_name dictLabel from fs_package where  status = 1 order by sort")
     List<OptionsVO> selectPackageList();
+    //APP商品奖品列表
+    @Select("select package_id dictValue,package_name dictLabel,product_type from fs_package where  status = 1 AND product_type != 1 AND product_type != 2 AND product_type != 3  order by sort")
+    List<OptionsVO> selectPrizePackageList();
 
     @Select({"<script> " +
             "select * from fs_package "+

+ 4 - 0
fs-service/src/main/java/com/fs/his/mapper/FsStoreOrderMapper.java

@@ -1214,4 +1214,8 @@ public interface FsStoreOrderMapper
 
     @Select("SELECT * FROM fs_store_order WHERE user_id = #{userId} and `status` IN(3,4) AND is_receive_notice = 0")
     List<FsStoreOrder> selectNoReceiveOrderList(@Param("userId") Long userId);
+
+    //查询用户购买的套餐包id
+    @Select("SELECT package_id  FROM fs_store_order WHERE user_id = #{userId} AND is_pay = 1 AND refund_status = 0 AND app_reward_flag IS NULL AND `status` NOT IN (-3,-2,-1,1)")
+    List<Long> selectUserBuyOrderList(@Param("userId") Long userId);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java

@@ -417,4 +417,7 @@ public interface FsUserMapper
     void updatePasswordByPhone(@Param("password")String password, @Param("encryptPhone")String encryptPhone);
 
     List<FsUser> selectFsUserListByPhone(String phone);
+
+    @Select("SELECT user_id FROM fs_user WHERE app_roles IS  NULL LIMIT 1000")
+    List<Long> selectFsUserNoAppRole();
 }

+ 1 - 0
fs-service/src/main/java/com/fs/his/service/IFsPackageService.java

@@ -97,4 +97,5 @@ public interface IFsPackageService
     List<OptionsVO> selectAllPrivatePackageList();
 
     List<OptionsVO> selectPackageList();
+    List<OptionsVO> selectPrizePackageList();
 }

+ 8 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserService.java

@@ -5,6 +5,7 @@ import java.util.List;
 import java.util.Map;
 
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import com.fs.app.domain.FsAppRole;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
 import com.fs.common.core.page.TableDataInfo;
@@ -228,4 +229,11 @@ public interface IFsUserService
     List<FsUser> selectFsUserListByPhone(String phone);
 
     R updatePasswordByPhone(String password, String encryptPhone);
+
+    /**
+     * 用户添加APP角色
+     * @param userId 用户id
+     * @param appRoleList 角色列表
+     */
+    void userAddAppRole(Long userId, List<FsAppRole> appRoleList);
 }

+ 5 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsPackageServiceImpl.java

@@ -354,5 +354,10 @@ public class FsPackageServiceImpl implements IFsPackageService {
     public List<OptionsVO> selectPackageList() {
         return fsPackageMapper.selectPackageList();
     }
+
+    @Override
+    public List<OptionsVO> selectPrizePackageList() {
+        return fsPackageMapper.selectPrizePackageList();
+    }
 }
 

+ 107 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java

@@ -16,6 +16,7 @@ import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fs.app.domain.FsAppRole;
 import com.fs.common.constant.HttpStatus;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
@@ -23,6 +24,7 @@ import com.fs.common.core.domain.entity.SysDictData;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.enums.ImTypeEnum;
+import com.fs.common.exception.CustomException;
 import com.fs.common.param.LoginMaWxParam;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.DictUtils;
@@ -69,8 +71,10 @@ import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
 import com.fs.hisStore.service.IFsUserBillScrmService;
 import com.fs.hisStore.vo.FsCompanyUserListQueryVO;
 import com.fs.qw.cache.IQwExternalContactCacheService;
+import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.dto.FsUserTransferParamDTO;
 import com.fs.qw.param.QwFsUserParam;
+import com.fs.qw.service.IQwExternalContactService;
 import com.fs.qw.vo.QwFsUserVO;
 import com.fs.store.domain.FsUserCourseCount;
 import com.fs.store.mapper.FsUserCourseCountMapper;
@@ -86,8 +90,10 @@ import com.fs.watch.domain.vo.FsUserAndCompanyAndDoctorVo;
 import com.fs.watch.service.WatchUserService;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.google.common.collect.Lists;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.http.util.Asserts;
+import org.checkerframework.checker.nullness.qual.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -179,6 +185,9 @@ public class FsUserServiceImpl implements IFsUserService {
     @Autowired
     private IFsUserWxService fsUserWxService;
 
+    @Autowired
+    private IQwExternalContactService qwExternalContactService;
+
 
     /**
      * 查询用户
@@ -1394,4 +1403,102 @@ public class FsUserServiceImpl implements IFsUserService {
         return R.ok();
     }
 
+    @Override
+    public void userAddAppRole(Long userId,List<FsAppRole> appRoleList) {
+        FsUser fsUser = fsUserMapper.selectFsUserByUserId(userId);
+        if (fsUser == null) {
+            throw new CustomException("未找到用户信息");
+        }
+        //1.角色数据
+        //用户添加角色数据
+        List<Long> addRoleList = Lists.newArrayList();
+
+        //通用角色
+        List<FsAppRole> commonRoleList = appRoleList
+                .stream()
+                .filter(fsAppRole -> fsAppRole.getRoleType() == 1)
+                .collect(Collectors.toList());
+        //标签角色
+        List<FsAppRole> tagRoleList = appRoleList
+                .stream()
+                .filter(fsAppRole -> fsAppRole.getRoleType() == 2)
+                .collect(Collectors.toList());
+        //套餐包角色
+        List<FsAppRole> packageRoleList = appRoleList
+                .stream()
+                .filter(fsAppRole -> fsAppRole.getRoleType() == 3)
+                .collect(Collectors.toList());
+        //商城商品角色
+        List<FsAppRole> productRoleList = appRoleList
+                .stream()
+                .filter(fsAppRole -> fsAppRole.getRoleType() == 4)
+                .collect(Collectors.toList());
+        //2.匹配添加角色
+        //通用
+        if (CollectionUtils.isNotEmpty(commonRoleList)) {
+            List<Long> commonIds = commonRoleList.stream().map(FsAppRole::getId).collect(Collectors.toList());
+            addRoleList.addAll(commonIds);
+        }
+        //角色标签
+        if (CollectionUtils.isNotEmpty(tagRoleList)) {
+            //用户标签
+            List<String> userTags = qwExternalContactService.selectTagsByFsUserId(userId);
+            if (CollectionUtils.isNotEmpty(userTags)) {
+                tagRoleList.forEach(tagAppRole -> {
+                    if (StringUtils.isNotEmpty(tagAppRole.getRoleTags())) {
+                        List<String> roleTags = Arrays.stream(tagAppRole.getRoleTags().split(",")).collect(Collectors.toList());
+                        boolean matchTag = userTags.stream().anyMatch(roleTags::contains);
+                        if (matchTag) {
+                            addRoleList.add(tagAppRole.getId());
+                        }
+                    }
+                });
+            }
+        }
+        //角色套餐包
+        if (CollectionUtils.isNotEmpty(packageRoleList)) {
+            List<Long> userBuyPackageId = fsStoreOrderMapper.selectUserBuyOrderList(userId);
+            if (CollectionUtils.isNotEmpty(userBuyPackageId)) {
+                packageRoleList.forEach(packageAppRole -> {
+                    if (StringUtils.isNotEmpty(packageAppRole.getRolePackageProductIds())) {
+                        List<Long> packageIds = Arrays.stream(packageAppRole.getRolePackageProductIds().split(","))
+                                .map(String::trim)
+                                .map(Long::parseLong)
+                                .collect(Collectors.toList());
+                        boolean matchPackage = userBuyPackageId.stream().anyMatch(packageIds::contains);
+                        if (matchPackage) {
+                            addRoleList.add(packageAppRole.getId());
+                        }
+                    }
+                });
+            }
+        }
+
+        //角色商城商品
+        if (CollectionUtils.isNotEmpty(productRoleList)) {
+            List<Long> userProductIds = storeOrderMapper.selectUserBuyProductIds(userId);
+            if (CollectionUtils.isNotEmpty(userProductIds)) {
+                productRoleList.forEach(productAppRole -> {
+                   if (StringUtils.isNotEmpty(productAppRole.getRoleStoreProductIds())) {
+                       List<Long> productIds = Arrays.stream(productAppRole.getRoleStoreProductIds().split(","))
+                               .map(String::trim)
+                               .map(Long::parseLong)
+                               .collect(Collectors.toList());
+
+                       boolean matchProduct = userProductIds.stream().anyMatch(productIds::contains);
+                       if (matchProduct) {
+                           addRoleList.add(productAppRole.getId());
+                       }
+                   }
+                });
+            }
+        }
+        //3.更新用户角色信息
+        if (CollectionUtils.isNotEmpty(addRoleList)) {
+            FsUser map = new FsUser();
+            map.setUserId(userId);
+            map.setAppRoles(StringUtils.join(addRoleList, ","));
+            fsUserMapper.updateFsUser(map);
+        }
+    }
 }

+ 3 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java

@@ -1236,4 +1236,7 @@ public interface FsStoreOrderScrmMapper
 
     @Select("SELECT id,delivery_id,order_code,user_id  FROM fs_store_order_scrm WHERE `status` IN(2,3) AND order_code NOT IN (SELECT order_code FROM fs_wx_express_task) AND delivery_id IS NOT NULL ")
     List<FsStoreOrderScrm> selectNoWxOrder();
+
+    @Select("SELECT product_id FROM fs_store_order_item_scrm WHERE order_id IN ( SELECT id FROM fs_store_order_scrm WHERE user_id = #{userId} AND paid = 1 AND refund_status = 0 AND app_reward_flag IS NULL AND `status` NOT IN (-3,-2,-1,0))")
+    List<Long> selectUserBuyProductIds(@Param("userId") Long userId);
 }

+ 2 - 0
fs-service/src/main/java/com/fs/qw/service/IQwExternalContactService.java

@@ -254,4 +254,6 @@ public interface IQwExternalContactService extends IService<QwExternalContact> {
     List<String> selectTagNameByFsUserId(Long fsUserId);
 
     void buyProductAddTag(Long fsUserId,Long packageId);
+
+    List<String> selectTagsByFsUserId(Long fsUserId);
 }

+ 21 - 0
fs-service/src/main/java/com/fs/qw/service/impl/QwExternalContactServiceImpl.java

@@ -5909,6 +5909,27 @@ public class QwExternalContactServiceImpl extends ServiceImpl<QwExternalContactM
         }
     }
 
+    @Override
+    public List<String> selectTagsByFsUserId(Long fsUserId) {
+        List<String> userTags = qwExternalContactMapper.selectTagsByFsUserId(fsUserId);
+        if (!CollectionUtils.isEmpty(userTags)) {
+            List<String> tags = Lists.newArrayList();
+            for (String tag : userTags) {
+                if (StringUtils.isNotEmpty(tag) && !Objects.equals(tag, "[]")) {
+                    Gson gson = new Gson();
+                    List<String> tagIds = gson.fromJson(
+                            tag,
+                            new TypeToken<List<String>>() {
+                            }.getType()
+                    );
+                    tags.addAll(tagIds);
+                }
+            }
+            return tags;
+        }
+        return Collections.emptyList();
+    }
+
 
     public Boolean getSopAiChatByRedis(String qwUserId,String corpId,String externalUserId){
 

+ 5 - 1
fs-service/src/main/resources/mapper/app/FsAppRoleMapper.xml

@@ -7,6 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <resultMap type="FsAppRole" id="FsAppRoleResult">
         <result property="id"    column="id"    />
         <result property="roleName"    column="role_name"    />
+        <result property="roleType"    column="role_type"    />
         <result property="registerRewardType"    column="register_reward_type"    />
         <result property="registerRedPacket"    column="register_red_packet"    />
         <result property="registerProductId"    column="register_product_id"    />
@@ -30,7 +31,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectFsAppRoleVo">
-        select id, role_name, register_reward_type, register_red_packet, register_product_id, register_product_type, register_integral, course_day, course_reward_type, course_red_packet, course_integral, course_product_type, course_product_id, course_need_day, course_reward_rule_type, course_reward_rule, role_level, role_tags, role_package_product_ids, role_store_product_ids, create_time, update_time from fs_app_role
+        select id, role_name, role_type, register_reward_type, register_red_packet, register_product_id, register_product_type, register_integral, course_day, course_reward_type, course_red_packet, course_integral, course_product_type, course_product_id, course_need_day, course_reward_rule_type, course_reward_rule, role_level, role_tags, role_package_product_ids, role_store_product_ids, create_time, update_time from fs_app_role
     </sql>
 
     <select id="selectFsAppRoleList" parameterType="FsAppRole" resultMap="FsAppRoleResult">
@@ -161,6 +162,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         insert into fs_app_role
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="roleName != null">role_name,</if>
+            <if test="roleType != null">role_type,</if>
             <if test="registerRewardType != null">register_reward_type,</if>
             <if test="registerRedPacket != null">register_red_packet,</if>
             <if test="registerProductId != null">register_product_id,</if>
@@ -184,6 +186,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="roleName != null">#{roleName},</if>
+            <if test="roleType != null">#{roleType},</if>
             <if test="registerRewardType != null">#{registerRewardType},</if>
             <if test="registerRedPacket != null">#{registerRedPacket},</if>
             <if test="registerProductId != null">#{registerProductId},</if>
@@ -211,6 +214,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         update fs_app_role
         <trim prefix="SET" suffixOverrides=",">
             <if test="roleName != null">role_name = #{roleName},</if>
+            <if test="roleType != null">role_type = #{roleType},</if>
             <if test="registerRewardType != null">register_reward_type = #{registerRewardType},</if>
             <if test="registerRedPacket != null">register_red_packet = #{registerRedPacket},</if>
             <if test="registerProductId != null">register_product_id = #{registerProductId},</if>

+ 7 - 0
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -13,6 +13,8 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.exception.ServiceException;
 import com.fs.common.service.ISmsService;
+import com.fs.common.utils.ServletUtils;
+import com.fs.common.utils.ip.IpUtils;
 import com.fs.common.utils.sign.Md5Utils;
 import com.fs.core.config.WxOpenProperties;
 import com.fs.his.config.FsSysConfig;
@@ -406,6 +408,11 @@ public class AppLoginController extends AppBaseController{
                 user.setAvatar(avatar);
                 user.setSex(sex);
                 user.setUnionId(unionid);
+                if(StringUtils.isEmpty(user.getAppOpenId())){
+                    user.setAppOpenId(openid);
+                }
+                String ipAddr = IpUtils.getIpAddr(ServletUtils.getRequest());
+                user.setLastIp(ipAddr);
                 if (userService.updateFsUser(user)>0){
                     return generateTokenAndReturn(user);
                 }