personnelstatistics.java 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950
  1. package restcontroller.webmanage.sale.salestarget;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import common.Controller;
  5. import common.YosException;
  6. import common.annotation.API;
  7. import common.annotation.CACHEING;
  8. import common.data.*;
  9. import org.apache.commons.lang.StringUtils;
  10. import org.apache.poi.xssf.usermodel.*;
  11. import restcontroller.R;
  12. import restcontroller.webmanage.saletool.orderclue.ExportExcel;
  13. import java.math.BigDecimal;
  14. import java.util.ArrayList;
  15. import java.util.Calendar;
  16. @API(title = "管理端-销售目标-人员目标统计")
  17. public class personnelstatistics extends Controller {
  18. /**
  19. * 构造函数
  20. *
  21. * @param content
  22. */
  23. public personnelstatistics(JSONObject content) throws YosException {
  24. super(content);
  25. }
  26. @API(title = "人员目标导出", apiversion = R.ID20220916095402.v1.class)
  27. public String export() throws YosException {
  28. JSONArray array = content.getJSONArray("row");
  29. ExcelFactory excelFactory = new ExcelFactory("人员目标导出模板");
  30. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet("Sheet1");
  31. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  32. personnelexcel.setBatchDetailSheetColumn3(sheet);// 设置工作薄列宽
  33. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  34. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  35. XSSFCellStyle titleCellStyle3 = ExportExcel.createBodyCellStyle(xssfFWorkbook);
  36. personnelexcel.batchDetailExport(sheet, titleCellStyle1, titleCellStyle2, titleCellStyle3, xssfFWorkbook, array);// 写入标题
  37. Rows aa = uploadExcelToObs(excelFactory);
  38. String url = "";
  39. if (!aa.isEmpty()) {
  40. url = aa.get(0).getString("url");
  41. }
  42. return getSucReturnObject().setData(url).toString();
  43. }
  44. public XSSFSheet addSheet(ExcelFactory excelFactory, String sheetname, Rows datarows) {
  45. ArrayList<String> keylist = datarows.getFieldList();
  46. XSSFSheet sheet = excelFactory.getXssfWorkbook().createSheet(sheetname);
  47. XSSFWorkbook xssfFWorkbook = excelFactory.getXssfWorkbook();
  48. XSSFCellStyle xssfCellStyle1 = xssfFWorkbook.createCellStyle();
  49. XSSFFont font = xssfFWorkbook.createFont();
  50. font.setColor((short) 0xa);
  51. font.setFontHeightInPoints((short) 12);
  52. font.setBold(true);
  53. xssfCellStyle1.setFont(font);
  54. personnelexcel.setBatchDetailSheetColumn2(sheet);// 设置工作薄列宽
  55. XSSFCellStyle titleCellStyle1 = ExportExcel.createTitleCellStyle1(xssfFWorkbook);
  56. XSSFCellStyle titleCellStyle2 = ExportExcel.createTitleCellStyle2(xssfFWorkbook);
  57. personnelexcel.batchDetailErr(sheet, titleCellStyle1, titleCellStyle2, xssfFWorkbook);// 写入标题
  58. for (int n = 0; n < datarows.size(); n++) {
  59. Row row = datarows.get(n);
  60. XSSFRow datarow = sheet.createRow(n + 2);
  61. for (int i1 = 0; i1 < keylist.size(); i1++) {
  62. Class fieldclazztype = datarows.getFieldMeta( keylist.get(i1)).getFieldtype();
  63. if (fieldclazztype == Integer.class) {
  64. datarow.createCell(i1).setCellValue(row.getInteger(keylist.get(i1)).intValue());
  65. } else if (fieldclazztype == Long.class) {
  66. datarow.createCell(i1).setCellValue(row.getLong(keylist.get(i1)));
  67. } else if (fieldclazztype == Float.class) {
  68. datarow.createCell(i1).setCellValue(row.getFloat(keylist.get(i1)));
  69. } else if (fieldclazztype == Double.class) {
  70. datarow.createCell(i1).setCellValue(row.getDouble(keylist.get(i1)));
  71. } else {
  72. datarow.createCell(i1).setCellValue(row.getString(keylist.get(i1)));
  73. }
  74. if (i1 == 36) {
  75. datarow.getCell(i1).setCellStyle(xssfCellStyle1);
  76. }
  77. }
  78. }
  79. return sheet;
  80. }
  81. // @API(title = "获取区域经理的营销区域", apiversion = R.ID20231018093803.v1.class)
  82. // public String getcurrentusersalearea() throws YosException {
  83. //
  84. // SQLFactory sqlFactory = new SQLFactory(this, "业务员列表查询");
  85. // sqlFactory.addParameter("siteid", siteid);
  86. // sqlFactory.addParameter("hrid", hrid);
  87. // Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  88. //
  89. // SQLFactory areasqlFactory = new SQLFactory(this, "下级区域获取");
  90. // areasqlFactory.addParameter("siteid", siteid);
  91. // areasqlFactory.addParameter_in("sa_saleareaid", rows.toArrayList("sa_saleareaid",new ArrayList<>()));
  92. // Rows arearows = dbConnect.runSqlQuery(areasqlFactory.getSQL());
  93. // return getSucReturnObject().setData(arearows).toString();
  94. // }
  95. @API(title = "查询当前账户负责的区域", apiversion = R.ID20231108160203.v1.class)
  96. @CACHEING
  97. public String queryList_currentArea() throws YosException {
  98. SQLFactory hrsqlFactory = new SQLFactory(this, "业务员列表查询");
  99. hrsqlFactory.addParameter("siteid", siteid);
  100. hrsqlFactory.addParameter("hrid", hrid);
  101. Rows hrrows = dbConnect.runSqlQuery(hrsqlFactory.getSQL());
  102. return getSucReturnObject().setData(hrrows).toString();
  103. }
  104. @API(title = "人员目标统计(区域经理)", apiversion = R.ID20231018103203.v1.class)
  105. @CACHEING
  106. public String queryList_areamanager() throws YosException {
  107. //年份
  108. Calendar cal = Calendar.getInstance();
  109. int year = cal.get(Calendar.YEAR);
  110. long sa_saleareaid=content.getLongValue("sa_saleareaid");
  111. Rows billRows = dbConnect.runSqlQuery("SELECT sa_salestargetbillid,assessmentindicators,statisticaldimension,sa_accountclassids FROM sa_salestargetbill WHERE year="+year+" AND siteid ='" + siteid + "' and targettype = '人员目标'");
  112. SQLFactory hrsqlFactory = new SQLFactory(this, "业务员列表查询");
  113. hrsqlFactory.addParameter("siteid", siteid);
  114. hrsqlFactory.addParameter("hrid", hrid);
  115. Rows hrrows = dbConnect.runSqlQuery(hrsqlFactory.getSQL());
  116. if(sa_saleareaid==0){
  117. if(hrrows.isNotEmpty()){
  118. sa_saleareaid=hrrows.get(0).getLong("sa_saleareaid");
  119. }
  120. }
  121. //考核指标类型
  122. long sa_salestargetbillid = 0;
  123. String assessmentindicators="";
  124. //统计维度
  125. String statisticaldimension="";
  126. //账户
  127. String sa_accountclassids="";
  128. if (billRows.isNotEmpty()) {
  129. sa_salestargetbillid=billRows.get(0).getLong("sa_salestargetbillid");
  130. assessmentindicators=billRows.get(0).getString("assessmentindicators");
  131. statisticaldimension=billRows.get(0).getString("statisticaldimension");
  132. sa_accountclassids=billRows.get(0).getString("sa_accountclassids");
  133. }
  134. /*
  135. 过滤条件设置
  136. */
  137. StringBuffer where = new StringBuffer(" 1=1 ");
  138. SQLFactory sqlFactory = new SQLFactory(this, "人员-目标详情列表");
  139. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  140. sqlFactory.addParameter_SQL("where", where);
  141. sqlFactory.addParameter("siteid", siteid);
  142. String sql = sqlFactory.getSQL();
  143. Rows rows = dbConnect.runSqlQuery(sql);
  144. Rows saleareas = dbConnect.runSqlQuery("select * from sa_salearea where parentid=0 and siteid='"+siteid+"'");
  145. Long sa_saleareaidtop=0l;
  146. if(!saleareas.isEmpty() && saleareas.size()==1){
  147. sa_saleareaidtop=saleareas.get(0).getLong("sa_saleareaid");
  148. for (Row row :rows) {
  149. if(row.getLong("parentid")==0){
  150. row.put("y1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1l"));
  151. row.put("y1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1h"));
  152. row.put("s1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1l"));
  153. row.put("s1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1h"));
  154. row.put("s2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2l"));
  155. row.put("s2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2h"));
  156. row.put("s3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3l"));
  157. row.put("s3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3h"));
  158. row.put("s4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4l"));
  159. row.put("s4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4h"));
  160. row.put("m1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1l"));
  161. row.put("m1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1h"));
  162. row.put("m2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2l"));
  163. row.put("m2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2h"));
  164. row.put("m3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3l"));
  165. row.put("m3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3h"));
  166. row.put("m4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4l"));
  167. row.put("m4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4h"));
  168. row.put("m5l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5l"));
  169. row.put("m5h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5h"));
  170. row.put("m6l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6l"));
  171. row.put("m6h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6h"));
  172. row.put("m7l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7l"));
  173. row.put("m7h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7h"));
  174. row.put("m8l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8l"));
  175. row.put("m8h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8h"));
  176. row.put("m9l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9l"));
  177. row.put("m9h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9h"));
  178. row.put("m10l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10l"));
  179. row.put("m10h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10h"));
  180. row.put("m11l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11l"));
  181. row.put("m11h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11h"));
  182. row.put("m12l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12l"));
  183. row.put("m12h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12h"));
  184. }
  185. }
  186. }
  187. Rows actualRows = new Rows();
  188. //开票
  189. if (assessmentindicators .equals("开票")) {
  190. String where1 =" 1=1 ";
  191. sqlFactory = new SQLFactory(this, "人员目标统计-开票");
  192. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  193. sqlFactory.addParameter_SQL("where", where);
  194. if(statisticaldimension.equals("订单审核")){
  195. where1=where1+" and t2.status='审核'";
  196. }else{
  197. where1=where1+" and t2.status='提交'";
  198. }
  199. if(StringUtils.isNotBlank(sa_accountclassids)){
  200. if(isJSONArray(sa_accountclassids)){
  201. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  202. if(!jsonArrayResult.isEmpty()){
  203. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  204. where1 = where1.replace("[", "(").replace("]", ")");
  205. }
  206. }
  207. }
  208. sqlFactory.addParameter_SQL("where1",where1);
  209. sqlFactory.addParameter("siteid", siteid);
  210. sqlFactory.addParameter("year", year);
  211. actualRows = dbConnect.runSqlQuery(sqlFactory);
  212. }
  213. //订单
  214. if (assessmentindicators .equals("订单")) {
  215. String where1 =" 1=1 ";
  216. sqlFactory = new SQLFactory(this, "人员目标统计-订单");
  217. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  218. sqlFactory.addParameter_SQL("where", where);
  219. if(statisticaldimension.equals("订单审核")){
  220. where1=where1+" and t2.status='审核'";
  221. }else{
  222. where1=where1+" and t2.status='提交'";
  223. }
  224. if(StringUtils.isNotBlank(sa_accountclassids)){
  225. if(isJSONArray(sa_accountclassids)){
  226. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  227. if(!jsonArrayResult.isEmpty()){
  228. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  229. where1 = where1.replace("[", "(").replace("]", ")");
  230. }
  231. }
  232. }
  233. sqlFactory.addParameter_SQL("where1",where1);
  234. sqlFactory.addParameter("siteid", siteid);
  235. sqlFactory.addParameter("year", year);
  236. actualRows = dbConnect.runSqlQuery(sqlFactory);
  237. }
  238. //出货
  239. if (assessmentindicators .equals("出货")) {
  240. String where1 =" 1=1 ";
  241. sqlFactory = new SQLFactory(this, "人员目标统计-出货");
  242. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  243. sqlFactory.addParameter_SQL("where", where);
  244. if(StringUtils.isNotBlank(sa_accountclassids)){
  245. if(isJSONArray(sa_accountclassids)){
  246. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  247. if(!jsonArrayResult.isEmpty()){
  248. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  249. where1 = where1.replace("[", "(").replace("]", ")");
  250. }
  251. }
  252. }
  253. sqlFactory.addParameter_SQL("where1",where1);
  254. sqlFactory.addParameter("siteid", siteid);
  255. sqlFactory.addParameter("year", year);
  256. actualRows = dbConnect.runSqlQuery(sqlFactory);
  257. }
  258. //收款
  259. if (assessmentindicators .equals("收款")) {
  260. String where1 =" 1=1 ";
  261. sqlFactory = new SQLFactory(this, "人员目标统计-收款");
  262. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  263. sqlFactory.addParameter_SQL("where", where);
  264. if(StringUtils.isNotBlank(statisticaldimension)){
  265. if(isJSONObject(statisticaldimension)){
  266. JSONObject jsonObjectResult = JSONObject.parseObject(statisticaldimension);
  267. if(!jsonObjectResult.isEmpty()){
  268. where1= where1+ " and (t1.class in"+ jsonObjectResult.get("type")+" or t1.subclass in"+ jsonObjectResult.get("mx")+")";
  269. where1 = where1.replace("[", "(").replace("]", ")");
  270. }
  271. }
  272. }
  273. if(StringUtils.isNotBlank(sa_accountclassids)){
  274. if(isJSONArray(sa_accountclassids)){
  275. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  276. if(!jsonArrayResult.isEmpty()){
  277. where1=where1+ " and t1.sa_accountclassid in"+jsonArrayResult;
  278. where1 = where1.replace("[", "(").replace("]", ")");
  279. }
  280. }
  281. }
  282. sqlFactory.addParameter_SQL("where1",where1);
  283. sqlFactory.addParameter("siteid", siteid);
  284. sqlFactory.addParameter("year", year);
  285. actualRows = dbConnect.runSqlQuery(sqlFactory);
  286. }
  287. if(!saleareas.isEmpty() && saleareas.size()==1){
  288. for (Row row :actualRows) {
  289. if(row.getLong("parentid")==0){
  290. row.put("y1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1a"));
  291. row.put("s1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1a"));
  292. row.put("s2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2a"));
  293. row.put("s3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3a"));
  294. row.put("s4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4a"));
  295. row.put("m1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1a"));
  296. row.put("m2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2a"));
  297. row.put("m3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3a"));
  298. row.put("m4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4a"));
  299. row.put("m5a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5a"));
  300. row.put("m6a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6a"));
  301. row.put("m7a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7a"));
  302. row.put("m8a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8a"));
  303. row.put("m9a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9a"));
  304. row.put("m10a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10a"));
  305. row.put("m11a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11a"));
  306. row.put("m12a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12a"));
  307. }
  308. }
  309. }
  310. Rows rowsResult =new Rows();
  311. for (Row row : rows) {
  312. rowsResult.add(row);
  313. }
  314. for (Row row : rowsResult) {
  315. //初始化
  316. row = addActualRow(row);
  317. Long sa_saleareaid1 = row.getLong("sa_saleareaid");
  318. Row actualRow = new Row();
  319. for (Row tempActualRow : actualRows) {
  320. if (tempActualRow.getLong("sa_saleareaid") == sa_saleareaid1) {
  321. actualRow.putAll(tempActualRow);
  322. }
  323. }
  324. row.putAll(actualRow);
  325. row.putAll(calculate(row, actualRow));
  326. }
  327. Row rowResult = new Row();
  328. rowResult.put("y1l",rowsResult.sum("y1l"));
  329. rowResult.put("y1h",rowsResult.sum("y1h"));
  330. for (int i = 1; i < 5; i++) {
  331. rowResult.put("s" + i + "l",rowsResult.sum("s" + i + "l"));
  332. rowResult.put("s" + i + "h",rowsResult.sum("s" + i + "h"));
  333. }
  334. for (int i = 1; i < 13; i++) {
  335. rowResult.put("m" + i + "l",rowsResult.sum("m" + i + "l"));
  336. rowResult.put("m" + i + "h",rowsResult.sum("m" + i + "h"));
  337. }
  338. rowsResult = new Rows();
  339. rowsResult.add(rowResult);
  340. return getSucReturnObject().setData(rowsResult).toString();
  341. }
  342. @API(title = "人员目标统计列表(区域经理)", apiversion = R.ID20231018103303.v1.class)
  343. @CACHEING
  344. public String queryList_areamanagerList() throws YosException {
  345. //年份
  346. Calendar cal = Calendar.getInstance();
  347. int year = cal.get(Calendar.YEAR);
  348. Rows billRows = dbConnect.runSqlQuery("SELECT sa_salestargetbillid,assessmentindicators,statisticaldimension,sa_accountclassids FROM sa_salestargetbill WHERE year="+year+" AND siteid ='" + siteid + "' and targettype = '人员目标'");
  349. SQLFactory hrsqlFactory = new SQLFactory(this, "业务员列表查询");
  350. hrsqlFactory.addParameter("siteid", siteid);
  351. hrsqlFactory.addParameter("hrid", hrid);
  352. Rows hrrows = dbConnect.runSqlQuery(hrsqlFactory.getSQL());
  353. SQLFactory areasqlFactory = new SQLFactory(this, "下级区域获取");
  354. areasqlFactory.addParameter("siteid", siteid);
  355. areasqlFactory.addParameter_in("sa_saleareaid", hrrows.toArrayList("sa_saleareaid",new ArrayList<>()));
  356. Rows arearows = dbConnect.runSqlQuery(areasqlFactory.getSQL());
  357. ArrayList<Long> areaList = arearows.toArrayList("sa_saleareaid",new ArrayList<Long>());
  358. areaList.add(0l);
  359. //考核指标类型
  360. long sa_salestargetbillid = 0;
  361. String assessmentindicators="";
  362. //统计维度
  363. String statisticaldimension="";
  364. //账户
  365. String sa_accountclassids="";
  366. if (billRows.isNotEmpty()) {
  367. sa_salestargetbillid=billRows.get(0).getLong("sa_salestargetbillid");
  368. assessmentindicators=billRows.get(0).getString("assessmentindicators");
  369. statisticaldimension=billRows.get(0).getString("statisticaldimension");
  370. sa_accountclassids=billRows.get(0).getString("sa_accountclassids");
  371. }
  372. /*
  373. 过滤条件设置
  374. */
  375. StringBuffer where = new StringBuffer(" 1=1 and t.sa_saleareaid in "+areaList.toString().replace("[", "(").replace("]", ")"));
  376. SQLFactory sqlFactory = new SQLFactory(this, "人员-目标详情列表");
  377. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  378. sqlFactory.addParameter_SQL("where", where);
  379. sqlFactory.addParameter("siteid", siteid);
  380. String sql = sqlFactory.getSQL();
  381. Rows rows = dbConnect.runSqlQuery(sql);
  382. Rows saleareas = dbConnect.runSqlQuery("select * from sa_salearea where parentid=0 and siteid='"+siteid+"'");
  383. Long sa_saleareaidtop=0l;
  384. if(!saleareas.isEmpty() && saleareas.size()==1){
  385. sa_saleareaidtop=saleareas.get(0).getLong("sa_saleareaid");
  386. for (Row row :rows) {
  387. if(row.getLong("parentid")==0){
  388. row.put("y1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1l"));
  389. row.put("y1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1h"));
  390. row.put("s1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1l"));
  391. row.put("s1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1h"));
  392. row.put("s2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2l"));
  393. row.put("s2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2h"));
  394. row.put("s3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3l"));
  395. row.put("s3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3h"));
  396. row.put("s4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4l"));
  397. row.put("s4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4h"));
  398. row.put("m1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1l"));
  399. row.put("m1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1h"));
  400. row.put("m2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2l"));
  401. row.put("m2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2h"));
  402. row.put("m3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3l"));
  403. row.put("m3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3h"));
  404. row.put("m4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4l"));
  405. row.put("m4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4h"));
  406. row.put("m5l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5l"));
  407. row.put("m5h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5h"));
  408. row.put("m6l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6l"));
  409. row.put("m6h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6h"));
  410. row.put("m7l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7l"));
  411. row.put("m7h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7h"));
  412. row.put("m8l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8l"));
  413. row.put("m8h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8h"));
  414. row.put("m9l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9l"));
  415. row.put("m9h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9h"));
  416. row.put("m10l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10l"));
  417. row.put("m10h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10h"));
  418. row.put("m11l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11l"));
  419. row.put("m11h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11h"));
  420. row.put("m12l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12l"));
  421. row.put("m12h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12h"));
  422. }
  423. }
  424. }
  425. Rows actualRows = new Rows();
  426. //开票
  427. if (assessmentindicators .equals("开票")) {
  428. String where1 =" 1=1 ";
  429. sqlFactory = new SQLFactory(this, "人员目标统计-开票");
  430. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  431. sqlFactory.addParameter_SQL("where", where);
  432. if(statisticaldimension.equals("订单审核")){
  433. where1=where1+" and t2.status='审核'";
  434. }else{
  435. where1=where1+" and t2.status='提交'";
  436. }
  437. if(StringUtils.isNotBlank(sa_accountclassids)){
  438. if(isJSONArray(sa_accountclassids)){
  439. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  440. if(!jsonArrayResult.isEmpty()){
  441. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  442. where1 = where1.replace("[", "(").replace("]", ")");
  443. }
  444. }
  445. }
  446. sqlFactory.addParameter_SQL("where1",where1);
  447. sqlFactory.addParameter("siteid", siteid);
  448. sqlFactory.addParameter("year", year);
  449. actualRows = dbConnect.runSqlQuery(sqlFactory);
  450. }
  451. //订单
  452. if (assessmentindicators .equals("订单")) {
  453. String where1 =" 1=1 ";
  454. sqlFactory = new SQLFactory(this, "人员目标统计-订单");
  455. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  456. sqlFactory.addParameter_SQL("where", where);
  457. if(statisticaldimension.equals("订单审核")){
  458. where1=where1+" and t2.status='审核'";
  459. }else{
  460. where1=where1+" and t2.status='提交'";
  461. }
  462. if(StringUtils.isNotBlank(sa_accountclassids)){
  463. if(isJSONArray(sa_accountclassids)){
  464. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  465. if(!jsonArrayResult.isEmpty()){
  466. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  467. where1 = where1.replace("[", "(").replace("]", ")");
  468. }
  469. }
  470. }
  471. sqlFactory.addParameter_SQL("where1",where1);
  472. sqlFactory.addParameter("siteid", siteid);
  473. sqlFactory.addParameter("year", year);
  474. actualRows = dbConnect.runSqlQuery(sqlFactory);
  475. }
  476. //出货
  477. if (assessmentindicators .equals("出货")) {
  478. String where1 =" 1=1 ";
  479. sqlFactory = new SQLFactory(this, "人员目标统计-出货");
  480. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  481. sqlFactory.addParameter_SQL("where", where);
  482. if(StringUtils.isNotBlank(sa_accountclassids)){
  483. if(isJSONArray(sa_accountclassids)){
  484. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  485. if(!jsonArrayResult.isEmpty()){
  486. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  487. where1 = where1.replace("[", "(").replace("]", ")");
  488. }
  489. }
  490. }
  491. sqlFactory.addParameter_SQL("where1",where1);
  492. sqlFactory.addParameter("siteid", siteid);
  493. sqlFactory.addParameter("year", year);
  494. actualRows = dbConnect.runSqlQuery(sqlFactory);
  495. }
  496. //收款
  497. if (assessmentindicators .equals("收款")) {
  498. String where1 =" 1=1 ";
  499. sqlFactory = new SQLFactory(this, "人员目标统计-收款");
  500. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  501. sqlFactory.addParameter_SQL("where", where);
  502. if(StringUtils.isNotBlank(statisticaldimension)){
  503. if(isJSONObject(statisticaldimension)){
  504. JSONObject jsonObjectResult = JSONObject.parseObject(statisticaldimension);
  505. if(!jsonObjectResult.isEmpty()){
  506. where1= where1+ " and (t1.class in"+ jsonObjectResult.get("type")+" or t1.subclass in"+ jsonObjectResult.get("mx")+")";
  507. where1 = where1.replace("[", "(").replace("]", ")");
  508. }
  509. }
  510. }
  511. if(StringUtils.isNotBlank(sa_accountclassids)){
  512. if(isJSONArray(sa_accountclassids)){
  513. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  514. if(!jsonArrayResult.isEmpty()){
  515. where1=where1+ " and t1.sa_accountclassid in"+jsonArrayResult;
  516. where1 = where1.replace("[", "(").replace("]", ")");
  517. }
  518. }
  519. }
  520. sqlFactory.addParameter_SQL("where1",where1);
  521. sqlFactory.addParameter("siteid", siteid);
  522. sqlFactory.addParameter("year", year);
  523. actualRows = dbConnect.runSqlQuery(sqlFactory);
  524. }
  525. if(!saleareas.isEmpty() && saleareas.size()==1){
  526. for (Row row :actualRows) {
  527. if(row.getLong("parentid")==0){
  528. row.put("y1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1a"));
  529. row.put("s1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1a"));
  530. row.put("s2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2a"));
  531. row.put("s3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3a"));
  532. row.put("s4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4a"));
  533. row.put("m1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1a"));
  534. row.put("m2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2a"));
  535. row.put("m3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3a"));
  536. row.put("m4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4a"));
  537. row.put("m5a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5a"));
  538. row.put("m6a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6a"));
  539. row.put("m7a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7a"));
  540. row.put("m8a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8a"));
  541. row.put("m9a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9a"));
  542. row.put("m10a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10a"));
  543. row.put("m11a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11a"));
  544. row.put("m12a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12a"));
  545. }
  546. }
  547. }
  548. for (Row row : rows) {
  549. //初始化
  550. row = addActualRow(row);
  551. Long sa_saleareaid1 = row.getLong("sa_saleareaid");
  552. Row actualRow = new Row();
  553. for (Row tempActualRow : actualRows) {
  554. if (tempActualRow.getLong("sa_saleareaid") == sa_saleareaid1) {
  555. actualRow.putAll(tempActualRow);
  556. }
  557. }
  558. row.putAll(actualRow);
  559. row.putAll(calculate(row, actualRow));
  560. }
  561. return getSucReturnObject().setData(rows).toString();
  562. }
  563. @API(title = "人员目标统计", apiversion = R.ID20220904134102.v1.class)
  564. @CACHEING
  565. public String queryList() throws YosException {
  566. //年份
  567. Long sa_salestargetbillid = content.getLong("sa_salestargetbillid");
  568. Rows billRows = dbConnect.runSqlQuery("SELECT assessmentindicators,year,statisticaldimension,sa_accountclassids FROM sa_salestargetbill WHERE sa_salestargetbillid=" + sa_salestargetbillid + " AND siteid ='" + siteid + "'");
  569. //考核指标类型
  570. String assessmentindicators = "";
  571. //统计维度
  572. String statisticaldimension="";
  573. //账户
  574. String sa_accountclassids="";
  575. long year = 2023;
  576. if (billRows.isNotEmpty()) {
  577. assessmentindicators=billRows.get(0).getString("assessmentindicators");
  578. statisticaldimension=billRows.get(0).getString("statisticaldimension");
  579. sa_accountclassids=billRows.get(0).getString("sa_accountclassids");
  580. year=billRows.get(0).getLong("year");
  581. }
  582. /*
  583. 过滤条件设置
  584. */
  585. StringBuffer where = new StringBuffer(" 1=1 ");
  586. if (content.containsKey("where")) {
  587. JSONObject whereObject = content.getJSONObject("where");
  588. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  589. where.append(" and(");
  590. where.append("t.name like'%").append(whereObject.getString("condition")).append("%' ");
  591. where.append("or t.depfullname like'%").append(whereObject.getString("condition")).append("%' ");
  592. where.append("or t.depname like'%").append(whereObject.getString("condition")).append("%' ");
  593. where.append("or t.position like'%").append(whereObject.getString("condition")).append("%' ");
  594. where.append(")");
  595. }
  596. }
  597. SQLFactory sqlFactory = new SQLFactory(this, "人员-目标详情列表");
  598. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  599. sqlFactory.addParameter_SQL("where", where);
  600. sqlFactory.addParameter("siteid", siteid);
  601. String sql = sqlFactory.getSQL();
  602. Rows rows = dbConnect.runSqlQuery(sql);
  603. Rows saleareas = dbConnect.runSqlQuery("select * from sa_salearea where parentid=0 and siteid='"+siteid+"'");
  604. Long sa_saleareaidtop=0l;
  605. if(!saleareas.isEmpty() && saleareas.size()==1){
  606. sa_saleareaidtop=saleareas.get(0).getLong("sa_saleareaid");
  607. for (Row row :rows) {
  608. if(row.getLong("parentid")==0){
  609. row.put("y1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1l"));
  610. row.put("y1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1h"));
  611. row.put("s1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1l"));
  612. row.put("s1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1h"));
  613. row.put("s2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2l"));
  614. row.put("s2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2h"));
  615. row.put("s3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3l"));
  616. row.put("s3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3h"));
  617. row.put("s4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4l"));
  618. row.put("s4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4h"));
  619. row.put("m1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1l"));
  620. row.put("m1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1h"));
  621. row.put("m2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2l"));
  622. row.put("m2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2h"));
  623. row.put("m3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3l"));
  624. row.put("m3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3h"));
  625. row.put("m4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4l"));
  626. row.put("m4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4h"));
  627. row.put("m5l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5l"));
  628. row.put("m5h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5h"));
  629. row.put("m6l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6l"));
  630. row.put("m6h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6h"));
  631. row.put("m7l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7l"));
  632. row.put("m7h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7h"));
  633. row.put("m8l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8l"));
  634. row.put("m8h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8h"));
  635. row.put("m9l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9l"));
  636. row.put("m9h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9h"));
  637. row.put("m10l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10l"));
  638. row.put("m10h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10h"));
  639. row.put("m11l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11l"));
  640. row.put("m11h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11h"));
  641. row.put("m12l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12l"));
  642. row.put("m12h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12h"));
  643. }
  644. }
  645. }
  646. Rows actualRows = new Rows();
  647. //开票
  648. if (assessmentindicators .equals("开票")) {
  649. String where1 =" 1=1 ";
  650. sqlFactory = new SQLFactory(this, "人员目标统计-开票");
  651. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  652. sqlFactory.addParameter_SQL("where", where);
  653. if(statisticaldimension.equals("订单审核")){
  654. where1=where1+" and t2.status='审核'";
  655. }else{
  656. where1=where1+" and t2.status='提交'";
  657. }
  658. if(StringUtils.isNotBlank(sa_accountclassids)){
  659. if(isJSONArray(sa_accountclassids)){
  660. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  661. if(!jsonArrayResult.isEmpty()){
  662. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  663. where1 = where1.replace("[", "(").replace("]", ")");
  664. }
  665. }
  666. }
  667. sqlFactory.addParameter_SQL("where1",where1);
  668. sqlFactory.addParameter("siteid", siteid);
  669. sqlFactory.addParameter("year", year);
  670. actualRows = dbConnect.runSqlQuery(sqlFactory);
  671. }
  672. //订单
  673. if (assessmentindicators .equals("订单")) {
  674. String where1 =" 1=1 ";
  675. sqlFactory = new SQLFactory(this, "人员目标统计-订单");
  676. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  677. sqlFactory.addParameter_SQL("where", where);
  678. if(statisticaldimension.equals("订单审核")){
  679. where1=where1+" and t2.status='审核'";
  680. }else{
  681. where1=where1+" and t2.status='提交'";
  682. }
  683. if(StringUtils.isNotBlank(sa_accountclassids)){
  684. if(isJSONArray(sa_accountclassids)){
  685. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  686. if(!jsonArrayResult.isEmpty()){
  687. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  688. where1 = where1.replace("[", "(").replace("]", ")");
  689. }
  690. }
  691. }
  692. sqlFactory.addParameter_SQL("where1",where1);
  693. sqlFactory.addParameter("siteid", siteid);
  694. sqlFactory.addParameter("year", year);
  695. actualRows = dbConnect.runSqlQuery(sqlFactory);
  696. }
  697. //出货
  698. if (assessmentindicators .equals("出货")) {
  699. String where1 =" 1=1 ";
  700. sqlFactory = new SQLFactory(this, "人员目标统计-出货");
  701. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  702. sqlFactory.addParameter_SQL("where", where);
  703. if(StringUtils.isNotBlank(sa_accountclassids)){
  704. if(isJSONArray(sa_accountclassids)){
  705. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  706. if(!jsonArrayResult.isEmpty()){
  707. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  708. where1 = where1.replace("[", "(").replace("]", ")");
  709. }
  710. }
  711. }
  712. sqlFactory.addParameter_SQL("where1",where1);
  713. sqlFactory.addParameter("siteid", siteid);
  714. sqlFactory.addParameter("year", year);
  715. actualRows = dbConnect.runSqlQuery(sqlFactory);
  716. }
  717. //收款
  718. if (assessmentindicators .equals("收款")) {
  719. String where1 =" 1=1 ";
  720. sqlFactory = new SQLFactory(this, "人员目标统计-收款");
  721. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  722. sqlFactory.addParameter_SQL("where", where);
  723. if(StringUtils.isNotBlank(statisticaldimension)){
  724. if(isJSONObject(statisticaldimension)){
  725. JSONObject jsonObjectResult = JSONObject.parseObject(statisticaldimension);
  726. if(!jsonObjectResult.isEmpty()){
  727. where1= where1+ " and (t1.class in"+ jsonObjectResult.get("type")+" or t1.subclass in"+ jsonObjectResult.get("mx")+")";
  728. where1 = where1.replace("[", "(").replace("]", ")");
  729. }
  730. }
  731. }
  732. if(StringUtils.isNotBlank(sa_accountclassids)){
  733. if(isJSONArray(sa_accountclassids)){
  734. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  735. if(!jsonArrayResult.isEmpty()){
  736. where1=where1+ " and t1.sa_accountclassid in"+jsonArrayResult;
  737. where1 = where1.replace("[", "(").replace("]", ")");
  738. }
  739. }
  740. }
  741. sqlFactory.addParameter_SQL("where1",where1);
  742. sqlFactory.addParameter("siteid", siteid);
  743. sqlFactory.addParameter("year", year);
  744. actualRows = dbConnect.runSqlQuery(sqlFactory);
  745. }
  746. if(!saleareas.isEmpty() && saleareas.size()==1){
  747. for (Row row :actualRows) {
  748. if(row.getLong("parentid")==0){
  749. row.put("y1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1a"));
  750. row.put("s1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1a"));
  751. row.put("s2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2a"));
  752. row.put("s3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3a"));
  753. row.put("s4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4a"));
  754. row.put("m1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1a"));
  755. row.put("m2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2a"));
  756. row.put("m3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3a"));
  757. row.put("m4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4a"));
  758. row.put("m5a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5a"));
  759. row.put("m6a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6a"));
  760. row.put("m7a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7a"));
  761. row.put("m8a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8a"));
  762. row.put("m9a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9a"));
  763. row.put("m10a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10a"));
  764. row.put("m11a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11a"));
  765. row.put("m12a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12a"));
  766. }
  767. }
  768. }
  769. for (Row row : rows) {
  770. //初始化
  771. row = addActualRow(row);
  772. Long sa_saleareaid = row.getLong("sa_saleareaid");
  773. Row actualRow = new Row();
  774. for (Row tempActualRow : actualRows) {
  775. if (tempActualRow.getLong("sa_saleareaid") == sa_saleareaid) {
  776. actualRow.putAll(tempActualRow);
  777. }
  778. }
  779. row.putAll(actualRow);
  780. row.putAll(calculate(row, actualRow));
  781. }
  782. return getSucReturnObject().setData(rows).toString();
  783. }
  784. //添加实际数据
  785. public Row addActualRow(Row targetRow) {
  786. String key = "y1a";
  787. targetRow.put(key, 0);
  788. for (int i = 1; i < 5; i++) {
  789. key = "s" + i + "a";
  790. targetRow.put(key, 0);
  791. }
  792. for (int i = 1; i < 13; i++) {
  793. key = "m" + i + "a";
  794. targetRow.put(key, 0);
  795. }
  796. return targetRow;
  797. }
  798. public Row calculate(Row targetRow, Row actualRow) {
  799. Row row = new Row();
  800. String key_l = "y1l";
  801. String key_h = "y1h";
  802. String key_a = "y1a";
  803. String key_p_l = "y1pl";
  804. String key_p_h = "y1ph";
  805. if (targetRow.getDouble(key_l) == 0) {
  806. row.put(key_p_l, 0);
  807. } else {
  808. row.put(key_p_l, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_l)));
  809. }
  810. if (targetRow.getDouble(key_h) == 0) {
  811. row.put(key_p_h, 0);
  812. } else {
  813. row.put(key_p_h, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_h)));
  814. }
  815. for (int i = 1; i < 5; i++) {
  816. key_l = "s" + i + "l";
  817. key_h = "s" + i + "h";
  818. key_a = "s" + i + "a";
  819. key_p_l = "s" + i + "pl";
  820. key_p_h = "s" + i + "ph";
  821. if (targetRow.getDouble(key_l) == 0) {
  822. row.put(key_p_l, 0);
  823. } else {
  824. row.put(key_p_l, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_l)));
  825. }
  826. if (targetRow.getDouble(key_h) == 0) {
  827. row.put(key_p_h, 0);
  828. } else {
  829. row.put(key_p_h, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_h)));
  830. }
  831. }
  832. for (int i = 1; i < 13; i++) {
  833. key_l = "m" + i + "l";
  834. key_h = "m" + i + "h";
  835. key_a = "m" + i + "a";
  836. key_p_l = "m" + i + "pl";
  837. key_p_h = "m" + i + "ph";
  838. if (targetRow.getDouble(key_l) == 0) {
  839. row.put(key_p_l, 0);
  840. } else {
  841. row.put(key_p_l, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_l)));
  842. }
  843. if (targetRow.getDouble(key_h) == 0) {
  844. row.put(key_p_h, 0);
  845. } else {
  846. row.put(key_p_h, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_h)));
  847. }
  848. }
  849. return row;
  850. }
  851. public double getPercent(Double a, Double b) {
  852. double c = a * 100 / b;
  853. BigDecimal bigDecimal = new BigDecimal(c);
  854. return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
  855. }
  856. }