|
@@ -0,0 +1,262 @@
|
|
|
|
|
+package com.kxs.transfer.api.service.user.impl;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
|
|
+import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
|
+import com.aliyun.dts.subscribe.clients.record.OperationType;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import com.kxs.common.core.constant.SecurityConstants;
|
|
|
|
|
+import com.kxs.common.core.constant.enums.ErrorTypeEnum;
|
|
|
|
|
+import com.kxs.common.core.exception.GlobalCustomerException;
|
|
|
|
|
+import com.kxs.common.core.util.R;
|
|
|
|
|
+import com.kxs.store.api.feign.RemoteKxsStoreService;
|
|
|
|
|
+import com.kxs.store.api.model.KxsWarehouseLimit;
|
|
|
|
|
+import com.kxs.system.api.feign.RemoteUserMsgService;
|
|
|
|
|
+import com.kxs.system.api.model.KxsUserMsg;
|
|
|
|
|
+import com.kxs.system.api.util.MsgTemplateUtil;
|
|
|
|
|
+import com.kxs.transfer.api.mapper.user.KxsUserAmountMapper;
|
|
|
|
|
+import com.kxs.transfer.api.mapper.user.KxsUserBankMapper;
|
|
|
|
|
+import com.kxs.transfer.api.mapper.user.KxsUserMapper;
|
|
|
|
|
+import com.kxs.transfer.api.mapper.user.KxsUserRealMapper;
|
|
|
|
|
+import com.kxs.transfer.api.model.table.DMLData;
|
|
|
|
|
+import com.kxs.transfer.api.service.user.KxsUserService;
|
|
|
|
|
+import com.kxs.user.api.model.KxsUser;
|
|
|
|
|
+import com.kxs.user.api.model.KxsUserAmount;
|
|
|
|
|
+import com.kxs.user.api.model.KxsUserBank;
|
|
|
|
|
+import com.kxs.user.api.model.KxsUserReal;
|
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
|
|
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
|
|
|
|
+import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Map;
|
|
|
|
|
+import java.util.UUID;
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 用户表(KxsSecurityUser)表服务实现类
|
|
|
|
|
+ *
|
|
|
|
|
+ * @author 快秃顶的码农
|
|
|
|
|
+ * @since 2023-12-05 13:50:24
|
|
|
|
|
+ */
|
|
|
|
|
+@Service
|
|
|
|
|
+@RequiredArgsConstructor
|
|
|
|
|
+public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> implements KxsUserService {
|
|
|
|
|
+
|
|
|
|
|
+ private final KxsUserRealMapper kxsUserRealMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final KxsUserBankMapper kxsUserBankMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final KxsUserAmountMapper userAmountMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final RemoteKxsStoreService remoteKxsStoreService;
|
|
|
|
|
+
|
|
|
|
|
+ private final RemoteUserMsgService remoteUserMsgService;
|
|
|
|
|
+
|
|
|
|
|
+ private static final PasswordEncoder ENCODER = new BCryptPasswordEncoder();
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public void changeUser(DMLData dmlData) {
|
|
|
|
|
+ //修改的字段值
|
|
|
|
|
+ Map<String, Object> fieldDataMap = dmlData.getValidFieldDataMap();
|
|
|
|
|
+ //修改的字段
|
|
|
|
|
+ List<String> changeFieldList = dmlData.getChangeFieldList();
|
|
|
|
|
+ //操作的主键
|
|
|
|
|
+ String userId = dmlData.getId();
|
|
|
|
|
+
|
|
|
|
|
+ KxsUser kxsUser = baseMapper.selectById(userId);
|
|
|
|
|
+ if(kxsUser == null){
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ KxsUser user = new KxsUser();
|
|
|
|
|
+ KxsUserReal userReal = new KxsUserReal();
|
|
|
|
|
+ KxsUserBank userBank = new KxsUserBank();
|
|
|
|
|
+ //操作类型
|
|
|
|
|
+ OperationType operation = dmlData.getOperation();
|
|
|
|
|
+
|
|
|
|
|
+ for (String field : changeFieldList) {
|
|
|
|
|
+
|
|
|
|
|
+ switch (field) {
|
|
|
|
|
+ case "RealName":
|
|
|
|
|
+ user.setUsername(fieldDataMap.get(field).toString());
|
|
|
|
|
+ userReal.setRealName(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "CertId":
|
|
|
|
|
+ userReal.setIdCard(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "HandCertImage":
|
|
|
|
|
+ userReal.setIdCardHand(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "CertReverseImage":
|
|
|
|
|
+ userReal.setIdCardRear(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "CertFrontImage":
|
|
|
|
|
+ userReal.setIdCardFront(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "SettleBankName":
|
|
|
|
|
+ userBank.setBankName(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "Mobile":
|
|
|
|
|
+ user.setPhone(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "SettleBankCardNo":
|
|
|
|
|
+ userBank.setBankCode(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "BankCardPositiveImage":
|
|
|
|
|
+ userBank.setBankPic(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "SeoTitle":
|
|
|
|
|
+ userBank.setBankOpen(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "SettleBankCardName":
|
|
|
|
|
+ userBank.setBankCardName(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "LoginPwdDisplay":
|
|
|
|
|
+ user.setPassword(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "ReferralUserId":
|
|
|
|
|
+ user.setHiddenLevel(Integer.valueOf(fieldDataMap.get(field).toString()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "Areas":
|
|
|
|
|
+ user.setAddress(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "ParentUserId":
|
|
|
|
|
+ user.setPid(Integer.valueOf(fieldDataMap.get(field).toString()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "ParentNav":
|
|
|
|
|
+ String pidPath = fieldDataMap.get(field).toString().replaceAll(",,", ",");
|
|
|
|
|
+ user.setPidPath("0" + pidPath);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "MakerCode":
|
|
|
|
|
+ user.setUserCode(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "HeadPhoto":
|
|
|
|
|
+ user.setAvatar(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "UserLevel":
|
|
|
|
|
+ user.setUserLevel(Integer.valueOf(fieldDataMap.get(field).toString()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "PayPwdDisplay":
|
|
|
|
|
+ user.setPayPwd(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "AuthFlag":
|
|
|
|
|
+ user.setRealStatus(Integer.valueOf(fieldDataMap.get(field).toString()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "AuthDate":
|
|
|
|
|
+ userReal.setCreateTime(LocalDateTimeUtil.parse(fieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
|
|
|
|
|
+ userBank.setCreateTime(LocalDateTimeUtil.parse(fieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "Status":
|
|
|
|
|
+ if(Integer.parseInt(fieldDataMap.get(field).toString()) == 0){
|
|
|
|
|
+ user.setStatus(1);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ user.setStatus(0);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "MerchantType":
|
|
|
|
|
+ user.setIsMerchantMaker(Integer.valueOf(fieldDataMap.get(field).toString()));
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "LockStatus":
|
|
|
|
|
+ if(Integer.parseInt(fieldDataMap.get(field).toString()) == 1){
|
|
|
|
|
+ user.setStatus(2);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ user.setStatus(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "Remark":
|
|
|
|
|
+ user.setRemark(fieldDataMap.get(field).toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "LogOutDate":
|
|
|
|
|
+ user.setUpdateTime(LocalDateTimeUtil.parse(fieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(operation.equals(OperationType.UPDATE)){
|
|
|
|
|
+// user.setId(Integer.valueOf(userId));
|
|
|
|
|
+// userReal.setUserId(Integer.valueOf(userId));
|
|
|
|
|
+// userBank.setUserId(Integer.valueOf(userId));
|
|
|
|
|
+
|
|
|
|
|
+ if(BeanUtil.isNotEmpty(user, "entityClass")){
|
|
|
|
|
+ user.setId(Integer.valueOf(userId));
|
|
|
|
|
+ //密码明文
|
|
|
|
|
+ if(StrUtil.isNotBlank(user.getPassword())){
|
|
|
|
|
+ user.setPassword(ENCODER.encode(user.getPassword() + kxsUser.getSalt()));
|
|
|
|
|
+ }
|
|
|
|
|
+ //支付密码明文
|
|
|
|
|
+ if(StrUtil.isNotBlank(user.getPayPwd())){
|
|
|
|
|
+ user.setPayPwd(ENCODER.encode(user.getPayPwd() + kxsUser.getSalt()));
|
|
|
|
|
+ }
|
|
|
|
|
+ baseMapper.updateById(user);
|
|
|
|
|
+ }
|
|
|
|
|
+ if(BeanUtil.isNotEmpty(userReal, "entityClass")){
|
|
|
|
|
+ KxsUserReal kxsUserReal = kxsUserRealMapper.selectOne(Wrappers.<KxsUserReal>lambdaQuery().eq(KxsUserReal::getUserId, userId));
|
|
|
|
|
+ if(kxsUserReal != null){
|
|
|
|
|
+ userReal.setId(kxsUserReal.getId());
|
|
|
|
|
+ kxsUserRealMapper.updateById(userReal);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ userReal.setUserId(Integer.valueOf(userId));
|
|
|
|
|
+ kxsUserRealMapper.insert(userReal);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if(BeanUtil.isNotEmpty(userBank, "entityClass")){
|
|
|
|
|
+ KxsUserBank kxsUserBank = kxsUserBankMapper.selectOne(Wrappers.<KxsUserBank>lambdaQuery().eq(KxsUserBank::getUserId, userId));
|
|
|
|
|
+ if(kxsUserBank != null){
|
|
|
|
|
+ userBank.setId(kxsUserBank.getId());
|
|
|
|
|
+ kxsUserBankMapper.updateById(userBank);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ userBank.setUserId(Integer.valueOf(userId));
|
|
|
|
|
+ kxsUserBankMapper.insert(userBank);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //新增数据必然没有实名信息,所以不做操作
|
|
|
|
|
+ if(operation.equals(OperationType.INSERT)){
|
|
|
|
|
+ //加盐
|
|
|
|
|
+ String salt = UUID.randomUUID().toString();
|
|
|
|
|
+ kxsUser.setSalt(salt);
|
|
|
|
|
+ //登陆密码
|
|
|
|
|
+ kxsUser.setPassword(ENCODER.encode(user.getPassword() + salt));
|
|
|
|
|
+ baseMapper.insert(user);
|
|
|
|
|
+
|
|
|
|
|
+ //添加用户账户表
|
|
|
|
|
+// KxsUserAmount kxsUserAmount = new KxsUserAmount();
|
|
|
|
|
+// kxsUserAmount.setUserId(kxsUser.getId());
|
|
|
|
|
+// userAmountMapper.insert(kxsUserAmount);
|
|
|
|
|
+//
|
|
|
|
|
+// //初始化用户预发额度表
|
|
|
|
|
+// KxsWarehouseLimit kxsWarehouseLimit = new KxsWarehouseLimit();
|
|
|
|
|
+// kxsWarehouseLimit.setUserId(kxsUser.getId());
|
|
|
|
|
+// R<Boolean> booleanR = remoteKxsStoreService.addUserAdvanceLimit(kxsWarehouseLimit, SecurityConstants.FROM_IN);
|
|
|
|
|
+// if(!booleanR.getData()){
|
|
|
|
|
+// throw new RuntimeException(ErrorTypeEnum.REMOTE_DATA_ERROR.getDescription());
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// //发送个人消息
|
|
|
|
|
+// KxsUserMsg kxsUserMsg = MsgTemplateUtil.newUserPush(user.getPid());
|
|
|
|
|
+// remoteUserMsgService.pushUserMsg(kxsUserMsg, SecurityConstants.FROM_IN);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|
|
|
|
|
+
|