Commit e51a7aeb authored by gaoyingwei's avatar gaoyingwei

修改 会员编辑、生成会员号;添加查看会员加密信息、文件上传

parent c171eb0f
......@@ -195,3 +195,9 @@ logging:
path: D:\working\test
member:
generate:
codes:
- "0001-2000"
- "2001-3000"
- "4001-5000"
......@@ -179,3 +179,10 @@ logging:
root: info
com.alibaba.nacos: info
path: \working\test
member:
generate:
codes:
- "0001-2000"
- "2001-3000"
- "4001-5000"
......@@ -179,3 +179,10 @@ logging:
root: info
com.alibaba.nacos: info
path: \working\test
member:
generate:
codes:
- "0001-2000"
- "2001-3000"
- "4001-5000"
......@@ -177,3 +177,10 @@ logging:
root: info
com.alibaba.nacos: info
path: \working\test
member:
generate:
codes:
- "0001-2000"
- "2001-3000"
- "4001-5000"
......@@ -10,22 +10,28 @@ import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.servlet.http.HttpServletResponse;
import org.rcisoft.business.memInfo.entity.MemInfo;
import org.rcisoft.business.memInfo.service.MemInfoService;
import org.rcisoft.common.component.CyGlobal;
import org.rcisoft.core.anno.CyEncryptSm4Anno;
import org.rcisoft.core.anno.CyOpeLogAnno;
import org.rcisoft.core.constant.CyMessCons;
import org.rcisoft.core.controller.CyPaginationController;
import org.rcisoft.core.exception.CyServiceException;
import org.rcisoft.core.model.CyGridModel;
import org.rcisoft.core.model.CyPersistModel;
import org.rcisoft.core.operlog.enums.CyLogTypeEnum;
import org.rcisoft.core.result.CyResult;
import org.rcisoft.core.result.enums.CyResSysExcEnum;
import org.rcisoft.core.service.CyFileStorageService;
import org.rcisoft.core.util.CyEpExcelUtil;
import org.rcisoft.core.util.CyResultGenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import java.util.Arrays;
import java.util.List;
/**
......@@ -39,6 +45,12 @@ public class AppMemInfoController extends CyPaginationController<MemInfo> {
@Autowired
private MemInfoService memInfoServiceImpl;
@Autowired
private CyGlobal cyGlobal;
@Autowired
private CyFileStorageService cyFileStorageService;
// @PreAuthorize("@cyPerm.hasPerm('mem:info:add')")
@CyOpeLogAnno(title = "system-会员表管理-新增会员表", businessType = CyLogTypeEnum.INSERT)
@Operation(summary="添加会员表", description="添加会员表")
......@@ -75,9 +87,32 @@ public class AppMemInfoController extends CyPaginationController<MemInfo> {
@CyOpeLogAnno(title = "system-会员表管理-查询会员表", businessType = CyLogTypeEnum.QUERY)
@Operation(summary="分页查询会员表集合", description="分页查询会员表集合")
@GetMapping(value = "/open/memInfo/list")
@CyEncryptSm4Anno
// @CyEncryptSm4Anno
public CyGridModel listByPagination(MemInfo memInfo) {
memInfoServiceImpl.findAllByPagination(getPaginationUtility(), memInfo);
return getGridModelResponse();
}
/**
* 文件上传new (2.0)
*
* @param file
* @return
*/
@Operation(summary = "文件上传", description = "文件上传")
@Parameters({@Parameter(name = "file", description = "文件", required = true)})
@PostMapping(value = "/open/fileUpload")
@ResponseBody
public CyResult fileUpload(@RequestParam("file") MultipartFile file, @RequestParam("temp") String temp, @RequestParam(name = "bucket", required = false) String bucket) {
//文件上传限制
String[] split = cyGlobal.getFileUploadFormatRestrictions().split(",");
if (file==null || Arrays.stream(split).anyMatch(file.getOriginalFilename()::contains)){
throw new CyServiceException(CyResSysExcEnum.FILE_STORAGE_ERROR);
};
return CyResultGenUtil.builder(new CyPersistModel(1),
CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR,
cyFileStorageService.filePath(file, temp, bucket));
}
}
package org.rcisoft.business.memInfo.bean;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* Created with family.
* author: cy
* Date: 18/10/25
* Time: 下午4:11
* description:
*/
@Component
@Data
@ConfigurationProperties(prefix = "member.generate")
public class MemberGenerateBean {
private String[] codes;
}
......@@ -151,4 +151,17 @@ public class MemInfoController extends CyPaginationController<MemInfo> {
public CyResult checkInfo(@Valid MemInfo memInfo) {
return CyResultGenUtil.genSuccessResult(memInfoServiceImpl.checkInfo(memInfo));
}
@PreAuthorize("@cyPerm.hasPerm('mem:info:query')")
@CyOpeLogAnno(title = "system-用户管理-查询用户身份证、手机号、真实姓名", businessType = CyLogTypeEnum.QUERY)
@Operation(summary = "查询用户身份证、手机号、真实姓名", description = "查询用户身份证、手机号、真实姓名")
@GetMapping(value = {"/getUserPhone"})
public CyResult getUserPhone(Integer businessId) {
return CyResultGenUtil.builder(new CyPersistModel(1),
CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR,
memInfoServiceImpl.getUserPhone(businessId));
}
}
......@@ -46,5 +46,18 @@ public interface MemInfoRepository extends CyBaseMapper<MemInfo> {
* @return
*/
MemInfo selectDetailById(@Param("businessId")int businessId);
/**
* 查询最大的会员号
* @return
*/
String selectMaxCode();
/**
* 查询加密字段
* @param businessId
* @return
*/
MemInfo getUserPhone(Integer businessId);
}
package org.rcisoft.business.memInfo.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.baomidou.mybatisplus.annotation.TableField;
......@@ -46,6 +47,14 @@ public class MemInfo extends CyIdIncreEntity<MemInfo> {
@Excel(name = "用户性别(0男 1女 2未知)", orderNum = "2", width = 20)
private String memSex;
/**
* @desc 民族
* @column mem_nation
* @default
*/
@Excel(name = "民族", orderNum = "2", width = 20)
private String memNation;
/**
* @desc 生日,格式:xxxx-01-01
* @column mem_birthday
......@@ -299,13 +308,24 @@ public class MemInfo extends CyIdIncreEntity<MemInfo> {
private String memNickName;
/**
* @desc 昵称
* @desc
* @column mem_code_level
* @default
*/
// @Excel(name = "昵称", orderNum = "32", width = 20)
private String memCodeLevel;
/**
* @desc 头像地址
* @column avatar
* @default
*/
@Schema(name = "avatar", description = "头像地址", required = false, type = "string")
private String avatar;
@Schema(name = "wxOpenid", description = "微信openid", required = false, type = "string")
private String wxOpenid;
/**
* 开始时间
*/
......@@ -408,5 +428,18 @@ public class MemInfo extends CyIdIncreEntity<MemInfo> {
@JsonIgnore
@TableField(exist = false)
private String memLevelEndTime;
/**
* 最小年龄
*/
@TableField(exist = false)
private Integer minAge;
/**
* 最大年龄
*/
@TableField(exist = false)
private Integer maxAge;
}
......@@ -78,4 +78,6 @@ public interface MemInfoService {
* @return
*/
Boolean checkInfo(MemInfo memInfo);
MemInfo getUserPhone(Integer businessId);
}
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.rcisoft.business.memInfo.bean.MemberGenerateBean;
import org.rcisoft.core.constant.CyDelStaCons;
import org.rcisoft.core.constant.CyFlagStaCons;
import org.rcisoft.core.exception.CyServiceException;
......@@ -34,10 +35,10 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.rcisoft.core.model.CyPageInfo;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
import java.time.LocalDate;
import java.time.Month;
import java.util.*;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
......@@ -60,10 +61,13 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
private PasswordEncoder passwordEncoder;
@Autowired
CyIdGenUtil cyIdGenUtil;
@Autowired
MemberGenerateBean memberGenerateBean;
@Value("${cy.init.password}")
private String password;
/**
* 保存 会员表
* @param memInfo
......@@ -77,6 +81,8 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
memInfo.setMemPhone(CyAESUtils.encrypt(memInfo.getMemPhone()));
if (StringUtils.isNotBlank(memInfo.getMemIdcard()))
memInfo.setMemIdcard(CyAESUtils.encrypt(memInfo.getMemIdcard()));
if (StringUtils.isNotBlank(memInfo.getMemRealName()))
memInfo.setMemRealName(CyAESUtils.encrypt(memInfo.getMemRealName()));
//身份证、手机号验重
SysUserRbacDTO sysUserRbacDTO = baseMapper.checkPhoneRepeat(null,memInfo.getMemPhone());
if (sysUserRbacDTO != null) {
......@@ -97,6 +103,9 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
userRbac.setUserIdentity("10");
userRbac.setFlag(CyFlagStaCons.NORMAL.getStatus());
userRbac.setDelFlag(CyDelStaCons.NORMAL.getStatus());
userRbac.setWxOpenid(memInfo.getWxOpenid());
userRbac.setAvatar(memInfo.getAvatar());
userRbac.setNickName(memInfo.getMemNickName());
sysUserRbacRepository.insert(userRbac);
//查询会员角色
List<Integer> roleIds = baseMapper.selectRoleByKey("member");
......@@ -105,7 +114,9 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
sysUserRbacRepository.insertUserRole(userRbac.getBusinessId(), roleIds);
}
//生成会员号
memInfo.setMemCode("11");
String maxCode = baseMapper.selectMaxCode();
String memCode = generateMemCode(maxCode);
memInfo.setMemCode(memCode);
//增加操作
memInfo.setUserId(userRbac.getBusinessId());
int line = baseMapper.insert(memInfo);
......@@ -151,6 +162,31 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT)
@Override
public CyPersistModel merge(MemInfo memInfo){
//手机号、身份证存储加密
if (StringUtils.isNotBlank(memInfo.getMemPhone()))
memInfo.setMemPhone(CyAESUtils.encrypt(memInfo.getMemPhone()));
if (StringUtils.isNotBlank(memInfo.getMemIdcard()))
memInfo.setMemIdcard(CyAESUtils.encrypt(memInfo.getMemIdcard()));
if (StringUtils.isNotBlank(memInfo.getMemRealName()))
memInfo.setMemRealName(CyAESUtils.encrypt(memInfo.getMemRealName()));
//身份证、手机号验重
SysUserRbacDTO sysUserRbacDTO = baseMapper.checkPhoneRepeat(memInfo.getUserId(),memInfo.getMemPhone());
if (sysUserRbacDTO != null) {
throw new CyServiceException(UserInfoExceptionEnums.PHONE_EXISTS);
}
sysUserRbacDTO = baseMapper.checkIdcardRepeat(memInfo.getUserId(),memInfo.getMemIdcard());
if (sysUserRbacDTO != null) {
throw new CyServiceException(UserInfoExceptionEnums.ID_NUMBER_EXISTS);
}
//修改sys_user
SysUserRbac userRbac = new SysUserRbac();
userRbac.setBusinessId(memInfo.getUserId());
userRbac.setPhone(memInfo.getMemPhone());
userRbac.setSex(memInfo.getMemSex());
userRbac.setIdNumber(memInfo.getMemIdcard());
userRbac.setAvatar(memInfo.getAvatar());
userRbac.setNickName(memInfo.getMemNickName());
sysUserRbacRepository.updateById(userRbac);
int line = baseMapper.updateById(memInfo);
log.debug(CyUserUtil.getAuthenUsername()+"修改了ID为"+ memInfo.getBusinessId()+"的会员表信息");
return new CyPersistModel(line);
......@@ -174,6 +210,10 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
@Override
public IPage<MemInfo> findAllByPagination(CyPageInfo<MemInfo> paginationUtility,
MemInfo memInfo){
if (memInfo.getMinAge()!=null && memInfo.getMaxAge()!=null) {
memInfo.setBeginBirthday(computeBirthdayBegin(memInfo.getMaxAge()));
memInfo.setEndBirthday(computeBirthdayEnd(memInfo.getMinAge()));
}
return baseMapper.queryMemInfosPaged(paginationUtility,memInfo);
}
......@@ -222,7 +262,7 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
* @return
*/
@Override
public Boolean checkInfo(MemInfo memInfo) {
public Boolean checkInfo(MemInfo memInfo) {
//手机号、身份证存储加密
if (StringUtils.isNotBlank(memInfo.getMemPhone()))
memInfo.setMemPhone(CyAESUtils.encrypt(memInfo.getMemPhone()));
......@@ -239,4 +279,88 @@ public class MemInfoServiceImpl extends ServiceImpl<MemInfoRepository,MemInfo>
}
return true;
}
/**
* 通过年龄计算出生日期开始
* @param maxAge
* @return
*/
private static String computeBirthdayBegin(Integer maxAge) {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 计算出生年份:当前年份减去年龄-1
int birthYear = currentDate.getYear() - maxAge - 1;
// 计算出生日期:当前日期晚一天
LocalDate birthDate = currentDate.plusDays(1);
birthDate = birthDate.withYear(birthYear);
return birthDate.toString();
}
/**
* 通过年龄计算出生日期结束
* @param minAge
* @return
*/
private static String computeBirthdayEnd(Integer minAge) {
// 获取当前日期
LocalDate currentDate = LocalDate.now();
// 计算出生年份:当前年份减去年龄-1
int birthYear = currentDate.getYear() - minAge;
// 计算出生日期:当前日期晚一天
LocalDate birthDate = currentDate.withYear(birthYear);
return birthDate.toString();
}
/**
* 生成会员号
* @param code
* @return
*/
private String generateMemCode(String code) { //将会员号段排序
List<String> codeList = Arrays.stream(memberGenerateBean.getCodes()).sorted().collect(Collectors.toList());
if (StringUtils.isNotBlank(code)) {
int currentNumber = Integer.parseInt(code);
//获取当前会员号所处的号段
for (int i = 0; i < codeList.size(); i++) {
String[] range = codeList.get(i).split("-");
int minCode = Integer.parseInt(range[0]);
int maxCode = Integer.parseInt(range[1]);
if (currentNumber >= minCode && currentNumber <= maxCode) {
// 如果当前号码在号段内,返回该号段中的下一个号码
int nextNumber = currentNumber + 1;
if (nextNumber <= maxCode) {
// 获取当前号码的长度
int length = code.length();
// 格式化为4位数(根据需要调整位数)
return String.format("%0" + length + "d", nextNumber);
} else {
// 当前号码已经是该号段的最大值,返回下一个号段的起始值
if ((i + 1) < codeList.size())
return codeList.get(i + 1).split("-")[0];
throw new CyServiceException("会员号超出设定最大值,请联系管理员");
}
}
}
return null;
} else {
return codeList.get(0).split("-")[0];
}
}
@Override
public MemInfo getUserPhone(Integer businessId) {
MemInfo memInfo = baseMapper.getUserPhone(businessId);
//存储加密信息解密
if (StringUtils.isNotBlank(memInfo.getMemPhone()))
memInfo.setMemPhone(CyAESUtils.decrypt(memInfo.getMemPhone()));
if (StringUtils.isNotBlank(memInfo.getMemIdcard()))
memInfo.setMemIdcard(CyAESUtils.decrypt(memInfo.getMemIdcard()));
if (StringUtils.isNotBlank(memInfo.getMemRealName()))
memInfo.setMemRealName(CyAESUtils.decrypt(memInfo.getMemRealName()));
return memInfo;
}
}
......@@ -7,6 +7,7 @@
<result column="user_id" jdbcType="INTEGER" property="userId"/>
<result column="mem_code" jdbcType="VARCHAR" property="memCode"/>
<result column="mem_sex" jdbcType="CHAR" property="memSex"/>
<result column="mem_nation" jdbcType="VARCHAR" property="memNation"/>
<result column="mem_birthday" jdbcType="VARCHAR" property="memBirthday"/>
<result column="mem_constellation" jdbcType="VARCHAR" property="memConstellation"/>
<result column="mem_height" jdbcType="DECIMAL" property="memHeight"/>
......@@ -38,6 +39,8 @@
<result column="mem_level_end_date" jdbcType="TIMESTAMP" property="memLevelEndDate"/>
<result column="mem_nick_name" jdbcType="VARCHAR" property="memNickName"/>
<result column="mem_code_level" jdbcType="VARCHAR" property="memCodeLevel"/>
<result column="avatar" jdbcType="VARCHAR" property="avatar"/>
<result column="wx_openid" jdbcType="VARCHAR" property="wxOpenid"/>
<result column="flag" jdbcType="CHAR" property="flag"/>
<result column="del_flag" jdbcType="CHAR" property="delFlag"/>
<result column="create_by" jdbcType="VARCHAR" property="createBy"/>
......@@ -171,7 +174,8 @@
mem_college,mem_career,mem_year_income,mem_work_place,mem_residence_province,mem_residence_city,mem_native_province,
mem_native_city,mem_introduce,mem_hobby,mem_future_plan,mem_half_desire,mem_marriage,mem_marriage_remarks,
mem_mbti,mem_wx_code,mem_real_authen,mem_real_authen_date,mem_level,mem_level_begin_date,mem_level_end_date,
mem_nick_name,mem_code_level,flag,del_flag,create_by,create_date,update_by,update_date,remarks from mem_info
mem_nick_name,mem_code_level,flag,del_flag,create_by,create_date,update_by,update_date,remarks,mem_nation,wx_openid,avatar
from mem_info
where 1=1
and del_flag = '0'
<if test="entity.flag !=null and entity.flag != '' ">
......@@ -340,8 +344,18 @@
mem_college,mem_career,mem_year_income,mem_work_place,mem_residence_province,mem_residence_city,mem_native_province,
mem_native_city,mem_introduce,mem_hobby,mem_future_plan,mem_half_desire,mem_marriage,mem_marriage_remarks,
mem_mbti,mem_wx_code,mem_real_authen,mem_real_authen_date,mem_level,mem_level_begin_date,mem_level_end_date,
mem_nick_name,mem_code_level,flag,del_flag,create_by,create_date,update_by,update_date,remarks
mem_nick_name,mem_code_level,flag,del_flag,create_by,create_date,update_by,update_date,remarks,mem_nation,wx_openid,avatar
from mem_info
where business_id = #{businessId}
</select>
<select id="selectMaxCode" resultType="java.lang.String">
select max(mem_code) from mem_info
</select>
<select id="getUserPhone" resultType="org.rcisoft.business.memInfo.entity.MemInfo"
parameterType="java.lang.Integer">
select business_id,mem_real_name,mem_phone, mem_idcard
from sys_user
where business_id = #{businessId} and del_flag = 0
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment