zoujiajian 9 сар өмнө
parent
commit
ecd1660c76

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

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.NetflixAccountUpdatePwdTaskRecord;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: NetflixAccountUpdatePwdTaskRecordMapper
+ * 创建者: JavaZou
+ * 创建时间:2025/11/13 17:07
+ */
+public interface NetflixAccountUpdatePwdTaskRecordMapper extends BaseMapper<NetflixAccountUpdatePwdTaskRecord> {
+}

+ 39 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/NetflixAccountUpdatePwdTaskRecord.java

@@ -0,0 +1,39 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: NetflixAccountUpdatePwdTaskRecord
+ * 创建者: JavaZou
+ * 创建时间:2025/11/13 17:02
+ */
+@Getter
+@Setter
+public class NetflixAccountUpdatePwdTaskRecord {
+	private Long accountId;
+
+	private String account;
+
+	private String oldPwd;
+
+	private String newPwd;
+
+	/**
+	 * 任务id
+	 */
+	private String transId;
+
+	/**
+	 * 任务状态,0为正在执行,1为成功 2失败
+	 */
+	private Integer status;
+
+	private String failReason;
+
+	/**
+	 * 操作人
+	 */
+	private String operator;
+}

+ 23 - 0
netflix-dao/src/main/java/com/cyksj/model/request/NfUpdatePwdReq.java

@@ -0,0 +1,23 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: NfUpdatePwdReq
+ * 创建者: JavaZou
+ * 创建时间:2025/11/13 17:08
+ */
+@Getter
+@Setter
+public class NfUpdatePwdReq {
+	private Long accountId;
+
+	/**
+	 * 新密码
+	 */
+	private String newPwd;
+
+	private Long operateUserId;
+}

+ 23 - 0
netflix-dao/src/main/java/com/cyksj/model/response/NfStatusResp.java

@@ -0,0 +1,23 @@
+package com.cyksj.model.response;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 项目名: yhlxj11111111
+ * 文件名: NfStatusResp
+ * 创建者: JavaZou
+ * 创建时间:2025/11/13 17:20
+ */
+@Getter
+@Setter
+public class NfStatusResp {
+	private String transId;
+
+	/**
+	 * 任务状态,0为正在执行,1为成功 2失败
+	 */
+	private Integer status;
+
+	private String errorInfo;
+}

+ 6 - 0
netflix-service/src/main/java/com/cyksj/service/mange/CmsGroupService.java

@@ -2,7 +2,9 @@ package com.cyksj.service.mange;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.cyksj.model.entity.GroupsTrips;
+import com.cyksj.model.request.NfUpdatePwdReq;
 import com.cyksj.model.request.ReplaceTripsAccountReq;
