Project.java 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854
  1. package restcontroller.sale.project;
  2. import beans.datacontrllog.DataContrlLog;
  3. import beans.dataextend.DataExtend;
  4. import beans.datatag.DataTag;
  5. import beans.datateam.DataTeam;
  6. import com.alibaba.fastjson.JSONArray;
  7. import com.alibaba.fastjson.JSONObject;
  8. import common.Controller;
  9. import common.YosException;
  10. import common.annotation.API;
  11. import common.annotation.CACHEING;
  12. import common.annotation.CACHEING_CLEAN;
  13. import common.data.*;
  14. import org.apache.commons.lang.StringUtils;
  15. import org.apache.poi.xssf.usermodel.*;
  16. import restcontroller.R;
  17. import restcontroller.webmanage.saletool.orderclue.ExportExcel;
  18. import java.util.ArrayList;
  19. import java.util.HashMap;
  20. public class Project extends Controller {
  21. /**
  22. * 构造函数
  23. *
  24. * @param content
  25. */
  26. public Project(JSONObject content) throws YosException {
  27. super(content);
  28. }
  29. @API(title = "我的项目商机", apiversion = R.ID20221020143502.v1.class)
  30. @CACHEING
  31. public String selectMyList() throws YosException {
  32. // 1:我负责的;2:我参与的;3:我下属负责的;4:我下属参与的
  33. int type = content.getIntValue("type");
  34. Long deleted = 0L;
  35. if (content.containsKey("deleted") && !"".equals(content.getString("deleted"))) {
  36. deleted = content.getLong("deleted");
  37. }
  38. String tablename = "sa_project";
  39. StringBuffer where = new StringBuffer(" 1=1 ");
  40. if (content.containsKey("where")) {
  41. JSONObject whereObject = content.getJSONObject("where");
  42. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  43. where.append(" and(");
  44. where.append("t1.createby like'%").append(whereObject.getString("condition")).append("%' ");
  45. where.append("or t1.projectname like'%").append(whereObject.getString("condition")).append("%' ");
  46. where.append("or t1.province like'%").append(whereObject.getString("condition")).append("%' ");
  47. where.append("or t1.city like'%").append(whereObject.getString("condition")).append("%' ");
  48. where.append("or t1.county like'%").append(whereObject.getString("condition")).append("%' ");
  49. where.append("or t1.address like'%").append(whereObject.getString("condition")).append("%' ");
  50. where.append("or t1.projectnum like'%").append(whereObject.getString("condition")).append("%' ");
  51. where.append(")");
  52. }
  53. if (whereObject.containsKey("startdate") && !"".equals(whereObject.getString("startdate"))) {
  54. where.append(" and(");
  55. where.append("t1.createdate >='").append(whereObject.getString("startdate")).append("' ");
  56. where.append(")");
  57. }
  58. if (whereObject.containsKey("enddate") && !"".equals(whereObject.getString("enddate"))) {
  59. where.append(" and(");
  60. where.append("t1.createdate <='").append(whereObject.getString("enddate")).append("' ");
  61. where.append(")");
  62. }
  63. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  64. where.append(" and(");
  65. where.append("t1.status ='").append(whereObject.getString("status")).append("' ");
  66. where.append(")");
  67. }
  68. if (whereObject.containsKey("projecttype") && !"".equals(whereObject.getString("projecttype"))) {
  69. where.append(" and(");
  70. where.append("t1.projecttype ='").append(whereObject.getString("projecttype")).append("' ");
  71. where.append(")");
  72. }
  73. if (whereObject.containsKey("grade") && !"".equals(whereObject.getString("grade"))) {
  74. where.append(" and(");
  75. where.append("t1.grade ='").append(whereObject.getString("grade")).append("' ");
  76. where.append(")");
  77. }
  78. if (whereObject.containsKey("stagename") && !"".equals(whereObject.getString("stagename"))) {
  79. where.append(" and(");
  80. where.append("t2.stagename ='").append(whereObject.getString("stagename")).append("' ");
  81. where.append(")");
  82. }
  83. if (whereObject.containsKey("brandname") && !"".equals(whereObject.getString("brandname"))) {
  84. where.append(" and(");
  85. where.append("t3.brandname ='").append(whereObject.getString("brandname")).append("' ");
  86. where.append(")");
  87. }
  88. if (whereObject.containsKey("tradefield") && !"".equals(whereObject.getString("tradefield"))) {
  89. where.append(" and(");
  90. where.append("t1.tradefield like'%").append(whereObject.getString("tradefield")).append("%' ");
  91. where.append(")");
  92. }
  93. //缔约方
  94. if (whereObject.containsKey("tag") && !"".equals(whereObject.getString("tag"))) {
  95. where.append(" and( ");
  96. where.append("t1.sa_projectid in ( SELECT ownerid from sys_datatag WHERE ownertable = 'sa_project' and tag like'%" + whereObject.getString("tag") + "%' )");
  97. where.append(")");
  98. }
  99. if (whereObject.containsKey("sys_enterpriseid") && !"".equals(whereObject.getString("sys_enterpriseid"))) {
  100. where.append(" and(");
  101. where.append("exists(select * from sa_project_parties where t1.siteid=sa_project_parties.siteid and t1.sa_projectid=sa_project_parties.sa_projectid and sa_project_parties.sys_enterpriseid='" + whereObject.getString("sys_enterpriseid") + "' )");
  102. where.append(")");
  103. }
  104. }
  105. where.append(" and(").append("t1.deleted = ").append(deleted).append(")");
  106. SQLFactory sqlFactory = new SQLFactory(this, "项目商机列表", pageSize, pageNumber, pageSorting);
  107. sqlFactory.addParameter("siteid", siteid);
  108. sqlFactory.addParameter_SQL("where", where);
  109. // sqlFactory.addParameter("username", username);
  110. String where2;
  111. if (type == 0) {
  112. where2 = DataTeam.getDataWhereStr(this, tablename, "t1", 1)
  113. + " or " + DataTeam.getDataWhereStr(this, tablename, "t1", 2)
  114. + " or " + DataTeam.getDataWhereStr(this, tablename, "t1", 3)
  115. + " or " + DataTeam.getDataWhereStr(this, tablename, "t1", 4)
  116. + " or " + DataTeam.getDataWhereStr(this, tablename, "t1", 5);
  117. } else {
  118. where2 = DataTeam.getDataWhereStr(this, tablename, "t1", type);
  119. }
  120. sqlFactory.addParameter_SQL("where2", where2);
  121. String sql = sqlFactory.getSQL();
  122. Rows rows = dbConnect.runSqlQuery(sql);
  123. ArrayList<Long> sa_projectids = rows.toArrayList("sa_projectid", new ArrayList<>());
  124. sqlFactory = new SQLFactory(this, "查询项目缔约方客户类型");
  125. sqlFactory.addParameter("siteid", siteid);
  126. sqlFactory.addParameter_in("sa_projectid", sa_projectids);
  127. RowsMap typeRowsMap = dbConnect.runSqlQuery(sqlFactory).toRowsMap("sa_projectid");
  128. RowsMap leaderRows = DataTeam.getLeader(this, tablename, rows.toArrayList("sa_projectid", new ArrayList<>())).toRowsMap("ownerid");
  129. sqlFactory = new SQLFactory(this, "阶段排序");
  130. sqlFactory.addParameter("siteid", siteid);
  131. sqlFactory.addParameter_in("sa_projectids", rows.toArray("sa_projectid"));
  132. RowsMap stageRowsMap = dbConnect.runSqlQuery(sqlFactory.getSQL()).toRowsMap("projectid");
  133. //标签
  134. HashMap<Long, ArrayList<String>> tagList = DataTag.queryTag(this, "sa_project", sa_projectids, false);
  135. //系统标签
  136. HashMap<Long, ArrayList<String>> sysTagList = DataTag.queryTag(this, "sa_project", sa_projectids, true);
  137. RowsMap deletereasonRowsMap = null;
  138. if (deleted == 1) {
  139. deletereasonRowsMap = DataExtend.getDeleteReasonSql(this, "sa_project", rows.toArrayList("sa_projectid", new ArrayList<Long>()));
  140. }
  141. for (Row row : rows) {
  142. Long sa_projectid = row.getLong("sa_projectid");
  143. if (!stageRowsMap.isEmpty() && stageRowsMap.containsKey(String.valueOf(sa_projectid))) {
  144. if (stageRowsMap.get(String.valueOf(sa_projectid)).toRowsMap("active").containsKey("1")) {
  145. String rowNum = stageRowsMap.get(String.valueOf(sa_projectid)).toRowsMap("active").get("1").get(0).getString("rowNum");
  146. row.put("stage", rowNum);
  147. } else {
  148. row.put("stage", 0);
  149. }
  150. } else {
  151. row.put("stage", 0);
  152. }
  153. row.put("types", typeRowsMap.get(String.valueOf(sa_projectid)));
  154. row.put("winrate", 0);
  155. row.put("leader", leaderRows.get(String.valueOf(sa_projectid)));
  156. //非系统标签
  157. row.put("tag", tagList.get(sa_projectid) != null ? tagList.get(sa_projectid) : new ArrayList<String>());
  158. //系统标签
  159. row.put("tag_sys", sysTagList.get(sa_projectid) != null ? sysTagList.get(sa_projectid) : new ArrayList<String>());
  160. if (deletereasonRowsMap != null && deletereasonRowsMap.containsKey(row.getString("sa_projectid"))) {
  161. Row dataextendrow = deletereasonRowsMap.get(row.getString("sa_projectid")).get(0);
  162. row.put("deletereason", dataextendrow.getString("deletereason"));
  163. row.put("deletechangeby", dataextendrow.getString("changeby"));
  164. row.put("deletechangedate", dataextendrow.getString("changedate"));
  165. } else {
  166. row.put("deletereason", "");
  167. row.put("deletechangeby", "");
  168. row.put("deletechangedate", "");
  169. }
  170. }
  171. return getSucReturnObject().setData(rows).toString();
  172. }
  173. @API(title = "新增或更新", apiversion = R.ID20221020144202.v1.class)
  174. @CACHEING_CLEAN(apiversions = {R.ID20221020143502.v1.class, R.ID20221018102003.v1.class})
  175. public String insertOrUpdate() throws YosException {
  176. Long sa_projectid = content.getLong("sa_projectid");
  177. String projectname = content.getString("projectname");
  178. String projecttype = content.getString("projecttype");
  179. Long sa_brandid = content.getLongValue("sa_brandid");
  180. String tradefield = content.getStringValue("tradefield");
  181. String tablename = "sa_project";
  182. RowsMap stageRowsMap = dbConnect.runSqlQuery("select t1.sa_projstagemagid ,t1.stagename,t1.remarks,t1.sequence,t2.projecttype from sa_projstagemag t1 inner join sa_projstagemag_projecttype t2 on t1.siteid=t2.siteid and t1.sa_projstagemagid=t2.sa_projstagemagid where t1.siteid='" + siteid + "'").toRowsMap("projecttype");
  183. Rows projectRows = dbConnect.runSqlQuery("select projecttype from sa_project where siteid='" + siteid + "' and sa_projectid=" + sa_projectid);
  184. String projectnum = content.getStringValue("projectnum");
  185. if (projectnum.isEmpty()) {
  186. projectnum = createBillCode("projectbill");
  187. }
  188. ArrayList<String> sqlList = new ArrayList<>();
  189. SQLFactory sqlFactory = new SQLFactory(this, "项目商机新增");
  190. if (sa_projectid <= 0 || projectRows.isEmpty()) {
  191. sa_projectid = createTableID(tablename);
  192. //数据团队新增
  193. sqlList.addAll(DataTeam.createTeamSQL(this, tablename, sa_projectid, userid));
  194. sqlList.addAll(DataTeam.createTeamMemberSql(this, "sa_project", sa_projectid, userid));
  195. //添加直销标签
  196. DataTag.createTag(this, tablename, sa_projectid, "直销");
  197. String sql = DataContrlLog.createLog(this, "sa_project", sa_projectid, "新建", "新建项目商机" + projectnum).getSQL();
  198. sqlList.add(sql);
  199. } else {
  200. sqlFactory = new SQLFactory(this, "项目商机更新");
  201. String sql = DataContrlLog.createLog(this, "sa_project", sa_projectid, "编辑", "编辑项目商机" + projectnum).getSQL();
  202. sqlList.add(sql);
  203. }
  204. sqlFactory.addParameter("siteid", siteid);
  205. sqlFactory.addParameter("sa_projectid", sa_projectid);
  206. sqlFactory.addParameter("departmentid", departmentid);
  207. sqlFactory.addParameter("userid", userid);
  208. sqlFactory.addParameter("username", username);
  209. sqlFactory.addParameter("projectname", projectname);
  210. sqlFactory.addParameter("projectnum", createBillCode("projectbill"));
  211. sqlFactory.addParameter("grade", content.getStringValue("grade"));
  212. sqlFactory.addParameter("budgetary", content.getStringValue("budgetary"));
  213. sqlFactory.addParameter("remarks", content.getStringValue("remarks"));
  214. sqlFactory.addParameter("projecttype", projecttype);
  215. sqlFactory.addParameter("signdate_due", content.getStringValue("signdate_due"));
  216. sqlFactory.addParameter("scale", content.getStringValue("scale"));
  217. sqlFactory.addParameter("signamount_due", content.getBigDecimalValue("signamount_due"));
  218. sqlFactory.addParameter("province", content.getStringValue("province"));
  219. sqlFactory.addParameter("city", content.getStringValue("city"));
  220. sqlFactory.addParameter("county", content.getStringValue("county"));
  221. sqlFactory.addParameter("address", content.getStringValue("address"));
  222. sqlFactory.addParameter("discountrate", content.getBigDecimalValue("discountrate", 1));
  223. sqlFactory.addParameter("costofconstruction", content.getBigDecimalValue("costofconstruction"));
  224. sqlFactory.addParameter("totalinvestment", content.getBigDecimalValue("totalinvestment"));
  225. sqlFactory.addParameter("begdate_due", content.getStringValue("begdate_due", false, "null"));
  226. sqlFactory.addParameter("enddate_due", content.getStringValue("enddate_due", false, "null"));
  227. sqlFactory.addParameter("sa_brandid", sa_brandid);
  228. sqlFactory.addParameter("tradefield", tradefield);
  229. sqlList.add(sqlFactory.getSQL());
  230. if (dbConnect.runSqlQuery("SELECT 1 from sa_project_stage WHERE sa_projectid = " + sa_projectid + " AND siteid = '" + siteid + "'").isEmpty()) {
  231. Rows rows = stageRowsMap.get(projecttype);
  232. for (int i = 0; i < rows.size(); i++) {
  233. Row row = rows.getRow(i);
  234. sqlFactory = new SQLFactory(this, "工程项目阶段信息新增");
  235. sqlFactory.addParameter("siteid", siteid);
  236. sqlFactory.addParameter("sa_project_stageid", createTableID("sa_project_stage"));
  237. sqlFactory.addParameter("sa_projectid", sa_projectid);
  238. sqlFactory.addParameter("sa_projstagemagid", row.getLong("sa_projstagemagid"));
  239. sqlFactory.addParameter("stagename", row.getString("stagename"));
  240. sqlFactory.addParameter("remarks", row.getString("remarks"));
  241. sqlFactory.addParameter("sequence", row.getLong("sequence"));
  242. if (i == 0) {
  243. sqlFactory.addParameter("active", 1);
  244. } else {
  245. sqlFactory.addParameter("active", 0);
  246. }
  247. sqlList.add(sqlFactory.getSQL());
  248. }
  249. }
  250. dbConnect.runSqlUpdate(sqlList);
  251. content.put("sa_projectid", sa_projectid);
  252. return selectDetail();
  253. }
  254. @API(title = "作废", apiversion = R.ID20221020144302.v1.class)
  255. @CACHEING_CLEAN(apiversions = {R.ID20221020143502.v1.class, R.ID20221018102003.v1.class})
  256. public String delete() throws YosException {
  257. JSONArray sa_projectids = content.getJSONArray("sa_projectids");
  258. ArrayList<String> sqlList = new ArrayList<>();
  259. SQLFactory sqlFactory = new SQLFactory(this, "项目商机作废");
  260. sqlFactory.addParameter("siteid", siteid);
  261. sqlFactory.addParameter_in("sa_projectid", sa_projectids.toArray());
  262. sqlList.add(sqlFactory.getSQL());
  263. //新增删除或作废原因
  264. DataExtend.createDeleteReasonSql(this, "sa_project", sa_projectids.toJavaList(Long.class), content.getStringValue("deletereason"));
  265. for (Object obj : sa_projectids) {
  266. Long id = Long.valueOf(obj.toString());
  267. sqlList.add(DataContrlLog.createLog(this, "sa_project", id, "作废", "作废项目商机至 回收站:" + id).getSQL());
  268. }
  269. dbConnect.runSqlUpdate(sqlList);
  270. return getSucReturnObject().toString();
  271. }
  272. @API(title = "报备", apiversion = R.ID20221021092302.v1.class)
  273. @CACHEING_CLEAN(apiversions = {R.ID20221020143502.v1.class})
  274. public String report() throws YosException {
  275. Long sa_projectid = content.getLong("sa_projectid");
  276. String reportby = content.getString("reportby");
  277. SQLFactory sqlFactory = new SQLFactory(this, "项目商机报备");
  278. sqlFactory.addParameter("siteid", siteid);
  279. sqlFactory.addParameter("userid", userid);
  280. sqlFactory.addParameter("username", username);
  281. sqlFactory.addParameter("reportby", reportby);
  282. sqlFactory.addParameter("sa_projectid", sa_projectid);
  283. dbConnect.runSqlUpdate(sqlFactory);
  284. dbConnect.runSqlUpdate(DataContrlLog.createLog(this, "sa_project", sa_projectid, "报备", "项目商机报备成功").getSQL());
  285. return getSucReturnObject().toString();
  286. }
  287. @API(title = "报备", apiversion = R.ID20221021092402.v1.class)
  288. @CACHEING_CLEAN(apiversions = {R.ID20221020143502.v1.class, R.ID20221018102003.v1.class})
  289. public String reportcheck() throws YosException {
  290. Long sa_projectid = content.getLong("sa_projectid");
  291. SQLFactory sqlFactory = new SQLFactory(this, "项目商机报备审核");
  292. sqlFactory.addParameter("siteid", siteid);
  293. sqlFactory.addParameter("userid", userid);
  294. sqlFactory.addParameter("username", username);
  295. sqlFactory.addParameter("sa_projectid", sa_projectid);
  296. dbConnect.runSqlUpdate(sqlFactory);
  297. dbConnect.runSqlUpdate(DataContrlLog.createLog(this, "sa_project", sa_projectid, "报备审核", "项目商机报备审核成功").getSQL());
  298. return getSucReturnObject().toString();
  299. }
  300. @API(title = "可报备人员列表", apiversion = R.ID20221021093202.v1.class)
  301. public String reportList() throws YosException {
  302. StringBuffer where = new StringBuffer(" 1=1 ");
  303. if (content.containsKey("where")) {
  304. JSONObject whereObject = content.getJSONObject("where");
  305. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  306. where.append(" and(");
  307. where.append("t1.name like'%").append(whereObject.getString("condition")).append("%' ");
  308. where.append(")");
  309. }
  310. }
  311. SQLFactory sqlFactory = new SQLFactory(this, "报备人列表", pageSize, pageNumber, pageSorting);
  312. sqlFactory.addParameter("siteid", siteid);
  313. sqlFactory.addParameter("userid", userid);
  314. sqlFactory.addParameter_SQL("where", where);
  315. String sql = sqlFactory.getSQL();
  316. Rows rows = dbConnect.runSqlQuery(sql);
  317. return getSucReturnObject().setData(rows).toString();
  318. }
  319. @API(title = "我负责的客户", apiversion = R.ID20221021095802.v1.class)
  320. public String myCustomerList() throws YosException {
  321. StringBuffer where = new StringBuffer(" 1=1 ");
  322. if (content.containsKey("where")) {
  323. JSONObject whereObject = content.getJSONObject("where");
  324. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  325. where.append(" and(");
  326. where.append("t1.createby like'%").append(whereObject.getString("condition")).append("%' ");
  327. where.append("or t2.enterprisename like'%").append(whereObject.getString("condition")).append("%' ");
  328. where.append(")");
  329. }
  330. }
  331. SQLFactory sqlFactory = new SQLFactory(this, "我的客户", pageSize, pageNumber, pageSorting);
  332. sqlFactory.addParameter("siteid", siteid);
  333. sqlFactory.addParameter_SQL("where", where);
  334. sqlFactory.addParameter_SQL("where2", DataTeam.getDataWhereStr(this, "sa_customers", "t1", 1));
  335. String sql = sqlFactory.getSQL();
  336. Rows rows = dbConnect.runSqlQuery(sql);
  337. return getSucReturnObject().setData(rows).toString();
  338. }
  339. @API(title = "项目商机详情", apiversion = R.ID20221021103902.v1.class)
  340. public String selectDetail() throws YosException {
  341. Long sa_projectid = content.getLong("sa_projectid");
  342. SQLFactory sqlFactory = new SQLFactory(this, "项目商机详情");
  343. sqlFactory.addParameter("siteid", siteid);
  344. sqlFactory.addParameter("sa_projectid", sa_projectid);
  345. String sql = sqlFactory.getSQL();
  346. Rows rows = dbConnect.runSqlQuery(sql);
  347. RowsMap leaderRows = DataTeam.getLeader(this, "sa_project", rows.toArrayList("sa_projectid", new ArrayList<>())).toRowsMap("ownerid");
  348. for (Row row : rows) {
  349. if (leaderRows.get(row.getString("sa_projectid")) == null) {
  350. row.put("leader", new Rows());
  351. } else {
  352. row.put("leader", leaderRows.get(row.getString("sa_projectid")));
  353. }
  354. }
  355. Row row = rows.isNotEmpty() ? rows.get(0) : new Row();
  356. sqlFactory = new SQLFactory(this, "查询最近跟进信息");
  357. sqlFactory.addParameter("siteid", siteid);
  358. sqlFactory.addParameter("ownerid", sa_projectid);
  359. Rows followRows = dbConnect.runSqlQuery(sqlFactory);
  360. if (followRows.isNotEmpty()) {
  361. row.putAll(followRows.get(0));
  362. } else {
  363. row.put("followby", "");
  364. row.put("followdate", "");
  365. }
  366. //转移次数
  367. row.put("changecount", 0);
  368. row.put("winrate", 0);
  369. return getSucReturnObject().setData(row).toString();
  370. }
  371. @API(title = "项目商机导入模板", apiversion = R.ID20221110151704.v1.class)
  372. public String downloadExcel() throws YosException {
  373. ExcelFactory excelFactory = new ExcelFactory("项目商机导入模板");
  374. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
  375. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  376. // 设置工作薄列宽
  377. ProjectExcel.setBatchDetailSheetColumn1(sheet);
  378. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  379. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  380. XSSFCellStyle titleCellStyle3 = ExportExcel.createBodyCellStyle(xssfFWorkbook);
  381. // 写入标题
  382. ProjectExcel.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook);
  383. Rows aa = uploadExcelToObs(excelFactory);
  384. String url = "";
  385. if (!aa.isEmpty()) {
  386. url = aa.get(0).getString("url");
  387. }
  388. return getSucReturnObject().setData(url).toString();
  389. }
  390. @API(title = "项目商机导入", apiversion = R.ID20221110152504.v1.class)
  391. @CACHEING_CLEAN(apiversions = {R.ID20221020143502.v1.class, R.ID20221018102003.v1.class})
  392. public String importExcel() throws YosException {
  393. ExcelFactory e;
  394. try {
  395. // 华为云
  396. e = getPostExcelFactory(content.getLong("attachmentid"));
  397. // 本地
  398. //e = getPostExcelFactory();
  399. ArrayList<String> keys = new ArrayList<>();
  400. ArrayList<String> sqlList = new ArrayList<>();
  401. keys.add("projectname");
  402. keys.add("budgetary");
  403. keys.add("projecttype");
  404. keys.add("signdate_due");
  405. keys.add("scale");
  406. keys.add("signamount_due");
  407. keys.add("province");
  408. keys.add("city");
  409. keys.add("county");
  410. keys.add("address");
  411. Rows rows = e.getSheetRows(0, keys, 2);
  412. boolean iserr = false;
  413. Rows rowserr = new Rows();
  414. Rows rowssuc = new Rows();
  415. RowsMap stageRowsMap = dbConnect.runSqlQuery("select t1.sa_projstagemagid ,t1.stagename,t1.remarks,t1.sequence,t2.projecttype from sa_projstagemag t1 inner join sa_projstagemag_projecttype t2 on t1.siteid=t2.siteid and t1.sa_projstagemagid=t2.sa_projstagemagid where t1.siteid='" + siteid + "'").toRowsMap("projecttype");
  416. Rows task = dbConnect.runSqlQuery("select t1.onstage,t2.sa_projstagemagid,t3.projecttype from sa_projtaskmag t1 left join sa_projtaskmag_optionscore t2 on t1.siteid=t2.siteid and t1.sa_projtaskmagid=t2.sa_projtaskmagid left join sa_projstagemag_projecttype t3 on t2.siteid=t3.siteid and t2.sa_projstagemagid=t3.sa_projstagemagid where t1.siteid='" + siteid + "'");
  417. RowsMap onstageRowsMap = task.toRowsMap("onstage");
  418. RowsMap taskStageRowsMap = onstageRowsMap.get("1").toRowsMap("projecttype");
  419. for (Row row : rows) {
  420. StringBuffer err = new StringBuffer();
  421. if (StringUtils.isEmpty(row.getString("projectname"))) {
  422. iserr = true;
  423. err.append("错误信息:项目名称不能为空;");
  424. }
  425. if (StringUtils.isEmpty(row.getString("projecttype"))) {
  426. iserr = true;
  427. err.append("错误信息:项目类型不能为空;");
  428. } else {
  429. if (onstageRowsMap.get("0").isEmpty()) {
  430. if (!taskStageRowsMap.containsKey(row.getString("projecttype"))) {
  431. iserr = true;
  432. err.append("错误信息:该项目类型下没有项目任务,无法创建项目商机");
  433. }
  434. }
  435. }
  436. if (err.length() > 0) {
  437. row.put("msg", err);
  438. rowserr.add(row);
  439. } else {
  440. rowssuc.add(row);
  441. }
  442. }
  443. if (!rowssuc.isEmpty()) {
  444. for (Row row : rowssuc) {
  445. String tablename = "sa_project";
  446. Long sa_projectid = createTableID(tablename);
  447. //数据团队新增
  448. sqlList.addAll(DataTeam.createTeamSQL(this, tablename, sa_projectid, userid));
  449. sqlList.addAll(DataTeam.createTeamMemberSql(this, "sa_project", sa_projectid, userid));
  450. if (usertype == 1 || usertype == 0) {
  451. DataTag.createTag(this, tablename, sa_projectid, "直销");
  452. }
  453. sa_projectid = createTableID("sa_project");
  454. SQLFactory sqlFactoryupload = new SQLFactory(this, "项目商机新增");
  455. sqlFactoryupload.addParameter("siteid", siteid);
  456. sqlFactoryupload.addParameter("sa_projectid", sa_projectid);
  457. sqlFactoryupload.addParameter("departmentid", departmentid);
  458. sqlFactoryupload.addParameter("userid", userid);
  459. sqlFactoryupload.addParameter("username", username);
  460. sqlFactoryupload.addParameter("projectname", row.getString("projectname"));
  461. sqlFactoryupload.addParameter("projectnum", createBillCode("projectbill"));
  462. sqlFactoryupload.addParameter("grade", "null");
  463. sqlFactoryupload.addParameter("budgetary", row.getString("budgetary"));
  464. sqlFactoryupload.addParameter("remarks", "");
  465. sqlFactoryupload.addParameter("projecttype", row.getString("projecttype"));
  466. sqlFactoryupload.addParameter("signdate_due", row.getString("signdate_due"));
  467. sqlFactoryupload.addParameter("scale", "");
  468. sqlFactoryupload.addParameter("signamount_due", row.getBigDecimal("signamount_due"));
  469. sqlFactoryupload.addParameter("province", row.getString("province"));
  470. sqlFactoryupload.addParameter("city", row.getString("city"));
  471. sqlFactoryupload.addParameter("county", row.getString("county"));
  472. sqlFactoryupload.addParameter("address", row.getString("address"));
  473. sqlList.add(sqlFactoryupload.getSQL());
  474. DataContrlLog.createLog(this, "sa_project", sa_projectid, "新增", "项目商机导入:" + sa_projectid);
  475. //创建项目阶段
  476. Rows rows1 = stageRowsMap.get(row.getString("projecttype"));
  477. for (int i = 0; i < rows1.size(); i++) {
  478. Row row1 = rows1.getRow(i);
  479. sqlFactoryupload = new SQLFactory(this, "工程项目阶段信息新增");
  480. sqlFactoryupload.addParameter("siteid", siteid);
  481. sqlFactoryupload.addParameter("sa_project_stageid", createTableID("sa_project_stage"));
  482. sqlFactoryupload.addParameter("sa_projectid", sa_projectid);
  483. sqlFactoryupload.addParameter("sa_projstagemagid", row1.getLong("sa_projstagemagid"));
  484. sqlFactoryupload.addParameter("stagename", row1.getString("stagename"));
  485. sqlFactoryupload.addParameter("remarks", row1.getString("remarks"));
  486. sqlFactoryupload.addParameter("sequence", row1.getLong("sequence"));
  487. if (i == 0) {
  488. sqlFactoryupload.addParameter("active", 1);
  489. } else {
  490. sqlFactoryupload.addParameter("active", 0);
  491. }
  492. sqlList.add(sqlFactoryupload.getSQL());
  493. }
  494. }
  495. }
  496. if (iserr) {
  497. ExcelFactory excelFactory = new ExcelFactory("项目商机导入错误信息");
  498. ArrayList<String> colNameList = new ArrayList<String>();
  499. HashMap<String, Class> keytypemap = new HashMap<String, Class>();
  500. colNameList.add("projectname");
  501. colNameList.add("budgetary");
  502. colNameList.add("projecttype");
  503. colNameList.add("signdate_due");
  504. colNameList.add("scale");
  505. colNameList.add("signamount_due");
  506. colNameList.add("province");
  507. colNameList.add("city");
  508. colNameList.add("county");
  509. colNameList.add("address");
  510. colNameList.add("msg");
  511. keytypemap.put("projectname", String.class);
  512. keytypemap.put("budgetary", String.class);
  513. keytypemap.put("projecttype", String.class);
  514. keytypemap.put("signdate_due", String.class);
  515. keytypemap.put("scale", String.class);
  516. keytypemap.put("signamount_due", String.class);
  517. keytypemap.put("province", String.class);
  518. keytypemap.put("city", String.class);
  519. keytypemap.put("county", String.class);
  520. keytypemap.put("address", String.class);
  521. keytypemap.put("msg", String.class);
  522. rowserr.setFieldList(colNameList);
  523. rowserr.setFieldTypeMap(keytypemap);
  524. addSheet(excelFactory, "Sheet1", rowserr);
  525. Rows aa = uploadExcelToObs(excelFactory);
  526. String url = "";
  527. if (!aa.isEmpty()) {
  528. url = aa.get(0).getString("url");
  529. }
  530. return getSucReturnObject().setData(url).toString();
  531. }
  532. if (!sqlList.isEmpty()) {
  533. dbConnect.runSqlUpdate(sqlList);
  534. }
  535. } catch (Exception e1) {
  536. e1.printStackTrace();
  537. return getErrReturnObject().setErrMsg(e1.getMessage()).toString();
  538. }
  539. return getSucReturnObject().toString();
  540. }
  541. public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows) {
  542. ArrayList<String> keylist = datarows.getFieldList();
  543. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
  544. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  545. XSSFCellStyle xssfCellStyle1 = xssfFWorkbook.createCellStyle();
  546. XSSFFont font = xssfFWorkbook.createFont();
  547. font.setColor((short) 0xa);
  548. font.setFontHeightInPoints((short) 12);
  549. font.setBold(true);
  550. xssfCellStyle1.setFont(font);
  551. ProjectExcel.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
  552. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  553. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  554. ProjectExcel.batchDetailErr(sheet, titleCellStyle1, titleCellStyle2, xssfFWorkbook);// 写入标题
  555. for (int n = 0; n < datarows.size(); n++) {
  556. Row row = datarows.get(n);
  557. XSSFRow datarow = sheet.createRow(n + 2);
  558. for (int i1 = 0; i1 < keylist.size(); i1++) {
  559. Class fieldclazztype = datarows.getFieldMeta(keylist.get(i1)).getFieldtype();
  560. if (fieldclazztype == Integer.class) {
  561. datarow.createCell(i1).setCellValue(row.getInteger(keylist.get(i1)));
  562. } else if (fieldclazztype == Long.class) {
  563. datarow.createCell(i1).setCellValue(row.getLong(keylist.get(i1)));
  564. } else if (fieldclazztype == Float.class) {
  565. datarow.createCell(i1).setCellValue(row.getFloat(keylist.get(i1)));
  566. } else if (fieldclazztype == Double.class) {
  567. datarow.createCell(i1).setCellValue(row.getDouble(keylist.get(i1)));
  568. } else {
  569. datarow.createCell(i1).setCellValue(row.getString(keylist.get(i1)));
  570. }
  571. if (i1 == 10) {
  572. datarow.getCell(i1).setCellStyle(xssfCellStyle1);
  573. }
  574. }
  575. }
  576. return sheet;
  577. }
  578. @API(title = "解锁/锁定", apiversion = R.ID20221024094502.v1.class)
  579. @CACHEING_CLEAN(apiversions = {R.ID20221020143502.v1.class})
  580. public String isLocked() throws YosException {
  581. JSONArray sa_projectids = content.getJSONArray("sa_projectids");
  582. ArrayList<String> sqlList = new ArrayList<>();
  583. boolean locked = content.getBooleanValue("locked");
  584. SQLFactory sqlFactory = new SQLFactory(this, "项目商机锁定");
  585. sqlFactory.addParameter("siteid", siteid);
  586. sqlFactory.addParameter("locked", locked);
  587. sqlFactory.addParameter("userid", userid);
  588. sqlFactory.addParameter("username", username);
  589. sqlFactory.addParameter_in("sa_projectid", sa_projectids.toArray());
  590. sqlList.add(sqlFactory.getSQL());
  591. //操作记录
  592. for (Object obj : sa_projectids) {
  593. Long id = Long.valueOf(obj.toString());
  594. if (locked) {
  595. sqlList.add(DataContrlLog.createLog(this, "sa_project", id, "锁定", "项目商机锁定:" + id).getSQL());
  596. } else {
  597. sqlList.add(DataContrlLog.createLog(this, "sa_project", id, "解锁", "项目商机解锁:" + id).getSQL());
  598. }
  599. }
  600. dbConnect.runSqlUpdate(sqlList);
  601. return getSucReturnObject().toString();
  602. }
  603. @API(title = "查询竞争对手", apiversion = R.ID20221027165402.v1.class)
  604. public String selectCompete() throws YosException {
  605. Long sa_projectid = content.getLong("sa_projectid");
  606. StringBuffer where = new StringBuffer(" 1=1 ");
  607. if (content.containsKey("where")) {
  608. JSONObject whereObject = content.getJSONObject("where");
  609. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  610. where.append(" and(");
  611. where.append("t2.createby like'%").append(whereObject.getString("condition")).append("%' ");
  612. where.append("or t2.brandname like'%").append(whereObject.getString("condition")).append("%' ");
  613. where.append("or t1.advantage like'%").append(whereObject.getString("condition")).append("%' ");
  614. where.append("or t1.inferiority like'%").append(whereObject.getString("condition")).append("%' ");
  615. where.append("or t1.remarks like'%").append(whereObject.getString("condition")).append("%' ");
  616. where.append("or t3.enterprisename like'%").append(whereObject.getString("condition")).append("%' ");
  617. where.append(")");
  618. }
  619. }
  620. SQLFactory sqlFactory = new SQLFactory(this, "竞争对手列表", pageSize, pageNumber, pageSorting);
  621. sqlFactory.addParameter("siteid", siteid);
  622. sqlFactory.addParameter_SQL("where", where);
  623. sqlFactory.addParameter("sa_projectid", sa_projectid);
  624. String sql = sqlFactory.getSQL();
  625. Rows rows = dbConnect.runSqlQuery(sql);
  626. return getSucReturnObject().setData(rows).toString();
  627. }
  628. @API(title = "报备审核", apiversion = R.ID20221114163402.v1.class)
  629. @CACHEING_CLEAN(apiversions = {R.ID20220929085401.v1.class})
  630. public String addTag() throws YosException {
  631. Long sa_projectid = content.getLong("sa_projectid");
  632. Long type = content.getLong("type");
  633. String projectnum = "";
  634. Rows rows = dbConnect.runSqlQuery("SELECT projectnum from sa_project WHERE sa_projectid = " + sa_projectid + " and siteid='" + siteid + "'");
  635. if (rows.isNotEmpty()) {
  636. projectnum = rows.get(0).getString("projectnum");
  637. }
  638. ArrayList<String> sqlList = new ArrayList<>();
  639. switch (type.toString()) {
  640. case "1":
  641. //提交报备
  642. if (dbConnect.runSqlQuery("SELECT * from sys_datatag WHERE tag in ('报备中','已报备') and ownerid = " + sa_projectid + " and siteid = '" + siteid + "' and ownertable ='sa_project'").isNotEmpty()) {
  643. return getErrReturnObject().setErrMsg("当前状态无法提交报备").toString();
  644. }
  645. DataTag.createTag(this, "sa_project", sa_projectid, "报备中");
  646. sqlList.add("UPDATE sa_project SET reportby='" + username + "',reportdate=CURRENT_TIME WHERE sa_projectid = " + sa_projectid + " and siteid='" + siteid + "'");
  647. //操作记录
  648. sqlList.add(DataContrlLog.createLog(this, "sa_project", sa_projectid, "提交报备", "提交报备项目商机" + projectnum).getSQL());
  649. break;
  650. case "2":
  651. //报备审核
  652. if (dbConnect.runSqlQuery("SELECT * from sys_datatag WHERE tag in ('报备中') and ownerid = " + sa_projectid + " and siteid = '" + siteid + "' and ownertable ='sa_project'").isNotEmpty()) {
  653. dbConnect.runSqlUpdate("UPDATE sys_datatag SET tag='已报备' WHERE tag in ('报备中') and ownerid = " + sa_projectid + " and siteid = '" + siteid + "' and ownertable ='sa_project'");
  654. sqlList.add("UPDATE sa_project SET reportcheckby='" + username + "',reportcheckdate=CURRENT_TIME WHERE sa_projectid = " + sa_projectid + " and siteid='" + siteid + "'");
  655. //操作记录
  656. sqlList.add(DataContrlLog.createLog(this, "sa_project", sa_projectid, "报备审核", "报备审核项目商机" + projectnum).getSQL());
  657. } else {
  658. return getErrReturnObject().setErrMsg("当前状态无法报备审核").toString();
  659. }
  660. break;
  661. case "3":
  662. //取消审核
  663. if (dbConnect.runSqlQuery("SELECT * from sys_datatag WHERE tag in ('已报备','报备中') and ownerid = " + sa_projectid + " and siteid = '" + siteid + "' and ownertable ='sa_project'").isNotEmpty()) {
  664. sqlList.add("delete from sys_datatag WHERE tag in ('已报备','报备中') and ownerid = " + sa_projectid + " and siteid = '" + siteid + "' and ownertable ='sa_project'");
  665. sqlList.add("UPDATE sa_project SET reportby=null,reportdate=null,reportcheckby=null,reportcheckdate=null WHERE sa_projectid = " + sa_projectid + " and siteid='" + siteid + "'");
  666. //操作记录
  667. sqlList.add(DataContrlLog.createLog(this, "sa_project", sa_projectid, "报备驳回(退回)", "报备驳回(退回)项目商机" + projectnum).getSQL());
  668. } else {
  669. return getErrReturnObject().setErrMsg("当前状态无法取消审核").toString();
  670. }
  671. break;
  672. default:
  673. break;
  674. }
  675. dbConnect.runSqlUpdate(sqlList);
  676. return getSucReturnObject().toString();
  677. }
  678. @API(title = "获取所有阶段名称", apiversion = R.ID20221116104502.v1.class)
  679. public String getStageName() throws YosException {
  680. Rows rows = dbConnect.runSqlQuery("SELECT DISTINCT stagename from sa_project_stage WHERE siteid ='" + siteid + "'");
  681. return getSucReturnObject().setData(rows).toString();
  682. }
  683. @API(title = "结束:在跟进中状态下,操作【结束】功能,项目状态变更为:已失败", apiversion = R.ID20221215163702.v1.class)
  684. @CACHEING_CLEAN(apiversions = {R.ID20221020143502.class})
  685. public String endProject() throws YosException {
  686. Long sa_projectid = content.getLong("sa_projectid");
  687. String sql = "SELECT `status`,projectnum from sa_project WHERE sa_projectid = " + sa_projectid + " and siteid = '" + siteid + "'";
  688. Rows rows = dbConnect.runSqlQuery(sql);
  689. if (rows.isEmpty()) {
  690. return getErrReturnObject().setErrMsg("项目不存在").toString();
  691. }
  692. String projectnum = "";
  693. if (rows.isNotEmpty()) {
  694. if (!rows.get(0).getString("status").equals("跟进中")) {
  695. return getErrReturnObject().setErrMsg("只有【跟进中】项目才能结束").toString();
  696. }
  697. projectnum = rows.get(0).getString("projectnum");
  698. }
  699. ArrayList<String> sqlList = new ArrayList<>();
  700. sql = "UPDATE sa_project SET status='已失败' WHERE sa_projectid = " + sa_projectid + " and siteid = '" + siteid + "'";
  701. sqlList.add(sql);
  702. //操作记录
  703. sqlList.add(DataContrlLog.createLog(this, "sa_project", sa_projectid, "结束", "结束项目商机" + projectnum).getSQL());
  704. dbConnect.runSqlUpdate(sqlList);
  705. return getSucReturnObject().toString();
  706. }
  707. @API(title = "恢复:在已失败状态下,操作【恢复】功能,项目状态变更为:跟进中", apiversion = R.ID20221215164002.v1.class)
  708. @CACHEING_CLEAN(apiversions = {R.ID20221020143502.class})
  709. public String recoveryProject() throws YosException {
  710. Long sa_projectid = content.getLong("sa_projectid");
  711. String sql = "SELECT `status`,projectnum from sa_project WHERE sa_projectid = " + sa_projectid + " and siteid = '" + siteid + "'";
  712. Rows rows = dbConnect.runSqlQuery(sql);
  713. if (rows.isEmpty()) {
  714. return getErrReturnObject().setErrMsg("项目不存在").toString();
  715. }
  716. String projectnum = "";
  717. if (rows.isNotEmpty()) {
  718. if (!rows.get(0).getString("status").equals("已失败")) {
  719. return getErrReturnObject().setErrMsg("只有【已失败】项目才能恢复").toString();
  720. }
  721. projectnum = rows.get(0).getString("projectnum");
  722. }
  723. ArrayList<String> sqlList = new ArrayList<>();
  724. sql = "UPDATE sa_project SET status='跟进中' WHERE sa_projectid = " + sa_projectid + " and siteid = '" + siteid + "'";
  725. sqlList.add(sql);
  726. //操作记录
  727. sqlList.add(DataContrlLog.createLog(this, "sa_project", sa_projectid, "恢复", "恢复项目商机" + projectnum).getSQL());
  728. dbConnect.runSqlUpdate(sqlList);
  729. return getSucReturnObject().toString();
  730. }
  731. }