wechatapplet.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. package com.cnd3b.restcontroller.customer.wechatapplet;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.aliyun.oss.HttpMethod;
  5. import com.aliyun.oss.model.GeneratePresignedUrlRequest;
  6. import com.aliyun.oss.model.ListObjectsRequest;
  7. import com.aliyun.oss.model.OSSObjectSummary;
  8. import com.aliyun.oss.model.ObjectListing;
  9. import com.cnd3b.common.Controller;
  10. import com.cnd3b.common.data.Row;
  11. import com.cnd3b.common.data.Rows;
  12. import com.cnd3b.common.data.RowsMap;
  13. import com.cnd3b.common.data.SQLFactory;
  14. import com.cnd3b.common.parameter.parameter;
  15. import p2.common.parse.A;
  16. import p2.common.parse.S;
  17. import p2.pao.PaoRemote;
  18. import p2.pao.PaoSetRemote;
  19. import p2.pao.R;
  20. import p2.util.P2Exception;
  21. import java.net.URI;
  22. import java.net.URL;
  23. import java.net.URLEncoder;
  24. import java.sql.Date;
  25. import java.util.*;
  26. import static com.cnd3b.utility.aliyun.oss.AliyunOSSUtil.*;
  27. public class wechatapplet extends Controller {
  28. // String url = BUCKE_NAME_1 + "." + AliyunOSSConfigConstant.END_POINT;
  29. //根目录
  30. String rootpath = "资料中心/";
  31. /**
  32. * 构造函数
  33. *
  34. * @param content
  35. */
  36. public wechatapplet(JSONObject content) {
  37. super(content);
  38. }
  39. /**
  40. * 获取培训学习列表
  41. *
  42. * @return
  43. */
  44. public String getCoursewareList() throws P2Exception {
  45. String ttypedetailid = "";
  46. if (content.containsKey("ttypedetailid")) {
  47. ttypedetailid = content.getString("ttypedetailid");
  48. }
  49. String keywords = "";
  50. if (content.containsKey("keywords")) {
  51. keywords = content.getString("keywords");
  52. }
  53. SQLFactory sqlFactory = null;
  54. if (ttypedetailid.equals("")) {
  55. sqlFactory = new SQLFactory(this, "查询课件列表_全部", pageSize, pageNumber, "t1.fisontop DESC, t1.createdate desc");
  56. sqlFactory.addParameter("keywords", "%" + keywords + "%");
  57. } else {
  58. sqlFactory = new SQLFactory(this, "查询课件列表", pageSize, pageNumber, "t1.fisontop DESC, t1.createdate desc");
  59. sqlFactory.addParameter("ttypedetailid", ttypedetailid);
  60. sqlFactory.addParameter("keywords", "%" + keywords + "%");
  61. }
  62. String sql = sqlFactory.getSQL();
  63. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  64. // RowsMap rowsMap = getAttachmentUrl("tarchives_sc", rows.toArrayList("tarchives_scid"), "video");
  65. //查询封面
  66. RowsMap rowsMapCover = getAttachmentUrl("tarchives_sc", rows.toArrayList("tarchives_scid"), "cover");
  67. for (Row row : rows) {
  68. // row.put("attinfos", rowsMap.get(row.getString("tarchives_scid")));
  69. Rows coverRows = rowsMapCover.get(row.getString("tarchives_scid"));
  70. if (!coverRows.isEmpty()) {
  71. row.put("cover", coverRows.get(0).getString("fobsurl"));
  72. } else {
  73. row.put("cover", "");
  74. }
  75. }
  76. createRequestLog("培训学习");
  77. return getSucReturnObject().setDataByPaging(rows).preloading(1).toString();
  78. }
  79. /**
  80. * 获取课件详情
  81. *
  82. * @return
  83. */
  84. public String getCoursewareDetail() throws P2Exception {
  85. String tarchives_scid = content.getString("tarchives_scid");
  86. //已学习人数加一
  87. createUserStudyLog(tarchives_scid);
  88. SQLFactory sqlFactory = new SQLFactory(this, "查询课件详细");
  89. sqlFactory.addParameter("tarchives_scid", tarchives_scid);
  90. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  91. RowsMap rowsMap = getAttachmentUrl("tarchives_sc", rows.toArrayList("tarchives_scid"), "video");
  92. //查询封面
  93. RowsMap rowsMapCover = getAttachmentUrl("tarchives_sc", rows.toArrayList("tarchives_scid"), "cover");
  94. for (Row row : rows) {
  95. row.put("attinfos", rowsMap.get(row.getString("tarchives_scid")));
  96. Rows coverRows = rowsMapCover.get(row.getString("tarchives_scid"));
  97. if (!coverRows.isEmpty()) {
  98. row.put("cover", coverRows.get(0).getString("fobsurl"));
  99. }
  100. }
  101. if (rows.isEmpty()) {
  102. return getErrReturnObject().setErrMsg("未找到当前课件").toString();
  103. }
  104. createRequestLog("培训学习");
  105. return getSucReturnObject().setData(rows.get(0)).toString();
  106. }
  107. public void createUserStudyLog(String tarchives_scid) {
  108. Long tuser_studyid = createTableID("tuser_study", "tuser_studyid");
  109. SQLFactory sqlFactory = new SQLFactory(this, "创建用户学习记录");
  110. sqlFactory.addParameter("tuser_studyid", tuser_studyid);
  111. sqlFactory.addParameter("tarchives_scid", tarchives_scid);
  112. sqlFactory.addParameter("tuserid", parameter.tuserid);
  113. dbConnect.runSqlUpdate(sqlFactory);
  114. }
  115. /**
  116. * 获取分类
  117. *
  118. * @return
  119. * @throws P2Exception
  120. */
  121. public String getTypeList() throws P2Exception {
  122. String fusertype = content.getString("fusertype");
  123. String where = "";
  124. //1表示业务员
  125. if (fusertype.equals("1")) {
  126. where = "t1.fissaler ='1'";
  127. } else {
  128. where = "t1.fisagent ='1'";
  129. }
  130. String fparentid = content.getString("fparentid");
  131. SQLFactory sqlFactory = new SQLFactory(this, "分类");
  132. sqlFactory.addParameter_SQL("fparentid", fparentid);
  133. sqlFactory.addParameter_SQL("where", where);
  134. String sql = sqlFactory.getSQL();
  135. Rows rows = dbConnect.runSqlQuery(sql);
  136. createRequestLog("培训学习");
  137. return getSucReturnObject().setData(rows).toString();
  138. }
  139. /**
  140. * 新增日志
  141. */
  142. private void createRequestLog(String type) {
  143. new Thread() {
  144. @Override
  145. public void run() {
  146. String sql = "SELECT*FROM tuserrequestlog WHERE fdate='" + getDate_Str() + "' AND tuserid='" + parameter.tuserid + "'";
  147. Rows rows = dbConnect.runSqlQuery(sql);
  148. if (rows.isEmpty()) {
  149. SQLFactory sqlFactory = new SQLFactory(this, "新增日志");
  150. sqlFactory.addParameter("tuserrequestlogid", createTableID("tuserrequestlog", "tuserrequestlogid"));
  151. sqlFactory.addParameter("siteid", parameter.defaultsiteid);
  152. sqlFactory.addParameter("fdate", getDate_Str());
  153. sqlFactory.addParameter("flastrequestdate", getDateTime_Str());
  154. sqlFactory.addParameter("tuserid", parameter.tuserid);
  155. sqlFactory.addParameter("type", type);
  156. dbConnect.runSqlUpdate(sqlFactory.getSQL());
  157. } else {
  158. String id = rows.get(0).getString("tuserrequestlogid");
  159. String sqlUpdate = "UPDATE tuserrequestlog SET frequesttimes=frequesttimes+1,flastrequestdate = '" + getDateTime_Str() + "' WHERE tuserrequestlogid = '" + id + "'";
  160. dbConnect.runSqlUpdate(sqlUpdate);
  161. }
  162. }
  163. }.start();
  164. }
  165. /**
  166. * 获取指定目录下的文件和文件夹
  167. *
  168. * @return
  169. */
  170. public String getFilesOfPath() {
  171. String folderPath = content.getString("folderPath");
  172. //获取经销商类型
  173. String fusertype = getUserFusertype();
  174. //获取用户角色列表
  175. ArrayList<String> listUserRole = getUserRolesList();
  176. //查询对应用户的体系
  177. ArrayList<String> listUserfauthtype = getUserFauthtypeList();
  178. //查询对应账号下有哪些有权限的目录
  179. ArrayList<String> listUserFolders = getUserFolderList(listUserRole, listUserfauthtype);
  180. ObjectListing listing = getObjectListing(folderPath);
  181. // 遍历所有文件。
  182. List<JSONObject> listFiles = getFiles(listing, folderPath);
  183. // 遍历所有commonPrefix。
  184. List<JSONObject> listFolder = getListFolder(listing, listUserFolders, listUserRole, listUserfauthtype);
  185. ArrayList<String> keyStr = new ArrayList<>();
  186. for (JSONObject object : listFolder) {
  187. keyStr.add(object.getString("folderpath"));
  188. }
  189. SQLFactory sqlNameFac = new SQLFactory(this, "查询文件名称");
  190. sqlNameFac.addParameter_in("fpath", keyStr);
  191. String sqlName = sqlNameFac.getSQL();
  192. Rows rowsName = dbConnect.runSqlQuery(sqlName);
  193. JSONObject object = new JSONObject();
  194. object.put("files", listFiles);
  195. object.put("folder", rowsName);
  196. // 关闭OSSClient。
  197. ossClient.shutdown();
  198. createRequestLog("资料中心");
  199. return getSucReturnObject().setData(object).toString();
  200. }
  201. List<JSONObject> listFiles = new ArrayList<>();
  202. List<JSONObject> listFolder = new ArrayList<>();
  203. /**
  204. * 搜索
  205. *
  206. * @return
  207. */
  208. public String searchFile() {
  209. String keyword = "";
  210. if (content.containsKey("keyword")) {
  211. keyword = content.getString("keyword");
  212. }
  213. String folderPath = "资料中心/";
  214. //获取经销商类型
  215. String fusertype = getUserFusertype();
  216. //获取用户角色列表
  217. ArrayList<String> listUserRole = getUserRolesList();
  218. //查询对应用户的体系
  219. ArrayList<String> listUserfauthtype = getUserFauthtypeList();
  220. //查询对应账号下有哪些有权限的目录
  221. ArrayList<String> listUserFolders = getUserFolderList(listUserRole, listUserfauthtype);
  222. listFolder.clear();
  223. listFiles.clear();
  224. get(folderPath, listUserFolders, listUserRole, listUserfauthtype);
  225. // ObjectListing listing = getObjectListing(folderPath);
  226. // // 遍历所有文件。
  227. // List<JSONObject> listFiles = getFiles(listing, folderPath);
  228. // // 遍历所有commonPrefix。
  229. // List<JSONObject> listFolder = getListFolder(listing, listUserFolders, listUserRole, listUserfauthtype);
  230. ArrayList<String> keyStr = new ArrayList<>();
  231. for (JSONObject object : listFolder) {
  232. keyStr.add(object.getString("folderpath"));
  233. }
  234. SQLFactory sqlNameFac = new SQLFactory(this, "查询文件名称");
  235. sqlNameFac.addParameter_in("fpath", keyStr);
  236. String sqlName = sqlNameFac.getSQL();
  237. Rows rowsName = dbConnect.runSqlQuery(sqlName);
  238. List<JSONObject> listFiles_tmp = new ArrayList<>();
  239. for (JSONObject jsonObject : listFiles) {
  240. String name = jsonObject.getString("name");
  241. System.err.println();
  242. if (name.contains(keyword)) {
  243. listFiles_tmp.add(jsonObject);
  244. }
  245. }
  246. Rows rows_tmp = new Rows();
  247. for (Row row : rowsName) {
  248. if (row.getString("tfilename").contains(keyword)) {
  249. rows_tmp.add(row);
  250. }
  251. }
  252. JSONObject object = new JSONObject();
  253. object.put("files", listFiles_tmp);
  254. object.put("folder", rows_tmp);
  255. // 关闭OSSClient。
  256. ossClient.shutdown();
  257. createRequestLog("资料中心");
  258. return getSucReturnObject().setData(object).toString();
  259. }
  260. /**
  261. * 获取分享链接id
  262. *
  263. * @return
  264. */
  265. public String getShareLinkId() {
  266. JSONArray pathArray = content.getJSONArray("folderPath");
  267. JSONArray urlsArray = content.getJSONArray("urls");
  268. ArrayList<String> list = new ArrayList<>();
  269. // 构造ListObjectsRequest请求。
  270. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1);
  271. for (Object obj : pathArray) {
  272. // 设置prefix参数来获取fun目录下的所有文件。
  273. listObjectsRequest.setPrefix(obj.toString());
  274. // 递归列举目录下的所有文件。
  275. ObjectListing listing = ossClient.listObjects(listObjectsRequest);
  276. // 遍历所有文件。
  277. for (OSSObjectSummary objectSummary : listing.getObjectSummaries()) {
  278. if (!objectSummary.getKey().endsWith("/")) {
  279. list.add("https://" + file_url + "/" + URLEncoder.encode(objectSummary.getKey()));
  280. }
  281. }
  282. }
  283. // 关闭OSSClient。
  284. ossClient.shutdown();
  285. for (Object obj : urlsArray) {
  286. list.add(obj.toString());
  287. }
  288. Long shareid = createTableID("tdownloadfile", "downloadid");
  289. ArrayList<String> sqlList = new ArrayList<>();
  290. for (String strUrl : list) {
  291. Long downloadid = createTableID("tdownloadfile", "downloadid");
  292. String sql = "INSERT INTO tdownloadfile (downloadid,rmkenable,tfilepath,tshareid)VALUES('" + downloadid + "', 0,'" + strUrl + "','" + shareid + "')";
  293. sqlList.add(sql);
  294. }
  295. dbConnect.runSqlUpdate(sqlList);
  296. JSONObject object = new JSONObject();
  297. object.put("shareid", shareid);
  298. createRequestLog("资料中心");
  299. return getSucReturnObject().setData(object).toString();
  300. }
  301. /**
  302. * 获取oss文档预览url 60分钟
  303. *
  304. * @return
  305. */
  306. public String getOssPreviewUrl() {
  307. String key = content.getString("key");
  308. // 填写请求预览的文档完整路径,完整路径中不包含Bucket名称。
  309. // 设置样式,样式中包含文档预览参数。
  310. String style = "imm/previewdoc,copy_1";
  311. // 指定生成的签名URL过期时间,最大值为15分钟。本示例指定生成的签名URL过期时间为10分钟。
  312. Date expiration = new Date(System.currentTimeMillis() + 1000 * 60 * 60);
  313. GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(BUCKE_NAME_1, key, HttpMethod.GET);
  314. req.setExpiration(expiration);
  315. req.setProcess(style);
  316. URL signedUrl = ossClient.generatePresignedUrl(req);
  317. System.out.println(signedUrl);
  318. // 关闭OSSClient。
  319. ossClient.shutdown();
  320. JSONObject object = new JSONObject();
  321. object.put("url", signedUrl.toString());
  322. return getSucReturnObject().setData(object).toString();
  323. }
  324. /**
  325. * 添加视频播放记录
  326. *
  327. * @return
  328. * @throws P2Exception
  329. */
  330. public String addViewlog() throws P2Exception {
  331. Long tarchives_scid = content.getLong("tarchives_scid");
  332. Long tattachmentid = content.getLong("tattachmentid");
  333. String tprocess = content.getString("tprocess");
  334. String tlogintime = content.getString("tlogintime");
  335. PaoSetRemote paoSetRemote = getP2ServerSystemPaoSet("tviewlog", "tarchives_scid = '" + tarchives_scid + "' and tattachmentid = '" + tattachmentid + "' and tuserid = '" + parameter.tuserid + "' ");
  336. if (paoSetRemote.isEmpty()) {
  337. PaoRemote paoRemote = paoSetRemote.addAtEnd();
  338. paoRemote.setValue("tarchives_scid", tarchives_scid, 11L);
  339. paoRemote.setValue("tattachmentid", tattachmentid, 11L);
  340. paoRemote.setValue("tprocess", tprocess, 11L);
  341. paoRemote.setValue("tuserid", parameter.tuserid, 11L);
  342. paoRemote.setValue("changedate", getDateTime_Str(), 11L);
  343. paoRemote.setValue("tlogintime", tlogintime, 11L);
  344. paoSetRemote.save();
  345. } else {
  346. PaoRemote paoRemote = paoSetRemote.getPao(0);
  347. paoRemote.setValue("tlogintime", tlogintime, 11L);
  348. paoRemote.setValue("tprocess", tprocess, 11L);
  349. paoRemote.setValue("changedate", getDateTime_Str(), 11L);
  350. paoSetRemote.save();
  351. }
  352. return getSucReturnObject().toString();
  353. }
  354. /**
  355. * 返回视频播放记录
  356. *
  357. * @return
  358. * @throws P2Exception
  359. */
  360. public String selectViewlog() throws P2Exception {
  361. Long tarchives_scid = content.getLong("tarchives_scid");
  362. SQLFactory sqlFactory = new SQLFactory(this, "查询视频播放记录");
  363. sqlFactory.addParameter("tuserid", parameter.tuserid);
  364. sqlFactory.addParameter("tarchives_scid", tarchives_scid);
  365. String sql = sqlFactory.getSQL();
  366. Rows rows = dbConnect.runSqlQuery(sql);
  367. return getSucReturnObject().setData(rows).toString();
  368. }
  369. /**
  370. * 获取用户角色
  371. *
  372. * @return
  373. */
  374. public Rows getUserRoles() {
  375. //查询对应用户的角色
  376. String sqlRoles = "SELECT wechat_position ,fusertype FROM tuser WHERE tuserid = '" + parameter.tuserid + "'";
  377. return dbConnect.runSqlQuery(sqlRoles);
  378. }
  379. public ArrayList<String> getUserRolesList() {
  380. return getUserRoles().toArrayList("wechat_position");
  381. }
  382. /**
  383. * 查询用户类型
  384. *
  385. * @return
  386. */
  387. public String getUserFusertype() {
  388. String fusertype = "经销商";
  389. Rows rows = getUserRoles();
  390. if (!rows.isEmpty()) {
  391. fusertype = rows.get(0).getString("fusertype");
  392. }
  393. return fusertype;
  394. }
  395. /**
  396. * 获取用户体系
  397. *
  398. * @return
  399. */
  400. public ArrayList<String> getUserFauthtypeList() {
  401. String sqlFauthtype = "SELECT fauthtype FROM tagentauth WHERE tagentsid=( SELECT tagentsid FROM tagents WHERE wechat_depid=(SELECT wechat_depid FROM tuser WHERE tuserid= '" + parameter.tuserid + "'))";
  402. return dbConnect.runSqlQuery(sqlFauthtype).toArrayList("fauthtype");
  403. }
  404. public ArrayList<String> getUserFolderList(ArrayList<String> listRole, ArrayList<String> listfauthtype) {
  405. ArrayList<String> listFolders = new ArrayList<>();
  406. SQLFactory sqlFactory = new SQLFactory(this, "查询账号目录");
  407. sqlFactory.addParameter("tuserid", parameter.tuserid);
  408. sqlFactory.addParameter_in("frole", listRole);
  409. sqlFactory.addParameter_in("fauthtype", listfauthtype);
  410. String sql = sqlFactory.getSQL();
  411. Rows rows = dbConnect.runSqlQuery(sql);
  412. if (!rows.isEmpty()) {
  413. for (Row row : rows) {
  414. if (row.getString("fpath") == null || row.getString("fpath").equals("")) {
  415. } else {
  416. listFolders.add(row.getString("fpath"));
  417. }
  418. }
  419. }
  420. return listFolders;
  421. }
  422. public ObjectListing getObjectListing(String folderPath) {
  423. // 构造ListObjectsRequest请求。
  424. ListObjectsRequest listObjectsRequest = new ListObjectsRequest(BUCKE_NAME_1).withMaxKeys(1000);
  425. // 设置正斜线(/)为文件夹的分隔符。
  426. listObjectsRequest.setDelimiter("/");
  427. // 列出fun目录下的所有文件和文件夹。
  428. listObjectsRequest.setPrefix(folderPath);
  429. return ossClient.listObjects(listObjectsRequest);
  430. }
  431. public List<JSONObject> getFiles(ObjectListing listing, String folderPath) {
  432. List<JSONObject> objectSummaryList = new ArrayList<>();
  433. List<OSSObjectSummary> sums = listing.getObjectSummaries();
  434. //按照时间排序
  435. Collections.sort(sums, (o1, o2) -> {
  436. // TODO Auto-generated method stub
  437. long dateTime1 = o1.getLastModified().getTime();
  438. long dateTime2 = o2.getLastModified().getTime();
  439. if (dateTime1 == dateTime2) {
  440. return 0;
  441. } else {
  442. //时间正序
  443. // return dateTime1 > dateTime2 ? 1 : -1;
  444. //时间倒序
  445. return dateTime1 > dateTime2 ? -1 : 1;
  446. }
  447. });
  448. ArrayList<String> Listkey = new ArrayList<>();
  449. for (OSSObjectSummary objectSummary : sums) {
  450. if (!objectSummary.getKey().equals(folderPath)) {
  451. Listkey.add(objectSummary.getKey());
  452. JSONObject object = new JSONObject();
  453. object.put("key", objectSummary.getKey());
  454. object.put("name", objectSummary.getKey().replace(folderPath, ""));
  455. object.put("size", objectSummary.getSize() / 1024);
  456. object.put("time", getDateTime_Str(objectSummary.getLastModified()));
  457. object.put("url", file_url + "/" + objectSummary.getKey());
  458. objectSummaryList.add(object);
  459. }
  460. }
  461. SQLFactory sqlFactory = new SQLFactory(this, "查询转码记录");
  462. sqlFactory.addParameter_in("tkey", Listkey);
  463. RowsMap rowsMap = dbConnect.runSqlQuery(sqlFactory).toRowsMap("tkey");
  464. for (JSONObject object : objectSummaryList) {
  465. String key = object.getString("key");
  466. Rows rows = rowsMap.getOrDefault(key, new Rows());
  467. if (!rows.isEmpty()) {
  468. String tkey_new = rowsMap.get(key).get(0).getString("tkey_new");
  469. if (!tkey_new.equals("")) {
  470. object.put("url_code", file_url + "/" + tkey_new);
  471. System.err.println(tkey_new);
  472. } else {
  473. object.put("url_code", "");
  474. }
  475. } else {
  476. object.put("url_code", "");
  477. }
  478. }
  479. return objectSummaryList;
  480. }
  481. public ArrayList<JSONObject> check(ArrayList<JSONObject> commonPrefixList, ArrayList<String> listRole, ArrayList<String> listfauthtype) {
  482. ArrayList<JSONObject> commonPrefixList2 = new ArrayList<>();
  483. //查询当前用户的上级部门id
  484. String deptId = "";
  485. String sql = "SELECT tdepartmentid FROM tdepartment WHERE wechat_depid = ( SELECT wechat_parendeptid FROM tdepartment WHERE wechat_depid = ( SELECT wechat_depid FROM tuser WHERE tuserid = '" + parameter.tuserid + "'))";
  486. Rows rowsDept = dbConnect.runSqlQuery(sql);
  487. if (!rowsDept.isEmpty()) {
  488. deptId = rowsDept.get(0).getString("tdepartmentid");
  489. }
  490. for (JSONObject obj : commonPrefixList) {
  491. String fpath = obj.getString("folderpath");
  492. //开启双向验证
  493. boolean isFrole = false;
  494. boolean isFauthtype = false;
  495. boolean isTuserid = false;
  496. boolean isDept = false;
  497. String sqlTemp = "SELECT frole,fauthtype,tuserid,tdepartmentid FROM tfolderauth t1 LEFT JOIN tfolder t2 ON t1.tfolderid =t2.tfolderid WHERE t2.fpath ='" + fpath + "'";
  498. Rows rowsTemp = dbConnect.runSqlQuery(sqlTemp);
  499. ArrayList<String> list_Roles = new ArrayList<>();
  500. ArrayList<String> list_fauthtype = new ArrayList<>();
  501. ArrayList<String> list_tuserid = new ArrayList<>();
  502. ArrayList<String> list_tdepartmentid = new ArrayList<>();
  503. for (Row row : rowsTemp) {
  504. String frole = row.getString("frole");
  505. String fauthtype = row.getString("fauthtype");
  506. String tuserid = row.getString("tuserid");
  507. String tdepartmentid = row.getString("tdepartmentid");
  508. if (!frole.equals("")) {
  509. list_Roles.add(frole);
  510. }
  511. if (!fauthtype.equals("")) {
  512. list_fauthtype.add(fauthtype);
  513. }
  514. if (!tuserid.equals("0")) {
  515. list_tuserid.add(tuserid);
  516. }
  517. if (!tdepartmentid.equals("0")) {
  518. list_tdepartmentid.add(tdepartmentid);
  519. }
  520. }
  521. //验证角色
  522. if (list_Roles.size() == 0) {
  523. isFrole = true;
  524. } else {
  525. for (String str : list_Roles) {
  526. if (listRole.contains(str)) {
  527. isFrole = true;
  528. }
  529. }
  530. }
  531. //验证体系
  532. if (list_fauthtype.size() == 0) {
  533. isFauthtype = true;
  534. } else {
  535. for (String str : list_fauthtype) {
  536. if (listfauthtype.contains(str)) {
  537. isFauthtype = true;
  538. }
  539. }
  540. }
  541. //验证用户
  542. if (list_tuserid.size() == 0) {
  543. isTuserid = true;
  544. } else {
  545. for (String str : list_tuserid) {
  546. if (Objects.equals(parameter.tuserid, str)) {
  547. isTuserid = true;
  548. }
  549. }
  550. }
  551. //验证部门
  552. if (list_tdepartmentid.size() == 0) {
  553. isDept = true;
  554. } else {
  555. for (String str : list_tdepartmentid) {
  556. if (Objects.equals(deptId, str)) {
  557. isDept = true;
  558. }
  559. }
  560. }
  561. if (isFrole && isFauthtype && isTuserid && isDept) {
  562. commonPrefixList2.add(obj);
  563. }
  564. System.err.println(list_Roles.size());
  565. System.err.println(list_fauthtype.size());
  566. System.err.println(list_tuserid.size());
  567. }
  568. return commonPrefixList2;
  569. }
  570. public ArrayList<JSONObject> getListFolderAll(ObjectListing listing) {
  571. ArrayList<JSONObject> listFolderAll = new ArrayList<>();
  572. for (String commonPrefix : listing.getCommonPrefixes()) {
  573. System.err.println(commonPrefix);
  574. JSONObject object = new JSONObject();
  575. object.put("folderpath", commonPrefix);
  576. listFolderAll.add(object);
  577. }
  578. return listFolderAll;
  579. }
  580. public ArrayList<JSONObject> getListFolder(ArrayList<JSONObject> listFolderAll, ArrayList<String> listUserFolders) {
  581. ArrayList<JSONObject> listFolder = new ArrayList<>();
  582. for (JSONObject object : listFolderAll) {
  583. String folderpath = object.getString("folderpath");
  584. if (listUserFolders.size() == 0) {
  585. listFolder.add(object);
  586. } else {
  587. for (String str : listUserFolders) {
  588. if (str.equals(folderpath)) {
  589. listFolder.add(object);
  590. }
  591. }
  592. }
  593. }
  594. return listFolder;
  595. }
  596. public ArrayList<JSONObject> getListFolder(ObjectListing listing, ArrayList<String> listUserFolders, ArrayList<String> listRole, ArrayList<String> listfauthtype) {
  597. ArrayList<JSONObject> listFolderAll = getListFolderAll(listing);
  598. ArrayList<JSONObject> listFolder = getListFolder(listFolderAll, listUserFolders);
  599. if (listFolder.size() == 0) {
  600. listFolder = listFolderAll;
  601. } else {
  602. if (fusertype.equals("经销商")) {
  603. //开启双向验证
  604. listFolder = check(listFolder, listRole, listfauthtype);
  605. }
  606. }
  607. return listFolder;
  608. }
  609. public void get(String folderPath, ArrayList<String> listUserFolders, ArrayList<String> listRole, ArrayList<String> listfauthtype) {
  610. ObjectListing listing = getObjectListing(folderPath);
  611. // 遍历所有文件。
  612. listFiles.addAll(getFiles(listing, folderPath));
  613. // 遍历所有commonPrefix。
  614. List<JSONObject> listFolder_temp = getListFolder(listing, listUserFolders, listRole, listfauthtype);
  615. listFolder.addAll(listFolder_temp);
  616. if (listFolder_temp.size() > 0) {
  617. for (JSONObject object : listFolder_temp) {
  618. String path = object.getString("folderpath");
  619. get(path, listUserFolders, listRole, listfauthtype);
  620. }
  621. }
  622. }
  623. }