+import com.cyksj.model.response.NfStatusResp;
 
 /**
  * @author chan
@@ -21,4 +23,8 @@ public interface CmsGroupService extends IService<GroupsTrips> {
 	Integer getAvailableRelation(Long goodsId, Long skuId);
 
     void sendChangeAccountMsg(Long groupsId, Long goodsId, String account);
+
+	NfStatusResp updateNfAccount(NfUpdatePwdReq req) throws Exception;
+
+	NfStatusResp getNfAccountTaskStatusByTid(String transId) throws Exception;
 }

+ 82 - 0
netflix-service/src/main/java/com/cyksj/service/mange/group/CmsGroupServiceImpl.java

@@ -19,7 +19,9 @@ import com.cyksj.mapper.manage.cms.SysLogMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.AccountView;
 import com.cyksj.model.manage.views.GroupsRelationView;
+import com.cyksj.model.request.NfUpdatePwdReq;
 import com.cyksj.model.request.ReplaceTripsAccountReq;
+import com.cyksj.model.response.NfStatusResp;
 import com.cyksj.model.views.GroupsAccountView;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.chatgpt.GptUserRechargeRecordService;
@@ -102,6 +104,10 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
 
     private final SysLogMapper sysLogMapper;
 
+    private final NetflixAccountUpdatePwdTaskRecordMapper netflixAccountUpdatePwdTaskRecordMapper;
+
+    private final AccountUpdatePasswordRecordMapper accountUpdatePasswordRecordMapper;
+
     private static final GlobalThreadPoolTaskExecutor TASK_EXECUTOR = GlobalThreadPoolTaskExecutor.getInstance();
 
 
@@ -546,6 +552,72 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
         });
     }
 
+    @Override
+    public NfStatusResp updateNfAccount(NfUpdatePwdReq req) throws Exception {
+        Long accountId = req.getAccountId();
+        Long operateUserId = req.getOperateUserId();
+        Account account = accountMapper.selectById(accountId);
+        if (account == null || account.getGoodsId() != 18) {
+            throw BusinessRuntimeException.getInstance("非奈飞账号");
+        }
+        NetflixAccountUpdatePwdTaskRecord existsProgressingTaskRecord = netflixAccountUpdatePwdTaskRecordMapper.selectOne(Wrappers.lambdaQuery(NetflixAccountUpdatePwdTaskRecord.class).eq(NetflixAccountUpdatePwdTaskRecord::getAccount, account).eq(NetflixAccountUpdatePwdTaskRecord::getStatus, 0).last("limit 1"));
+        if (existsProgressingTaskRecord != null) {
+            String transId = existsProgressingTaskRecord.getTransId();
+            NfStatusResp resp = groupsRelationNetflixService.getNfTaskStatus(transId);
+            Integer status = resp.getStatus();
+            if (status == 0) {
+                throw BusinessRuntimeException.getInstance("已有正在执行中的任务");
+            }
+            if (status == 2) {
+                existsProgressingTaskRecord.setFailReason(resp.getErrorInfo());
+            }
+            existsProgressingTaskRecord.setStatus(status);
+            if (status == 1) {
+                saveAccountUpdateShowRecord(existsProgressingTaskRecord);
+            }
+            netflixAccountUpdatePwdTaskRecordMapper.updateById(existsProgressingTaskRecord);
+        }
+
+        CmsUser cmsUser = cmsUserMapper.selectById(operateUserId);
+
+        String newPWd = req.getNewPwd();
+        NfStatusResp resp = groupsRelationNetflixService.updateNfAccount(account.getAccount(), account.getPassword(), newPWd);
+        //任务id
+        String transId = resp.getTransId();
+        Integer status = resp.getStatus();
+
+        NetflixAccountUpdatePwdTaskRecord taskRecord = new NetflixAccountUpdatePwdTaskRecord();
+        taskRecord.setTransId(transId);
+        taskRecord.setStatus(status);
+        taskRecord.setAccountId(accountId);
+        taskRecord.setAccount(account.getAccount());
+        taskRecord.setOldPwd(account.getPassword());
+        taskRecord.setNewPwd(newPWd);
+        taskRecord.setOperator(cmsUser.getNickname());
+        taskRecord.setFailReason(resp.getErrorInfo());
+        netflixAccountUpdatePwdTaskRecordMapper.insert(taskRecord);
+
+        return resp;
+    }
+
+    @Override
+    public NfStatusResp getNfAccountTaskStatusByTid(String transId) throws Exception {
+        NfStatusResp resp = groupsRelationNetflixService.getNfTaskStatus(transId);
+        Integer status = resp.getStatus();
+        if (status != 0) {
+            NetflixAccountUpdatePwdTaskRecord taskRecord = netflixAccountUpdatePwdTaskRecordMapper.selectOne(Wrappers.lambdaQuery(NetflixAccountUpdatePwdTaskRecord.class).eq(NetflixAccountUpdatePwdTaskRecord::getTransId, transId).last("limit 1"));
+            taskRecord.setStatus(status);
+            if (status == 1) {
+                saveAccountUpdateShowRecord(taskRecord);
+            }
+            if (status == 2) {
+                taskRecord.setFailReason(resp.getErrorInfo());
+            }
+            netflixAccountUpdatePwdTaskRecordMapper.updateById(taskRecord);
+        }
+        return resp;
+    }
+
     public Integer getAvailableAfterPreAccount(Integer available, Long skuId, Integer maxNum, Long goodsId) {
         MapBuilder builder = MapUtils.builder();
         if (goodsId == 26) {
@@ -663,4 +735,14 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
 
         }
     }
+
+    public void saveAccountUpdateShowRecord(NetflixAccountUpdatePwdTaskRecord taskRecord) {
+        AccountUpdatePasswordRecord record = new AccountUpdatePasswordRecord();
+        record.setAccountId(taskRecord.getAccountId());
+        record.setOperator(taskRecord.getOperator());
+        record.setOldPassword(taskRecord.getOldPwd());
+        record.setNewPassword(taskRecord.getNewPwd());
+        record.setType("通过奈飞API修改密码");
+        accountUpdatePasswordRecordMapper.insert(record);
+    }
 }

+ 5 - 0
netflix-service/src/main/java/com/cyksj/service/relation/GroupsRelationNetflixService.java

@@ -2,6 +2,7 @@ package com.cyksj.service.relation;
 
 import cn.hutool.json.JSONObject;
 import com.cyksj.model.request.NfDeviceReq;
+import com.cyksj.model.response.NfStatusResp;
 
 import java.util.Date;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -30,4 +31,8 @@ public interface GroupsRelationNetflixService {
 	JSONObject nfKickOut(long userId, Long relationId);
 
 	void clickNfHouseholdDevice(NfDeviceReq nfDeviceReq);
+
+	NfStatusResp updateNfAccount(String account, String oldPwd, String newPwd);
+
+	NfStatusResp getNfTaskStatus(String taskId) throws Exception;
 }

+ 54 - 0
netflix-service/src/main/java/com/cyksj/service/relation/impl/GroupsRelationNetflixServiceImpl.java

@@ -19,6 +19,7 @@ import com.cyksj.model.entity.GroupsRelation;
 import com.cyksj.model.entity.GroupsTrips;
 import com.cyksj.model.entity.User;
 import com.cyksj.model.request.NfDeviceReq;
+import com.cyksj.model.response.NfStatusResp;
 import com.cyksj.redis.RedisService;
 import com.cyksj.service.relation.GroupsRelationNetflixService;
 import com.cyksj.service.user.UserBindRelationService;
@@ -213,6 +214,59 @@ public class GroupsRelationNetflixServiceImpl implements GroupsRelationNetflixSe
 		}
 	}
 
+	@Override
+	public NfStatusResp updateNfAccount(String account, String oldPwd, String newPwd) {
+		JSONObject params = new JSONObject();
+		params.putOpt("username", account);
+		params.putOpt("password", oldPwd);
+		params.putOpt("new_password", newPwd);
+		//设置座位
+		String url = Constant.ZHAOJU_MOVIES + "/netflix_password_change";
+		log.info("设置奈飞账号:{}密码,原密码:{}----> 新密码:{}", account, oldPwd, newPwd);
+		try {
+			HttpResponse<String> res =
+					J11HttpC.custom()
+							.ofPost()
+							.url(url)
+							.headers(J11HttpC.ReqType.raw_json)
+							.body(HttpRequest.BodyPublishers.ofString(Jsons.toJson(params), IoKit.Charsets.UTF_8.getCharset()))
+							.send(HttpResponse.BodyHandlers.ofString());
+			String body = res.body();
+			JSONObject jsonObject = Jsons.parseObject(body, JSONObject.class);
+			NfStatusResp data = Jsons.parseObject(jsonObject.get("data"), NfStatusResp.class);
+			Integer status = data.getStatus();
+			if (status == 2) {
+				log.error("修改奈飞账号:{}密码失败", account);
+			}
+			return data;
+		} catch (Exception e) {
+			log.error("设置奈飞账号:{}密码错误,msg:{}", account, StringUtil.getErrorText(e));
+		}
+		NfStatusResp resp = new NfStatusResp();
+		resp.setStatus(2);
+		resp.setErrorInfo("奈飞API接口调用失败");
+		return resp;
+	}
+
+	@Override
+	public NfStatusResp getNfTaskStatus(String taskId) throws Exception {
+		JSONObject params = new JSONObject();
+		params.putOpt("transId", taskId);
+		//查询任务状态
+		String url = Constant.ZHAOJU_MOVIES + "/netflix_task_status";
+		HttpResponse<String> res =
+				J11HttpC.custom()
+						.ofPost()
+						.url(url)
+						.headers(J11HttpC.ReqType.raw_json)
+						.body(HttpRequest.BodyPublishers.ofString(Jsons.toJson(params), IoKit.Charsets.UTF_8.getCharset()))
+						.send(HttpResponse.BodyHandlers.ofString());
+		String body = res.body();
+		JSONObject jsonObject = Jsons.parseObject(body, JSONObject.class);
+		NfStatusResp data = Jsons.parseObject(jsonObject.get("data"), NfStatusResp.class);
+		return data;
+	}
+
 	/**
 	 * 踢出奈飞设备
 	 */

