project.java 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. package restcontroller.webmanage.sale.salestarget;
  2. import beans.datacontrllog.DataContrlLog;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import common.Controller;
  6. import common.YosException;
  7. import common.annotation.API;
  8. import common.annotation.CACHEING;
  9. import common.annotation.CACHEING_CLEAN;
  10. import common.annotation.cm;
  11. import common.data.*;
  12. import org.apache.commons.lang.StringUtils;
  13. import org.apache.poi.xssf.usermodel.*;
  14. import restcontroller.R;
  15. import restcontroller.webmanage.saletool.orderclue.ExportExcel;
  16. import java.util.ArrayList;
  17. import java.util.HashMap;
  18. @API(title = "管理端-销售目标-项目目标")
  19. public class project extends Controller {
  20. /**
  21. * 构造函数
  22. *
  23. * @param content
  24. */
  25. public project(JSONObject content) throws YosException {
  26. super(content);
  27. }
  28. @API(title = "新建年度或添加人员", apiversion = R.ID20220903162902.v1.class)
  29. @CACHEING_CLEAN(cms = {@cm(clazz = project.class, method = {"queryList", "queryDetailList"})})
  30. public String insert() throws YosException {
  31. Long year = content.getLong("year");
  32. Long sa_salestargetbillid = content.getLong("sa_salestargetbillid");
  33. JSONArray salesArray = content.getJSONArray("sales");
  34. ArrayList<String> sqlList = new ArrayList<>();
  35. if (sa_salestargetbillid <= 0) {
  36. //查询创建年度是否存在
  37. if (dbConnect.runSqlQuery("SELECT 1 FROM sa_salestargetbill WHERE `year` = " + year + " AND targettype ='项目目标' AND siteid = '" + siteid + "'").isNotEmpty()) {
  38. return getErrReturnObject().setErrMsg(year + "年度项目目标已存在,无法创建").toString();
  39. }
  40. sa_salestargetbillid = createTableID("sa_salestargetbill");
  41. SQLFactory sqlFactory = new SQLFactory(this, "创建新年度");
  42. sqlFactory.addParameter("siteid", siteid);
  43. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  44. sqlFactory.addParameter("username", username);
  45. sqlFactory.addParameter("sys_enterpriseid", "null");
  46. sqlFactory.addParameter("userid", userid);
  47. sqlFactory.addParameter("year", year);
  48. sqlFactory.addParameter("targettype", "项目目标");
  49. sqlFactory.addParameter("tradefield", "");
  50. sqlList.add(sqlFactory.getSQL());
  51. }
  52. for (Object obj : salesArray) {
  53. JSONObject saleObj = (JSONObject) obj;
  54. SQLFactory saleFactory = new SQLFactory(this, "人员范围新增");
  55. saleFactory.addParameter("siteid", siteid);
  56. saleFactory.addParameter("sa_salestargethrid", createTableID("sa_salestargethr"));
  57. saleFactory.addParameter("hrid", saleObj.getString("hrid"));
  58. saleFactory.addParameter("position", saleObj.getString("position"));
  59. saleFactory.addParameter("areaname", saleObj.getString("areaname"));
  60. saleFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  61. saleFactory.addParameter("depname", saleObj.getString("depname"));
  62. saleFactory.addParameter("departmentid", saleObj.getString("departmentid"));
  63. saleFactory.addParameter("name", saleObj.getString("name"));
  64. sqlList.add(saleFactory.getSQL());
  65. }
  66. sqlList.add(DataContrlLog.createLog(this, "sa_salestargetbill", sa_salestargetbillid, "新建", "新建项目目标" + year + "年度项目目标").getSQL());
  67. dbConnect.runSqlUpdate(sqlList);
  68. return getSucReturnObject().toString();
  69. }
  70. @API(title = "删除", apiversion = R.ID20220903172302.v1.class)
  71. @CACHEING_CLEAN(cms = {@cm(clazz = project.class, method = {"queryList", "queryDetailList"})})
  72. public String deletePeople() throws YosException {
  73. Long sa_salestargetbillid = content.getLong("sa_salestargetbillid");
  74. JSONArray salesArray = content.getJSONArray("hrid");
  75. String sql = "SELECT 1 FROM sa_salestarget WHERE hrid in " + salesArray + " and sa_salestargetbillid = " + sa_salestargetbillid + " and targettype = '项目目标' and (target_l >0 or target_h >0)";
  76. sql = sql.replace("[", "(").replace("]", ")");
  77. if (dbConnect.runSqlQuery(sql).isNotEmpty()) {
  78. return getErrReturnObject().setErrMsg("存在已填写的数据,无法删除").toString();
  79. }
  80. ArrayList<String> sqlList = new ArrayList<>();
  81. //删除人员范围
  82. SQLFactory sqlFactory = new SQLFactory(this, "项目-删除人员范围");
  83. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  84. sqlFactory.addParameter("siteid", siteid);
  85. sqlFactory.addParameter_in("hrid", salesArray.toArray());
  86. sqlList.add(sqlFactory.getSQL());
  87. //删除人员目标
  88. SQLFactory sqlFactory2 = new SQLFactory(this, "项目-删除目标明细");
  89. sqlFactory2.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  90. sqlFactory2.addParameter("siteid", siteid);
  91. sqlFactory2.addParameter_in("hrid", salesArray.toArray());
  92. sqlList.add(sqlFactory2.getSQL());
  93. dbConnect.runSqlUpdate(sqlList);
  94. return getSucReturnObject().toString();
  95. }
  96. @API(title = "年度目标列表", apiversion = R.ID20220903170002.v1.class)
  97. @CACHEING
  98. public String queryList() throws YosException {
  99. /*
  100. 过滤条件设置
  101. */
  102. StringBuffer where = new StringBuffer(" 1=1 ");
  103. if (content.containsKey("where")) {
  104. JSONObject whereObject = content.getJSONObject("where");
  105. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  106. where.append(" and(");
  107. where.append("t1.year like'%").append(whereObject.getString("condition")).append("%' ");
  108. where.append("or t1.createby like'%").append(whereObject.getString("condition")).append("%' ");
  109. where.append(")");
  110. }
  111. if (whereObject.containsKey("status") && !"".equals(whereObject.getString("status"))) {
  112. where.append(" and(");
  113. where.append("t1.status like'%").append(whereObject.getString("status")).append("%' ");
  114. where.append(")");
  115. }
  116. }
  117. SQLFactory sqlFactory = new SQLFactory(this, "年度目标列表", pageSize, pageNumber, pageSorting);
  118. sqlFactory.addParameter("siteid", siteid);
  119. sqlFactory.addParameter_SQL("where", where);
  120. sqlFactory.addParameter("targettype", "项目目标");
  121. Rows rows = dbConnect.runSqlQuery(sqlFactory);
  122. return getSucReturnObject().setData(rows).toString();
  123. }
  124. @API(title = "目标详情", apiversion = R.ID20220909155202.v1.class)
  125. public String queryDetail() throws YosException {
  126. Long sa_salestargetbillid = content.getLong("sa_salestargetbillid");
  127. SQLFactory sqlFactory = new SQLFactory(this, "项目-目标详情");
  128. sqlFactory.addParameter("siteid", siteid);
  129. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  130. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  131. return getSucReturnObject().setData(rows.isNotEmpty() ? rows.get(0) : new Rows()).toString();
  132. }
  133. @API(title = "目标详情列表", apiversion = R.ID20220909152802.v1.class)
  134. @CACHEING
  135. public String queryDetailList() throws YosException {
  136. Long sa_salestargetbillid = content.getLong("sa_salestargetbillid");
  137. /*
  138. 过滤条件设置
  139. */
  140. StringBuffer where = new StringBuffer(" 1=1 ");
  141. if (content.containsKey("where")) {
  142. JSONObject whereObject = content.getJSONObject("where");
  143. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  144. where.append(" and(");
  145. where.append("t.name like'%").append(whereObject.getString("condition")).append("%' ");
  146. where.append("or t.depfullname like'%").append(whereObject.getString("condition")).append("%' ");
  147. where.append("or t.depname like'%").append(whereObject.getString("condition")).append("%' ");
  148. where.append("or t.position like'%").append(whereObject.getString("condition")).append("%' ");
  149. where.append(")");
  150. }
  151. }
  152. SQLFactory sqlFactory = new SQLFactory(this, "项目-目标详情列表");
  153. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  154. sqlFactory.addParameter_SQL("where", where);
  155. sqlFactory.addParameter("siteid", siteid);
  156. Rows rows = dbConnect.runSqlQuery(sqlFactory);
  157. return getSucReturnObject().setData(rows).toString();
  158. }
  159. @API(title = "项目目标导入模板", apiversion = R.ID20220914154902.v1.class)
  160. public String downloadExcel() throws YosException {
  161. ExcelFactory excelFactory = new ExcelFactory("项目目标导入模板");
  162. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
  163. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  164. projectexcel.setBatchDetailSheetColumn1(sheet);// 设置工作薄列宽
  165. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  166. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  167. XSSFCellStyle titleCellStyle3 = ExportExcel.createBodyCellStyle(xssfFWorkbook);
  168. projectexcel.batchDetail(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook);// 写入标题
  169. Rows aa = uploadExcelToObs(excelFactory);
  170. String url = "";
  171. if (!aa.isEmpty()) {
  172. url = aa.get(0).getString("url");
  173. }
  174. return getSucReturnObject().setData(url).toString();
  175. }
  176. @API(title = "项目目标导入", apiversion = R.ID20220914163602.v1.class)
  177. @CACHEING_CLEAN(apiversions = {R.ID20220909152802.class})
  178. public String personnelTargetImport() throws YosException {
  179. Long sa_salestargetbillid = content.getLong("sa_salestargetbillid");
  180. Long year = content.getLong("year");
  181. ExcelFactory e;
  182. try {
  183. if (content.getLong("attachmentid") > 0) {
  184. e = getPostExcelFactory(content.getLong("attachmentid"));
  185. } else {
  186. e = getPostExcelFactory();
  187. }
  188. ArrayList<String> keys = new ArrayList<>();
  189. ArrayList<String> sqllist = new ArrayList<>();
  190. keys.add("name");
  191. keys.add("phonenumber");
  192. keys.add("projectname");
  193. keys.add("target_l");
  194. keys.add("target_h");
  195. keys.add("month");
  196. Rows rows = e.getSheetRows(0, keys, 2);
  197. ArrayList<String> phoneNumberList = new ArrayList<>();
  198. ArrayList<String> projectnameList = new ArrayList<>();
  199. for (Row row : rows) {
  200. phoneNumberList.add(row.getString("phonenumber"));
  201. projectnameList.add(row.getString("projectname"));
  202. }
  203. SQLFactory projectFactory = new SQLFactory(this, "项目-查询项目信息");
  204. projectFactory.addParameter("siteid", siteid);
  205. projectFactory.addParameter_in("projectname", projectnameList);
  206. String projectSql = projectFactory.getSQL();
  207. RowsMap projectRowsMap = dbConnect.runSqlQuery(projectSql).toRowsMap("projectname");
  208. for (Row row : rows) {
  209. if (projectRowsMap.get(row.getString("projectname")).isNotEmpty()) {
  210. row.put("sa_projectid", projectRowsMap.get(row.getString("projectname")).get(0).getLong("sa_projectid"));
  211. } else {
  212. row.put("sa_projectid", 0);
  213. }
  214. }
  215. //查询可导入的用户信息
  216. SQLFactory sqlFactory = new SQLFactory(this, "项目-查询可导入用户信息");
  217. sqlFactory.addParameter("siteid", siteid);
  218. sqlFactory.addParameter_in("phonenumber", phoneNumberList);
  219. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  220. String sql = sqlFactory.getSQL();
  221. RowsMap userRowsMap = dbConnect.runSqlQuery(sql).toRowsMap("phonenumber");
  222. //查询项目情况
  223. boolean iserr = false;
  224. Rows rowserr = new Rows();
  225. Rows rowssuc = new Rows();
  226. // 手机号码的格式:第一位只能为1,第二位可以是3,4,5,7,8,第三位到第十一位可以为0-9中任意一个数字
  227. String regex = "^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])|(166)|(17[3,5,6,7,8])|(18[0-9])|(19[1,8,9]))\\d{8}$";
  228. for (Row row : rows) {
  229. if (StringUtils.isEmpty(row.getString("name"))
  230. || StringUtils.isEmpty(row.getString("phonenumber"))) {
  231. iserr = true;
  232. row.put("msg", "错误信息:必填项不能为空");
  233. rowserr.add(row);
  234. } else {
  235. if (!row.getString("phonenumber").matches(regex)) {
  236. iserr = true;
  237. row.put("msg", "错误信息:手机号格式不正确");
  238. rowserr.add(row);
  239. } else {
  240. Rows userRows = userRowsMap.get(row.getString("phonenumber"));
  241. if (userRows.isNotEmpty()) {
  242. row.putAll(userRows.get(0));
  243. rowssuc.add(row);
  244. } else {
  245. iserr = true;
  246. row.put("msg", "错误信息:数据已导入或人员手机号不在数据库中");
  247. rowserr.add(row);
  248. }
  249. }
  250. }
  251. }
  252. long[] ids = createTableID("sa_salestarget", rowssuc.size() * 12);
  253. int index = 1;
  254. if (!rowssuc.isEmpty()) {
  255. for (Row row : rowssuc) {
  256. SQLFactory saleFactory = new SQLFactory(this, "人员范围新增");
  257. saleFactory.addParameter("siteid", siteid);
  258. saleFactory.addParameter("sa_salestargethrid", createTableID("sa_salestargethr"));
  259. saleFactory.addParameter("hrid", row.getString("hrid"));
  260. saleFactory.addParameter("position", row.getString("position"));
  261. saleFactory.addParameter("areaname", row.getString("areaname"));
  262. saleFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  263. saleFactory.addParameter("depname", row.getString("depname"));
  264. saleFactory.addParameter("departmentid", row.getString("departmentid"));
  265. saleFactory.addParameter("name", row.getString("name"));
  266. sqllist.add(saleFactory.getSQL());
  267. for (int i = 1; i < 13; i++) {
  268. SQLFactory targetFactory = new SQLFactory(this, "项目-目标明细新增");
  269. targetFactory.addParameter("siteid", siteid);
  270. targetFactory.addParameter("sa_salestargetid", ids[index - 1]);
  271. targetFactory.addParameter("type", "月");
  272. targetFactory.addParameter("point", i);
  273. targetFactory.addParameter("targettype", "项目目标");
  274. targetFactory.addParameter("hrid", row.getString("hrid"));
  275. targetFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  276. targetFactory.addParameter("year", year);
  277. targetFactory.addParameter("sa_projectid", row.getString("sa_projectid"));
  278. targetFactory.addParameter("createby", username);
  279. targetFactory.addParameter("target_l", 0);
  280. targetFactory.addParameter("target_h", 0);
  281. sqllist.add(targetFactory.getSQL());
  282. index++;
  283. }
  284. String target_l = row.getString("target_l");
  285. String target_h = row.getString("target_h");
  286. String sa_projectid = row.getString("sa_projectid");
  287. String month = row.getString("month");
  288. String sqlUpdate = "UPDATE sa_salestarget SET target_l=" + target_l + ",target_h=" + target_h + " WHERE hrid = " + row.getString("hrid") + " AND point =" + month + " AND `year` = " + year + " AND sa_projectid = " + sa_projectid + " AND siteid ='" + siteid + "' ";
  289. sqllist.add(sqlUpdate);
  290. }
  291. }
  292. if (sqllist != null && !sqllist.isEmpty()) {
  293. sqllist.add(DataContrlLog.createLog(this, "sa_salestargetbill", sa_salestargetbillid, "导入", "导入项目目标").getSQL());
  294. dbConnect.runSqlUpdate(sqllist);
  295. }
  296. if (iserr) {
  297. ExcelFactory excelFactory = new ExcelFactory("人员目标导入错误信息");
  298. ArrayList<String> colNameList = new ArrayList<String>();
  299. HashMap<String, Class> keytypemap = new HashMap<String, Class>();
  300. colNameList.add("name");
  301. colNameList.add("phonenumber");
  302. colNameList.add("projectname");
  303. colNameList.add("target_l");
  304. colNameList.add("target_h");
  305. colNameList.add("month");
  306. colNameList.add("msg");
  307. keytypemap.put("name", String.class);
  308. keytypemap.put("phonenumber", String.class);
  309. keytypemap.put("projectname", String.class);
  310. keytypemap.put("target_l", String.class);
  311. keytypemap.put("target_h", String.class);
  312. keytypemap.put("month", String.class);
  313. keytypemap.put("msg", String.class);
  314. rowserr.setFieldList(colNameList);
  315. rowserr.setFieldTypeMap(keytypemap);
  316. addSheet(excelFactory, "Sheet1", rowserr);
  317. Rows aa = uploadExcelToObs(excelFactory);
  318. String url = "";
  319. if (!aa.isEmpty()) {
  320. url = aa.get(0).getString("url");
  321. }
  322. return getSucReturnObject().setData(url).toString();
  323. }
  324. } catch (Exception e1) {
  325. // TODO Auto-generated catch block
  326. e1.printStackTrace();
  327. return getErrReturnObject().setErrMsg(e1.getMessage()).toString();
  328. }
  329. return getSucReturnObject().toString();
  330. }
  331. public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows) {
  332. ArrayList<String> keylist = datarows.getFieldList();
  333. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
  334. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  335. XSSFCellStyle xssfCellStyle1 = xssfFWorkbook.createCellStyle();
  336. XSSFFont font = xssfFWorkbook.createFont();
  337. font.setColor((short) 0xa);
  338. font.setFontHeightInPoints((short) 12);
  339. font.setBold(true);
  340. xssfCellStyle1.setFont(font);
  341. projectexcel.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
  342. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  343. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  344. projectexcel.batchDetailErr(sheet, titleCellStyle1, titleCellStyle2, xssfFWorkbook);// 写入标题
  345. for (int n = 0; n < datarows.size(); n++) {
  346. Row row = datarows.get(n);
  347. XSSFRow datarow = sheet.createRow(n + 2);
  348. for (int i1 = 0; i1 < keylist.size(); i1++) {
  349. Class fieldclazztype = datarows.getFieldMeta(keylist.get(i1)).getFieldtype();
  350. if (fieldclazztype == Integer.class) {
  351. datarow.createCell(i1).setCellValue(row.getInteger(keylist.get(i1)));
  352. } else if (fieldclazztype == Long.class) {
  353. datarow.createCell(i1).setCellValue(row.getLong(keylist.get(i1)));
  354. } else if (fieldclazztype == Float.class) {
  355. datarow.createCell(i1).setCellValue(row.getFloat(keylist.get(i1)));
  356. } else if (fieldclazztype == Double.class) {
  357. datarow.createCell(i1).setCellValue(row.getDouble(keylist.get(i1)));
  358. } else {
  359. datarow.createCell(i1).setCellValue(row.getString(keylist.get(i1)));
  360. }
  361. if (i1 == 6) {
  362. datarow.getCell(i1).setCellStyle(xssfCellStyle1);
  363. }
  364. }
  365. }
  366. return sheet;
  367. }
  368. }