فهرست منبع

add 账号修改密码记录

zoujiajian 3 سال پیش
والد
کامیت
f3be9f9cee

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/AccountUpdatePasswordRecordMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.AccountUpdatePasswordRecord;
+
+/*
+ *项目名: netflix
+ *文件名: AccountUpdatePasswordRecordMapper
+ *创建者: JavaZou
+ *创建时间:2023/3/27 14:34
+ */
+public interface AccountUpdatePasswordRecordMapper extends BaseMapper<AccountUpdatePasswordRecord> {
+}

+ 26 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/AccountUpdatePasswordRecord.java

@@ -0,0 +1,26 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: AccountUpdatePasswordRecord
+ *创建者: JavaZou
+ *创建时间:2023/3/27 14:29
+ */
+@Getter
+@Setter
+public class AccountUpdatePasswordRecord extends BaseEntity{
+	private Long accountId;
+
+	private String oldPassword;
+
+	private String newPassword;
+
+	private Long operateUserId;
+
+	private String operator;
+
+	private String type;
+}

+ 6 - 0
netflix-dao/src/main/java/com/cyksj/model/manage/views/AccountView.java

@@ -100,4 +100,10 @@ public class AccountView {
 
     @DbField("max(gr.expiry_time)")
     private Date lastTicketTime;
+
+    @DbIgnore
+    private Integer updatePwdNum;
+
+    @DbIgnore
+    private Date lastUpdatePwdDate;
 }

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/mange/CmsAccountService.java

@@ -28,4 +28,9 @@ public interface CmsAccountService extends IService<Account> {
 	 * 获取所有车票已过期的账号
 	 */
 	List<AccountView> getExpiredAllAccount();
+
+	/**
+	 * 保存修改密码记录
+	 */
+	void saveRecord(Long operateUserId,Long accountId, String oldPassword, String newPassword, String type);
 }

+ 21 - 0
netflix-service/src/main/java/com/cyksj/service/mange/account/CmsAccountServiceImpl.java

@@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.cyksj.mapper.AccountMapper;
+import com.cyksj.mapper.AccountUpdatePasswordRecordMapper;
+import com.cyksj.mapper.manage.cms.CmsUserMapper;
 import com.cyksj.model.entity.Account;
+import com.cyksj.model.entity.AccountUpdatePasswordRecord;
 import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.excel.ExcelAccountData;
 import com.cyksj.model.manage.views.AccountView;
