personnelstatistics.java 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999
  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. Rows billRows = dbConnect.runSqlQuery("SELECT sa_salestargetbillid,assessmentindicators,statisticaldimension,sa_accountclassids FROM sa_salestargetbill WHERE year="+year+" AND siteid ='" + siteid + "' and targettype = '人员目标'");
  111. SQLFactory hrsqlFactory = new SQLFactory(this, "业务员列表查询");
  112. hrsqlFactory.addParameter("siteid", siteid);
  113. hrsqlFactory.addParameter("hrid", hrid);
  114. Rows hrrows = dbConnect.runSqlQuery(hrsqlFactory.getSQL());
  115. RowsMap hrrowsMap = hrrows.toRowsMap("sa_saleareaid");
  116. // if(sa_saleareaid==0){
  117. // if(hrrows.isNotEmpty()){
  118. // sa_saleareaid=hrrows.get(0).getLong("sa_saleareaid");
  119. // }
  120. // }
  121. SQLFactory areasqlFactory = new SQLFactory(this, "下级区域获取");
  122. areasqlFactory.addParameter("siteid", siteid);
  123. areasqlFactory.addParameter_in("sa_saleareaid", hrrows.toArrayList("sa_saleareaid",new ArrayList<>()));
  124. Rows arearows = dbConnect.runSqlQuery(areasqlFactory.getSQL());
  125. ArrayList<Long> areaList = arearows.toArrayList("sa_saleareaid",new ArrayList<Long>());
  126. //考核指标类型
  127. long sa_salestargetbillid = 0;
  128. String assessmentindicators="";
  129. //统计维度
  130. String statisticaldimension="";
  131. //账户
  132. String sa_accountclassids="";
  133. if (billRows.isNotEmpty()) {
  134. sa_salestargetbillid=billRows.get(0).getLong("sa_salestargetbillid");
  135. assessmentindicators=billRows.get(0).getString("assessmentindicators");
  136. statisticaldimension=billRows.get(0).getString("statisticaldimension");
  137. sa_accountclassids=billRows.get(0).getString("sa_accountclassids");
  138. }
  139. /*
  140. 过滤条件设置
  141. */
  142. StringBuffer where = new StringBuffer();
  143. if(areaList.size()>0){
  144. where = where.append(" 1=1 and t.sa_saleareaid in "+areaList.toString().replace("[", "(").replace("]", ")"));
  145. }else{
  146. where = where.append(" 1=1 ");
  147. }
  148. SQLFactory sqlFactory = new SQLFactory(this, "人员-目标详情列表");
  149. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  150. sqlFactory.addParameter_SQL("where", where);
  151. sqlFactory.addParameter("siteid", siteid);
  152. String sql = sqlFactory.getSQL();
  153. Rows rows = dbConnect.runSqlQuery(sql);
  154. Rows saleareas = dbConnect.runSqlQuery("select * from sa_salearea where parentid=0 and siteid='"+siteid+"'");
  155. Long sa_saleareaidtop=0l;
  156. if(!saleareas.isEmpty() && saleareas.size()==1){
  157. sa_saleareaidtop=saleareas.get(0).getLong("sa_saleareaid");
  158. for (Row row :rows) {
  159. if(row.getLong("parentid")==0){
  160. row.put("y1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1l"));
  161. row.put("y1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1h"));
  162. row.put("s1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1l"));
  163. row.put("s1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1h"));
  164. row.put("s2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2l"));
  165. row.put("s2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2h"));
  166. row.put("s3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3l"));
  167. row.put("s3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3h"));
  168. row.put("s4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4l"));
  169. row.put("s4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4h"));
  170. row.put("m1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1l"));
  171. row.put("m1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1h"));
  172. row.put("m2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2l"));
  173. row.put("m2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2h"));
  174. row.put("m3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3l"));
  175. row.put("m3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3h"));
  176. row.put("m4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4l"));
  177. row.put("m4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4h"));
  178. row.put("m5l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5l"));
  179. row.put("m5h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5h"));
  180. row.put("m6l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6l"));
  181. row.put("m6h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6h"));
  182. row.put("m7l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7l"));
  183. row.put("m7h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7h"));
  184. row.put("m8l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8l"));
  185. row.put("m8h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8h"));
  186. row.put("m9l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9l"));
  187. row.put("m9h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9h"));
  188. row.put("m10l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10l"));
  189. row.put("m10h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10h"));
  190. row.put("m11l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11l"));
  191. row.put("m11h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11h"));
  192. row.put("m12l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12l"));
  193. row.put("m12h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12h"));
  194. }
  195. }
  196. }
  197. Rows actualRows = new Rows();
  198. //开票
  199. if (assessmentindicators .equals("开票")) {
  200. String where1 =" 1=1 ";
  201. sqlFactory = new SQLFactory(this, "人员目标统计-开票");
  202. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  203. sqlFactory.addParameter_SQL("where", where);
  204. if(statisticaldimension.equals("订单审核")){
  205. where1=where1+" and t2.status='审核'";
  206. }else{
  207. where1=where1+" and t2.status='提交'";
  208. }
  209. if(StringUtils.isNotBlank(sa_accountclassids)){
  210. if(isJSONArray(sa_accountclassids)){
  211. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  212. if(!jsonArrayResult.isEmpty()){
  213. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  214. where1 = where1.replace("[", "(").replace("]", ")");
  215. }
  216. }
  217. }
  218. sqlFactory.addParameter_SQL("where1",where1);
  219. sqlFactory.addParameter("siteid", siteid);
  220. sqlFactory.addParameter("year", year);
  221. actualRows = dbConnect.runSqlQuery(sqlFactory);
  222. }
  223. //订单
  224. if (assessmentindicators .equals("订单")) {
  225. String where1 =" 1=1 ";
  226. sqlFactory = new SQLFactory(this, "人员目标统计-订单");
  227. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  228. sqlFactory.addParameter_SQL("where", where);
  229. if(statisticaldimension.equals("订单审核")){
  230. where1=where1+" and t2.status='审核'";
  231. }else{
  232. where1=where1+" and t2.status='提交'";
  233. }
  234. if(StringUtils.isNotBlank(sa_accountclassids)){
  235. if(isJSONArray(sa_accountclassids)){
  236. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  237. if(!jsonArrayResult.isEmpty()){
  238. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  239. where1 = where1.replace("[", "(").replace("]", ")");
  240. }
  241. }
  242. }
  243. sqlFactory.addParameter_SQL("where1",where1);
  244. sqlFactory.addParameter("siteid", siteid);
  245. sqlFactory.addParameter("year", year);
  246. actualRows = dbConnect.runSqlQuery(sqlFactory);
  247. }
  248. //出货
  249. if (assessmentindicators .equals("出货")) {
  250. String where1 =" 1=1 ";
  251. sqlFactory = new SQLFactory(this, "人员目标统计-出货");
  252. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  253. sqlFactory.addParameter_SQL("where", where);
  254. if(StringUtils.isNotBlank(sa_accountclassids)){
  255. if(isJSONArray(sa_accountclassids)){
  256. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  257. if(!jsonArrayResult.isEmpty()){
  258. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  259. where1 = where1.replace("[", "(").replace("]", ")");
  260. }
  261. }
  262. }
  263. sqlFactory.addParameter_SQL("where1",where1);
  264. sqlFactory.addParameter("siteid", siteid);
  265. sqlFactory.addParameter("year", year);
  266. actualRows = dbConnect.runSqlQuery(sqlFactory);
  267. }
  268. //收款
  269. if (assessmentindicators .equals("收款")) {
  270. String where1 =" 1=1 ";
  271. sqlFactory = new SQLFactory(this, "人员目标统计-收款");
  272. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  273. sqlFactory.addParameter_SQL("where", where);
  274. if(StringUtils.isNotBlank(statisticaldimension)){
  275. if(isJSONObject(statisticaldimension)){
  276. JSONObject jsonObjectResult = JSONObject.parseObject(statisticaldimension);
  277. if(!jsonObjectResult.isEmpty()){
  278. StringBuffer stringBuffer= new StringBuffer();
  279. if(!((JSONArray)jsonObjectResult.get("type")).isEmpty()){
  280. stringBuffer.append(" or t1.class in"+ jsonObjectResult.get("type"));
  281. }
  282. if(!((JSONArray)jsonObjectResult.get("mx")).isEmpty()){
  283. stringBuffer.append(" or t1.subclass in"+ jsonObjectResult.get("mx"));
  284. }
  285. if(((JSONArray)jsonObjectResult.get("mx")).isEmpty() && ((JSONArray)jsonObjectResult.get("type")).isEmpty()){
  286. stringBuffer.append(" 1=1 ");
  287. }
  288. where1= where1+ " and ("+(stringBuffer.toString()).replaceFirst("or", "")+")";
  289. where1 = where1.replace("[", "(").replace("]", ")");
  290. }
  291. }
  292. }
  293. if(StringUtils.isNotBlank(sa_accountclassids)){
  294. if(isJSONArray(sa_accountclassids)){
  295. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  296. if(!jsonArrayResult.isEmpty()){
  297. where1=where1+ " and t1.sa_accountclassid in"+jsonArrayResult;
  298. where1 = where1.replace("[", "(").replace("]", ")");
  299. }
  300. }
  301. }
  302. sqlFactory.addParameter_SQL("where1",where1);
  303. sqlFactory.addParameter("siteid", siteid);
  304. sqlFactory.addParameter("year", year);
  305. actualRows = dbConnect.runSqlQuery(sqlFactory);
  306. }
  307. if(!saleareas.isEmpty() && saleareas.size()==1){
  308. for (Row row :actualRows) {
  309. if(row.getLong("parentid")==0){
  310. row.put("y1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1a"));
  311. row.put("s1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1a"));
  312. row.put("s2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2a"));
  313. row.put("s3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3a"));
  314. row.put("s4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4a"));
  315. row.put("m1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1a"));
  316. row.put("m2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2a"));
  317. row.put("m3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3a"));
  318. row.put("m4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4a"));
  319. row.put("m5a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5a"));
  320. row.put("m6a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6a"));
  321. row.put("m7a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7a"));
  322. row.put("m8a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8a"));
  323. row.put("m9a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9a"));
  324. row.put("m10a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10a"));
  325. row.put("m11a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11a"));
  326. row.put("m12a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12a"));
  327. }
  328. }
  329. }
  330. Rows rowsResult =new Rows();
  331. for (Row row : rows) {
  332. if(hrrows.size()!=0){
  333. if(hrrowsMap.containsKey(row.getString("sa_saleareaid"))){
  334. rowsResult.add(row);
  335. }
  336. }else{
  337. rowsResult.add(row);
  338. }
  339. }
  340. for (Row row : rowsResult) {
  341. //初始化
  342. row = addActualRow(row);
  343. Long sa_saleareaid1 = row.getLong("sa_saleareaid");
  344. Row actualRow = new Row();
  345. for (Row tempActualRow : actualRows) {
  346. if (tempActualRow.getLong("sa_saleareaid") == sa_saleareaid1) {
  347. actualRow.putAll(tempActualRow);
  348. }
  349. }
  350. row.putAll(actualRow);
  351. row.putAll(calculate(row, actualRow));
  352. }
  353. Row rowResult = new Row();
  354. rowResult.put("y1l",rowsResult.sum("y1l"));
  355. rowResult.put("y1a",rowsResult.sum("y1a"));
  356. for (int i = 1; i < 5; i++) {
  357. rowResult.put("s" + i + "l",rowsResult.sum("s" + i + "l"));
  358. rowResult.put("s" + i + "a",rowsResult.sum("s" + i + "a"));
  359. }
  360. for (int i = 1; i < 13; i++) {
  361. rowResult.put("m" + i + "l",rowsResult.sum("m" + i + "l"));
  362. rowResult.put("m" + i + "a",rowsResult.sum("m" + i + "a"));
  363. }
  364. rowsResult = new Rows();
  365. rowsResult.add(rowResult);
  366. return getSucReturnObject().setData(rowsResult).toString();
  367. }
  368. @API(title = "人员目标统计列表(区域经理)", apiversion = R.ID20231018103303.v1.class)
  369. @CACHEING
  370. public String queryList_areamanagerList() throws YosException {
  371. //年份
  372. Calendar cal = Calendar.getInstance();
  373. int year = cal.get(Calendar.YEAR);
  374. Rows billRows = dbConnect.runSqlQuery("SELECT sa_salestargetbillid,assessmentindicators,statisticaldimension,sa_accountclassids FROM sa_salestargetbill WHERE year="+year+" AND siteid ='" + siteid + "' and targettype = '人员目标'");
  375. SQLFactory hrsqlFactory = new SQLFactory(this, "业务员列表查询");
  376. hrsqlFactory.addParameter("siteid", siteid);
  377. hrsqlFactory.addParameter("hrid", hrid);
  378. Rows hrrows = dbConnect.runSqlQuery(hrsqlFactory.getSQL());
  379. SQLFactory areasqlFactory = new SQLFactory(this, "下级区域获取");
  380. areasqlFactory.addParameter("siteid", siteid);
  381. areasqlFactory.addParameter_in("sa_saleareaid", hrrows.toArrayList("sa_saleareaid",new ArrayList<>()));
  382. Rows arearows = dbConnect.runSqlQuery(areasqlFactory.getSQL());
  383. ArrayList<Long> areaList = arearows.toArrayList("sa_saleareaid",new ArrayList<Long>());
  384. areaList.add(0l);
  385. //考核指标类型
  386. long sa_salestargetbillid = 0;
  387. String assessmentindicators="";
  388. //统计维度
  389. String statisticaldimension="";
  390. //账户
  391. String sa_accountclassids="";
  392. if (billRows.isNotEmpty()) {
  393. sa_salestargetbillid=billRows.get(0).getLong("sa_salestargetbillid");
  394. assessmentindicators=billRows.get(0).getString("assessmentindicators");
  395. statisticaldimension=billRows.get(0).getString("statisticaldimension");
  396. sa_accountclassids=billRows.get(0).getString("sa_accountclassids");
  397. }
  398. /*
  399. 过滤条件设置
  400. */
  401. StringBuffer where = new StringBuffer(" 1=1 and t.sa_saleareaid in "+areaList.toString().replace("[", "(").replace("]", ")"));
  402. SQLFactory sqlFactory = new SQLFactory(this, "人员-目标详情列表");
  403. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  404. sqlFactory.addParameter_SQL("where", where);
  405. sqlFactory.addParameter("siteid", siteid);
  406. String sql = sqlFactory.getSQL();
  407. Rows rows = dbConnect.runSqlQuery(sql);
  408. Rows saleareas = dbConnect.runSqlQuery("select * from sa_salearea where parentid=0 and siteid='"+siteid+"'");
  409. Long sa_saleareaidtop=0l;
  410. if(!saleareas.isEmpty() && saleareas.size()==1){
  411. sa_saleareaidtop=saleareas.get(0).getLong("sa_saleareaid");
  412. for (Row row :rows) {
  413. if(row.getLong("parentid")==0){
  414. row.put("y1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1l"));
  415. row.put("y1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1h"));
  416. row.put("s1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1l"));
  417. row.put("s1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1h"));
  418. row.put("s2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2l"));
  419. row.put("s2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2h"));
  420. row.put("s3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3l"));
  421. row.put("s3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3h"));
  422. row.put("s4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4l"));
  423. row.put("s4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4h"));
  424. row.put("m1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1l"));
  425. row.put("m1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1h"));
  426. row.put("m2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2l"));
  427. row.put("m2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2h"));
  428. row.put("m3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3l"));
  429. row.put("m3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3h"));
  430. row.put("m4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4l"));
  431. row.put("m4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4h"));
  432. row.put("m5l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5l"));
  433. row.put("m5h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5h"));
  434. row.put("m6l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6l"));
  435. row.put("m6h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6h"));
  436. row.put("m7l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7l"));
  437. row.put("m7h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7h"));
  438. row.put("m8l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8l"));
  439. row.put("m8h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8h"));
  440. row.put("m9l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9l"));
  441. row.put("m9h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9h"));
  442. row.put("m10l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10l"));
  443. row.put("m10h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10h"));
  444. row.put("m11l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11l"));
  445. row.put("m11h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11h"));
  446. row.put("m12l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12l"));
  447. row.put("m12h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12h"));
  448. }
  449. }
  450. }
  451. Rows actualRows = new Rows();
  452. //开票
  453. if (assessmentindicators .equals("开票")) {
  454. String where1 =" 1=1 ";
  455. sqlFactory = new SQLFactory(this, "人员目标统计-开票");
  456. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  457. sqlFactory.addParameter_SQL("where", where);
  458. if(statisticaldimension.equals("订单审核")){
  459. where1=where1+" and t2.status='审核'";
  460. }else{
  461. where1=where1+" and t2.status='提交'";
  462. }
  463. if(StringUtils.isNotBlank(sa_accountclassids)){
  464. if(isJSONArray(sa_accountclassids)){
  465. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  466. if(!jsonArrayResult.isEmpty()){
  467. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  468. where1 = where1.replace("[", "(").replace("]", ")");
  469. }
  470. }
  471. }
  472. sqlFactory.addParameter_SQL("where1",where1);
  473. sqlFactory.addParameter("siteid", siteid);
  474. sqlFactory.addParameter("year", year);
  475. actualRows = dbConnect.runSqlQuery(sqlFactory);
  476. }
  477. //订单
  478. if (assessmentindicators .equals("订单")) {
  479. String where1 =" 1=1 ";
  480. sqlFactory = new SQLFactory(this, "人员目标统计-订单");
  481. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  482. sqlFactory.addParameter_SQL("where", where);
  483. if(statisticaldimension.equals("订单审核")){
  484. where1=where1+" and t2.status='审核'";
  485. }else{
  486. where1=where1+" and t2.status='提交'";
  487. }
  488. if(StringUtils.isNotBlank(sa_accountclassids)){
  489. if(isJSONArray(sa_accountclassids)){
  490. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  491. if(!jsonArrayResult.isEmpty()){
  492. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  493. where1 = where1.replace("[", "(").replace("]", ")");
  494. }
  495. }
  496. }
  497. sqlFactory.addParameter_SQL("where1",where1);
  498. sqlFactory.addParameter("siteid", siteid);
  499. sqlFactory.addParameter("year", year);
  500. actualRows = dbConnect.runSqlQuery(sqlFactory);
  501. }
  502. //出货
  503. if (assessmentindicators .equals("出货")) {
  504. String where1 =" 1=1 ";
  505. sqlFactory = new SQLFactory(this, "人员目标统计-出货");
  506. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  507. sqlFactory.addParameter_SQL("where", where);
  508. if(StringUtils.isNotBlank(sa_accountclassids)){
  509. if(isJSONArray(sa_accountclassids)){
  510. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  511. if(!jsonArrayResult.isEmpty()){
  512. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  513. where1 = where1.replace("[", "(").replace("]", ")");
  514. }
  515. }
  516. }
  517. sqlFactory.addParameter_SQL("where1",where1);
  518. sqlFactory.addParameter("siteid", siteid);
  519. sqlFactory.addParameter("year", year);
  520. actualRows = dbConnect.runSqlQuery(sqlFactory);
  521. }
  522. //收款
  523. if (assessmentindicators .equals("收款")) {
  524. String where1 =" 1=1 ";
  525. sqlFactory = new SQLFactory(this, "人员目标统计-收款");
  526. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  527. sqlFactory.addParameter_SQL("where", where);
  528. if(StringUtils.isNotBlank(statisticaldimension)){
  529. if(isJSONObject(statisticaldimension)){
  530. JSONObject jsonObjectResult = JSONObject.parseObject(statisticaldimension);
  531. if(!jsonObjectResult.isEmpty()){
  532. StringBuffer stringBuffer= new StringBuffer();
  533. if(!((JSONArray)jsonObjectResult.get("type")).isEmpty()){
  534. stringBuffer.append(" or t1.class in"+ jsonObjectResult.get("type"));
  535. }
  536. if(!((JSONArray)jsonObjectResult.get("mx")).isEmpty()){
  537. stringBuffer.append(" or t1.subclass in"+ jsonObjectResult.get("mx"));
  538. }
  539. if(((JSONArray)jsonObjectResult.get("mx")).isEmpty() && ((JSONArray)jsonObjectResult.get("type")).isEmpty()){
  540. stringBuffer.append(" 1=1 ");
  541. }
  542. where1= where1+ " and ("+(stringBuffer.toString()).replaceFirst("or", "")+")";
  543. where1 = where1.replace("[", "(").replace("]", ")");
  544. }
  545. }
  546. }
  547. if(StringUtils.isNotBlank(sa_accountclassids)){
  548. if(isJSONArray(sa_accountclassids)){
  549. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  550. if(!jsonArrayResult.isEmpty()){
  551. where1=where1+ " and t1.sa_accountclassid in"+jsonArrayResult;
  552. where1 = where1.replace("[", "(").replace("]", ")");
  553. }
  554. }
  555. }
  556. sqlFactory.addParameter_SQL("where1",where1);
  557. sqlFactory.addParameter("siteid", siteid);
  558. sqlFactory.addParameter("year", year);
  559. actualRows = dbConnect.runSqlQuery(sqlFactory);
  560. }
  561. if(!saleareas.isEmpty() && saleareas.size()==1){
  562. for (Row row :actualRows) {
  563. if(row.getLong("parentid")==0){
  564. row.put("y1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1a"));
  565. row.put("s1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1a"));
  566. row.put("s2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2a"));
  567. row.put("s3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3a"));
  568. row.put("s4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4a"));
  569. row.put("m1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1a"));
  570. row.put("m2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2a"));
  571. row.put("m3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3a"));
  572. row.put("m4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4a"));
  573. row.put("m5a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5a"));
  574. row.put("m6a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6a"));
  575. row.put("m7a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7a"));
  576. row.put("m8a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8a"));
  577. row.put("m9a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9a"));
  578. row.put("m10a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10a"));
  579. row.put("m11a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11a"));
  580. row.put("m12a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12a"));
  581. }
  582. }
  583. }
  584. for (Row row : rows) {
  585. //初始化
  586. row = addActualRow(row);
  587. Long sa_saleareaid1 = row.getLong("sa_saleareaid");
  588. Row actualRow = new Row();
  589. for (Row tempActualRow : actualRows) {
  590. if (tempActualRow.getLong("sa_saleareaid") == sa_saleareaid1) {
  591. actualRow.putAll(tempActualRow);
  592. }
  593. }
  594. row.putAll(actualRow);
  595. row.putAll(calculate(row, actualRow));
  596. }
  597. return getSucReturnObject().setData(rows).toString();
  598. }
  599. @API(title = "人员目标统计", apiversion = R.ID20220904134102.v1.class)
  600. @CACHEING
  601. public String queryList() throws YosException {
  602. //年份
  603. Long sa_salestargetbillid = content.getLong("sa_salestargetbillid");
  604. Rows billRows = dbConnect.runSqlQuery("SELECT assessmentindicators,year,statisticaldimension,sa_accountclassids FROM sa_salestargetbill WHERE sa_salestargetbillid=" + sa_salestargetbillid + " AND siteid ='" + siteid + "'");
  605. //考核指标类型
  606. String assessmentindicators = "";
  607. //统计维度
  608. String statisticaldimension="";
  609. //账户
  610. String sa_accountclassids="";
  611. long year = 2023;
  612. if (billRows.isNotEmpty()) {
  613. assessmentindicators=billRows.get(0).getString("assessmentindicators");
  614. statisticaldimension=billRows.get(0).getString("statisticaldimension");
  615. sa_accountclassids=billRows.get(0).getString("sa_accountclassids");
  616. year=billRows.get(0).getLong("year");
  617. }
  618. /*
  619. 过滤条件设置
  620. */
  621. StringBuffer where = new StringBuffer(" 1=1 ");
  622. if (content.containsKey("where")) {
  623. JSONObject whereObject = content.getJSONObject("where");
  624. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  625. where.append(" and(");
  626. where.append("t.name like'%").append(whereObject.getString("condition")).append("%' ");
  627. where.append("or t.depfullname like'%").append(whereObject.getString("condition")).append("%' ");
  628. where.append("or t.depname like'%").append(whereObject.getString("condition")).append("%' ");
  629. where.append("or t.position like'%").append(whereObject.getString("condition")).append("%' ");
  630. where.append(")");
  631. }
  632. }
  633. SQLFactory sqlFactory = new SQLFactory(this, "人员-目标详情列表");
  634. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  635. sqlFactory.addParameter_SQL("where", where);
  636. sqlFactory.addParameter("siteid", siteid);
  637. String sql = sqlFactory.getSQL();
  638. Rows rows = dbConnect.runSqlQuery(sql);
  639. Rows saleareas = dbConnect.runSqlQuery("select * from sa_salearea where parentid=0 and siteid='"+siteid+"'");
  640. Long sa_saleareaidtop=0l;
  641. if(!saleareas.isEmpty() && saleareas.size()==1){
  642. sa_saleareaidtop=saleareas.get(0).getLong("sa_saleareaid");
  643. for (Row row :rows) {
  644. if(row.getLong("parentid")==0){
  645. row.put("y1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1l"));
  646. row.put("y1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1h"));
  647. row.put("s1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1l"));
  648. row.put("s1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1h"));
  649. row.put("s2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2l"));
  650. row.put("s2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2h"));
  651. row.put("s3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3l"));
  652. row.put("s3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3h"));
  653. row.put("s4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4l"));
  654. row.put("s4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4h"));
  655. row.put("m1l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1l"));
  656. row.put("m1h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1h"));
  657. row.put("m2l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2l"));
  658. row.put("m2h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2h"));
  659. row.put("m3l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3l"));
  660. row.put("m3h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3h"));
  661. row.put("m4l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4l"));
  662. row.put("m4h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4h"));
  663. row.put("m5l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5l"));
  664. row.put("m5h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5h"));
  665. row.put("m6l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6l"));
  666. row.put("m6h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6h"));
  667. row.put("m7l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7l"));
  668. row.put("m7h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7h"));
  669. row.put("m8l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8l"));
  670. row.put("m8h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8h"));
  671. row.put("m9l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9l"));
  672. row.put("m9h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9h"));
  673. row.put("m10l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10l"));
  674. row.put("m10h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10h"));
  675. row.put("m11l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11l"));
  676. row.put("m11h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11h"));
  677. row.put("m12l",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12l"));
  678. row.put("m12h",rows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12h"));
  679. }
  680. }
  681. }
  682. Rows actualRows = new Rows();
  683. //开票
  684. if (assessmentindicators .equals("开票")) {
  685. String where1 =" 1=1 ";
  686. sqlFactory = new SQLFactory(this, "人员目标统计-开票");
  687. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  688. sqlFactory.addParameter_SQL("where", where);
  689. if(statisticaldimension.equals("订单审核")){
  690. where1=where1+" and t2.status='审核'";
  691. }else{
  692. where1=where1+" and t2.status='提交'";
  693. }
  694. if(StringUtils.isNotBlank(sa_accountclassids)){
  695. if(isJSONArray(sa_accountclassids)){
  696. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  697. if(!jsonArrayResult.isEmpty()){
  698. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  699. where1 = where1.replace("[", "(").replace("]", ")");
  700. }
  701. }
  702. }
  703. sqlFactory.addParameter_SQL("where1",where1);
  704. sqlFactory.addParameter("siteid", siteid);
  705. sqlFactory.addParameter("year", year);
  706. actualRows = dbConnect.runSqlQuery(sqlFactory);
  707. }
  708. //订单
  709. if (assessmentindicators .equals("订单")) {
  710. String where1 =" 1=1 ";
  711. sqlFactory = new SQLFactory(this, "人员目标统计-订单");
  712. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  713. sqlFactory.addParameter_SQL("where", where);
  714. if(statisticaldimension.equals("订单审核")){
  715. where1=where1+" and t2.status='审核'";
  716. }else{
  717. where1=where1+" and t2.status='提交'";
  718. }
  719. if(StringUtils.isNotBlank(sa_accountclassids)){
  720. if(isJSONArray(sa_accountclassids)){
  721. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  722. if(!jsonArrayResult.isEmpty()){
  723. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  724. where1 = where1.replace("[", "(").replace("]", ")");
  725. }
  726. }
  727. }
  728. sqlFactory.addParameter_SQL("where1",where1);
  729. sqlFactory.addParameter("siteid", siteid);
  730. sqlFactory.addParameter("year", year);
  731. actualRows = dbConnect.runSqlQuery(sqlFactory);
  732. }
  733. //出货
  734. if (assessmentindicators .equals("出货")) {
  735. String where1 =" 1=1 ";
  736. sqlFactory = new SQLFactory(this, "人员目标统计-出货");
  737. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  738. sqlFactory.addParameter_SQL("where", where);
  739. if(StringUtils.isNotBlank(sa_accountclassids)){
  740. if(isJSONArray(sa_accountclassids)){
  741. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  742. if(!jsonArrayResult.isEmpty()){
  743. where1=where1+ " and t2.sa_accountclassid in"+jsonArrayResult;
  744. where1 = where1.replace("[", "(").replace("]", ")");
  745. }
  746. }
  747. }
  748. sqlFactory.addParameter_SQL("where1",where1);
  749. sqlFactory.addParameter("siteid", siteid);
  750. sqlFactory.addParameter("year", year);
  751. actualRows = dbConnect.runSqlQuery(sqlFactory);
  752. }
  753. //收款
  754. if (assessmentindicators .equals("收款")) {
  755. String where1 =" 1=1 ";
  756. sqlFactory = new SQLFactory(this, "人员目标统计-收款");
  757. sqlFactory.addParameter("sa_salestargetbillid", sa_salestargetbillid);
  758. sqlFactory.addParameter_SQL("where", where);
  759. if(StringUtils.isNotBlank(statisticaldimension)){
  760. if(isJSONObject(statisticaldimension)){
  761. JSONObject jsonObjectResult = JSONObject.parseObject(statisticaldimension);
  762. if(!jsonObjectResult.isEmpty()){
  763. StringBuffer stringBuffer= new StringBuffer();
  764. if(!((JSONArray)jsonObjectResult.get("type")).isEmpty()){
  765. stringBuffer.append(" or t1.class in"+ jsonObjectResult.get("type"));
  766. }
  767. if(!((JSONArray)jsonObjectResult.get("mx")).isEmpty()){
  768. stringBuffer.append(" or t1.subclass in"+ jsonObjectResult.get("mx"));
  769. }
  770. if(((JSONArray)jsonObjectResult.get("mx")).isEmpty() && ((JSONArray)jsonObjectResult.get("type")).isEmpty()){
  771. stringBuffer.append(" 1=1 ");
  772. }
  773. where1= where1+ " and ("+(stringBuffer.toString()).replaceFirst("or", "")+")";
  774. where1 = where1.replace("[", "(").replace("]", ")");
  775. }
  776. }
  777. }
  778. if(StringUtils.isNotBlank(sa_accountclassids)){
  779. if(isJSONArray(sa_accountclassids)){
  780. JSONArray jsonArrayResult = JSONArray.parseArray(sa_accountclassids);
  781. if(!jsonArrayResult.isEmpty()){
  782. where1=where1+ " and t1.sa_accountclassid in"+jsonArrayResult;
  783. where1 = where1.replace("[", "(").replace("]", ")");
  784. }
  785. }
  786. }
  787. sqlFactory.addParameter_SQL("where1",where1);
  788. sqlFactory.addParameter("siteid", siteid);
  789. sqlFactory.addParameter("year", year);
  790. actualRows = dbConnect.runSqlQuery(sqlFactory);
  791. }
  792. if(!saleareas.isEmpty() && saleareas.size()==1){
  793. for (Row row :actualRows) {
  794. if(row.getLong("parentid")==0){
  795. row.put("y1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("y1a"));
  796. row.put("s1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s1a"));
  797. row.put("s2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s2a"));
  798. row.put("s3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s3a"));
  799. row.put("s4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("s4a"));
  800. row.put("m1a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m1a"));
  801. row.put("m2a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m2a"));
  802. row.put("m3a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m3a"));
  803. row.put("m4a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m4a"));
  804. row.put("m5a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m5a"));
  805. row.put("m6a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m6a"));
  806. row.put("m7a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m7a"));
  807. row.put("m8a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m8a"));
  808. row.put("m9a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m9a"));
  809. row.put("m10a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m10a"));
  810. row.put("m11a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m11a"));
  811. row.put("m12a",actualRows.toRowsMap("parentid").get(sa_saleareaidtop.toString()).sum("m12a"));
  812. }
  813. }
  814. }
  815. for (Row row : rows) {
  816. //初始化
  817. row = addActualRow(row);
  818. Long sa_saleareaid = row.getLong("sa_saleareaid");
  819. Row actualRow = new Row();
  820. for (Row tempActualRow : actualRows) {
  821. if (tempActualRow.getLong("sa_saleareaid") == sa_saleareaid) {
  822. actualRow.putAll(tempActualRow);
  823. }
  824. }
  825. row.putAll(actualRow);
  826. row.putAll(calculate(row, actualRow));
  827. }
  828. return getSucReturnObject().setData(rows).toString();
  829. }
  830. //添加实际数据
  831. public Row addActualRow(Row targetRow) {
  832. String key = "y1a";
  833. targetRow.put(key, 0);
  834. for (int i = 1; i < 5; i++) {
  835. key = "s" + i + "a";
  836. targetRow.put(key, 0);
  837. }
  838. for (int i = 1; i < 13; i++) {
  839. key = "m" + i + "a";
  840. targetRow.put(key, 0);
  841. }
  842. return targetRow;
  843. }
  844. public Row calculate(Row targetRow, Row actualRow) {
  845. Row row = new Row();
  846. String key_l = "y1l";
  847. String key_h = "y1h";
  848. String key_a = "y1a";
  849. String key_p_l = "y1pl";
  850. String key_p_h = "y1ph";
  851. if (targetRow.getDouble(key_l) == 0) {
  852. row.put(key_p_l, 0);
  853. } else {
  854. row.put(key_p_l, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_l)));
  855. }
  856. if (targetRow.getDouble(key_h) == 0) {
  857. row.put(key_p_h, 0);
  858. } else {
  859. row.put(key_p_h, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_h)));
  860. }
  861. for (int i = 1; i < 5; i++) {
  862. key_l = "s" + i + "l";
  863. key_h = "s" + i + "h";
  864. key_a = "s" + i + "a";
  865. key_p_l = "s" + i + "pl";
  866. key_p_h = "s" + i + "ph";
  867. if (targetRow.getDouble(key_l) == 0) {
  868. row.put(key_p_l, 0);
  869. } else {
  870. row.put(key_p_l, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_l)));
  871. }
  872. if (targetRow.getDouble(key_h) == 0) {
  873. row.put(key_p_h, 0);
  874. } else {
  875. row.put(key_p_h, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_h)));
  876. }
  877. }
  878. for (int i = 1; i < 13; i++) {
  879. key_l = "m" + i + "l";
  880. key_h = "m" + i + "h";
  881. key_a = "m" + i + "a";
  882. key_p_l = "m" + i + "pl";
  883. key_p_h = "m" + i + "ph";
  884. if (targetRow.getDouble(key_l) == 0) {
  885. row.put(key_p_l, 0);
  886. } else {
  887. row.put(key_p_l, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_l)));
  888. }
  889. if (targetRow.getDouble(key_h) == 0) {
  890. row.put(key_p_h, 0);
  891. } else {
  892. row.put(key_p_h, getPercent(actualRow.getDouble(key_a), targetRow.getDouble(key_h)));
  893. }
  894. }
  895. return row;
  896. }
  897. public double getPercent(Double a, Double b) {
  898. double c = a * 100 / b;
  899. BigDecimal bigDecimal = new BigDecimal(c);
  900. return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
  901. }
  902. }