浏览代码

职业打假人处理

wangxy 1 周之前
父节点
当前提交
020374fab9

+ 64 - 0
fs-admin/src/main/java/com/fs/his/controller/FraudUsersController.java

@@ -0,0 +1,64 @@
+package com.fs.his.controller;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.his.domain.FraudUsers;
+import com.fs.his.service.IFraudUsersService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/his/fraudUsers")
+public class FraudUsersController extends BaseController {
+
+    @Autowired
+    private IFraudUsersService fraudUsersService;
+
+    @PreAuthorize("@ss.hasPermi('his:fraudUsers:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FraudUsers fraudUsers) {
+        startPage();
+        List<FraudUsers> list = fraudUsersService.selectFraudUsersList(fraudUsers);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('his:fraudUsers:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id) {
+        return AjaxResult.success(fraudUsersService.selectFraudUsersById(id));
+    }
+
+    @PreAuthorize("@ss.hasPermi('his:fraudUsers:add')")
+    @Log(title = "职业打假人名单", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FraudUsers fraudUsers) {
+        return AjaxResult.success(fraudUsersService.insertFraudUsers(fraudUsers));
+    }
+
+    @PreAuthorize("@ss.hasPermi('his:fraudUsers:edit')")
+    @Log(title = "职业打假人名单", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FraudUsers fraudUsers) {
+        return AjaxResult.success(fraudUsersService.updateFraudUsers(fraudUsers));
+    }
+
+    @PreAuthorize("@ss.hasPermi('his:fraudUsers:remove')")
+    @Log(title = "职业打假人名单", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        return toAjax(fraudUsersService.deleteFraudUsersByIds(ids));
+    }
+
+    @PreAuthorize("@ss.hasPermi('his:fraudUsers:sync')")
+    @Log(title = "职业打假人名单同步比对", businessType = BusinessType.OTHER)
+    @PostMapping("/sync")
+    public AjaxResult sync() {
+        return AjaxResult.success(fraudUsersService.syncFraudUsers());
+    }
+}

+ 34 - 0
fs-service/src/main/java/com/fs/his/domain/FraudUsers.java

@@ -0,0 +1,34 @@
+package com.fs.his.domain;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 职业打假人名单对象 fraud_users
+ */
+@Data
+public class FraudUsers implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    /** 名称 */
+    @ApiModelProperty("名称")
+    private String name;
+
+    /** 手机号 */
+    @ApiModelProperty("手机号")
+    private String phone;
+
+    /** 地址 */
+    @ApiModelProperty("地址")
+    private String address;
+
+    /** 职位 */
+    @ApiModelProperty("职位")
+    private String position;
+}

+ 22 - 0
fs-service/src/main/java/com/fs/his/mapper/FraudUsersMapper.java

@@ -0,0 +1,22 @@
+package com.fs.his.mapper;
+
+import com.fs.his.domain.FraudUsers;
+
+import java.util.List;
+
+public interface FraudUsersMapper {
+    FraudUsers selectFraudUsersById(Long id);
+
+    List<FraudUsers> selectFraudUsersList(FraudUsers fraudUsers);
+
+    int insertFraudUsers(FraudUsers fraudUsers);
+
+    int updateFraudUsers(FraudUsers fraudUsers);
+
+    int deleteFraudUsersById(Long id);
+
+    int deleteFraudUsersByIds(Long[] ids);
+
+    //根据手机号查询
+    FraudUsers  selectFraudUsersByPhone(String phone);
+}

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

@@ -96,4 +96,7 @@ public interface FsUserAddressMapper
      */
     @Select("select * from fs_user_address where help_company_user_id = #{companyUserId} and user_id = #{userId} and is_confirm = 0 limit 1")
     FsUserAddress selectFsUserAddressByCompanyUserId(@Param("companyUserId") Long companyUserId, @Param("userId") Long userId);
+
+    @Select("select distinct user_id from fs_user_address where is_del = 0 and concat(ifnull(province,''), ifnull(city,''), ifnull(district,''), ifnull(detail,'')) = #{fullAddress}")
+    List<Long> selectUserIdsByFullAddress(@Param("fullAddress") String fullAddress);
 }

+ 280 - 0
fs-service/src/main/java/com/fs/his/service/impl/FraudUsersServiceImpl.java