@@ -16,6 +19,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Optional;
 
 /**
  * @author chan
@@ -27,6 +31,10 @@ import java.util.List;
 public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements CmsAccountService {
 	private final AccountMapper accountMapper;
 
+	private final AccountUpdatePasswordRecordMapper accountUpdatePasswordRecordMapper;
+
+	private final CmsUserMapper cmsUserMapper;
+
 	@Override
 	public IPage<ExpiredAccountDataView> getExpiredAccountView(Boolean isCorpWx, String customerService, Long goodsId, Long skuId, String account, Boolean renewStatus, Boolean handleStatus, String cnAccount, String usAccount, Integer userId, String startTime, String endTime, String now, Long offset, Long limit) {
 		return accountMapper.getExpiredAccountView(isCorpWx, customerService, goodsId, skuId, account, renewStatus, handleStatus, cnAccount, usAccount, userId, startTime, endTime, now, new Page<>(offset, limit));
@@ -51,4 +59,17 @@ public class CmsAccountServiceImpl extends ServiceImpl<AccountMapper, Account> i
 	public List<AccountView> getExpiredAllAccount() {
 		return accountMapper.getExpiredAllAccount();
 	}
+
+	@Override
+	public void saveRecord(Long operateUserId, Long accountId, String oldPassword, String newPassword, String type) {
+		AccountUpdatePasswordRecord record = new AccountUpdatePasswordRecord();
+		record.setAccountId(accountId);
+		record.setOperateUserId(operateUserId);
+		Optional.ofNullable(cmsUserMapper.selectById(operateUserId))
+				.ifPresent(admin -> record.setOperator(admin.getNickname()));
+		record.setOldPassword(oldPassword);
+		record.setNewPassword(newPassword);
+		record.setType(type);
+		accountUpdatePasswordRecordMapper.insert(record);
+	}
 }

+ 20 - 20
netflix-service/src/main/java/com/cyksj/task/Scheduler.java

@@ -125,26 +125,26 @@ public class Scheduler {
                 log.info("发送账号即将到期消息至用户:{}", user.getId());
                 weChatService.sendTemplateMessage(weChatService.getAccessToken(wxAppTemplateView.getAppId()), Jsons.toJson(templateMessage));
 
-                List<Account> accounts = accountMapper.selectList(Wrappers.lambdaQuery(Account.class).le(Account::getExpiryTime, time));
-                List<CustomerService> customerServices = customerServiceMapper.selectList(null);
-                if(!accounts.isEmpty()){
-                    for (CustomerService customerService : customerServices) {
-                        openId = customerService.getOpenId();
-                        WxMpTemplateMessage manageMessage = new WxMpTemplateMessage()
-                                .setToUser(openId)
-                                .setTemplateId(wxAppTemplateView.getTemplateId())
-                                .setUrl(" ");
-                        WxMpTemplateMessage.TemplateData data2 = manageMessage.getData();
-                        data2.setFirst(new WxMpTemplateData("您有" + accounts.size() + "个主账号即将到期"));
-                        data2.setKeyword1(new WxMpTemplateData("车队主账号"));
-                        data2.setKeyword2(new WxMpTemplateData("车队主账号"));
-                        data2.setKeyword3(new WxMpTemplateData("5天后"));
-                        data2.setKeyword4(new WxMpTemplateData("账号即将到期"));
-                        data2.setRemark(new WxMpTemplateData("请尽快登录后台-在账号管理中查看"));
-                        log.info("发送账号即将到期消息至客服:{}", customerService.getNickName());
-                        weChatService.sendTemplateMessage(weChatService.getAccessToken(),Jsons.toJson(manageMessage));
-                    }
-                }
+//                List<Account> accounts = accountMapper.selectList(Wrappers.lambdaQuery(Account.class).le(Account::getExpiryTime, time));
+//                List<CustomerService> customerServices = customerServiceMapper.selectList(null);
+//                if(!accounts.isEmpty()){
+//                    for (CustomerService customerService : customerServices) {
+//                        openId = customerService.getOpenId();
+//                        WxMpTemplateMessage manageMessage = new WxMpTemplateMessage()
+//                                .setToUser(openId)
+//                                .setTemplateId(wxAppTemplateView.getTemplateId())
+//                                .setUrl(" ");
+//                        WxMpTemplateMessage.TemplateData data2 = manageMessage.getData();
+//                        data2.setFirst(new WxMpTemplateData("您有" + accounts.size() + "个主账号即将到期"));
+//                        data2.setKeyword1(new WxMpTemplateData("车队主账号"));
+//                        data2.setKeyword2(new WxMpTemplateData("车队主账号"));
+//                        data2.setKeyword3(new WxMpTemplateData("5天后"));
+//                        data2.setKeyword4(new WxMpTemplateData("账号即将到期"));
+//                        data2.setRemark(new WxMpTemplateData("请尽快登录后台-在账号管理中查看"));
+//                        log.info("发送账号即将到期消息至客服:{}", customerService.getNickName());
+//                        weChatService.sendTemplateMessage(weChatService.getAccessToken(),Jsons.toJson(manageMessage));
+//                    }
+//                }
             }
         }
 

+ 50 - 14
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java

@@ -1,6 +1,7 @@
 package com.cyksj.web.controller.manage.account;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
@@ -102,6 +103,15 @@ public class CmsAccountController {
             accountView.setUnInvited(unInvited);
             accountView.setInvited(invited);
             accountView.setTotal(total);
+	        List<AccountUpdatePasswordRecord> recordList = beanSearcher.searchList(AccountUpdatePasswordRecord.class,
+			        MapUtils.builder().field(AccountUpdatePasswordRecord::getAccountId, accountView.getId())
+					        .onlySelect(AccountUpdatePasswordRecord::getCreatedTime)
+					        .orderBy(AccountUpdatePasswordRecord::getId)
+					        .build());
+	        accountView.setUpdatePwdNum(recordList.size());
+	        if (recordList.size() > 0) {
+		        accountView.setLastUpdatePwdDate(recordList.get(0).getCreatedTime());
+	        }
         });
         return GatewayResponse.SUCCESS.newBuilder().toResult(search);
     }
@@ -146,6 +156,7 @@ public class CmsAccountController {
 	 */
 	@PostMapping("/import/account")
 	public Result<String> importAccount(Long goodsId, MultipartFile file) throws Exception {
+		long userId = StpUtil.getLoginIdAsLong();
 		EasyExcel.read(file.getInputStream(), ExcelImportAccountData.class, new AnalysisEventListener<ExcelImportAccountData>() {
 			@SneakyThrows
 			@Override
@@ -157,6 +168,7 @@ public class CmsAccountController {
 					Boolean flag = false;
 					Boolean isUpdatePwd = false;
 					if (account != null) {
+						String oldPwd = account.getPassword();
 						if (StrUtil.isNotBlank(data.getStartTime())) {
 							account.setStartTime(DateUtil.parse(data.getStartTime(), "yyyy-MM-dd HH:mm:ss"));
 							flag = true;
@@ -179,6 +191,7 @@ public class CmsAccountController {
 								userTicketClearedRecordMapper.update(null, Wrappers.lambdaUpdate(UserTicketClearedRecord.class)
 										.set(UserTicketClearedRecord::getDeleted, false)
 										.eq(UserTicketClearedRecord::getAccountId, account.getId()));
+								accountService.saveRecord(userId, account.getId(), oldPwd, account.getPassword(), "上传文件修改密码");
 							}
 						}
 					}
@@ -284,7 +297,15 @@ public class CmsAccountController {
     @SaCheckPermission("account:update")
     @Log(module = "平台管理/编辑账号", businessType = BusinessType.PUT, isSaveRequestData = true)
     public Result<String> update(@RequestBody Account account){
-		if (StrUtil.isNotBlank(account.getAccount())){
+	    Account db = accountService.getById(account.getId());
+	    if (db == null) {
+		    throw BusinessRuntimeException.getInstance("该账号不存在");
+	    }
+	    long userId = StpUtil.getLoginIdAsLong();
+	    if (!db.getPassword().equals(account.getPassword())) {
+		    accountService.saveRecord(userId, account.getId(), db.getPassword(), account.getPassword(), "操作编辑");
+	    }
+	    if (StrUtil.isNotBlank(account.getAccount())){
 			account.setAccount(account.getAccount().trim());
 		}
 	    if (StrUtil.isNotBlank(account.getPassword())){
@@ -300,21 +321,27 @@ public class CmsAccountController {
 	@PutMapping("/update/pwd")
 	@Log(module = "平台管理/批量修改密码", businessType = BusinessType.PUT, isSaveRequestData = true)
 	public Result<String> updatePwdAndSendMsg(@RequestBody List<Account> accounts) throws Exception {
+		long userId = StpUtil.getLoginIdAsLong();
 		accounts.forEach(account -> {
 			Account db = accountService.getById(account.getId());
-			String updatePWd = account.getPassword().trim();
-			if (!db.getPassword().equals(updatePWd)) {
-				db.setPassword(updatePWd);
-				accountService.updateById(db);
-				//清空过期账号 逻辑删除
-				userTicketClearedRecordMapper.update(null, Wrappers.lambdaUpdate(UserTicketClearedRecord.class)
-						.set(UserTicketClearedRecord::getDeleted, false)
-						.eq(UserTicketClearedRecord::getAccountId, account.getId()));
-				//发放模板消息
-				try {
-					templateCommonService.sendAccountTemplateMsg(account);
-				} catch (Exception e) {
-					log.error("发送账号{}修改密码消息模板错误", account.getId());
+			if (db != null) {
+				String oldPwd = db.getPassword();
+				String updatePWd = account.getPassword().trim();
+				if (!oldPwd.equals(updatePWd)) {
+					db.setPassword(updatePWd);
+					accountService.updateById(db);
+					//记录
+					accountService.saveRecord(userId, account.getId(), oldPwd, updatePWd, "多选修改密码");
+					//清空过期账号 逻辑删除
+					userTicketClearedRecordMapper.update(null, Wrappers.lambdaUpdate(UserTicketClearedRecord.class)
+							.set(UserTicketClearedRecord::getDeleted, false)
+							.eq(UserTicketClearedRecord::getAccountId, account.getId()));
+					//发放模板消息
+					try {
+						templateCommonService.sendAccountTemplateMsg(account);
+					} catch (Exception e) {
+						log.error("发送账号{}修改密码消息模板错误", account.getId());
+					}
 				}
 			}
 		});
@@ -375,4 +402,13 @@ public class CmsAccountController {
 		String platForms = platFormSet.stream().collect(Collectors.joining("、"));
 		return GatewayResponse.SUCCESS.newBuilder().toResult(platForms);
 	}
+
+	/**
+	 * 账号修改密码记录详情列表
+	 */
+	@GetMapping("/get/updatePwd/record")
+	public Result<SearchResult<AccountUpdatePasswordRecord>> getUpdatePwdRecord() {
+		SearchResult<AccountUpdatePasswordRecord> search = beanSearcher.search(AccountUpdatePasswordRecord.class, MapUtils.flatBuilder(request.getParameterMap()).build());
+		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+	}
 }