Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

UserApi.cs 23 KiB

4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
4 lat temu
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  1. using System;
  2. using Learun.Application.Base.SystemModule;
  3. using Learun.Application.Organization;
  4. using Learun.Application.TwoDevelopment.EducationalAdministration;
  5. using Learun.Util;
  6. using Learun.Util.Operat;
  7. using Nancy;
  8. using System.Collections.Generic;
  9. using System.Configuration;
  10. using System.Linq;
  11. using Learun.Application.TwoDevelopment.LR_Desktop;
  12. using Learun.Cache.Base;
  13. using Learun.Cache.Factory;
  14. using Quanjiang.DigitalScholl.SendSms;
  15. namespace Learun.Application.WebApi
  16. {
  17. /// <summary>
  18. /// 版 本 Learun-ADMS V7.0.0 数字化智慧校园
  19. /// Copyright (c) 2013-2018 北京泉江科技有限公司
  20. /// 创建人:数字化智慧校园-框架开发组
  21. /// 日 期:2017.05.12
  22. /// 描 述:用户信息
  23. /// </summary>
  24. public class UserApi : BaseApi
  25. {
  26. /// <summary>
  27. /// 注册接口
  28. /// </summary>
  29. public UserApi()
  30. : base("/learun/adms/user")
  31. {
  32. Post["/login"] = Login;
  33. Post["/logincodeverify"] = LoginCodeVerify;
  34. Post["/modifypw"] = ModifyPassword;
  35. Post["/modifypwiden"] = ModifyPasswordiden;
  36. Post["/unbundWeiXin"] = DoUnbundWeiXin;
  37. Post["/loginbyIdCard"] = LoginByIdCard;
  38. Get["/info"] = Info;
  39. Get["/onedrivelogin"] = onedrivelogin;
  40. Get["/map"] = GetMap;
  41. Get["/img"] = GetImg;
  42. Get["/imgfordc"] = GetImgForDC;
  43. Get["/saveMap"] = GetSaveClassMap;
  44. Get["/checkupdate"] = CheckUpdate;
  45. }
  46. private UserIBLL userIBLL = new UserBLL();
  47. private PostIBLL postIBLL = new PostBLL();
  48. private RoleIBLL roleIBLL = new RoleBLL();
  49. private StuInfoBasicIBLL stuInfoBasicIBLL = new StuInfoBasicBLL();
  50. CdMajorIBLL majorIbll = new CdMajorBLL();
  51. private readonly ISms yixintongSms = new YixintongSms();
  52. private ICache redisCache = CacheFactory.CaChe();
  53. private Sys_UpdateRecordIBLL sysUpdateRecordIbll = new Sys_UpdateRecordBLL();
  54. AnnexesFileIBLL annexesFileIbll=new AnnexesFileBLL();
  55. /// <summary>
  56. /// 检查更新
  57. /// </summary>
  58. /// <param name="_"></param>
  59. /// <returns></returns>
  60. private Response CheckUpdate(dynamic _)
  61. {
  62. var update=sysUpdateRecordIbll.GetNewest();
  63. if (update!=null&&!string.IsNullOrEmpty(update.AppUrl))
  64. {
  65. var downurl = annexesFileIbll.GetEntityByFolderId(update.AppUrl);
  66. if (downurl.F_FilePath.Contains("Resource"))
  67. {
  68. return Success(new { version = update.VersionNum, content = update.Content, url ="/"+ downurl.F_FilePath.Substring(downurl.F_FilePath.IndexOf("Resource")) });
  69. }
  70. return Success(new { version = update.VersionNum, content = update.Content, url = "" });
  71. }
  72. return Success(new {version="1.0.0",content="",url=""});
  73. }
  74. /// <summary>
  75. /// 登录二次短信验证
  76. /// </summary>
  77. /// <param name="_"></param>
  78. /// <returns></returns>
  79. private Response LoginCodeVerify(dynamic _)
  80. {
  81. MobileVerify mobileVerify = this.GetReqData<MobileVerify>();
  82. var code = redisCache.Read<string>("studentuserlogin_" + mobileVerify.mobile);
  83. if (!string.IsNullOrEmpty(code) && code == mobileVerify.verifycode)
  84. {
  85. return Success("验证成功。");
  86. }
  87. else
  88. {
  89. return Fail("验证失败,验证码错误或已失效。");
  90. }
  91. }
  92. /// <summary>
  93. /// 登录接口
  94. /// </summary>
  95. /// <param name="_"></param>
  96. /// <returns></returns>
  97. private Response Login(dynamic _)
  98. {
  99. LoginModel loginModel = this.GetReqData<LoginModel>();
  100. #region 内部账户验证
  101. UserEntity userEntity = userIBLL.CheckLogin(loginModel.username, loginModel.password);
  102. #region 写入日志
  103. LogEntity logEntity = new LogEntity();
  104. logEntity.F_CategoryId = 1;
  105. logEntity.F_OperateTypeId = ((int)OperationType.Login).ToString();
  106. logEntity.F_OperateType = EnumAttribute.GetDescription(OperationType.Login);
  107. logEntity.F_OperateAccount = loginModel.username + "(" + userEntity.F_RealName + ")";
  108. logEntity.F_OperateUserId = !string.IsNullOrEmpty(userEntity.F_UserId) ? userEntity.F_UserId : loginModel.username;
  109. logEntity.F_Module = Config.GetValue("SoftName");
  110. logEntity.F_Description = "移动端";
  111. #endregion
  112. if (!userEntity.LoginOk)//登录失败
  113. {
  114. //写入日志
  115. logEntity.F_ExecuteResult = 0;
  116. logEntity.F_ExecuteResultJson = "登录失败:" + userEntity.LoginMsg;
  117. logEntity.WriteLog();
  118. return Fail(userEntity.LoginMsg);
  119. }
  120. else
  121. {
  122. //记录ip
  123. userIBLL.UpdateIp(GetIP(), userEntity.F_UserId);
  124. string token = OperatorHelper.Instance.AddLoginUser(userEntity.F_Account, "Learun_ADMS_6.1_App", this.loginMark, false);//写入缓存信息
  125. //写入日志
  126. logEntity.F_ExecuteResult = 1;
  127. logEntity.F_ExecuteResultJson = "登录成功";
  128. logEntity.WriteLog();
  129. //保存用户设备号
  130. userIBLL.UpdateDeviceId(userEntity.F_UserId, loginModel.deviceid);
  131. OperatorResult res = OperatorHelper.Instance.IsOnLine(token, this.loginMark);
  132. res.userInfo.password = null;
  133. res.userInfo.secretkey = null;
  134. string verifyonelogin = Util.Config.GetValue("verifyonelogin");
  135. if (string.IsNullOrEmpty(verifyonelogin) || verifyonelogin != "true")
  136. {
  137. res.userInfo.logTime = null;
  138. }
  139. var studententity = stuInfoBasicIBLL.GetStuInfoBasicEntityByStuNo(userEntity.F_Account);
  140. if (studententity != null)
  141. {
  142. res.userInfo.grade = studententity.Grade;
  143. var majorinfo = majorIbll.GetCdMajorEntityByMajorNo(studententity.MajorNo);
  144. if (majorinfo != null)
  145. {
  146. res.userInfo.majorno = majorinfo.ID ?? "";
  147. }
  148. try
  149. {
  150. //学生增加短信发送验证
  151. string raRndNum = Learun.Util.CommonHelper.RndNum(6);
  152. var listStr = new List<string>();
  153. var str1 = $"欢迎使用智慧校园,您本次登录的验证码是 " + raRndNum + "。";
  154. listStr.Add(str1);
  155. var result = yixintongSms.SendSmsToSingle(userEntity.F_Mobile, SmsType.LoginBind, listStr);
  156. if (result.Result.code == "0")
  157. {
  158. redisCache.Write<string>("studentuserlogin_" + userEntity.F_Mobile, raRndNum, new TimeSpan(0, 5, 0));
  159. //日志
  160. logEntity = new LogEntity();
  161. logEntity.F_CategoryId = 3;
  162. logEntity.F_OperateTypeId = "sms";
  163. logEntity.F_OperateType = "sms";
  164. logEntity.F_OperateAccount = "system";
  165. logEntity.F_ExecuteResult = 200;
  166. logEntity.F_ExecuteResultJson = "短信发送成功:" + result.Result.message;
  167. logEntity.F_Description = "短信发送:" + userEntity.F_Mobile;
  168. logEntity.WriteLog();
  169. }
  170. else
  171. {
  172. logEntity = new LogEntity();
  173. logEntity.F_CategoryId = 4;
  174. logEntity.F_OperateTypeId = "sms";
  175. logEntity.F_OperateType = "sms";
  176. logEntity.F_OperateAccount = "system";
  177. logEntity.F_ExecuteResult = 400;
  178. logEntity.F_ExecuteResultJson = "短信发送失败:" + result.Result.message + result.Result.errorType;
  179. logEntity.F_Description = "短信发送:" + userEntity.F_Mobile;
  180. logEntity.WriteLog();
  181. }
  182. }
  183. catch (Exception e)
  184. {
  185. logEntity = new LogEntity();
  186. logEntity.F_CategoryId = 4;
  187. logEntity.F_OperateTypeId = "sms";
  188. logEntity.F_OperateType = "sms";
  189. logEntity.F_OperateAccount = "system";
  190. logEntity.F_ExecuteResult = 400;
  191. logEntity.F_ExecuteResultJson = "短信发送失败:" + e.Message;
  192. logEntity.F_Description = "短信发送:" + userEntity.F_Mobile;
  193. logEntity.WriteLog();
  194. }
  195. }
  196. //是否强密码验证
  197. bool pwd = false;
  198. if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["verifypwd"]) && ConfigurationManager.AppSettings["verifypwd"] == "true" && loginModel.up == false)
  199. {
  200. pwd = true;
  201. }
  202. var jsonData = new
  203. {
  204. baseinfo = res.userInfo,
  205. post = postIBLL.GetListByPostIds(res.userInfo.postIds),
  206. role = roleIBLL.GetListByRoleIds(res.userInfo.roleIds),
  207. pwd = pwd
  208. };
  209. return Success(jsonData);
  210. }
  211. #endregion
  212. }
  213. /// <summary>
  214. /// 身份验证-登录接口
  215. /// </summary>
  216. /// <param name="_"></param>
  217. /// <returns></returns>
  218. private Response LoginByIdCard(dynamic _)
  219. {
  220. LoginModel loginModel = this.GetReqData<LoginModel>();
  221. #region 内部账户验证
  222. UserEntity userEntity = userIBLL.CheckLoginByIdCard(loginModel.username, loginModel.password);
  223. #region 写入日志
  224. LogEntity logEntity = new LogEntity();
  225. logEntity.F_CategoryId = 1;
  226. logEntity.F_OperateTypeId = ((int)OperationType.Login).ToString();
  227. logEntity.F_OperateType = EnumAttribute.GetDescription(OperationType.Login);
  228. logEntity.F_OperateAccount = loginModel.username + "(" + userEntity.F_RealName + ")";
  229. logEntity.F_OperateUserId = !string.IsNullOrEmpty(userEntity.F_UserId) ? userEntity.F_UserId : loginModel.username;
  230. logEntity.F_Module = Config.GetValue("SoftName");
  231. logEntity.F_Description = "移动端";
  232. #endregion
  233. if (!userEntity.LoginOk)//登录失败
  234. {
  235. //写入日志
  236. logEntity.F_ExecuteResult = 0;
  237. logEntity.F_ExecuteResultJson = "登录失败:" + userEntity.LoginMsg;
  238. logEntity.WriteLog();
  239. return Fail(userEntity.LoginMsg);
  240. }
  241. else
  242. {
  243. //新增新生判断
  244. var stuinfobasic = stuInfoBasicIBLL.GetStuInfoBasicEntityByStuNo(userEntity.F_EnCode);
  245. if (stuinfobasic != null && stuinfobasic.Grade != "21")
  246. {
  247. userEntity.LoginMsg = "只有新生支持身份证方式登录";
  248. return Fail(userEntity.LoginMsg);
  249. }
  250. //记录ip
  251. userIBLL.UpdateIp(GetIP(), userEntity.F_UserId);
  252. string token = OperatorHelper.Instance.AddLoginUser(userEntity.F_Account, "Learun_ADMS_6.1_App", this.loginMark, false);//写入缓存信息
  253. //写入日志
  254. logEntity.F_ExecuteResult = 1;
  255. logEntity.F_ExecuteResultJson = "登录成功";
  256. logEntity.WriteLog();
  257. //保存用户设备号
  258. userIBLL.UpdateDeviceId(userEntity.F_UserId, loginModel.deviceid);
  259. OperatorResult res = OperatorHelper.Instance.IsOnLine(token, this.loginMark);
  260. res.userInfo.password = null;
  261. res.userInfo.secretkey = null;
  262. var studententity = stuInfoBasicIBLL.GetStuInfoBasicEntityByStuNo(userEntity.F_Account);
  263. if (studententity != null)
  264. {
  265. res.userInfo.grade = studententity.Grade;
  266. var majorinfo = majorIbll.GetCdMajorEntityByMajorNo(studententity.MajorNo);
  267. if (majorinfo != null)
  268. {
  269. res.userInfo.majorno = majorinfo.ID ?? "";
  270. }
  271. }
  272. //是否强密码验证
  273. bool pwd = false;
  274. if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["verifypwd"]) && ConfigurationManager.AppSettings["verifypwd"] == "true" && loginModel.up == false)
  275. {
  276. pwd = true;
  277. }
  278. var jsonData = new
  279. {
  280. baseinfo = res.userInfo,
  281. post = postIBLL.GetListByPostIds(res.userInfo.postIds),
  282. role = roleIBLL.GetListByRoleIds(res.userInfo.roleIds),
  283. pwd = pwd
  284. };
  285. return Success(jsonData);
  286. }
  287. #endregion
  288. }
  289. private Response onedrivelogin(dynamic _)
  290. {
  291. //多客户端登录判断
  292. string logintime = redisCache.Read<string>("logintime" + userInfo.account, CacheId.loginInfo);
  293. return Success(new {
  294. logintime
  295. });
  296. }
  297. /// <summary>
  298. /// 获取用户信息
  299. /// </summary>
  300. /// <param name="_"></param>
  301. /// <returns></returns>
  302. private Response Info(dynamic _)
  303. {
  304. var data = userInfo;
  305. data.password = null;
  306. data.secretkey = null;
  307. var jsonData = new
  308. {
  309. baseinfo = data,
  310. post = postIBLL.GetListByPostIds(data.postIds),
  311. role = roleIBLL.GetListByRoleIds(data.roleIds)
  312. };
  313. return Success(jsonData);
  314. }
  315. /// <summary>
  316. /// 修改密码
  317. /// </summary>
  318. /// <param name="_"></param>
  319. /// <returns></returns>
  320. private Response ModifyPassword(dynamic _)
  321. {
  322. ModifyModel modifyModel = this.GetReqData<ModifyModel>();
  323. if (userInfo.isSystem)
  324. {
  325. return Fail("当前账户不能修改密码");
  326. }
  327. else
  328. {
  329. bool res = userIBLL.RevisePassword(modifyModel.newpassword, modifyModel.oldpassword);
  330. if (!res)
  331. {
  332. return Fail("原密码错误,请重新输入");
  333. }
  334. else
  335. {
  336. return Success("密码修改成功");
  337. }
  338. }
  339. }
  340. private Response ModifyPasswordiden(dynamic _)
  341. {
  342. ModifyModel modifyModel = this.GetReqData<ModifyModel>();
  343. if (userInfo.isSystem)
  344. {
  345. return Fail("当前账户不能修改密码");
  346. }
  347. else
  348. {
  349. bool res = userIBLL.RevisePasswordiden(modifyModel.newpassword, modifyModel.oldpassword);
  350. if (!res)
  351. {
  352. return Fail("原密码错误,请重新输入");
  353. }
  354. else
  355. {
  356. return Success("密码修改成功");
  357. }
  358. }
  359. }
  360. /// <summary>
  361. /// 解绑微信
  362. /// </summary>
  363. /// <param name="_"></param>
  364. /// <returns></returns>
  365. private Response DoUnbundWeiXin(dynamic _)
  366. {
  367. userIBLL.DoUnbundWeiXin(userInfo.userId);
  368. return Success("解绑成功");
  369. }
  370. /// <summary>
  371. /// 获取所有员工账号列表
  372. /// </summary>
  373. /// <param name="_"></param>
  374. /// <returns></returns>
  375. private Response GetList(dynamic _)
  376. {
  377. var data = userInfo;
  378. data.password = null;
  379. data.secretkey = null;
  380. var jsonData = new
  381. {
  382. baseinfo = data,
  383. post = postIBLL.GetListByPostIds(data.postIds),
  384. role = roleIBLL.GetListByRoleIds(data.roleIds)
  385. };
  386. return Success(jsonData);
  387. }
  388. /// <summary>
  389. /// 获取用户映射表
  390. /// </summary>
  391. /// <param name="_"></param>
  392. /// <returns></returns>
  393. public Response GetMap(dynamic _)
  394. {
  395. string ver = this.GetReqData();// 获取模板请求数据
  396. var data = userIBLL.GetModelMap();
  397. string md5 = Md5Helper.Encrypt(data.ToJson(), 32);
  398. if (md5 == ver)
  399. {
  400. return Success("no update");
  401. }
  402. else
  403. {
  404. var jsondata = new
  405. {
  406. data = data,
  407. ver = md5
  408. };
  409. return Success(jsondata);
  410. }
  411. }
  412. public Response GetSaveClassMap(dynamic _)
  413. {
  414. string account = this.GetReqData<UserAccount>().account;
  415. var data = userIBLL.GetSaveClassMap();
  416. var students = stuInfoBasicIBLL.GetSaveClassStudents(account);
  417. data = data.Where(a => students.Contains(a.F_Account) && a.F_Account != account).ToList();
  418. var dic = new Dictionary<string, UserModel>();
  419. foreach (var item in data)
  420. {
  421. UserModel model = new UserModel()
  422. {
  423. companyId = item.F_CompanyId,
  424. departmentId = item.F_DepartmentId,
  425. name = item.F_RealName,
  426. id = item.F_UserId,
  427. };
  428. string img = "";
  429. if (!string.IsNullOrEmpty(item.F_HeadIcon))
  430. {
  431. string fileHeadImg = Config.GetValue("fileHeadImg");
  432. string fileImg = string.Format("{0}/{1}{2}", fileHeadImg, item.F_UserId, item.F_HeadIcon);
  433. if (DirFileHelper.IsExistFile(fileImg))
  434. {
  435. img = item.F_HeadIcon;
  436. }
  437. }
  438. if (string.IsNullOrEmpty(img))
  439. {
  440. if (item.F_Gender == 0)
  441. {
  442. img = "0";
  443. }
  444. else
  445. {
  446. img = "1";
  447. }
  448. }
  449. model.img = img;
  450. dic.Add(item.F_UserId, model);
  451. }
  452. string md5 = Md5Helper.Encrypt(dic.ToJson(), 32);
  453. var jsondata = new
  454. {
  455. data = dic,
  456. var = md5
  457. };
  458. return Success(jsondata);
  459. }
  460. /// <summary>
  461. /// 获取人员头像图标
  462. /// </summary>
  463. /// <param name="_"></param>
  464. /// <returns></returns>
  465. public Response GetImg(dynamic _)
  466. {
  467. string userId = this.GetReqData();// 获取模板请求数据
  468. userIBLL.GetImg(userId);
  469. return Success("获取成功");
  470. }
  471. /// <summary>
  472. /// 获取人员头像图标
  473. /// </summary>
  474. /// <param name="_"></param>
  475. /// <returns></returns>
  476. public Response GetImgForDC(dynamic _)
  477. {
  478. string userId = this.GetReqData();// 获取模板请求数据
  479. userIBLL.GetImgForDC(userId);
  480. return Success("获取成功");
  481. }
  482. /// <summary>
  483. /// 获取IP
  484. /// </summary>
  485. /// <returns></returns>
  486. private string GetIP()
  487. {
  488. //string ip = string.Empty;
  489. //if (!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"]))
  490. // ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]);
  491. //if (string.IsNullOrEmpty(ip))
  492. // ip = Convert.ToString(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]);
  493. //return ip;
  494. string userIP = "未获取用户IP";
  495. try
  496. {
  497. if (System.Web.HttpContext.Current == null
  498. || System.Web.HttpContext.Current.Request == null
  499. || System.Web.HttpContext.Current.Request.ServerVariables == null)
  500. {
  501. return "";
  502. }
  503. string CustomerIP = "";
  504. //CDN加速后取到的IP simone 090805
  505. CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
  506. if (!string.IsNullOrEmpty(CustomerIP))
  507. {
  508. return CustomerIP;
  509. }
  510. CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  511. if (!string.IsNullOrEmpty(CustomerIP))
  512. {
  513. return CustomerIP;
  514. }
  515. if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
  516. {
  517. CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
  518. if (CustomerIP == null)
  519. {
  520. CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  521. }
  522. }
  523. else
  524. {
  525. CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
  526. }
  527. if (string.Compare(CustomerIP, "unknown", true) == 0 || string.IsNullOrEmpty(CustomerIP))
  528. {
  529. return System.Web.HttpContext.Current.Request.UserHostAddress;
  530. }
  531. return CustomerIP;
  532. }
  533. catch { }
  534. return userIP;
  535. }
  536. }
  537. /// <summary>
  538. /// 登录信息
  539. /// </summary>
  540. public class LoginModel
  541. {
  542. /// <summary>
  543. /// 账号
  544. /// </summary>
  545. public string username { get; set; }
  546. /// <summary>
  547. /// 密码
  548. /// </summary>
  549. public string password { get; set; }
  550. /// <summary>
  551. /// 是否强密码
  552. /// </summary>
  553. public bool up { get; set; }
  554. /// <summary>
  555. /// 设备号
  556. /// </summary>
  557. public string deviceid { get; set; }
  558. public string openid { get; set; }
  559. }
  560. /// <summary>
  561. /// 修改密码
  562. /// </summary>
  563. public class ModifyModel
  564. {
  565. /// <summary>
  566. /// 新密码
  567. /// </summary>
  568. public string newpassword { get; set; }
  569. /// <summary>
  570. /// 旧密码
  571. /// </summary>
  572. public string oldpassword { get; set; }
  573. }
  574. public class MobileVerify
  575. {
  576. public string mobile { get; set; }
  577. public string verifycode { get; set; }
  578. }
  579. public class UserAccount
  580. {
  581. public string account { get; set; }
  582. }
  583. }