+ 23 - 0
netflix-web/src/main/java/com/cyksj/web/controller/manage/account/CmsAccountController.java

@@ -33,7 +33,9 @@ import com.cyksj.model.manage.request.ReqAccountIncrExpiryTime;
 import com.cyksj.model.manage.views.AccountView;
 import com.cyksj.model.manage.views.GroupsRelationView;
 import com.cyksj.model.request.DelAccountTripsReq;
+import com.cyksj.model.request.NfUpdatePwdReq;
 import com.cyksj.model.response.ExpiredAccountRep;
+import com.cyksj.model.response.NfStatusResp;
 import com.cyksj.model.response.OrderDonAccountRep;
 import com.cyksj.model.views.*;
 import com.cyksj.redis.RedisService;
@@ -1507,4 +1509,25 @@ public class CmsAccountController {
 		EasyExcelUtils.createExcelStreamMutilByEasyExcel(response, ExcelBannerNfAccountData.class, list, title, title, ExcelTypeEnum.XLSX, null);
 	}
 
+
+	/**
+	 * 奈飞修改密码
+	 */
+	@PutMapping("/update/nf/account")
+	public Result<NfStatusResp> updateNfAccount(@RequestBody NfUpdatePwdReq req) throws Exception {
+		long userId = StpUtil.getLoginIdAsLong();
+		req.setOperateUserId(userId);
+		NfStatusResp re = cmsGroupService.updateNfAccount(req);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(re);
+	}
+
+	/**
+	 * 奈飞任务执行状态
+	 */
+	@GetMapping("/update/nf/account/task/status/{transId}")
+	public Result<NfStatusResp> getNfAccountTaskStatusByTid(@PathVariable String transId) throws Exception {
+		NfStatusResp resp = cmsGroupService.getNfAccountTaskStatusByTid(transId);
+		return GatewayResponse.SUCCESS.newBuilder().toResult(resp);
+	}
+
 }