@@ -0,0 +1,280 @@
+package com.fs.his.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fs.common.utils.DateUtils;
+import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyTag;
+import com.fs.company.domain.CompanyTagUser;
+import com.fs.company.mapper.CompanyTagMapper;
+import com.fs.company.mapper.CompanyTagUserMapper;
+import com.fs.company.service.ICompanyTagService;
+import com.fs.course.domain.FsUserCompanyUser;
+import com.fs.course.mapper.FsUserCompanyUserMapper;
+import com.fs.his.domain.FraudUsers;
+import com.fs.his.domain.FsUser;
+import com.fs.his.mapper.FraudUsersMapper;
+import com.fs.his.mapper.FsUserAddressMapper;
+import com.fs.his.mapper.FsUserMapper;
+import com.fs.his.service.IFraudUsersService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.fs.his.utils.PhoneUtil.decryptPhone;
+import static com.fs.his.utils.PhoneUtil.encryptPhone;
+
+@Service
+public class FraudUsersServiceImpl implements IFraudUsersService {
+
+    private static final Integer BLACK_STATUS = 2;
+    private static final String PROFESSIONAL_FRAUD_TAG = "职业打假人";
+
+    @Resource
+    private FraudUsersMapper fraudUsersMapper;
+    @Resource
+    private FsUserMapper fsUserMapper;
+    @Resource
+    private FsUserAddressMapper fsUserAddressMapper;
+    @Resource
+    private FsUserCompanyUserMapper fsUserCompanyUserMapper;
+    @Resource
+    private CompanyTagMapper companyTagMapper;
+    @Resource
+    private CompanyTagUserMapper companyTagUserMapper;
+    @Resource
+    private ICompanyTagService companyTagService;
+
+    @Override
+    public FraudUsers selectFraudUsersById(Long id) {
+        FraudUsers fraudUsers = fraudUsersMapper.selectFraudUsersById(id);
+        if (fraudUsers !=null){
+            if(StringUtils.isNotEmpty(fraudUsers.getPhone()) && fraudUsers.getPhone().length()>11 ){
+                fraudUsers.setPhone(decryptPhone(fraudUsers.getPhone()));
+            }
+        }
+        return fraudUsers;
+    }
+
+    @Override
+    public List<FraudUsers> selectFraudUsersList(FraudUsers fraudUsers) {
+        List<FraudUsers> usersList = fraudUsersMapper.selectFraudUsersList(fraudUsers);
+        //解密手机号
+        if(CollUtil.isNotEmpty(usersList)){
+            usersList.forEach(users -> {
+                if(StringUtils.isNotEmpty(users.getPhone()) && users.getPhone().length()>11){
+                    users.setPhone(decryptPhone(users.getPhone()));
+                }
+            });
+        }
+        return  usersList;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> insertFraudUsers(FraudUsers fraudUsers) {
+        if (StringUtils.isNotEmpty(fraudUsers.getPhone())) {
+            fraudUsers.setPhone(normalizeFraudPhone(fraudUsers.getPhone()));
+        }
+        fraudUsersMapper.insertFraudUsers(fraudUsers);
+        return syncSingleFraudUsers(fraudUsersMapper.selectFraudUsersById(fraudUsers.getId()));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> updateFraudUsers(FraudUsers fraudUsers) {
+        if (StringUtils.isNotEmpty(fraudUsers.getPhone())) {
+            fraudUsers.setPhone(normalizeFraudPhone(fraudUsers.getPhone()));
+        }
+        fraudUsersMapper.updateFraudUsers(fraudUsers);
+        return syncSingleFraudUsers(fraudUsersMapper.selectFraudUsersById(fraudUsers.getId()));
+    }
+
+    @Override
+    public int deleteFraudUsersByIds(Long[] ids) {
+        return fraudUsersMapper.deleteFraudUsersByIds(ids);
+    }
+
+    @Override
+    public int deleteFraudUsersById(Long id) {
+        return fraudUsersMapper.deleteFraudUsersById(id);
+    }
+
+    @Override
+    public boolean isFraudUser(String phone, String address) {
+        FraudUsers query = new FraudUsers();
+        if (StringUtils.isNotBlank(phone)) {
+            query.setPhone(normalizeFraudPhone(phone));
+            List<FraudUsers> fraudUsersByPhone = fraudUsersMapper.selectFraudUsersList(query);
+            if (fraudUsersByPhone != null && !fraudUsersByPhone.isEmpty()) {
+                return true;
+            }
+        }
+        if (StringUtils.isNotBlank(address)) {
+            FraudUsers addressQuery = new FraudUsers();
+            addressQuery.setAddress(address.trim());
+            List<FraudUsers> fraudUsersByAddress = fraudUsersMapper.selectFraudUsersList(addressQuery);
+            return fraudUsersByAddress != null && !fraudUsersByAddress.isEmpty();
+        }
+        return false;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map<String, Object> syncFraudUsers() {
+        List<FraudUsers> fraudUsersList = fraudUsersMapper.selectFraudUsersList(new FraudUsers());
+        Map<String, Object> result = new LinkedHashMap<>();
+        result.put("fraudUserCount", fraudUsersList.size());
+        if (fraudUsersList.isEmpty()) {
+            result.put("matchedUserCount", 0);
+            result.put("matchedRelationCount", 0);
+            result.put("blacklistedRelationCount", 0);
+            result.put("taggedRelationCount", 0);
+            return result;
+        }
+
+        Set<Long> matchedUserIds = new HashSet<>();
+        for (FraudUsers fraudUser : fraudUsersList) {
+            matchedUserIds.addAll(matchUserIds(fraudUser));
+        }
+        fillSyncResult(result, matchedUserIds);
+        return result;
+    }
+
+    private Map<String, Object> syncSingleFraudUsers(FraudUsers fraudUsers) {
+        Map<String, Object> result = new LinkedHashMap<>();
+        result.put("fraudUserId", fraudUsers != null ? fraudUsers.getId() : null);
+        result.put("fraudUserName", fraudUsers != null ? fraudUsers.getName() : null);
+        if (fraudUsers == null) {
+            result.put("matchedUserCount", 0);
+            result.put("matchedRelationCount", 0);
+            result.put("blacklistedRelationCount", 0);
+            result.put("taggedRelationCount", 0);
+            return result;
+        }
+
+        Set<Long> matchedUserIds = matchUserIds(fraudUsers);
+        fillSyncResult(result, matchedUserIds);
+        return result;
+    }
+
+    private void fillSyncResult(Map<String, Object> result, Set<Long> matchedUserIds) {
+        result.put("matchedUserCount", matchedUserIds.size());
+        if (matchedUserIds.isEmpty()) {
+            result.put("matchedRelationCount", 0);
+            result.put("blacklistedRelationCount", 0);
+            result.put("taggedRelationCount", 0);
+            return;
+        }
+
+        List<FsUserCompanyUser> relations = fsUserCompanyUserMapper.selectList(
+                new LambdaQueryWrapper<FsUserCompanyUser>().in(FsUserCompanyUser::getUserId, matchedUserIds)
+        );
+        result.put("matchedRelationCount", relations.size());
+        if (relations.isEmpty()) {
+            result.put("blacklistedRelationCount", 0);
+            result.put("taggedRelationCount", 0);
+            return;
+        }
+
+        List<Long> relationIds = relations.stream()
+                .map(FsUserCompanyUser::getId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        if (!relationIds.isEmpty()) {
+            fsUserCompanyUserMapper.batchUpdateStatus(relationIds, BLACK_STATUS);
+        }
+        result.put("blacklistedRelationCount", relationIds.size());
+        result.put("taggedRelationCount", addProfessionalFraudTags(relations));
+    }
+
+    private Set<Long> matchUserIds(FraudUsers fraudUser) {
+        Set<Long> userIds = new HashSet<>();
+        if (StringUtils.isNotBlank(fraudUser.getPhone())) {
+            String fraudPhone = normalizeFraudPhone(fraudUser.getPhone());
+            List<FsUser> users = fsUserMapper.selectFsUsersByPhoneLimitOne(fraudPhone);
+            if (users != null) {
+                userIds.addAll(users.stream().map(FsUser::getUserId).filter(Objects::nonNull).collect(Collectors.toSet()));
+            }
+        }
+        if (StringUtils.isNotBlank(fraudUser.getAddress())) {
+            List<Long> addressUserIds = fsUserAddressMapper.selectUserIdsByFullAddress(fraudUser.getAddress().trim());
+            if (addressUserIds != null) {
+                userIds.addAll(addressUserIds.stream().filter(Objects::nonNull).collect(Collectors.toSet()));
+            }
+        }
+        return userIds;
+    }
+
+    private int addProfessionalFraudTags(List<FsUserCompanyUser> relations) {
+        int count = 0;
+        for (FsUserCompanyUser relation : relations) {
+            if (relation.getUserId() == null || relation.getCompanyId() == null || relation.getCompanyUserId() == null) {
+                continue;
+            }
+            Long tagId = getOrCreateProfessionalFraudTagId(relation.getCompanyId());
+            if (tagId == null) {
+                continue;
+            }
+
+            List<CompanyTagUser> tagUsers = companyTagUserMapper.selectCompanyTagUserList(buildCompanyTagUserQuery(relation));
+            if (tagUsers == null || tagUsers.isEmpty()) {
+                CompanyTagUser companyTagUser = new CompanyTagUser();
+                companyTagUser.setUserId(relation.getUserId());
+                companyTagUser.setCompanyId(relation.getCompanyId());
+                companyTagUser.setCompanyUserId(relation.getCompanyUserId());
+                companyTagUser.setTagIds(String.valueOf(tagId));
+                companyTagUser.setCreateTime(DateUtils.getNowDate());
+                companyTagUserMapper.insertCompanyTagUser(companyTagUser);
+                count++;
+                continue;
+            }
+
+            CompanyTagUser companyTagUser = tagUsers.get(0);
+            Set<String> tagIdSet = Arrays.stream(Optional.ofNullable(companyTagUser.getTagIds()).orElse("").split(","))
+                    .filter(StringUtils::isNotBlank)
+                    .collect(Collectors.toCollection(LinkedHashSet::new));
+            if (tagIdSet.add(String.valueOf(tagId))) {
+                companyTagUser.setTagIds(String.join(",", tagIdSet));
+                companyTagUserMapper.updateCompanyTagUser(companyTagUser);
+                count++;
+            }
+        }
+        return count;
+    }
+
+    private CompanyTagUser buildCompanyTagUserQuery(FsUserCompanyUser relation) {
+        CompanyTagUser query = new CompanyTagUser();
+        query.setUserId(relation.getUserId());
+        query.setCompanyId(relation.getCompanyId());
+        query.setCompanyUserId(relation.getCompanyUserId());
+        return query;
+    }
+
+    private String normalizeFraudPhone(String phone) {
+        String trimPhone = phone == null ? null : phone.trim();
+        if (StringUtils.isBlank(trimPhone)) {
+            return trimPhone;
+        }
+        return trimPhone.matches("^1\\d{10}$") ? encryptPhone(trimPhone) : trimPhone;
+    }
+
+    private Long getOrCreateProfessionalFraudTagId(Long companyId) {
+        CompanyTag query = new CompanyTag();
+        query.setCompanyId(companyId);
+        query.setTag(PROFESSIONAL_FRAUD_TAG);
+        List<CompanyTag> tagList = companyTagMapper.selectCompanyTagList(query);
+        if (tagList != null && !tagList.isEmpty()) {
+            return tagList.get(0).getTagId();
+        }
+        CompanyTag companyTag = new CompanyTag();
+        companyTag.setCompanyId(companyId);
+        companyTag.setTag(PROFESSIONAL_FRAUD_TAG);
+        companyTagService.insertCompanyTag(companyTag);
+        return companyTag.getTagId();
+    }
+}

+ 16 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsInquiryOrderServiceImpl.java

@@ -198,6 +198,11 @@ public class FsInquiryOrderServiceImpl implements IFsInquiryOrderService
     @Autowired
     private IFsUserIntegralLogsService userIntegralLogsService;
 
+    @Autowired
+    private IFsUserAddressService userAddressService;
+    @Autowired
+    private IFraudUsersService fraudUsersService;
+
     @Autowired
     private ConfigUtil configUtil;
     @Autowired
@@ -585,6 +590,17 @@ public class FsInquiryOrderServiceImpl implements IFsInquiryOrderService
         if(user.getStatus()!=1){
             return R.error("非法用户操作");
         }
+        FsUserAddress defaultAddress = userAddressService.selectFsUserAddressByDefault(param.getUserId());
+        String fraudAddress = null;
+        if (defaultAddress != null) {
+            fraudAddress = org.apache.commons.lang3.StringUtils.defaultString(defaultAddress.getProvince())
+                    + org.apache.commons.lang3.StringUtils.defaultString(defaultAddress.getCity())
+                    + org.apache.commons.lang3.StringUtils.defaultString(defaultAddress.getDistrict())
+                    + org.apache.commons.lang3.StringUtils.defaultString(defaultAddress.getDetail());
+        }
+        if (fraudUsersService.isFraudUser(user.getPhone(), fraudAddress)) {
+            return R.error("该用户疑似命中职业打假人名单,请先核实");
+        }
         String orderKey= redisCache.getCacheObject("orderKey:"+param.getOrderKey());
         if (StringUtils.isEmpty(orderKey)) {
             return R.error("订单已过期");

+ 23 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsIntegralOrderServiceImpl.java

@@ -153,6 +153,9 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService {
     @Autowired
     private IFsExpressService expressService;
 
+    @Autowired
+    private IFraudUsersService fraudUsersService;
+
     @Value("${jst.shop_code:''}")
     private String shopCode;
 
@@ -327,6 +330,16 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService {
         FsUser user = fsUserMapper.selectFsUserByUserId(param.getUserId());
         FsUserAddress address = fsUserAddressMapper.selectFsUserAddressByAddressId(param.getAddressId());
         FsIntegralGoods integralGoods = fsIntegralGoodsMapper.selectFsIntegralGoodsByGoodsId(param.getGoodsId());
+        String fraudAddress = null;
+        if(address!=null){
+            fraudAddress = org.apache.commons.lang3.StringUtils.defaultString(address.getProvince())
+                    + org.apache.commons.lang3.StringUtils.defaultString(address.getCity())
+                    + org.apache.commons.lang3.StringUtils.defaultString(address.getDistrict())
+                    + org.apache.commons.lang3.StringUtils.defaultString(address.getDetail());
+        }
+        if (fraudUsersService.isFraudUser(user.getPhone(), fraudAddress)) {
+            return R.error("该用户疑似命中职业打假人名单,请先核实");
+        }
         if (Objects.isNull(user)) {
             return R.error("用户不存在");
         }
@@ -680,7 +693,16 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService {
         if (Objects.isNull(address)) {
             throw new CustomException("地址不存在");
         }
-
+        String fraudAddress = null;
+        if(address!=null){
+            fraudAddress = org.apache.commons.lang3.StringUtils.defaultString(address.getProvince())
+                    + org.apache.commons.lang3.StringUtils.defaultString(address.getCity())
+                    + org.apache.commons.lang3.StringUtils.defaultString(address.getDistrict())
+                    + org.apache.commons.lang3.StringUtils.defaultString(address.getDetail());
+        }
+        if (fraudUsersService.isFraudUser(user.getPhone(), fraudAddress)) {
+            return R.error("该用户疑似命中职业打假人名单,请先核实");
+        }
         Wrapper<FsIntegralCart> wrapper = Wrappers.<FsIntegralCart>lambdaQuery()
                 .eq(FsIntegralCart::getUserId, user.getUserId())
                 .in(FsIntegralCart::getId, param.getIds());

+ 13 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -141,6 +141,8 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
     SysConfigMapper sysConfigMapper;
     @Autowired
     private IFsUserAddressService userAddressService;
+    @Autowired
+    private IFraudUsersService fraudUsersService;
 
     @Autowired
     private IFsUserCouponService userCouponService;
@@ -545,6 +547,17 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         if(user.getStatus()!=1){
             return R.error("非法用户操作");
         }
+        FsUserAddress defaultAddress = userAddressService.selectFsUserAddressByDefault(param.getUserId());
+        String fraudAddress = null;
+        if (defaultAddress != null) {
+            fraudAddress = org.apache.commons.lang3.StringUtils.defaultString(defaultAddress.getProvince())
+                    + org.apache.commons.lang3.StringUtils.defaultString(defaultAddress.getCity())
+                    + org.apache.commons.lang3.StringUtils.defaultString(defaultAddress.getDistrict())
+                    + org.apache.commons.lang3.StringUtils.defaultString(defaultAddress.getDetail());
+        }
+        if (fraudUsersService.isFraudUser(user.getPhone(), fraudAddress)) {
+            return R.error("该用户疑似命中职业打假人名单,请先核实");
+        }
         FsPatient patient=null;
         FsDoctor doctor=null;
         FsPackage fsPackage=fsPackageMapper.selectFsPackageByPackageId(param.getPackageId());

+ 76 - 0
fs-service/src/main/resources/mapper/his/FraudUsersMapper.xml

@@ -0,0 +1,76 @@
+<?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.fs.his.mapper.FraudUsersMapper">
+
+    <resultMap type="FraudUsers" id="FraudUsersResult">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="phone" column="phone"/>
+        <result property="address" column="address"/>
+        <result property="position" column="position"/>
+    </resultMap>
+
+    <sql id="selectFraudUsersVo">
+        select id, name, phone, address, position from fraud_users
+    </sql>
+
+    <select id="selectFraudUsersById" parameterType="Long" resultMap="FraudUsersResult">
+        <include refid="selectFraudUsersVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectFraudUsersList" parameterType="FraudUsers" resultMap="FraudUsersResult">
+        <include refid="selectFraudUsersVo"/>
+        <where>
+            <if test="name != null and name != ''">and name like concat('%', #{name}, '%')</if>
+            <if test="phone != null and phone != ''">and phone = #{phone}</if>
+            <if test="address != null and address != ''">and address like concat('%', #{address}, '%')</if>
+            <if test="position != null and position != ''">and position like concat('%', #{position}, '%')</if>
+        </where>
+        order by id desc
+    </select>
+    <select id="selectFraudUsersByPhone" resultType="com.fs.his.domain.FraudUsers">
+        <include refid="selectFraudUsersVo"/>
+        where phone = #{phone} limit 1
+    </select>
+
+    <insert id="insertFraudUsers" parameterType="FraudUsers" useGeneratedKeys="true" keyProperty="id">
+        insert into fraud_users
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="name != null">name,</if>
+            <if test="phone != null">phone,</if>
+            <if test="address != null">address,</if>
+            <if test="position != null">position,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="name != null">#{name},</if>
+            <if test="phone != null">#{phone},</if>
+            <if test="address != null">#{address},</if>
+            <if test="position != null">#{position},</if>
+        </trim>
+    </insert>
+
+    <update id="updateFraudUsers" parameterType="FraudUsers">
+        update fraud_users
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="name != null">name = #{name},</if>
+            <if test="phone != null">phone = #{phone},</if>
+            <if test="address != null">address = #{address},</if>
+            <if test="position != null">position = #{position},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFraudUsersById" parameterType="Long">
+        delete from fraud_users where id = #{id}
+    </delete>
+
+    <delete id="deleteFraudUsersByIds" parameterType="String">
+        delete from fraud_users where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 17 - 0
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController2.java

@@ -19,7 +19,9 @@ import com.fs.company.domain.CompanyUserUser;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.company.service.ICompanyUserUserService;
 import com.fs.core.config.WxOpenProperties;
+import com.fs.his.domain.FraudUsers;
 import com.fs.his.domain.FsUser;
+import com.fs.his.mapper.FraudUsersMapper;
 import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.service.IFsUserNewTaskService;
 import com.fs.his.service.IFsUserService;
@@ -80,6 +82,9 @@ public class AppLoginController2 extends AppBaseController{
     @Qualifier("threadPoolTaskExecutor")
     private Executor threadPoolTaskExecutor;
 
+    @Autowired
+    private FraudUsersMapper fraudUsersMapper;
+
     @ApiOperation("注册app用户")
     @PostMapping("/register")
     @RepeatSubmit
@@ -595,6 +600,13 @@ public class AppLoginController2 extends AppBaseController{
         return user;
     }
 
+    private FraudUsers findFraudUsersByPhone(String phone){
+        FraudUsers fraudUsers = fraudUsersMapper.selectFraudUsersByPhone(encryptPhone(phone));
+        if(fraudUsers == null){
+            fraudUsers=  fraudUsersMapper.selectFraudUsersByPhone(phone);
+        }
+        return  fraudUsers;
+    }
 //    @PostMapping("/loginTest")
 //    public R loginTest(@RequestBody String userId) {
 //        FsUser user = userMapper.selectFsUserByUserId(Long.parseLong(userId));
@@ -876,6 +888,11 @@ public class AppLoginController2 extends AppBaseController{
         String code = map.get("code");
         String password = map.get("password");
 
+        //判断是否是职业打假人
+        FraudUsers fraudUsers = findFraudUsersByPhone(phone);
+        if(fraudUsers !=null){
+            return R.error("此账号无法注册");
+        }
         FsUser user = findUserByPhone(phone);
         if (user != null){
             return R.error("此账号已经注册");