liujunchi 2 年之前
父节点
当前提交
0e77beb9c3

+ 11 - 0
cooleshow-auth/auth-api/src/main/java/com/yonge/cooleshow/auth/api/dto/RealnameAuthReq.java

@@ -29,12 +29,23 @@ public class RealnameAuthReq implements Serializable {
     @ApiModelProperty(value = "是否修改用户信息", required = true)
     private Boolean save;
 
+    @ApiModelProperty("是否签署协议")
+    private Boolean contract = false;
+
     private Long userId;
     // 性别(1,男 0,女)
     private int gender;
     // 出生日期
     private Date birthday;
 
+    public Boolean getContract() {
+        return contract;
+    }
+
+    public void setContract(Boolean contract) {
+        this.contract = contract;
+    }
+
     public Long getUserId() {
         return userId;
     }

+ 2 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/web/controller/UserController.java

@@ -535,7 +535,8 @@ public class UserController extends BaseController {
     }
 
 
-    @PostMapping("/realNameAuth")
+    // 实名认证改到对应的服务中
+    // @PostMapping("/realNameAuth")
     @ApiOperation(value = "实名认证", notes = "传入realNameAuthDto")
     @ResponseBody
     public HttpResponseResult<IdcardInfoExtractor> realNameAuth(@Valid @RequestBody RealnameAuthReq realNameAuthDto) {

+ 2 - 1
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/ContractTemplateTypeEnum.java

@@ -5,7 +5,8 @@ import com.yonge.toolset.base.enums.BaseEnum;
 
 public enum ContractTemplateTypeEnum implements BaseEnum<String, ContractTemplateTypeEnum> {
     BUY_ORDER(ContractTemplateSourceEnum.PLATFORM, "平台购买商品"),
-    WITHDRAW(ContractTemplateSourceEnum.LINGXINPAY, "用户结算");
+    WITHDRAW(ContractTemplateSourceEnum.LINGXINPAY, "用户结算"),
+    REGISTER(ContractTemplateSourceEnum.PLATFORM, "注册协议");
 
     @EnumValue
     private String code;

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/SysUserMapper.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.mapper;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
@@ -31,4 +32,14 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      */
     List<CouponIssueUserVo> queryCouponIssueUser(@Param("iPage") IPage<CouponIssueUserVo> iPage, @Param(
             "client") ClientEnum client, @Param("keyword") String keyword);
+
+
+    /***
+     * 修改用户实名信息
+     * @author liweifan
+     * @param: teacherApplyDetailDto
+     * @updateTime 2022/3/18 15:57
+     * @return: java.lang.Integer
+     */
+    Integer updateUserCard(@Param("param") RealnameAuthReq param);
 }

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysUserService.java

@@ -1,6 +1,9 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 
 public interface SysUserService{
 
@@ -9,4 +12,13 @@ public interface SysUserService{
     SysUser getUser();
 
     SysUser findUserById(Long userId);
+
+    /**
+     * 实名 + 注册协议
+     *
+     *  @param realNameAuthDto
+     * @param sysUser
+     * @param client
+     */
+    IdcardInfoExtractor updateUserCard(RealnameAuthReq realNameAuthDto, SysUser sysUser, ClientEnum client);
 }

+ 5 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java

@@ -48,13 +48,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -362,8 +356,11 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
             Map<Long, String> receivers = new HashMap<>();
             receivers.put(userId, user.getPhone());
 
+
+            String url = sysMessageService.selectConfigUrl(MessageTypeEnum.ACTIVITY_WIN.getCode(),clientType.getCode()
+                                                                                        .toLowerCase(Locale.ROOT));
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.ACTIVITY_WIN, receivers, null,
-                    0, null, clientType.getCode(), activityName, activityRewardName);
+                    0, url, clientType.getCode(), activityName, activityRewardName);
         } catch (Exception e) {
             e.printStackTrace();
             log.error("获奖消息发送失败,{}", e.getMessage());

+ 66 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysUserServiceImpl.java

@@ -1,12 +1,23 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
+import com.yonge.cooleshow.biz.dal.service.SysUserContractRecordService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.enums.ContractTemplateTypeEnum;
+import com.yonge.cooleshow.common.enums.SysUserType;
 import com.yonge.toolset.base.exception.BizException;
+import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
+import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
+import com.yonge.toolset.utils.idcard.IdcardValidator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.Optional;
 
 @Service
@@ -15,6 +26,13 @@ public class SysUserServiceImpl implements SysUserService {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Resource
+    private SysUserContractRecordService sysUserContractRecordService;
     @Override
     public Long getUserId() {
         return Optional.ofNullable(sysUserFeignService.queryUserInfo()).
@@ -37,4 +55,52 @@ public class SysUserServiceImpl implements SysUserService {
                 orElseThrow(()-> new BizException("请登录"));
         return optional.get();
     }
+
+    @Override
+    public IdcardInfoExtractor updateUserCard(RealnameAuthReq realNameAuthDto, SysUser sysUser,ClientEnum client) {
+        IdcardValidator idcardValidator = new IdcardValidator();
+        //验证身份证号合法性
+        boolean validatedAllIdcard = idcardValidator.isValidatedAllIdcard(realNameAuthDto.getIdCardNo());
+        if (!validatedAllIdcard) {
+            throw new BizException("身份证号不合法");
+        }
+        //通过身份证号获取身份信息
+        IdcardInfoExtractor idcardInfoExtractor = new IdcardInfoExtractor(realNameAuthDto.getIdCardNo(), validatedAllIdcard);
+        //todo 通过环境,不做实名判断
+        try {
+            boolean verify = realnameAuthenticationPlugin.verify(realNameAuthDto.getRealName(), realNameAuthDto.getIdCardNo());
+            if (!verify) {
+                throw new BizException("未通过实名认证");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BizException("未通过实名认证");
+        }
+
+        if (realNameAuthDto.getSave()) {
+            realNameAuthDto.setUserId(sysUser.getId());
+            realNameAuthDto.setGender(idcardInfoExtractor.getGender());
+            realNameAuthDto.setBirthday(idcardInfoExtractor.getBirthday());
+            //实名认证通过后立刻保存
+            sysUserMapper.updateUserCard(realNameAuthDto);
+        }
+        // 签订用户注册协议
+
+        // 判断是否已经签署
+        Boolean contractSign = sysUserContractRecordService.checkContractSign(sysUser.getId(),
+                                                                              SysUserType.valueOf(client.getCode()),
+                                                                              ContractTemplateTypeEnum.REGISTER);
+        if (!contractSign && realNameAuthDto.getContract()) {
+            sysUser.setRealName(realNameAuthDto.getRealName());
+            sysUser.setIdCardNo(realNameAuthDto.getIdCardNo());
+            sysUser.setGender(realNameAuthDto.getGender());
+            sysUser.setBirthdate(realNameAuthDto.getBirthday());
+            HttpResponseResult<Boolean> sign = sysUserContractRecordService.sign(ContractTemplateTypeEnum.REGISTER,
+                                                                                 SysUserType.valueOf(client.getCode()),sysUser);
+            if (!sign.getStatus() || !sign.getData()) {
+                throw new BizException(sign.getMsg());
+            }
+        }
+        return idcardInfoExtractor;
+    }
 }

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserBindingTeacherServiceImpl.java

@@ -25,6 +25,9 @@ import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.utils.date.DateUtil;
+import org.joda.time.DateTime;
+import org.joda.time.Period;
+import org.joda.time.PeriodType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -92,7 +95,7 @@ public class UserBindingTeacherServiceImpl extends ServiceImpl<UserBindingTeache
         records.forEach(userBindingTeacherWrapper -> {
             Integer age = null;
             if (userBindingTeacherWrapper.getBirthdate() != null) {
-                age = DateUtil.yearsBetween(userBindingTeacherWrapper.getBirthdate(), new Date());
+                age = new Period(new DateTime(userBindingTeacherWrapper.getBirthdate()), DateTime.now(), PeriodType.years()).getYears();
             }
             userBindingTeacherWrapper.setAge(age);
         });

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityUserRewardMapper.xml

@@ -96,6 +96,7 @@
         select count(1) from
         activity_user_reward aur
         left join activity_plan ap on ap.id_ = aur.activity_id_
+        left join activity_reward ar on ar.id_ = aur.reward_id_
         <include refid="selectReceiveRewardSql"/>
     </select>
 
@@ -105,6 +106,7 @@
     </update>
     <sql id="selectReceiveRewardSql">
         <where>
+            ar.reward_type != 'ACTUAL'
             <if test="query.userId != null">
                 and aur.user_id_ = #{query.userId}
             </if>

+ 19 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -66,4 +66,23 @@
         </where>
 
     </select>
+
+    <update id="updateUserCard">
+        UPDATE sys_user
+        set
+        <if test="param.realName != null and param.realName != ''">
+            real_name_ = #{param.realName},
+        </if>
+        <if test="param.idCardNo != null and param.idCardNo != ''">
+            id_card_no_ = #{param.idCardNo},
+        </if>
+        <if test="param.gender != null">
+            gender_ = #{param.gender},
+        </if>
+        <if test="param.birthday != null">
+            birthdate_ = #{param.birthday},
+        </if>
+        update_time_ = now()
+        WHERE del_flag_ = 0 and id_ = #{param.userId}
+    </update>
 </mapper>

+ 25 - 1
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/StudentController.java

@@ -2,17 +2,23 @@ package com.yonge.cooleshow.student.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.search.QueryMyFollowSearch;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.mybatis.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.MyFollow;
 import com.yonge.cooleshow.biz.dal.vo.StudentHomeVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.base.page.PageInfo;
-import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.util.StringUtil;
+import com.yonge.toolset.thirdparty.user.realname.RealnameAuthenticationPlugin;
+import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
+import com.yonge.toolset.utils.idcard.IdcardValidator;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -21,6 +27,7 @@ import org.springframework.web.bind.annotation.*;
 import com.yonge.cooleshow.biz.dal.entity.Student;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
 
+import javax.validation.Valid;
 import java.util.List;
 
 @RestController
@@ -32,6 +39,10 @@ public class StudentController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private SysUserService sysUserService;
+
+
     @ApiOperation(value = "查询学员")
     @GetMapping("/queryUser")
     public HttpResponseResult<Student> queryUser() throws Exception {
@@ -89,4 +100,17 @@ public class StudentController extends BaseController {
         return succeed(PageUtil.pageInfo(pages));
     }
 
+    @PostMapping("/realNameAuth")
+    @ApiOperation(value = "实名认证", notes = "传入realNameAuthDto")
+    @ResponseBody
+    public HttpResponseResult<IdcardInfoExtractor> realNameAuth(@Valid @RequestBody RealnameAuthReq realNameAuthDto) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        IdcardInfoExtractor idcardInfoExtractor = sysUserService.updateUserCard(realNameAuthDto, user,ClientEnum.STUDENT);
+        return succeed(idcardInfoExtractor);
+    }
+
+
 }

+ 23 - 6
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/TeacherController.java

@@ -1,5 +1,9 @@
 package com.yonge.cooleshow.teacher.controller;
 
+import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.toolset.utils.idcard.IdcardInfoExtractor;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -8,12 +12,7 @@ import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
@@ -31,6 +30,8 @@ import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.mybatis.support.PageUtil;
 
+import javax.validation.Valid;
+
 @RestController
 @RequestMapping("/teacher")
 @Api(value = "教师表", tags = "教师表")
@@ -40,6 +41,9 @@ public class TeacherController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private SysUserService sysUserService;
+
     @ApiOperation(value = "我的-查询教师基本信息")
     @GetMapping("/queryUserInfo")
     public HttpResponseResult<TeacherHomeVo> queryUserInfo() {
@@ -134,4 +138,17 @@ public class TeacherController extends BaseController {
         IPage<MyFens> pages = teacherService.queryMyFans(PageUtil.getPage(query), sysUser.getId());
         return succeed(PageUtil.pageInfo(pages));
     }
+
+
+    @PostMapping("/realNameAuth")
+    @ApiOperation(value = "实名认证", notes = "传入realNameAuthDto")
+    @ResponseBody
+    public HttpResponseResult<IdcardInfoExtractor> realNameAuth(@Valid @RequestBody RealnameAuthReq realNameAuthDto) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if (user == null || null == user.getId()) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        IdcardInfoExtractor idcardInfoExtractor = sysUserService.updateUserCard(realNameAuthDto, user, ClientEnum.TEACHER);
+        return succeed(idcardInfoExtractor);
+    }
 }