datateam.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. package restcontroller.system.datateam;
  2. import beans.datacontrllog.DataContrlLog;
  3. import beans.datateam.DataTeam;
  4. import beans.phonebook.PhoneBook;
  5. import com.alibaba.fastjson.JSONArray;
  6. import com.alibaba.fastjson.JSONObject;
  7. import common.Controller;
  8. import common.YosException;
  9. import common.annotation.API;
  10. import common.annotation.CACHEING;
  11. import common.annotation.CACHEING_CLEAN;
  12. import common.data.*;
  13. import org.apache.commons.lang.StringUtils;
  14. import restcontroller.R;
  15. import restcontroller.webmanage.executorService.Executor;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. public class datateam extends Controller {
  19. public datateam(JSONObject content) throws YosException {
  20. super(content);
  21. }
  22. @API(title = "数据团队查询", apiversion = R.ID20220930103501.v1.class)
  23. @CACHEING
  24. public String queryDataTeam() throws YosException {
  25. String ownertable = content.getString("ownertable");
  26. Long ownerid = content.getLong("ownerid");
  27. RowsMap rowsmap = DataTeam.queryTeam(this, ownertable, ownerid);
  28. JSONArray array = new JSONArray();
  29. for (String sys_enterpriseid : rowsmap.keySet()) {
  30. Rows rows = rowsmap.get(sys_enterpriseid);
  31. JSONObject team = new JSONObject();
  32. team.put("ismyteam", rows.toArrayList("userid").contains(String.valueOf(userid)) ? 1 : 0);
  33. Rows teamleader = DataTeam.getLeader(this, ownertable, ownerid, Long.parseLong(sys_enterpriseid));
  34. team.put("teamleader", teamleader);
  35. if (teamleader.isNotEmpty()) {
  36. long userid = teamleader.get(0).getLong("userid");
  37. ArrayList<Long> myteam = dbConnect.runSqlQuery("select userid from sys_userteam where isproxy=0 and siteid ='" + siteid + "' and createuserid=" + userid).toArrayList("userid", new ArrayList<>());
  38. int indexOf = -1;
  39. for (Row row : rows) {
  40. if (row.getLong("isleader") == 1) {
  41. indexOf = rows.indexOf(row);
  42. }
  43. if (myteam.contains(row.getLong("userid"))) {
  44. row.put("isdefault", 1);
  45. } else {
  46. row.put("isdefault", 0);
  47. }
  48. }
  49. rows.remove(indexOf);
  50. }
  51. team.put("team", rows);
  52. if (Long.parseLong(sys_enterpriseid) > 0) {
  53. Rows sys_enterpriseRows = dbConnect.runSqlQuery("select *from sys_enterprise where siteid='" + siteid + "' and sys_enterpriseid='" + sys_enterpriseid + "'");
  54. if (!sys_enterpriseRows.isEmpty()) {
  55. team.put("teamname", sys_enterpriseRows.get(0).getString("abbreviation"));
  56. } else {
  57. team.put("teamname", teamleader.get(0).getString("name"));
  58. }
  59. } else {
  60. team.put("teamname", teamleader.get(0).getString("name"));
  61. }
  62. array.add(team);
  63. }
  64. return getSucReturnObject().setData(array).toString();
  65. }
  66. @API(title = "数据团队新增", apiversion = R.ID20220930103601.v1.class)
  67. @CACHEING_CLEAN(apiversions = {R.ID20220930103501.class, R.ID20221018122201.class})
  68. public String insertDataTeam() throws YosException {
  69. String ownertable = content.getString("ownertable");
  70. long ownerid = content.getLong("ownerid");
  71. int editPermissions = editPermissions(ownertable, ownerid);
  72. if (editPermissions == 1) {
  73. return getReturnObject().setCode("0136", new String[0]).toString();//非任务创建人及负责人不可进行团队维护
  74. } else if (editPermissions == 2) {
  75. return getReturnObject().setCode("0137", new String[0]).toString();//非团队负责人不可进行团队维护
  76. }
  77. JSONArray useridsArray = content.getJSONArray("userids");
  78. boolean justuserids = content.getBooleanValue("justuserids");
  79. boolean ischange = false;
  80. Rows oldTeamRows = DataTeam.queryTeamRowWithoutHeadpic(this, ownertable, ownerid);
  81. if (justuserids) {
  82. RowsMap teamRowsMap = DataTeam.queryTeam(this, ownertable, ownerid);
  83. if (teamRowsMap.containsKey(String.valueOf(sys_enterpriseid))) {
  84. RowsMap userRowsMap = teamRowsMap.get(String.valueOf(sys_enterpriseid)).toRowsMap("userid");
  85. for (Object id : useridsArray) {
  86. if (!userRowsMap.containsKey(id.toString())) {
  87. DataTeam.createTeam(this, ownertable, ownerid, Long.parseLong(id.toString()));
  88. ischange = true;
  89. cleanAllDataPool(Long.parseLong(id.toString()));
  90. }
  91. }
  92. for (String id : userRowsMap.keySet()) {
  93. boolean isdelete = true;
  94. if (userRowsMap.get(id).isNotEmpty() && userRowsMap.get(id).get(0).getBoolean("isleader")) {
  95. isdelete = false;
  96. } else {
  97. for (Object o : useridsArray) {
  98. if (id.equals(o.toString())) {
  99. isdelete = false;
  100. }
  101. }
  102. }
  103. if (isdelete) {
  104. DataTeam.deleteTeam(this, ownertable, ownerid, Long.parseLong(id));
  105. ischange = true;
  106. cleanAllDataPool(Long.parseLong(id));
  107. }
  108. }
  109. }
  110. } else {
  111. for (Object o : useridsArray) {
  112. DataTeam.createTeam(this, ownertable, ownerid, Long.parseLong(o.toString()));
  113. cleanAllDataPool(Long.parseLong(o.toString()));
  114. }
  115. ischange = true;
  116. }
  117. if (ownertable.equals("sa_customers") || ownertable.equals("sa_project")) {
  118. DataTeam.updatephonebookteam(this, ownertable, ownerid);
  119. }
  120. StringBuffer str = new StringBuffer();
  121. Rows newTeamRows = DataTeam.queryTeamRowWithoutHeadpic(this, ownertable, ownerid);
  122. RowsMap teamRowsMap = newTeamRows.toRowsMap("isleader");
  123. if (teamRowsMap.containsKey("0")) {
  124. ArrayList<String> nameList = teamRowsMap.get("0").toArrayList("name");
  125. for (String name : nameList) {
  126. str.append(name).append("、");
  127. }
  128. if (str.length() > 0) {
  129. str.delete(str.length() - 1, str.length());
  130. }
  131. }
  132. if (ischange && oldTeamRows.toRowsMap("isleader").get("0").isNotEmpty()) {
  133. DataContrlLog.createLog(this, ownertable, ownerid, "变更团队参与人", "变更团队参与人为" + str).insert();
  134. }
  135. if (ischange && content.getBooleanValue("isparenttask")) {
  136. if (ownertable.equals("sys_task")) {
  137. JSONObject extradata = new JSONObject();
  138. ArrayList<Long> extraUserList = oldTeamRows.toArrayList("userid", new ArrayList<>());
  139. extradata.put("extraUserList", extraUserList);
  140. Executor.sendEml_controller(this, "taskleaderchange_old", ownerid, extradata);
  141. JSONObject extradata1 = new JSONObject();
  142. ArrayList<Long> extraUserList1 = newTeamRows.toArrayList("userid", new ArrayList<>());
  143. extraUserList1.removeAll(extraUserList);
  144. extradata1.put("extraUserList", extraUserList1);
  145. Executor.sendEml_controller(this, "taskadd", ownerid, extradata1);
  146. }
  147. }
  148. cleanAllDataPool();
  149. return getSucReturnObject().toString();
  150. }
  151. @API(title = "数据团队设置负责人", apiversion = R.ID20220930103701.v1.class)
  152. @CACHEING_CLEAN(apiversions = {R.ID20220930103501.class, R.ID20221012164402.class, R.ID20221014164702.class})
  153. public String setTeamLeader() throws YosException {
  154. String ownertable = content.getString("ownertable");
  155. long ownerid = content.getLong("ownerid");
  156. long leader_userid = content.getLong("userid");
  157. int editPermissions = editPermissions(ownertable, ownerid);
  158. if (editPermissions == 1) {
  159. return getReturnObject().setCode("0136", new String[0]).toString();//非任务创建人及负责人不可进行团队维护
  160. } else if (editPermissions == 2) {
  161. return getReturnObject().setCode("0137", new String[0]).toString();//非团队负责人不可进行团队维护
  162. }
  163. if (ownertable.equals("sa_project")) {
  164. Rows rows = dbConnect.runSqlQuery("SELECT * from sys_datatag WHERE ownertable='sa_project' and tag='报备中' and ownerid=" + ownerid + " and siteid='" + siteid + "'");
  165. if (rows.isNotEmpty()) {
  166. return getReturnObject().setCode("0689").toString();//非团队负责人不可进行团队维护
  167. }
  168. }
  169. Row user = getUser(leader_userid);
  170. if (ownertable.equals("sys_phonebook")) {
  171. Rows phonerbookRows = dbConnect.runSqlQuery("select phonenumber from sys_phonebook where siteid='" + siteid + "' and sys_phonebookid=" + ownerid);
  172. if (phonerbookRows.isNotEmpty()) {
  173. if (PhoneBook.verifyphonenumber(this, phonerbookRows.get(0).getString("phonenumber"), leader_userid, ownerid)) {
  174. return getReturnObject().setCode("0138", new String[]{user.getString("name")}).toString();//user.getString("name") + "通讯录中已存在该联系人手机号
  175. }
  176. }
  177. }
  178. //
  179. Rows teamRows = DataTeam.getLeaderWithoutHeadpic(this, ownertable, ownerid);
  180. // if (rowsMap.containsKey(String.valueOf(sys_enterpriseid))) {
  181. // RowsMap usermap = rowsMap.get(String.valueOf(sys_enterpriseid)).toRowsMap("userid");
  182. // if (usermap.containsKey(String.valueOf(leader_userid))) {
  183. // //如果需要设置的负责人本身就在团队里,则直接设置为负责人
  184. // DataTeam.setTeamLeader(this, ownertable, ownerid, leader_userid);
  185. // } else {
  186. // ArrayList<String> sqlist = new ArrayList<>();
  187. //
  188. // //如果需要设置的负责人不在团队里,则获取原团队负责人后删除,再新增团队负责人
  189. // Rows rows = DataTeam.getLeader(this, ownertable, ownerid, sys_enterpriseid);
  190. // sqlist.addAll(DataTeam.createTeamSQL(this, ownertable, ownerid, leader_userid));
  191. // sqlist.addAll(DataTeam.setTeamLeaderSQL(this, ownertable, ownerid, leader_userid));
  192. // for (Row row : rows) {
  193. // sqlist.addAll(DataTeam.deleteTeamSQL(this, ownertable, ownerid, row.getLong("userid")));
  194. // }
  195. // dbConnect.runSqlUpdate(sqlist);
  196. // }
  197. // }
  198. if (teamRows.isEmpty() || teamRows.get(0).getLong("userid") != leader_userid) {
  199. ArrayList<String> sqlist = new ArrayList<>();
  200. sqlist.add("delete from sys_datateam where siteid='" + siteid + "' and ownertable='" + ownertable + "' and ownerid='" + ownerid + "'and sys_enterpriseid=" + sys_enterpriseid);
  201. sqlist.addAll(DataTeam.createTeamSQL(this, ownertable, ownerid, leader_userid));
  202. sqlist.addAll(DataTeam.createTeamMemberSql(this, ownertable, ownerid, leader_userid));
  203. sqlist.addAll(DataTeam.setTeamLeaderSQL(this, ownertable, ownerid, leader_userid));
  204. dbConnect.runSqlUpdate(sqlist);
  205. if (content.getBooleanValue("isaddoldleader")) {
  206. DataTeam.createTeam(this, ownertable, ownerid, teamRows.get(0).getLong("userid"));
  207. }
  208. if (ownertable.equals("sa_customers") || ownertable.equals("sa_project")) {
  209. DataTeam.updatephonebookteam(this, ownertable, ownerid);
  210. }
  211. cleanAllDataPool();
  212. ArrayList<Long> useridList = new ArrayList<>();
  213. useridList.add(userid);
  214. ArrayList<Long> useridList1 = new ArrayList<>();
  215. useridList1.add(leader_userid);
  216. switch (ownertable) {
  217. case "sat_orderclue":
  218. JSONObject extradata = new JSONObject();
  219. extradata.put("extraUserList", useridList);
  220. Executor.sendEml_controller(this, "ordercluesetleadertooldleader", ownerid, extradata);
  221. extradata = new JSONObject();
  222. extradata.put("extraUserList", useridList1);
  223. Executor.sendEml_controller(this, "ordercluesetleadertonewleader", ownerid, extradata);
  224. break;
  225. case "sa_customers":
  226. JSONObject extradata1 = new JSONObject();
  227. extradata1.put("extraUserList", useridList);
  228. Executor.sendEml_controller(this, "customerssetleadertooldleader", ownerid, extradata1);
  229. extradata1 = new JSONObject();
  230. extradata1.put("extraUserList", useridList1);
  231. Executor.sendEml_controller(this, "customerssetleadertonewleader", ownerid, extradata1);
  232. break;
  233. case "sa_project":
  234. JSONObject extradata2 = new JSONObject();
  235. extradata2.put("extraUserList", useridList);
  236. Executor.sendEml_controller(this, "projectsetleadertooldleader", ownerid, extradata2);
  237. extradata2 = new JSONObject();
  238. extradata2.put("extraUserList", useridList1);
  239. Executor.sendEml_controller(this, "projectsetleadertonewleader", ownerid, extradata2);
  240. break;
  241. }
  242. }
  243. return getSucReturnObject().toString();
  244. }
  245. @API(title = "数据团队设置编辑权限", apiversion = R.ID20230302183101.v1.class)
  246. @CACHEING_CLEAN(apiversions = {R.ID20220930103501.class})
  247. public String seteditable() throws YosException {
  248. long sys_datateamid = content.getLong("sys_datateamid");
  249. boolean editable = content.getBooleanValue("editable");
  250. dbConnect.runSqlUpdate("update sys_datateam set editable=" + (editable ? 1 : 0) + " where siteid='" + siteid + "' and sys_datateamid=" + sys_datateamid);
  251. return getSucReturnObject().toString();
  252. }
  253. @API(title = "数据团队删除", apiversion = R.ID20220930103801.v1.class)
  254. @CACHEING_CLEAN(apiversions = {R.ID20220930103501.class, R.ID20221018122201.class})
  255. public String deleteDataTeam() throws YosException {
  256. String ownertable = content.getString("ownertable");
  257. long ownerid = content.getLong("ownerid");
  258. int editPermissions = editPermissions(ownertable, ownerid);
  259. if (editPermissions == 1) {
  260. return getReturnObject().setCode("0136", new String[0]).toString();//非任务创建人及负责人不可进行团队维护
  261. } else if (editPermissions == 2) {
  262. return getReturnObject().setCode("0137", new String[0]).toString();//非团队负责人不可进行团队维护
  263. }
  264. if (content.containsKey("userid")) {
  265. long userid = content.getLong("userid");
  266. DataTeam.deleteTeam(this, ownertable, ownerid, userid);
  267. cleanAllDataPool(userid);
  268. }
  269. if (content.containsKey("userids")) {
  270. JSONArray useridsArray = content.getJSONArray("userids");
  271. for (Object o : useridsArray) {
  272. DataTeam.deleteTeam(this, ownertable, ownerid, Long.parseLong(o.toString()));
  273. cleanAllDataPool(Long.parseLong(o.toString()));
  274. }
  275. }
  276. if (ownertable.equals("sa_customers") || ownertable.equals("sa_project")) {
  277. DataTeam.updatephonebookteam(this, ownertable, ownerid);
  278. }
  279. cleanAllDataPool();
  280. return getSucReturnObject().toString();
  281. }
  282. @API(title = "数据团队人员选择", apiversion = R.ID20221018122201.v1.class)
  283. @CACHEING
  284. public String teamUserSelect() throws YosException {
  285. String ownertable = content.getString("ownertable");
  286. long ownerid = content.getLong("ownerid");
  287. if (getHr(userid).isEmpty()) {
  288. //如果当前账号不在组织架构中,则直接返回空
  289. return getSucReturnObject().setData(new Rows()).toString();
  290. }
  291. StringBuffer where = new StringBuffer(" 1=1 ");
  292. if (content.containsKey("where")) {
  293. JSONObject whereObject = content.getJSONObject("where");
  294. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  295. where.append(" and(");
  296. where.append("t1.name like'%").append(whereObject.getString("condition")).append("%' ");
  297. where.append("or t1.phonenumber like'%").append(whereObject.getString("condition")).append("%' ");
  298. where.append("or t1.position like'%").append(whereObject.getString("condition")).append("%' ");
  299. where.append(")");
  300. }
  301. if (whereObject.getBooleanValue("withoutselect")) {
  302. where.append(" and t3.sys_datateamid is null");
  303. }
  304. }
  305. if (userInfo.isSaler()) {
  306. where.append(" and exists(select * from sa_salearea_hr where t1.siteid=sa_salearea_hr.siteid and t1.hrid=sa_salearea_hr.hrid)");
  307. }
  308. SQLFactory sqlFactory = new SQLFactory(this, "数据团队人员选择_企业", pageSize, pageNumber, pageSorting);
  309. sqlFactory.addParameter("siteid", siteid);
  310. sqlFactory.addParameter("ownertable", ownertable);
  311. sqlFactory.addParameter("ownerid", ownerid);
  312. sqlFactory.addParameter_SQL("where", where);
  313. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  314. RowsMap areaRowsMap = dbConnect.runSqlQuery(" SELECT DISTINCT t2.areaname,t1.hrid from sa_salearea_hr t1 " +
  315. " INNER JOIN sa_salearea t2 ON t2.sa_saleareaid=t1.sa_saleareaid " +
  316. " WHERE t1.siteid='"+siteid+"'").toRowsMap("hrid");
  317. for (Row row : rows) {
  318. row.put("headpic", getHeadPic(row.getLong("userid")));
  319. Rows areaRows = areaRowsMap.getOrDefault(row.getString("hrid"), new Rows());
  320. row.put("areanames", StringUtils.join(areaRows.toArrayList("areaname"), ","));
  321. }
  322. return getSucReturnObject().setData(rows).toString();
  323. }
  324. /**
  325. * 判断当前账号是否拥有修改团队权限
  326. *
  327. * @param ownertable
  328. * @param ownerid
  329. * @return 1 非任务创建人及负责人不可进行团队维护 2 非团队负责人不可进行团队维护
  330. * @throws YosException
  331. */
  332. public int editPermissions(String ownertable, Long ownerid) throws YosException {
  333. ArrayList<Long> leaderlist = DataTeam.getLeader(this, ownertable, ownerid).toArrayList("userid", new ArrayList<>());
  334. Rows rows1 = dbConnect.runSqlQuery("select createuserid from sys_userteam where siteid='" + siteid + "' and isproxy=1 and editdataleader=1 and userid=" + userid);
  335. ArrayList<Long> teamcreateuserList = rows1.toArrayList("createuserid", new ArrayList<Long>());
  336. if (ownertable.equalsIgnoreCase("sys_task")) {
  337. Rows rows = dbConnect.runSqlQuery("select createuserid from sys_task where siteid='" + siteid + "' and sys_taskid=" + ownerid);
  338. if (rows.isNotEmpty() && rows.get(0).getLong("createuserid") != userid && !leaderlist.contains(userid)) {
  339. if (teamcreateuserList.isEmpty() || leaderlist.isEmpty() || !teamcreateuserList.contains(leaderlist.get(0))) {
  340. return 1;
  341. }
  342. }
  343. } else if (!leaderlist.contains(userid)) {
  344. if (teamcreateuserList.isEmpty() || leaderlist.isEmpty() || !teamcreateuserList.contains(leaderlist.get(0))) {
  345. return 2;
  346. }
  347. }
  348. return 0;
  349. }
  350. }